CodeGym /課程 /Docker SELF /SELinux介紹:檢查狀態、啟用、基本指令

SELinux介紹:檢查狀態、啟用、基本指令

Docker SELF
等級 5 , 課堂 2
開放

1. 什麼是 SELinux?它有什麼用?

SELinux (Security-Enhanced Linux) 是一個安全模組,增強了傳統檔案權限控制模型,加入了強制訪問控制的概念。它讓管理員可以為用戶甚至是程序設定更嚴格的限制,來最大化減少潛在攻擊帶來的損害。

它有什麼特點?

想像一下你的系統是一個房子。傳統的訪問權限(rwx 為用戶、群組及其他人設定)就像給房門的鎖配置的鑰匙。但如果有人破門而入呢?SELinux 就像是第二層防線,透過行為規則來增強防護:"嘿,即使你已經進來了,也不能進浴室!"

SELinux 的主要任務:

  1. 防止未經授權的進程或檔案訪問。
  2. 即使進程被攻擊,也能減少損害。
  3. 落實 "預設防護" 原則(禁止一切,僅允許被授權的動作)。

SELinux 工作模式

SELinux 有三種工作模式:

  1. Enforcing — 啟用安全策略並阻止違規進程。
  2. Permissive — 只記錄違規行為到日誌中,但不阻止行為。
  3. Disabled — 完全停用
有趣的事實:

SELinux 在 enforcing 模式下就像是系統的嚴格大哥。而 permissive 模式則像是小弟弟,只會抱怨,但什麼都不做。


2. 檢查 SELinux 狀態

首先,我們來看看 SELinux 是否啟用,以及它正在運行什麼模式。有幾個方便的指令可以用來檢查。

指令 getenforce

這個指令會告訴你目前用的是哪一種模式:EnforcingPermissive,還是 Disabled

$ getenforce
Enforcing

如果輸出是 Disabled,那麼 SELinux 就是關閉狀態啦——這表示你需要花點時間來啟用它,但這部分我們待會兒再說。

指令 sestatus

要獲得更完整的 SELinux 狀態報告,可以使用這個指令。它會顯示當前狀態、活動模式以及使用的策略。

$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing

在這裡,你可以看到:

  • enabled/disabled — SELinux 是否啟用。
  • current mode — 當前模式(enforcing, permissive)。
  • loaded policy name — 加載的策略名稱。例如,"targeted" 表示 SELinux 只對重要進程進行控制。

3. 切換 SELinux 模式

要改變當前 SELinux 的運作模式,可以使用指令 setenforce

切換到 permissive 模式

如果你暫時想要 "放鬆 SELinux 的限制",可以啟用 permissive 模式哦。

$ sudo setenforce 0

現在 SELinux 只會記錄違規行為,但不會阻止它們發生。你可以用指令 getenforce 檢查新的設定:

$ getenforce
Permissive

切換回 enforcing 模式

當你想要再次啟用嚴格控制時,可以執行:

$ sudo setenforce 1

然後,當然要檢查結果啦:

$ getenforce
Enforcing

這個更改是即時生效的,但只會持續到系統下一次重啟哦。


4. 啟用 SELinux

如果 SELinux 被禁用,需要修改配置文件。SELinux 是通過文件 /etc/selinux/config 管理的。

檢查當前的配置文件

來看看目前的設置。可以使用任何文字編輯器,例如 nano

$ sudo nano /etc/selinux/config

你會看到類似這樣的內容:

# This file controls the state of SELinux on the system.
SELINUX=disabled
SELINUXTYPE=targeted

切換 SELinux 到啟用狀態

為了啟用 SELinux,把行 SELINUX=disabled 改成 SELINUX=enforcingSELINUX=permissive

修改後的文件範例如下:

# This file controls the state of SELinux on the system.
SELINUX=enforcing
SELINUXTYPE=targeted

編輯後保存文件,然後重新啟動系統:

$ sudo reboot

重啟後可以用 sestatus 檢查狀態,確認 SELinux 是否已經啟用。


5. SELinux 上下文解析

什麼是上下文?

上下文是 SELinux 用於管理訪問的標記。每個文件、進程和用戶都有自己的上下文。

你可以用指令 ls -Z 來查看文件的上下文。比如:

$ ls -Z /var/www/html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html

這是什麼意思呢?

  1. unconfinedu — SELinux 用戶。
  2. objectr — 對象類型。
  3. httpdsyscontent_t — 訪問類型(在此情況下與 Web 伺服器相關)。
  4. s0 — 安全級別。

更改上下文

如果 SELinux 阻礙了你的應用程式運行,那可能需要修改文件的上下文。使用指令 chcon

$ sudo chcon -t httpd_sys_content_t /var/www/html/index.html

這條指令臨時更改了文件上下文類型。但是重新啟動後更改可能會丟失,因此對於永久設置,最好修改 SELinux 策略(稍後我們會談到)。


6. 使用 SELinux 的範例

讓我們來看一個例子吧!你是一個伺服器管理員,想要部署一個 Web 伺服器,但 SELinux 阻止了對目錄 /var/www/html 中檔案的訪問。

步驟:

  1. 檢查 SELinux 的狀態:

    $ sestatus
    

    確保 SELinux 已啟用並在 enforcing 模式下運行。

  2. 查看檔案的上下文:

    $ ls -Z /var/www/html
    
  3. 如果上下文不正確,修改它:

    $ sudo chcon -t httpd_sys_content_t /var/www/html/*
    
  4. 檢查 Web 伺服器是否可以正常運行。


7. 常見錯誤與問題

  1. SELinux 被關閉,而你沒有注意到。 一定要用 sestatus 檢查狀態。很多管理員在安裝系統後忘記打開 SELinux。

  2. 「為什麼我的服務不起作用?」 SELinux 阻止了存取。用 audit.log 進行分析:

    $ sudo cat /var/log/audit/audit.log | grep denied
    
  3. 上下文的變更沒被保存。 不要用 chcon,而是使用能永久變更的指令,例如 semanage

學習 SELinux 就像準備一場馬拉松:一開始可能很困難,但隨著時間推移,你會了解這個工具如何顯著提升系統的安全性。運用這些知識成為一個無懼高手駭客的管理員吧。

1
任務
Docker SELF, 等級 5, 課堂 2
上鎖
檢查當前 SELinux 模式
檢查當前 SELinux 模式
1
任務
Docker SELF, 等級 5, 課堂 2
上鎖
SELinux 狀態的詳細信息
SELinux 狀態的詳細信息
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION