我遇到以下问题:我的 Apache 和 PHP 脚本以用户 www-data 身份运行。
我想调用一个只能以 root 身份执行的脚本,因此我在 /etc/sudoers.d 中添加了一个新文件,以允许 www-data 用户执行此命令:
echo390:/var/www/html# cat /etc/sudoers.d/iptables
www-data ALL= NOPASSWD: /sbin/iptables
Run Code Online (Sandbox Code Playgroud)
我的 PHP 脚本如下所示:
<?php
$command = '"/usr/bin/sudo" "/sbin/iptables" -L -v -n | grep "220.177.198.43"';
echo 'Benutzer: '.exec('whoami').'<br/>';
echo 'Command: '.$command.'<br/>';
$result = array();
exec($command,$result);
print_r($result);
?>
Run Code Online (Sandbox Code Playgroud)
如果我通过以下方式从命令行调用脚本: sudo -u www-data /usr/bin/php test.php 一切都会按预期运行,但是当我通过 Apache 调用脚本时,我在 apache2/error 中收到以下错误。日志:
sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted
Run Code Online (Sandbox Code Playgroud)
我已将 Ubuntu 从 12.02 升级到 14.04 相同的脚本在 Ubuntu 12.02 中运行没有任何问题。有谁能够帮助我?这里的错误在哪里?
www-data 组:
echo390:~$ groups …