我花了半天的时间试图弄清楚这一点,而且我做了大量的研究。 我也熟悉许多关于这个主题的现有讨论,比如这个: 如何以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命令