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 组中的成员身份。

相关推荐
轩轶子34 分钟前
【C-项目】网盘(一期,无限进程版)
服务器·c语言·网络
S+叮当猫2 小时前
第五部分:2---信号的介绍、产生、处理
linux·运维·服务器
东城绝神3 小时前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署mongodb 7.0.14容器版副本集群》
linux·运维·mongodb·架构
WZF-Sang5 小时前
Linux权限理解【Shell的理解】【linux权限的概念、管理、切换】【粘滞位理解】
linux·运维·服务器·开发语言·学习
小橞5 小时前
Linux搭建简易路由转发
linux·运维·服务器
嵌入式DZC5 小时前
搭建内网文件服务器(FTP),以及实现内网Gitee
运维·服务器
robot_大菜鸟5 小时前
linux-L7-linux 查看json文件
linux·运维
Flying_Fish_roe5 小时前
linux-网络管理-网络抓包
linux·网络·php
小技与小术7 小时前
lvs-nat模式实验详解
linux·运维·服务器·网络·lvs
FreeBuf_7 小时前
SSHamble:一款针对SSH技术安全的研究与分析工具
运维·安全·ssh