禁用所有空口令账号是预防未授权访问最基础有效的手段;通过awk命令识别/etc/shadow中第二字段为空的账户,用usermod -l锁定而非删除,同时在新建用户、pam配置、login.defs及巡检机制中全面加固。

禁用所有空口令账号是预防未授权访问最基础也最有效的手段之一。空口令意味着无需密码即可登录,相当于给攻击者留了一扇敞开的门——无论系统部署在内网还是云环境,只要存在这类账户,就可能被自动化扫描工具快速识别并利用。
快速识别空口令账号
Linux 系统中,空口令信息存储在 /etc/shadow 文件第二字段,为空字符串即表示无密码。执行以下命令可精准定位:
- awk -F: '($2 == "") {print $1}' /etc/shadow —— 输出所有空口令用户名
- awk -F: 'length($2) == 0 {print $1}' /etc/shadow —— 功能等效,兼容性更广
若命令无输出,说明当前无空口令账号;若有结果(如 test、backup),需立即处置。
统一禁用而非删除
对识别出的空口令账号,优先选择锁定而非直接删除,避免影响依赖该账号的系统服务或脚本:
-
passwd -l —— 锁定账号(在 shadow 中密码字段前加
!) - usermod -L —— 效果相同,推荐使用
- 不建议直接
userdel,除非确认该账号完全无业务关联
锁定后,即使攻击者知道用户名,也无法通过空口令登录,且原有家目录、配置和权限保留,便于后续审计或恢复。
加固源头:防止新空口令产生
仅清理现有空口令不够,必须阻断新增路径:
- 新建用户时强制设密:useradd -m -s /bin/bash username && passwd username,禁止跳过密码设置
- 禁用
passwd的空密码允许机制:检查 /etc/pam.d/common-password 中是否含obscure或nullok参数,移除或注释掉permit null passwords类配置 - 结合 login.defs 设置默认策略:
ENCRYPT_METHOD SHA512+SHA_CRYPT_MIN_ROUNDS 5000,提升密码哈希强度
纳入常态化巡检机制
空口令风险具有隐蔽性和复发性,需固化为运维流程:
- 将空口令检查写入定时任务,例如每周日凌晨执行并邮件告警:
0 0 * * 0 awk -F: '($2=="") {print $1}' /etc/shadow | mail -s "空口令账号告警" admin@example.com - 在 CI/CD 流水线或镜像构建阶段加入安全扫描(如 Lynis、CIS Benchmark 工具),自动拦截含空口令的镜像发布
- 与账号生命周期管理联动:员工离职、系统下线时,同步核查并锁定相关账号,避免“僵尸空口令”残留











