Php sudo:PERM_ROOT:setresuid(0,-1,-1):不允许操作

Php sudo:PERM_ROOT:setresuid(0,-1,-1):不允许操作,php,apache,exec,sudo,Php,Apache,Exec,Sudo,所以问题是apache.err中出现了错误 我可以作为shell中的用户执行 root@ubuntu:~# su www-data www-data@ubuntu:/root$ sudo /usr/local/bin/metronomectl restart Stopped Started www-data@ubuntu:/root$ 但是当我通过php尝试相同的命令时 exec('sudo /usr/local/bin/metronomectl restart'); 我得到了错误 sudo

所以问题是apache.err中出现了错误

我可以作为shell中的用户执行

root@ubuntu:~# su www-data
www-data@ubuntu:/root$ sudo /usr/local/bin/metronomectl restart
Stopped
Started
www-data@ubuntu:/root$
但是当我通过php尝试相同的命令时

exec('sudo /usr/local/bin/metronomectl restart');
我得到了错误

sudo: PERM_ROOT: setresuid(0, -1, -1): Operation not permitted
用户www数据位于sudoers中

我在这里已经绞尽脑汁了。。。 感谢您的帮助

另外,请询问您是否需要任何额外的信息

编辑:

sudoers系列:

www-data ALL= NOPASSWD: /usr/local/bin/metronomectl

通过在apache中禁用mpm_itk模块进行修复

由于mpm itk必须能够设置UID,所以它以root用户身份运行,尽管可能受到POSIX功能和seccomp v2的限制

在Linux 3.5.0或更高版本上,seccomp v2支持似乎完全中断了sudo或crontab之类的执行,因为它们在内部使用setuid系统调用

解决方法是不使用mpm_itk,或避免执行此类二进制文件


参考文献:

您可以简单地禁用其对sudo的限制,而不是直接禁用mpm itk:

<IfModule mpm_itk_module>
    # Permit using "sudo"                             
    LimitUIDRange 0 65534
    LimitGIDRange 0 65534
</IfModule>
<IfModule mpm_itk_module>
    # Permit using "sudo"                             
    LimitUIDRange 0 65534
    LimitGIDRange 0 65534
</IfModule>