SELinux 入門指南

來源:互聯網
上載者:User

SELinux 入門指南

回到 Kernel 2.6 時代,那時候引入了一個新的安全系統,用以提供存取控制安全性原則的機制。這個系統就是 Security Enhanced Linux (SELinux),它是由美國國家安全域(NSA)貢獻的,它為 Linux 核心子系統引入了一個健壯的強制控制訪問(Mandatory Access Control)架構。

如果你在之前的 Linux 生涯中都禁用或忽略了 SELinux,這篇文章就是專門為你寫的:這是一篇對存在於你的 Linux 案頭或伺服器之下的 SELinux 系統的介紹,它能夠限制許可權,甚至消除程式或守護進程的脆弱性而造成破壞的可能性。

在我開始之前,你應該已經瞭解的是 SELinux 主要是紅帽 Red Hat Linux 以及它的衍生髮行版上的一個工具。類似地, Ubuntu 和 SUSE(以及它們的衍生髮行版)使用的是 AppArmor。SELinux 和 AppArmor 有顯著的不同。你可以在 SUSE,openSUSE,Ubuntu 等等發行版上安裝 SELinux,但這是項難以置信的挑戰,除非你十分精通 Linux。

說了這麼多,讓我來向你介紹 SELinux。

 

DAC vs. MAC

Linux 上傳統的存取控制標準是自主存取控制(Discretionary Access Control)(DAC)。在這種形式下,一個軟體或守護進程以 User ID(UID)或 Set owner User ID(SUID)的身份運行,並且擁有該使用者的目標(檔案、通訊端、以及其它進程)許可權。這使得惡意代碼很容易運行在特定許可權之下,從而取得訪問關鍵的子系統的許可權。

另一方面,強制存取控制(Mandatory Access Control)(MAC)基於保密性和完整性強制資訊的隔離以限制破壞。該限制單元獨立於傳統的 Linux 安全機制運作,並且沒有超級使用者的概念。

 

SELinux 如何工作

考慮一下 SELinux 的相關概念:

  • 主體(Subjects)
  • 目標(Objects)
  • 策略(Policy)
  • 模式(Mode)

當一個主體(Subject)(如一個程式)嘗試訪問一個目標(Object)(如一個檔案),SELinux 安全伺服器(SELinux Security Server)(在核心中)從策略資料庫(Policy Database)中運行一個檢查。基於當前的模式(mode),如果 SELinux 安全伺服器授予許可權,該主體就能夠訪問該目標。如果 SELinux 安全伺服器拒絕了許可權,就會在 /var/log/messages 中記錄一條拒絕資訊。

聽起來相對比較簡單是不是?實際上過程要更加複雜,但為了簡化介紹,只列出了重要的步驟。

 

模式

SELinux 有三個模式(可以由使用者佈建)。這些模式將規定 SELinux 在主體請求時如何應對。這些模式是:

  • Enforcing (強制)— SELinux 策略強制執行,基於 SELinux 策略規則授予或拒絕主體對目標的訪問
  • Permissive (寬容)— SELinux 策略不強制執行,不實際拒絕訪問,但會有拒絕資訊寫入日誌
  • Disabled (禁用)— 完全禁用 SELinux

圖 1:getenforce 命令顯示 SELinux 的狀態是 Enforcing 啟用狀態。

預設情況下,大部分系統的 SELinux 設定為 Enforcing。你要如何知道你的系統當前是什麼模式?你可以使用一條簡單的命令來查看,這條命令就是 getenforce。這個命令用起來難以置信的簡單(因為它僅僅用來報告 SELinux 的模式)。要使用這個工具,開啟一個終端視窗並執行 getenforce 命令。命令會返回 Enforcing、Permissive,或者 Disabled(見上方圖 1)。

設定 SELinux 的模式實際上很簡單——取決於你想設定什麼模式。記住:永遠不推薦關閉 SELinux。為什嗎?當你這麼做了,就會出現這種可能性:你磁碟上的檔案可能會被打上錯誤的許可權標籤,需要你重新標記許可權才能修複。而且你無法修改一個以 Disabled 模式啟動的系統的模式。你的最佳模式是 Enforcing 或者 Permissive。

你可以從命令列或 /etc/selinux/config 檔案更改 SELinux 的模式。要從命令列設定模式,你可以使用 setenforce 工具。要設定 Enforcing 模式,按下面這麼做:

  1. 開啟一個終端視窗
  2. 執行 su 然後輸入你的管理員密碼
  3. 執行 setenforce 1
  4. 執行 getenforce 確定模式已經正確設定(圖 2)

圖 2:設定 SELinux 模式為 Enforcing。

要設定模式為 Permissive,這麼做:

  1. 開啟一個終端視窗
  2. 執行 su 然後輸入你的管理員密碼
  3. 執行 setenforce 0
  4. 執行 getenforce 確定模式已經正確設定(圖 3)

圖 3:設定 SELinux 模式為 Permissive。

註:通過命令列設定模式會覆蓋 SELinux 設定檔中的設定。

如果你更願意在 SELinux 命令檔案中設定模式,用你喜歡的編輯器開啟那個檔案找到這一行:

  1. SELINUX=permissive

你可以按你的喜好設定模式,然後儲存檔案。

還有第三種方法修改 SELinux 的模式(通過 bootloader),但我不推薦新使用者這麼做。

 

策略類型

SELinux 策略有兩種:

  • Targeted(目標) — 只有目標網路進程(dhcpd,httpd,named,nscd,ntpd,portmap,snmpd,squid,以及 syslogd)受保護
  • Strict(嚴格) — 對所有進程完全的 SELinux 保護

你可以在 /etc/selinux/config 檔案中修改策略類型。用你喜歡的編輯器開啟這個檔案找到這一行:

  1. SELINUXTYPE=targeted

修改這個選項為 targeted 或 strict 以滿足你的需求。

 

檢查完整的 SELinux 狀態

有個方便的 SELinux 工具,你可能想要用它來擷取你啟用了 SELinux 的系統的詳細狀態報表。這個命令在終端像這樣運行:

  1. sestatus -v

你可以看到像圖 4 那樣的輸出。

圖 4:sestatus -v 命令的輸出。

 

僅是皮毛

和你預想的一樣,我只介紹了 SELinux 的一點皮毛。SELinux 的確是個複雜的系統,想要更紮實地理解它是如何工作的,以及瞭解如何讓它更好地為你的案頭或伺服器工作需要更加地深入學習。我的內容還沒有覆蓋到疑難解答和建立自訂 SELinux 策略。

SELinux 是所有 Linux 管理員都應該知道的強大工具。現在已經向你介紹了 SELinux,我強烈推薦你回到 Linux.com(當有

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.