Script htdigest -c / chemin / vers / fichier / $ utilisateur $ utilisateur $ mot de passe dans Bash

8

Je veux pouvoir écrire un script avec un mot de passe dans la variable $ password.

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

Pour le moment, il me demande de saisir manuellement un mot de passe; cela ne sera pas possible car ce sera une configuration automatisée par un script PHP. Quelqu'un pourrait-il me montrer comment l'écrire? Ou une fonction scriptable équivalente?

M. King
la source

Réponses:

9

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

La méthode la plus simple, basée sur l'une des suggestions de la réponse la mieux notée, est probablement la suivante:

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

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

J'ai utilisé md5sumde GNU coreutils et awkplutôt que simplement md5parce que c'est ce que j'ai installé sur mon système et je ne pouvais pas être dérangé de savoir quel paquet contient /usr/bin/md5- vous pouvez également utiliser sha512sumou un autre programme de hachage.

Par exemple, si user = foo , realm = bar et password = baz, la commande ci-dessus produira:

foo:bar:5bf2a4095f681d1c674655a55af66c5a

htdigest ne fait rien de magique ni même d'inhabituel - il affiche juste l'utilisateur, le domaine et le mot de passe au bon format ... comme le fait la commande ci-dessus.

Supprimer le résumé pour un utilisateur donné: le domaine au lieu d'en ajouter un, peut facilement être fait avec sed.

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

Et la mise à jour / modification du résumé pour un utilisateur: le domaine peut également être fait avec sed en combinaison avec la méthode ci-dessus pour générer la ligne de résumé. par exemple

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
la source
génial: P a eu quelques problèmes lorsque le fichier n'existait pas déjà, donc je crée le fichier avant de lancer ceci: o
M. King
0

Vérifiez la fonction 'proc_open' en PHP http://fr.php.net/manual/en/function.proc-open.php

Vous pouvez exécuter htdigest avec votre option, puis envoyer dans les tuyaux le nouveau mot de passe.

Vous pouvez probablement trouver / créer une fonction PHP qui fait le travail htdigest. Cela devrait être plus facile que d'utiliser proc_open ...

Dom
la source
c'est beaucoup plus complexe que de simplement créer un nouvel utilisateur apache: p utiliser php n'est pas une option
M. King