我花了半天时间想弄清楚这个问题,并且做了很多研究。我也熟悉有关该主题的许多现有讨论,例如: How to run PHP exec() as root?
不幸的是,我发现的所有建议似乎都不适合我。
首先,我正在为规范编写一些东西,所以我真的无法避免这样做。此外,所有机器都将存在于未连接到 Internet 的专用网络上。虽然拥有一定的安全性很重要,但最重要的是防止错误。我的目标是配置一些“瘦服务器”。通过 PHP 脚本,我需要能够更改网络配置(静态或 DHCP)并重新启动网络。
我尝试的第一件事是编写一个 SUID root 的 C 程序。它读取、修改和写入网络配置文件。如果我以普通用户身份运行它,它工作得很好并且可以访问和修改 root 拥有的文件。但是,如果我从 PHP 脚本运行它,则会出现访问错误。看来 Apache 以某种方式阻止了 SUID root。
根据其他讨论的建议,我尝试了“sudo”方法。暂时,我将其添加到/etc/sudoers 中: ALL=(ALL) NOPASSWD: ALL
我得到的错误是这样的: sudo:无法打开审核系统:权限被拒绝
根据这个俄语页面,发生这种情况是因为像 RHEL(我正在使用 Fedora)这样的系统默认需要 sudoers。所以我将这一行添加到/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”时,出现错误:
无法更改事件 bool 值:无效的 bool 值
我也试过直接编辑不存在的“/etc/selinux/targeted/booleans”,然后重新启动apache,但也没有用。
最佳答案
您是否尝试过 setenforce 0
(暂时禁用 SELinux)、audit2allow
或完全禁用 SELinux?请参阅:PHP webpage doesn't launch unix command even after updated sudoers
关于php - 从 PHP/Apache、exec() 或 system() 程序作为 root : "sudo: unable to open audit system: Permission denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7313519/