使用本应用可以让PHP安全的调用linux命令,无需开启exec函数.
请先部署脚本文件后再安装(windows不支持).
原理:通过inotify监控目录内的文件变化,从而执行预先编辑好的命令脚本.
参数
sitepath为网站根目录,格式为/www/wwwroot/classcms.com/,需以/结尾
shellpath为命令脚本存放目录,网站用户组不应有此目录写入与修改权限,否则会有安全风险.
centos部署
安装inotify-tools:yum install inotify-tools -y
复制shell_centos.sh到 /etc/init.d/ 并修改权限:chmod 755 shell_centos.sh
修改shell_centos.sh内sitepath与shellpath参数
添加为服务:chkconfig --add shell_centos.sh
开启服务:chkconfig shell_centos.sh on
启动脚本:/etc/init.d/shell_centos.sh &
debian/ubuntu部署
安装 inotify-tools apt-get install -y inotify-tools
复制shell_debian.sh(ubuntu为:shell_ubuntu.sh,下同)此文件到 /etc/init.d/ 并增加执行权限 chmod 755 shell_debian.sh
修改shell_debian.sh内sitepath与shellpath参数
update-rc.d shell_debian.sh defaults 50
/etc/init.d/shell_debian.sh & 启动脚本
编写脚本并执行
shell_centos(debian/ubuntu).sh在调用命令脚本时,会传入网站根目录参数与命令参数,如:xxx.sh /www/wwwroot/classcms.com/ test test2
可以在命令脚本内通过$1获取到网站根目录,通过$2 $3等获取命令参数.
脚本内应判断参数合法性,避免造成不必要的安全风险.
命令脚本举例
#!/bin/sh
# 删除网站应用目录下的某个应用目录
rm -rf $1"class/"$2
可以在命令脚本内通过curl或php命令行方式将执行结果返回给网站
将编写好的脚本文件存放于shellpath目录中.
测试脚本文件是否存在
C('shell:check','xxx');
调用脚本
C('shell:exec','xxx');
C('shell:exec','xxx','test','test2');//带参数调用,参数不能包含空格等特殊字符