SELinux (Security-Enhanced Linux) 實作強制存取控制 (MAC),以安全標籤 (Label) 限制進程對檔案、埠口、能力的存取。雖然大幅提升安全性,但錯誤配置會導致服務啟動失敗、權限拒絕。本文說明查看狀態、臨時/永久關閉、模式切換、常見問題排查與建議策略。
查看 SELinux 狀態
# 方法 1:詳細資訊
/usr/sbin/sestatus -v
# SELinux status: enabled
# SELinuxfs mount: /sys/fs/selinux
# Current mode: enforcing
# Mode from config file: enforcing
# Policy version: 31
# Policy from config file: targeted
# 方法 2:快速查看目前模式
getenforce
# Enforcing / Permissive / Disabled
模式說明
| 模式 | 行為 | 適用場景 |
| Enforcing | 強制執行政策,拒絕違規存取並記錄 | 生產環境 (預設) |
| Permissive | **不拒絕**,僅記錄違規 (audit.log) | 除錯、政策開發、相容性測試 |
| Disabled | 完全關閉,核心不載入 SELinux 模組 | 極少數不相容舊應用、嵌入式裝置 |
臨時切換 (不重開機,重開機失效)
# 切換至 Permissive (推薦除錯用)
setenforce 0
# 或
setenforce Permissive
# 切回 Enforcing
setenforce 1
# 或
setenforce Enforcing
永久關閉 / 變更預設模式 (需重開機)
# 編輯配置檔
vim /etc/selinux/config
# SELINUX=enforcing → SELINUX=disabled (或 permissive)
# 重開機
reboot
# 驗證
getenforce
sestatus
⚠ 警告:從 Enforcing → Disabled 重開機後,檔案系統安全標籤可能遺失。若日後重新啟用,**必須強制重新標記**:
touch /.autorelabel
reboot
# 開機過程會跑 restorecon -R /,耗時視檔案數而定
常見問題排查
# 1. 查看被拒絕的存取 (需安裝 setroubleshoot)
sealert -a /var/log/audit/audit.log
# 2. 依拒絕日誌產生允許政策模組
ausearch -c 'httpd' --raw | audit2allow -M my-httpd
semodule -i my-httpd.pp
# 3. 檔案標籤錯誤修復
restorecon -Rv /var/www/html
# 或指定類型
chcon -R -t httpd_sys_content_t /var/www/html
# 4. 埠口標籤管理
semanage port -l | grep http
semanage port -a -t http_port_t -p tcp 8080
建議策略
- **生產環境保持 Enforcing**,配合
audit2allow 逐步完善政策。
- 新服務上線前,先在測試環境跑
Permissive 收集 avc: denied 日誌,產生模組後再部署。
- 容器環境:主機 Enforcing,容器內視需求決定 (通常保持 Enforcing,透過標籤隔離)。

copyright ©
萬盛學電腦網 all rights reserved