取消在PHP Exec中以root身份运行BASH脚本

时间:2018-02-13 19:34:24

标签: php bash exec sudo

我已编辑sudoers文件以允许无密码执行相关脚本:

wordpress ALL=(root) NOPASSWD: /home/vgnadmin/createnewsite
Defaults:wordpress !requiretty

这是应该执行命令的代码:

if ($_SERVER["REQUEST_METHOD"] == "POST" && $usernameerr == "" && $sitenameerr == "") {
$username=escapeshellarg($username);
$sitename=escapeshellarg($sitename);
exec("sudo /home/vgnadmin/createnewsite $username $sitename 2>&1", $output, $retval);
    if ($retval == 1) {
            echo "<h1>Script Failed.</h1><br>";
            echo "Error Message:<br>";
            foreach ($output as $line) {
                    echo "$line<br>";
            }

但是在输入表单信息并尝试运行脚本时,我收到错误消息:

  

sudo:PERM_ROOT:setresuid(0,-1,-1):不允许操作
  sudo:无法初始化策略插件

我检查了journalctl -xe以查看命令是否正在运行,或者服务器端产生的任何错误都没有。我错过了什么吗?

其他非sudo的命令运行正常(例如ls)。

2 个答案:

答案 0 :(得分:1)

检查php.ini并搜索 disable_functions

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

如果你不在那里,那你很好。

现在检查您的权限/所有权的文件和目录,命令将进行更改。 使用apache或www-data用户更新所有权。 Changig文件所有权。

根据您的评论,所有权为wordpress apache,请尝试将用户wordpress添加到sudo。

答案 1 :(得分:0)

以下是答案:

  

我们使用apm 2.4的mpm-itk(版本2.4.7-02)并且它可以工作   完美。这里唯一要考虑的是新配置   指令

LimitUIDRange
     

LimitGIDRange
     

这些指令定义了mpm-itk可以使用哪些UID和GID(通过   的setuid / setguid)。因为你显然希望它能够成为root用户,   您的较低范围必须为ID 0.以下配置将起作用   这里:

<IfModule mpm_itk_module>
LimitUIDRange 0 6000
LimitGIDRange 0 6000
</IfModule>
     

请注意,上边框应包含所有用户UID / GID   要在配置中使用的组合   AssignUserID。

     

请注意,您可以为每个虚拟主机配置此功能。注意   你也需要Linux内核3.5.0或更高版本。   https://askubuntu.com/questions/491624/setresuid-operation-not-permitted-when-calling-via-php

在RedHat版本中,您需要手动将模块添加到/etc/httpd/conf/httpd.conf(或您的conf文件所在的位置)。