linux服务器可安全清理的系统账号包括games、news、uucp、gopher等低uid非登录账号,前提是确认无进程、服务及配置依赖;mail/postfix需按实际启用情况判断;nobody/nogroup建议保留。

服务器账户安全的核心不是“删得干净”,而是“留得必要”。最小化安装只是起点,真正关键的是识别哪些系统账号实际参与服务运行、哪些纯属历史残留——删错一个,可能让 SSH 启动失败;漏掉一个,可能成为攻击者提权跳板。
哪些系统账号通常可安全清理
Linux 默认创建的低 UID(
- games、news、uucp、gopher:对应游戏服务、新闻组、UUCP 邮件转发、Gopher 协议,现代发行版基本不启用,且无进程、服务、配置依赖时可删
-
lp、sync、shutdown、halt:默认 shell 为
/usr/sbin/nologin或/bin/false,若未启用打印(CUPS)、未在 crontab 或脚本中显式调用,一般可删 - mail / postfix:需确认是否真在运行本地邮件队列(如 cron 日志投递、logwatch 发送)。若完全不用邮件功能,可删;否则保留并限制权限
nobody 和 nogroup 建议保留——NFS、squid、nginx worker 等常降权至此运行,删除易引发权限拒绝错误。
删之前必须验证的三件事
不能只看 /etc/passwd 里有没有这一行,要查它是否“活着”:
-
进程归属:运行
ps -eo user,comm | grep ^lp,确认无以该用户启动的进程;再用pkill -u lp && pgrep -u lp验证是否清空 -
服务依赖:检查
systemctl cat sshd | grep -E "^(User|Group)="<code>,以及 <code>/etc/group中该用户是否为某组主组(grep ':lp:' /etc/group) -
配置硬编码:搜索
/etc/下配置文件(如 Nginx 的user指令、PostgreSQL 的pg_hba.conf),避免误删仍在被引用的账号
标准清理流程(顺序不能乱)
安全清理不是 userdel 一条命令的事,必须按步骤闭环:
-
停服务:如
systemctl stop lpd(若启用) -
清残留:确认无进程、无 crontab(
crontab -u lp -l 2>/dev/null)、无配置引用 -
删用户:先执行
userdel lp(不加-r,保留家目录便于回滚);确认无异常后再补userdel -r lp -
删组:运行
groupdel lp;若失败,说明仍有用户主组是它,用grep lp /etc/passwd定位并修正 -
验证:重启相关服务(如 SSH)、检查日志(
journalctl -u sshd -n 30)、确认无No such process类报错
配套加固建议(不止于删账号)
账号清理需与整体最小化策略协同:
- 禁用非必要服务:
systemctl disable --now avahi-daemon cups rpcbind bluetooth - 设置默认目标为
multi-user.target,避免图形服务意外启用 - 对高风险服务(如 sshd)启用密钥认证、禁用密码登录、限制监听地址
- 定期运行
systemctl list-unit-files --state=enabled --type=service+ss -tlnp联合审计,形成轻量巡检习惯











