linux日志

发布时间 2023-12-14 15:01:29作者: zjz的tom

日志种类和记录方式

在centos7中,系统日志消息由两个服务器负责处理:systemd-journald和rsyslog

常见日志文件的作用

系统日志文件概述:/var/log 目录保管由rsyslog维护的,里面存放的一些特定于系统和服务的日志文件

日志文件用途
/var/log/message 大多数系统日志消息记录在此处。也有例外的:如与身份验证,电子邮箱等
/var/log/secure 安全和身份验证相关的消息和登录失败的日志文件。ssh远程连接产生的日志
/var/log/secure 安全和身份验证相关的消息和错误的日志文件
/var/log/maillog 与邮件服务器相关的消息日志文件
/var/log/cron 与定期执行任务相关的日志文件
/var/log/boot.log 与系统启动相关的消息记录
/var/log/dmesg 与系统启动相关的消息记录

例1:查看暴力破解密码的ip

ssh root@192.168.1.63 #故意输错3次密码

grep Failed /var/log/secure

Aug 19 21:55:42 panda sshd[84029]: Failed password for root from 10.10.30.130 port 50916 ssh2
Aug 19 21:55:44 panda sshd[84029]: Failed password for root from 10.10.30.130 port 50916 ssh2
Aug 19 21:55:47 panda sshd[84029]: Failed password for root from 10.10.30.130 port 50916 ssh2
Aug 19 21:55:52 panda sshd[84034]: Failed password for root from 10.10.30.130 port 50917 ssh2

grep Failed /var/log/secure|awk '{print $11}'|uniq -c

3 192.168.1.63

注:awk '{print $11}' #以空格做为分隔符,打印第 11 列的数据 uniq 命令用于报告或忽略文件中的重复行,-c 或——count:在每列旁边显示该行重复出现的次数

例2:/var/log/wtmp文件

/var/log/wtmp也是一个二进制文件,记录每个用户的登录次数和持续时间等信息。可以用last命令输出wtmp中内容:last 显示到目前为止,成功登录系统的记录

last

root pts/2 192.168.1.8 Tue May 22 00:35 still logged in 
root pts/2 192.168.1.8 Mon May 21 20:42 - 00:35 (03:53)

或:last -f /var/log/wtmp

用/var/log/btmp查看暴力破解的用户

/var/log/btmp文件是记录错误登录系统的日志。如果发现/var/log/btmp日志文件比较大,大于 1M,就 算大了,就说明很多人在暴力破解 ssh 服务,此日志需要使用 lastb 程序查看

lastb

root ssh:notty xuegod63.cn Mon May 21 21:49 - 21:49 (00:00) 
root ssh:notty xuegod63.cn Mon May 21 21:49 - 21:49 (00:00)

发现后,使用防火墙,拒绝掉:命令如下:

iptables -A INPUT -i ens33 -s 192.168.1.63(暴力破解地址) -j DROP

#将新规则追加于尾部入站请求ens33网卡,地址是192.168.1.63的ip,被丢弃

rsyslog日志服务

rhel5 ->服务名称 syslog ->配置文件 /etc/syslog.conf

rhel6-7 ->服务名称 rsyslog ->配置文件 /etc/rsyslog.conf

日志配置文件信息

编辑配置文件 vim /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log

注释: #$UDPServerRun 514 #允许 514 端口接收使用 UDP 协议转发过来的日志

#$InputTCPServerRun 514 ##允许 514 端口接收使用 TCP 协议转发过来的日志

#kern* 内核类型的所有级别日志 存放到 /dev/console

*.info;mail.none;authpriv.none;cron.none /var/log/messages

所有的类别级别是info以上,除了mail,authpriv,cron(产生的日志太多,不易于查看)

类别。级别:

authpriv.* 认证的信息-存放- /var/log/secure
mail.* 邮件相关的信息 -存放- -/var/log/maillog
cron.* 计划任务相关的信息 -存放- /var/log/cron
local7.* 开机时显示的信息 -存放- /var/log/boot.log

实战一

自定义ssh服务的日志类型和存储位置

vim /etc/rsyslog.conf #以73行下,在74行插入内容

73 local7.*     /var/log/boot.log
74 local0.* /var/log/sshd.log

注:把local0类别的日志,保存到/var/log/sshd.log路径

定义ssh服务的日志类别为local0,编辑sshd服务的主配置文件

vim /etc/ssh/sshd_config #插入

SyslogFacility local0

改:32 SyslogFacility AUTHPRIV

为:32 SyslogFacility local0

先重启rsyslog服务(生效配置) systemctl restart rsyslog

再重启sshd服务,生成日志 systemctl restart sshd

验证是否生成日志并查看其中的内容: cat /var/log/sshd.log #说明修改成功

May 22 00:19:54 zjz sshd[44737]: Server listening on 0.0.0.0 port 22.
May 22 00:19:54 zjz sshd[44737]: Server listening on :: port 22.

上面对就的信息:时间 主机 服务 进程 ID 相关的信息

日志的切割

在 linux 下的日志会定期进行滚动增加,我们可以在线对正在进行回滚的日志进行指定大小的切割(动态),如 果这个日志是静态的。比如没有应用向里面写内容。

那么我们也可以用 split 工具进行切割;其中 Logrotate 支持 按时间和大小来自动切分,以防止日志文件太大。

logrotate配置文件主要有:

/etc/logrotate.conf以及/etc/logrotate.d/ 这个子目录下的配置文件

logrotate的执行由crond服务调用的

vim /etc/cron.daily/logrotate #查看logrotate脚本内容

logrotate程序每天由cron在指定的时间(/etc/crontab)启动

日志是很大的,如果让日志无限制的记录下去 是一件很可怕的事情,日积月累就有几百兆占用磁盘的空间, 如果你要找出某一条可用信息:——海底捞针

日志切割:

当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志

实战

编辑配置文件

vim /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# system-specific logs may be also be configured here.

说明:(全局参数)

weekly:每周执行回滚,或每周执行一次日志回滚

rotate:表示日志切分后历史文件最多保存离现在最近的多少份[

create:指定新创建的文件权限与所属组与群组

dateext:使用日期为后缀的回滚文件 #可以去/var/log目录下查看单独配置信息

/var/log/btmp {     指定的日志文件的名字和路径
missingok 如果文件丢失,将不报错
monthly 每月轮换一次
create 0664 root utmp 设置 btmp 这个日志文件的权限,属主,属组
minsize 1M 文件超过 1M进行回滚,所以大家要知道它不一定每个月都会进行分割,
要看这个文件大小来定
rotate 1 日志切分后历史文件最多保存 1 份,不含当前使用的日

实战

使用logrotate进行ssh日志分割

定义了ssh日志存储在/var/log/sshd的基础上执行:

vim /etc/logrotate.d/sshd #创建一个sshd配置文件,插入以下内容:

/var/log/sshd.log {
missingok
weekly
create 0600 root root
minsize 1M
rotate 3
}

systemctl restart rsyslog

logrotate -d /etc/logrotate.d/sshd #预演,不实际轮循

logrotate -vr /etc/logrotate.d/sshd #强制轮循,也就是说即使轮循条件没有满足,也可以通过加-f强制让logrotate轮循日志文件

-v 显示指令执行过程

-f 强制执行

ls /var/log/sshd*

/var/log/sshd.log /var/log/sshd.log.1 /var/log/sshd.log.2 /var/log/sshd.log.3

再次查看日志文件大小,已经为0

ll -h /var/log/sshd.log

-rw------- 1 root root 0 5 月 22 00:49 /var/log/sshd.log

配置远程日志服务器

server端配置

vim /etc/rsyslog.conf #使用TCP协议方式,收集日志

改:19 #ModLoad imtcp

20 #InpuTCPServerRun 514

为:19 $ModLoad imtcp

20 $InpuTCPServerRun 514

注:使用UDP协议——速度快——不保证数据的完整,使用TCP协议——可靠.完整

systemctl restart rsyslog #重新启动rsyslog

查看服务监听的状态:

netstat -anlpt | grep 514

tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 45631/rsyslogd 
tcp6 0 0 :::514 :::* LISTEN 45631/rsyslogd

服务端验证

在服务端关闭selinux和防火墙:

gentenforce

setenforce 0

getenforce

systemctl stop firewalld

systemctl status firewalld

iptables -F #清空防火墙规则

client端配置

vim /etc/rsyslog.conf #在90行之后插入

*.* @@192.168.1.63:514

注: * .* 所有类别和级别的日志;@@192.168.1.63:514 运端 tcp 协议的日志服务端的 IP 和端口

重启rsyslog服务

systemctl restart rsyslog.service

查看日志:

tail -f /var/log/messages | grep lhsb --color #动态查看日志