我已经花了半天时间试图弄清楚这一点,并且我已经做了很多研究。我也熟悉有关该主题的许多现有讨论,例如: 如何以 root 身份运行 PHP exec()?
不幸的是,我发现的任何建议似乎都不适合我。
首先,我正在为规范写一些东西,所以我无法避免这样做。此外,所有机器都将存在于未连接到 Internet 的专用网络上。虽然拥有一定的安全性很重要,但最重要的是要防止错误。我的目标是配置一些“瘦服务器”。通过 PHP 脚本,我需要能够更改网络配置(静态或 DHCP)并重新启动网络。
我尝试的第一件事是编写一个 SUID root 的 C 程序。它读取、修改和写入网络配置文件。如果我以普通用户身份运行它,它工作得很好,可以访问和修改 root 拥有的文件。但是如果我从 PHP 脚本运行它,我会遇到访问错误。似乎 Apache 以某种方式阻止了 SUID root。
根据其他讨论的建议,我尝试了“sudo”方法。暂时,我将它添加到 /etc/sudoers: apache ALL=(ALL) NOPASSWD: ALL
我得到的错误是:sudo:无法打开审计系统:权限被拒绝
根据this page in Russian,这是因为像RHEL(我正在使用Fedora)这样的系统默认为sudoers的requiretty。所以我将此行添加到 /etc/sudoers: Defaults !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,但这也不起作用。