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

Geo*_*dis 12 git http git-clone

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

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

Jak*_*ski 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),要么只是通过网络提供你的存储库,也许通过改变权限,以便用户运行web服务器(通常是'nobody'或者'www'或'apache')无权访问.git存储库.或者配置Web服务器,使其不会导出(显示)您的存储库.

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

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

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


Von*_*onC 5

有没有办法告诉 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
Run Code Online (Sandbox Code Playgroud)

请参阅Jeff King ( )提交的 abcbdc0(2016 年 12 月 14 日。 参见布兰登·威廉姆斯 (Brandon Williams ) 的提交 a768a02提交 aeae4db提交 f1762d7提交 f962ddf提交 85e4205(2016 年 12 月 14 日(由Junio C Hamano合并-- --提交 9d540e9 中,2016 年 12 月 27 日)peff
mbrandonw
gitster

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

git config 现在包括:

protocol.allow
Run Code Online (Sandbox Code Playgroud)

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

  • 已知安全协议(http、https、git、ssh、文件)的默认策略为always
  • 已知危险协议 (ext) 的默认策略为never,并且
  • 所有其他协议的默认策略为user

支持的政策:

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