🐧 Linux SELinux 介紹與實務教學(安全性強化基礎)
在企業級 Linux 發行版(如 Red Hat / Rocky / CentOS)中,SELinux(Security-Enhanced Linux) 是核心安全架構之一,負責限制程序與資源間的存取權限。 本文將從原理、模式設定、日誌觀察到故障排除,帶你全面理解這項強大的安全機制。
🔐 一、什麼是 SELinux?
SELinux 是由 NSA(美國國安局) 開發的存取控制機制,採用 Mandatory Access Control(MAC), 不同於傳統 Discretionary Access Control(DAC) 只依靠檔案擁有者設定權限, SELinux 更嚴格地根據「程序類型(Type)」與「安全上下文(Context)」來判斷是否允許行為。
# 查看系統是否啟用 SELinux
getenforce # Enforcing / Permissive / Disabled
sestatus # 顯示完整狀態
cat /etc/selinux/config
⚙️ 二、SELinux 模式與用途
- Enforcing:啟用並強制執行安全策略(建議預設)。
- Permissive:僅記錄違規行為,不阻擋(用於測試)。
- Disabled:完全停用(重啟後生效)。
# 臨時切換模式(重開機後失效)
sudo setenforce 0 # 改為 Permissive
sudo setenforce 1 # 改為 Enforcing
# 永久設定(需重啟)
sudo vi /etc/selinux/config
SELINUX=enforcing
🧩 三、安全上下文(Security Context)結構
每個檔案、程序、Port 都有對應的 SELinux Context,以四段表示:
user:role:type:level
例如:
system_u:object_r:httpd_sys_content_t:s0
- user:SELinux 使用者身分。
- role:角色(例如 system_r 表系統角色)。
- type:最重要的部分,控制哪些程序可存取。
- level:安全等級(多用於 MLS/MCS)。
# 查看檔案 Context
ls -Z /var/www/html
# 查看程序 Context
ps -eZ | grep httpd
🧠 四、常見問題與修復
- HTTPD 無法存取目錄:Context 錯誤導致。
sudo restorecon -Rv /var/www/html
sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"
sudo restorecon -Rv /srv/www
sudo ausearch -m AVC,USER_AVC -ts recent
sudo journalctl -t setroubleshoot
🧰 五、SELinux 與常見服務整合
| 服務 | 常見布林值設定 | 指令 |
|---|---|---|
| HTTPD | 允許連外 | setsebool -P httpd_can_network_connect 1 |
| FTP | 允許上傳 | setsebool -P ftp_home_dir 1 |
| Samba | 允許共享家目錄 | setsebool -P samba_enable_home_dirs 1 |
📊 六、實務觀察與建議
- 初次建置新服務時,先觀察
/var/log/audit/audit.log是否有拒絕紀錄。 - 善用
setroubleshoot工具提供修正建議。 - 避免直接停用 SELinux,而是針對特定服務開放對應布林值。
📘 結語
SELinux 並非阻礙,而是防止「系統被誤用」的守護者。 掌握其運作邏輯與常見設定後,你將能讓 Linux 伺服器同時兼具 穩定與安全。 建議與 systemd、Fail2Ban 等安全模組一同使用,形成多層防護。
🔗 延伸閱讀
— WWFandy・系統與網路筆記
沒有留言: