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

问题描述 投票:3回答:2

我花了半天的时间来解决这个问题,并且我已经做了很多研究。我也熟悉许多与此主题相关的讨论,例如:How to run PHP exec() as root?

不幸的是,我发现的所有建议似乎都不适合我。

首先,我正在为规范编写内容,因此我无法避免这样做。另外,所有计算机都将存在于未连接到Internet的专用网络上。虽然拥有一些安全性很重要,但最重要的是要防止错误。我的目标是配置一些“瘦服务器”。通过PHP脚本,我需要能够更改网络配置(静态或DHCP)并重新启动网络。

我试图做的第一件事是编写一个SUID根的C程序。它读取,修改和写入网络配置文件。如果我以普通用户身份运行它,它将运行良好,并且可以访问和修改root拥有的文件。但是,如果我从PHP脚本运行它,则会出现访问错误。看来Apache会以某种方式阻止SUID根。

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

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

据此俄语页面,发生这种情况是因为RHEL(我正在使用Fedora)之类的系统默认对sudoers是requiretty。所以我将这一行添加到/ etc / sudoers中:默认值!requiretty

我仍然遇到相同的错误。sudo:无法打开审核系统:权限被拒绝

我在这里完全受阻。也就是说,除非我想以根用户身份运行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,但这也不起作用。

php apache sudo suid
2个回答
5
投票

您是否尝试过setenforce 0(暂时禁用SELinux),audit2allow或完全禁用SELinux?参见:PHP webpage doesn't launch unix command even after updated sudoers


0
投票

这在搜索了几个小时后对我有用。祝好运! :)

semanage fcontext -a -t httpd_sys_script_exec_t'/whatever/scripts(/.*)?'

restorecon -R -v / whatever / scripts /

https://stackoverflow.com/a/15424003/11249696


推荐问答