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

我花了半天的时间试图弄清楚这一点,而且我做了大量的研究。 我也熟悉许多关于这个主题的现有讨论,比如这个: 如何以root身份运行PHP exec()?

不幸的是,我发现的这些build议似乎都不适合我。

首先,我正在写一些规范,所以我不能避免这样做。 而且,所有机器都将存在于未连接到互联网的专用networking上。 尽pipe有一些安全性很重要,但最重要的是防止错误。 我的目标是configuration一些“瘦服务器”。 通过PHP脚本,我需要能够更改networkingconfiguration(静态或DHCP)并重新启动networking。

我尝试的第一件事是编写一个SUID根的C程序。 它读取,修改和写入networkingconfiguration文件。 如果我以普通用户的身份运行它,它可以正常工作,并可以访问和修改由root拥有的文件。 但是,如果我从一个PHP脚本运行它,我得到访问错误。 看来,Apache以某种方式防止SUID根。

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

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

根据俄罗斯这个页面,这是因为像RHEL(我使用Fedora)的系统默认为suttyers requiretty。 所以我将这行添加到/ etc / sudoers:Defaults!requiretty

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

我在这里完全受阻 也就是说,除非我想以root身份运行Apache本身,否则会比其他任何事情都更不方便。

任何人都可以提出任何build议吗? 我意识到我想要做的事很奇怪。 我敢打赌,你们中的一些人会将我指向一些现有的远程configurationFedora机器的系统(现在我想到了,现在我要去看看)。

顺便说一句,我正在运行SELinux,因为这是默认configurationFedora 15的方式。

谢谢。

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

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

我也试着直接编辑“/ etc / selinux / targeted / booleans”,这个不存在,然后重新启动apache,但是也没有工作。

你有没有尝试setenforce 0 (暂时禁用SELinux), audit2allow ,或完全禁用SELinux? 请参阅: PHP网页即使更新sudoers后也不会启动unix命令