Scripting von htdigest -c / path / to / file / $ user $ user $ password in Bash

8

Ich möchte in der Lage sein, ein Skript mit einem Passwort in der Variablen $ password zu schreiben.

htdigest -c /etc/apache2/pw/$user $user $password

Im Moment werde ich aufgefordert, ein Passwort manuell einzugeben. Dies wird nicht möglich sein, da es sich um eine automatisierte Einrichtung durch ein PHP-Skript handelt. Könnte mir bitte jemand zeigen, wie man das schreibt? Oder eine äquivalente skriptfähige Funktion?

Mr. King
quelle

Antworten:

8

Siehe /programming/645659/how-do-you-htdigest-400-user-accounts

Die einfachste Methode, basierend auf einem der Vorschläge in der am besten bewerteten Antwort, ist wahrscheinlich folgende:

digest="$( printf "%s:%s:%s" "$user" "$realm" "$password" | 
           md5sum | awk '{print $1}' )"

printf "%s:%s:%s\n" "$user" "$realm" "$digest" >> "/etc/apache2/pw/$user"

Ich habe md5sumvon GNU Coreutils verwendet und awknicht nur, md5weil es das ist, was ich auf meinem System installiert habe, und ich konnte nicht herausfinden, welches Paket enthält /usr/bin/md5- Sie könnten auch ein sha512sumanderes Hashing-Programm verwenden.

zB wenn user = foo , Realm = bar und password = baz, erzeugt der obige Befehl:

foo:bar:5bf2a4095f681d1c674655a55af66c5a

htdigest macht nichts Magisches oder Ungewöhnliches - es gibt nur den Benutzer, den Bereich und das Passwort im richtigen Format aus ... wie der obige Befehl.

Das Löschen des Digests für einen bestimmten Benutzer: Realm kann einfach mit sed durchgeführt werden, anstatt nur einen hinzuzufügen.

sed -i -e "/^$user:$realm:/d" "/etc/apache2/pw/$user"

Das Aktualisieren / Ändern des Digests für einen Benutzer: Realm kann auch mit sed in Kombination mit der oben beschriebenen Methode durchgeführt werden, um die Digest-Zeile zu generieren. z.B

digest="$( printf "%s:%s:%s" "$user" "$realm" "$new_password" | 
           md5sum | awk '{print $1}' )"

sed -i -e "/^$user:$realm:/ c$user:$realm:$digest" "/etc/apache2/pw/$user"
cas
quelle
awesome: P hatte einige Probleme, als die Datei noch nicht existierte, also erstelle ich die Datei, bevor ich diese
Mr. King
0

Überprüfen Sie die Funktion 'proc_open' in PHP http://fr.php.net/manual/en/function.proc-open.php

Sie können htdigest mit Ihrer Option ausführen und dann das neue Passwort in den Pipes senden.

Sie können wahrscheinlich eine PHP-Funktion finden / erstellen, die den höchsten Job erledigt. Es sollte einfacher sein, als proc_open zu verwenden ...

Dom
quelle
Es ist viel komplexer als nur einen neuen Apache-Benutzer zu erstellen: p mit PHP ist keine Option
Mr. King