检测是否有人安装了selinux / httpd_can_network_connect启用

当安装SELinux时,会有一个设置 – httpd_can_network_connect – 当HTTP通过请求进行实例化时,经常会阻止PHP的fsockopen()进行出站连接。

我希望能够通过PHP看到系统是否启用了SELinux / httpd_can_network_connect。 如果是这样,我会提示用户这个设置可能会干扰页面的警告。

我在Ubuntu机器上安装了SELinux,而且,httpd_can_network_connect 甚至不是我可以使用的一个选项, 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的完整路径。 从我的测试中看来,对运行getenforce的非超级用户没有任何限制。

libselinux用户空间库有一些php绑定,允许你(除其他外)获得selinux布尔值。 请参阅fedora项目包档案中的php-pecl-selinux 。 这是pecl页面 。

除此之外,它定义了selinux_get_boolean_active函数,它应该为你做这个工作,它取得布尔型的名字并在失败时返回一个long或者-1。

在线文档不多,但可以参考libselinux手册页和功能签名摘要 。

希望这可以帮助!