Git post-receive hook用于更新不同用户拥有的本地克隆

Ibr*_*him 10 git hook setuid

我正在尝试设置一个git post-receive钩子,这样当收到提交时,机器上另一个存储库的克隆会更新(即确实如此git pull origin master).我正在使用gitosis来服务于存储库,因此我相信post-receive hook将作为gitosis用户运行,而我想要在receive上更新的存储库是由www-data.我应该怎么做呢?

我听说过setuid脚本,但我不确定这是否会带来安全风险?如果这不是安全风险,我将如何做到这一点?我猜我会做一些像脚本所拥有的东西www-data,让它成为世界可执行的并启用setuid位?我想这个脚本几乎无害,因为它只是更新存储库,但我想确定.谢谢!

编辑:有没有办法使用sudo?这比那更安全setuid吗?我的意思是,我不认为setuid如果用户不是root用户会有很多问题,但是看起来好像我必须跳过一些箍setuid才能运行脚本.

第二次编辑:似乎我可以通过一些/etc/sudoers魔术来做到这一点sudo -u.也许我应该在ServerFault上发布这个,但至少我从这一努力中学到了一些东西.

Kim*_*ais 14

恕我直言这应该是服务器故障,但不过这是答案;

加:

gitosis ALL=(www-data) NOPASSWD: /path/to/git
Run Code Online (Sandbox Code Playgroud)

到/ etc/sudoers

并运行命令 sudo -u www-data <whatever the command is>