![Apache 試圖對 SELinux 封鎖的連接埠 80 做什麼?](https://rvso.com/image/760967/Apache%20%E8%A9%A6%E5%9C%96%E5%B0%8D%20SELinux%20%E5%B0%81%E9%8E%96%E7%9A%84%E9%80%A3%E6%8E%A5%E5%9F%A0%2080%20%E5%81%9A%E4%BB%80%E9%BA%BC%EF%BC%9F.png)
我有一個小型 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