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

⚡️ 推荐辅助工具