You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 7中以root执行su user为何要求普通用户密码?

Root切换普通用户需输入密码的排查与修复方案

我碰到过不少类似的场景,这种root用su user需要输密码的情况,90%以上都是PAM(Pluggable Authentication Modules)配置异常导致的,毕竟su命令的验证逻辑完全由/etc/pam.d/su文件控制。结合你提到的其他同版本机器正常的情况,咱们一步步来排查:

1. 核心排查:检查/etc/pam.d/su的关键配置项

正常情况下,root切换普通用户无需密码,依赖的是这行配置:

auth sufficient pam_rootok.so

这行的作用是:只要当前用户是root,就直接通过身份验证,跳过后续的密码校验步骤。

你可以对比正常机器的/etc/pam.d/su文件,看看你的机器是不是出现了以下情况:

  • 这行被注释掉了(前面加了#)
  • 这行被删除了
  • 这行的位置在auth include system-auth之后(顺序很重要,PAM是按从上到下的顺序执行规则的,如果先执行了system-auth里的密码验证,就会触发密码要求)

举个正常的/etc/pam.d/su示例:

#%PAM-1.0
auth sufficient pam_rootok.so

Uncomment the following line to implicitly trust users in the "wheel" group.

#auth sufficient pam_wheel.so trust use_uid

Uncomment the following line to require a user to be in the "wheel" group.

#auth required pam_wheel.so use_uid
auth include system-auth
account include system-auth
session include system-auth

如果你的文件里没有auth sufficient pam_rootok.so或者它被注释了,把它恢复并放在auth include system-auth之前,问题应该就能解决。

2. 检查PAM包含的额外配置文件

如果/etc/pam.d/su里有@include system-auth或者@include password-auth这类语句,还要检查这些被包含的文件(比如/etc/pam.d/system-auth)里是否有强制验证的规则,比如:

auth required pam_unix.so

不过正常情况下,pam_rootok.so的sufficient优先级更高,会跳过后续验证,但如果pam_rootok.so的规则失效,就会走到这里触发密码要求。

3. 次要排查:su命令的权限与版本

虽然你说用的是仓库提供的版本,但还是可以简单确认一下:

  • 检查su的setuid位是否正常:ls -l /bin/su,输出应该是-rwsr-xr-x(s位代表setuid,确保su能以root权限执行验证逻辑)
  • 对比版本:su --version,看看和正常机器的版本是否一致

4. 排除用户账号异常

最后可以快速检查普通用户的账号状态,确保没有异常:

  • 查看用户的shadow条目:cat /etc/shadow | grep username,确认没有!或*之类的锁定标记(如果锁定的话会切换失败,而不是要求密码)
  • 确认用户的shell是可登录的:cat /etc/passwd | grep username,比如/bin/bash,不是/sbin/nologin

按照这个流程排查,基本能定位到问题所在,最常见的就是pam_rootok.so那行配置的问题,恢复后就能正常无密码切换了。

内容的提问来源于stack exchange,提问作者Abhik Bose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:43:55