将git用作部署实用程序时的安全问题
git是一个非常强大的工具,但不是那么容易使用 例如,我很高兴使用git作为工具,从我的git存储库更新我的远程站点。问题是在我的网站的根目录中有一个.git目录,外部用户只需使用site/.git访问它,这很糟糕,因为他们可以很容易地获取我的代码历史记录,基本上是当前代码,他们甚至可以从配置文件中获取密码和私人信息 那么,使用git的正确方法是什么?它可以充分利用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://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
到我的食谱自我提示:将@JaredPar的评论和上面@Chris Shain的回答结合在一起,在github上发布配方(+/p>) 我还使用了
git-archive
,然后使用Chef进行实际部署。再简单不过了
git存档| gzip>rc.tar.gz
mv rc.tar.gz
到我的食谱self注意:在github上发布配方如果需要在生产服务器上完成repo,那么就有解决方案了 您可以将整个历史记录放在文件系统的某个地方,并让git“指向”它 如果您这样做,您的历史记录将位于不能通过web访问的
/private/repo.git
中,并且您的工作目录将位于/public中,仅为您指定的文件版本提供服务
有关更多信息,您可以阅读。如果需要在生产服务器中进行完整的回购,则有一个解决方案 你可以选择谁