我有一个运行小型 php 和 mysql 应用程序的小型 Web 服务器(CentOS 8)。它还运行作为辅助 MX 运行的 Nagios、BIND 和 Postfix。
一切似乎都“工作”,我从来没有注意到任何问题。我能够通过端口 443 加载 Nagios 和其他 php 应用程序。如果我通过端口 http / 端口 80 加载 URL,Apache 被配置为重定向到 443,并且做得同样好。
但是,selinux 会定期记录以下 AVC,表明端口 80 存在一些问题:
time->Sat Dec 12 01:55:16 2020
type=AVC msg=audit(1607756116.608:1381369): avc: denied { name_connect } for pid=631936 comm="httpd" dest=80 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:http_port_t:s0 tclass=tcp_socket permissive=0
查看/var/log/httpd/error_log
,我同时看到同一个 pid 对应的 Permission Denied :
[Sat Dec 12 01:55:16.608941 2020] [core:warn] [pid 631936] (13)Permission denied: AH00056: connect to listener on [::]:80
有没有办法让我追查到,Apache 试图做的到底是什么被阻止了?正如我所提到的,似乎没有任何东西被破坏,所以我没有尝试构建一个模块来允许这个。但我想在这里找到 AVC denied 消息的根本原因,或者:
- 如果它是无害的并且实际上应该被允许,则允许它,或者
- 配置 Apache 以停止尝试做它正在尝试做的任何事情
这里建立的连接是 Apache 连接回自身:这些被记录为
internal dummy connection
并且是 Apache唤醒其子进程的方式。默认情况下,SELinux 不允许 Web 服务器进行出站网络连接。几个布尔值会改变这种行为,但可能你想用来解决这个问题的一个布尔值
httpd_graceful_shutdown
允许 Apache 连接到任何标有http_port_t
(80、81、443、488、8008、8009、8443、9000)的 TCP 端口,但什么也没有别的。顾名思义,这使得 Apache 的关闭不会引发虚假警告,因为它还希望在关闭时连接到自身。它还将摆脱即时问题并允许内部虚拟连接。