最安全做法是将su权限委托给wheel组并通过PAM配置实现“仅wheel组成员可su到root”,需确认wheel组存在、添加用户至该组、启用/etc/pam.d/su中pam_wheel.so规则并确保顺序正确,配合sudo替代和审计加固。

在Linux系统中,su命令默认允许任何用户尝试切换到其他用户(包括root),但实际能否成功取决于密码验证和PAM策略。若需限制普通用户使用su切换至root或特定用户,核心在于控制身份验证权限,而非禁用命令本身。最常用、最安全的做法是将su权限委托给wheel组,并通过PAM配置实现“仅wheel组成员可su到root”。
启用wheel组作为su白名单
多数主流发行版(如RHEL/CentOS/Fedora、Rocky/AlmaLinux)默认已预置wheel组,并在PAM配置中预留了相关规则;Ubuntu/Debian系则默认使用sudo机制,su不绑定wheel,需手动调整。
- 确认
wheel组存在:getent group wheel,若无则创建:sudo groupadd wheel - 将授权用户加入wheel组:
sudo usermod -aG wheel username - 确保
/etc/pam.d/su中启用wheel检查(取消注释或添加):auth required pam_wheel.so use_uid
配置PAM规则以强制wheel校验
编辑/etc/pam.d/su,在auth段顶部附近添加或启用以下行:
-
auth [success=ok default=bad] pam_wheel.so group=wheel:表示仅wheel组成员认证成功,其余直接拒绝 - 若希望对非wheel用户静默拒绝(不提示密码),可加
deny选项:pam_wheel.so group=wheel deny - 注意顺序:该规则应放在
pam_rootok.so之后、pam_unix.so之前,否则可能被绕过
禁止非wheel用户su到root(额外加固)
仅靠PAM限制仍允许用户su - username切换到其他普通用户。如需彻底限制仅能su到root且仅限wheel,则需结合命令别名或shell限制,但更推荐以下实用方式:
- 修改
/etc/pam.d/su,在auth段添加:auth [user_unknown=ignore success=ok default=bad] pam_succeed_if.so user = root,再配合wheel规则,实现“只允许wheel成员su到root” - 设置root账户为不可登录状态(
sudo passwd -l root),迫使所有提权走su或sudo路径,便于统一审计 - 配合
sudo替代方案:对日常管理任务,建议用sudo并精细配置/etc/sudoers,比su更易审计和限权
验证与排错要点
配置完成后务必测试,避免锁死管理员访问:
- 用wheel成员用户执行
su -,应能成功;非wheel用户执行时应直接报错“Permission denied”,不提示输入密码 - 检查
journalctl -u systemd-logind或auth.log(Debian/Ubuntu)中PAM拒绝日志 - 常见问题:SELinux启用时可能拦截PAM模块加载,可临时设为permissive模式测试;或检查
pam_wheel.so路径是否存在(通常在/lib64/security/或/lib/security/)










