我的系统是Centos8 PHP7
首先说明,因为要修改PHP的 disable_functions 配置项,将使PHP可以执行本地Linux命令,所以不能用于生产环境.原理就是有人push代码时,会自动向你配置的URL中发送一个POST请求,请求地址是你自己的,你就可以为所欲为了.
1 在gitlab(不管是自己搭建的还是github,或是码云都可以的,我是自己搭建的gitlab)webhooks中配置

,可以带着token自己写下验证
2 PHP代码
exec("cd /var/www/nav && sudo /usr/bin/git pull");
3 如果没什么意外,这个是不会成功的,主要是权限问题,因为PHP的用户在执行sudo时,是需要输入密码才可以的,我们只需要把php的执行用户在执行sudo的git命令时,设置为无需输入密码即可
1 看看PHP的执行用户是谁,如图

,每个人的安装目录不一样,这里只告诉你修改哪个文件
2 在 /etc/sudoers 增加一行
nobody ALL=NOPASSWD:/usr/bin/git
默认情况下, 这个文件只读,修改属性后记得改回来,如下命令
chmod u+w /etc/sudoers(chmod u-w /etc/sudoers)
3 还有一点,修改php.ini 中disable_functions 将exec,system删掉。或者将disable_functions注释掉,也是比较危险的一步,php可以执行linux命令了
网友评论