我可以吗;禁用";http上的git克隆?
我正在使用git管理一个小项目。我一直在通过SSH执行所有事务(克隆、推送、拉取等),但最近运行了git update server info,因为我想尝试通过http运行git clone。效果很好。酷。现在我意识到,任何人都可以通过http克隆我的存储库,而无需任何凭据。我隐约知道通过gitosis设置http身份验证,但这并不是我想要的。我更愿意完全禁用http克隆我可以吗;禁用";http上的git克隆?,git,http,git-clone,Git,Http,Git Clone,我正在使用git管理一个小项目。我一直在通过SSH执行所有事务(克隆、推送、拉取等),但最近运行了git update server info,因为我想尝试通过http运行git clone。效果很好。酷。现在我意识到,任何人都可以通过http克隆我的存储库,而无需任何凭据。我隐约知道通过gitosis设置http身份验证,但这并不是我想要的。我更愿意完全禁用http克隆 有没有办法让git只允许通过ssh进行事务?或者我可以撤销我在运行git update server info以启用http
有没有办法让git只允许通过ssh进行事务?或者我可以撤销我在运行git update server info以启用http克隆时所做的操作吗?删除
.git/objects/info/packs
和.git/info/refs
要通过http传输使用git存储库,它需要由(任何)web服务器“导出”。如果您的存储库(更确切地说是它的.git
目录)在web浏览器中从外部可见,则可以通过HTTP协议对其进行克隆或匿名获取。用于为克隆(或获取)生成额外的辅助帮助信息(.git/objects/info/packs
和.git/info/refs
),以了解可用的辅助帮助信息
因此,您需要做的是删除这两个文件(.git/objects/info/packs
和.git/info/refs
),或者只是通过更改权限使您的存储库不可通过web访问(通常是“nobody”或“www”或“apache”)无法访问.git
存储库。或者配置web服务器,使其不会导出(显示)您的存储库
HTTP协议(目前)被称为“dumb”协议,这意味着它按原样提供文件,访问控制由[dumb]服务器完成,在本例中由您使用的web服务器(或文件系统)完成
我猜您的存储库不是由web服务器导出的,所以您无需担心:您的存储库无法通过HTTP访问
请注意,Git存储库通常具有匿名的未经验证的只读访问权限,并且仅在写入存储库(即推送)时才需要验证(至少对于开源项目)
有没有办法让git只允许通过ssh进行事务
6到8年后,Git 2.12(2017年第1季度)将提出允许或禁用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
参见(2016年12月14日)作者。参见,,(2016年12月14日)作者。
(于2016年12月27日被合并) 这允许更细粒度地控制通过新配置启用克隆/获取/推送期间允许传输的协议 机制 现在包括:
protocol.allow
如果已设置,则为没有明确策略的所有协议提供用户定义的默认策略(protocol..allow
)。默认情况下,如果未设置
- 已知的安全协议(http、https、git、ssh、file)的默认策略为
始终
- 已知危险协议(ext)的默认策略为
,并且从不
- 所有其他协议都有一个默认策略
李>user
-协议始终可以使用始终
-协议永远无法使用从不
-只有当来自用户的user
GIT\u protocol\u未设置或值为1时,才能使用协议。
当您希望协议可由用户直接使用,但不希望在没有用户输入的情况下执行克隆/获取/推送命令的命令(例如递归子模块初始化)使用该协议时,应使用此策略
我的.git/objects/info目录已为空,我仍有相同的问题。我的.git/objects/info目录已为空,我仍有相同的问题。使用git 2.12(2017年第1季度),您将有
git配置协议..允许…
。看,我不会改变答案,但我非常感谢你添加此信息!很高兴知道。@georgemandi没问题。无论如何,它还没有发布。