每个 Linux 用户都使用 SELinux 策略映射到一个 SELinux 用户。这允许 Linux 用户继承对 SELinux 用户的限制。通过以 root 身份运行命令:semanage login -l
可以看到此 Linux 用户映射:
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 *
在 Fedora 中,Linux 用户默认映射到 SELinux 的__default__
登录,即映射到 SELinux的unconfined_u
用户。以下行定义了默认映射:
__default__ unconfined_u s0-s0:c0.c1023
以下过程演示了如何将新的 Linux 用户添加到系统以及如何将该用户映射为SELinux的unconfined_u
用户。假定 root 用户正在不受限制地运行。
将新 Linux 用户映射到 SELinux的unconfined_u
用户
1. 以 root 身份运行以下命令以创建一个名为newuser
的新 Linux 用户:
useradd newuser
2. 注销当前会话,并以newuser
用户身份登录。当我们登录时,pam_selinux PAM 模块会自动将 Linux 用户映射到 SELinux 用户(在本例中为unconfined_u
),并设置生成的 SELinux 上下文。然后使用此上下文启动 Linux 用户的 shell。运行以下命令查看 Linux 用户的上下文:
[newuser@localhost ~]$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_t
域转换到其自己的受限制域的应用程序,则不受限制的 Linux 用户仍受该受限制域的限制。这样做的安全性好处是,即使 Linux 用户不受限制地运行,应用程序仍然受到限制。因此,利用应用程序中的缺陷可能会受到策略的限制。
unconfined_t
。SELinux 策略还可以定义从受限用户域到其自己的目标受限域的转换。在这种情况下,受限 Linux 用户会受到目标受限域的限制。要点是特殊权限根据他们的角色与受限用户相关联。下表是Fedora 中 Linux 用户的基本受限域示例:

· 如果SELinux策略允许,user_t、guest_t和xguest_t域中的Linux用户只能运行set user ID(setuid)应用程序(例如,passwd)。这些用户无法运行su和sudo setuid应用程序,因此无法使用这些应用程序成为root用户。
· sysadm_t、staff_t、user_t和xguest_t域中的Linux用户可以通过X窗口系统和终端登录。
· 默认情况下,guest_t和xguest_t域中的Linux用户无法在其主目录或/tmp/目录中执行应用程序,从而阻止他们在其具有写访问权限的目录中执行继承用户权限的应用程序。这有助于防止有缺陷或恶意的应用程序修改用户的文件。
· 默认情况下,staff_t和user_t域中的Linux用户可以在其主目录和/tmp/中执行应用程序。有关允许和防止用户在其主目录和/tmp/中执行应用程序的信息,请参见第6.6节“用户执行应用程序的布尔值”。
· xguest_t域中的Linux用户只有连接到网页的Firefox。
-
webadm_r
只能管理与 Apache HTTP Server 相关的 SELinux 类型。 -
dbadm_r
只能管理与 MariaDB 数据库和 PostgreSQL 数据库管理系统相关的 SELinux 类型。 -
logadm_r
只能管理与syslog
和auditlog
进程相关的 SELinux 类型。 -
secadm_r
只能管理 SELinux。 -
auditadm_r
只能管理与audit
子系统相关的进程。
seinfo -r
SELinux角色和sudo转换
在某些情况下,受限用户需要执行需要 root 权限的管理任务。为此,此类受限用户必须使用该命令获得受限管理员SELinux 角色。sudo命令用于为受信任的用户提供管理访问权限。当用户在管理命令前加上sudo时,系统会提示他们输入自己的密码。然后,当他们已通过身份验证并假设该命令被允许时,就好像他们是 root 用户一样执行管理命令。
默认情况下只允许staff_u
和sysadm_u的
SELinux 受限用户使用sudo
。当这些用户使用 执行命令时sudo
,他们的角色会根据/etc/sudoers
配置文件或/etc/sudoers.d/
目录中的相应文件中指定的规则进行更改。
以下过程显示如何设置sudo
以将新创建的SELinux_user_u
受限用户转换为administrator_r
受限管理员。以下命令请用root用户执行。
配置 sudo 转换
1. 创建一个新的 SELinux 用户并为该用户指定默认的 SELinux 角色和辅助受限管理员角色:
semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u
confined_u
在下面的示例中,新创建的SELinux 用户的默认角色是staff_r
,受限管理员角色是webadm_r
:
semanage user -a -r s0-s0:c0.c1023 -R "staff_r webadm_r" confined_u
2. 设置默认的 SElinux 策略上下文文件。例如,要拥有与staff_u
SELinux 用户相同的SELinux 规则,要复制staff_u
上下文文件:
cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user
3. 将新创建的 SELinux 用户映射到现有 Linux 用户:
semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
4. 在目录中创建一个与刚才创建的 Linux 用户同名的新配置文件,并使用以下命令将字符串添加到/etc/sudoers.d/
中:
echo "linux_user ALL=(ALL) TYPE=administaror_t ROLE=administrator_r /bin/sh " > /etc/sudoers.d/linux_user
例如:
echo "linux_user ALL=(ALL) TYPE=webadm_t ROLE=webadm_r /bin/sh " > /etc/sudoers.d/linux_user
5. 使用restorecon
重新标记linux_user
主目录:
restorecon -R -v /home/linux_user
6. 重启系统:
systemctl reboot
7. 当以新创建的 Linux 用户身份登录系统时,该用户将被标记为默认 SELinux 角色:
$ id -Z
SELinux_user_u: default_role_r: default_role_t:s0:c0.c1023
运行后sudo
,用户的 SELinux 上下文更改为 中指定的补充 SELinux 角色。使用的选项导致执行交互式 shell: /etc/sudoers.d/
linux_user
-isudo
~]$ sudo -i
~]# id -Z
SELinux_user_u: administrator_r: administrator_t:s0-s0:c0.c1023
对于confined_u
的 SELinux 用户,输出如下所示:
~]$ id -Z
confined_u:staff_r:staff_t:s0:c0.c1023
~]$ sudo -i
~]# id -Z
confined_u:webadm_r:webadm_t:s0:c0.c1023