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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章