基本上我正在尝试从php网页重启服务。

以下是代码:

<?php
exec ('/usr/bin/sudo /etc/init.d/portmap restart');
?>

但是,在 / var / log / httpd / error_log 中,我得到了

  

无法更改为sudoers gid:不允许操作

在/ var / log / messages中,我得到了

  

Sep 22 15:01:56 ri kernel:audit(1222063316.536:777):avc:denied {getattr} for pid = 4851 comm =&quot; sh&quot;名称= QUOT; VAR&QUOT; dev = dm-0 ino = 114241 scontext = root:system_r:httpd_sys_script_t tcontext = system_u:object_r:var_t tclass = dir
  9月22日15:01:56 ri kernel:audit(1222063316.549:778):avc:拒绝{setrlimit} for pid = 4851 comm =&quot; sudo&quot; scontext = root:system_r:httpd_sys_script_t tcontext = root:system_r:httpd_sys_script_t tclass = process
  9月22日15:01:56 ri kernel:audit(1222063316.565:779):avc:拒绝{read} for pid = 4851 comm =&quot; sudo&quot;名称= QUOT;阴影&QUOT; dev = dm-0 ino = 379669 scontext = root:system_r:httpd_sys_script_t tcontext = system_u:object_r:shadow_t tclass = file
  9月22日15:01:56 ri kernel:audit(1222063316.568:780):avc:拒绝{read} for pid = 4851 comm =&quot; sudo&quot;名称= QUOT;阴影&QUOT; dev = dm-0 ino = 379669 scontext = root:system_r:httpd_sys_script_t tcontext = system_u:object_r:shadow_t tclass = file
  9月22日15:01:56 ri kernel:audit(1222063316.571:781):avc:拒绝{setgid}为pid = 4851 comm =&quot; sudo&quot; capability = 6 scontext = root:system_r:httpd_sys_script_t tcontext = root:system_r:httpd_sys_script_t tclass = capability
  9月22日15:01:56 ri kernel:audit(1222063316.574:782):avc:拒绝{setuid}为pid = 4851 comm =&quot; sudo&quot; capability = 7 scontext = root:system_r:httpd_sys_script_t tcontext = root:system_r:httpd_sys_script_t tclass = capability
  9月22日15:01:56 ri kernel:audit(1222063316.577:783):avc:拒绝{setgid}为pid = 4851 comm =&quot; sudo&quot; capability = 6 scontext = root:system_r:httpd_sys_script_t tcontext = root:system_r:httpd_sys_script_t tclass = capability

在我的visudo中,我添加了这些行

  

User_Alias WWW = apache

     

WWW ALL =(ALL)NOPASSWD:ALL

你能帮帮我吗?我做错了吗?

感谢您的帮助,

tiBoun

有帮助吗?

解决方案

问题不在于sudo,而是使用 SELinux ,这是合理的)设置拒绝HTTPD获得root权限 您需要明确允许此操作(您可以使用 audit2allow ),或将SELinux设置为相反,是宽容的。我建议前者。

其他提示

您获得的错误似乎与您的SELinux配置有关。您可以尝试暂时禁用它。

顺便说一句,我强烈建议您调整sudo配置以限制更多。

User_Alias WWW=apache
Cmnd_Alias WEBCMDS=/etc/init.d/portmap
WWW ALL=NOPASSWD: WEBCMDS

我最近遇到了这个问题,上面接受的答案有所帮助。但是,我想发布这个答案来详细说明,以便下一个人不需要花太多时间,比如我!

按照以下链接的第7部分: https://wiki.centos.org/HowTos/SELinux

使用 httpd_sys_script_t 执行grep。

基本上步骤是:

# grep httpd_sys_script_t /var/log/audit/audit.log | audit2allow -M httpdallowsudo
# semodule -i httpdallowsudo.pp

这可能是因为尝试在非交互式shell中执行sudo。

如果你在apache用户邮件日志中为'sudo'做grep,你可能会发现这样的事情

  

sudo:抱歉,你必须有一个tty来运行sudo

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top