0. 通用排查原则和日志表格
- 确定现象:确定是性能问题、磁盘满、服务挂掉、疑似入侵。
- 收集证据:保存日志片段、采集性能状态。
- 定位问题:确定是 CPU、MEM、IO、磁盘、配置或安全。
- 解决验证:修改配置、重启服务、应用安全措施。
- 完成记录:保存排查记录。
日志类别 |
日志文件/目录 |
说明 |
典型发行版 |
系统日志 |
/var/log/syslog |
系统事件和服务日志(多信息汇总) |
Debian/Ubuntu |
|
/var/log/messages |
系统和内核信息日志 |
RHEL/CentOS/Fedora |
|
/var/log/dmesg |
内核环缓冲区日志,启动硬件信息 |
通用 |
|
/var/log/kern.log |
内核日志 |
Debian/Ubuntu |
|
/var/log/boot.log |
启动过程日志 |
通用 |
|
/var/log/cron |
定时任务日志 |
通用 |
|
/var/log/lastlog |
所有用户的最后登录时间 |
通用 |
|
/var/log/wtmp |
登录/注销记录,last 命令查看 |
通用 |
|
/var/log/btmp |
失败的登录尝试记录,lastb 查看 |
通用 |
安全认证日志 |
/var/log/auth.log |
认证、登录、sudo操作日志 |
Debian/Ubuntu |
|
/var/log/secure |
认证、登录、sudo操作日志 |
RHEL/CentOS/Fedora |
审计日志 |
/var/log/audit/audit.log |
auditd 审计日志,系统调用、安全事件 |
需要安装 auditd |
系统服务 |
journalctl (无固定日志文件,使用系统日志管理) |
系统服务日志 |
通用 |
应用类型 |
应用名称 |
日志文件或目录 |
说明 |
Web服务器 |
Apache HTTP Server |
/var/log/apache2/ (Ubuntu/Debian)
/var/log/httpd/ (CentOS/RHEL) |
访问日志 access.log ,错误日志 error.log |
|
Nginx |
/var/log/nginx/ |
访问日志 access.log ,错误日志 error.log |
数据库 |
MySQL / MariaDB |
/var/log/mysql/
/var/log/mariadb/ |
查询日志、错误日志等 |
邮件服务器 |
Postfix |
/var/log/mail.log 或 /var/log/maillog |
邮件发送接收日志 |
|
Exim |
/var/log/exim4/ (Debian系) |
邮件日志 |
|
Dovecot |
/var/log/dovecot.log |
邮件服务器日志 |
FTP服务器 |
vsftpd |
/var/log/vsftpd.log 或 /var/log/xferlog |
传输日志 |
|
proftpd |
/var/log/proftpd/ |
传输和错误日志 |
容器管理 |
Docker |
/var/log/docker.log (或由 systemd 管理) |
容器运行日志 |
监控工具 |
Prometheus |
自定义目录,通常在 /var/log/prometheus/ |
监控数据及运行日志 |
备份工具 |
rsync |
一般无默认日志,需要自行配置 |
备份传输日志 |
代理服务器 |
Squid Proxy |
/var/log/squid/ |
访问日志、缓存日志 |
👥 场景 1:疑似入侵排查
检查登录和认证日志
-
✅ 检查登录记录:
1 2 3 4 5
| last -n 20 lastb grep "Accepted" /var/log/auth.log grep "Failed" /var/log/auth.log
|
1 2 3 4 5
| last lastb grep "Accepted" /var/log/secure grep "Failed" /var/log/secure
|
检查异常账户和 Shell
1 2 3 4
| awk -F: '($3<1000 && $1!="root"){print $1, $3}' /etc/passwd awk -F: '($3 >= 1000) {print "User: "$1", UID: "$3}' /etc/passwd awk -F: '($7 !~ /\/bin\/(bash|sh|nologin|false)/){print $1, $7}' /etc/passwd grep -E "useradd|adduser" /var/log/auth.log
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #!/bin/bash
echo "=== 1. 普通用户账户 (UID >= 1000) ===" awk -F: '($3 >= 1000) {print "User: "$1", UID: "$3}' /etc/passwd echo
echo "=== 2. 系统账户 (UID 1-999) ===" awk -F: '($3 > 0 && $3 < 1000) {print "System User: "$1", UID: "$3}' /etc/passwd echo
echo "=== 3. UID=0账户 (超级管理员) ===" awk -F: '($3 == 0) {print "Root-like User: "$1", UID: "$3}' /etc/passwd echo
echo "=== 4. 空密码账户(/etc/shadow中密码字段为空) ===" awk -F: '($2 == "" || $2 == "*" || $2 == "!") {print "User with empty or locked password: "$1}' /etc/shadow echo
echo "=== 5. 无法登录Shell账户(shell为nologin或false) ===" awk -F: '($7 ~ /(nologin|false)/) {print "No-login shell user: "$1", Shell: "$7}' /etc/passwd echo
echo "=== 6. 最近登录情况(lastlog) ===" lastlog | head -20 echo
echo "=== 7. 检查 /etc/passwd 和 /etc/shadow 最近修改时间 ===" ls -lh /etc/passwd /etc/shadow echo
echo "=== 8. sudo 权限异常检查(包含 ALL) ===" sudo grep -R 'ALL' /etc/sudoers /etc/sudoers.d/ 2>/dev/null || echo "No suspicious sudo entries found" echo
echo "=== 9. 最近新增用户(查看 /etc/passwd 修改时间) ===" stat /etc/passwd echo
echo "=== 10. 查看所有用户组 ===" cut -d: -f1 /etc/group | sort echo
|
检查异常进程和连接
1 2 3
| ps -eo user,pid,%cpu,%mem,command | sort -k3 -r | head -n 20 ss -tulpn ss -tunap | grep ESTAB | awk '{print $5}' | sort | uniq -c | sort -n
|
检查后门及异常文件
1 2
| find / -perm -4000 -exec ls -lh {} \; grep -R 'bash -i' /tmp /dev/shm /var/tmp/
|
检查计划任务
1 2 3 4
| crontab -l sudo crontab -l ls -lh /etc/cron.* /var/spool/cron/ find /etc/cron.* -type f -mtime -7 -exec ls -lh {} \;
|
🐞 推荐辅助工具
⚡ 场景 2:性能排查
项 |
意义 |
us 用户态CPU |
用户进程使用的CPU时间 |
sy 系统态CPU |
系统调用和内核时间 |
ni 修改优先级CPU |
修改优先级进程使用时间 |
id 空闲CPU |
空闲时间 |
wa IO等待 |
等待磁盘IO时间 |
hi 硬中断 |
硬中断时间 |
si 软中断 |
软中断时间 |
st 被偷取时间 |
虚拟化环境CPU被其他宿主占用时间 |
项 |
意义 |
total |
总内存 |
free |
完全空闲内存 |
used |
已使用(不含cache/buff) |
buff/cache |
文件缓存和缓冲 |
Swap |
交换空间 (SWAP) |
avail Mem |
可供新应用使用的实际内存 |
检查负载和 CPU
1 2 3 4
| uptime top -bn1 | head -n 20 mpstat -P ALL 1 5 vmstat 1 5
|
检查磁盘和 IO
1 2 3
| df -h du -sh /* 2>/dev/null | sort -h iostat -x 1 5
|
检查内存和交换空间
1 2 3
| free -h cat /proc/meminfo | egrep 'MemAvailable|MemFree|SwapTotal|SwapFree' ps -eo user,pid,%mem,command | sort -k3 -r | head -n 20
|
⚡️ 推荐辅助工具
💽 场景 3:磁盘空间排查
检查空间概况
1 2
| df -h du -sh /* 2>/dev/null | sort -h
|
找出大文件
1
| find / -type f -size +100M -exec ls -lh {} \;
|
检查挂载和 IO 性能
1 2
| mount | column -t iostat -x 1 5
|
⚡️ 推荐辅助工具
🌐 场景 4:网络排查
检查连接状态和端口
1 2
| ss -tulpn ss -tunap | sort -k5
|
检查异常连接和速率
1 2
| ss -tunap | grep ESTAB | awk '{print $5}' | sort | uniq -c | sort -n sar -n DEV 1 5
|
检查丢包和错误
web访问次数统计
Nginx/Apache 标准格式,日志文件名是 access.log
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #!/bin/bash
LOGFILE="access.log"
echo "==== IP 访问次数 ====" awk '{print $1}' $LOGFILE | sort | uniq -c | sort -nr
echo -e "\n==== 站点路径访问次数 ===="
awk '{print $7}' $LOGFILE | cut -d'?' -f1 | sort | uniq -c | sort -nr
echo -e "\n==== HTTP 方法统计 ====" awk '{print $6}' $LOGFILE | tr -d '"' | sort | uniq -c | sort -nr
echo -e "\n==== 状态码统计 ====" awk '{print $9}' $LOGFILE | sort | uniq -c | sort -nr
|
⚡️ 推荐辅助工具
⚡ 场景 5:服务和应用排查
检查服务状态和日志
1 2
| systemctl status <service_name> journalctl -xe | tail -n 30
|
检查日志位置参考表
服务 |
Debian/Ubuntu 路径 |
RHEL 路径 |
SSH |
/var/log/auth.log |
/var/log/secure |
通用日志 |
/var/log/syslog |
/var/log/messages |
Nginx |
/var/log/nginx/error.log |
/var/log/nginx/error.log |
Apache |
/var/log/apache2/error.log |
/var/log/httpd/error_log |
MySQL |
/var/log/mysql/error.log |
/var/log/mysqld.log |
检查端口和连接
1 2
| ss -tulpn | grep <port> lsof -i :<port>
|
⚡️ 推荐辅助工具
🕵️ 场景 6:配置和修改排查
检查修改过的配置
1
| find /etc -type f -mtime -3 -exec ls -lh {} \;
|
检查 RPM 或 Debian 包是否被修改
1 2
| rpm -Va | egrep -v 'c|missing|prelink|ghost' debsums -c
|
检查 SUID 文件
1
| find / -perm -4000 -exec ls -lh {} \;
|
⚡️ 推荐辅助工具
⚡ 场景 7:硬件和崩溃排查
检查硬件错误和日志
1 2
| dmesg | tail -n 100 journalctl -k | tail -n 100
|
检查磁盘和 SMART 状态
检查 CPU 和温度
⚡️ 推荐辅助工具