我已编辑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)。
答案 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文件所在的位置)。