清理系统中的僵尸账号,应建立“识别、处置、验证”三步闭环流程:先识别空口令账号、UID=0的非root账号,以及90天未登录的长期闲置账号;处置阶段优先通过passwd -l执行锁定,删除操作则谨慎使用userdel -r;完成后还要重新检查系统文件与服务配置,并建立lastlog定期巡检机制,提升系统安全加固效果。

清理长期未使用的僵尸账号,关键在于完成“识别 + 锁定/删除 + 验证”的完整闭环,既不能只删除不排查,也不能只发现问题却不处理。
识别系统中潜在的僵尸账号
所谓僵尸账号,通常是指创建后长期未登录、持续无活动,或员工离职后遗留却未及时注销的系统账户。实际排查时,建议重点关注以下三类高风险账号:
- 空口令账号:执行
awk -F: '($2=="")' /etc/shadow,命令输出的即为无密码账户。这类账号属于典型高危项,发现后应立即处理,避免被直接利用; - UID为0的非root账号:执行
awk -F: '($3==0)' /etc/passwd,确认结果中是否仅存在root:x:0:0:一行。若出现其他UID=0用户(如admin:x:0:0:),说明存在超级权限风险,必须立刻核查并清理; - 长期未登录账号:使用
lastlog -b 90查询90天内未登录的用户列表,再结合企业运维规范(例如账号连续90天未使用即冻结),筛选出需要清理或停用的对象。
安全处置僵尸账号的两种方式
对于已经确认无业务用途的账号,通常建议优先锁定,而不是直接删除,这样可以保留必要的审计信息和历史痕迹:
- 锁定账号(推荐):执行
passwd -l username,该命令会在/etc/shadow中的密码字段前添加!,使该账号无法继续登录,同时保留家目录、操作记录及相关配置,便于后续审计; - 彻底删除(谨慎):执行
userdel -r username,其中-r会一并删除家目录和邮件池。该方式仅适用于已经确认不存在关联服务、计划任务、SSH密钥、数据库授权等依赖关系的账号; - 注意:不要直接使用
userdel username(不带-r),否则可能遗留家目录,后续若创建同名账号,容易产生目录复用和权限混淆等安全隐患。
验证清理效果与防止反弹
账号清理完成后,必须进行二次核查和交叉验证,防止遗漏、误删或权限残留:
- 再次运行
awk -F: '($2=="")' /etc/shadow和awk -F: '($3==0)' /etc/passwd,确认结果为空,确保空口令账号和异常UID=0账号已被彻底处理; - 检查关键服务配置文件,例如
/etc/sudoers、/etc/ssh/sshd_config以及应用侧白名单,确认不存在僵尸账号遗留的授权配置或访问入口; - 建立常态化巡检机制:将
lastlog -b 60 | grep -v "Never"加入每日安全巡检脚本,并结合企业AD/LDAP账号生命周期管理策略,实现自动预警与人工复核联动,减少僵尸账号再次出现的概率。
从系统安全加固角度看,清理僵尸账号本身并不复杂,难点在于这项工作常常被忽略。真正有效的做法,不是只进行一次性清理,而是通过制度与技术手段,让僵尸账号“难以产生、无法长期存活、发现后能够及时清除”。
