直接禁止普通用户用su切换root只需修改/etc/pam.d/su启用pam_wheel.so校验并设置/etc/login.defs中su_wheel_only yes,二者缺一不可,wheel组成员方可su,root不受限。

直接禁止普通用户用 su 切换到 root,靠改两个文件就行:/etc/pam.d/su 和 /etc/login.defs。不改 SSH、不删 root 密码、也不依赖 sudo 配置——这是最干净、最底层的控制方式。
修改 /etc/pam.d/su 启用 wheel 组校验
这个文件决定 su 命令的身份验证逻辑。默认它放行所有用户,必须显式启用 pam_wheel.so 限制。
- 打开
/etc/pam.d/su,找到这行(通常在开头附近):# auth required pam_wheel.so use_uid - 去掉开头的
#取消注释,保存 - 确保这一行在所有
auth规则中靠前,否则可能被后续规则绕过 - 如果系统里没有
wheel组,usermod -aG wheel username之前会失败,但不会报错——只是限制立即生效且无人能过
设置 SU_WHEEL_ONLY yes 防止 bypass
/etc/login.defs 里的 SU_WHEEL_ONLY 是个兜底开关。只开 PAM 不够,有些发行版(如 RHEL/CentOS)会忽略 PAM 的 required 而优先读这个标志。
- 用
echo "SU_WHEEL_ONLY yes" >> /etc/login.defs追加(或手动编辑) - 注意:不能写成
SU_WHEEL_ONLY = yes或带引号,必须是空格分隔的纯关键字+值 - 该配置对
su生效,但不影响sudo或su -c等其他提权路径
验证和常见失败现象
改完立刻生效,不用重启服务,但容易卡在几个细节上:
- 普通用户执行
su -时提示Permission denied,不是密码错——说明限制已起作用 - 如果提示
su: Authentication failure,可能是 PAM 行写错了位置(比如放在account段而非auth段),或拼写错误(pam_wheel写成pam_well) -
root用户自己执行su -不受影响,因为pam_rootok.so默认放行 uid=0 - 日志看
/var/log/secure,搜su:和pam_wheel能确认是否触发校验
真正要小心的是:wheel 组本身没权限含义,只是个“准入名单”。把人加进 wheel 组(usermod -aG wheel alice)后,她就能 su,但你得同步管理好这个组成员——漏加或误加,安全边界就塌了。











