幾乎可以肯定每個人都聽說過 SELinux (更准確的說,嘗試關閉過),甚至某些過往的經驗讓您對 SELinux 產生了偏見。不過隨著日益增長的 0-day 安全漏洞,或許現在是時候去了解下這個在 Linux 內核中已經有8年歷史的強制性訪問控制系統(MAC)了。
SELinux 全稱 Security Enhanced Linux (安全強化 Linux),是 MAC (Mandatory Access Control,強制訪問控制系統)的一個實現,目的在於明確的指明某個進程可以訪問哪些資源(文件、網絡端口等)。
強制訪問控制系統的用途在於增強系統抵御 0-Day 攻擊(利用尚未公開的漏洞實現的攻擊行為)的能力。所以它不是網絡防火牆或 ACL 的替代品,在用途上也不重復。
舉例來說,系統上的 Apache 被發現存在一個漏洞,使得某遠程用戶可以訪問系統上的敏感文件(比如 /etc/passwd
來獲得系統已存在用戶),而修復該安全漏洞的 Apache 更新補丁尚未釋出。此時 SELinux 可以起到彌補該漏洞的緩和方案。因為 /etc/passwd 不具有 Apache 的訪問標簽,所以 Apache 對於/etc/passwd
的訪問會被 SELinux 阻止。
相比其他強制性訪問控制系統,SELinux 有如下優勢:
那麼 SELinux 對於系統性能有什麼樣的影響呢?根據 Phoronix 在 2009 年使用 Fedora 11 所做的橫向比較來看,開啟 SELinux 僅在少數情況下導致系統性能約 5% 的降低。
SELinux 是不是會十分影響一般桌面應用及程序開發呢?原先是,因為 SELinux 的策略主要針對服務器環境。但隨著 SELinux 8年來的廣泛應用,目前SELinux 策略在一般桌面及程序開發環境下依然可以同時滿足安全性及便利性的要求。以剛剛發布的 Fedora 15 為例,筆者在搭建完整的娛樂(包含多款第三方原生 Linux 游戲及 Wine 游戲)及開發環境(Android SDK + Eclipse)過程中,只有 Wine 程序的首次運行時受到 SELinux 默認策略的阻攔,在圖形化的“SELinux 故障排除程序”幫助下,點擊一下按鈕就解決了。