sudo -u user1 command ...
如何让sudo
询问密码user1
而不是当前用户的密码?
背景:我想在用户执行的 Git Hook 中使用它git
,例如
echo "PasswordOfWww" | sudo -Su www bash -c "cd site; git pull; ./deploy.sh"
我尝试过使用su www -c "command ..."
但它告诉我
remote: su: must be run from a terminal
当我推送到存储库时。
答案1
如果可以避免的话,您确实不想在文件系统中存储任何未加密的用户密码。这在一定程度上取决于您对 git 中代码的可移植性的依赖程度与对本地文件系统上可以存储的内容的依赖程度。我建议将 sudo 与 NOPASSWD 一起使用,并尽可能限制命令。您可以创建一个 /etc/sudoers 条目,如下所示:
git ALL=(www) NOPASSWD: /usr/local/sbin/deploySite
其中deploySite
有各种检查,以确保用户进入正确的目录,并且deploy.sh
脚本中没有任何粗略的内容。
如果您信任用户 git 负责任地使用用户 www 的帐户,则可以使用 NOPASSWD:ALL。但你基本上允许任何有权上传到 git 访问权限的人以用户 www 的身份运行他们想要的任何命令。
但要回答原来的问题
您可以让 sudo 询问目标用户的密码而不是调用用户的密码。您可以放置一个 sudoers 条目,例如:
Defaults:git targetpw
那么用户 git 在运行时就必须输入用户 www 的密码sudo -u www ...
。