通过 php 调用时不允许 setresuid 操作

Jon*_*kus 1 php sudo apache2

我遇到以下问题:我的 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 www-data
显示
www-data : www-data

作为信息:
我使用Apache-mpm-itk 模块 ,以便每个 apache 虚拟主机在单独的用户 ID 下运行。那么如何允许特定的 Apache 用户以 root 权限执行特定的 shell 脚本(在 php 等中)?

预先感谢并亲切问候 Ravermeister

小智 6

修复apache2.4并将mpm-itk
其放入/etc/apache2/conf-enabled/security.conf

<IfModule mpm_itk_module>
    LimitUIDRange 0 6000
    LimitGIDRange 0 6000
</IfModule>
Run Code Online (Sandbox Code Playgroud)

并重新启动apache

这是不需要的apache2.2,但是一旦我升级到apache2.4正在使用shell_execsudo停止工作的 PHP 脚本。