php - 从 PHP/Apache、exec() 或 system() 程序作为 root : "sudo: unable to open audit system: Permission denied"

标签 php apache sudo suid

我花了半天时间想弄清楚这个问题,并且做了很多研究。我也熟悉有关该主题的许多现有讨论,例如: 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/

相关文章:

php - 如何有条件地在 .htaccess 中或通过其他方式为特定请求设置 php ini 值

regex - .htaccess:如果调用特定目录,则重写整个 URL

apache - 使用 mod_wsgi 在 Apache 上部署 Flask

php - MySQL 的 CHAR 数据类型是否有可以存储超过 255 个字符的固定长度版本?

PHP 全局关键字和赋值

bash - 为什么我需要 Root 权限才能执行 `git branch -a` ?

bash - 使用 sudo 运行时我的 shell 脚本出了什么问题?

bash - 将 sudo 密码作为变量存储在脚本中——安全吗?

php - 如何在 PHP 8.0 中使用 ssh2?

php - htaccess 针对不同 GET 变量的多个重写规则