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

相关推荐
薛定谔的猫198219 小时前
RAG(二)基于 LangChain+FAISS + 通义千问搭建轻量级 RAG 检索增强生成系统
运维·服务器·langchain
米高梅狮子19 小时前
4. Linux 进程调度管理
linux·运维·服务器
再创世纪20 小时前
让USB打印机变网络打印机,秀才USB打印服务器
linux·运维·网络
fengyehongWorld21 小时前
Linux ssh端口转发
linux·ssh
昨夜见军贴061621 小时前
IACheck AI审核如何实现自动化来料证书报告审核,全面提升生产效率与合规水平
运维·人工智能·自动化
知识分享小能手1 天前
Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04中的Shell编程详细知识点(含案例代码)(17)
linux·学习·ubuntu
浩子智控1 天前
电子产品设计企业知识管理
运维·服务器·eclipse·系统安全·硬件工程
以太浮标1 天前
华为eNSP模拟器综合实验之-BGP路由协议的配置解析
服务器·开发语言·php
Xの哲學1 天前
深入解析 Linux systemd: 现代初始化系统的设计与实现
linux·服务器·网络·算法·边缘计算
宠..1 天前
优化文件结构
java·服务器·开发语言·前端·c++·qt