2

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

这是代码:

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

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

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

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

9 月 22 日 15:01:56 ri 内核:审计(1222063316.536:777):avc:拒绝 { getattr } for pid=4851 comm="sh" name="var" dev=dm-0 ino=114241 scontext=root:system_r :httpd_sys_script_t tcontext=system_u:object_r:var_t tclass=dir
Sep 22 15:01:56 ri kernel: audit(1222063316.549:778): avc: denied { setrlimit } for pid=4851 comm="sudo" scontext=root:system_r: httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=process
Sep 22 15:01:56 ri kernel: audit(1222063316.565:779): avc: denied { read } for pid=4851 comm="sudo" name="shadow" 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: denied { read } for pid=4851 comm="sudo" name="shadow" dev=dm-0 ino=379669 scontext=root:system_r :httpd_sys_script_t tcontext=system_u:object_r:shadow_t tclass=file
Sep 22 15:01:56 ri kernel: audit(1222063316.571:781):avc: denied { setgid } for pid=4851 comm="sudo" capability=6 scontext=root :system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=capability
Sep 22 15:01:56 ri kernel: audit(1222063316.574:782):avc: denied { setuid } for pid=4851 comm="sudo" capability=7 scontext =root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass=能力
9 月 22 日 15:01:56 ri kernel: audit(1222063316.577:783):avc: denied { setgid } for pid=4851 comm="sudo" capability=6 scontext=root:system_r:httpd_sys_script_t tcontext=root:system_r:httpd_sys_script_t tclass =能力

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

用户别名 WWW=apache

WWW ALL=(ALL) NOPASSWD:ALL

你能帮我么 ?难道我做错了什么 ?

谢谢你的帮助,

蒂邦

4

4 回答 4

10

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

于 2008-09-22T08:20:10.913 回答
5

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

顺便说一句,我强烈建议您将 sudo 配置调整为更具限制性。

User_Alias WWW=apache
Cmnd_Alias WEBCMDS=/etc/init.d/portmap
WWW ALL=NOPASSWD: WEBCMDS
于 2008-09-22T08:16:30.673 回答
1

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

请遵循以下链接的第 7 节:https ://wiki.centos.org/HowTos/SELinux 。

用 grep 做httpd_sys_script_t.

基本上步骤是:

# grep httpd_sys_script_t /var/log/audit/audit.log | audit2allow -M httpdallowsudo
# semodule -i httpdallowsudo.pp
于 2015-08-28T11:15:59.957 回答
-3

这可能归结为尝试在非交互式 shell 中执行 sudo 之类的事情。

如果您在 apache 用户邮件日志中对 'sudo' 执行 grep,您可能会发现类似这样的内容

sudo:对不起,你必须有一个 tty 才能运行 sudo

于 2008-09-22T08:19:41.103 回答