1、安全上下文

安全上下文包括了所有事情的属性的描述,包括文件, 目录, 进程, 等以上所有的东西。安全上下文包括了身份,角色和域类型。在SELinux系统上你可以用id 命令来查看你当前用户的安全上下文。

使用了SELinux的系统中,每一个进程的上下文都包含三个组成部分:一个ID(identity),一个角色(role)和一个域(domain)

一个安全上下文可以像 identity:role:domain 这样一种描述符的方式简明的表现出来。

2、identity(身份)

ID 是指这个进程的所有者,就是UNIX账户,但前提是这个账户必须被预先编译到SELinux策略中去使SELinux认识这个账户,不然的话 SELinux默认地将那些未知的系统进程ID记为 system_u ,将那些未知的用户进程ID记为 user_u;角色用来判断某个处于此角色的ID可以进入哪些域,还用来防止某个处于此角色的ID进入其它不该进入的域。比如, user_r角色就不允许进入 sysadm_t (重要的系统管理域)。换句话说就是,那些只有 user_u ID的进程只能扮演 user_r 这个角色,而 user_r 这个角色 永远不能被许可进入 sysadm_t 域。从而,那些只有 user_u 这个ID的人是别想进入 sysadm_t 域的

运行su 命令不会改变SELinux中的身份(identity)

[test@linuxas ~]$ id

uid=500(test) gid=500(test) groups=500(test) context=user_u:system_r:unconfined_t

[test@linuxas ~]$ su root

Password:

[root@linuxas test]# id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t

一个无特权用户 test 运行 id 命令 (在启动SELinux的情况下) 可以看到用户的安全上下文:

context=user_u:system_r:unconfined_t

现在, 如果 使用su切换成 root 再运行id, 他将发现安全上下文仍然是:

context=user_u:system_r:unconfined_t

身份保持相同, 跟没切换到root时一样。

3、role(角色)

角色决定了那些域可以使用。 哪些域可以被哪些角色使用可以预先定义在策略的配置文件里。如果一个策略数据库中定义了一个角色不可以使用一个域, 它将被拒绝。

4、domain(域)

所有进程都在域中运行,域直接决定了进程的访问。 域基本上是一个进程允许做的操作的列表, 或者说它决定了一个进程可以对哪些类型进行操作。域就好像一个标准UNIX的uid的概念。在有SELinux的系统上, 如果一个正在执行的进程想要转换进入特权域执行时,如果这个进程的角色被设置成不允许进入特权域的话, 这个进程就不能执行。

常见的例子是sysadm_t是系统管理域, user_t 是无特权用户域。 Init运行在init_t 域, named 运行在 named_t 域。

5、类型

类型分配给一个对象并决定谁可以访问这个对象。 它的定义和域基本相同, 不同就是域是对进程的应用而类型是分配给目录,文件,和套接字的。

6、策略

策略就是可以设置的规则,决定了一个角色的用户可以访问什么; 哪个角色可以进入哪个域,哪个域可以访问哪个类型等这样的问题。 你可以根据你想要建立的系统的特点来决定设置什么样的策略。