Tutorial: .htaccess und .htpasswd

Athelstan

New member
Hallo Habo,

ich habe mich neulich nach einem Tutorial für .htaccess usw. umgeschaut, und hier im Board gab es dazu anscheinend noch nichts genaueres. Da es aber für viele andere wahrscheinlich auch eine der ersten Anlaufstellen ist, will ich hier mal ein Tutorial dazu veröffentlichen, wie man in Grundzügen Sicherheit von Daten auf Webservern realisieren kann.

Um Daten vor Fremdbenutzern zu schützen braucht man zwei Dateien:
1) .htaccess
2) .htpasswd
Die erste der beiden beinhaltet generelle Einstellungen, den Pfad zur .htpasswd-Datei und eventuelle Optionen. Die zweite beinhaltet alle Usernames, die auf das Verzeichnis zugreifen dürfen, und in verschlüsselter Form deren Passwörter. Eine .htaccess-Datei könnte so aussehen:
Code:
AuthUserFile ./.htpasswd
AuthGroupFile /dev/null
AuthName "Zugriff auf Daten"
AuthType Basic
<Limit GET>
require valid-user
</Limit>
ErrorDocument 401 Error 401
ErrorDocument 403 Error 403
ErrorDocument 404 Error 404
ErrorDocument 500 Error 500
Die erste Zeile beschreibt die Lage der Datei .htpasswd, die gleich noch benötigt wird. Hier ist sie einfach im selben Verzeichnis. Die zweite Zeile beschreibt die Lage der Datei .htusers, die die erlaubten Gruppen beinhaltet. Das werde ich in diesem Tutorial aber nicht ansprechen, deswegen nehmen wir mal /dev/null . Die dritte Zeile ist nichts weiter als die Ausgabe, die im späteren Loginfenster über den Formulareingaben steht. Zeile vier beschreibt den Typ der Authentifizierung, in diesem Fall, da es ja nur grundlegend sein soll, "Basic". In den nächsten 3 Zeilen steht, was benötigt wird, um Daten einsehen zu können. Hier wird ein User, der in der .htpasswd steht, und sein korrektes Passwort verlangt. Danach kommen die Definitionen für Errorpages. Wenn ich mich also auf einem Webserver mit dieser .htaccess-Datei per Browser einloggen würde und eine Seite aufrufen würde, die es nicht gibt, stände da "Error 404". Stattdessen kann man auch etwas schöneres nehmen, zum Beispiel "Diese Seite gibt es nicht." oder "Heute sind deine Lottozahlen 4,0,4.". Das ist dann der Kreativität des Benutzers überlassen.
Kommen wir zur .htpasswd-Datei. Die ist ganz simpel und könnte beispielsweise so aussehen:
Code:
Athelstan:RLjXiyxx56D9s
Mama:RLMzFazUFPVRE
Papa:RL8wKTlBoVLKk
Jede Zeile für einen Benutzer und sein verschlüsseltes Passwort.

Diese zwei Dateien müsst ihr einfach in das Verzeichnis kopieren, das geschützt werden soll. Dann kann nur jemand, der Username und Passwort kennt, per Browser auf das Verzeichnis zugreifen.

mfg,

Athelstan

//edit: Hier gibt es ein Tool zum erstellen einer .htaccess- bzw, .htpasswd-Datei: Link
 

AmShaegar

New member
Spitze, ist alles drin, was man für den Anfang braucht. Weitere Infos kann man ja erfragen oder im Internet suchen. Eine Anmerkung aber noch:
Ändert den Pfad zur .htpasswd nicht dahingehend ab, dass ihr die nachher in einem ungeschützten ordner liegen habt. Das wär fatal. ein Angreifer könnte diese einfach direkt runterladen und hätte so die Benutzernamen und verschlüsselten Passwörter. Am besten liegt die .htpasswd in dem zu schützenden Ordner.

MfG AmShaegar
 

rami

New member
Original von AmShaegar
Ändert den Pfad zur .htpasswd nicht dahingehend ab, dass ihr die nachher in einem ungeschützten ordner liegen habt. Das wär fatal. ein Angreifer könnte diese einfach direkt runterladen und hätte so die Benutzernamen und verschlüsselten Passwörter. Am besten liegt die .htpasswd in dem zu schützenden Ordner.
Unsinn. In den Apache-Standardeinstellungen wird für alle Dateien, die mit ".ht*" beginnen ein "Deny from all" gesetzt... Solange der Ordner nicht über öffentlichen FTP erreichbar ist, muss man sich da keine Sorgen machen.
 

Cyberm@ster

New member
Original von AmShaegar
Code:
<?php
include($_GET['page']);
?>

Wer so einen Code verwendet ist selbst schuld.

Zum Thema: Dein Tutorial ist ein guter Einstieg, du könntest aber noch hinzufügen wie man ein verschlüsseltes Passwort erstellt.
 

Athelstan

New member
Hi,

danke für die Idee. Das ganze kann man sich auch ganz einfach machen und diesen htaccess-Generator benutzen: Link

Verschlüsselt auch Passwörter ;)

mfg,

Athelstan
 

bitmuncher

Senior-Nerd
Die .htpasswd im Webhome. *schauder*

Nachtrag: Und evtl. sollte man noch erwähnen, dass die .htaccess nicht auf jedem Webserver ausgewertet wird und dass für das Verzeichnis entsprechende AllowOverwrite-Optionen gesetzt sein müssen, damit die Passwort-Authentifizierung auch funktioniert.
 

overflow

Member of Honour
Hi,

ich habe auch mal ein Tutorial dazu geschrieben.
Vielleicht gibt es einiges was du hinzufügen könntest.

<Directory "/var/www/domain/phpmyadmin">
AuthType Basic
AuthName "Privat"
AuthUserFile /etc/apache2/htpasswd/pmapasswd
Require valid-user
</Directory>

Dieses Script muss in eure Virtualhostscripts rein.
Diese befinden sich Standartmässig im /etc/apache2/sites-available/

Achtung: Passwortdatei muss erstellt werden. Mit folgendem Kommando erreicht man dies:
htpasswd -c /etc/apache2/htpasswd/pmapasswd username
/* Der Username entspricht euren Wunschloginname und das Verzeichnis htpasswd muss vorhanden sein */

Ihr werdet nun nach einem Passwort gefragt. Nach erfolgreicher Eingabe wird es
verschlüsselt in der Datei .pmapasswd angelegt.

Erklärung:
- http://www.eure-domain.de/phpmyadmin wird durch htaccess geschützt.
- Titel, welches im Browser angezeigt wird lautet "Privat"
- Die Passwortdatei htpasswd befindet sich im /etc/apache2/htpasswd/ und lautet pmapasswd

In dieser Datei ist der username:password(verschlüsselt).

Beispiel:
- ihr wollt www.eure-domain.de/forum/acp/ durch htaccess schützen
- Titel soll "Nur für Administratoren" lauten
- htpasswd-datei soll acppw lauten
- Username: admin
- Passwort: 12345

<Directory "/var/www/forum/acp">
AuthType Basic
AuthName "Nur für Administratoren"
AuthUserFile /etc/apache2/htpasswd/acppw
Require valid-user
</Directory>

htpasswd -c /etc/apache2/htpasswd/acppw admin
Passworteingabe: 12345

Bei Fragen und Anregungen könnt ihr euch gerne an mich wenden.
 

bitmuncher

Senior-Nerd
Ein paar Anregungen:

Original von overflow
Dieses Script muss in eure Virtualhostscripts rein.
Diese befinden sich Standartmässig im /etc/apache2/sites-available/
Wer einmal Apache aus dem Source installiert hat weiss, dass es standardmässig keine extra Datei für die VirtualHosts gibt, sondern lediglich eine httpd.conf im conf-Ordner des Installationsordners. Dieser "Standard" existiert nur auf einigen Distros wie SuSE und Debian (sowie deren Abkömmlingen).

Original von overflow
Achtung: Passwortdatei muss erstellt werden. Mit folgendem Kommando erreicht man dies:
htpasswd -c /etc/apache2/htpasswd/pmapasswd username
Man sollte erwähnen, dass dieses Tool auf einigen Distros auch htpasswd2 heissen kann.
 

Mammutz

New member
.htaccess funktioniert nicht

Hallo zusammen,

als Neuling gebe ich meinen Einstand hier in diesem Thread.

Mein Problem: Ich habe die Anweisungen in diesem Toturial soweit befolgt.
Ich habe einen Ordner angelegt, der sich "kunden" nennt. Anschließend habe ich die beiden Dateien hinzugefügt und weitere Unterordner angelegt, die sich dann "kd0001", "kd0002" usw. nennen. Wenn ich jetzt aber auf einen dieser Ordner zugreifen will funktioniert das nicht, ich bekomme immer den Fehler 500.

Wo habe ich mich im Eventualfall nicht genau an das Toturial gehalten?

MfG, Florian
 

Zwirni

Member
Das können wir dir schwer sagen, wenn Du nicht den von dir verwendeten Code zeigst. Allerdings ist es mitunter hilfreich ins error-log des Webservers zu schauen um die Ursache heraus zu bekommen.
 
Oben