这篇文章介绍一下CentOS下的SELINUX的一些非常基础的知识。
环境说明[root@liumiaocn ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@liumiaocn ~]#现象
当我们执行id命令的时候,可能会出现如下内容,
[root@liumiaocn ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@liumiaocn ~]#
这篇文章主要就context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023简单地进行介绍。
id -Z实际上使用id -Z也可清楚地看到此部分内容,man的内容如下: 仅显示当前用户的安全上下文
-Z, --context print only the security context of the current user
是的,id命令只能查看当前用户的安全上下文,其他用户不可,比如使用root查看另外一个名为liumiao的用户信息,指定用户时加上-Z选项会提示错误信息,执行示例如下所示:
[root@liumiaocn ~]# id liumiao uid=1000(liumiao) gid=1000(liumiao) groups=1000(liumiao) [root@liumiaocn ~]# id liumiao -Z id: cannot print security context when user specified [root@liumiaocn ~]#安全上下文
安全上下文是不是和SELINUX有关,是的。这就是SELINUX基础的内容,这篇文章不做过多地展开,仅会对context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023的内容稍作展开进行理解。
SELINUX的作用相较于传统的UGO的权限模型,这种方式之下存在如下问题:
- 不能进行细粒度比如进程级别的控制
- 隔离程度不够(比如很容易影响到其他进程)
- root权限容易被滥用
结合起来最大的一个问题就是,一旦突破一个进程获取相应权限,就获取了对其他进程的操作可能性,这也是大部分黑客所做的事情。通过对外服务的应用的漏洞,获得相应的权限,进而对所在机器的其他应用作出攻击,而SELINUX则可以在此做一层防护,简单来说,因为其可以做到进程级别的访问控制。
以本文id -Z的示例来说,用冒号分开的各列含义如下
示例:unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
对应格式:用户:角色:类型:安全等级
字段 类型 用户 unconfined_u 角色 unconfined_r 类型 unconfined_t 安全等级 s0-s0:c0.c1023 用户和角色
SELinux的用户和Linux的用户之间有一个映射的关系,结合角色和本文出现的用户和角色的信息,可参看下图进行理解
SELinux模型中还包含RBAC(基于角色的访问控制),用户和角色的关系主要是:
- 角色是一组权限的集合
- 用户可以与角色进行关联,一个用户可以与多个角色进行关联,一个角色也可以赋予多个用户
MLS和MCS这里不做展开,首先MLS/MCS为
- MLS = Multi-Level Security
- MCS = Multi-Category Security
可结合下图进行理解
除了id -Z可以参看用户的安全上下文,还可以查看进程和文件,此处简单示例如下
ls -Z[root@liumiaocn ~]# ls -Z -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg [root@liumiaocn ~]#ps -Z
[root@liumiaocn ~]# ps -Z LABEL PID TTY TIME CMD unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3741 pts/0 00:00:00 bash unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 11543 pts/0 00:00:00 ps [root@liumiaocn ~]#控制
SELINUX有三种模式,可以将其设定为disabled模式,安全上下文就不再显示了,此处就不再赘述。也可以参看如下对于SELINUX模式控制的方法:
- https://blog.csdn.net/liumiaocn/article/details/103294064/
也可以通过安装setools-console进行更详细地操作,setools-console提供了很多很有用的命令。