我可以通过http“禁用”git-clone吗?

时间:2009-08-28 18:10:32

标签: git http git-clone

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

有没有办法告诉git只允许通过ssh进行交易?或者我可以撤消我在运行git-update-server-info时所做的事情,以便首先通过http进行克隆?

3 个答案:

答案 0 :(得分:16)

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

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

HTTP协议(当前)称为“哑”协议,意味着它按原样提供文件,访问控制由[哑]服务器完成,在本例中由您使用的Web服务器(或文件系统)完成

我想您的存储库不会被Web服务器导出,因此您无需担心:您的存储库无法通过HTTP

请注意,Git存储库通常会引用具有匿名未经身份验证的只读访问权限,并且只需要对存储库进行身份验证即推送(至少对于开源项目)

答案 1 :(得分:2)

  

有没有办法告诉git只允许通过ssh进行交易?

6到8 之后,Git 2.12(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

commit abcbdc0Jeff King (peff)(2016年12月14日) commit a768a02commit aeae4dbcommit f1762d7commit f962ddfcommit 85e4205Brandon Williams (mbrandonw)(2016年12月14日)。{
} Junio C Hamano -- gitster --于2016年12月27日commit 9d540e9合并)

这允许通过新配置启用克隆/获取/推送期间允许传输的协议的更精细控制 机构。

git config现在包括:

protocol.allow
  

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

     
      
  • 已知安全协议(http,https,git,ssh,file)的默认策略为always
  •   
  • known-dangerous protocols(ext)的默认策略为never
  •   
  • 所有其他协议的默认策略为user
  •   
     

支持的政策:

     
      
  • always - 始终可以使用协议。
  •   
  • never - 永远无法使用协议。
  •   
  • user - 只有在GIT_PROTOCOL_FROM_USER未设置或值为1时才能使用协议。
      当您希望协议可由用户直接使用但不希望由没有用户输入执行clone / fetch / push命令的命令使用时,应使用此策略,例如,递归子模块初始化。
  •   

答案 2 :(得分:1)

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