Can't connect to MySQL server on 'host' (13)(權限被拒絕)mysql -h host -u user -p 完全正常# 查看 httpd 相關布爾值 getsebool -a | grep -i httpd # 關鍵發現 httpd_can_network_connect --> off
setsebool -P httpd_can_network_connect=1
-P 參數持久化寫入策略,重啟後生效。
# 修改配置文件 vim /etc/sysconfig/selinux # SELINUX=enforcing → SELINUX=disabled # 或臨時生效(重啟失效) setenforce 0
# 配置文件 SELINUX=permissive # 臨時 setenforce 0
# 重新測試 PHP 腳本 php test_db.php # Connected successfully
| 模式 | 行為 | 適用場景 |
|---|---|---|
| Enforcing | 強制執行策略,阻擋違規操作 | 生產環境標準 |
| Permissive | 僅記錄違規日誌,不阻擋 | 調試排查階段 |
| Disabled | 完全關閉 SELinux | 不兼容應用/極簡環境 |
httpd 進程在 Enforcing 模式下默認禁止主動發起網絡連接(連接數據庫、API、Redis 等),需顯式開啟 httpd_can_network_connect 布爾值。
httpd_can_network_connect_db # 連接數據庫端口 httpd_can_network_memcache # 連接 Memcached httpd_can_network_relay # 郵件中繼 httpd_can_sendmail # 發送郵件 httpd_enable_cgi # 執行 CGI httpd_unified # 統一策略
Enforcing,按需開啟最小權限布爾值ausearch -m avc -ts recent 審計驗證Disabled,失去強制訪問控制安全屏障#!/bin/bash echo "=== SELinux 狀態 ===" getenforce echo "=== httpd 網絡連接權限 ===" getsebool httpd_can_network_connect echo "=== 最近 AVC 拒絕日誌 ===" ausearch -m avc -ts recent | head -20