Archiv der Kategorie: Linux Howto

THINK UNBLOG GNU/Linux Tutorials Howto Workaround DevOps Code.

E-Mail und Anhang mit sendmail versenden

sendmail e-mail mit echo Befehl und Anhang versenden. sendmail implementiert die Kompatibilitätsschnittstelle von Postfix und ist in fast allen unixoiden Betriebssysteme enthalten, der Mail Transfer Agent, dessen Geschichte bis in die frühen 1980er Jahre zurückreicht.

E-Mail mit echo sendmail versenden

E-Mail und Anhang mit sendmail versenden

sendmail versendet E-Mails über das Internet an einen bestimmten Empfänger. Dies kann durch den Befehl „sendmail“ und „echo“ in einer Linux Kommando-zeile erfolgen, und kann auch innerhalb eines Programmier-skripts verwendet werden.

quote   sendmail: fatal: open /etc/postfix/main.cf: No such file or directory

Vergewissere dich das sendmail auf dem Linux Host vorhanden ist, mit dem Befehl which sendmail oder man sendmail. Falls sendmail nicht gefunden wird, und kein MTA wie Postfix installiert ist, wird sendmail wie folgt bereitgestellt.

$ sudo apt install sendmail -y

sendmail in der Kommandozeile

Das folgende Beispiel zeigt ein Linux-Befehl zum Senden einer E-Mail Nachricht aus der Kommandozeile mit sendmail unter verwendung des echo Befehl.

$ echo -e "Subject:Test Mail using sendmail \nThis is a Test Message\n" | sendmail youremail@example.tld

Der nächste Befehl sendet eine E-Mail mit Absender (From:) Adresse.

$ /usr/sbin/sendmail youremail@example.tld
From: nobody@example.tld
Subject: Test Mail using sendmail
This is a Test Message
.

  Der Punkt (.) beendet den Editor und die E-Mail wird versendet.

Das Beispiel oben erstellt interaktiv mit jeder Zeile eine E-Mail. Es wird eine Nachricht mit dem Betreff „Test Mail using sendmail“ dem Posteingang von youremail@example.tld zugestellt. Die Empfänger E-Mail-Adresse entsprechend ändern. Vergewissere dich, das sendmail auf dem Host vorhanden ist, und es dem Host erlaubt ist, E-Mails zu versenden.

sendmail eraubt die Pipeline Anweisung, dabei ist es möglich eine Nachricht mit einer Textdatei zu versenden.

$ /usr/sbin/sendmail < message.txt -t -i youremail@example.tld

Der Inhalt der Textdatei message.txt hier in diesem Beispiel wie folgt.

From: nobody@example.tld
Subject: Test Mail using sendmail
This is a Test Message

  Die sendmail Option -i behandelt das lesen der Nachricht aus der Standard Eingabe ohne Punkt (.) am Zeilenende. Die Option -t Extrahiert die Empfänger aus den Nachrichtenkopfzeilen und wird allen in der Befehlszeile angegebenen Empfängern hinzugefügt.

E-Mail und Datei mit sendmail versenden

Administratoren stehen oft vor der Aufgabe, eine E-Mail direkt von einem Host zu versenden, dabei steht kein E-Mail Client zur Verfügung. In diesem Beispiel wird mit „sendmail“ eine Datei als Anhang versendet.

Der Zweck ist es, auf einem Postfix MTA die als SPAM abgewiesenen Zustellversuche „blocked using“ herauszufiltern. Um das GZ-Archive zu versenden, muss Postfix auf dem Host konfiguriert sein. Es kann auch ein anderer autorisierter MTA sein, oder es wird ein externes SMTP-Relay verwendet.

#!/bin/bash
cat /var/log/maillog* | grep 'blocked using' | grep 'middleton.tld' > /tmp/blocked.txt
gzip -f /tmp/blocked.txt
( echo "to: sysop@example.tld"
  echo "from: no_reply@$HOSTNAME"
  echo "subject: Report of messages blocked by $HOSTNAME"
  echo "mime-version: 1.0"
  echo "content-type: multipart/related; boundary=messageBoundary"
  echo
  echo "--messageBoundary"
  echo "content-type: text/plain"
  echo
  echo "Please find the document attached."
  echo
  echo "--messageBoundary"
  echo "content-type: text/plain; name=blocked.txt.gz"
  echo "content-transfer-encoding: base64"
  echo
  openssl base64 < /tmp/blocked.txt.gz) | sendmail -t -i

  Option -t extrahiert die Empfänger aus der Nachrichtenkopfzeile. Mit der Option -i ohne . (Punkt) am Ende der Eingabe.

Fazit

Dieses Beispiel zeigt die Anwendung von sendmail, um eine E-Mail mit echo Befehl und Anhang aus der Shell zu versenden. Durch ändern der einzelnen Zeilen können viele weitere Anwendungszwecke zum Zug kommen. Die Base64 Kodierung wird durch openssl vorgenommen. Die echo Anweisungen erzeugt den MIME-MessageBody.

PHP-Version und Modul wechseln in Debian mit Apache2

Die PHP-Version und Modul auf Debian zwischen mehreren PHP-Versionen wechseln und für Apache2 aktivieren.

Auf einem Debian 10 und Debian 11 können mehrere PHP-Versionen installiert sein, dabei wird eine PHP-Version für das System und den Apache2-Webserver festgelegt und aktiviert.

Gehen wir davon aus, dass mehrere PHP-Versionen auf dem Debian-System installiert sind. Wie kann ich die PHP-Version für Apache2 beliebig wechseln? In diesem Tutorial zeigen wir, wie man zwischen mehreren verschiedenen PHP-Versionen wechselt. Für den Apache2-Webserver und im CLI.

PHP-Version und das Modul als Standard aktivieren

Es soll PHP 8.2 als aktive PHP-Version für CLI und Apache2 festgelegt werden. Dies geschieht indem man die Apache2-Module für alle anderen installierten PHP-Versionen deaktiviert und aus dem CLI mit dem Befehl update-alternatives festlegt.

$ update-alternatives --set php /usr/bin/php8.2
$ update-alternatives --set phar /usr/bin/phar8.2
$ update-alternatives --set phar.phar /usr/bin/phar.phar8.2

  Phar ist eine PHP-Erweiterung, die es ermöglicht, aus einer komprimierten Archivdatei heraus Programme oder Dateien im PHAR-Format (PHP-Archiv) verpackt zu verarbeiten. Die mit der Phar-PHP-Klasse erzeugten Archive werden in bzip2 und gzip-Komprimierung erstellt.

PHP-Modul für Apache2 wechseln und aktivieren

Die PHP-Module werden Mithilfe des Apache helper aktiviert. Für den Apache2-Webserver wird das entsprechende Modul mit dem Befehl a2enmod aktiviert, und mit a2dismod wird das Modul deaktiviert..

$ a2dismod php7.4
$ a2enmod php8.2
$ systemctl restart apache2

a2enmod ist ein Skript, dass das angegebene Modul innerhalb der Apache2-Konfiguration aktiviert. Dies geschieht durch die Erstellung von Symlinks innerhalb /etc/apache2/mods-enabled.
a2dismod ist ein Skript, um ein Modul zu deaktivieren, indem es diese Symlinks entfernt. Wenn man versucht, ein bereits aktiviertes Modul zu aktivieren oder ein bereits deaktiviertes zu deaktivieren, wird ein Fehler ausgegeben.

Es ist möglich, mehrere PHP-Module in einem Befehl zu deaktivieren.

$ a2dismod php5.6 php7.1 php7.3 php7.4 php8.0 php8.1

Mit dem Apache 2-Syntaxvalidator können alle auf dem System verfügbaren PHP-Module ausgegeben werden.

$ apache2ctl -M

Bei Red Hat oder Rocky Linux und AlmaLinux (CentOS) ist der Befehl.

$ apachectl -M
Loaded Modules:
 core_module (static)
 mime_module (shared)
 php_module (shared)
...

Es werden alle auf dem System installierten Apache2 PHP-Module ausgegeben, wie hier in verkürzter Form.

a2query ist ein Programm zum Abrufen von Konfigurationswerten des Apache 2 HTTP-Webserver, zulässige Werte werden zurückgegeben, selbst wenn der Apache 2-Syntaxvalidator fehlschlägt.

$ a2query -m | grep php
php8.2 (enabled by site administrator)

Ebenso kann man sich die verfügbaren Apache2 PHP-Module auf dem Filesystem mithilfe von find abrufen und anzeigen lassen.

$ find /etc/apache2/mods-available/ -name *php\*

Die systemweiten PHP Einstellungen findet man unter /etc/php, für änderungen mit Apache2 editiert man die Datei php.ini.

$ vi /etc/php/8.2/apache2/php.ini

quote  Im Verzeichnispfad die Versionsnummer entsprechend ersetzen.

Aktive PHP-Version überprüfen

Welche PHP-Version aktiv ist? kann aus CLI abgerufen werden, die auf dem System aktiv festgelegte PHP-Version wie folgt abfragen.

$ php -v
PHP 8.2.3 (cli) (built: Feb 14 2023 16:53:07) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.3, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.3, Copyright (c), by Zend Technologies

Mit anlegen einer php-Datei und folgendem Inhalt, zeigt der Apache-Webserver die aktuell ausgeführte PHP-Version und die Module.

<?php
phpinfo();
?>

Die php-Datei phpinfo.php in der DocumentRoot /var/www/html anlegen, sofern nicht eine andere DocumentRoot vorgesehen ist.

Im Browser wird die für den Apache2-Webserver konfigurierte PHP-Version und die PHP-Module angezeigt: http://ip_oder_fqdn/phpinfo.php

Beispiel: http://192.168.3.2/phpinfo.php

PHP-Version und Modul wechseln auf Debian mit Apache2

  Bei einem produktiven System sollte phpinfo.php nach beendeter Überprüfung wieder aus der DocumentRoot entfernt werden.