12.6. Apache: Wie kann ich ein Verzeichnis mit einem Passwort schützen?Antwort von Kristian KöhntoppDie Konfiguration des Webservers ist auch noch einmal ausführlich im Handbuch zum Apache Webserver beschrieben. Philipp Imhof hat auf seinem Webserver ein Script installiert, dass eine an den jeweiligen Beispielfall angepasste Anleitung erstellt. Im einfachsten Fall verwendet man HTTP Basic Authentication. Dazu ist mit dem Apache-Programm htpasswd eine Passwortdatei anzulegen, die die Benutzernamen und Passworte enthält. Optional kann man auch eine Gruppendatei anlegen, die pro Zeile den Namen einer Benutzergruppe und, durch einen Doppelpunkt getrennt, die Benutzer in dieser Gruppe enthält. kris@valiant:~/www/kris.koehntopp.de > htpasswd -c etc/htpasswd kris New password: test Re-type new password: test Adding password for user kris kris@valiant:~/www/kris.koehntopp.de > htpasswd etc/htpasswd marit New password: test Re-type new password: test Adding password for user marit kris@valiant:~/www/kris.koehntopp.de > echo "users: kris marit" >> etc/htgroup Die Option -c steht dabei für create; die Passwortdatei wird neu angelegt. Ohne die Option werden Benutzer zu einer existierenden Passwortdatei zugefügt bzw. die Passworte existierender Benutzer werden geändert. Im Beispiel wird weiterhin eine Gruppe users angelegt, der die Benutzer kris und marit angehören. Ein Verzeichnis kann man nun durch das Anlegen einer .htaccess-Datei schützen (dazu muss AllowOverride AuthConfig in der httpd.conf für dieses Verzeichnis gesetzt sein) oder indem man die entsprechenden Konfigurationsanweisungen direkt in einen <Directory>-Block für dieses Verzeichnis in die httpd.conf einsetzt. Im einfachsten Fall sind dies die Anweisungen: AuthType Basic AuthName MyRealm AuthUserFile /home/www/servers/www.koehntopp.de/etc/htpasswd AuthGroupFile /home/www/servers/www.koehntopp.de/etc/htgroup require valid-user Die Anweisung AuthType legt fest, auf welche Weise der Browser das Passwort übermittelt - bei der sehr unsicheren Basic-Authentication wird es nahezu im Klartext übertragen. Für den zu schützenden Bereich muss mit AuthName ein Name festgelegt werden. Die Direktiven AuthUserFile/ und AuthGroupFile legen die Datenquellen für die Authentisierung fest. Damit ein Anwender den geschützten Bereich betreten kann, muss er die in der require-Anweisung geforderten Bedingungen erfüllen. Im einfachsten Fall muss er einfach nur in der htpasswd-Datei stehen und das passende Passwort wissen. Dies ist der Fall bei require valid-user. Mit komplizierteren Anweisungen kann man den Zutritt auch noch auf bestimmte Gruppen (require group users) oder auf bestimmte Benutzer (require user kris) einschränken. In CGI PHP hat man in einem auf diese Weise geschützten Bereich Zugriff auf den Benutzernamen in der Variablen $_SERVER["REMOTE_USER"] und die verwendete Authentisierungsmethode in $_SERVER["AUTH_TYPE"]. <?php echo "AUTH_TYPE = ", $_SERVER['AUTH_TYPE'], "<br />\n"; echo "REMOTE_USER = ", $_SERVER['REMOTE_USER'], "<br />\n"; ?> Im Apache-Modul hat man in einem geschützten Bereich außerdem Zugriff auf die vollen Authentisierungsdaten. <?php echo "AUTH_TYPE = ", $_SERVER['AUTH_TYPE'], "<br />\n"; echo "REMOTE_USER = ", $_SERVER['$REMOTE_USER'], "<br />\n"; $a = getallheaders(); $au = split(" ", $a["Authorization"], 2); list($u, $p) = split(":", base64_decode($au[1])); echo "Decodiert zu User $u, Password $p<br />\n"; |
||
12.6. Apache: Wie kann ich ein Verzeichnis mit einem Passwort schützen? http://www.php-faq.de/q/q-apache-passwort.html |
||
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team |