日志服务管理
1 日志管理
在 CentOS7、8 中,系统日志消息由两个服务负责处理:systemd-journald 和 rsyslog
1.1 常见日志文件的作用
系统日志文件概述:/var/log 目录保管由 rsyslog 维护的,里面存放的一些特定于系统和服务的日志文件。
日志文件用途:
/var/log/message 大多数系统日志消息记录在此处。有也例外的:如与身份验证,电子邮件处理相关的定期作业任务等
/var/log/secure 安全和身份验证相关的消息和登录失败的日志文件。 ssh 远程连接产生的日志。
/var/log/secure 安全和身份验证相关的消息和错误的日志文件
/var/log/maillog 与邮件服务器相关的消息日志文件
/var/log/cron 与定期执行任务相关的日志文件
/var/log/boot.log 与系统启动相关的消息记录
例1:查看哪个 IP 地址经常暴力破解系统用户密码
root@centos7 ~]#ssh root@192.168.2.72 #故意输错 3 次密码
The authenticity of host '192.168.2.72 (192.168.2.72)' can't be established.
ECDSA key fingerprint is SHA256:9+2dCVBWToH9HuzaAwmAvQ7GFTJyLx3BWQ92VmtJipU.
ECDSA key fingerprint is MD5:f0:68:f5:ee:61:99:f3:bf:29:e4:5a:03:9b:92:40:56.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.72' (ECDSA) to the list of known hosts.
root@192.168.2.72's password:
Permission denied, please try again.
root@192.168.2.72's password:
Permission denied, please try again.
root@192.168.2.72's password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
#在目标机器查看登陆失败的机器
[root@centos7 ~]#grep Failed /var/log/secure
May 12 21:02:47 cen7-2 sshd[9525]: pam_systemd(sshd:session): Failed to release session: Interrupted system call
May 12 21:02:56 cen7-2 sshd[9478]: pam_systemd(sshd:session): Failed to release session: Interrupted system call
Sep 8 23:31:03 centos7 sshd[1330]: Failed password for root from 192.168.2.71 port 45062 ssh2
Sep 8 23:31:07 centos7 sshd[1330]: Failed password for root from 192.168.2.71 port 45062 ssh2
Sep 8 23:31:09 centos7 sshd[1330]: Failed password for root from 192.168.2.71 port 45062 ssh2
#uniq 命令用于报告或忽略文件中的重复行,-c 或——count:在每列旁边显示该行重复出现的次数
[root@centos7 ~]#grep Failed /var/log/secure | cut -d' ' -f12 | uniq -c
2 system
3 192.168.2.71例 2:/var/log/wtmp 文件的作用
/var/log/wtmp 也是一个二进制文件,记录每个用户的登录次数和持续时间等信息。
可以用 last 命令输出 wtmp 中内容: last 显示到目前为止,成功登录系统的记录。
[root@centos7 ~]#last
root pts/0 192.168.2.2 Thu Sep 8 23:30 still logged in
reboot system boot 3.10.0-1127.10.1 Thu Sep 8 23:20 - 23:35 (00:14)
........
[root@centos7 ~]# last -f /var/log/wtmp例 3:使用 /var/log/btmp 文件查看暴力破解系统的用户
/var/log/btmp 文件是记录错误登录系统的日志。如果发现/var/log/btmp 日志文件比较大,大于 1M,就算大了,就说明很多人在暴力破解 ssh 服务,此日志需要使用 lastb 程序查看。
[root@centos7 ~]#lastb
root ssh:notty 192.168.2.71 Thu Sep 8 23:31 - 23:31 (00:00)
root ssh:notty 192.168.2.71 Thu Sep 8 23:31 - 23:31 (00:00)
root ssh:notty 192.168.2.71 Thu Sep 8 23:31 - 23:31 (00:00)
btmp begins Thu Sep 8 23:31:03 2021
#查看恶意 ip 试图登录次数
[root@centos7 ~]#lastb | tr -s ' ' | cut -d ' ' -f3 | uniq -c | sort -n
1
1 Thu
3 192.168.2.71
#清空日志
方法 1:# > /var/log/btmp
方法 2:# rm -rf /var/log/btmp && touch /var/log/btmp
#两者的区别?
使用方法 2,因为创建了新的文件,而正在运行的服务,还用着原来文件的 inode 号和文件描述码,所需要重启一下 rsyslog 服务。建议使用方法 1 > /var/log/btmp1.2 日志的记录方式
日志的分类:
daemon 后台进程相关
kern 内核产生的信息
lpr 打印系统产生的
authpriv 安全认证
cron 定时相关
mail 邮件相关
syslog 日志服务本身的
news 新闻系统
local0~7 自定义的日志设备
local0-local7 8 个系统保留的类, 供其它的程序使用或者是用户自定义
日志的级别: 轻 --> 重
编码 优先级 严重性
7 debug 信息对开发人员调试应用程序有用,在操作过程中无用
6 info 正常的操作信息,可以收集报告,测量吞吐量等
5 notice 注意,正常但重要的事件,
4 warning 警告,提示如果不采取行动。将会发生错误。比如文件系统使用 90%
3 err 错误,阻止某个模块或程序的功能不能正常使用
2 crit 关键的错误,已经影响了整个系统或软件不能正常工作的信息
1 alert 警报,需要立刻修改的信息
0 emerg 紧急,内核崩溃等严重信息1.3 rsyslog 日志服务
rhel5 -> 服务名称 syslog -> 配置文件 /etc/syslog.conf
rhel6-8 -> 服务名称 rsyslog -> 配置文件 /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 协议转发过来的日志
CentOS8 为
#input(type="imudp" port="514") #允许 514 端口接收使用 UDP 协议转发过来的日志
#input(type="imtcp" port="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
“- ”号: 邮件的信息比较多,先将数据存储到内存,达到一定大小,全部写到硬盘.有利于减少 I/O 进程的开销
数据存储在内存,如果关机不当数据消失1.4 日志输入的规则
. info 大于等于 info 级别的信息全部记录到某个文件
.=级别 仅记录等于某个级别的日志
例:.=info 只记录 info 级别的日志
.! 级别 除了某个级别意外,记录所有的级别信息
例.!err 除了 err 外记录所有
.none 指的是排除某个类别 例: mail.none 所有 mail 类别的日志都不记录1.5 实战-自定义 ssh 服务的日志类型和存储位置
[root@centos7 ~]#vim /etc/rsyslog.conf
# 把自定义 local0 类别的日志,保存到 /var/log/sshd.log 路径
#以 73 行下,插入以下内容
local0.* /var/log/sshd.log
#定义 ssh 服务的日志类别为 local0,编辑 sshd 服务的主配置文件
[root@centos7 ~]#vim /etc/ssh/sshd_config
#改:SyslogFacility AUTHPRIV
#为:SyslogFacility local0
SyslogFacility local0
#把 sshd 服务日志 默认的安全认证类别 改成我们的 自定义 local0 类别
#先重启 rsyslog 服务(生效配置)
[root@centos7 ~]#systemctl restart rsyslog
#再重启 sshd 服务.生成日志
[root@centos7 ~]#systemctl restart sshd
#验证是否生成日志并查看其中的内容
[root@centos7 ~]#cat /var/log/sshd.log #说明修改成功
Sep 8 23:55:29 centos7 sshd[1250]: Server listening on 0.0.0.0 port 22.
Sep 8 23:55:29 centos7 sshd[1250]: Server listening on :: port 22.
#上面对就的信息:时间 主机 服务 进程 ID 相关的信息
#如何防止日志删除?
[root@centos7 ~]#chattr +a /var/log/sshd.log
[root@centos7 ~]#lsattr /var/log/sshd.log
-----a---------- /var/log/sshd.log
[root@centos7 ~]#systemctl restart sshd
[root@centos7 ~]#cat /var/log/sshd.log #重启服务,查看日志有所增加
Sep 8 23:55:29 centos7 sshd[1250]: Server listening on 0.0.0.0 port 22.
Sep 8 23:55:29 centos7 sshd[1250]: Server listening on :: port 22.
Sep 8 23:57:31 centos7 sshd[1250]: Received signal 15; terminating.
Sep 8 23:57:31 centos7 sshd[1261]: Server listening on 0.0.0.0 port 22.
Sep 8 23:57:31 centos7 sshd[1261]: Server listening on :: port 22.
#注:这个功能看着很强大,其实不实用,因这样会让系统日志切割时报错,最主的是,黑客可以取消这个属性。
[root@centos7 ~]#chattr -a /var/log/sshd.log #取消,这里一定要取消,不然后面做日志切割报错当日志太多,导致日志很文件大怎么办?
2 实战-日志切割-搭建远程日志收集服务器
2.1 日志的切割
在 linux 下的日志会定期进行滚动增加,我们可以在线对正在进行回滚的日志进行指定大小的切割(动态),如果这个日志是静态的。比如没有应用向里面写内容。那么我们也可以用 split 工具进行切割;其中 Logrotate 支持按时间和大小来自动切分,以防止日志文件太大。
logrotate 配置文件:
/etc/logrotate.conf 以及 /etc/logrotate.d/ 这个子目录下的明细配置文件。
logrotate 的执行由 crond 服务调用的。
[root@centos7 ~]#vim /etc/cron.daily/logrotate #查看 logrotate 脚本内容
#!/bin/sh
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
#logrotate 程序每天由 cron 定时任务在指定的时间启动
#日志是很大的,如果让日志无限制的记录下去 是一件很可怕的事情,日积月累就有几百兆占用磁盘的空间,
#如果你要找出某一条可用信息: 海底捞针
#日志切割:
#当日志达到某个特定的大小,我们将日志分类,之前的日志保留一个备份,再产生的日志创建一个同名的文件保存新的日志.2.2 logrotate 配置文件详解 centos7 系统
[root@centos7 ~]#vim /etc/logrotate.conf
说明:(全局参数)
weekly : 每周执行回滚,或者说每周执行一次日志回滚
rotate: 表示日志切分后历史文件最多保存离现在最近的多少份 [rəʊˈteɪt] 旋转
(rotate 4 保留最近 4 份日志,以前的,第 5,6,7 等等都删掉)
create : 指定新创建的文件的权限与所属主与所属组
dateext : 使用日期为后缀的回滚文件 ,可以去/var/log 目录下看看
单独配置信息
/var/log/btmp { 指定的日志文件的名字和路径
missingok 如果文件丢失,将不报错
monthly 每月轮换一次
create 0664 root utmp 设置 btmp 这个日志文件的权限,属主,属组
minsize 1M 文件超过 1M 进行回滚(分割),所以大家要知道它不一定每个月都会进行分割,要看这个文件大小来定
rotate 1 日志切分后历史文件最多保存 1 份,不含当前使用的日志
}
其它参数说明
monthly: 日志文件将按月轮循。其它可用值为‘daily’,‘weekly’或者‘yearly’。
rotate 5: 一次将存储 5 个归档日志。对于第六个归档,时间最久的归档将被删除。
compress: 在轮循任务完成后,已轮循的归档将使用 gzip 进行压缩。
delaycompress: 总是与 compress 选项一起用,delaycompress 选项指示 logrotate 不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。
missingok: 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
notifempty: 如果日志文件为空,轮循不会进行。
create 644 root root: 以指定的权限创建全新的日志文件,同时 logrotate 也会重命名原始日志文件。
postrotate/endscript: 在所有其它指令完成后,postrotate 和 endscript 里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。
/var/lib/logrotate/status 中默认记录 logrotate 上次轮换日志文件的时间。2.3 实战-使用 logrotate 进行 ssh 日志分割
定义了 ssh 日志存储在/var/log/sshd 的基础上执行
[root@centos7 ~]#vim /etc/logrotate.d/sshd #创建一个 sshd 配置文件,插入内容
/var/log/sshd.log {
missingok
weekly
create 0600 root root
minsize 10M
rotate 3
}
#如果说我不想每周,或每月,我想一分钟分割一次日志,日志当然没有这样分割的,但你可以用计划任务调用这个脚本就行了
[root@centos7 ~]#crontab -e
*/1 * * * * logrotate -vf /etc/logrotate.d/sshd
[root@centos7 ~]#systemctl restart rsyslog
#预演,不实际轮询(切割)
[root@centos7 ~]#logrotate -d /etc/logrotate.d/sshd
reading config file /etc/logrotate.d/sshd
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /var/log/sshd.log weekly (3 rotations)
empty log files are rotated, only log files >= 1048576 bytes are rotated, old logs are removed
considering log /var/log/sshd.log
log does not need rotating (log has been already rotated)您在 /var/spool/mail/root 中有邮件
#强制轮询(切割),也就是说即使轮循条件没有满足,也可以通过加-f 强制让 logrotate 轮循日志文件
-v 显示指令执行过程
-f 强制执行
[root@centos7 ~]# logrotate -vf /etc/logrotate.d/sshd
[root@centos7 ~]#ls /var/log/sshd*
/var/log/sshd.log /var/log/sshd.log.1 /var/log/sshd.log.2 /var/log/sshd.log.3
#再次查看日志文件大小,已经为 0
[root@centos7 ~]#ll /var/log/sshd* -h
-rw-------. 1 root root 0 9月 9 00:18 /var/log/sshd.log2.4 配置远程日志服务器-实现日志集中的管理
实验拓扑图:

Server 端配置:
#关闭 selinux 和防火墙
[root@centos7 ~]#setenforce 0
[root@centos7 ~]#systemctl stop firewalld
[root@centos7 ~]#vim /etc/rsyslog.conf #使用 TCP 协议方式,收集日志
改:19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
为:
19 $ModLoad imtcp
20 $InputTCPServerRun 514
Centos8 把下面 2 行的注释去掉
24 #module(load="imtcp") # needs to be done just once
25 #input(type="imtcp" port="514")
注:使用 UDP 协议 速度快 不保证数据的完整,使用 TCP 协议 可靠.完整
[root@centos7 ~]#systemctl restart rsyslog #重新启动 rsyslog
#查看服务监听的状态:
[root@centos7 ~]#netstat -anlpt| grep 514
tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN 1538/rsyslogd
tcp6 0 0 :::514 :::* LISTEN 1538/rsyslogdClient 端配置:
[root@centos7 ~]#vim /etc/rsyslog.conf #在 90 行之后,插入
*.* @@192.168.2.71:514 #写入服务端的 ip 地址
#注: *.* 所有类别和级别的日志; @@192.168.2.71:514 服务端 tcp 协议的日志服务端的 IP 和端口
#重启 rsyslog 服务
[root@centos7 ~]#systemctl restart rsyslog.service服务端查看日志:
#动态查看日志
[root@centos7 ~]#tail -f /var/log/messages | grep '2.72' --color
#在客户端 xuegod64 进行测试
#语法: logger 要模拟发送的日志
[root@centos7 ~]# logger "aaaaa"
#服务器端到查看消息
[root@centos7 ~]#tail -f /var/log/messages
Sep 9 00:33:43 centos7 root: aaaaa总结:
服务器使用 udp 协议,客户端使用的配置文件中这一行只能有一个@ . @192.168.2.71:514
服务器使用 tcp 协议,客户端使用的配置文件中这一行必须有两个@@ . @@192.168.2.71:514
3 实战-配置公司内网服务器每天定时自动开关机
实战场景:为了节约公司开销,需要你设置公司的 svn 版本管理服务器,每天晚上 23:00 开机,每天早上 9:00 自动开机。
3.1 定时关机
[root@centos7 ~]# crontab -e
#写入以下内容
0 23 * * * /usr/sbin/shutdown -h now3.2定时开机
这个可以通过设置 bios(位于主板中的最底层控制系统)来实现,前提是 bios 支持电源管理。
进入 bios,一般是在开机后出现主板画面是按 Delete 这个键,部分品牌机可能按 F2,进入 bios 设置界面了。然后通过键盘上的箭头选择 Power Management Setup,就进入电源管理设置了。

通过回车进入这个设置后,选择 Wake Up Event Setup,回车选择 Press Enter。

最后,在这个界面内继续找到 Resume By RTC Alarm,回车选择一下。

继续回车选择,将 Disabied 更改为 Enabled,然后继续回车确定。然后再继续设置时间点和日期。

然后选择日期,并且选择你需要电脑每天需要在几点开机,当然,要保证你的主板时间是准确的。

假如你需要每天都定时开机,就选择 Every Day,,你如果想要在每天 6:45 开机,就通过数字键输入 06:15:00,最后,一般按 F10 进行保存,重启电脑后生效。

