
sudo -u user1 command ...
¿Cómo puedo hacer que sudo
solicite la contraseña de user1
en 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 deploySite
tiene varias comprobaciones para asegurarse de que el usuario acceda al directorio correcto y que el deploy.sh
script 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 ...
.