【问题标题】:detecting if someone has selinux installed / httpd_can_network_connect enabled检测是否有人安装了 selinux/启用了 httpd_can_network_connect
【发布时间】:2015-05-16 03:10:24
【问题描述】:

安装 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() 输出中我也没有看到任何安装的迹象..

有什么想法吗?

【问题讨论】:

  • 您在我的回答之后添加的链接对我来说在 CentOS 上的 getsebool 上运行良好。我的解决方案不是您要找的吗?唯一与 PHP 集成的 selinux 是 pecl 包 afaik。
  • 它可以工作,但在安装了 SELinux 的主机上,execshell_exec 等功能也可能被禁用。

标签: php linux ubuntu selinux


【解决方案1】:

回答您的问题:getsebool httpd_can_network_connect。这将检索相关布尔值的状态。

【讨论】:

    【解决方案2】:

    不确定 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 的完整路径。 对非超级用户运行似乎没有限制 从我的测试中获取强制。

    【讨论】:

      【解决方案3】:

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

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

      在线文档不多,但您可以参考 libselinux 手册页和summary 了解函数签名。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-29
        • 2011-03-25
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-03
        相关资源
        最近更新 更多