Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将git用作部署实用程序时的安全问题_Git_Security_Deployment - Fatal编程技术网

将git用作部署实用程序时的安全问题

将git用作部署实用程序时的安全问题,git,security,deployment,Git,Security,Deployment,git是一个非常强大的工具,但不是那么容易使用 例如,我很高兴使用git作为工具,从我的git存储库更新我的远程站点。问题是在我的网站的根目录中有一个.git目录,外部用户只需使用site/.git访问它,这很糟糕,因为他们可以很容易地获取我的代码历史记录,基本上是当前代码,他们甚至可以从配置文件中获取密码和私人信息 那么,使用git的正确方法是什么?它可以充分利用git,但不引入这些威胁 使用git克隆git://repo site_root来初始化网站,而git pull来获取更改非常方便,

git是一个非常强大的工具,但不是那么容易使用

例如,我很高兴使用git作为工具,从我的git存储库更新我的远程站点。问题是在我的网站的根目录中有一个.git目录,外部用户只需使用site/.git访问它,这很糟糕,因为他们可以很容易地获取我的代码历史记录,基本上是当前代码,他们甚至可以从配置文件中获取密码和私人信息

那么,使用git的正确方法是什么?它可以充分利用git,但不引入这些威胁

使用
git克隆git://repo site_root
来初始化网站,而git pull来获取更改非常方便,但也带来了巨大的安全问题

是否有任何方法可以像上面所示的步骤那样方便,但不存在安全隐患?

请参阅

从上面:

这是我的一行命令,用于获取归档文件并将其发送到 不同地点:

git归档头(cd~/path/where/I/want/it/&tar-xvf-)

这将把整个库提取到指定的路径(没有 .git文件等等)

然而,有时我只想拿出图书馆的一部分。 git archive总是给你整个enchilada这有点糟糕, 在本例中,我使用rsync,如下所示:

rsync路径/I/want/to/export/-ri--del-m--exclude“*” ~/path/where/I/want/it/| grep sT

最后一点——grep sT将限制我所看到的结果的输出 我只看到更新的文件。我用它只是为了保持理智 检查我的出口。如果我看到很多东西去更新一条路径 已经有了图书馆,我知道我只更改了一个文件,然后我 我知道我走错了路

从上面:

这是我的一行命令,用于获取归档文件并将其发送到 不同地点:

git归档头(cd~/path/where/I/want/it/&tar-xvf-)

这将把整个库提取到指定的路径(没有 .git文件等等)

然而,有时我只想拿出图书馆的一部分。 git archive总是给你整个enchilada这有点糟糕, 在本例中,我使用rsync,如下所示:

rsync路径/I/want/to/export/-ri--del-m--exclude“*” ~/path/where/I/want/it/| grep sT

最后一点——grep sT将限制我所看到的结果的输出 我只看到更新的文件。我用它只是为了保持理智 检查我的出口。如果我看到很多东西去更新一条路径 已经有了图书馆,我知道我只更改了一个文件,然后我 我知道我走错了路


我并不喜欢直接使用git自动部署代码的最后一个版本,但这是另一个问题

关于您的安全问题,一个真正基本的解决方案是删除对.git文件的访问权(使用htaccess文件?)


另一件事是从git存储库中删除您的密码,在您的版本控制系统中可能没有使用它。

好吧,我不太喜欢直接使用git自动部署代码的最后一个版本,但这是另一个问题

关于您的安全问题,一个真正基本的解决方案是删除对.git文件的访问权(使用htaccess文件?)


另一件事是从git存储库中删除密码,这在版本控制系统中可能没有用处。

Apache至少默认其配置为禁止web访问任何以
开头的文件,这也可以在任何其他web服务器中完成

此外,最好将敏感文件保存在web根目录之外,即:

.git/
config.file
public/
public/index.html

并将站点的文档根目录设置为
public/
目录。

Apache至少默认其配置为禁止web访问以
开头的任何文件,这也可以在任何其他web服务器中完成

此外,最好将敏感文件保存在web根目录之外,即:

.git/
config.file
public/
public/index.html

并将站点的文档根目录设置为
public/
目录。

由@JaredPar的评论和@Chris Shain的上述答案组合而成(git归档文件为+1)

我还使用了
git-archive
,然后使用Chef进行实际部署。再简单不过了

  • git存档| gzip>rc.tar.gz
  • mv rc.tar.gz
    到我的食谱
  • 上传食谱
  • 在我的服务器上运行的chef客户机运行该配方,将压缩文件复制到一个chache位置,并将其解压缩到我的web服务器目录中


    自我提示:将@JaredPar的评论和上面@Chris Shain的回答结合在一起,在github上发布配方(+/p>)

    我还使用了
    git-archive
    ,然后使用Chef进行实际部署。再简单不过了

  • git存档| gzip>rc.tar.gz
  • mv rc.tar.gz
    到我的食谱
  • 上传食谱
  • 在我的服务器上运行的chef客户机运行该配方,将压缩文件复制到一个chache位置,并将其解压缩到我的web服务器目录中


    self注意:在github上发布配方

    如果需要在生产服务器上完成repo,那么就有解决方案了

    您可以将整个历史记录放在文件系统的某个地方,并让git“指向”它

    如果您这样做,您的历史记录将位于不能通过web访问的
    /private/repo.git
    中,并且您的工作目录将位于/public中,仅为您指定的文件版本提供服务


    有关更多信息,您可以阅读。

    如果需要在生产服务器中进行完整的回购,则有一个解决方案

    你可以选择谁