我正在使用 git 来管理一个小项目。我一直在通过 SSH 执行所有事务(克隆、推送、 pull 等),但最近运行了 git-update-server-info,因为我想尝试通过 http 运行 git-clone。效果很好。凉爽的。现在我意识到任何人都可以在没有任何凭据的情况下通过 http 克隆我的存储库。我隐约知道通过 gitosis 设置 http 身份验证,但这真的不是我想要的。我宁愿完全禁用 http 克隆。
有没有办法让 git 只允许通过 ssh 进行交易?或者我可以撤消我在运行 git-update-server-info 时所做的操作以首先启用通过 http 的克隆吗?
最佳答案
要使 git 存储库通过 HTTP 传输可用,它需要由(任何)网络服务器“导出”。如果您的存储库(更准确地说是它的 .git
目录)在 Web 浏览器中从外部可见,则可以通过 HTTP 协议(protocol)匿名克隆或获取它。 git update-server-info
用于生成额外的辅助帮助信息(.git/objects/info/packs
和 .git/info/refs
)以供克隆(或获取)了解可用的内容.
所以您需要做的是删除这两个文件(.git/objects/info/packs
和.git/info/refs
) ,或者只是让它无法通过网络访问您的存储库,可能是通过更改权限以网络服务器运行的用户(通常是'nobody'或'www',或'apache') 无权访问 .git
存储库。或者配置网络服务器,使其不会导出(使其可见)您的存储库。
HTTP 协议(protocol)(目前)是所谓的“哑”协议(protocol),这意味着它按原样提供文件,访问控制由 [哑] 服务器完成,在本例中由您使用的 Web 服务器(或文件系统)完成.
我猜你的存储库不是由网络服务器导出的,所以你不必担心:你的存储库无法通过 HTTP 访问。
请注意,Git 存储库通常具有匿名、未经身份验证的只读访问权限,并且仅在写入存储库时需要身份验证,即推送(至少对于开源项目而言)
关于git - 我可以通过 http "disable"git-clone 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1348568/