Linux 作業系統從核心 2.6 版本開始預設會自動載入安全增強機制 SELinux (Security-Enhanced Linux) 核心模組。SELinux 是由美國國家安全局 NSA (National Security Agency) 所開發,並且在 2000 年 12 月時將此核心模組發行給開放原始碼的開發社群,以便有效加強 Linux 整體安全性。
SELinux 為基於保護原則、作業系統中檔案結構及檔案權限的完整性原則所設計,此完整性原則可以有效針對入侵行為,以及企圖跨越系統安全架構等設計不良的應用程式對作業系統所造成的破壞,因此可以提供更安全的強制存取控制架構,來與作業系統的核心和主要子系統協同運作。在這樣的架構下相關的服務 (Daemon) 只能存取屬於該服務帳號所能存取的資料夾及檔案權限,若是超過所能存取的權限範圍則 SELinux 便會阻擋該服務的存取行為。所以若主機所架設的服務出現安全性漏洞導致被攻擊時 SELinux 能夠有效將攻擊所造成的損失降到最低。
簡單來說啟用了 SELinux 安全增強機制後的 Linux 作業系統,其檔案權限便不僅僅是傳統上的三種權限-讀取 r、寫入 w、執行 x-,及身份-擁有者 Owner、群組 Group、其它人 Others,而是整個主機內的檔案系統,將會套用更細微的權限及身份設定並且具有完整性架構。然而也因為 SELinux 安全增強機制及完整性原則,常常會造成 Linux 初學者因為不了解檔案系統及相關概念,進而導致設定相關網路服務時,因為違反了 SELinux 安全機制或者完整性原則,而導致網路服務無法啟動,或者無法存取系統資料(因為被 SELinux 安全機制給阻擋住了)。因此筆者通常會建議初學者可以先將此增強安全機制設定為警告通知,或者暫時關閉。等以後對於 CentOS 作業系統有更深的認識後再將此功能啟用。當然這樣的情況是自行測試或學習時,使用者若是用於企業營運時則強烈建議一定要開啟 SELinux 安全增強機制來提升及保護主機安全性。
要修改 SELinux 安全增強機制的設定,您可以透過修改 「/etc/sysconfig/selinux」 設定檔,或者使用指令 system-config-securitylevel 進入互動設定視窗進行設定之後再將主機重新啟動即可套用變更,SELinux 安全增強機制共有三種運作模式說明如下:
enforcing:啟動模式,SELinux 安全增強機制啟動將會阻擋不當的存取行為。
permissive:寬容模式,當系統發生違反 SELinux 安全增強機制時僅僅顯示警告訊息而不會實際進行阻擋的動作,此模式很適合有心學習 SELinux 機制的學習者。
disabled:禁用模式,完全將 SELinux 安全增強機制禁用。
筆者建議初學者可以將設定值修改為寬容模式 (permissive),因為當您的操作行為違反 SELinux 安全增強機制時會顯示警告通知您,因此您可以有效學習到哪些操作或者哪些動作是會被 SELinux 阻擋哪些不會,這樣可以讓您日後真正開啟 SELinux 安全增強機制時,不致被卡住並且早日提升您所管理的主機系統整體安全性。您可以透過 sestatus 指令來判斷目前主機中 SELinux 的運作模式及狀態。
若想讓 SELinux 安全機制在啟動模式 (enforcing) 與寬容模式 (permissive) 之間進行切換的話,可以使用 「setenforce」 指令即可切換模式 (0 為 permissive、1 為 enforcing),並且不需要重新啟動主機即可立即生效,通常當您設定 SELinux 處於啟動模式 (enforcing) 但無法成功啟動服務您懷疑是被 SELinux 安全機制阻擋的話,您便可以將 SELinux 安全機制暫時調整為寬容模式 (permissive) 即可證明是否真的因為 SELinux 安全機制阻擋您啟動的網路服務。
#sestatus //查看 SELinux 狀態
SELinux status: enabled //SELinux 目前啟用中
SELinuxfs mount: /selinux
Current mode: enforcing //目前狀態為啟動模式 (enforcing)
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
#setenforce 0 //切換為寬容模式 (permissive)
#sestatus //再次查看 SELinux 狀態
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive //目前狀態為寬容模式 (permissive)
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
若想於CentOS 桌面圖形介面下觀看或收到 SELinux AVC 告警訊息,可以透過安裝「setroubleshoot」套件收到即時的告警通知,點擊告警通知可查看 SELinux AVC 內容以及解決方法。
#yum -y install setroubleshoot
那麼該如何查詢以及變更檔案或資料夾的 SELinux 權限? 例如我們將「/var/log/cron」資料夾複製到 root 家目錄中,然後利用「restorecon」指令還原該資料夾的 SELinux 權限,一比較之下就可以輕易看出二個資料夾的 SELinux 權限不同之處,若要改變資料夾 SELinux 權限則使用「chcon --reference」配合要參考的資料夾即可。
#cp -a /var/log/cron ~/ //複製資料夾
#restorecon ~/cron //還原 SELinux 權限
#ls -dZ /var/log/cron ~/cron //查看 SELinux 權限
-rw-------. root root system_u:object_r:admin_home_t:s0 /root/cron
-rw-------. root root system_u:object_r:var_log_t:s0 /var/log/cron
#chcon --reference /var/log/cron ~/cron //變更 SELinux 權限
#ls -dZ /var/log/cron ~/cron //再次查看 SELinux 權限
-rw-------. root root system_u:object_r:var_log_t:s0 /root/cron
-rw-------. root root system_u:object_r:var_log_t:s0 /var/log/cron
(上一篇)邁向 RHCE 之路 (Day13) - YUM 套件管理工具
(下一篇)邁向 RHCE 之路 (Day15) - RunLevel 啟動模式等級
邁向 RHCE 之路系列文章連結