Veröffentlichung 15. Juli 2018 @ 19:30
Letzte Änderung 15. Juli 2018 @ 19:30
Überblick
- Weboberfläche für MySQL-Datenbanken
- Anpassung der php.ini-Datei für mod_php und der Default-Pool-Konfigurationsdatei für FPM
- Version aus Januar 2016
- Security through obscurity durch komplizierten Hostnamen und abweichenden HTTPS-Port
- Wildcard-Zertifikat, damit Hostname nicht extern bekannt wird
- (Zusätzliche) Absicherung über Apache-Basis-Authentifizierung mit kompliziertem Benutzernamen
Voraussetzungen
Netzwerk
- Host GVkGRtuRO78oB75zxGT5.example.com
- htpasswd-Benutzer X26gL3z71CeFOcUkd9Zm
- MySQL-Datenbank phpmyadmin
- MySQL-Benutzer pma
- HTTPS-Port 42443
Software
- Apache 2.4.18 #apache2 -v
- MySQL 5.7.22 #mysql –version
- PHP 7.0.30 #php –version
- phpMyAdmin 4.5.4.1 #https://GVkGRtuRO78oB75zxGT5.example.com:42443
- Ubuntu Server 16.04.04 LTS #lsb_release -a
Ordner und Dateien
- Installation /usr/share/phpmyadmin, /var/lib/phpmyadmin
- Konfiguration /etc/apache2/sites-available/phpmyadmin.conf, /etc/php/7.0/apache2/php.ini, /etc/php/7.0/fpm/pool.d/default.conf.disabled, /etc/php/7.0/fpm/pool.d/phpmyadmin.conf, /etc/phpmyadmin/
- Log /var/log/apache2/access-phpmyadmin.log, /var/log/apache2/error-phpmyadmin.log, /var/log/php7.0-fpm.log
- Zertifikate und Schlüssel /etc/letsencrypt/live/example.com/*.pem
phpMyAdmin installieren, Setup-Dateien löschen und Zugriffsrechte setzen
apt install phpmyadmin Webserver, die automatisch konfiguriert werden sollen: keiner Konfigurieren der Datenbank für phpmyadmin mit dbconfig-common? No rm --recursive /usr/share/phpmyadmin/setup chown --recursive www-data:www-data /usr/share/phpmyadmin
Konfigurationsspeicher einrichten
mysql --password --user=root
source /usr/share/phpmyadmin/sql/create_tables.sql GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY '***';
Virtuellen Host mit Basis-Authentifizierung einrichten
Hostnamen mit Passwortgenerator z. B. KeePass generieren
GVkGRtuRO78oB75zxGT5
Benutzerdatei für Basis-Authentifizierung geschützter Website-Bereiche anlegen / ergänzen
Benutzernamen mit Passwortgenerator z. B. KeePass generieren
X26gL3z71CeFOcUkd9Zm
Benutzerdatei mit bcrypt-Passwort-Hash neu erstellen / ergänzen
htpasswd -B -c /etc/apache2/.htpasswd X26gL3z71CeFOcUkd9Zm #htpasswd -B /etc/apache2/.htpasswd X26gL3z71CeFOcUkd9Zm
Apache-Konfigurationsdatei anlegen
<VirtualHost *:42443> CustomLog ${APACHE_LOG_DIR}/access-phpmyadmin.log vhost_combined DocumentRoot /usr/share/phpmyadmin ErrorLog ${APACHE_LOG_DIR}/error-phpmyadmin.log #Firefox Web-Entwickler: Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'" ServerAdmin webmaster@example.com ServerName GVkGRtuRO78oB75zxGT5.example.com SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem SSLEngine on <Directory /usr/share/phpmyadmin> AuthBasicProvider file AuthName "phpMyAdmin" AuthType Basic AuthUserFile /etc/apache2/.htpasswd #/var/log/apache2/error-phpmyadmin.log: Options FollowSymLinks #/var/log/apache2/error-phpmyadmin.log + GVkGRtuRO78oB75zxGT5.example.com: php_admin_value open_basedir /etc/phpmyadmin/:/usr/share/doc/phpmyadmin/:/usr/share/php/:/usr/share/phpmyadmin/:/var/lib/php/sessions/:/var/lib/phpmyadmin/ Require valid-user </Directory> </VirtualHost>
Konfiguration aktivieren
a2ensite phpmyadmin.conf
[Optional] FPM-Pool-Konfiguration aus Default-Konfiguration erstellen und virtuellen Host anpassen
FPM-Konfigurationsdatei anlegen
cp /etc/php/7.0/fpm/pool.d/default.conf.disabled /etc/php/7.0/fpm/pool.d/phpmyadmin.conf
;[default] [phpmyadmin] ... ;listen = /run/php/php7.0-fpm-default.sock listen = /run/php/php7.0-fpm-phpmyadmin.sock ... ;/var/log/apache2/error-phpmyadmin.log + GVkGRtuRO78oB75zxGT5.example.com: ;php_admin_value[open_basedir] = nonexistent php_admin_value[open_basedir] = /etc/phpmyadmin/:/usr/share/doc/phpmyadmin/:/usr/share/php/:/usr/share/phpmyadmin/:/var/lib/php/sessions/:/var/lib/phpmyadmin/ ...
Konfiguration testen und PHP-FPM neustarten
php-fpm7.0 --test systemctl reload php7.0-fpm #systemctl status php7.0-fpm.service
Apache-Konfigurationsdatei modifizieren
<VirtualHost *:42443> ... <Directory /usr/share/phpmyadmin> ... #php_admin_value open_basedir /etc/phpmyadmin/:/usr/share/doc/phpmyadmin/:/usr/share/php/:/usr/share/phpmyadmin/:/var/lib/php/sessions/:/var/lib/phpmyadmin ... </Directory> <FilesMatch "\.php$"> <If "-f %{REQUEST_FILENAME}"> SetHandler "proxy:unix:/run/php/php7.0-fpm-phpmyadmin.sock|fcgi://localhost/" </If> </FilesMatch> <Proxy "fcgi://localhost/" enablereuse=on max=10> </Proxy> </VirtualHost>
PHP-Funktion php_uname freischalten
php.ini-Datei ändern
... ;phpMyAdmin nutzt php_uname ;disable_functions = ${disable_functions}openlog,php_uname, disable_functions = ${disable_functions}openlog, ...
[Optional] FPM-Pool-Konfiguration ändern, Konfiguration testen und PHP-FPM neustarten
... ;phpMyAdmin nutzt php_uname ;php_admin_value[disable_functions] = openlog,php_uname, php_admin_value[disable_functions] = openlog, ...
php-fpm7.0 --test systemctl reload php7.0-fpm #systemctl status php7.0-fpm.service
Konfiguration testen, Apache neustarten und Status abfragen
apache2ctl configtest systemctl reload apache2 systemctl status apache2.service
[Optional] Zur Sicherheit Konfiguration deaktivieren und Apache neustarten
a2dissite phpmyadmin.conf systemctl reload apache2
Quellen
https://docs.phpmyadmin.net/en/latest/setup.html
https://httpd.apache.org/
https://httpd.apache.org/docs/2.4/howto/auth.html
https://keepass.info/
http://manpages.ubuntu.com/manpages/xenial/man8/php-fpm7.0.8.html
https://secure.php.net/manual/de/install.fpm.php
https://wiki.apache.org/httpd/PHP-FPM
https://www.phpmyadmin.net