Faça com que o sudo pergunte a senha do usuário para o qual está mudando

Faça com que o sudo pergunte a senha do usuário para o qual está mudando
sudo -u user1 command ...

Como posso sudopedir a senha user1em vez da senha do usuário atual?


Fundo: Quero usar isso em um Git Hook que é executado pelo usuário git, algo como

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

Eu tentei usar su www -c "command ...", mas me diz

remote: su: must be run from a terminal

quando eu envio para o repositório.

Responder1

Você realmente não deseja armazenar nenhuma senha de usuário não criptografada no sistema de arquivos, se puder evitá-la. Depende um pouco do quanto você confia na portabilidade do código que você tem no git versus o que você pode armazenar no sistema de arquivos local. Eu recomendo usar sudo com NOPASSWD com o comando mais restrito possível. Você faria uma entrada /etc/sudoers algo como:

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

Where deploySitepossui várias verificações para garantir que o usuário esteja acessando o diretório correto e que o deploy.shscript não contenha nada incompleto.

Se você confia no usuário git para usar a conta do usuário www de forma responsável, você pode usar NOPASSWD:ALL. Mas você está basicamente permitindo que quem tiver acesso para fazer upload para o acesso git execute qualquer comando que desejar como usuário www.

Mas para responder à pergunta original

Você pode fazer com que o sudo solicite a senha do usuário alvo em vez do usuário chamador. Você colocaria uma entrada sudoers como:

Defaults:git targetpw

Então o usuário git terá que digitar a senha do usuário www quando ele executar o sudo -u www ....

informação relacionada