Apache 試圖對 SELinux 封鎖的連接埠 80 做什麼?

Apache 試圖對 SELinux 封鎖的連接埠 80 做什麼?

我有一個小型 Web 伺服器(CentOS 8),它運行一個小型 php 和 mysql 應用程式。它還運行 Nagios、BIND 和作為輔助 MX 運行的 Postfix。

一切似乎都“有效”,我從未註意到任何問題。我能夠透過連接埠 443 載入 Nagios 和其他 php 應用程式。

然而,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 拒絕訊息的根本原因,或:

  • 如果它是無害且實際上應該允許的,則允許它,或者
  • 配置 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

相關內容