Haga que Sudo solicite la contraseña del usuario al que está cambiando.

Haga que Sudo solicite la contraseña del usuario al que está cambiando.
sudo -u user1 command ...

¿Cómo puedo hacer que sudosolicite la contraseña de user1en lugar de la contraseña del usuario actual?


Fondo: Quiero usar esto en un Git Hook ejecutado por el usuario git, algo así como

echo "PasswordOfWww" | sudo -Su www bash -c "cd site; git pull; ./deploy.sh"

He probado a usarlo su www -c "command ..."pero me dice

remote: su: must be run from a terminal

cuando presiono al repositorio.

Respuesta1

Realmente no desea almacenar la contraseña de ningún usuario sin cifrar en el sistema de archivos si puede evitarlo. Depende un poco de cuánto confía en la portabilidad del código que tiene en git frente a lo que puede almacenar en el sistema de archivos local. Recomiendo usar sudo con NOPASSWD con un comando lo más restringido posible. Harías una entrada en /etc/sudoers algo como:

git ALL=(www) NOPASSWD: /usr/local/sbin/deploySite

Where deploySitetiene varias comprobaciones para asegurarse de que el usuario acceda al directorio correcto y que el deploy.shscript no tenga nada incompleto.

Si confía en que el usuario git utilice la cuenta del usuario www de forma responsable, puede utilizar NOPASSWD:ALL. Pero básicamente estás permitiendo que quien tenga acceso a subir a git access ejecute cualquier comando que desee como usuario www.

Pero para responder a la pregunta original

Puede hacer que sudo solicite la contraseña del usuario objetivo en lugar del usuario que llama. Pondrías una entrada sudoers como:

Defaults:git targetpw

Luego, el usuario git tendrá que escribir la contraseña del usuario www cuando ejecute sudo -u www ....

información relacionada