Git post receive钩子更新其他用户拥有的本地克隆

Git post receive钩子更新其他用户拥有的本地克隆,git,hook,setuid,Git,Hook,Setuid,我正在尝试设置git post receive钩子,以便在接收到提交时,计算机上存储库的另一个克隆会得到更新(即,git拉原始主机)。我使用gitosis为存储库提供服务,因此我相信post receive钩子将作为gitosis用户运行,而我希望在接收时更新的存储库归www data所有。我该怎么做呢 我听说过setuid脚本,但我不确定这是否有安全风险?如果这不是安全风险,我该怎么做?我猜我会做一些事情,比如让脚本归www-data所有,让它在世界范围内可执行并启用setuid位?我想这个脚

我正在尝试设置git post receive钩子,以便在接收到提交时,计算机上存储库的另一个克隆会得到更新(即,
git拉原始主机
)。我使用gitosis为存储库提供服务,因此我相信post receive钩子将作为
gitosis
用户运行,而我希望在接收时更新的存储库归
www data
所有。我该怎么做呢

我听说过
setuid
脚本,但我不确定这是否有安全风险?如果这不是安全风险,我该怎么做?我猜我会做一些事情,比如让脚本归
www-data
所有,让它在世界范围内可执行并启用setuid位?我想这个脚本是无害的,因为它所做的只是更新存储库,但我想确定一下。谢谢

编辑:使用
sudo
有什么方法可以做到这一点吗?这会比setuid更安全吗?我的意思是,如果用户不是root用户,我不认为
setuid
有什么问题,但尽管如此,似乎我还是要跳过一些障碍才能运行
setuid
脚本


第二次编辑:似乎我可以用一些
/etc/sudoers
magic和
sudo-u
做到这一点。也许我应该把这篇文章发布在ServerFault上,但至少我从这篇文章中学到了一些东西。

我想这篇文章应该发布在ServerFault上,但这里还是有答案的

加:

致/etc/sudoers


并以
sudo-u www-data

的身份运行该命令。请注意,我使用的是git用户名,因此,如果您使用的是gitosis或任何其他用户名,只需填写您的用户名

在具有根用户的控制台中执行以下命令:

visudo
“vi”编辑器将打开。添加以下行:

Defaults:git    !authenticate
git ALL=(www-data) ALL
结果,文件(通过调用“visudo”在“vi”编辑器中打开)应如下所示:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

Defaults    env_reset
Defaults:git    !authenticate

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL
git ALL=(www-data) ALL


# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d
然后按CTRL+O保存文件,然后按Enter接受文件名(bla-bla-bla),然后按CTRL+X关闭“vi”编辑器

瞧!现在,git用户可以作为www-data用户执行命令:

sudo -u www-data git pull origin master

是的,我觉得在发布后它更适合ServerFault,但我通常在这里看到git的东西。您确定该行允许gitosis作为www数据运行吗?我不确定是不是这样。现在我正在/etc/suiders:gitosis ALL=(www-data)/path/to/script中尝试这样做,脚本执行git-pull命令。顺便问一下,如何将这样的问题移动到serverfault?…是的,你是对的,我的sudoers示例是错误的,对不起。现在修好了,谢谢!这似乎正是我所需要的。在这种情况下,当运行sudo-uWWW数据时,将从gitosis请求密码,但最初gitosis用户不应该有密码,因为它基于id_rsa.pub。有什么方法阻止请求密码吗?
sudo -u www-data git pull origin master