代码之家  ›  专栏  ›  技术社区  ›  George Mandis

我可以通过HTTP“禁用”Git克隆吗?

  •  12
  • George Mandis  · 技术社区  · 16 年前

    我用Git管理一个小项目。我已经通过ssh执行了所有事务(clone、push、pull等),但最近运行了git update server info,因为我想尝试通过http运行git clone。效果很好。酷。现在我意识到,尽管任何人都可以通过HTTP克隆我的存储库,而不需要任何凭证。我隐约知道要通过Gitosis设置HTTP身份验证,但这并不是我想要的。我宁愿完全禁用HTTP克隆。

    我能告诉Git只允许通过ssh进行事务处理吗?或者,我是否可以撤消运行git update server info时所做的操作,以便首先启用通过HTTP进行克隆?

    3 回复  |  直到 9 年前
        1
  •  15
  •   Jakub Narębski adamtaub    16 年前

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

    所以你需要做的是 删除这两个文件( .git/对象/信息/包 Git/信息/参考文献 ) 或者只是让它使您的存储库不能通过Web使用,也许通过 更改权限 这样,运行Web服务器的用户(通常是“nobody”、“www”或“apache”)就无法访问 Git 存储库。或 配置Web服务器 这样它就不会导出(使可见)您的存储库。

    HTTP协议(目前)是所谓的“哑”协议,这意味着它按原样服务文件,访问控制由[哑]服务器完成,在本例中,由您使用的Web服务器(或文件系统)完成。

    我想您的存储库不是由Web服务器导出的,因此您无需担心: 您的存储库无法通过HTTP访问 .

    请注意,Git存储库通常引用的是匿名的未经身份验证的只读访问,并且只要求对写入存储库的操作进行身份验证,即推送(至少对于开源项目)。

        2
  •  2
  •   VonC    9 年前

    我能告诉Git只允许通过ssh进行事务处理吗?

    6到8 稍后,Git2.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
    

    commit abcbdc0 (2016年12月14日) Jeff King ( peff ) .
    commit a768a02 ,请 commit aeae4db ,请 commit f1762d7 ,请 commit f962ddf ,请 commit 85e4205 (2016年12月14日) Brandon Williams ( mbrandonw ) .
    (合并) Junio C Hamano -- gitster -- 在里面 commit 9d540e9 ,27十二月2016日)

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

    git config 现在包括:

    protocol.allow
    

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

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

    支持的策略:

    • 总是 -协议总是可以使用的。
    • 从未 -协议永远无法使用。
    • 用户 -只有在以下情况下才能使用协议: GIT_PROTOCOL_FROM_USER 未设置或值为1。
      如果您希望协议直接由用户使用,但不希望由执行克隆/提取/推送命令而无需用户输入的命令(例如递归子模块初始化)使用,则应使用此策略。
        3
  •  1
  •   geocar    16 年前

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

    推荐文章