3.3. 受限制和未限制的用户


每个 Linux 用户都使用 SELinux 策略映射到 SELinux 用户。这可允许 Linux 用户继承对 SELinux 用户的限制。此 Linux 用户映射可以通过以 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       *
system_u             system_u             s0-s0:c0.c1023       *
在 Red Hat Enterprise Linux 中,Linux 用户默认映射到 SELinux __default__ 登录,该登录映射到 SELinux unconfined_u 用户。下面一行定义了默认映射:
__default__               unconfined_u              s0-s0:c0.c1023
下面的步骤演示了如何在系统中添加新 Linux 用户,以及如何将该用户映射到 SELinux unconfined_u 用户。它假设 root 用户运行没有限制,这与 Red Hat Enterprise Linux 中的默认设置相同:

过程 3.4. 将新的 Linux 用户映射到 SELinux unconfined_u 用户

  1. 以 root 用户身份,输入以下命令来创建名为 newuser 的新 Linux 用户:
    ~]# useradd newuser
  2. 要为 Linux newuser 用户分配密码。以 root 用户身份输入以下命令:
    ~]# passwd newuser
    Changing password for user newuser.
    New UNIX password: Enter a password
    Retype new UNIX password: Enter the same password again
    passwd: all authentication tokens updated successfully.
    
  3. 从当前会话中注销,然后以 Linux 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
    
    注意
    如果您不再需要系统中的 newuser 用户,请注销 Linux newuser 的会话,使用您的帐户登录,并以 root 用户身份运行 userdel -r newuser 命令。它将删除 newuser 及其主目录。
受限制和不受限制的 Linux 用户会受到可执行和可写入的内存检查,也受到 MCS 或 MLS 的限制。
要列出可用的 SELinux 用户,请输入以下命令:
~]$seinfo -u
Users: 8
   sysadm_u
   system_u
   xguest_u
   root
   guest_u
   staff_u
   user_u
   unconfined_u
请注意,seinfo 命令由 setools-console 软件包提供,该软件包默认不会安装。
如果一个未限制的 Linux 用户执行一个应用程序,这个应用程序被 SELinux 策略定义为可以从 unconfined_t 域转换到其自身限制域的应用程序,则未限制的 Linux 用户仍会受到那个受限制域的限制。这样做的安全优点是,即使 Linux 用户的运行没有限制,但应用程序仍受限制。因此,对应用程序中漏洞的利用会被策略限制。
同样,我们可以将这些检查应用到受限制的用户。每个受限制的 Linux 用户都受到一个受限的用户域的限制。SELinux 策略还可定义从受限制的用户域转换到自己受限制的目标域转换。在这种情况下,受限制的 Linux 用户会受到那个目标受限域的限制。重点是,根据用户的角色,把特定的权限与受限制的用户相关联。在下表中,您可以看到 Red Hat Enterprise Linux 中 Linux 用户的基本受限制域示例:
表 3.1. SELinux 用户功能
用户 角色 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_tguest_txguest_t 域中的 Linux 用户只能在 SELinux 策略允许的情况下运行设置的用户 ID(setuid)应用程序(例如 passwd)。这些用户无法运行 susudo setuid 应用程序,因此无法使用这些应用程序成为 root 用户。
  • sysadm_tstaff_tuser_txguest_t 域中的 Linux 用户可以使用 X Window 系统和终端登录。
  • 默认情况下,staff_tuser_tguest_txguest_t 域中的 Linux 用户可以在其主目录和 /tmp 中执行应用程序。要防止他们在他们有写入访问权限的目录中执行应用程序(继承用户权限),请将 guest_exec_contentxguest_exec_content布尔值设置为 off。这有助于防止有缺陷或恶意的应用程序修改用户的文件。
    有关允许和阻止用户在主目录和 /tmp 中执行应用程序的信息,请参阅 第 6.6 节 “用户执行应用程序的布尔值”
  • xguest_t 域中唯一网络访问 Linux 用户是 Firefox 连接到网页。
请注意,system_u 是系统进程和对象的特殊用户身份。它绝对不能和 Linux 用户关联。另外,unconfined_uroot 是没有限制的用户。因此,它们没有包括在上述 SELinux 用户功能表中。
除了已提到的 SELinux 用户外,还有特殊的角色可以映射到这些用户。这些角色决定了 SELinux 允许这些用户可以做什么:
  • dbadm_r 只能管理与 Apache HTTP 服务器相关的 SELinux 类型。如需更多信息,请参阅 第 13.2 节 “类型”
  • dbadm_r 只能管理与 MariaDB 数据库和 PostgreSQL 数据库管理系统相关的 SELinux 类型。如需更多信息,请参阅 第 20.2 节 “类型”第 21.2 节 “类型”
  • logadm_r 只能管理与 syslogauditlog 进程相关的 SELinux 类型。
  • secadm_r 只能管理 SELinux。
  • auditadm_r 只能管理与 audit 子系统相关的进程。
要列出所有可用的角色,请输入以下命令:
~]$ seinfo -r
如前所述,seinfo 命令由 setools-console 软件包提供,该软件包默认不会安装。

3.3.1. sudo 转换和 SELinux 角色

在某些情况下,受限制的用户需要执行需要 root 特权的管理任务。为此,此类受限制的用户必须使用 sudo 命令获得 受限的管理员 SELinux 角色。sudo 命令用于向可信用户授予管理访问权限。当用户在管理命令之前带有 sudo 时,系统会提示他们输入 自己的密码。然后,当它们经过身份验证并假定允许 命令时,将像 root 用户一样执行管理命令。
表 3.1 “SELinux 用户功能” 所示,默认只允许 staff_usysadm_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 用户配置受限管理员角色,请跳过前两个步骤。
  1. 创建一个新的 SELinux 用户,并为这个用户指定默认 SELinux 角色和一个补充的受限管理员角色:
    ~]# semanage user -a -r s0-s0:c0.c1023 -R "default_role_r administrator_r" SELinux_user_u
  2. 设置默认的 SElinux 策略上下文文件。例如,要使用与 staff_u SELinux 用户相同的 SELinux 规则,请复制 staff_u 上下文文件:
    ~]# cp /etc/selinux/targeted/contexts/users/staff_u /etc/selinux/targeted/contexts/users/SELinux_user_u
  3. 将新创建的 SELinux 用户映射到现有 Linux 用户:
    semanage login -a -s SELinux_user_u -rs0:c0.c1023 linux_user
  4. /etc/sudoers.d/ 目录中创建一个名为您的 Linux 用户的新配置文件,并将以下字符串添加到其中:
    ~]# echo "linux_user ALL=(ALL) TYPE=administrator_t ROLE=administrator_r /bin/bash " > /etc/sudoers.d/linux_user
  5. 使用 restorecon 实用程序重新标记 linux_user 主目录:
    ~]# restorecon -FR -v /home/linux_user
  6. 以新创建的 Linux 用户身份登录到该系统,检查用户是否标记了默认的 SELinux 角色:
    ~]$ id -Z
    SELinux_user_u:default_role_r:SELinux_user_t:s0:c0.c1023
  7. 运行 sudo,将用户的 SELinux 上下文更改为 /etc/sudoers.d/linux_user 中指定的补充 SELinux 角色。与 sudo 一起使用的 -i 选项会导致执行交互式 shell:
    ~]$ sudo -i
    ~]# id -Z
    SELinux_user_u:administrator_r:administrator_t:s0:c0.c1023
要更好地了解占位符,如 default_role_radministrator_r,请参阅以下示例。

例 3.1. 配置 sudo 转换

这个示例创建了一个新的 SELinux 用户 restricted _u,默认分配了角色 staff_r,并且配置了 sudo,将 restricted _u 角色从 staff_r 改为 webadm_r
  • sysadm_runconfined_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
  • 以新创建的 Linux 用户身份登录到该系统,检查用户是否标记了默认的 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
    
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.