当安装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()输出中我也没有看到任何安装的迹象。
有什么想法吗?
答案 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
。这将检索有问题的布尔值的状态。