应识别UID<1000且Shell非/sbin/nologin或/bin/false的账号,检查空口令和UID=0账号,优先用passwd -l或usermod -s /sbin/nologin禁用,避免手动注释passwd文件,并备份配置、验证效果及定期审计。

禁用不必要系统账号是服务器安全加固最直接有效的手段之一。这些账号大多不用于登录,却长期驻留系统,一旦被利用,可能成为提权跳板或服务滥用入口。关键不是“全删”,而是精准识别、稳妥禁用、持续验证。
识别哪些账号该禁用
重点关注 UID 小于 1000 且 Shell 不是 /sbin/nologin 或 /bin/false 的账户——它们可能具备交互登录能力。常用检查命令:
- 列出高风险账号:`cat /etc/passwd | awk -F: '$3
- 查空口令账号(必须处理):`awk -F: '($2=="")' /etc/shadow`
- 确认仅 root 的 UID 为 0:`awk -F: '($3==0)' /etc/passwd`
典型需关注账号包括:sync、shutdown、halt、adm、lp、mail、operator、games、ftp。其中 sync/shutdown/halt 的 Shell 原本就指向系统二进制,一般保留即可;而 adm、lp 等若未启用对应服务(如打印、邮件),建议禁用。
安全禁用的正确方式
切勿手动注释 /etc/passwd 行——易引发语法错误,且 systemd 不识别。推荐使用标准命令:
- 彻底阻止所有登录:`usermod -s /sbin/nologin username`(推荐首选)
- 锁定密码字段:`passwd -l username`(对密码登录有效,但不影响密钥登录)
- 设为立即过期:`usermod --expiredate 1 username`(系统拒绝任何认证尝试)
- 确认无依赖后删除:`userdel -r username`(删除前务必验证服务是否依赖该账号)
操作前必做与验证要点
任何修改都应建立在可控前提下:
- 先备份核心文件:`cp /etc/passwd /etc/passwd.bak && cp /etc/shadow /etc/shadow.bak`
- 禁用后验证状态:`passwd -S username` —— 显示 L(Locked)表示成功锁定
- 测试登录行为:尝试 SSH 或 su 切换,确认无法获得 shell
- 定期审计:将上述检查命令写入 cron,每周自动扫描新增或异常账号
特别注意的关键账号
以下账号常见但不可随意删除:
- nobody / nobody4 / dbus / polkitd / sshd:属关键服务运行账户,只需设为 /sbin/nologin,严禁删除
- root:唯一 UID=0 账号,禁用需谨慎;更推荐禁用其远程密码登录(修改 /etc/ssh/sshd_config 中 PermitRootLogin no)
- 系统服务账号(如 nginx、mysql):由软件包自动创建,通常已配 nologin,无需额外处理,除非明确确认未使用该服务

















