首页/安全/取证与溯源速查/服务账号滥用核查
Linux 取证135 条

服务账号滥用核查

服务账号通常被设置为不可登录;一旦它们出现在交互会话或拥有家目录 shell,说明存在被借用的迹象。

取证与溯源速查安全更新于 2026-10-13

服务账号本不应交互登录

为运行服务而创建的账号(Nginx、Tomcat、数据库、消息队列等对应的账号)通常把登录 shell 设为不可登录的程序,或者根本不设家目录,目的就是防止被当作人类账号使用。一旦这类账号出现在交互会话记录里,或者它的家目录里突然出现文件,就说明这个账号被借用了——借用的主体可能是运维脚本,也可能是攻击者。

切换用户不产生登录记录

需要特别注意:通过 sudo 或 su 切换到服务账号执行命令,不会在登录记录里留下新的登录条目,只会出现在 sudo 日志或进程审计里。因此「登录记录里没有这个账号」不能证明它没被使用,判定必须结合 sudo 日志、进程创建记录与文件时间。

基本信息

适用平台Linux(/etc/passwd 的 shell 字段与登录记录)
基线特征shell 字段为 /usr/sbin/nologin、/bin/false 等不可登录程序
异常特征出现交互登录、家目录被写入、SSH 密钥被新增
查看记录last、lastlog、认证日志中的会话记录
切换场景sudo -u 与 su 记录在 sudo 日志或审计日志中

典型使用场景

  • 提权排查:确认 Web 或数据库账号是否被用来执行命令
  • 核查后门账号:检查新增账号的 shell 与家目录是否符合基线
  • 排查横向移动:服务账号出现在远程登录记录里值得深查
  • 清理与恢复:处置后确认账号的 shell 与密钥恢复基线状态
  • 建立基线清单:记录各服务账号的预期属性便于日后比对

核查账号与登录

核查账号与登录
# 找出 shell 字段不是不可登录程序的账号(需人工确认合理性)
awk -F: '$7 !~ /(nologin|false|sync|shutdown|halt)$/ {print $1, $7}' /etc/passwd | head -20

# 服务账号是否出现在登录记录里
last -F | grep -E 'www-data|nginx|tomcat|mysql' | head
lastlog | head -20

# 家目录与授权文件是否被改动
ls -la /var/www /var/lib/mysql /home 2>/dev/null | head -20
find /var/www -name 'authorized_keys' -o -name 'id_rsa*' 2>/dev/null | head

# 通过 sudo 切换的记录(不会出现在 last 里)
grep -E 'sudo.*(www-data|nginx)' /var/log/auth.log 2>/dev/null | tail -20

异常特征与判断

特征含义核实方式
shell 被改为可登录账号可被直接登录与部署文档和变更记录对照
出现交互登录记录账号被当人类账号使用查来源地址与操作内容
新增 SSH 密钥建立了持久免密通道检查密钥文件时间与内容
家目录出现可执行文件可能被用于落地载荷核对文件来源与时间窗
属于高权限组权限被提升检查组成员变更时间
部分应用确实需要可登录 shell 的服务账号(例如某些批处理与运维脚本),判定异常前先查部署文档与现有基线,避免把正常设计当成入侵。
服务账号的密码字段也值得看:能通过密码认证的服务账号风险高于仅用不可登录 shell 的账号,结合认证日志判断是否有实际登录尝试。

易错点

  • 只看 last 就下结论:sudo 切换不产生登录记录,会漏掉大量使用场景
  • 把可登录 shell 一律判为异常:部分应用设计如此,需要基线对照
  • 忽略家目录与密钥文件:持久化通道常建立在这里
  • 不检查组成员变更:账号权限提升同样危险,且不易察觉
  • 清理时不记录原始状态:事后无法说明账号属性被改动过

数据来源与参考

  • man 5 passwd(shell 字段语义)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌