Aufgrund dessen das es bei phpMyAdmin immer wieder Sicherheitslücken gab habe ich heute das Verzeichnis bei mir auf dem Server mit .htaccess geschützt. Auch alle anderen Verzeichnisse unter /var/www können nur noch mit Passwort aufgerufen werden.
Somit ist es für Script Kiddys oder Bots nicht mehr möglich den Document Root zu betreten ohne einen richtigen Benutzernamen und ein Passwort eingegeben zu haben. Klar ist das hinter diesem .htaccess Schutz noch die normale Anmeldemaske mit Benutzernamen und Passworteingabe erscheinen, somit quasi ein doppelter Schutz vor Eindringlingen. Wie ich das gemacht habe will ich euch in meiner kurzen Anleitung mal zeigen, mein Server Betriebssystem ist Debian Etch 64Bit.
Zuerst mal müsst ihr eine .htaccess Datei im Verzeichnis
/var/www/phpmyadmin
anlegen. In diese Datei schreibt ihr dann folgendes.
AuthType Basic
AuthName "Passwortschutz"
require valid-user
AuthUserFile /var/www/phpmyadmin/.htpasswd
Unter AuthName kommt das rein was ihr gerne über dem Anmeldefenster stehen haben wollt, kann auch leer bleiben. Unter AuthUserFile müsst ihr den absoluten Pfad zu eurer .htpasswd eintragen (siehe unten), diese enthält euren Benutzernamen und das verschlüsselte Passwort.
Nun könnt ihr entweder im selben Verzeichnis die .htpasswd erstellen oder ihr legt diese woanders hin, denkt aber bitte daran auch anschließend den Link in der .htaccess anzupassen. Weil das Passwort in der .htpasswd verschlüsselt sein muss verweise ich mal auf PHP-Space.info.
Dort könnt ihr unter Angabe eures Benutzernamens und eures Passworts den Inhalt der .htpasswd erstellen lassen. Kopiert dann alles und fügt es in die zuvor angelegte .htpasswd ein und speichert diese ab. Als Beispiel würde das jetzt für unseren Benutzer Max und seinem generierten Passwort so aussehen.
Max:$1$REwsjDUi$04HEpKpAYYDnIj/wY7atn0
So, jetzt ist das Gröbste schon erledigt.
Nun müssen wir mal folgende Datei öffnen.
/etc/apache2/sites-available/default
Dort muss der Punkt AllowOverride None auf AllowOveride All geändert werden, allerdings nur für den DocumentRoot. Das ist nötig weil die URL mit AllowOverride None generell immer ausgegeben wird, somit würde unser .htaccess Schutz einfach umgangen werden. Bei AllowOverride All hingegen wird die URL nur ausgegeben wenn die Zugriffssteuerung unserer .htaccess Abfrage positiv war.
AllowOverride All
Ok, das wars schon, jetzt den Apachen nochmal neu starten.
/etc/init.d/apache2 restart
Wenn ihr jetzt alles richtig gemacht habt könnt ihr das Verzeichnis von phpMyAdmin nicht mehr ohne die .htaccess Passwort-Abfrage aufrufen.
Viel Spaß beim ausprobieren ;)
Als kleinen Tipp am Rande empfehle ich euch noch allen Verzeichnissen unter /var/www andere Namen zu geben, denn Bots scannen den kompletten DocumentRoot nach Ordnern ab die im Namen phpMyAdmin usw. enthalten.