我正在尝试设置一个 git post-receive Hook ,以便在收到提交时更新机器上存储库的另一个克隆(即执行 git pull origin master
) .我正在使用 gitosis 为存储库提供服务,因此我相信接收后 Hook 将作为 gitosis
用户运行,而我想在接收时更新的存储库归 所有www-数据
。我应该怎么做?
我听说过 setuid
脚本,但我不确定这是否存在安全风险?如果这不是安全风险,我将如何去做呢?我猜想我会做一些事情,比如让 www-data
拥有脚本并使其在世界范围内可执行并启用 setuid 位?我想这个脚本几乎是无害的,因为它所做的只是更新存储库,但我想确定一下。谢谢!
编辑:有没有办法使用 sudo
来做到这一点?这会比 setuid
更安全吗?我的意思是,如果用户不是 root,我不认为 setuid
有什么问题,但似乎我必须跳过几个环节才能获得 setuid
要运行的脚本。
第二次编辑:看来我可能可以使用一些/etc/sudoers
魔法和sudo -u
来做到这一点。也许我应该将它发布到 ServerFault 上,但至少我从这次尝试中学到了一些东西。
最佳答案
恕我直言,这应该是服务器故障,但这就是答案;
添加:
gitosis ALL=(www-data) NOPASSWD: /path/to/git
到/etc/sudoers
并以 sudo -u www-data <whatever the command is>
运行命令
关于Git post-receive hook 更新不同用户拥有的本地克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1951137/