Apache htpasswd sichere Passwortänderung

8

Meine Frage ist einfach.

Wie können Benutzer ihre in einer htpasswd-Datei in linux gespeicherten Kennwörter ändern, ohne den Dateiinhalt preiszugeben oder Benutzern das Ändern anderer Kennwörter zu erlauben?

Ich habe versucht, ein Skript zu schreiben, um diesen Job mit SSH und speziell entworfenen Benutzer zu tun, aber es führt heute.

Bitte helfen Sie. Ich benutze Debian-Server "Lenny".

    
Rusty Horse 19.01.2011, 14:33
quelle

1 Antwort

16

Die Apache htpasswd -Datei unterstützt keine Schattenfunktionalität. Daher müssen Sie verhindern, dass die Benutzer auf Ihren Webserver zugreifen, um sie von der Passwortdatei fernzuhalten. Die einzige Lösung ist Ihr SSH-basierter Ansatz oder eine andere Remote-Lösung. Die folgende Beschreibung erläutert, wie Sie ein SSH-Befehlsskript schreiben, um das Kennwort nur zu ändern, wenn der Benutzer sein altes Kennwort kennt. Das Hauptproblem ist, dass Apache kein Kommandozeilen-Tool zur Überprüfung eines Passworts in einer htpasswd -Datei bereitstellt. Aber das kann mit der Hand gemacht werden.

Die folgende Beschreibung geht davon aus, dass der Webserver-Benutzer www-data ist und das Home-Verzeichnis des Benutzers /var/www ist.

Zuerst müssen Sie eine htpasswd-Datei erstellen, die vom Webserver-Benutzer beschreibbar ist:

%Vor%

Dann müssen Sie die Schlüssel all Ihrer Benutzer zur authorized_keys Datei des Web-Server-Benutzers hinzufügen. Sie müssen jeder Zeile die Option command voranstellen.

%Vor%

Immer wenn ein Benutzer sich mit seinem Schlüssel verbindet, wird nur .htpasswd.sh ausgeführt. Die Benutzer haben keinen Shell-Zugriff auf den Webserver.

Dies ist das Skript, um das Passwort zu ändern:

%Vor%

Der knifflige Teil ist die Passwortverifizierung. Es wird getan, indem man das alte Salz liest und das alte Passwort mit dem alten Salz verschlüsselt. Das Ergebnis wird mit dem alten verschlüsselten Passwort in der Datei htpasswd verglichen.

Nun kann sich der Benutzer mit dem Webserver verbinden, um das Passwort zu ändern:

%Vor%

Jeder kann nur sein eigenes Passwort ändern und niemand hat Zugriff auf die verschlüsselten Passwörter der anderen Benutzer. Diese Lösung bietet einen zusätzlichen Vorteil bei der Verwendung des ursprünglichen Programms htpasswd in einem Shell-Skript, da die Kennwörter niemals als Befehlszeilenargument verwendet werden. Dies wäre mit htpasswd nicht möglich, da das Passwort nicht von stdin wie mkpasswd gelesen werden kann.

    
ceving 10.05.2011, 15:41
quelle

Tags und Links