第 3 章 管理限制和未限制的用户
每个 Linux 用户都根据 SELinux 策略中的规则映射到一个 SELinux 用户。管理员可以使用 semanage login
工具或将 Linux 用户直接分配给特定的 SELinux 用户来修改这些规则。因此,Linux 用户对其分配给的 SELinux 用户有限制。当分配给 SELinux 用户的 Linux 用户启动进程时,此过程将继承 SELinux 用户的限制,除非其他规则指定了不同的角色或类型。
3.1. SELinux 中的限制和未限制的用户
默认情况下,Red Hat Enterprise Linux 中的所有 Linux 用户(包括管理权限的用户)都会映射到无限制的 SELinux 用户 unconfined_u
。您可以通过将用户分配给受 SELinux 限制的用户来提高系统安全性。
Linux 用户的安全上下文由 SELinux 用户、SELinux 角色和 SELinux 类型组成。例如:
user_u:user_r:user_t
其中:
user_u
- 是 SELinux 用户。
user_r
- 是 SELinux 角色。
user_t
- 是 SELinux 类型。
Linux 用户登录后,其 SELinux 用户不能改变。但是,其类型和角色可以改变,例如在转换过程中。
要在您的系统中查看 SELinux 用户映射,以 root 用户身份使用 semanage login -l
命令:
# semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
在 Red Hat Enterprise Linux 中,Linux 用户默认映射到 SELinux __default__
登录,后者映射到 SELinux unconfined_u
用户。下面一行定义了默认映射:
default unconfined_u s0-s0:c0.c1023 *
限制的用户受 SELinux 策略中明确定义的 SELinux 规则的限制。无限制的用户只能受到 SELinux 的最小限制。
受限制和不受限制的 Linux 用户会受到可执行和可写入的内存检查,也受到 MCS 或 MLS 的限制。
要列出可用的 SELinux 用户,请输入以下命令:
$ seinfo -u
Users: 8
guest_u
root
staff_u
sysadm_u
system_u
unconfined_u
user_u
xguest_u
请注意,seinfo
命令由 setools-console
软件包提供,该软件包默认不会安装。
如果一个未限制的 Linux 用户执行一个应用程序,这个应用程序被 SELinux 策略定义为可以从 unconfined_t
域转换到其自身限制域的应用程序,则未限制的 Linux 用户仍会受到那个受限制域的限制。这样做的安全优点是,即使 Linux 用户的运行没有限制,但应用程序仍受限制。因此,对应用程序中漏洞的利用会被策略限制。
同样,我们可以将这些检查应用到受限制的用户。每个受限制的用户都受到受限用户域的限制。SELinux 策略还可定义从受限制的用户域转换到自己受限制的目标域转换。在这种情况下,受限制的用户会受到那个目标限制的域的限制。重点是,根据用户的角色,把特定的权限与受限制的用户相关联。