从PHP/Apache, exec()或system()程序作为root: "sudo:无法打开审计系统:Pe


From PHP/Apache, exec() or system() program as root: "sudo: unable to open audit system: Permission denied"

我花了半天时间想弄清楚这个问题,我做了很多研究。我也熟悉许多关于这个话题的现有讨论,比如这个:如何运行PHP exec()作为根?

不幸的是,我找到的建议似乎都不适合我。

首先,我是按照规范写东西的,所以我无法避免这样做。此外,所有机器都将存在于没有连接到internet的专用网络中。虽然有一定的安全性很重要,但最重要的是防止错误。我的目标是配置一些"瘦服务器"。通过一个PHP脚本,我需要能够改变网络配置(静态或DHCP)和重新启动网络。

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

根据其他人讨论的建议,我尝试了"sudo"方法。暂时,我把这个添加到/etc/sudoers:apache ALL=(ALL) NOPASSWD: ALL

我得到的错误是:sudo:无法打开审计系统:Permission denied

根据俄语的这个页面,这是因为像RHEL(我使用的是Fedora)这样的系统默认需要sudoers。所以我在/etc/sudoers中添加了这一行:违约! requiretty

我仍然得到相同的错误。sudo:无法打开审计系统:Permission denied

我完全被困住了。也就是说,除非我想以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/boolean",它不存在,并重新启动apache,但这也不起作用。

您是否尝试了setenforce 0(暂时禁用SELinux)、audit2allow或完全禁用SELinux?参见:PHP网页不't启动unix命令,即使更新了sudoers

经过几个小时的搜索,这对我有效。好运!:)

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

restorerecon -R -v/whatever/scripts/

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