服務(wù)器
1. 簡介
selinux帶給linux的主要價值是:提供了一個靈活的,可配置的mac機制。
security-enhanced linux (selinux)由以下兩部分組成:
1) kernel selinux模塊(/kernel/security/selinux)
2) 用戶態(tài)工具
selinux是一個安全體系結(jié)構(gòu),它通過lsm(linux security modules)框架被集成到linux kernel 2.6.x中。它是nsa (united states national security agency)和selinux社區(qū)的聯(lián)合項目。
selinux提供了一種靈活的強制訪問控制(mac)系統(tǒng),且內(nèi)嵌于linux kernel中。selinux定義了系統(tǒng)中每個【用戶】、【進程】、【應(yīng)用】和【文件】的訪問和轉(zhuǎn)變的權(quán)限,然后它使用一個安全策略來控制這些實體(用戶、進程、應(yīng)用和文件)之間的交互,安全策略指定如何嚴格或?qū)捤傻剡M行檢查。
selinux對系統(tǒng)用戶(system users)是透明的,只有系統(tǒng)管理員需要考慮在他的服務(wù)器中如何制定嚴格的策略。策略可以根據(jù)需要是嚴格的或?qū)捤傻摹?br>只有同時滿足了【標準linux訪問控制】和【selinux訪問控制】時,主體才能訪問客體。
1.1 dac與mac的關(guān)鍵區(qū)別(root用戶)
安 全增強型linux(selinux)開始是由nsa(國家安全局)啟動并加入到linux系統(tǒng)中的一套核心組件及用戶工具,可以讓應(yīng)用程序運行在其所需的最低權(quán)限上。未 經(jīng)修改過的linux系統(tǒng)是使用自主訪問控制的,用戶可以自己請求更高的權(quán)限,由此惡意軟件幾乎可以訪問任何它想訪問的文件,而如果你授予其root權(quán) 限,那它就無所不能了。
在selinux中沒有root這個概念,安全策略是由管理員來定義的,任何軟件都無法取代它。這意味著那些潛在的惡意軟件所能造成的損害可以被控制在最小。一般情況下只有非常注重數(shù)據(jù)安全的企業(yè)級用戶才會使用selinux。
操作系統(tǒng)有兩類訪問控制:自主訪問控制(dac)和強制訪問控制(mac)。標準linux安全是一種dac,selinux為linux增加了一個靈活的和可配置的的mac。
所有dac機制都有一個共同的弱點,就是它們不能識別自然人與計算機程序之間最基本的區(qū)別。簡單點說就是,如果一個用戶被授權(quán)允許訪問,意味著程序也被授權(quán)訪問,如果程序被授權(quán)訪問,那么惡意程序也將有同樣的訪問權(quán)。 dac最根本的弱點是主體容易受到多種多樣的惡意軟件的攻擊,mac就是避免這些攻擊的出路,大多數(shù)mac特性組成了多層安全模型。
selinux實現(xiàn)了一個更靈活的mac形式,叫做類型強制(type enforcement)和一個非強制的多層安全形式(multi-level security)。
在android4.2中,selinux是個可選項,谷歌并沒有直接取消root權(quán)限或其他功能。這是一個為企業(yè)級用戶或是對隱私數(shù)據(jù)極為重視的用戶提供的選項,普通消費者則完全可以關(guān)閉它。
2. selinux的運行機制
selinux決策過程如下圖所示:
當一個subject(如: 一個應(yīng)用)試圖訪問一個object(如:一個文件),kernel中的策略執(zhí)行服務(wù)器將檢查avc (access vector cache), 在avc中,subject和object的權(quán)限被緩存(cached)。如果基于avc中的數(shù)據(jù)不能做出決定,則請求安全服務(wù)器,安全服務(wù)器在一個矩陣中查找“應(yīng)用 文件”的安全環(huán)境。然后根據(jù)查詢結(jié)果允許或拒絕訪問,拒絕消息細節(jié)位于/var/log/messages中。
3. selinux偽文件系統(tǒng)
/selinux/偽文件系統(tǒng)kernel子系統(tǒng)通常使用的命令,它類似于/proc/偽文件系統(tǒng)。系統(tǒng)管理員和用戶不需要操作這部分。/selinux/目錄舉例如下:
-rw-rw-rw- 1 root root 0 sep 22 13:14 access dr-xr-xr-x 1 root root 0 sep 22 13:14 booleans --w------- 1 root root 0 sep 22 13:14 commit_pending_bools -rw-rw-rw- 1 root root 0 sep 22 13:14 context -rw-rw-rw- 1 root root 0 sep 22 13:14 create --w------- 1 root root 0 sep 22 13:14 disable -rw-r--r-- 1 root root 0 sep 22 13:14 enforce -rw------- 1 root root 0 sep 22 13:14 load -r--r--r-- 1 root root 0 sep 22 13:14 mls -r--r--r-- 1 root root 0 sep 22 13:14 policyvers -rw-rw-rw- 1 root root 0 sep 22 13:14 relabel -rw-rw-rw- 1 root root 0 sep 22 13:14 user 如cat enforce其值可能如下:
1: enforcing mode
0: permissive mode
4. selinux配置文件
selinux配置文件(configuration)或策略文件(policy)位于/etc/目錄下。
4.1 /etc/sysconfig/selinux配置文件
/etc/sysconfig/selinux是一個符號鏈接,真正的配置文件為:/etc/selinux/config
配置selinux有如下兩種方式:
1) 使用配置工具:security level configuration tool (system-config-selinux)
2) 編輯配置文件 (/etc/sysconfig/selinux).
/etc/sysconfig/selinux中包含如下配置選項:
1) 打開或關(guān)閉selinux
2) 設(shè)置系統(tǒng)執(zhí)行哪一個策略(policy)
3) 設(shè)置系統(tǒng)如何執(zhí)行策略(policy)
4.2 配置文件選項
4.2.1 selinux
selinux=enforcing|permissive|disabled —定義selinux的高級狀態(tài)
enforcing — the selinux security policy is enforced.
permissive — the selinux system prints warnings but does not enforce policy.
disabled — selinux is fully disabled. selinux hooks are disengaged from the kernel and the pseudo-file system is unregistered.
4.2.2 selinuxtype(安全策略)
selinuxtype=targeted|strict — 指定selinux執(zhí)行哪一個策略
targeted — 只有目標網(wǎng)絡(luò)daemons保護。每個daemon是否執(zhí)行策略,可通過system-config-selinux進行配置。保護常見的網(wǎng)絡(luò)服務(wù),為selinux默認值。
可使用如下工具設(shè)置每個daemon的布爾值:
1) getsebool -a: 列出selinux的所有布爾值
2) setsebool: 設(shè)置selinux布爾值,如:setsebool -p dhcpd_disable_trans=0,-p表示即使用reboot之后,仍然有效。
strict — 對selinux執(zhí)行完全的保護。為所有的subjects和objects定義安全環(huán)境,且每一個action由策略執(zhí)行服務(wù)器處理。提供符合role-based-access control(rbac)之policy,具備完整的保護功能,保護網(wǎng)絡(luò)服務(wù)、一般指令及應(yīng)用程序。
4.2.3 setlocaldefs
setlocaldefs=0|1 — 控制如何設(shè)置本地定義(users and booleans)。
1:這些定義由load_policy控制,load_policy來自于文件/etc/selinux/<policyname>
0:由semanage控制
4.3 /etc/selinux/目錄
/etc/selinux/是存放所有策略文件和主要配置文件的目錄。其例子如下:
-rw-r--r-- 1 root root 448 sep 22 17:34 config drwxr-xr-x 5 root root 4096 sep 22 17:27 strict drwxr-xr-x 5 root root 4096 sep 22 17:28 targeted 5. selinux工具
1) /usr/sbin/seten