SELinux 受限用户和非受限用户

每个 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
受限和非受限的 Linux 用户受到可执行和可写内存检查的约束,并且还受到 MCS 或 MLS 的限制。
如果不受限制的 Linux 用户执行 SELinux 策略定义为可以从unconfined_t域转换到其自己的受限制域的应用程序,则不受限制的 Linux 用户仍受该受限制域的限制。这样做的安全性好处是,即使 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。

除了已经提到的 SELinux 用户之外,还有一些特殊的角色可以映射到这些用户。这些角色决定了 SELinux 允许用户做什么:
  • webadm_r只能管理与 Apache HTTP Server 相关的 SELinux 类型。
  • dbadm_r只能管理与 MariaDB 数据库和 PostgreSQL 数据库管理系统相关的 SELinux 类型。
  • logadm_r只能管理与syslogauditlog进程相关的 SELinux 类型。
  • secadm_r只能管理 SELinux。
  • auditadm_r只能管理与audit子系统相关的进程。
运行以下命令可列出所有可用角色:
seinfo -r

SELinux角色和sudo转换

在某些情况下,受限用户需要执行需要 root 权限的管理任务。为此,此类受限用户必须使用该命令获得受限管理员SELinux 角色。sudo命令用于为受信任的用户提供管理访问权限。当用户在管理命令前加上sudo时,系统会提示他们输入自己的密码。然后,当他们已通过身份验证并假设该命令被允许时,就好像他们是 root 用户一样执行管理命令。

默认情况下只允许staff_usysadm_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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我真的是在认真摸鱼啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值