SELinux用户
除了普通的 Linux 用户之外,还有 SELinux 用户。
SELinux 用户是 SELinux 政策的一部分。
该策略被授权用于一组特定的角色和特定的 MLS(多级安全)范围。
作为策略的一部分,每个 Linux 用户都映射到一个 SELinux 用户。
这允许 Linux 用户继承 SELinux 用户的限制和安全规则和机制。
为了定义他们可以进入的角色和级别,映射的 SELinux 用户身份在 SELinux 上下文中用于该会话中的进程。
我们可以从命令行查看 SELinux 和 Linux 用户帐户之间的映射列表:
# 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 * system_u system_u s0-s0:c0.c1023 *
将 Linux 用户映射到 SELinux 用户
使用“semanage login -a”命令将Linux用户映射到SELinux用户。
例如,要将 Linux 用户 john 映射到 SELinux user_u 用户,请运行以下命令:
# semanage login -a -s user_u john
-a 选项添加新记录,-s 选项指定 SELinux 用户。
最后一个参数 newuser 是我们要映射到指定 SELinux 用户的 Linux 用户。
用户执行应用程序的布尔值
在主目录和 /tmp 中运行应用程序时,一些布尔值可用于更改用户行为。
使用“setsebool -P [boolean] on|off”命令:
- 允许 guest_t 域中的 Linux 用户在其主目录和 /tmp 中执行应用程序:
# setsebool -P guest_exec_content on
- 允许 xguest_t 域中的 Linux 用户在其主目录和 /tmp 中执行应用程序:
# setsebool -P xguest_exec_content on
- 要防止 user_t 域中的 Linux 用户在其主目录和 /tmp 中执行应用程序:
# setsebool -P user_exec_content off
- 防止staff_t 域中的Linux 用户在其主目录和/tmp 中执行应用程序:
# setsebool -P staff_exec_content off
受限 SELinux 用户
Linux用户默认映射到SELinux _default_登录,即映射到SELinux unconfined_u用户。
但是,SELinux 可以通过将 Linux 用户映射到 SELinux 用户来限制 Linux 用户,以利用应用于他们的安全规则和机制。
SELinux 政策中存在许多受限的 SELinux 用户。
以下是受限 SELinux 用户及其关联域的列表:
- guest_u :用户的域是 guest_t。
- Staff_u :用户的域是 staff_t。
- user_u :用户的域是 user_t。
- xguest_x :用户的域是 xguest_t。
仅当 SELinux 策略允许(例如 passwd)时,guest_t、xguest_t 和 user_t 域中的 Linux 用户才能运行 set user ID (setuid) 应用程序。
他们不能运行 su 和 sudo setuid 应用程序来成为 root 用户。
guest_t 域中的 Linux 用户没有网络访问权限,只能从终端登录。
他们可以使用 ssh 登录,但不能使用 ssh 连接到另一个系统。
xguest_t 域中 Linux 用户的唯一网络访问权限是用于连接网页的 Firefox。
xguest_t、user_t 和 staff_t 域中的 Linux 用户可以使用 X Window 系统和终端登录。
默认情况下,staff_t 域中的 Linux 用户无权使用 sudo 命令执行应用程序。
默认情况下,guest_t 和 xguest_t 域中的 Linux 用户无法在其主目录或者 /tmp 中执行应用程序,从而阻止他们在具有写入权限的目录中执行应用程序。
这有助于防止有缺陷或者恶意的应用程序修改用户拥有的文件。
默认情况下,user_t 和 staff_t 域中的 Linux 用户可以在其主目录和 /tmp 中执行应用程序。
等级
Level 是 MLS 和 MCS 的一个属性。
MLS 范围是一对级别,如果级别不同,则写为 lowlevelhighlevel,如果级别相同(s0-s0 与 s0 相同),则写为 lowlevel。
每个级别都是一个敏感类别对,类别是可选的。
如果有类别,则级别写为灵敏度:类别集。
如果没有类别,则写为敏感度。
如果类别集是连续的系列,则可以缩写。
例如,c0.c3 与 c0,c1,c2,c3 相同。
/etc/selinux/targeted/setrans.conf 文件是 SELinux 的多类别安全转换表,并将级别映射到人类可读的形式,例如 s0:c0.c1023=SystemHigh。
不要用文本编辑器编辑这个文件;使用 semanage 命令进行更改。
使用 chcon 命令更改文件的 SELinux 上下文。
使用 chcon 命令所做的更改不会在文件系统重新标记或者执行 restorecon 命令后继续存在。
使用 chcon 时,提供全部或者部分 SELinux 上下文以进行更改。
角色
角色是基于角色的访问控制 (RBAC) 安全模型的一个属性。
该角色充当域和 SELinux 用户之间的中介。
SELinux 用户获得角色授权,角色获得域授权,进程在各自独立的域中运行。
角色决定了我们可以输入哪些域,并最终确定我们可以访问哪些文件。
类型
类型是类型强制 (TE) 的一个属性。
类型定义了文件的类型,并定义了进程的域。
进程通过在各自的域中运行而彼此分离。
这种分离防止进程访问其他进程使用的文件,以及防止进程访问其他进程。
SELinux 策略规则定义了类型如何相互访问,无论是域访问类型,还是域访问另一个域。