从PHP / Apache,exec()或system()程序作为root:“sudo:无法打开审计系统:权限被拒绝”

时间:2011-09-05 23:20:14

标签: php apache sudo suid

我花了半天的时间试图解决这个问题,而且我做了很多研究。我也熟悉关于这个主题的许多现有讨论,例如: How to run PHP exec() as root?

不幸的是,我发现的任何建议似乎都不适合我。

首先,我正在为规范写一些内容,所以我无法避免这样做。此外,所有计算机都将存在于未连接到Internet的专用网络上。虽然拥有一些安全性很重要,但最重要的是防止出错。我的目标是配置一些“瘦服务器”。通过PHP脚本,我需要能够更改网络配置(静态或DHCP)并重新启动网络。

我尝试的第一件事是编写一个SUID root的C程序。它读取,修改和写入网络配置文件。如果我以普通用户身份运行它,它可以正常工作,并且可以访问和修改root拥有的文件。但是,如果我从PHP脚本运行它,我会得到访问错误。似乎Apache以某种方式阻止了SUID root。

根据其他讨论的建议,我尝试了“sudo”方法。暂时,我将此添加到/ etc / sudoers: apache ALL =(ALL)NOPASSWD:ALL

我得到的错误是这样的: sudo:无法打开审核系统:权限被拒绝

根据俄语的这个页面,这种情况正在发生,因为像RHEL这样的系统(我正在使用Fedora)默认为sutty的requiretty。所以我把这行添加到/ etc / sudoers: 默认值!requiretty

我仍然得到同样的错误。 sudo:无法打开审核系统:权限被拒绝

我在这里完全陷入困境。也就是说,除非我想以root身份运行Apache本身,否则会比其他任何东西更不方便。

有人可以在这里提出任何建议吗?我意识到我想做的事情很奇怪。我打赌你们中的一些人会指出一些用于远程配置Fedora机器的现有系统(现在我想起来了,我现在就去研究它。)

顺便说一下,我正在运行SELinux,因为这是Fedora 15默认配置的方式。

感谢。

编辑:
我找到了这个教程:
http://www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection/

不幸的是,当我运行“setsebool httpd_disable_trans 1”时,我收到错误:
无法更改活动布尔值:无效布尔值

我也尝试直接编辑“/ etc / selinux / targeted / booleans”,这些都不存在,并重新启动apache,但这也不起作用。

2 个答案:

答案 0 :(得分:4)

您是否尝试setenforce 0(暂时禁用SELinux),audit2allow或完全禁用SELinux?请参阅:PHP webpage doesn't launch unix command even after updated sudoers

答案 1 :(得分:0)

搜索了几个小时后,这对我有用。祝好运! :)

semanage fcontext -a -t httpd_sys_script_exec_t'/ whatever / scripts(/.*)?'

restorecon -R -v / whatever / scripts /

https://stackoverflow.com/a/15424003/11249696