安全增强式Linux

概覽

美國國家安全域的安全增強式Linux團隊稱：
安全增強式Linux是一組給Linux核心的修補程式，並提供一些更強、更安全的強制存取控制架構來和核心的主要子系統共同運作。基於機密及完整性原則，它提供一個架構來強制資訊的分離，以對付入侵的威脅或任何企圖略過安全架構的應用程式。藉此限制惡意或設計不良的程式可能造成的破壞。它包含一組安全性原則組態設定檔的範本以符合一般的安全性目標
整合SELinux的Linux核心將執行限制用戶程式和系統伺服器存取檔案與網路資源的強制存取控制策略。將權限限制到最小以減少或完全清除程式和守護行程在失效或出錯的情況（如快取區溢位或錯誤組態）下對系統造成危害的可能性。此種限制機制獨立與於傳統的Linux自主存取控制（Discretionary Access Control, DAC）進行。SELinux沒有「root」用戶的概念，也沒有傳統Linux安全機制的缺點。（如依賴於setuid/setgid庫）
「未修改過的」Linux系統安全性（即未整合SELinux的系統）依賴於核心、授權應用與其組態的正確性。三者中任意一個發生問題都將有可能導致整個系統被破解。相反，「修改過的」系統安全性（基於SELinux核心）主要基於其核心和組態的正確性。雖然當應用程式的正確性或組態出現問題可能會導致獨立的用戶程式和系統守護行程發生有限破解，但是它們並不會對其他用戶程式和系統守護行程或整個系統的安全性造成威脅。
純粹來看，SELinux提供了一個從強制存取控制、強制完整性控制、以角色為基礎的存取控制和類型強制架構提取出的概念與功能的混合體。第三方工具可以使開發者構建多種安全策略。

歷史

早期工作主要指向在UNIX計算環境（準確而言是POSIX）下標準化強制和自主存取控制條款的方法。這歸因於美國國家安全域受信UNIX（TRUSIX）工作群組，他們在1987到1991年間接觸並發布了一本彩虹書 （#020A），並製造了一個原初模型和最初未發布的關聯評估證據原型（#020B）。
SELinux最初設計向Linux社群展示強制存取控制的價值和這些控制加入Linux的方法。起初，組成SELinux的修補程式只能通過明確添加在Linux核心原始碼中來工作；在2.6系列的Linux核心中SELinux已被整合入。
作為最初SELinux的主要開發者，美國國家安全域於2000年12月22日基於GNU通用公共許可證發行了第一版SELinux給了開放原始碼開發社群。
SELinux隨後被整合進了Linux核心2.6.0-test3版本的主分支，並在2003年8月8日發布。其他的顯要貢獻者有紅帽公司、邁克菲、安全計算公司、特瑟思科技（Tresys Technology）和可信電腦解決方案（Trusted Computer Solutions）。FLASK/TE實現通過FreeBSD專案成功移植到了FreeBSD和Darwin作業系統上。
SELinux實現了通量進階安全核心。這種核心包含了以錨爪作業系統為原型的架構部件。這些提供給了強制執行多種強制存取控制策略許多通常支援，包括了基於類型強制、以角色為基礎的存取控制和多層安全概念的策略。FLASK基於馬赫衍生的（Mach-derived）分散式受信作業系統（DTOS）和來自對DTOS的設計和實現有著影響的受信資訊系統的一個研究專案——受信馬赫（Trusted Mach）。

用戶、策略和安全上下文

SELinux用戶和角色不需要與實際系統用戶與角色相關。對每個正在進行的用戶或行程，SELinux分配一個三字串上下文，包含了用戶名稱、角色和域（或者類型）。此系統比通常所需要的系統更靈活：作為規定之一，大多數真實用戶享有著相同的SELinux用戶名稱，且所有的存取控制都經由第三個標籤——域來進行。在一個行程被允許進入域的情況下必須在策略中組態。命令runcon允許啟動行程進入一個顯性定義上下文（用戶、角色和域）環境中，但如果政策中未允許的話那麼SELinux可能會拒絕此請求。
檔案、網路埠和其他硬體均有可能含有SELinux上下文，有一個名字、角色（不常使用）和類型組成。檔案系統在檔案和安全上下文之間的對映被稱為標記（Labeling）。標記在策略檔案中被定義但也可以在不更改策略的情況下手動調整。硬體類型十分詳細，比如bin_t（顯示/bin下的所有檔案）或postgresql_port_t（PostgreSQL埠5432）。遠端檔案系統的SELinux上下文可以在被掛載時顯性定義。
SELinux給Shell命令ls、ps等中添加了-Z開關使得檔案或行程的安全上下文可見。
典型的政策規則包含了顯性權限；用戶必須擁有哪些域才能用給定目標進行特定的行為（讀、執行，網路埠中則是繫結或連接）等等。也可以進行更多複雜的對映，包括在角色級和安全級進行。
一個典型的策略包含了一個對映檔案（標記）檔案、一個規則檔案和一個定義域過渡的介面檔案。這三個檔案必須被同時使用SELinux工具編譯來生成單一的策略檔案。生成的策略檔案可以被載入到核心中並工作。載入和解除安裝策略並不需要重新啟動。策略檔案既有可能是手打也可能是用容易使用的SELinux管理工具生成。它們通常先在允許模式（Permissive Mode）下測試，在此模式下違反策略的行為都將被記錄但被允許。audit2allow工具可以隨後使用來生成擴充SELinux策略以允許受限應用的合法活動的附加規則。

實現

SELinux通過Red Hat Enterprise Linux第四版及其所有未來的發行版中的商業支援得以可用。它的存在也在對應版本的CentOS和Scientific Linux中呈現。RHEL4中所支援的策略目標為最大化簡易使用程度而並沒有它能成為的那樣有約束性。RHEL的未來版本準備將在目標策略中寫入更多的目標，也就意味著有更多的限制策略。SELinux在Android4.3版本中就已得以實現。
在自由社群所支援的GNU/Linux發行版中，Fedora是最早採用SELinux的，在Fedora Core 2中就已預設包含了對其的支援。其他發行版中，Debian在Etch發行版中包含了對它的支援，Ubuntu則在8.04版代號堅強的蒼鷺（Hardy Heron）中加入。截止SUSE版本11.1中，它包含了SELinux的「基礎實現」。 SUSE Linux Enterprise 11將SELinux作為「技術預覽」。
SELinux在基於Linux容器的系統中流向,比如CoreOS和rkt。其作為額外的安全控制來幫助隔離容器和它們的主機十分有用。

使用情形

SELinux可以潛在地通過詳細的參數來控制允許系統每個用戶的活動、行程以及守護行程。但是，它主要用於限制守護行程比如被更顯著定義資料存取和活動權限的資料庫引擎或者網頁伺服器。這限制了被破解的限制守護行程的潛在危害。普通的用戶行程通常執行於受限域中，不被SELinux所限制但被經典Linux存取權限所限制。
命令列工具包含：chcon,restorecon,restorecond,runcon,secon,fixfiles,setfiles,load_policy,booleans,getsebool,setsebool,toggleseboolsetenforce,
semodule,
postfix-nochroot,
check-selinux-installation,
semodule_package,
checkmodule,
selinux-config-enforcing,selinuxenabled,
and selinux-policy-upgrade

相似系統

孤立行程也可以通過類似作業系統層虛擬化的機制實現；比如在OLPC專案的首次實現中它使用了沙盒技術在輕量的Vserver環境中隔離獨立的應用程式。同樣美國國家安全域也在安全增強型Android中採用了一些SELinux概念。