Red Hat Training

A Red Hat training course is available for RHEL 8

3.9. 使用 sudo 和 sysadm_r 角色约束管理员

您可以将具有管理权限的特定用户映射到 staff_u SELinux 用户,并配置 sudo,以便用户获取 sysadm_r SELinux 管理员角色。这个角色允许用户在不拒绝 SELinux 的情况下执行管理任务。当用户登录时,会话运行在 staff_u:staff_r:staff_r:staff_t SELinux 上下文中,但当用户使用 sudo 进入命令时,会话会变为 staff_u:sysadm_r:sysadm_t 上下文。

默认情况下,Red Hat Enterprise Linux 中的所有 Linux 用户(包括管理权限的用户)都会映射到无限制的 SELinux 用户 unconfined_u。您可以通过将用户分配给受 SELinux 限制的用户来提高系统安全性。这对遵守 V-71971 安全技术实施指南非常有用。

先决条件

  • root 用户运行没有限制。这是 Red Hat Enterprise Linux 的默认设置。

流程

  1. 将新用户或现有用户映射到 staff_u SELinux 用户:

    1. 要映射新用户,请将新用户添加到 wheel 用户组,并将用户映射到 staff_u SELinux 用户:

      # adduser -G wheel -Z staff_u <example_user>
    2. 要映射现有用户,请将用户添加到 wheel 用户组,并将用户映射到 staff_u SELinux 用户:

      # usermod -G wheel -Z staff_u <example_user>
  2. 恢复用户主目录的上下文:

    # restorecon -R -F -v /home/<example_user>
  3. 要允许 <example_user> 获得 SELinux 管理员角色,请在 /etc/sudoers.d/ 目录中创建一个新文件,例如:

    # visudo -f /etc/sudoers.d/<example_user>
  4. 在新文件中添加以下行:

    <example_user> ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r ALL

验证

  1. 检查 <example_user> 是否映射到 staff_u SELinux 用户:

    # semanage login -l | grep <example_user>
    <example_user>     staff_u    s0-s0:c0.c1023   *
  2. <example_user> 身份登录,例如使用 SSH,并切换到 root 用户:

    [<example_user>@localhost ~]$ sudo -i
    [sudo] password for <example_user>:
  3. 显示 root 安全上下文:

    # id -Z
    staff_u:sysadm_r:sysadm_t:s0-s0:c0.c1023
  4. 尝试管理任务,例如重启 sshd 服务:

    # systemctl restart sshd

    如果没有输出结果,则代表命令可以成功完成。

    如果该命令没有成功完成,它会输出以下信息:

    Failed to restart sshd.service: Access denied
    See system logs and 'systemctl status sshd.service' for details.