登录档简单地说就是记录系统活动信息的几个档案,主要记录系统在什么时候由哪些程序进行了什么行为,发生了什么事件等
常见的登录档:
/var/log/dmesg:记录开机时核心侦测过程产生的信息
/var/log/lastlog:记录系统中所有账号最近一次登录时的相关信息
/var/log/mail.log:记录邮件的来往信息
/var/log/syslog:系统发生的错误信息或是重要的信息都会记录在这个档案中,十分重要(CentOS是/var/log/messages)
/var/log/auth.log:涉及到需要输入账号密码的软件,登录时的相关信息都会被记录在这个档案中(CentOS是/var/log/secure)
/var/log/wtmp,/var/log/faillog:记录正确登入系统者的账户信息(wtmp)和登入错误时所使用的账户信息(faillog)
登录档的产生有两种方式,一种是软件开发商自行定义写入的登录档与相关格式,另一种则是Linux distribution提供的登录档管理服务来进行统一管理。Ubuntu提供rsyslog这个服务来统一管理登陆档案
但是由于登录档会持续记录,不进行处理的话会占用大量资源,所以需要对登录档进行备份和更新,可以通过logrotate(登录档轮替)来自动处理。它的主要行为是将旧的登录档更改名称,然后建立一个新的空登录档进行以后的记录。旧的登录档保存一段时间后会被自动删除
rsyslogd:主要记录登录系统与网络服务等的信息
klogd:主要记录登录核心产生的各项信息
logrotate:主要进行登陆档的轮替
一般系统产生的信息经过rsyslog的记录会包括以下数据:
1. 事件发生的日期与时间
2. 发生事件的主机名
3. 启动事件的服务名称或函数名
4. 信息的实际内容
rsyslog的配置文件:/etc/rsyslog.conf
这个配置文件是rsyslogd这个daemon的配置文件,主要规定了(1)什么服务的(2)什么等级的信息(3)需要被记录在哪里(装置/文件)。Ubuntu下的/etc/rsyslog.conf主要包含了/etc/rsyslog.d/下的配置文件,其中主要的是/etc/rsyslog.d/50-default.conf。配置文件中的语法是:服务名称[.=!]信息等级 记录信息的文件/装置/主机名
1. rsyslog认识的服务主要有:
上面列出的都是rsyslog自行制定的服务名称,软件开发商可以通过呼叫上述服务名称来记录他们的软件信息
2. rsyslog将信息分为七个等级,由低到高依次为:
除此之外,还有两个特殊的等级debug和none,分别用于错误侦测和忽略某些服务的信息
3. 连接符号有:
. 代表记录等级大于等于信息等级的信息(最常用)
.= 代表只记录后接等级的信息
.! 记录除了后接等级之外的所有其他信息
4. 记录信息的文件/装置/主机名
a. 档案的绝对路径:通常是/var/log下的档案
b. 打印机或其他,如/dev/lp0这个打印机
c. 使用者名称
d. 远程主机,需要对方也支持,如@www.vbird.tsai
e. *,代表当前在线的所有人,类似wall指令
配置文件中这一栏前面可能会有"-",它表示将产生的信息先存储在速度较快的buffer中,积累到一定程度再一次性写入磁盘,这样能够提高系统的性能,但如果系统不正常关机可能会导致数据的遗失
在/etc/rsyslog.conf中,如果要记录多个程序,需要用分号分开,如: new.*;cron.* /var/log/cronnews
不记录cron,mail和new的信息:
*.*;new,cron,mail.none /var/log/syslog
*.*,new.none;cron.none;mail.none /var/log/syslog
使用","分隔时,等级只要接在最后一个即可
要想修改/etc/rsyslog.conf以增加新的记录行为,需要先对该档案进行设定,然后重启rsyslog服务:service rsyslog restart(要以root身份执行)
如果有多台主机需要进行管理,可以将一台设置为"登录文件服务器",则其他主机可以作为客户端将本机的登录信息传送到登录文件服务器,通过访问登录文件服务器就可以查询所有主机的登录档。该功能的预设端口是UDP的514。Ubuntu下实现的步骤是,首先在server端将/etc/rsyslog.conf中UDP和TCP各自两行对应的syslog reception语句的注释去掉,然后重启rsyslog服务;在client端要在/etc/rsyslog.d/下创建文件"10-rsyslog.conf",在其中加入内容"*.* @x.x.x.x:514"("x.x.x.x"是server的ip)然后重启rsyslog服务即可。
(具体参见 https://vexxhost.com/resources/tutorials/how-to-setup-remote-system-logging-with-rsyslog-on-ubuntu-14-04-lts/)
登录档的轮替(logrotate)
rsyslog是利用stand alone daemon的方式来启动的,有需求的时候立刻就会被执行;而logrotate却是在规定时间到来后才进行,这个程序理所应当的就会被挂在cron底下(在/etc/cron.daily/下)。logrotate的配置文件主要有两个位置:
/etc/logrotate.conf:主要的配置档案,规定logrotate的默认设置
/etc/logrotate.d/:其中会包含各个服务的登录档轮替配置文件,这些文件会被/etc/logrotate.conf主动读入
登录档轮替的过程是,原登录档会被重命名或打包后重命名。如/var/log下旧的syslog会变成syslog.1、syslog.2.gz、syslog.3.gz等(Ubuntu貌似从第二个开始进行压缩)。logrotate配置文件的主要内容有:
weekly:每周进行一次rotate
rotate 4:保留4个登录档
create:由于登录档被重命名,因此重命名后要创建新的空登录档进行记录
#compress:默认不进行压缩
以上是针对所有登录档的默认设置,可以针对某一特定登录档单独进行设置,如:
/var/log/wtmp {
monthly
minsize 1M #档案容量超过1M才进行轮替,所以真正执行时不一定会一个月一次
create 0644 root utmp #指定新建档案的权限与所属的账号和群组
rotate 1
}
所以可以总结出logrotate的的写法为:
档名:被处理的登录文件的绝对路径,多个档案间可以用空格隔开
参数:上述档名进行轮替的参数,用"{}"括起
执行脚本:在"{}"中,可以呼叫外部指令来执行额外的命令,需要与sharedscripts ... endscript合用,可用的环境包括:(1)prerotate:在启动logrotate之前进行,如修改登录文件的属性等动作;(2)postrotate:在执行完logrotate后启动的指令,例如重启某个服务。prerotate和postrotate不能写到一个sharedscirpts ... endscripts之中,如果既需要prerotate又需要postrotate,则要写两个sharedscripts ... endscript
具体形式为:
{
...
sharedscripts
prerotate/postrotate
...
endscript
}
logrotate [-vf] logfile
-v:显示logrotate的运行过程
-f:不论是否符合配置文件的数据,强制每个登录档都进行rotate
例:logrotate -v /etc/logrotate.conf