如何在实时服务器上保护git repo

时间:2012-11-24 04:20:00

标签: git

阅读互联网上的所有教程和文章。作为一个简单的工作流程,我了解到我们可以在我们的实时服务器上创建一个存储库,并通过本地存储库等对其进行push更新。

我的问题和担心是,由于实时服务器也将是一个Git仓库并且它有.git文件夹,这不是一个安全问题吗?如何防止访问它?

更新

假设我的服务器上的实时文件夹是/ www,我可以从浏览器http://myserver.com访问它,这样我也可以访问http://myserver.com/.git/HEAD ???怎么预防呢?

3 个答案:

答案 0 :(得分:4)

您可能需要考虑将存储库和工作树分开。

例如,在Web服务器提供的文件夹之外的某个位置,运行git init --bare。然后使用以下内容替换此目录中的config文件(其中/path/to/web/root是应放置文件的路径。)

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    worktree = /path/to/web/root
[receive]
    denycurrentbranch = ignore

最后添加hooks/post-receive以及以下内容并将其标记为可执行文件

#!/bin/sh
git checkout -f

现在,无论何时推送到存储库,文件都会被检出到正确的位置,您无需担心存储库意外被提供。

答案 1 :(得分:0)

Git不关心访问.git文件夹的安全性 - 您有责任和操作系统强制访问它们。

基本上,如果你可以ssh到你的服务器并访问.git文件夹 - 你可以做任何你想做的事情,git也是如此。

处理用户,密码,ssh密钥管理等非常方便的方法是安装Gerrit。 Gerrit是用Java实现的Git服务器,但它也恰好是很好的代码审查引擎。代码审查部分非常有用,但如果您不想使用它,则不必使用它。您可以稍后使用代码审查,但提供了git服务器,web ui和用户/密钥管理,UI来控制对不同git repos的访问权限是非常好的。

答案 2 :(得分:0)

喜欢公认的答案,这是使用git hooks的绝佳示例。

我如何解决此问题(很久以前我也发布了一个问题,该网站是否应为存储库)是在考虑之后,我决定创建git版本,zip-em-up并解压缩为一个“实时”文件夹。

当然可以使用辅助脚本和git别名。

我有几个脚本,例如rgitpropup(它将分支从头到尾合并到master,然后推送到原点) 和rgitrelease创建一个GPG签名发布,使用dir前缀作为参数,并将其压缩。

我已经对propup脚本进行了别名(别名脚本时,请在它们前面加上“!”前缀)

我想用钩子还可以将安装/解压缩管理到“实时”目录中...

编辑:archive是一个git命令,它具有对压缩为存档格式的内置支持。通常,它与tag命令结合使用,该命令对pgp / gpg签名具有bult-in支持(gpg通常是对git进行数字签名的方式,不要与签名混淆)