2009-08-28 69 views
12

我使用git来管理一个小项目。我一直在通过SSH执行我所有的事务(克隆,推送,拉等),但最近运行了git-update-server-info,因为我想尝试通过http运行git-clone。它效果很好。凉。现在我意识到,虽然任何人都可以通过http克隆我的存储库而无需凭证。我隐约知道通过gitosis设置http身份验证,但那真的不是我想要的。我宁愿完全禁用http克隆。可以通过http“禁用”git-clone吗?

有没有一种方法可以告诉git只允许通过ssh进行交易?或者我可以取消我在运行git-update-server-info以首先启用http复制时所做的操作?

+0

使用Git 2.12(2017年第1季度),您将拥有'git config协议。 。允许...'。见[我的答案](http://stackoverflow.com/a/41369667/6309) – VonC 2016-12-28 21:05:04

回答

14

对于git仓库是通过HTTP传输可用,需要通过(任何)的web服务器被“出口”。如果您的存储库(更确切地说它的.git目录)在Web浏览器中从外部可见,则可以通过HTTP协议进行匿名克隆或提取。 git update-server-info用于生成额外的辅助信息(.git/objects/info/packs.git/info/refs),用于克隆(或获取)以了解可用的内容。

所以,你需要做的是要么以这样的方式删除这两个文件(.git/objects/info/packs.git/info/refs,或只是使它所以你的仓库无法通过网络获得,也许更改权限用户哪些web服务器运行时(通常是'nobody'或'www'或'apache')无法访问.git存储库。或配置网络服务器,以便它不会导出(显示)您的存储库。

HTTP协议(当前)被称为“哑”协议,这意味着它按原样服务于文件,并且访问控制由[愚蠢]服务器完成,在这种情况下由您使用的Web服务器(或通过文件系统)。

我想你的版本库不是由web服务器导出的,所以你没有什么可担心的:你的版本库不能通过HTTP获得。

需要注意的是报价通常为Git仓库有匿名未经身份验证的只读访问,并要求认证只针对写入存储库,即推动(至少对于开源项目)

+0

我的.git/objects/info目录已经是空的,我仍然有同样的问题。 – 2011-11-01 02:10:59

1

删除.git/objects/info/packs.git/info/refs

+0

我的.git/objects/info目录已经是空的,我仍然有同样的问题。 – 2011-11-01 02:11:28

2

是否有我可以告诉git只允许通过ssh进行交易吗?

6至8后,GIT中2.12(Q1 2017)将提出的配置,以允许或禁止通过GIT中所使用的协议。

git config protocol.http.allow never 
git config protocol.https.allow never 
git config protocol.git.allow never 
git config protocol.file.allow never 

git config protocol.ssh.allow always 

通过Jeff King (peff)参见commit abcbdc0(二○一六年十二月一十四日)。
请参阅commit a768a02,commit aeae4db, commit f1762d7,commit f962ddf,commit 85e4205(2016年12月14日)作者:Brandon Williams (mbrandonw)
(由Junio C Hamano -- gitster --commit 9d540e9合并,2016年12月27日)

这允许克隆/读取/推过程中有什么协议允许传输更细粒度的控制已经通过了新的配置 机制被激活。

git config现在包括:

protocol.allow 

如果设置为不明确有政策(protocol.<name>.allow)所有协议用户定义的默认策略。
默认情况下,如果没有设置,

  • 已知安全协议(HTTP,HTTPS,混帐,SSH,文件)有always默认策略,
  • 已知危险协议(EXT)有一个默认的策略never
  • 所有其他协议的默认策略为user

支持政策:

  • always - 协议总是能够被使用。
  • never - 协议永远无法使用。
  • user - 协议只能够当GIT_PROTOCOL_FROM_USER未设置或具有1
    当你想要一个协议是由用户直接使用此政策应使用的值将被使用,但不希望它使用通过在没有用户输入的情况下执行clone/fetch/push命令的命令,例如递归子模块初始化。
+0

我不会改变答案,但我很感激你添加这个信息!很高兴知道。 – 2016-12-30 22:59:51

+0

@GeorgeMandis没问题。无论如何它尚未发布。 – VonC 2016-12-30 23:02:17

相关问题