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?

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"

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 ...


c'est beaucoup plus complexe que de simplement créer un nouvel utilisateur apache: p utiliser php n'est pas une option
M. King
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.