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(无固定日志文件,使用系统日志管理) 系统服务日志 通用
  • Linux 常见的应用程序日志目录和文件
应用类型 应用名称 日志文件或目录 说明
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
    # Debian/Ubuntu
    last -n 20
    lastb
    grep "Accepted" /var/log/auth.log
    grep "Failed" /var/log/auth.log
    1
    2
    3
    4
    5
    # RHEL/CentOS
    last
    lastb
    grep "Accepted" /var/log/secure
    grep "Failed" /var/log/secure

检查异常账户和 Shell

  • 检查 /etc/passwd 文件是否近期修改过
1
stat /etc/passwd
  • 检查异常账户和 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
  • 简单shell
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

⚡️ 推荐辅助工具

  • htop:更直观的CPU、MEM、IO监控
  • dstat:综合性能监控
  • glances:一键看全局性能

💽 场景 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

⚡️ 推荐辅助工具

  • ncdu:以更友好的UI检视磁盘空间使用状况
  • iotop:监控磁盘IO热点进程

🌐 场景 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

检查丢包和错误

1
2
ifconfig
ip -s link

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

⚡️ 推荐辅助工具

  • nload:简单直观的网络监控
  • iftop:监控实时带宽和连接
  • tcpdump:精准抓取网络数据和分析

⚡ 场景 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>

⚡️ 推荐辅助工具

  • logwatch:日志解析和总结
  • lnav:更友好的日志分析器

🕵️ 场景 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 {} \;

⚡️ 推荐辅助工具

  • aide:文件完整性检测
  • Tripwire:老牌文件修改检测器

⚡ 场景 7:硬件和崩溃排查

检查硬件错误和日志

1
2
dmesg | tail -n 100
journalctl -k | tail -n 100

检查磁盘和 SMART 状态

1
smartctl -a /dev/sda

检查 CPU 和温度

1
2
lscpu
sensors

⚡️ 推荐辅助工具