PHP 尽管拥有 sudo 权限,exec sudo 脚本仍无法运行

PHP exec sudo script not working despite having sudo rights

我的 php 脚本:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


exec('sudo /path/to/script.sh');
?>

我的 visudo 线

www-data        ALL=NOPASSWD: /path/to/script.sh

(我对每条路径检查了三次)

如果我删除 exec() 中的 'sudo' 它将执行(我在开始时放了一个 touch aaa,使用 sudo 甚至没有创建文件所以脚本不会甚至开始执行)。该脚本对每个人都有执行权限。

我无法获得任何错误输出。我无法 su 进入 www-data 以尝试使用 sudo 手动启动它(当我 su 我得到“此帐户当前不可用。 ",但我想这是正常行为)。

  1. 如果您的系统启用了 selinux 或其他一些基于策略的访问控制引擎,您的 Web 服务器进程将 运行 在进一步限制权限的受限上下文中。确认是否开启selinux

  2. 提供 sudo 的完整路径。虽然您的 shell 可能在其路径中有它,但您的网络服务器可能没有。

1 - 如果您正在使用 RHEL/CentOS 并且路径在 /root 路径下,您将无法执行它。
2 - 检查 scrit 是否有 'x' 标志 (chmod +x /path/to/script.sh)
3 - 检查用户 ww-data 是否可以使用

执行 scrit
sudo -u www-data script.sh