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 我得到“此帐户当前不可用。
",但我想这是正常行为)。
如果您的系统启用了 selinux 或其他一些基于策略的访问控制引擎,您的 Web 服务器进程将 运行 在进一步限制权限的受限上下文中。确认是否开启selinux
提供 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
我的 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 我得到“此帐户当前不可用。 ",但我想这是正常行为)。
如果您的系统启用了 selinux 或其他一些基于策略的访问控制引擎,您的 Web 服务器进程将 运行 在进一步限制权限的受限上下文中。确认是否开启selinux
提供
sudo
的完整路径。虽然您的 shell 可能在其路径中有它,但您的网络服务器可能没有。
1 - 如果您正在使用 RHEL/CentOS 并且路径在 /root 路径下,您将无法执行它。
2 - 检查 scrit 是否有 'x' 标志 (chmod +x /path/to/script.sh)
3 - 检查用户 ww-data 是否可以使用
sudo -u www-data script.sh