su root 提示 Permission denied

今天在某机器上新建了一个test账号,然后使用su root时,居然提示我没有权限,具体如下所示:

bash 复制代码
[test@localhost ~]$ su root
Password:
su: Permission denied
[test@localhost ~]$

我确定密码是对的,试了好几次,都不行。于是,开始翻看系统的各种日志,包括messages、audit、secure,都没发现什么有用的线索。

查找原因

因为使用以前建的admin账号,su root却可以成功。基于以往的经验,我推测肯定是哪里做了配置,导致新建的test账号没有权限。首先,就想到了sshd_config,详细看了下各项参数,发现没有问题。于是,又转战PAM,它在/etc/pam.d下有很多配置:

经常搞安全加固的同学应该比较熟悉这些配置,比如:sshd,passwd,login,password-auth,system-auth等。保险起见,可以将这些配置与其他未加固的机器对比,看看是否有值得怀疑的地方。接着查看这个目录下的其他文件,嘿,看我发现了什么:su?还有su.backup?

好家伙,有backup,说明这个su文件被改过,对比下2个文件 :

su 多了两行:

网上搜下这两行配置的解释:

1. auth sufficient pam_rootok.so

  • 作用 :它允许 root 用户不需要进一步验证。pam_rootok.so 模块会检查当前用户是否是 root,如果是,则跳过其他验证步骤。这通常用于一些系统管理命令(如 su 切换用户),如果执行用户是 root,则无需再输入密码。

2. auth required pam_wheel.so group=wheel

  • 作用 :表示只有属于 wheel 组的用户才被允许进行某些操作,比如使用 su 切换到其他用户账户。pam_wheel.so 模块要求用户必须在指定的 wheel 组内才能执行此操作。
    • auth required 表示该验证模块是必须的,如果验证失败,则整个验证过程失败。
    • group=wheel 指定只有 wheel 组的用户能通过该模块的验证。

总结

  1. pam_rootok.so 允许 root 用户无需密码即可通过验证。
  2. pam_wheel.so 要求使用 su 命令时,只有 wheel 组的用户可以进行身份切换。

看来,导致问题发生的原因找到了,就是下面这个配置引起的:

auth required pam_wheel.so group=wheel

按照上面的解释,说明test用户不在wheel组里面。那么,wheel组有什么用呢?

wheel 组的用途

wheel 组通常用于限制某些高级管理操作,比如使用 su 切换用户。在某些系统上,只有 wheel 组中的用户才能使用 su 切换到 root 用户。

要查看系统中哪些用户属于 wheel 组,可以通过以下几种方式来检查:

1. 使用 grep 命令

可以通过查看 /etc/group 文件,找到 wheel 组及其成员:

bash 复制代码
[root@localhost pam.d]# grep '^wheel' /etc/group
wheel:x:10:admin
[root@localhost pam.d]#

这表示 wheel 组(组ID为 10)包含 admin 用户。

2. 使用 getent 命令

getent 命令也可以用来查找 wheel 组的成员:

bash 复制代码
[root@localhost pam.d]# getent group wheel
wheel:x:10:admin
[root@localhost pam.d]#

结果同上面是一样的。

/etc/group 文件中,我们还会看到这种形式:

wheel:x:10:root,user1,user2

上面的结果表示 wheel 组的组名为 wheel,组ID为 10,该组包含的成员有 rootuser1user2

字段解释:
  • wheel : 组名,即表示这个组的名字是 wheel

  • x : 表示密码字段。在大多数现代系统中,组密码功能通常未启用,因此该字段一般设置为 x。密码信息通常存储在 /etc/gshadow 文件中,而不是 /etc/group

  • 10 : 组的 GID (Group ID),每个组都有一个唯一的组标识符。对于 wheel 组,GID 通常是 10,但这可能会根据系统有所不同。

  • root,user1,user2 : 这是 wheel 组中的用户列表。列出的这些用户属于 wheel 组,意味着他们拥有该组的权限。例如,在某些系统中,只有 wheel 组的成员可以使用 su 切换到 root 用户。这段中包含的用户有 rootuser1user2

我们还会看到,有的组后面没跟用户列表,还是拿wheel组来举例吧:

wheel:x:10:

上面的结果意味着目前没有普通用户被添加到 wheel 组,只有 root 用户默认属于该组。

字段解释:
  • wheel : 组名是 wheel
  • x : 表示密码字段。在现代系统中通常未启用组密码,因此这个字段显示为 x
  • 10 : 这是 wheel 组的 GID(组标识符)。
  • 用户列表为空 : 表示当前没有普通用户被分配到 wheel 组,只有 root 用户(系统默认)属于这个组。

好了,到此为止,我们基本上弄清楚了,为什么会出现test用户无法su root的问题。如何解决这个问题呢?

两种解决方法

将那行配置注释掉,但这么操作,将使系统的安全性降低,不推荐。
将test用户增加到wheel组中。

接下来,就介绍下第二种方法。

如何添加用户到 wheel

可以使用以下命令:

bash 复制代码
sudo usermod -aG wheel username

其中,username 是要添加到 wheel 组的用户名,比如我们创建的test账号。

添加成功后,用户将拥有 wheel 组的权限,比如可能能够使用 su 切换到 root

参数解释:

usermod 命令中,-aG 是两个选项的组合,具体解释如下:

-a 选项

-aappend(追加)的意思,表示将用户添加到新的组时不会从其他组中删除。换句话说,它会将用户追加到新的组,同时保持用户在其他组中的现有成员身份。如果不加 -a,用户会从当前所有组中移除,只保留新指定的组。

-G 选项

-Ggroups 的意思,用于指定要将用户添加到的组列表。你可以通过此选项指定多个组,用户将被加入这些组中。

-aG 的组合

-a-G 组合使用时,表示将用户追加到指定的组而不会影响其现有的组成员身份。例如:

所以,上面这条命令的作用是将 username 用户添加到 wheel 组,同时保留该用户在其他组中的成员资格。如果你仅使用 -G 而没有 -a,则会覆盖用户的所有组信息,只保留用户在 wheel 组中的成员身份。

相关推荐
sun03221 小时前
Jenkins的Pipline中有哪些区块,以及其它知识点整理
运维·jenkins
西阳未落1 小时前
Linux(7)——进程(概念篇)
linux·运维·服务器
苒苒鸭2 小时前
nginx 基于IP和用户的访问
linux
领世达检测V133529092492 小时前
智能门锁为什么需要做欧盟网络安全 EN18031 标准检测认证
运维·服务器·网络
樂5022 小时前
Web 服务、 Nfs 服务器以及 Dns 服务器综合实验
运维·服务器
莱茵不哈哈2 小时前
Docker:容器化技术
运维·docker·容器
luckyext3 小时前
SQL SERVER常用聚合函数整理及示例
运维·服务器·数据库·sql·mysql·sqlserver·mssql
滴水之功3 小时前
C语言数据结构-链式栈
linux·c语言·数据结构
liulilittle3 小时前
Ubuntu 18.04 升级内核到 5.X(< 5.10)
linux·运维·服务器·ubuntu
老攀呀3 小时前
CentOS系统上挂载磁盘
linux·运维·centos