如果 SELinux 开启,则非 root 用户会出现 su 问题

如果 SELinux 开启,则非 root 用户会出现 su 问题

我的 RHEL 7.6 服务器上有一个普通用户,当 SELinux 关闭时,su 命令可以正常工作。但是当 SElinux 开启时,su 命令不再起作用。在 PAM 源中,我发现

#ifndef HELPER_COMPILE
if (geteuid() || SELINUX_ENABLED)
    return PAM_UNIX_RUN_HELPER;
#endif

如果 SELinux 已打开,则使用特殊命令unix_chkpwd来检查密码。这个命令有一段代码:

user = getuidname(getuid());
/* if the caller specifies the username, verify that user
  matches it */
if (strcmp(user, argv[1])) {
 user = argv[1];
 /* no match -> permanently change to the real user and proceed */
 if (setuid(getuid()) != 0)
   return PAM_AUTH_ERR;

在我的例子中,user 是普通用户名,argv[1] 是 root,在这种情况下,setuid 是针对普通用户的 uid 执行的。你知道为什么会这样吗?有什么方法可以让 su 在 SELinux 开启时工作吗?

答案1

从我的 RHEL 7.9 系统:

semanage login -l | more

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       *

这是 RHEL 的默认设置,如果修改了它,那么我就会遇到su在 selinux 强制执行时无法工作的情况,即使用户在wheel组中也是如此。我相信这归结为了解如何使用 selinux 添加那些应该允许 su 正确的 selinux 标签或上下文的wheel组用户。

可能是这样的visudo

%wheel ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r ALL

这是来自 v3r4 stig,这是我经历过的如果 SELinux 开启,则非 root 用户会出现 su 问题在尝试应用该语义安全指令后。执行 asetenforce 0并且su会按预期工作。如果您不知道 STIG 的含义或从未执行过semange命令,那么这可能不是您的原因。

我现在认为,在 RHEL 7 中,如果任何非 root 用户愿意,su那么他们需要加入该wheel组。我不知道在什么/etc/?文件中设置了可以撤消该操作并允许任何用户的位置。su但传统的简单方面只有wheel组用户才能su,一般默认是独立于selinux的。

答案2

相关内容