linux日志总结
字数 2175 2025-08-09 18:44:03

Linux日志系统全面指南

一、Linux日志系统概述

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出需要的信息。Linux日志以明文形式存储,便于直接搜索和阅读,也可以编写脚本自动处理日志内容。

1. 日志文件存储位置

  • 默认存放位置:/var/log/
  • 查看日志配置:more /etc/rsyslog.conf

2. 主要日志文件及其功能

日志文件 功能描述
/var/log/boot.log 记录系统引导过程中发生的事件
/var/log/syslog 记录系统警告信息(RedHat默认不生成)
/var/log/cron 记录crontab守护进程crond的动作
/var/log/cups 记录打印信息
/var/log/dmesg 记录内核自检信息(也可用dmesg命令查看)
/var/log/maillog 记录电子邮件活动
/var/log/message 记录系统重要信息(系统问题首要检查)
/var/log/btmp 记录错误登录(二进制,用lastb查看)
/var/log/lastlog 记录最近成功/失败登录(二进制,用lastlog查看)
/var/log/wtmp 永久记录用户登录/注销及系统启停(二进制,用last查看)
/var/log/utmp 记录当前登录用户信息(二进制,用who/w/users查看)
/var/log/secure 记录验证和授权信息(SSH、su、sudo等)
/var/log/xferlog 记录FTP会话信息
/var/log/kernlog 记录内核消息(RedHat默认不生成)

3. 关键用户登录日志文件

  • /var/log/wtmp/var/run/utmp/var/log/lastlog是日志子系统的关键文件
  • 都记录了用户登录情况,包含时间戳
  • 二进制格式,需用特定命令查看

4. 相关查看命令

  • who:查询utmp文件,显示当前登录用户
  • w:查询utmp文件,显示用户及运行进程
  • users:显示当前登录用户
  • last:搜索wtmp显示历史登录记录

5. 日志优先级级别

级别 英文 中文 说明
0 EMERG 紧急 系统不可用情况
1 ALERT 警告 必须立即解决的问题
2 CRIT 严重 严重情况,可能阻碍功能
3 ERR 错误 运行错误
4 WARNING 提醒 可能影响系统的重要事件
5 NOTICE 注意 不影响正常功能但需注意
6 INFO 信息 一般信息
7 DEBUG 调试 程序或系统调试信息

6. 重要日志及查看命令

  • 登录失败记录:/var/log/btmplastb
  • 最后一次登录:/var/log/lastloglastlog
  • 登录成功记录:/var/log/wtmplast
  • 当前登录用户:/var/run/utmpw/who/users
  • 登录日志记录:/var/log/secure
  • 历史命令记录:history(清理当前用户:history -c

二、日志分析常用命令

1. grep相关命令

grep -C 5 foo file  # 显示匹配行及上下5行
grep -B 5 foo file  # 显示匹配行及前5行
grep -A 5 foo file  # 显示匹配行及后5行
grep -rn "string" * # 递归查找含字符串的文件
grep -R "string" * # 查找所有文件包含子目录
grep -i "string"   # 忽略大小写

2. 显示文件特定行

cat file | tail -n +1000 | head -n 2000  # 显示1000-2999行

3. 系统完整性检查

rpm -Va > rpm.log  # 检查所有rpm包是否被修改

输出格式说明:

  • S:文件大小改变
  • M:文件类型/权限改变
  • 5:MD5校验改变
  • D:设备代码改变
  • L:文件路径改变
  • U:文件属主改变
  • G:文件属组改变
  • T:文件修改时间改变

4. 查看开放端口

ss -tnlp
ss -tnlp | grep ssh
ss -tnlp | grep ":22"
netstat -tnlp
netstat -tnlp | grep ssh

5. 防火墙检查

firewall-cmd --state          # 显示状态
firewall-cmd --get-zones      # 列出zone
firewall-cmd --get-active-zones # 活动zone
firewall-cmd --get-default-zone # 默认zone
firewall-cmd --get-service    # 支持的服务
firewall-cmd --zone=public --list-ports # 列出端口
firewall-cmd --zone=public --list-all # 列出所有设置

6. 用户检查

awk -F: '{if($3==0||$4==0)print $1}' /etc/passwd  # 查看UID/GID为0的账号
awk -F: '{if($7!="/usr/sbin/nologin")print $1}' /etc/passwd # 查看可登录账号
lastlog    # 所有用户最近登录信息
lastb      # 错误登录列表
users      # 当前登录用户

7. 计划任务和启动项

chkconfig --list | grep "3:启用\|3:开\|3:on\|5:启用\|5:开\|5:on" # 开机启动服务
ls /etc/init.d      # 开机启动配置文件
cat /etc/rc.local   # rc启动文件
ls /etc/rc.d/rc[0-6].d
runlevel            # 运行级别
crontab -l          # 计划任务列表
ls -alh /var/spool/cron # 用户crontab文件位置
ls -al /etc/cron*   # 查看cron相关文件
cat /etc/cron*      # 查看cron内容
cat /etc/at.allow   # at允许用户
cat /etc/at.deny    # at拒绝用户
cat /etc/cron.allow # cron允许用户
cat /etc/cron.deny  # cron拒绝用户
cat /etc/crontab    # 系统crontab
cat /etc/anacrontab # anacron配置
cat /var/spool/cron/crontabs/root # root用户的cron任务

8. 可疑文件检查

find / -ctime -2            # 查找72小时内新增文件
find ./ -mtime 0 -name "*.jsp" # 24小时内修改的JSP文件
find / *.jsp -perm 4777     # 查找777权限的文件
ls -a /tmp                  # 查看临时目录
strings /usr/sbin/sshd | egrep '[1-9]{1,3}\.[1-9]{1,3}\.' # 分析sshd是否包含IP

三、日志分析技巧

A. /var/log/secure(RedHat)或/var/log/auth.log(Debian)

  1. 定位爆破root的IP及次数:
# RedHat
grep "Failed password for root" /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
# Debian
grep "Failed password for root" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr | more
  1. 定位所有爆破IP:
grep "Failed password" /var/log/secure|grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" |uniq -c |more
  1. 爆破用户名统计:
grep "Failed password" /var/log/secure|perl -e 'while(for(.*?) from/; print "$1\n";}' |uniq -c|sort -nr | more
  1. 爆破失败次数:
grep -o "Failed password" /var/log/secure|uniq -c
  1. 爆破失败用户名次数:
grep "Failed password" /var/log/secure | awk '{print $9}' | sort | uniq -c | sort -nr
  1. 爆破失败IP次数:
grep "Failed password for invalid user" /var/log/secure | awk '{print $13}' | sort | uniq -c | sort -nr | more
  1. 登录成功IP:
grep "Accepted " /var/log/secure | awk '{print $11}' | sort | uniq -c | sort -nr | more
  1. 登录成功详情(日期、用户名、IP):
grep "Accepted " /var/log/secure | awk '{print $1,$2,$3,$9,$11}'
grep "Accepted " /var/log/secure* | awk '{print $1,$2,$3,$9,$11}'
  1. 用户增删记录:
grep "useradd" /var/log/secure
grep "userdel" /var/log/secure

B. /var/log/yum.log

记录软件安装、升级、卸载日志:

yum install gcc
more /var/log/yum.log

四、日志管理工具

1. logrotate日志分割工具

logrotate用于分割日志文件,删除旧日志并创建新日志,节省磁盘空间。

配置文件

  • 主配置文件:/etc/logrotate.conf
  • 自定义配置目录:/etc/logrotate.d/

常用参数

compress          # 通过gzip压缩转储日志
nocompress        # 不压缩
copytruncate      # 先拷贝再清空(可能有数据丢失)
nocopytruncate    # 备份但不截断
create mode owner group # 指定新文件属性
nocreate          # 不建立新日志文件
delaycompress     # 下次转储时才压缩
nodelaycompress   # 转储同时压缩
missingok         # 日志丢失不报错
errors address    # 错误信息发送到指定邮箱
ifempty           # 空文件也轮转(默认)
notifempty        # 空文件不轮转
mail address      # 发送日志到指定邮箱
nomail            # 不发送邮件
olddir directory  # 转储日志放入指定目录
noolddir          # 转储日志与当前日志同目录
sharedscripts     # 所有日志轮转后统一执行脚本
prerotate         # 转储前执行指令
postrotate        # 转储后执行指令
daily             # 每天转储
weekly            # 每周转储
monthly           # 每月转储
rotate count      # 保留日志数量
dateext           # 使用日期作为后缀
dateformat .%s    # 定义文件名格式
size log-size     # 日志达到指定大小时转储

示例配置

  1. Nginx日志分割:
/Data/logs/nginx/*/*log {
    daily
    rotate 365
    missingok
    notifempty
    compress
    dateext
    sharedscripts
    postrotate
        /etc/init.d/nginx reload
    endscript
}
  1. PHP日志分割:
/Data/logs/php/*log {
    daily
    rotate 365
    missingok
    notifempty
    compress
    dateext
    sharedscripts
    postrotate
        if [ -f /Data/app/php5.6.26/var/run/php-fpm.pid ]; then
            kill -USR1 `cat /Data/app/php5.6.26/var/run/php-fpm.pid`
        fi
    endscript
    postrotate
        /bin/chmod 644 /Data/logs/php/*gz
    endscript
}
  1. Tomcat日志分割:
/Data/app/tomcat-7-huanqiu/logs/catalina.out {
    rotate 14
    daily
    copytruncate
    compress
    notifempty
    missingok
}
  1. 系统日志分割:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

2. logwatch日志分析工具

安装:

yum -y install logwatch
cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf

默认配置:

LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = root
MailFrom = Logwatch
Print =
Range = yesterday
Detail = Low
Service = All
Service = "-zz-network"
Service = "-zz-sys"
Service = "-eximstats"

五、日志清除方法

1. 清除历史命令

histroy -r       # 删除当前会话历史
history -c       # 删除内存中所有历史
rm .bash_history # 删除历史文件内容
HISTSIZE=0       # 设置历史命令条数为0

2. 完全删除日志文件

cat /dev/null > filename
> filename
echo "" > filename
echo > filename

3. 删除当天日志

sed -i '/当天日期/'d filename

4. 篡改日志

sed -i 's/原IP/新IP/g' 日志文件

5. 一键清除脚本

#!/usr/bin/bash
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
rm ~/./bash_history
history -c
Linux日志系统全面指南 一、Linux日志系统概述 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出需要的信息。Linux日志以明文形式存储,便于直接搜索和阅读,也可以编写脚本自动处理日志内容。 1. 日志文件存储位置 默认存放位置: /var/log/ 查看日志配置: more /etc/rsyslog.conf 2. 主要日志文件及其功能 | 日志文件 | 功能描述 | |---------|---------| | /var/log/boot.log | 记录系统引导过程中发生的事件 | | /var/log/syslog | 记录系统警告信息(RedHat默认不生成) | | /var/log/cron | 记录crontab守护进程crond的动作 | | /var/log/cups | 记录打印信息 | | /var/log/dmesg | 记录内核自检信息(也可用dmesg命令查看) | | /var/log/maillog | 记录电子邮件活动 | | /var/log/message | 记录系统重要信息(系统问题首要检查) | | /var/log/btmp | 记录错误登录(二进制,用lastb查看) | | /var/log/lastlog | 记录最近成功/失败登录(二进制,用lastlog查看) | | /var/log/wtmp | 永久记录用户登录/注销及系统启停(二进制,用last查看) | | /var/log/utmp | 记录当前登录用户信息(二进制,用who/w/users查看) | | /var/log/secure | 记录验证和授权信息(SSH、su、sudo等) | | /var/log/xferlog | 记录FTP会话信息 | | /var/log/kernlog | 记录内核消息(RedHat默认不生成) | 3. 关键用户登录日志文件 /var/log/wtmp 、 /var/run/utmp 、 /var/log/lastlog 是日志子系统的关键文件 都记录了用户登录情况,包含时间戳 二进制格式,需用特定命令查看 4. 相关查看命令 who :查询utmp文件,显示当前登录用户 w :查询utmp文件,显示用户及运行进程 users :显示当前登录用户 last :搜索wtmp显示历史登录记录 5. 日志优先级级别 | 级别 | 英文 | 中文 | 说明 | |-----|------|-----|------| | 0 | EMERG | 紧急 | 系统不可用情况 | | 1 | ALERT | 警告 | 必须立即解决的问题 | | 2 | CRIT | 严重 | 严重情况,可能阻碍功能 | | 3 | ERR | 错误 | 运行错误 | | 4 | WARNING | 提醒 | 可能影响系统的重要事件 | | 5 | NOTICE | 注意 | 不影响正常功能但需注意 | | 6 | INFO | 信息 | 一般信息 | | 7 | DEBUG | 调试 | 程序或系统调试信息 | 6. 重要日志及查看命令 登录失败记录: /var/log/btmp → lastb 最后一次登录: /var/log/lastlog → lastlog 登录成功记录: /var/log/wtmp → last 当前登录用户: /var/run/utmp → w / who / users 登录日志记录: /var/log/secure 历史命令记录: history (清理当前用户: history -c ) 二、日志分析常用命令 1. grep相关命令 2. 显示文件特定行 3. 系统完整性检查 输出格式说明: S:文件大小改变 M:文件类型/权限改变 5:MD5校验改变 D:设备代码改变 L:文件路径改变 U:文件属主改变 G:文件属组改变 T:文件修改时间改变 4. 查看开放端口 5. 防火墙检查 6. 用户检查 7. 计划任务和启动项 8. 可疑文件检查 三、日志分析技巧 A. /var/log/secure(RedHat)或/var/log/auth.log(Debian) 定位爆破root的IP及次数: 定位所有爆破IP: 爆破用户名统计: 爆破失败次数: 爆破失败用户名次数: 爆破失败IP次数: 登录成功IP: 登录成功详情(日期、用户名、IP): 用户增删记录: B. /var/log/yum.log 记录软件安装、升级、卸载日志: 四、日志管理工具 1. logrotate日志分割工具 logrotate用于分割日志文件,删除旧日志并创建新日志,节省磁盘空间。 配置文件 主配置文件: /etc/logrotate.conf 自定义配置目录: /etc/logrotate.d/ 常用参数 示例配置 Nginx日志分割: PHP日志分割: Tomcat日志分割: 系统日志分割: 2. logwatch日志分析工具 安装: 默认配置: 五、日志清除方法 1. 清除历史命令 2. 完全删除日志文件 3. 删除当天日志 4. 篡改日志 5. 一键清除脚本