Archiv der Kategorie: Linux Howto

THINK UNBLOG GNU/Linux Tutorials Howto Workaround DevOps Code.

phpMyAdmin mit PHP8.2 Installation in Debian

phpMyAdmin Installation mit PHP 8.2 in Debian 12

Tutorial zur Installation von phpMyAdmin auf Debian 11 und Debian 12 mit Apache2. Für die Administration und Verwaltung von MySQL und MariaDB-Datenbanken aus dem Web-Browser.

Unter Debian lässt sich phpMyAdmin am einfachsten über den Paket Managerapt install phpmyadminaus dem Debian Standard Repository installieren, was dann allerdings für PHP 7.4 bereitgestellt wird.

Möchte man unter Debian 12 jedoch eine neuere PHP-Version nutzen, beispielsweise etwa für ein aktuelles CMS wie WordPress, wo PHP 8.2 oder neuer empfohlen wird, lässt sich phpMyAdmin manuell in nur wenigen Schritten installieren.

PHP Installation auf Debian

Die phpMyAdmin Installation auf Debian erfolgt hier als root „su -“ um Apache2, MariaDB und PHP 8.2 von DEB.SURY.ORG bereitzustellen.

Zuerst benötigte Dienstpakete für in weiterem Verlauf installieren

$ apt install lsb-release apt-transport-https ca-certificates wget gnupg -y

Das Sury Repository für PHP 8 auf dem System hinzufügen.

$ wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
$ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list

Aktualisieren der Paketlisten wie folgt.

$ apt update

Wenn der Apache2-Webserver noch nicht installiert ist.

$ apt install apache2 -y

Nun PHP 8.2 mit den wichtigsten PHP-Module installieren.

$ apt install php8.2 php8.2-common php8.2-cli php8.2-curl php8.2-imap php8.2-apcu php8.2-intl php8.2-cgi php8.2-mbstring php8.2-gd php8.2-mysql php8.2-opcache php8.2-bcmath php8.2-xml php8.2-xsl php8.2-zip php8.2-bz2 libapache2-mod-php8.2 -y

Aktualisieren der bereitgestellten Pakete wie folgt.

$ apt update && apt upgrade -y
$ [ -f /var/run/reboot-required ] && reboot -f

MariaDB Installation

Im nächsten Schritt wird der MariaDB-Server und (MySQL) Client auf dem Server installiert.

$ apt install mariadb-server mariadb-client -y

Dann die Konfiguration des MariaDB-Servers abschliessen.

$ mysql_secure_installation

Da noch kein Root-Passwort für die Datenbank festgelegt ist, Vervollständige die folgenden Abfragen:

  • Switch to unix_socket authentication [Y/n] – Enter n to skip.
  • Set root password? [Y/n] – Type y and press Enter to create a root password for your database. If you already have a root password, enter n to not change the root password.
  • Remove anonymous users? [Y/n] – Type y and press Enter.
  • Disallow root login remotely? [Y/n] – Type y and press Enter.
  • Remove test database and access to it? [Y/n] – Type y and confirm with Enter.
  • Reload privilege tables now? [Y/n] – Type y and confirm with Enter.

MariaDB ist nun betriebsbereit. Weiter mit Verzeichnispfad wechseln.

$ cd /usr/share

phpMyAdmin Installation auf Debian

Für die phpMyAdmin Installation auf Debian wird die aktuelle Version heruntergeladen mit dem folgenden Befehl.

$ wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip

Entpacken des soeben heruntergeladenen Archiv wie folgt.

$ unzip phpmyadmin.zip

Nach dem entpacken das heruntergeladene Archiv entfernen.

$ rm -f phpmyadmin.zip

Anschließend der Name des entpackten Verzeichnisses umbenennen.

$ mv phpMyAdmin-*-all-languages phpmyadmin

Und die Rechte auf das phpMyAdmin-Verzeichnis ändern.

$ chmod -R 0755 phpmyadmin

Apache Konfiguration für phpMyAdmin

Erstelle nun eine Apache2-Konfigurationsdatei für phpMyAdmin in /etc/apache2/conf-available/phpmyadmin.conf.

Dazu den folgenden Inhalt in der Terminal Shell einfügen.

$ cat << EOF > /etc/apache2/conf-available/phpmyadmin.conf
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>
EOF

Die neue Apache2-Konfiguration überprüfen.

$ apachectl -t
Syntax OK

Die soeben erstellte Apache2-Konfigurationsdatei aktivieren.

$ a2enconf phpmyadmin

Und den Apache2-Webserver Neuladen.

$ systemctl reload apache2

Erstellen das temporären Verzeichnis, welches phpMyAdmin benötigt.

$ mkdir /usr/share/phpmyadmin/tmp/

Dem Webserver-Benutzer nun die benötigten Besitzerrechte erteilen.

$ chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

  Bis und mit Debian 10 sowie unter Ubuntu ist aus Sicherheitsgründen die Passwort-Authentifizierung beim MariaDB-Server standardmäßig für die Root-Anmeldung deaktiviert (z.B. über phpMyAdmin). Unter Debian 11 ist dies jedoch möglich. Bei Debian 10 können die nachfolgenden Schritte durchgeführt werden, um die Root-Anmeldung mittels Passwort ebenfalls zu erlauben.

$ mysql -u root
UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root' AND plugin = 'unix_socket';
FLUSH PRIVILEGES;
quit

Der Apache2-Webserver mit PHP, der MariaDB-Server und phpMyAdmin ist nun einsatzbereit.

Jetzt können wir die phpMyAdmin-Webseite öffnen, indem wir zur IP-Adresse oder FQDN in der Browser URL /phpmyadmin hinten anfügen.
Zum Beispiel: http://192.168.1.2/phpmyadmin

phpMyAdmin mit PHP8 Installation auf Debian 12

PHP-Version anzeigen und ändern

Bei einem System wo mehrere PHP-Versionen installiert sind, kann eine PHP-Version für den Apache2-Webserver aktiviert werden.

Dabei wird das entsprechende Modul mit dem Apache helper aktiviert, mit dem Befehl a2enmod, und mit a2dismod wird es deaktiviert.

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

Mit anlegen einer php-Datei und folgendem Inhalt, wird aktuelle PHP-Version und die PHP-Module angezeigt. Wenn Du keine Standard Apache2-Site angelegt hast, speichere die Datei phpinfo.php in der Docroot unter /usr/share/phpmyadmin.

<?php
phpinfo();
?>

Die PHP-Einstellungen für den Apache2-Webserver werden in Tabellenform im Browser ausgegeben. Beispiel: http://192.168.1.2/phpinfo.php

phpMyAdmin mit PHP8 Installation auf Debian 12, phpinfo

  Für produktive Systeme sollte phpinfo wieder entfernt werden.

fetchmail e-mails abrufen unter Debian 11

E-Mails abrufen und weiterleiten mit fetchmail auf Debian mit Postfix

Das fetchmail Dienstprogramm kann im Daemon-Modus von einem oder mehreren Systemen in Intervalle wiederholt E-Mails abrufen, es werden E-Mails von Servern gesammelt die alle gängigen E-Mail-Abrufdienste unterstützen, wie POP3 und IMAP Protokolle.

In diesem Tutorial wird gezeigt wie fetchmail auf Debian 11 (bullseye) mit Postfix eingesetzt werden kann. Die E-Mails von externen Mail-Dienstanbieter werden abgerufen und an Empfänger zum Postfach Server weitergeleitet dieser vom Smarthost die E-Mails empfängt. Dabei sind bei den Mailkonten keine Weiterleitungen erforderlich, gleichzeitig können die E-Mails durch den Smarthost auf Viren und SPAM untersucht werden, bevor diese dem Benutzer Postfach zugestellt werden.

fetchmail Installation auf Debian

Das fetchmail-Dienstprogramm kann aus dem Debian Standard Repository bereitgestellt werden.

$ sudo apt install -y fetchmail

Den Daemon Modus aktivieren in/etc/default/fetchmail

# This file will be used to declare some vars for fetchmail
#
# Uncomment the following if you don't want localized log messages
# export LC_ALL=C

# If you want to specify any additional OPTION to the start
# scripts specify them here
# OPTIONS=...

# Declare here if we want to start fetchmail. 'yes' or 'no'
START_DAEMON=yes

Bei START_DAEMON von no auf yes ändern.

Die globale Recourcen-Konfiguration fetchmailrc für den Betrieb als Daemon erstellen in/etc/fetchmailrc

set daemon 900
set no syslog
set logfile /var/log/fetchmail
set postmaster "postmaster"
set no bouncemail
set no spambounce
set properties ""

poll pop.gmx.net with proto POP3
user 'john@gmx.net' there with password 'M1HXGLKQJ9OZPCA6V34R' is john@foo.org here options ssl sslcommonname mail.gmx.net smtphost localhost

Für jeden Mailserver von diesem E-Mails abgerufen werden, wird eine poll Zeile erstellt. Es wird hier alle 15 Minuten das externe Postfach von john@gmx.net beim POP3 Server mail.gmx.net abgerufen und mit smtphost über localhost zum Postfach Server dem Benutzer john@foo.org zugestellt. Damit die Protokollierung nicht in /var/log/mail.log gelangt, werden anstelle diese in /var/log/fetchmail geloggt.

Der Common Name (CN) aus dem Zertifikat der mit sslcommonname übergeben werden muss, kann mit einem Webbrowser ermittelt werden, oder mit folgenden Kommando in der Linux Shell.

$ openssl s_client -connect pop.gmail.com:995 | grep "CN="
# with Windows OS
C:\> openssl s_client pop.gmail.com:995 | findstr "CN ="

  Unter Windows 10 /11 muss OpenSSL erst bereitgestellt werden, die Binary sind bei slproweb.com verfügbar, oder man installiert das Paket mitwinget install openssl

Mit fetchmail e-mails abrufen

fetchmail bietet eine Reihe von syntaktischen Feinheiten, um das auslesen von fetchmailrc zu erleichtern. Während es möglich ist, Anmeldeinformationen für einen Server in einer Zeile anzugeben, werden häufige Konfigurationen über eine Reihe von verschiedenen Zeilen angegeben. fetchmail ist unempfindlich gegenüber Whitespace, außer wenn das Argument in Anführungs- und Schlusszeichen erfolgt.

Für die Poll-Anweisung gibt es mehrere Optionen (z.B. nofetchall (default), fetchall, keep oder nokeep ).
Die Bedeutungen sind wie folgt:

nofetchall: Nur neue Nachrichten abrufen (Standard). Wenn nichts anderes angegeben ist (z.B. fetchallkeep ), bedeutet dies nofetchall.
fetchall: Holt alle Nachrichten, ob gesehen oder nicht.
keep: Löscht keine Nachrichten auf dem Server.
nokeep: Löscht die gelesenen Nachrichten vom Server.

Besitzer fetchmail für die Datei fetchmailrc setzen.

$ chown fetchmail /etc/fetchmailrc
$ chmod 0600 /etc/fetchmailrc

Der fetchmail daemon wird neu gestartet.

$ systemctl restart fetchmail

Überprüfen lässt sich die fetchmail Konversation zum externen Server mit folgendem Befehl:

$ fetchmail -vv -N --ssl -p pop3 -P 995 -ujohn@gmx.net mail.gmx.net

Die Konfigurationsdatei fetchmailrc testen.

$ fetchmail -v -a -k -f /etc/fetchmailrc

Den fetchmail Prozess überprüfen.

$ ps -ef | grep -v grep | grep fetchmail

Die Ausgabe kann in etwa wie folgt aussehen:

fetchma+ 23566     1  0  2022 ?        00:01:42 fetchmail -vv -d 900 -a -f /etc/fetchmailrc -L /var/log/fetchmail

Die Protokollierung findet nun in der Datei fetchmail statt.

$ tail -f /var/log/fetchmail

In der Log-Datei fetchmail wird in etwa folgendes protokolliert.

fetchmail: awakened at Sat 21 Jan 2023 08:55:45 AM CET
fetchmail: 6.3.24 querying pop.gmx.net (protocol POP3) at Sat 21 Jan 2023 08:55:45 AM CET: poll started
fetchmail: Trying to connect to 212.227.17.169/995...connected.
fetchmail: Certificate chain, from root to peer, starting at depth 2:
fetchmail: Issuer Organization: T-Systems Enterprise Services GmbH
fetchmail: Issuer CommonName: T-TeleSec GlobalRoot Class 3
fetchmail: Server certificate:
fetchmail: Subject CommonName: mail.gmx.net
fetchmail: pop.gmx.net key fingerprint: 36:6D:93:38:DE:58:A2:8B:6D:61:F7:76:1F:56:70:BF
fetchmail: SSL/TLS: using protocol TLSv1.2, cipher ECDHE-RSA-AES256-GCM-SHA384, 256/256 secret/processed bits
fetchmail: POP3< +OK POP server ready H migmx106 1MMFyQ-1p2A592gZq-00YABU
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< TOP
fetchmail: POP3< UIDL
fetchmail: POP3< USER
fetchmail: POP3< SASL PLAIN
fetchmail: POP3< IMPLEMENTATION trinity
fetchmail: POP3< .
fetchmail: POP3> USER john@gmx.net
fetchmail: POP3< +OK password required for user "john@gmx.net"
fetchmail: POP3> PASS *
fetchmail: POP3< +OK mailbox "john@gmx.net" has 0 messages (0 octets) H migmx106
fetchmail: selecting or re-polling default folder
fetchmail: POP3> STAT
fetchmail: POP3< +OK 0 0
fetchmail: No mail for john@gmx.net at pop.gmx.net
fetchmail: POP3> QUIT
fetchmail: POP3< +OK POP server signing off
fetchmail: 6.3.24 querying pop.gmx.net (protocol POP3) at Sat 21 Jan 2023 08:55:45 AM CET: poll completed
fetchmail: New UID list from pop.gmx.net: <empty>
fetchmail: not swapping UID lists, no UIDs seen this query
fetchmail: Query status=1 (NOMAIL)
fetchmail: sleeping at Sat 21 Jan 2023 08:55:45 AM CET for 900 seconds

  Das Beispiel zeigt eine Login Sequenz in einer etwas verkürzter form.

Die fetchmail man page gibt zahlreiche nützliche Informationen aus.

$ man fetchmail