LAMP installieren – MySQL absichern
Im letzten Teil haben wir bereits am Linux System den Apache Webserver installiert und konfiguriert. Aktuell können wir damit zwar statische HTML Seiten anzeigen, für einen echten Webserver für Webapplikationen benötigen wir noch eine Datenbanklösung und eine Skriptsprache. Beispielsweise MySQL und PHP. Außerdem zeige ich wie man MySQL absichern kann.
Datenbank
Bei der Datenbank ist es sehr wichtig auf ein stabiles System zu setzen. Wenn man sich nicht die Lizenzkosten für die MS SQL oder eine Oracle Datenbank leisten kann oder will, dann setzt man am besten auf MySQL. Das System ist seit Jahren bewährt und wird nach wie vor weiterentwickelt und gepflegt. Alternativen gibt es viele wie SQLite oder MariaDB.
Installiert wird der MySQL Server unter Linux folgendermaßen:
sudo apt-get install mysql-server
MySQL absichern
Bei der Installation werden Testdaten mitgeliefert. Diese haben auf einem Live System nichts zu suchen und gefährden dessen Sicherheit. Um eine sichere Installation zu gewährleisten müssen wir noch das mysql_secure_installation Skript ausführen, dass die Datenbank bereinigt. Das geht folgendermaßen:
sudo mysql_secure_installation
Wir antworten auf alle Fragen mit y, also Ja. Ein neues root Passwort benötigt man nicht, falls das bei der installation eingegebene sicher ist.
Man hat nun folgende Möglichkeiten:
- lokale Administration
man kann lokal von der Kommandozeile die Datenbank verwalten. Das ist meist recht schwierig und in fast allen Fällen nicht zu empfehlen. - externe Administration
man kann den MySQL Port freigeben und über ein externes Datenbanktool wie HeidiSQL sich über Benutzername, Passwort und Port mit dem Server verbinden. Das klappt oft sehr gut, für einen sicheren Server empfehle ich aber Variante 3. - über den Webserver
PHPMyAdmin ist die Wahl die von fast jedem Hoster getroffen wird. Der Vorteil dabei ist, dass die Software und damit dessen Konfiguration weiter in der Hand des Server Administrators bleibt. PHPMyAdmin lässt sich recht einfach konfigurieren, damit es optimal abgesichert ist. Aber zuvor muss PHP installiert sein.
Zugriffsrechte sicher erstellen
Die wichtigste Regel lautet: nie bei einer Webapplikation den Root Benutzer von MySQL angeben. Die meisten Webapplikationen legen die Passwörter in config.php Dateien ab die von PHP aus lesbar sind. Ein Sicherheitsleck in der PHP Applikation kann dazu führen, dass ein Angreifer das root Passwort auslesen könnte. Abhilfe schaffen Datenbankbenutzer mit eingeschränkten Rechten. Ideal sind 1 Benutzer pro Datenbank und nur mit den minimal nötigen Rechten.
PHP
PHP oder auch PHP Hypertext Preprocessor ist die beliebteste Skriptsprache auf Serversystemen. Im Open Source Bereich wird diese Skriptsprache trotz Mängel und zahlreicher Alternativen immer noch am häufigsten eingesetzt. Weit abgeschlagen findet sich dann Java (nein nicht JavaScript). Installiert wird die Skriptsprache bzw. dessen Interpreter wie folgt:
sudo apt-get install php5 php-pear
Konfiguration
Die Basiskonfiguration findet man unter Debian in der folgenden Datei: /etc/php5/apache2/php.ini. In dieser wurden folgende Parameter verändert:
error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR error_log = /var/log/php/error.log max_input_time = 30
Wir haben das Logging konfiguriert und einen Log Ordner (/var/log/php/error.log) angegeben. Diesen müssen wir im Dateisystem auch noch anlegen und die Rechte dafür vergeben:
sudo mkdir /var/log/php sudo chown www-data /var/log/php
Ab dem nächsten Neustart des Apache Servers werden alle PHP Meldungen in diese Datei geschrieben. Diese befindet sich außerhalb des Webroots und fasst alle Meldungen aller Applikationen und Domains zusammen.
PHPMyAdmin
Die Installation ist recht einfach mit folgendem Befehl:
sudo apt-get install php5-mysql phpmyadmin
die grundlegende Konfiguration wird bereits über die Installation gelöst. Nach der erfolgreichen Installation findet man die Applikation unter domain.com/phpmyadmin. Ein Login mit dem MySQL root Benutzer zeigt alle vorhandenen Tabellen. php5-mysql benötigt man, damit PHP Skripte auf die Datenbank zugreifen können.
PHPMyAdmin absichern
PHPMyAdmin absichern bringt nur wirklich etwas, wenn MySQL sicher ist. Dazu muss man unbedingt die Punkte unter MySQL absichern beachten. Da mein Server über VNC über einen SSH Tunnel gewartet wird gibt es keinen Grund, warum phpmyadmin öffentlich über den Webserver zugänglich sein sollte. In der Konfigurationsdatei kann man das so einstellen, dass phpmyadmin nur mehr über die lokale Adresse, also vom Server direkt aufgerufen werden kann. Alternativ kann man auch seine eigene fixe IP Adresse angeben. Das geht so:
sudo nano /etc/phpmyadmin/apache.conf
Unter dem Directory Tab fügt man folgende 3 Zeilen ein:
Order Deny,Allow Deny from All Allow from 127.0.0.1
Nach einem Apache2 Neustart ist phpmyadmin nur noch lokal vom Server aus aufzurufen. In der Regel ist es keine gute Idee wenn man am Server surfen kann. Deshalb wäre die Sperre auf die eigene IP Adresse sinnvoll – sofern man eine statische IP Adresse besitzt.
Fazit
Die Konfiguration vom Server ist nun fertig. Ich habe euch gezeigt wie man sowohl PHP als auch MySQL installiert, wie man MySQL absichern kann und PHPMyAdmin sicher konfiguriert. Nun sollten die Datenbankdienste weitgehendst sicher sein. Im nächsten Artikel widme ich mich speziell um das Absichern von PHP. Dieses hat in der Standardkonfiguration auch noch einige sicherheitsrelevante Probleme. Diese muss man kennen, ansonsten könnte eine schlechte PHP Applikation zum Hack des Servers führen.
Gibt es von euch noch gute Tipps wie man die Sicherheit noch erhöhen kann? Habe ich etwas relevantes vergessen?
php hat ‚Mängel‘ ?
ja Code Injection – siehe WordPress Update Häufigkeit. Falsche Dateirechte + zu lockere Restriktionen am Server und dann noch nicht gesperrte exec oder shell_exec und mit PHP lässt sich ein Server zerstören. Kann bei vorkompilierter Software nicht bzw. nicht so einfach passieren.