PHP 执行 Linux 的 Shell 脚本,可用用 passthruexec 等方法,但是如果命令是一个需要 root 权限才能执行的脚本,怎么办呢?

  1. ps命令查询运行 php-fpm 进程的用户(一般是 apache)
  2. root 用户登录执行 visudo,追加一行: apache ALL=NOPASSWD:/bin/sh,表示 apache 可以用 sudo 命令,并且不用输入密码
  3. 如果原来 PHP 执行的命令为 exec(‘/projects/script/run.sh’); 那么现在应修改为:exec(‘sudo sh /projects/script/run.sh’);

实测:在 centos 下要添加(注意格式略有不同):

apache ALL=(ALL) NOPASSWD:/bin/sh

标签: php, linux, root