Php 检测是否有人安装了selinux/httpd\u can\u network\u connect已启用
当安装SELinux时,有一个设置-httpd_can_network_connect-当PHP的fsockopen()被通过HTTP传入的请求实例化时,通常会阻止它进行出站连接 我希望能够通过PHP查看系统是否启用了SELinux/httpd\u can\u network\u connect。如果是这样,我会给用户一个警告,说这个设置可能会干扰页面 我在Ubuntu机器上安装了SELinux,虽然httpd可以连接到我,但SELinux似乎已经安装,即使在phpinfo()输出中,我也没有看到任何安装它的迹象Php 检测是否有人安装了selinux/httpd\u can\u network\u connect已启用,php,linux,ubuntu,selinux,Php,Linux,Ubuntu,Selinux,当安装SELinux时,有一个设置-httpd_can_network_connect-当PHP的fsockopen()被通过HTTP传入的请求实例化时,通常会阻止它进行出站连接 我希望能够通过PHP查看系统是否启用了SELinux/httpd\u can\u network\u connect。如果是这样,我会给用户一个警告,说这个设置可能会干扰页面 我在Ubuntu机器上安装了SELinux,虽然httpd可以连接到我,但SELinux似乎已经安装,即使在phpinfo()输出中,我也没有看
有什么想法吗?不确定selinux与PHP的集成。您可以使用shell命令
$getenforce = trim(shell_exec("getenforce"));
if ($getenforce == "Disabled" or $getenforce == "Permissive") {
// good to go
}
尽管getenforce可能并不存在于所有Linux系统上,因此您可能希望以某种方式测试该函数。以下是一些可能会起作用的方法:
exec("getenforce", $getenforce, $return);
if ($return or ($getenforce[0] == "Disabled" or $getenforce[0] == "Permissive")) {
// good to go
}
因为如果用户没有访问权限或者getenforce命令不存在,则返回值应该大于0
注意:在我的系统上,getenforce位于/usr/sbin中,因此您可能需要
如果sbin不在用户的包含路径中,请指定getenforce的完整路径。
似乎对非超级用户的运行没有任何限制
从我的测试中得到帮助
libselinux用户空间库有一些php绑定,允许您(除其他外)获取selinux布尔值。请参见fedora项目包归档中的。这是你的电话号码 除其他外,它还定义了
selinux\u get\u boolean\u active
函数,该函数应该为您完成这项工作,它采用布尔名称并在失败时返回long
或-1
在线文档不多,但您可以参考libselinux手册页和函数签名
希望这有帮助 回答您的问题:
getsebool httpd\u can\u network\u connect
。这将检索有问题的布尔值的状态。您在我的答案后添加的链接对我在CentOS上的getsebool很有用。我的解决方案不是你想要的吗?selinux与PHP的唯一集成是一个pecl包afaik。它可以工作,但在安装了selinux功能的主机上,如exec
或shell\u exec
也可能被禁用。