su 与 pam_wheel
su 的默认行为是:只要知道目标账号的口令,任何人都能切过去。这意味着一个口令泄露的运维账号,就能让人获得 root 会话。pam_wheel 模块把 su 的使用者限定在指定组内,通常就是 wheel(RHEL 系)或 sudo 组(Debian 系),从而把「知道口令」这条路收紧成「知道口令且在授权组内」。这是等保访问控制条款在主机上的常规落点。
基本信息
| 加固项 | su 命令的访问控制 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu,PAM) |
| 风险等级 | 中 |
| 配置文件 | /etc/pam.d/su |
| 依赖 | pam_wheel 模块,随 Linux-PAM 提供 |
典型使用场景
- 权限收敛:只允许授权运维成员使用 su,普通账号无法尝试切换
- 等保整改:访问控制条款要求对特权操作做限制与最小授权
- 事件后加固:发现有人用普通账号长期 su 到 root 后收紧
- 新机器初始化:把 pam_wheel 与 sudoers 一起纳入基线模板
- 人员离场处理:从 wheel 组移除账号即可同步收回 su 权限
核查:当前 pam_wheel 配置
核查:当前 pam_wheel 配置
grep -n pam_wheel /etc/pam.d/su # RHEL 系默认这行是注释状态
grep -rn pam_wheel /etc/pam.d/ 2>/dev/null # 其他服务若引用也要一起看
getent group wheel 2>/dev/null || getent group sudo # 确认授权组成员
groups alice # 确认某个账号的实际组加固:启用限制
加固:启用限制
# /etc/pam.d/su,取消注释或新增(RHEL/CentOS)
auth required pam_wheel.so use_uid
# Debian/Ubuntu 上更明确地写成组名
auth required pam_wheel.so group=wheel把运维成员加入授权组
把运维成员加入授权组
usermod -aG wheel alice # RHEL 系
usermod -aG sudo alice # Debian/Ubuntu 更常见
groups alice # 复核,需要重新登录才生效
cp /etc/pam.d/su /root/pam.su.bak.$(date +%F) # 改动前留副本发行版差异对照
| 发行版 | 常用授权组 | pam.d/su 写法 |
|---|---|---|
| RHEL/CentOS | wheel | auth required pam_wheel.so use_uid |
| Debian/Ubuntu | sudo 或 wheel | auth required pam_wheel.so group=wheel |
| 说明 | 组名不同但机制相同 | 以发行版惯例为准,勿照抄 |
改 PAM 前先备份原文件并保留一个已登录的 root 会话:PAM 配置写错可能直接锁死所有登录路径,而 PAM 的报错信息通常只在认证失败时体现,不易定位。
RHEL 8 及以上更推荐用 authselect(旧版用 authconfig)来管理 PAM 与 faillock、pwquality 等模块,直接编辑 /etc/pam.d/su 在系统升级或执行 authselect 切换时会丢失,需在本机约定中明确采用哪种方式。
与 sudo 策略一起看
限制 su 只是把一条路径关窄。完整的访问控制还要看 sudoers:谁可以提权、是否需要口令、有无免密条目。两者要一起核查,否则限制住 su 却留着 NOPASSWD 的 sudo 条目,等于上一把锁却打开旁边的门。