Linux 服务器日志取证

Linux日志还原行为

服务器日志可以还原系统被使用、被攻击、被登录和被修改的过程。

在比赛中,特别是取证、溯源类比赛,日志题常见问题包括:

攻击者 IP 是什么?
SSH 登录成功时间是什么?
哪个用户执行了 sudo?
WebShell 上传时间是什么?
访问后台的 IP 是什么?
异常请求路径是什么?

一、系统日志位置

Debian / Ubuntu 常见:

/var/log/auth.log
/var/log/syslog
/var/log/kern.log
/var/log/dpkg.log

CentOS / RedHat 常见:

/var/log/secure
/var/log/messages
/var/log/yum.log

systemd journal:

/var/log/journal/

二、SSH 登录日志

Ubuntu:

grep -i "Accepted" /var/log/auth.log
grep -i "Failed password" /var/log/auth.log
grep -i "session opened" /var/log/auth.log

CentOS:

grep -i "Accepted" /var/log/secure
grep -i "Failed password" /var/log/secure

重点字段:

登录时间
用户名
来源 IP
认证方式

提取登录成功 IP:

grep -i "Accepted" /var/log/auth.log | awk '{for(i=1;i<=NF;i++) if($i=="from") print $(i+1)}' | sort | uniq -c | sort -nr

三、sudo 日志

grep -i "sudo" /var/log/auth.log

关注:

执行用户
执行命令
执行时间
工作目录

提取 sudo 命令:

grep -i "COMMAND=" /var/log/auth.log

四、Web 日志

Nginx:

/var/log/nginx/access.log
/var/log/nginx/error.log

Apache:

/var/log/apache2/access.log
/var/log/apache2/error.log
/var/log/httpd/access_log
/var/log/httpd/error_log

搜索可疑请求:

grep -Rina "upload\|shell\|cmd\|eval\|base64\|select\|union\|../" /var/log/nginx /var/log/apache2 2>/dev/null

提取访问最多的 IP:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

提取访问路径:

awk -F\" '{print $2}' /var/log/nginx/access.log | awk '{print $2}' | sort | uniq -c | sort -nr | head -50

五、压缩日志

日志可能被轮转压缩:

auth.log.1
auth.log.2.gz
access.log.1
access.log.2.gz

读取 gzip 日志:

zgrep -i "Accepted" /var/log/auth.log.*.gz
zgrep -i "shell\|upload\|cmd" /var/log/nginx/*.gz

六、命令历史

常见历史文件:

/root/.bash_history
/home/*/.bash_history
/home/*/.zsh_history

查看:

cat /root/.bash_history
cat /home/*/.bash_history

搜索危险命令:

grep -Rina "wget\|curl\|chmod\|nc\|bash -i\|python\|perl\|base64\|rm -rf" /root /home 2>/dev/null

七、定时任务

系统级:

cat /etc/crontab
ls -lah /etc/cron.*

用户级:

crontab -l
ls -lah /var/spool/cron/
ls -lah /var/spool/cron/crontabs/

八、时间线分析

可以提取最近修改文件:

find /var/www /www/wwwroot -type f -printf "%TY-%Tm-%Td %TH:%TM:%TS %p\n" 2>/dev/null | sort

也可以找最近 7 天修改文件:

find /var/www /www/wwwroot -type f -mtime -7 2>/dev/null

查找某时间之后修改的文件:

find /var/www /www/wwwroot -type f -newermt "2026-05-01 00:00:00" 2>/dev/null

九、服务日志

查看 systemd 服务:

systemctl list-units --type=service

查看某服务日志:

journalctl -u nginx
journalctl -u ssh
journalctl -u docker

离线 journal 读取:

journalctl --directory=/mnt/var/log/journal
journalctl --directory=/mnt/var/log/journal -u ssh

十、总结

日志分析不要只看一个文件,应交叉验证:

auth.log / secure       谁登录了服务器
syslog / messages       服务和系统事件
access.log              谁访问了网站
error.log               程序异常和路径泄露
history                 用户执行过什么命令
crontab                 是否存在持久化任务
journalctl              systemd 服务日志