


系統啟動時的策略
SELinux在系統啟動時就起作用,所有的進程必須標識合適的域。系統啟動時init進程在啟動進程時標識進程和同步強制策略。有關init進程裝載和同步策略過程,說明如下:
1.系統啟動時在內核裝載后,初始的進程指定為預定義的初始的SID kernel,在策略被裝載前,初始的SID用于啟動時的系統調用等。
2./sbin/init掛接文件系統/proc/,接著查找selinuxfs文件系統,如果它存在,表明內核中SELinux激活了。
3.如果init在內核中沒找到SELinux,或者發現它通過selinux=0關閉SELinux,或者配置文件/etc/selinux/config定義了SELINUX=disabled,系統用無SELinux設置啟動進程。如果當前SELinux的啟動狀態不同于配置文件/etc/selinux/config中狀態,init進程在啟動時的參數傳遞中將設置該文件,默認設置為permissive模式,直到策略被裝載。配置文件或啟動參數enforcing=1時,SELinux設置為enforcement模式。
4.如果內核中SELinux存在,將selinuxfs文件系統掛接到/selinux/。
5.內核檢查/selinux/policyvers是否是支持的策略版本,init進程檢查/etc/selinux/config看策略(如:targeted)是否激活,并裝載$SELINUX_POLICY/policy策略文件。
如果二進制策略是內核不支持的版本,并且它是一個以前的舊版本,init進程嘗試裝載這個策略文件。這種機制提供了與舊策略版本的一個向后兼容性。
如果/etc/selinux/targeted/booleans中的設置不同于編譯在策略文件中的設置,init進程修改已裝載到內存中的策略。
6.到此策略已裝載好,初始的SID映射到策略中定義在$SELINUX_SRC/initial_sid_contexts的安全上下文。在targeted策略中,新的域是user_u:system_r:unconfined_t。從現在開始,內核能從內核中的安全服務器動態獲得安全上下文了。
7.接著,init再次執行它自己,以便它能轉移到不同的域(如果策略文件定義了轉移策略)。targeted策略沒定義類型轉移,init還是保持在unconfined_t域。
8.到這里后,init繼續它的正常啟動。
init進程重執行它自己的原因是為了與stricter策略控制相適應,重執行后,init轉移到新的域,進程僅能在執行期間獲得域,這意味著init進程是進入域的唯一入口點。
例如:如果策略指定init的域為init_t,需要將init的初始SID(如:kernel)轉移到合適的域init_t,進程init需要在裝載策略后重執行它自己。如果策略文件中有規則domain_auto_trans(kernel_t, init_exec_t,
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解