PHP 执行 root 用户才有权限执行的 Linux 脚本
PHP 执行 Linux 的 Shell 脚本,可用用 passthru
、exec
等方法,但是如果命令是一个需要 root 权限才能执行的脚本,怎么办呢?
- ps命令查询运行 php-fpm 进程的用户(一般是 apache)
- root 用户登录执行
visudo
,追加一行:apache ALL=NOPASSWD:/bin/sh
,表示 apache 可以用 sudo 命令,并且不用输入密码 - 如果原来 PHP 执行的命令为
exec(‘/projects/script/run.sh’);
那么现在应修改为:exec(‘sudo sh /projects/script/run.sh’);
实测:在 centos 下要添加(注意格式略有不同):
apache ALL=(ALL) NOPASSWD:/bin/sh