我不应该在“htdocs”中放置一个git存储库吗?

时间:2012-05-08 11:28:20

标签: git security shared-hosting

我越来越多地进入Git并且必须将这一点拉直,

我在某处读到了一个不好的安全做法,就是将.git repo放在可以通过网络访问的文件夹中(听起来很合理!)。

我的问题是,除了它是否正确之外,最好的解决办法是什么?当然,如果你在网络开发时在远程主机上工作,那么问题就出现了。

例如,如果我在domain.com/project上工作" project"是存储库,我该怎么办?

是否可以将.git文件夹移到htdocs之外的某个地方并链接到它?或者我可以为它添加一些保护层吗?

我主要是在共享主机上开发,因此我可以安装和设置的内容有限。

我读取的内容比您可以将整个存储库/文件夹隐藏在服务器上的某个地方,然后设置脚本以在推送时复制内容。

但是当开发一个" live"服务器,我希望能够在提交之间实时测试我的代码。

我清楚了吗?

帮助表示赞赏!

4 个答案:

答案 0 :(得分:3)

过去,我做过这个:

project/
  .git/
  README,etc
  public/
    index.html

然后,您可以看到public /子目录世界,但隐藏父项目/目录。您可以使用符号链接或使用正确的.htaccess咒语来执行此操作。

答案 1 :(得分:2)

是的,您可以移动.git目录并使用GIT_DIR环境变量指向它。

GIT_DIR

    If the GIT_DIR environment variable is set then it specifies a path to use instead of the
    default .git for the base of the repository.

答案 2 :(得分:0)

我看到你的问题的两个主要解决方案仍然很简单(与复制脚本相反)。

首先,将您的可访问目录http://example.com/放在/var/www/example-com/之类,并将您的git目录放在/var/www/.git中。这仅适用于主机在example-com目录中只有/var/www/的情况(或者至少没有其他v服务器需要git存储库。如果可以告诉管理员,可以解决此问题。将根目录移至/var/www/example-com/site,以便直接在/var/www/example-com中的文件无法访问。

另一种方法是拒绝通过.git访问.htaccess目录,或者如果不可用,则通过不同的用户访问www-data目录。如果服务器以www-data与主要组me运行,您的用户名为me:www-data,则可以让您的根目录属于r-S并且将组权限设置为www-data意味着.git组的成员可以读取所有内容,可以执行目录(并且只有目录),并设置组粘性位。然后将rwx------目录设为{{1}}或将其分配给您自己的群组。

答案 3 :(得分:0)

我的回答是假设您在debian上使用apache,但它可以轻松适应其他发行版和服务器。

您有两种可能性:

1:创建指向您的存储库的符号链接

您现在可以创建从public_html文件夹到工作副本的符号链接。例如。假设您的vhost配置将DocumentRoot放在“/ var / www / site / public_html”中,您可以将其符号链接到您的git工作副本:

ln -s /var/git/site/html /var/www/site/public_html

或者,如果您只想让子文件夹可访问:

ln -s /var/git/site/feature/ /var/www/site/public_html/feature

这仍然会使一些.git文件可访问,因此您必须修改.htaccess或vhost文件才能使它们不可用

2:导出存储库

在我看来,最优秀的选择是创建一个(裸)存储库并导出(存档)你想要的版本和版本:你通常不希望在每次推送后更新你的网站,而是导出一个特定的标记,分支或提交。

git archive master | tar -x -C /var/www/site/public_html

在这里,您可以用任何可接受的树形结构(例如分支,提交或标记)替换master