3.3. 受限制和未限制的用户
					每个 Linux 用户都使用 SELinux 策略映射到 SELinux 用户。这可允许 Linux 用户继承对 SELinux 用户的限制。此 Linux 用户映射可以通过以 root 身份运行 semanage login -l 命令来查看:
				
					在 Red Hat Enterprise Linux 中,Linux 用户默认映射到 SELinux 
__default__ 登录,该登录映射到 SELinux unconfined_u 用户。下面一行定义了默认映射:
				__default__ unconfined_u s0-s0:c0.c1023
__default__               unconfined_u              s0-s0:c0.c1023
					下面的步骤演示了如何在系统中添加新 Linux 用户,以及如何将该用户映射到 SELinux 
unconfined_u 用户。它假设 root 用户运行没有限制,这与 Red Hat Enterprise Linux 中的默认设置相同:
				过程 3.4. 将新的 Linux 用户映射到 SELinux unconfined_u 用户
- 以 root 用户身份,输入以下命令来创建名为newuser的新 Linux 用户:useradd newuser ~]# useradd newuserCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 要为 Linuxnewuser用户分配密码。以 root 用户身份输入以下命令:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 从当前会话中注销,然后以 Linuxnewuser用户身份登录。当您登录时,pam_selinux PAM 模块会自动将 Linux 用户映射到 SELinux 用户(本例中为unconfined_u),并设置生成的 SELinux 上下文。然后,将使用此上下文启动 Linux 用户的 shell。输入以下命令查看 Linux 用户的上下文:id -Z [newuser@localhost ~]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您不再需要系统中的newuser用户,请注销 Linuxnewuser的会话,使用您的帐户登录,并以 root 用户身份运行 userdel -r newuser 命令。它将删除newuser及其主目录。
					受限制和不受限制的 Linux 用户会受到可执行和可写入的内存检查,也受到 MCS 或 MLS 的限制。
				
					要列出可用的 SELinux 用户,请输入以下命令: 
Copy to Clipboard
Copied!
 
 
Toggle word wrap
Toggle overflow
 
 
				
					请注意,seinfo 命令由 setools-console 软件包提供,该软件包默认不会安装。
				
					如果一个未限制的 Linux 用户执行一个应用程序,这个应用程序被 SELinux 策略定义为可以从 
unconfined_t 域转换到其自身限制域的应用程序,则未限制的 Linux 用户仍会受到那个受限制域的限制。这样做的安全优点是,即使 Linux 用户的运行没有限制,但应用程序仍受限制。因此,对应用程序中漏洞的利用会被策略限制。
				
					同样,我们可以将这些检查应用到受限制的用户。每个受限制的 Linux 用户都受到一个受限的用户域的限制。SELinux 策略还可定义从受限制的用户域转换到自己受限制的目标域转换。在这种情况下,受限制的 Linux 用户会受到那个目标受限域的限制。重点是,根据用户的角色,把特定的权限与受限制的用户相关联。在下表中,您可以看到 Red Hat Enterprise Linux 中 Linux 用户的基本受限制域示例:
				
| 用户 | 角色 | 域 | X 窗口系统 | su 或 sudo | 在主目录和 /tmp 中执行(默认) | 网络 | 
|---|---|---|---|---|---|---|
| sysadm_u | sysadm_r | sysadm_t | 是 | su 和 sudo | 是 | 是 | 
| staff_u | staff_r | staff_t | 是 | 仅 sudo | 是 | 是 | 
| user_u | user_r | user_t | 是 | 否 | 是 | 是 | 
| guest_u | guest_r | guest_t | 否 | 否 | 是 | 否 | 
| xguest_u | xguest_r | xguest_t | 是 | 否 | 是 | 仅 Firefox | 
- user_t、- guest_t和- xguest_t域中的 Linux 用户只能在 SELinux 策略允许的情况下运行设置的用户 ID(setuid)应用程序(例如- passwd)。这些用户无法运行 su 和 sudo setuid 应用程序,因此无法使用这些应用程序成为 root 用户。
- sysadm_t、- staff_t、- user_t和- xguest_t域中的 Linux 用户可以使用 X Window 系统和终端登录。
- 默认情况下,staff_t、user_t、guest_t和xguest_t域中的 Linux 用户可以在其主目录和/tmp中执行应用程序。要防止他们在他们有写入访问权限的目录中执行应用程序(继承用户权限),请将guest_exec_content和xguest_exec_content布尔值设置为off。这有助于防止有缺陷或恶意的应用程序修改用户的文件。有关允许和阻止用户在主目录和/tmp中执行应用程序的信息,请参阅 第 6.6 节 “用户执行应用程序的布尔值”。
- xguest_t域中唯一网络访问 Linux 用户是 Firefox 连接到网页。
					请注意,
system_u 是系统进程和对象的特殊用户身份。它绝对不能和 Linux 用户关联。另外,unconfined_u 和 root 是没有限制的用户。因此,它们没有包括在上述 SELinux 用户功能表中。
				
					除了已提到的 SELinux 用户外,还有特殊的角色可以映射到这些用户。这些角色决定了 SELinux 允许这些用户可以做什么:
				
- dbadm_r只能管理与 Apache HTTP 服务器相关的 SELinux 类型。如需更多信息,请参阅 第 13.2 节 “类型”。
- dbadm_r只能管理与 MariaDB 数据库和 PostgreSQL 数据库管理系统相关的 SELinux 类型。如需更多信息,请参阅 第 20.2 节 “类型” 和 第 21.2 节 “类型”。
- logadm_r只能管理与- syslog和- auditlog进程相关的 SELinux 类型。
- secadm_r只能管理 SELinux。
- auditadm_r只能管理与- audit子系统相关的进程。
					要列出所有可用的角色,请输入以下命令:
				
seinfo -r
~]$ seinfo -r
					如前所述,seinfo 命令由 setools-console 软件包提供,该软件包默认不会安装。
				
3.3.1. sudo 转换和 SELinux 角色
复制链接链接已复制到粘贴板!
						在某些情况下,受限制的用户需要执行需要 root 特权的管理任务。为此,此类受限制的用户必须使用 sudo 命令获得 受限的管理员 SELinux 角色。sudo 命令用于向可信用户授予管理访问权限。当用户在管理命令之前带有 sudo 时,系统会提示他们输入 自己的密码。然后,当它们经过身份验证并假定允许 命令时,将像 root 用户一样执行管理命令。
					
						如 表 3.1 “SELinux 用户功能” 所示,默认只允许 
staff_u 和 sysadm_u SELinux 受限制的用户使用 sudo。当此类用户使用 sudo 执行命令时,可以根据 /etc/sudoers 配置文件中指定的规则或在 /etc/ sudoers.d/ 目录中的相应文件中(如果此类文件存在)更改其角色。
					
						有关 sudo 的更多信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南中的 获取特权 部分。
					
过程 3.5. 配置 sudo 转换
							此流程演示了如何设置 sudo,以将新创建的 SELinux_user_u 受限用户从 default_role_r 转换为 administrator_r 管理员角色。
						
注意
								要为已存在的 SELinux 用户配置受限管理员角色,请跳过前两个步骤。
							
- 创建一个新的 SELinux 用户,并为这个用户指定默认 SELinux 角色和一个补充的受限管理员角色:semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u ~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 设置默认的 SElinux 策略上下文文件。例如,要使用与staff_uSELinux 用户相同的 SELinux 规则,请复制staff_u上下文文件:cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_uCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 将新创建的 SELinux 用户映射到现有 Linux 用户:semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 在/etc/sudoers.d/目录中创建一个名为您的 Linux 用户的新配置文件,并将以下字符串添加到其中:echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_user ~]# echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 使用restorecon实用程序重新标记 linux_user 主目录:restorecon -FR -v /home/linux_user ~]# restorecon -FR -v /home/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 以新创建的 Linux 用户身份登录到该系统,检查用户是否标记了默认的 SELinux 角色:id -Z ~]$ id -Z SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 运行 sudo,将用户的 SELinux 上下文更改为/etc/sudoers.d/linux_user中指定的补充 SELinux 角色。与 sudo 一起使用的-i选项会导致执行交互式 shell:sudo -i id -Z ~]$ sudo -i ~]# id -Z SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023Copy to Clipboard Copied! Toggle word wrap Toggle overflow 
						要更好地了解占位符,如 default_role_r 或 administrator_r,请参阅以下示例。
					
例 3.1. 配置 sudo 转换
							这个示例创建了一个新的 SELinux 用户 restricted 
_u,默认分配了角色 staff_r,并且配置了 sudo,将 restricted _u 角色从 staff_r 改为 webadm_r。
						- 在sysadm_r或unconfined_r角色中以 root 用户身份输入所有以下命令。semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u semanage login -a -s confined_u -rs0:c0.c1023 linux_user restorecon -FR -v /home/linux_user echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_user ~]# semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/confined_u ~]# semanage login -a -s confined_u -rs0:c0.c1023 linux_user ~]# restorecon -FR -v /home/linux_user ~]# echo "linux_user ALL=(ALL) ROLE=webadm_r TYPE=webadm_t /bin/bash " > /etc/sudoers.d/linux_userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 
- 以新创建的 Linux 用户身份登录到该系统,检查用户是否标记了默认的 SELinux 角色:Copy to Clipboard Copied! Toggle word wrap Toggle overflow