本文共 2843 字,大约阅读时间需要 9 分钟。
MLS&MCS(Multi-Level Security and Multi-Category Security)
多层安全技术是指强制实施Bell-La Padula
强制访问模型的安全方案。在MLS下,用户和进程称为Subject(主体)
,文件、设备和系统的其他组件称为Object(对象)
。主体和对象都标有安全级别,每个安全级别都由一个敏感度和一个类别组成。在SELinux
的情况下,一个进程(以“机密”级别运行)可以按当前级别进行读/写,但只能读取低级别的文件,或者写更高级别的文件(在被许可的情况下)。一个进程访问不同安全等级文件的示意图如下:
以下是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 -ZLABEL PID TTY TIME CMDunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 11360 pts/0 00:00:00 bashunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 13783 pts/0 00:00:00 manunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 13794 pts/0 00:00:00 lessunconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 14908 pts/0 00:00:00 ps
s0 - s3:c1.c5
安全等级进程所能访问的文件的等级标签。 虽然在模型中规定是可以往高等级文件写入的,不过实际情况中
SELinux
是不允许往高等级文件写入数据的,除非有特别许可。
本次实验的平台的是Centos7
,请在进行本次试验时,务必对系统进行快照备份,以便恢复。
由于MLS并不是很支持
X window
系统(图形界面),所以在开始下面操作之前,请永久切换为字符界面。
selinux-policy-mls
包[root@localhost /]# yum install -y selinux-policy-mls
/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
,否则可能重启后无法开机
fixfiles
脚本在下一次重启后,重新标记系统文件# 该命令会创建/.autorelabel文件[root@localhost /]# fixfiles -F onboot
*** 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个文件。
SELinux
并不会阻止文件的访问,而只是单纯的记录不符合规则的访问。使用如下指令查看,有哪些文件访问被记录了下来,需要对文件的等级进行修改,或者修改访问进程的等级已符合规则。如果为空(刚装的虚拟机
),就说明系统当前所有的进程的访问都是符合规则的,这时才能修改运行模式为enforce
,否则可能会出现系统运行异常崩溃的问题。
[root@localhost /]# grep "SELinux is preventing" /var/log/messages
SELinux
用户的MLS等级标签# 例如:semanage login --modify --range s3:c123 dask# 可以不用设置MLS范围,而是直接设置当前的MLS等级,即只设置下限[root@localhost /]# semanage login --modify --range (level) (selinux_user)
进程的上下文标识是继承自运行的用户的
[root@localhost /]# chcon -R -l s2 /home/dask
转载地址:http://tqfen.baihongyu.com/