首页/安全/安全加固速查/系统账号口令锁定(! 或 * 前缀)
主机加固基线90 条

系统账号口令锁定(! 或 * 前缀)

除 shell 收敛外,系统账号还应在 shadow 中处于锁定状态(口令字段以 ! 或 * 开头),确保即使存在其他认证路径也无法用口令登录。

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

为什么锁系统账号

bin、daemon、adm、lp、games 这类账号只归守护进程与服务使用,不该有人拿它登录。收敛要同时做两件事:把登录 shell 改成 /sbin/nologin 或 /bin/false,堵掉交互会话;把 /etc/shadow 的口令字段锁成 ! 或 * 开头,让口令认证彻底不可用。只做一件都留缺口——只锁口令,密钥登录照样能进;只改 shell,su 或服务复用账号等路径仍可能被口令爆破命中。

基本信息

加固项系统账号口令锁定与登录 shell 收敛
适用平台Linux(RHEL/CentOS、Debian/Ubuntu)
权限要求root
达标判据/etc/shadow 第 2 字段以 ! 或 * 开头
基线对应CIS Linux Benchmark:system accounts are secured

典型使用场景

  • 新系统做基线核查,先清掉仍可登录的系统账号
  • 服务账号从共享账号拆成专用账号后,回收旧账号的登录能力
  • 等保或内部审计前逐项确认“禁止口令登录”类控制点
  • 入侵排查时确认攻击者没有给内置账号种上口令
  • 卸载软件后清理遗留的数据库、中间件系统账号

核查:谁还能用口令

核查:谁还能用口令
awk -F: '$1 != "root" && $2 ~ /^\$/ { print $1 }' /etc/shadow   # 仍持有真实哈希的系统账号
passwd -S sysuser   # 单账号状态:L/LK 已锁  NP 空口令  P/PS 可用口令
awk -F: '($3 < 1000) && ($1 != "root") { print $1, $7 }' /etc/passwd   # 顺带看这些账号的 shell

处置:锁定并收 shell

处置:锁定并收 shell
usermod -L sysuser                # 在现有哈希前加 !,不动 shell
passwd -l sysuser                 # 等效做法,二选一即可
usermod -s /sbin/nologin sysuser  # 禁止交互登录
passwd -S sysuser                 # 复核:期望输出 L 或 LK

shadow 口令字段读法

字段内容含义处置
$6$... / $y$...存在可验证的口令哈希按业务确认后锁定或清空
! 或 !$6$...已锁定,哈希被禁用达标
*从未设口令或占位符达标,同属不可口令登录
空值(::)无口令即可登录高危,立刻修复
系统账号的边界由 UID 决定:RHEL 系与 Debian 系默认 UID_MIN=1000,所以 UID 小于 1000 且非 root 的账号基本就是系统账号。若环境改过 UID_MIN,核查范围要按 /etc/login.defs 的实际值来定,避免漏项或误伤业务账号。
usermod -L 只是给现有哈希加 ! 前缀:账号原本就无口令(!! 或 *)时语义不同,别把“已锁定”当成“空口令已修”。改完必须用 passwd -S 逐条复核,而不是看命令有没有报错。

易错点

  • 锁定后仍留着 /bin/bash 的 shell:密钥登录、su 等路径照常可用,两层必须同时收敛
  • 直接手改或 sed 批量改 /etc/shadow 第 2 字段,容易写坏文件导致无人能登录;优先用 usermod -L、passwd -l
  • 把业务依赖的服务账号一起锁死会让服务起不来,动手前先确认账号是否被 cron、守护进程或数据库使用
  • 长期不用但仍可登录的账号是典型风险面,处置时顺手记录用途,避免半年后既没人敢删也没人敢用

数据来源与参考

  • Red Hat 文档:usermod(8)、passwd(1) 手册
  • CIS Linux Benchmark:Ensure system accounts are non-login

相关工具

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