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

标签 git hook setuid

我正在尝试设置一个 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/

相关文章:

git - 有没有办法在执行 `git merge` 命令时绕过 post-merge git hook

security - 删除windows下的进程权限

git 克隆工作; git 子模块失败 "Permission denied"

git - 镜像/复制 Github Wiki 到 repo

regex - Git 忽略 : How to match one or more digits

c++ - 拦截Windows中的Move命令

Git 排除除名为 Views 的文件夹之外的所有文件夹中与名称匹配的所有文件

windows - 如何挂接到 Windows 中的应用程序和进程启动?

python - Linux/Python 如何以非根用户身份导入根访问 py 模块?

c++ - 将 $ORIGIN 与 setuid 应用程序一起使用不会按预期失败