精准识别空密码账户需执行awk -f: '($2=="")' /etc/shadow,立即用passwd -l和usermod -s /sbin/nologin禁用;再启用pam失败锁定、禁用root ssh登录,并用chattr +i锁定关键文件。

Linux 下封堵弱口令爆破通道,核心不在“深度清洗”这种模糊表述,而在于精准识别空密码账户、立即禁用、并切断其被利用的路径。空密码账户是攻击者最常利用的突破口之一,尤其在未加固的系统中,它们相当于敞开的后门。
以下操作聚焦实效性,每一步都对应真实攻击链中的关键环节:
精准定位所有空密码账户
空密码体现在 /etc/shadow 第二字段为空(即两个连续冒号 ::),不是 ! 或 *(那是已锁定账户)。执行:
awk -F: '($2 == "")' /etc/shadow
输出示例:
testuser::19200:0:99999:7:::
该行表示 testuser 密码字段为空,可无密登录——这是高危项,必须处理。
立即禁用,而非仅“清理”
删除账户虽彻底,但可能影响服务依赖;更稳妥的做法是强制加锁 + 禁止登录 Shell:
- 锁定密码(在 shadow 中第二字段前加
!):passwd -l testuser
- 同时确保其 Shell 为
/sbin/nologin(防止通过其他方式绕过):usermod -s /sbin/nologin testuser
这两步组合后,即使密码为空,也无法交互式登录,也阻断了
su、ssh等常规入口。
阻断自动化爆破的底层条件
空密码只是表象,爆破能成功往往因系统未启用基础防护:
-
启用 PAM 登录失败锁定(防暴力尝试):
编辑/etc/pam.d/common-auth(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS),添加:auth [default=die] pam_faillock.so authfail deny=3 unlock_time=300 auth [default=die] pam_faillock.so authsucc deny=3 unlock_time=300
连续输错 3 次即锁定 5 分钟,直接让脚本爆破失效。
-
禁用 root 直接 SSH 登录(避免空密码 root 被远程利用):
修改/etc/ssh/sshd_config:PermitRootLogin no
执行
systemctl restart sshd生效。
验证与固化防护
- 再次运行
awk -F: '($2 == "")' /etc/shadow,确认无输出; - 检查关键账户是否仍具备 root 权限(UID=0):
awk -F: '($3 == 0)' /etc/passwd
仅允许
root存在,其余 UID=0 账户属严重异常; - 锁定账号配置文件防篡改(防止攻击者回写空密码):
chattr +i /etc/passwd /etc/shadow
(操作前务必确认你有
chattr -i的能力,否则将无法后续管理)
不复杂但容易忽略。











