【发布时间】:2018-11-10 00:57:04
【问题描述】:
我正在尝试创建一个 PHP 脚本,该脚本允许从 Web 门户管理某些 UFW 防火墙规则。我正在使用 exec("sudo /sbin/ufw {command}") 来应用收到的更改,但它仅在禁用 SELinux 强制时才有效。我已经根据审计日志尝试了 audit2allow,创建了一个自定义模块,但是当我重新打开强制执行时,它仍然失败。
错误:
ERROR: initcaps
[Errno 2] iptables v1.4.21: can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
我能够从命令行执行与脚本中相同的命令,即使启用了强制执行。
sudo -u apache sudo /sbin/ufw {command}
用户:阿帕奇
Linux:RHEL 7.5
【问题讨论】:
-
嗯,很可能该进程不允许使用这样的
sudo命令(没有密码),您是否将该命令列入白名单? -
这是我在 sudoers 中的条目:“apache ALL=(root) NOPASSWD: /sbin/ufw” 即使启用了 selinux 强制,我也可以单独运行 sudo 命令。我猜这与在 httpd 守护进程或线程中执行的命令有关,但我对 selinux 不够熟悉
-
你解决过这个问题吗?我刚刚遇到了同样的问题。我编写了一个自定义 php 脚本来更改特定的防火墙规则。我使用静态 sudo nopasswd 条目让 apache 用户以 root 身份执行一个脚本,该脚本应该能够添加或删除规则。但是 selinux 搞砸了。 audit.log 看起来 sudo 没有运行,但我在我的 bash 脚本中添加了回显,我在 chrome 中看到了输出。
-
对不起@billy,我正在努力思考我为什么要设置它或者它是用于哪个项目,但我不记得了。如果我找到了解决方案,我可能会发布它,所以我怀疑我改变了方法
-
我同样转向了另一种解决方案。我的命令很简单,我在运行它的服务器上使用了 SSH 命令锁定密钥和 php ssh。 SSH 从 selinux 中“爆发”,从而解决了它。尽管公然滥用 SSH。我什至不确定我是否想将其视为我可以引以为豪的答案,但它对我有用。