🐧 Linux Auditd + SELinux 實務操作完整指南:系統審計、強化、稽核與安全最佳實務
Linux 的安全能力主要來自兩大核心元件:Auditd(稽核系統) 與 SELinux(強制存取控制 MAC)。 兩者結合後可以完整做到:事件追蹤、權限強化、資料保護、攻擊行為偵測、應用程式限制與安全稽核。
本篇提供一份真正實務級(Production Ready)的完整指南,包含 Auditd 規則設計、SELinux Context 管理、Policy 建立、Troubleshooting、SIEM 整合與強化策略。
📌 一、Auditd 是什麼?核心架構與用途
Auditd(Linux Auditing System)是一套 Kernel 層級的事件稽核系統,可追蹤:
- 檔案讀寫 / 修改
- 指令執行(execve)
- sudo 行為
- 帳號登入 / 系統設定變更
- 安全相關事件(密碼、認證、權限修改)
核心組件:
| 元件 | 說明 |
|---|---|
| auditd | 主守護程式,負責接收與儲存事件。 |
| auditctl | 設定與臨時管理稽核規則。 |
| ausearch | 搜尋稽核紀錄。 |
| aureport | 產生事件統計與報表。 |
適用場景:企業資安、政府稽核、金融業法遵(Compliance)、系統安全監控等。
📌 二、Auditd 安裝、啟動與基本設定
🟦 安裝 Auditd
sudo apt install auditd audispd-plugins # Ubuntu / Debian
sudo yum install audit # CentOS / RHEL
🟦 啟動 Auditd
sudo systemctl enable --now auditd
sudo systemctl status auditd
🟦 查看目前規則
sudo auditctl -l
Auditd 預設只啟用基本稽核,若要完整監控需自行撰寫規則。
📌 三、Auditd 常用稽核規則(完整範例)
1️⃣ 監控 /etc/passwd 變更
sudo auditctl -w /etc/passwd -p rwxa -k passwd_changes
2️⃣ 監控所有指令執行(execve)
sudo auditctl -a exit,always -F arch=b64 -S execve -k exec_monitor
3️⃣ 監控 sudo 行為
sudo auditctl -a always,exit -F path=/usr/bin/sudo -F perm=x -k sudo_actions
4️⃣ 寫入永久規則:/etc/audit/rules.d/audit.rules
-w /etc/passwd -p rwxa -k passwd_changes
-a exit,always -F arch=b64 -S execve -k exec_monitor
套用規則:
sudo augenrules --load
📌 四、Auditd 日誌查詢:ausearch / aureport
🔍 搜尋關鍵字事件
ausearch -k exec_monitor
🔍 搜尋特定使用者行為(UID)
ausearch -ua 1000
🔍 產生稽核報表
aureport --summary
aureport --exec --summary
可與 SIEM(ELK、Splunk)整合,建立異常分析與攻擊偵測。
📌 五、SELinux 三大模式:Enforcing / Permissive / Disabled
| 模式 | 說明 |
|---|---|
| Enforcing | 阻擋違規操作(正式環境必用) |
| Permissive | 不阻擋但記錄違規(調試用) |
| Disabled | 完全停用(不建議) |
getenforce
永久設定:
sudo nano /etc/selinux/config
SELINUX=enforcing
📌 六、SELinux Context 深度解析(Type 是核心)
Context 由四部分組成:
| 欄位 | 說明 |
|---|---|
| User | SELinux User,不等於 Linux 用戶 |
| Role | 角色權限控制 |
| Type | 最重要!MAC 控制依據 |
| Level | 多層安全標籤 |
查看 Context:
ls -Z /var/www/html/index.html
正確設定 httpd 文件 Context:
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
永久修正:
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
sudo restorecon -Rv /var/www/html
📌 七、SELinux Troubleshooting(排錯流程)
🔎 查看 AVC 拒絕事件
sudo ausearch -m avc
🔧 自動修正策略 audit2allow
sudo grep AVC /var/log/audit/audit.log | audit2allow -M myfix
sudo semodule -i myfix.pp
注意:audit2allow 會「自動生成允許策略」,請務必先確認是否合理,避免造成安全性下降。
📌 八、Auditd + SELinux 系統強化實務指南
- Web 服務必須套用 httpd_sys_content_t / httpd_sys_rw_content_t
- 所有管理動作(sudo, passwd)應加到 Auditd 規則
- 在 Enforcing 前先以 Permissive 蒐集日誌
- Auditd 日誌建議送至 SIEM 做分析
- 不要隨意關閉 SELinux(高風險)
📌 九、最佳實務與常見錯誤
❌ 錯誤 1:遇到錯誤就 setenforce 0
這會直接放棄 MAC 防護。
❌ 錯誤 2:audit2allow 生成的策略沒審查就套用
可能造成某些應用程式獲得過度權限。
✔ 正確做法
- 先查看 AVC 訊息,再決定是否開放
- 針對特定應用建立最小策略(Least Privilege)
- Auditd 規則採固定分類方便 SIEM 處理
🔎 十、常見 FAQ
Q1. Auditd 與 SELinux 是否建議一起使用?
是。Auditd 做稽核,SELinux 做存取控制,兩者互補構成完整安全架構。
Q2. 什麼情況需要 audit2allow?
當應用程式合法操作被阻擋時,例如 Web App 需要寫入資料夾。
Q3. SELinux 可以關閉嗎?
可以,但不建議。關閉後就少了最重要的 MAC 層安全。
🔗 延伸閱讀
💬 歡迎在下方留言交流!
對 Auditd、SELinux 或 Linux 安全強化有疑問嗎?歡迎留言討論!
— WWFandy・Linux Security 實務筆記
沒有留言: