首页/安全/安全加固速查/移除 PAM nullok(空口令即登录)
口令与认证策略55 条

移除 PAM nullok(空口令即登录)

nullok 允许空口令账号直接登录;审计这种“免检通道”要用 grep 全量扫 pam.d,发现即移除并清空对应账号。

安全加固速查安全更新于 2026-10-13

nullok 是一条免检通道

PAM 的 pam_unix 模块带 nullok 参数时,允许“口令字段为空”的账号直接用空口令登录;nullok_secure 只把它限定在 /etc/securetty 列出的终端上,风险稍低但依然存在。这条通道的麻烦在于它不受口令策略约束:只要账号口令字段被清空,任何密码复杂度、锁定策略都形同虚设。审计时要全量扫描 /etc/pam.d 下的每个配置文件,再用 shadow 交叉验证有没有真的存在空口令账号。

基本信息

加固项封堵空口令登录通道
适用平台Linux(使用 PAM 的发行版,RHEL 系与 Debian 系均适用)
权限要求root
达标判据/etc/pam.d 下无 nullok / nullok_secure;shadow 无空口令账号
关联文件/etc/pam.d/system-auth、password-auth、common-auth 等

典型使用场景

  • 口令策略专项审计时作为“绕过通道”核查项
  • 应急响应中发现可疑账号,确认是否靠空口令登录
  • 从旧系统迁移账号后清理遗留的空口令设置
  • 发行版升级或 PAM 配置被第三方软件改写后的复核
  • 编写自动化基线脚本时作为一条独立的检查规则

全量扫描

全量扫描
grep -rn 'nullok\|nullok_secure' /etc/pam.d/    # 找出所有生效位置
awk -F: '($2=="") {print $1}' /etc/shadow          # 找出真正的空口令账号
passwd -S user1                                      # 单账号复核:NP 表示空口令
cp -a /etc/pam.d /root/pam.d.bak-$(date +%F)         # 改前先备份 PAM 目录

处置

处置
passwd -l baduser            # 立即锁定可疑账号
usermod -p '!' baduser        # 等效:把口令字段置为锁定值
# 编辑 pam.d 中对应行,删除 nullok / nullok_secure 参数后保存
sed -i 's/ nullok_secure//; s/ nullok//' /etc/pam.d/system-auth   # 示例,改后必须逐条确认
# 保持当前会话不退出,另开一个新会话验证正常账号仍能登录

常见参数含义

参数作用处置建议
nullok允许空口令账号登录直接移除
nullok_secure仅在安全终端列表内允许空口令一并移除,风险等级略降但不豁免
pam_unix.so本地账号口令验证模块参数改动影响面大,改前备份、改后验新会话
shadow 第 2 列为空账号确实没有口令先锁定再排查是否为入侵后门
空口令账号往往不是配置疏忽,而是攻击者留的后门:发现后应当先锁定账号、保留现场,再排查登录记录与计划任务,而不是删掉账号就结案。删号会销毁关键证据,也无法确认攻击者是否还有别的入口。
改 /etc/pam.d 属于高风险操作:配置写错会让所有人(包括 root)都登不进来。标准做法是先备份目录、修改时保留当前已登录会话不要退出、用另一个会话验证正常账号仍能登录,确认无误再收尾。

易错点

  • sed 批量改 PAM 文件时匹配过宽,把 pam_unix.so 行改坏导致全系统无法认证,必须限定替换内容并复读文件确认
  • 只清理 pam.d 不管账号:空口令账号仍在,换一条认证路径就又能进
  • 把 nullok 当成无害优化随手加上,等于给所有账号开了一条不受策略管辖的后门
  • 在只剩一个远程会话时修改 PAM,验证失败就没有退路,应先确认带外或控制台可用

数据来源与参考

  • man 8 pam_unix(nullok)
  • CIS Benchmark:空口令核查条目

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌