Php 检测是否有人安装了selinux/httpd\u can\u network\u connect已启用

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时,有一个设置-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
也可能被禁用。