
sudo -u user1 command ...
Como posso sudo
pedir a senha user1
em 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 deploySite
possui várias verificações para garantir que o usuário esteja acessando o diretório correto e que o deploy.sh
script 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 ...
.