linux服务器入侵排查需从账号、进程、文件、日志、计划任务、网络六维度交叉验证:查uid=0及远程可登录账户;用rpm-vf校验ps等命令是否被替换;搜近期修改、隐藏文件及自启项;通过last、secure日志和.bash_history关联ip与操作行为。

linux服务器被入侵后,排查不能只靠一两个命令,得从账号、进程、文件、日志、计划任务、网络六个维度交叉验证。很多攻击者会替换系统命令(如ps、netstat)、清空日志、创建隐藏账户,所以必须用可信方式比对、避免依赖已被污染的工具。
查账号:重点看UID=0、远程可登录、sudo权限
攻击者常新建高权限账户或复用弱口令账户。先确认哪些用户能真正登录:
-
awk -F: '$3==0 {print $1}' /etc/passwd—— 找出所有root权限用户(不止root) -
awk -F: '/$1|$6/ {print $1}' /etc/shadow—— 列出密码已设置(即支持远程登录)的账户 -
grep -v '^#|^s*$' /etc/sudoers | grep 'ALL=(ALL)'—— 查看除root外谁有sudo权限 - 对比
/etc/passwd和正常基线,关注新增用户(可用find /etc -name "passwd" -mtime -7快速定位近期改动)
查进程:警惕被替换命令、异常父进程、隐蔽命名
直接运行ps或top可能被劫持。建议:
- 检查关键命令是否被篡改:
rpm -Vf /bin/ps /usr/bin/top /bin/netstat(centos/RHEL);若无rpm数据库或输出异常(如显示SM5….T),说明二进制可能被替换 - 用
ls -la /proc/[0-9]*/exe 2>/dev/NULL | grep -v "no such"查看所有进程的真实路径,留意指向/tmp、/dev/shm或名字带点(如.x、..1)的进程 - 用
ps -eo pid,ppid,comm,args --sort=-pcpu | head -20看CPU占用高的进程及其父进程,异常进程常由init或systemd之外的进程拉起
查文件与启动项:找最近修改、隐藏文件、自启配置
后门程序往往通过定时任务、开机脚本或服务持久化:
- 搜7天内修改的可疑文件:
find / -type f -mtime -7 -name "*php*" -o -name "*sh" -o -name "*.so" 2>/dev/null | head -30 - 查所有隐藏文件和目录:
find / -name ".*" -type d -o -name ".*" -type f 2>/dev/null | grep -E "/var|/tmp|/dev/shm" - 检查各层级定时任务:
cat /etc/crontab; for u in $(cut -d: -f1 /etc/passwd); do crontab -u $u -l 2>/dev/null; done - 检查开机自启项:
systemctl list-unit-files --type=service | grep enabled; ls /etc/init.d/ | grep -E "(ssh|cron|nginx)"; cat /etc/rc.local 2>/dev/null
查日志:绕过清空、关联登录IP与操作行为
黑客常删/var/log/secure、/var/log/wtmp,但部分痕迹仍可恢复:
- 用
last -ai看最近登录(含IP),即使wtmp被删,lastb(失败记录)或btmp有时还在 - 查成功登录:
grep "Accepted" /var/log/secure* 2>/dev/null | tail -50;失败登录:grep "Failed|Invalid" /var/log/secure* 2>/dev/null | tail -50 - 检查命令执行痕迹:
cat /root/.bash_history,再遍历/home/*/.bash_history;注意wget、curl、nc、python -c等高频恶意调用 - 若日志全空,检查
ausearch -m all -ts recent(需auditd开启),或用dmesg | tail -100看内核级异常加载