SELinux詳解之第二章——MLS/MCS

基本介紹

MLS&MCS(Multi-Level Security and Multi-Category Security)多層安全技術是指強制實施Bell-La Padula強制訪問模型的安全方案。在MLS下,用戶和進程稱爲Subject(主體),文件、設備和系統的其他組件稱爲Object(對象)。主體和對象都標有安全級別,每個安全級別都由一個敏感度和一個類別組成。在SELinux的情況下,一個進程(以“機密”級別運行)可以按當前級別進行讀/寫,但只能讀取低級別的文件,或者寫更高級別的文件(在被許可的情況下)。一個進程訪問不同安全等級文件的示意圖如下:
在這裏插入圖片描述

安全等級的組成部分

MLS / MCS 表示格式

以下是SELinux中MLS/MCS等級表示的示意圖:
在這裏插入圖片描述

其中各字段含義如下:

  • sensitivity - 敏感度級別是分級的,一般來說s0最低。這些值是使用敏感性聲明定義的。傳統上,MLS系統的最大值是s15(儘管“參考策略”的最大值是構建時間選項)。對於MCS系統,僅定義了一個靈敏度,即s0。
  • category - 類別是可選的(即可以有零個或多個類別),並且它們將構成無序且不相關的列表。這些值是使用category語句定義的。C1,C3表示無序列表,而C1.C3則表示C1、C2、C3連續的列表。傳統上,該值在C0和C255之間(儘管參考策略的最大值是構建時間選項),不過在我試驗的Centos 7已經達到了C1023。
  • level - 等級就是由敏感度和類別組成的

安全等級的構成

一個安全等級是由兩個安全級別構成的範圍標識的,就像下面這張圖描述的那樣:

在這裏插入圖片描述
對於等級下限表示的是當前進程或主體的等級,而上限則是表示能被許可訪問的最高等級。對於SELinux來說一般下限被設置爲s0,而上限則被設置爲s0:c0.c1023.用一下命令就能看到相關進程的安全等級範圍:

[root@localhost /]# ps -Z
LABEL                              PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 11360 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 13783 pts/0 00:00:00 man
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 13794 pts/0 00:00:00 less
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 14908 pts/0 00:00:00 ps

不同等級之間的訪問控制

在這裏插入圖片描述
上面這張圖中灰色的區域即表示了s0 - s3:c1.c5安全等級進程所能訪問的文件的等級標籤。

雖然在模型中規定是可以往高等級文件寫入的,不過實際情況中SELinux是不允許往高等級文件寫入數據的,除非有特別許可。

在SELinux中使用MLS/MCS

本次實驗的平臺的是Centos7,請在進行本次試驗時,務必對系統進行快照備份,以便恢復。

由於MLS並不是很支持X window系統(圖形界面),所以在開始下面操作之前,請永久切換爲字符界面。

  1. 首先需要安裝selinux-policy-mls
[root@localhost /]# yum install -y selinux-policy-mls
  1. 修改配置文件/etc/selinux/config,以啓用MLS功能
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=mls

請務必將運行模式設置爲permissive,否則可能重啓後無法開機

  1. 使用fixfiles腳本在下一次重啓後,重新標記系統文件
# 該命令會創建/.autorelabel文件
[root@localhost /]# fixfiles -F onboot
  1. 然後重啓系統,將會看到如下輸出,重新標記的時間取決於你的電腦性能,大概會持續8分鐘。
*** Warning -- SELinux mls policy relabel is required.
*** Relabeling could take a very long time, depending on file
*** system size and speed of hard drives.
***********

最下面的星號*,每一個即表示已經標記完了1000個文件。

  1. 在開機之後,由於我們運行在許可模式下,SELinux並不會阻止文件的訪問,而只是單純的記錄不符合規則的訪問。

使用如下指令查看,有哪些文件訪問被記錄了下來,需要對文件的等級進行修改,或者修改訪問進程的等級已符合規則。如果爲空(剛裝的虛擬機),就說明系統當前所有的進程的訪問都是符合規則的,這時才能修改運行模式爲enforce,否則可能會出現系統運行異常崩潰的問題。

[root@localhost /]# grep "SELinux is preventing" /var/log/messages

修改MLS等級

  1. 修改SELinux用戶的MLS等級標籤
# 例如:semanage login --modify --range s3:c123 dask
# 可以不用設置MLS範圍,而是直接設置當前的MLS等級,即只設置下限
[root@localhost /]# semanage login --modify --range (level) (selinux_user)

進程的上下文標識是繼承自運行的用戶的

  1. 修改文件的MLS等級標籤
[root@localhost /]# chcon -R -l s2 /home/dask
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章