Secuencias de comandos htdigest -c / ruta / a / archivo / $ usuario $ usuario $ contraseña en Bash

8

Quiero poder escribir un script con una contraseña en la variable $ contraseña.

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

En este momento me pide que ingrese manualmente una contraseña; Esto no será posible ya que será una configuración automatizada mediante un script PHP. ¿Podría alguien mostrarme cómo escribir esto? ¿O una función de script equivalente?

Señor rey
fuente

Respuestas:

9

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

El método más fácil, basado en una de las sugerencias en la respuesta más votada, es probablemente este:

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

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

Lo he usado md5sumde GNU coreutils y en awklugar de solo md5porque es lo que he instalado en mi sistema y no me molesté en averiguar qué paquete contiene /usr/bin/md5, también podría usar sha512sumu otro programa de hash.

por ejemplo, si user = foo , realm = bar y password = baz , el comando anterior producirá:

foo:bar:5bf2a4095f681d1c674655a55af66c5a

htdigest no hace nada mágico o incluso inusual: solo muestra el usuario, el reino y la contraseña en el formato correcto ... como lo hace el comando anterior.

Eliminar el resumen para un usuario dado: el reino en lugar de solo agregar uno, se puede hacer fácilmente con sed.

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

Y actualizar / cambiar el resumen para un usuario: el reino también se puede hacer con sed en combinación con el método anterior para generar la línea de resumen. p.ej

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
fuente
impresionante: P tuvo algunos problemas cuando el archivo aún no existía, así que creé el archivo antes de ejecutar esto: o
Mr. King
0

Verifique la función 'proc_open' en PHP http://fr.php.net/manual/en/function.proc-open.php

Puede ejecutar htdigest con su opción, luego enviar las tuberías de la nueva contraseña.

Probablemente pueda encontrar / crear una función PHP que haga el trabajo htdigest. Debería ser más fácil usar proc_open ...

Dom
fuente
es mucho más complejo que simplemente hacer un nuevo usuario de apache: p usando php no es una opción
Mr. King