1.1 什么是日志?
日志是记录系统每天发生的各种事情,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志主要的功能是审计和监测。它还可以实时地监测系统状态,监测和追踪侵入者。
Linux系统中,所有的日志文件都在/var/log下
1.2 日志的作用
1. 解决系统方面的错误
2. 解决网络方面的问题
3. 记录一些重要的事件
4. 解决安全方面的问题
1.3 Linux 常见的日志文件
1. /var/log/cron:
crontab(计划任务)服务的日志
2· /var/log/dmesg:
记录系统在开机的时候核心侦测过程所产生的各项信息。
3· /var/log/lastlog:
所有的帐号最近一次登陆系统时的相关信息
4· /var/log/maillog或/var/log/mail/* :
记录邮件的往来信息,其实主要是记录 sendmail (SMTP ) 和 dovecot (POP3) 所产生的讯息。 SMTP 是发信所使用的通讯协议, POP3 则是收信使用的通讯协议。 sendmail和dovecot 则分别是两套达成通讯协议的软件。
5· /var/log/messages:几乎所有的系统错误信息都会记录在此。( 很重要!!!)
6· /var/log/secure:
基本上,当涉及到需要输入账号密码的软件,当登录时都会被记录在文件中
7· /var/log/wtmp: 记录正确登录者的帐号信息
/var/log/faillog
记录错误登录者的账号信息
8· /var/log/httpd/*,
网络服务的日志文件,不同的网路服务有自己的登录的日志文件来记载它们自己产生的各种信息
1.4 日志文件所需相关服务 (daemon) 与程序
1.
syslogd:
主要记录系统与网络等服务的信息;
klogd:
主要记录内核产生的各项信息;
logrotate:
进行日志论滚,logrotate 是将旧的登录档更改名称,然后建立一个空的登录档,如此一来, 新的登录文件将重新开始记录,旧文件会保留一段时间,几个月左右, 如果这段时间没有问题,可以让系统自动的把它删除, 可以节省硬盘空间
2.日志的格式
# less /var/log/messages
注意: 不要用vim命令查看,@1.当你不小心改动日志时,并保存退出了,那么日志文件将不再记录日志了. @2.如果日志文件很大,vim会把整个日志文件读入内存,很容易造成内存溢出
日志的格式:
时间 主机名 相关的服务 发生事件的详细描述
Feb 6 04:44:44 tx1 sshd[2037]: Server listening on 0.0.0.0 port 22.
3.syslog配置文件
vim /etc/syslog.conf
@1.格式
服务或设备(facility) ,分隔符, 日志级别(priority),把日志记录到哪里
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg *
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages al
local7.* /var/log/boot.log
@2.syslog 认识的服务主要有以下这些
kern
内核信息
auth
(authpriv)用户授权,主要与认证有关的机制,如 login, ssh, su 等需要帐号的地方;
cron
计划任务的信息
lpr
与打印有关的信息
mail
与邮件有关的信息
news
新闻组服务器有关的信息
syslog
日志syslog生成的信息
uucp,news
新闻组信息
local0 ~ local7
自定义的服务
@3.日志的级别
none
不需要日志
debug
调试信息
info
一般的通知信息
notice
提醒信息
warning
警告
err
错误,比如因为配置错误 导致某些服务无法启动
crit
比error 还要严重的错误信息
alert
问题已经很严重了,比critical 还严重 ,需要立即采取动作
emerg
疼痛等级,指系统几乎要死机的状态!
@4.服务与日志的级别之间的分隔符
. 是 “>=”
.info:记录本身这个级别,并且记录高于这个级别的信息
.= 是 “==”
.=info:只记录info 这个级别的信息
.! 是“除了”
.!info:除了info 这个级别,其他信息都记录
.none:是 “不记录”
* 所有
*. 所有的服务
.* 所有的级别
@5.记录日志的位置
文件的绝对路径:通常就是放在 /var/log 里头的文件
打印机或其他设备:例如 /dev/lp0
输出到终端 /dev/console
用户名称:显示给用户!
远程主机:例如 @www.tx.com @ 后面写主机名或IP地址,当然对方主机也能支持才行!
*:表示『目前在线上的所有人
1.5. 日志文件的安全
1.可以用远程日志,就是把日志记录到其他机器上,这样的即使你的主机被入侵了,日志文件被删掉了,但是另外一台机器上还有重要的数据
2.可以将日志数据传送到打印机上面
3.可以把日志文件加上隐藏权限,这样文件就不能被删除,只能被追加。root可以去掉这个权限,然后进行删除的
#chattr +a /var/log/messages
但是这样,logrotate将无法工作,下面会说到,在有隐藏权限的情况下让logrotate工作
4.不要用vim打开日志文件
1.6日志服务器的设置
Server:
#vim /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-m 0 -r" //开启接收远程日志功能
#service syslog restart
日志服务器监听的端口为514
# netstat -lunp | grep syslog
udp 0 0 0.0.0.0:514 0.0.0.0:* 2913/syslogd
Client
# vim /etc/syslog.conf
*.* @192.168.8.70
# service syslog restart
1.7 logrotate 日志轮替
日志轮替主要是防止日志文件无限制的变大,syslog 利用的是 daemon 的方式来启动的的, 当有需求的时候就会被执行,但是 logrotate 却是在规定的时间到了以后才来�行登录档的轮替, 所以这个 logrotate 程序就要挂在 cron 底下进行, /etc/cron.daily/logrotate 就是记录了每天要进行的日志文件轮替
如图所示:当第一次执行完轮替后,原本的 messages 会变成 messages.1 而且会创建一个空的 messages 给系统来储存登录文件。而第二次执行轮替后,则 messages.1 会变成 messages.2 而 messages 会变成 messages.1 ,又造成一个空的 messages 来储存登录文件,如果我们仅保留三个文件,那么执行第四次时,则 messages.3 这个文件就会被删除,并由后面的较新的文件代替。
1.配置文件
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf 是主要的配置文件,logrotate.d 是一个目录, 该目录里面的所有文件都会被调入 /etc/logrotate.conf 当中来进行。如果在 /etc/logrotate.d/ 中没有指定一些详细设置,则以 /etc/logrotate.conf中的设置为默认值
2.相关软件:
#rpm -qa | grep logrotate
logrotate-3.7.4-12
3. vim /etc/logrotate.conf
# rotate log files weekly
weekly //轮替周期,一个星期轮替一次
# keep 4 weeks worth of backlogs
rotate 4 //保留几个旧的日志文件
# create new (empty) log files after rotating old ones
create //创建一个新的空日志文件
# uncomment this if you want your log files compressed
#compress //日志压缩
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d //在该目录下的配置文件也生效
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp { //对/var/log/wtmp进行的设置
monthly //轮替周期为一个月
minsize 1M //文件大小要超过1M,才进行轮替
create 0664 root utmp //创建的空日志文件的权限及所有者、所属组
rotate 1 //保留 1 个日志备份
}
/var/log/btmp {
missingok //如果日志文件丢失,进入到下一个不发出错误消息
monthly //轮替周期为一个月
minsize 1M //文件大小要超过1M,才进行轮替
create 0600 root utmp //创建的空日志文件的权限及所有者、所属组
rotate 1 //保留 1 个日志备份
}
1.8 日志轮滚的格式:
1.格式
文件名 {
sharedscripts 开始
prerotate 启动logrotate之前执行的命令
commands
endscript 结束
sharedscripts 开始
postrotate 启动logrotate之 后执行的命令
commands
endscript 结束
}
例:如果日志文件有隐藏权限怎么办?
#touch /var/log/tx.log
#chattr +a tx.log
#vi /etc/logrotate.d/tx
/var/log/tx.log {
monthly
size=5M
rotate 4
create
compress
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/usr/bin/killall -HUP syslogd //系统的syslogd重新读syslog.conf文件
/usr/bin/chattr +a /var/log/admin.log
endscript
}
2. 轮滚测试工具:
#logrotate -vf logfile
-v:启动显示模式,会显示logrotate运行的过程
-f:不论是否符合配置文件的数据,强制每个日志文件都进行轮替操作
[root@tx1 ~]# logrotate -v /etc/logrotate.conf
reading config file /etc/logrotate.conf //读取主配置文件
including /etc/logrotate.d //调用外部设置
reading config file acpid //外部设置
...................
...................
...................
Handling 17 logs //共有17个日志文件被记录
...................
considering log /var/log/messages //开始处理messages
log does not need rotating //时间未到,不需要改动
considering log /var/log/secure
log does not need rotating
# logrotate -v /etc/logrotate.d/tx
reading config file /etc/logrotate.d/tx
reading config info for /var/log/tx.log
Handling 1 logs
rotating pattern: /var/log/tx.log 10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/tx.log
log does not need rotating
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
# logrotate -vf /etc/logrotate.d/tx
reading config file /etc/logrotate.d/tx
reading config info for /var/log/tx.log
Handling 1 logs
rotating pattern: /var/log/tx.log forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/tx.log
log needs rotating
rotating log /var/log/tx.log, log->rotateCount is 5
renaming /var/log/tx.log.5.gz to /var/log/tx.log.6.gz (rotatecount 5, logstart 1, i 5),
old log /var/log/tx.log.5.gz does not exist
renaming /var/log/tx.log.4.gz to /var/log/tx.log.5.gz (rotatecount 5, logstart 1, i 4),
old log /var/log/tx.log.4.gz does not exist
renaming /var/log/tx.log.3.gz to /var/log/tx.log.4.gz (rotatecount 5, logstart 1, i 3),
old log /var/log/tx.log.3.gz does not exist
renaming /var/log/tx.log.2.gz to /var/log/tx.log.3.gz (rotatecount 5, logstart 1, i 2),
renaming /var/log/tx.log.1.gz to /var/log/tx.log.2.gz (rotatecount 5, logstart 1, i 1),
renaming /var/log/tx.log.0.gz to /var/log/tx.log.1.gz (rotatecount 5, logstart 1, i 0),
old log /var/log/tx.log.0.gz does not exist
log /var/log/tx.log.6.gz doesn't exist -- won't try to dispose of it
running prerotate script
renaming /var/log/tx.log to /var/log/tx.log.1
creating new log mode = 0644 uid = 0 gid = 0
running postrotate script
compressing log with: /bin/gzip