CentOS 6.8
PHP 7.0.7
Git 1.7.1
在目录/home/work/repositories/
下创建了一个裸仓test.git
git clone
到网站根目录/home/work/www/
PHP
运行用户为www-data
,/home/work/www/
目录的权限为755
,属于www-data
用户和www-data
用户组
配置了post-receive
钩子,开发环境执行git push
的时候,自动到/home/work/www/test
目录下执行git pull
操作
#!/bin/sh cd /home/work/www/test sudo -u www-data env -i git pull
当完成上述配置的时候,开发环境执行git push
,出现了如下报错
Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 790 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: sudo: no tty present and no askpass program specified remote: Gogs: Internal error To ssh://xxx/test.git 6250615..3e4555d master -> master
按照网上的教程,在/etc/sudoers
里面加了这行
%git ALL=(ALL) NOPASSWD: ALL
按照这样配置后,每次git push
之后也都会到/home/work/www/test
目录下执行git pull
操作,达到了预期的效果。
想请教下大家,按照上面的配置,会不会有什么安全风险或者配置方面的漏洞?
谢谢!
个人觉得在生产服务器放代码(包括 git 仓库)是不大好的,尤其还放在 web 目录里面,一旦出现一些权限问题,很有可能代码被拖
其实你可以把php的入口文件和.git文件夹分开,这样就可以了呀。
像Laravel,入口文件在public里,.git在public外面,这样完全不会影响惹。