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

时间:2015-05-16 03:10:24

标签: php linux ubuntu selinux

当安装SELinux时,有一个设置 - httpd_can_network_connect - 这通常会阻止PHP的fsockopen()在通过HTTP进入的请求实例化时建立出站连接。

我希望能够通过PHP看到系统是否启用了SELinux / httpd_can_network_connect。如果是这样,我会向用户显示一条警告,说明此设置可能会干扰该页面。

我在Ubuntu机器上安装了SELinux,而且httpd_can_network_connect doesn't even appear to be an option that's available对我来说SELinux似乎已经安装了,而且即使在phpinfo()输出中我也没有看到任何安装的迹象。

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

不确定selinux与PHP的集成。您可以使用shell命令。

$getenforce = trim(shell_exec("getenforce"));
if ($getenforce == "Disabled" or $getenforce == "Permissive") {
    // good to go
}

虽然,所有Linux系统上可能都不存在getenforce,因此您可能希望以某种方式测试该功能。这可能对此有用:

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。

答案 1 :(得分:2)

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

除此之外,它定义了selinux_get_boolean_active函数,该函数应该为您完成工作,它采用布尔名称并在失败时返回long或-1。

网上没有太多文档,但您可以参考libselinux手册页和summary获取功能签名。

希望这有帮助!

答案 2 :(得分:1)

回答你的问题:getsebool httpd_can_network_connect。这将检索有问题的布尔值的状态。