Apache 试图使用 SELinux 阻止的端口 80 做什么?

Apache 试图使用 SELinux 阻止的端口 80 做什么?

我有一个小型 Web 服务器 (CentOS 8),运行一个小型 php 和 mysql 应用程序。它还运行 Nagios、BIND 和作为辅助 MX 运行的 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 的相应权限被拒绝:

[Sat Dec 12 01:55:16.608941 2020] [core:warn] [pid 631936] (13)Permission denied: AH00056: connect to listener on [::]:80

有没有办法让我追踪到 Apache 到底在尝试做什么,而这被阻止了?正如我提到的,似乎没有什么问题,所以我没有尝试构建一个模块来允许这样做。但我想在这里找到 AVC 被拒绝消息的根本原因,并且:

  • 如果它是无害的并且确实应该被允许,则允许它,或者
  • 配置 Apache 以停止尝试执行任何正在执行的操作

答案1

这里建立的连接是 Apache 连接回自身:这些被记录为internal dummy connection,是 Apache 的方式唤醒其子进程

默认情况下,SELinux 不允许 Web 服务器进行出站网络连接。有多个布尔值可以改变此行为,但您可能要使用布尔值来修复此问题,httpd_graceful_shutdown因为它允许 Apache 连接到任何标记为http_port_t(80、81、443、488、8008、8009、8443、9000) 的 TCP 端口,而不允许其他任何端口。顾名思义,这使得 Apache 的关闭不会引发虚假警告,因为它在关闭时也希望连接到自身。它还将消除即时问题并允许内部虚拟连接。

setsebool -P httpd_graceful_shutdown 1

相关内容