我有一些通过SSH远程访问的git仓库,我想让它们中的一些只读以防止更多的推送。有些人有遥控器指向这些存储库。如何使git存储库只读?
这些裸存储库初始化为--shared=group
,因此将所有文件的文件权限设置为660,足以保证允许SSH访问,但不允许写入?还是有更简单的方法?
干杯。
我有一些通过SSH远程访问的git仓库,我想让它们中的一些只读以防止更多的推送。有些人有遥控器指向这些存储库。如何使git存储库只读?
这些裸存储库初始化为--shared=group
,因此将所有文件的文件权限设置为660,足以保证允许SSH访问,但不允许写入?还是有更简单的方法?
干杯。
有多种可能的方式来做到这一点。
如果您的用户都有一个shell账号(也许是有限的),他们每个人通过自己的帐户访问git代码库,你可以使用文件系统权限控制到Git仓库SSH访问。在Unix上,这些将在目录上写入权限,可能在创建组的组和特定权限的帮助下(使用“粘性组ID”设置)。
推进需要git-receive-pack
将在用户的$ PATH,并执行他们...虽然我不知道这种方法是如何可行的是。
您可以使用update
或pre-receive
钩做访问控制库,例如在git的来源使用update-paranoid例如钩从contrib/hooks
。
有了更大的用户数,你可以与使用工具来管理访问的git仓库,像Gitosis(Python中,需要setuptools的)或Gitolite(Perl中)更好。
对于只读访问可以设置git daemon提供只读经由SSH协议通过git://
协议匿名(和未)访问,而不是访问。
对于一种方式,以减轻从SSH到GIT协议过渡url.<base>.insteadOf
配置变量见文档。
参见第4章 “Git on the Server” Pro Git书由斯科特·查孔(CC-BY-NC-SA许可)。
因为git主要依赖文件系统进行访问控制,所以这将起作用。请注意,在您的权限中,世界无权访问该文件,但用户和组具有读/写访问权限。如果你想世界可读,你的权限应该是0444
。
您可以通过将回购权限设置为0664
(其中用户为nobody
且该组类似于gitdevs
)来做更进一步的细粒度控制。然后,只有gitdevs
组中的人才能够写回购,但世界可以从中读取。
后续Here is a link,涵盖各种方式来分享你的回购和封面来亲的&利弊和访问控制功能。
另一种可能性是git协议,但它需要git守护进程运行。
如果您还需要访问控制,请查看gitosis。很容易设置,你可以使用一个简单的脚本来控制谁可以做什么。
或gitolite:http://github.com/sitaramc/gitolite – 2009-11-02 19:48:21
一个pre-receive
挂钩,简单的打印通知消息,退出与非0状态做这项工作。
假设你把一些有意义的信息,在你的消息,这也减少了从失望的用户,询问他们为什么不能把查询:
#!/bin/bash
echo "=================================================="
echo "This repository is no longer available for pushes."
echo "Please visit blah blah yadda yadda ...."
echo "=================================================="
exit 1
最近我用限制访问路径“/回购。 git/git-receive-pack“来存档结果,该存储库对于某些用户来说是可读写的,而对于其他用户则是只读的。在httpd配置中,它看起来像这样:
<Location /repo.git/>
Require group developers developers-ro
</Location>
<Location /repo.git/git-receive-pack>
Require group developers
</Location>
应该注意,对于文件系统权限,您可以使用chmod,正如Pat Notz所建议的那样。 – 2009-11-04 16:13:23
感谢您的想法(每个人)。受到更新偏执狂示例钩子的启发,我现在在我的回购站中有一个钩子,它简单地“echo”关闭所有按钮“;退出1' – 2009-11-12 21:30:03
@SteveFolly如果你的评论是一个答案,我会投它而不是接受的答案。你的论文短小,重点突出,有效。 – 2015-04-28 06:56:04