Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过PHP站点管理UFW_Php_Selinux_Ufw - Fatal编程技术网

如何通过PHP站点管理UFW

如何通过PHP站点管理UFW,php,selinux,ufw,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': Permissio

我正在尝试创建一个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:RHEL7.5

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

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

sshd和由它启动的shell基本上被排除在selinux强制执行之外,您可以在这里使用它来为您带来好处

首先读取ssh密钥和命令锁定密钥

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

ssh keygen-f id_rsa_commandyouwant-p“”

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

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

cat id\u rsa\u commandyouwant**.pub**>/root/.ssh/authorized\u keys

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

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

无论如何,如果您的脚本可以运行非root,请这样做,并替换上面root的homedir

因此,不是:

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

尝试:

exec(“ssh-i/path/to/id\u rsa\u specialusecaseroot@localhost{command}”)

然后制作一个脚本,我将调用/path/to/your/script读取${SSH_ORIGINAL_COMMAND},验证它是否正常和安全(不包含;rm-rf/),然后调用:

/sbin/ufw${SSH_原始_命令}


系统管理快乐

嗯,很可能进程不允许像那样使用
sudo
命令(没有密码),您是否将该命令列入了白名单?这是我在sudoers中的条目:“apache ALL=(root)NOPASSWD:/sbin/ufw”即使启用了selinux强制,我也可以独立运行sudo命令。我猜这与httpd守护进程或线程中正在执行的命令有关,但我对selinuxDid不够熟悉。你解决过这个问题吗?我刚刚遇到了同样的问题。我编写了一个定制php脚本来更改特定的防火墙规则。我使用静态sudonopasswd条目让apache用户以root用户身份执行一个脚本,该脚本应该能够添加或删除规则。但是selinux把它弄脏了。audit.log看起来sudo没有运行,但我在bash脚本中添加了echos,我在chrome中看到了输出。对不起@billy,我正在绞尽脑汁想我为什么要设置这个或它是为哪个项目设置的,但我不记得了。如果我找到了一个解决方案,我可能会把它贴出来,所以我怀疑我改变了方法,我也转向了另一个解决方案。我的命令非常简单,我使用SSH命令锁定密钥和php SSH来连接运行它的服务器。SSH“突破”了selinux,从而解决了这一问题。尽管这是对SSH的公然滥用。我甚至不确定我是否认为这是一个我可以自豪的答案,但它对我来说是有效的。