一、日志文件的分类

1.内核及系统日志

由系统服务rsyslog统一进行管理,日志格式基本相似

软件包:rsyslog-5.8.10-8 主要程序:/sbin/rsyslogd 配置文件:/etc/rsyslog.conf

配置文件:/etc/rsyslog.conf语法

日志设备类型 说明 auth pam产生的日志 authpriv ssh,ftp等登陆信息的验证信息 cron 时间任务相关 kern 内核 lpr 打印 mail 邮件 mark(syslog) rsyslog服务内部信息的标识 news 新闻组 user 用户程序产生的相关信息 uucp Unix to Unix copy Unix主机之间的通讯 local1-7 自定义的日志设备 日志级别

级别 说明 NONE 啥都不记 EMERG 紧急(导致系统不可用) ALERT 警告(必须马上采取措施处理) CRIT 严重 ERR 错误 WARNING 提醒 NOTICE 注意 INFO 一般信息 DEBUG 调试信息 连接符号

符号 说明 . 记录大于等于后面的级别日志 .= 只记录等于后面的级别日志 .!= 只记录不等于后面的级别日志 日志处理方式

本地文件:通常就是文件的绝对路径 打印机:例如 /dev/lp0 这个打印机装置 用户名称:显示给用户 远程主机:例如 @202.100.100.1 *:所有在线的用户 主要日志文件介绍

内核及公共消息日志:/var/log/messages

计划任务日志:/var/log/cron

系统引导日志:/var/log/dmesg

邮件系统日志:/var/log/maillog

2.用户日志

记录系统用户登录及退出系统的相关信息

保存了用户登录、退出系统等相关信息

/var/log/lastlog:最近的用户登录事件(二进制文件)

/var/log/wtmp:用户登录、注销及系统开、关机事件(二进制文件)

/var/run/utmp:当前登录的每个用户的详细信息(二进制文件)

/var/log/secure:与用户验证相关的安全性事件

用户登录分析命令

who、w、users、last、ac、lastlog

3.程序日志

由各种应用程序独立管理的日志文件,记录格式不统一

由相应的应用程序独立进行管理

Web服务:/var/log/httpd/

access_log、error_log

代理服务:/var/log/squid/

access.log、cache.log、squid.out、store.log

FTP服务:/var/log/xferlog

……

二、日志转储功能

系统时时刻刻都在产生日志,如果不及时清理,很快就会填满硬盘,但如果要手工清理,又很麻烦。这种情况下,logrotate 这个程序很好的完成这个任务

1.logrotate

用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”。我们可以根据日志文件的大小,也可以根据天数来转储,这个过程一般通过crond进程来执行,logrotate还可以用于压缩日志文件

主配置文件:/etc/logrotate.conf

参数 说明 compress 通过gzip压缩转储后的日志 compresscmd 指定压缩文件所使用的命令 uncompresscmd 指定解压缩文件所使用的命令 nocompress 无需压缩 copytruncate 用于还在打开状态的日志文件,把当前日志备份并截断 nocopytruncate 把当前日志备份但不截断 create mode owner group 转储文件,使用指定的文件模式创建新的日志文件 nocreate 不创建新的日志文件 dateext 以日期格式为扩展名 delaycompress 转储的文件在下一次转储时才压缩 nodelaycompress 转储同时压缩 errors address 转储时错误信息发送到指定的email地址 ifempty 如果是空文件也转储,默认 notifempty 如果是空文件,不转储 mail address 把转储的日志文件发送到指定的邮箱 nomail 不发送日志文件 olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 noolddir 转储后的日志文件和当前日志文件放到一个目录下 maxage 删除循环天数大于(后面跟着数字是天数)的切割日志文件,只针对循环的日志。如果设置了邮件会发送到设置好的邮件地址。 daily 转储周期为每天 weekly 转储周期为每周 monthly 转储周期为每月 rotate count 日志文件删除之前转储的次数,0表没有备份,5表5个备份 size 当日志文件达到指定大小才转储 minsize 日志文件一定要超过多少后才进行rotate,但是又必须参考转储周期,就是不能在转储周期没到之前就rotate missingok 如果日志文件缺失,继续下一个文件,且不报告错误信息 Logrotate的次要配置文件:/etc/logrotate.d/*

每个文件代表一种日志的配置

[root@localhost ~]# cat /etc/logrotate.d/syslog /var/log/messages #要转储的文件 { #转储的一些参数 daily #每天 size 20M #每20M转储一次 rotate 3 #保留三份转储文件

     postrotate
         需要执行的命令
     endscript
 }

-f参数:强制转储

使用这个命令可以立即使转储文件达到条件进行转储

服务使用crond服务

[root@localhost log]# systemctl status crond ● crond.service - Command Scheduler Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2020-03-24 00:20:22 CST; 1h 31min ago Main PID: 6568 (crond) CGroup: /system.slice/crond.service └─6568 /usr/sbin/crond -n

Mar 24 00:20:22 localhost.localdomain systemd[1]: Started Command Scheduler. Mar 24 00:20:22 localhost.localdomain crond[6568]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 32% if used.) Mar 24 00:20:23 localhost.localdomain crond[6568]: (CRON) INFO (running with inotify support)

cd /etc/cron.daily/ 目录里有个logrotate,这里说明了会每天执行logrotate /etc/anacrontab中规定了何时执行cron.daily,这么设置的目的是为了防止同一时点执行多任务,系统负载过大。这里有延时。

/etc/anacrontab: configuration file for anacron

See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root

the maximal random delay added to the base delay of the jobs

RANDOM_DELAY=45

the jobs will be started during the following hours only

START_HOURS_RANGE=3-22

#period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly

如何查看logrotate是否运行正常

cat /var/lib/logrotate.status #查看logrotate切割的哪个日志 以debug模式运行

注意:debug模式下不会对日志产生真实操作,也不会写入到logrotate state file中,如果想手动运行,请使用 -f

/usr/sbin/logrotate -d /etc/logrotate.conf /usr/sbin/logrotate -d /etc/logrotate.conf > /tmp/logrotate.debug 2>&1 #输出错误信息,检查是否有错误,检查是否有error /var/log/sa

记录系统重要内部活动信息,包括CPU和内存消耗,磁盘IO,网络流量等等。

/var/log/audit

记录系统的审计日志,包括对核心文件的修改,和用户的重要操作等等。 这个工具在大多数Linux操作系统中是默认安装的。CentOS 默认安装。安装完毕后将自动安装以下auditd和相关的工具:

auditctl : 即时控制审计守护进程的行为的工具,比如添加规则等等。 /etc/audit/audit.rules : 记录审计规则的文件。 aureport : 查看和生成审计报告的工具。 ausearch : 查找审计事件的工具 auditspd : 转发事件通知给其他应用程序,而不是写入到审计日志文件中。 autrace : 一个用于跟踪进程的命令。 /etc/audit/auditd.conf : auditd工具的配置文件。

查看审计规则 #auditctl -l

#对单个文件审计,添加审计规则 #-w path : 指定要监控的路径,上面的命令指定了监控的文件路径 /etc/passwd #-p : 指定触发审计的文件/目录的访问权限,rwxa : 指定的触发条件,r 读取权限,w 写入权限,x 执行权限,a 属性(attr) #-k 给当前这条监控规则起个名字,方便搜索过滤 #auditctl -w /etc/passwd -p rwxa -k pass #对目录审计(也会记录目录里文件的改动) #auditctl -w /etc/ -p rwxa #auditctl -W /etc/ -p rwxa 删除这条创建的规则 #对可执行命令进行审计 auditctl -F exe=/bin/id -k execution_bin_id 对于V3系统 auditctl -w /sbin/reboot #审计特定命令 永久更新方式 vim /etc/audit/audit.rules 添加 -w /sbin/reboot -p x -k shutdown #ausearch查看审计日志,有多种搜索条件

参数 说明
-k 基于key搜索
-f 基于文件名搜索
-i 以人类可读方式
-p 基于进程id搜索
-ui 基于user id搜索
-v 版本号

ausearch -i -k test #常用搜索 #生成简要报告 #aureport centos7中为了让重启后修改的规则依然生效:augenrules --load
#读取/etc/audit/rules.d/*.rules的规则后重新加载规则,也就是说修改/etc/audit/rules.d/下的规则文件即可。再运行augenrules --load 日志文件目录: /var/log/audit/audit.log 日志中重点字段:proctitle(这个字段就是执行的命令) obj=system_u:object_r:etc_t:s0 目标的安全上下文 定义控制规则/etc/audit/audit.rules:

-D:删除所有之前的规则 -b 8192:设置缓冲区大小 -e 2:处于不可更改模式 修改成可修改模式,centos7中需要修改/etc/audit/rules.d/audit.rules这个文件,然后重启 -f 2:当发生错误时panic -r 100:每秒最多产生100条信息

注意:用 auditctl 添加审计规则是临时的,立即生效,但是系统重启失效。重启仍然有效,需要在 /etc/audit/audit.rules 文件中添加规则,然后重启服务:

service auditd restart 或者 service auditd reload