如何通过PHP站点管理UFW

时间:2018-05-31 05:14:17

标签: php selinux ufw

我正在尝试创建一个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}

用户:apache

Linux:RHEL 7.5

1 个答案:

答案 0 :(得分:0)

这不是很优雅,但是请尝试使用ssh而不是sudo。

您是否曾经注意到,您从未遇到过尝试在CLI上以管理员身份运行命令的SELinux问题?总是从cron / systemd开始执行,或者从http连接开始执行的事情。..

好sshd及其启动的shell基本上不包含在selinux强制中,您可以在这里使用它以使自己受益。

首先读取ssh键和命令锁定键。

然后仅为此命令创建一个新的密钥对:

ssh-keygen -f id_rsa_commandyouwant -P''

在用户的authkeys文件中安装该密钥对:

echo -n 'command =“ / path / to / your / script”,无端口转发,无x11转发,无代理转发'>> /root/.ssh/authorized_keys

cat id_rsa_commandyouwant **。pub ** >> /root/.ssh/authorized_keys

我们在上面回显n的单引号中的字符串将锁定该键,因此不能将其用于获取交互式shell。当该密钥与该用户帐户一起使用时,将仅执行脚本。

如果脚本需要接收参数,则可以在脚本中使用$ {SSH_ORIGINAL_COMMAND}变量(仔细清理)。只需在调用ssh客户端时提供参数,就好像它们是命令一样,整个cmdline字符串将显示在$ {SSH_ORIGINAL_COMMAND}中。

如果您的脚本可以以非超级用户身份运行,请这样做,并替换上面的超级用户的homedir。

所以,而不是:

exec(“ sudo / sbin / ufw {command}”)

尝试:

exec(“ ssh -i / path / to / id_rsa_specialusecase root @ localhost {command}”)

并创建一个脚本,我将其称为/ path / to / your / script,其内容为$ {SSH_ORIGINAL_COMMAND},验证其是否安全可靠(不包含; rm -rf /),然后调用:

/ sbin / ufw $ {SSH_ORIGINAL_COMMAND}

快乐的系统管理员!