真正要找的是攻击者留下的行为痕迹,如新用户、异常进程、可疑定时任务、监听端口、SUID文件、日志断层等,不能只依赖易被删改的.bash_history。

History文件被清空或篡改,只是表象;真正要找的,是攻击者操作后留下的“行为痕迹”——比如新用户、异常进程、可疑定时任务、监听端口、SUID文件、日志断层等。不能只盯着.bash_history看,它最容易被删,也最不可信。
先确认History是否真被清理过
攻击者常执行history -c、rm ~/.bash_history或清空文件内容。但系统会留下线索:
- 检查
~/.bash_history文件时间戳:stat ~/.bash_history,若Modify时间远早于Change时间,说明内容被覆盖过 - 对比多个用户家目录:
ls -lt /home/*/\.bash_history 2>/dev/null,看是否只有部分被清空(如仅root或特定账户) - 检查
HISTFILE环境变量是否被临时修改:grep -r "HISTFILE=" /etc/profile* ~/.bash* 2>/dev/null
绕过History查真实操作行为
攻击者删了History,但很多动作无法彻底擦除:
-
查登录记录:
last -a(读/var/log/wtmp)、lastlog(读/var/log/lastlog),看是否有陌生IP、非工作时间、高权限账户登录 -
查认证日志:
grep -i "accepted" /var/log/secure(CentOS/RHEL)或/var/log/auth.log(Debian/Ubuntu),提取成功登录的用户+IP+时间 -
查命令执行痕迹:即使History没了,
/proc/[pid]/cmdline可能保留刚退出进程的真实参数;用ps aux --sort=-start | head -10找最近启动的进程,再进/proc/PID/cmdline查看
重点盯紧History删不掉的持久化证据
这些位置不会因History清理而消失,是排查核心:
-
新增用户与提权痕迹:
awk -F: '$3==0 {print}' /etc/passwd找UID=0的非root账户;getent group sudo,adm,root看哪些用户进了特权组 -
可疑定时任务:
crontab -l(当前用户)、cat /var/spool/cron/* 2>/dev/null、systemctl list-timers --all、ls /etc/cron.* -
异常开机自启:
systemctl list-unit-files --state=enabled、ls /etc/init.d/ /etc/rc*.d/、cat /etc/rc.local 2>/dev/null -
SUID/SGID后门:
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \; 2>/dev/null | grep -v "bin\|sbin",重点关注/tmp、/dev/shm、/var/tmp下带SUID的文件
结合时间线交叉验证
History缺失时,靠时间锚点串起线索:
- 用
ls -lt /var/log/ | head -5看日志文件最后修改时间,若secure或messages突然变旧,可能被攻击者停写或轮转干扰 - 查7天内新建或修改的关键文件:
find /etc /var/spool /root /home -type f -mtime -7 -ls 2>/dev/null | grep -E "(ssh|cron|shadow|passwd)" - 比对进程启动时间与登录时间:
ps -eo pid,uid,lstart,cmd --sort=lstart | tail -10,看高权限进程是否在某次登录后立即启动


















