在目前Linux系统中常见的登录文件有:
* /var/log/secure:记录登录系统访问数据的文件,如:pop3,ssh,telnet,ftp等。
* /var/log/wtmp:记录登录者的信息数据,由于本文件已编码过,所以必须使用last命令来读取出文件的内容。
* /var/log/messages:这个文件只记录系统错误信息(或者是重要信息)都会记录在这个文件中
* /var/log/boot.log:记录开机或一些服务启动时所显示的启动或关闭信息。
* /var/log/maillog或/var/log/mail/*:记录邮件访问或往来(sendmail与pop3)的用户记录
* /var/log/cron:记录crontab例行性服务的内容
* /var/log/httpd,/var/log/news,/var/log/mysql.log,/var/log/samba:分别是几个网络服务的记录文件
一、Linux系统的登录程序:syslogd
1.配置文件:/etc/syslog.conf
这个文件的语法如下:
服务名称[.=!]信息等级 信息记录的文件名或设备或主机
#例如mail.info /var/log/maillog_info
简单说明一下
a) 服务名称
syslog识别的服务主要有:
l auth,authpriv:主要是与认证有关的机制,如telnet,login,ssh都使用此机制
l cron:与例行性命令cron/at有关的信息
l daemon:与守护程序有关的信息
l kern:与核心有关的信息
l lpr:打印相关信息
l mail:邮件相关的信息
l news:与新闻用户组服务器有关的信息
l syslog:就是syslogd这个程序本身产生的信息
l user,uucp,local0~local7:与类UNIX机器有关的信息
b) 信息等级
基本上,系统将信息分为7个主要的等级,按顺序如下:
l info:基本的信息说明
l notice:比info更需要注意的一些信息
l warning或warn:告警信息,可能有问题,但还不至于影响到守护程序运行的信息
以上三个信息都是在告诉一些基本信息,不会造成一些系统运行问题
l err或error:一些重大的错误信息
l crit:比error还要严重的错误信息,这个crit是临界点(critical)缩写、
l alert:警告,比crit还要严重的问题
l emerg或panic:这个等级指系统几乎要死机。该错误表明核心无法顺利运行
要特别注意,在信息等级之前还有[.=!]连接符号,表示:
l (.):表示“比后面还有高的等级(含该等级)都记录下来”
l (.=):表示所需要的等级就是等号后面的等级,其他的都不要
l (.!):表示不等于,即除了该等级之外的其他等级都记录
c) 信息记录的文件名或配置或主机
l 文件的绝对路径:通常就是放在 /var/log 里头的文件
l 打印机或其它:例如 /dev/lp0 这个打印机装置
l 用户名称:显示给用户
l 远程主机:例如@oscar.adsldns.org,当然,也需要对方主机支持才行
l (*):表示“当前在线的所有人”,类似wall命令的意义
范例一:将新闻用户组数据(news)及例行性命令的信息(cron)都写入到一个称为/var/log/cronnews的文件中,但是这两个程序的警告信息记录在/var/log/cronnews.warn news.*;cron.* /var/log/cronnews news.=warn;cron.=warn /var/log/cronnews.warn 范例二:将message这个文件需要记录所有的信息,但是就是不想要记录cron,mail及news的信息 *.*;news,cron,mail.none /var/log/messages *.*;news.none;cron.none;mail.none /var/log/messages 使用(,)分割时,等级只要接在最后一个即可,如果是以(;)来分隔,那么就需要将服务与等级都写上去。
2.登录文件主机的简单设置
范例:
或
如果在要架设一台主机专门用来记录其他主机的登录信息,这样就可以直接进入该主机就可以实现同时观察其他主机的信息的效果。配置如下:
syslog 514 /udp #特别注意,/etc/services里面必须要有这一行,没有则手动增加 [root@redflag ~]# vi /etc/sysconfig/syslog # 找到这一行: SYSLOGD_OPTIONS=”-m 0” #改为 SYSLOGD_OPTIONS=”-m 0 -r” [root@redflag ~]# /etc/init.d/syslog restart 这样在主机端的设置就已经完成了。 在客户端,只要指定某个信息传输到这台主机即可。 [root@redflag ~]# vi /etc/syslog.conf *.* @192.168.2.231 #这里假设刚才设置的主机是231这台
[root@redflag ~]# grep 514 /etc/services
二、登录文件的轮替:logrotate
syslog使用守护程序的方式来启动,当有需要的时候,立刻就会执行。但logrotate却是在规定的时间到来之后才进行登录文件的轮替,所以这个logrotate程序是挂在cron下面进行的(/etc/cron.daily/logrotate)。logrotate程序的参数设置文件位置:/etc/logrotate.conf和/etc/logrotat.d/
logrotat.conf是主要的参数文件,logrotate.d是一个目录里面的所有文件都会主动读入/etc/logrotat.conf中。在/etc/logrotate.d/里面的文件中,没有规定到的细节设置,以/etc/logrotate.conf文件的规定来指定默认值。logrotate的主要功能就是将旧的登录文件移到旧文件,并且重新建立一个新的空文件来记录。
下面说明一下logrotate的内容:
weekly # 每个礼拜进行一次 rotate 的工作 rotate 4 # 默认保留四个登录文件 create #建立新的登录文件来记录 #compress #对登录文件进行压缩,登录文件的扩展名会变成messages.1.gz include /etc/logrotate.d #将该目录下的所有文件都读进来进行轮替工作 /var/log/wtmp { monthly create 0664 root utmp rotate 1 }
#这个段落大意是:
[root@redflag ~]# cat /etc/logrotate.conf
#1.每个月进行一次登录轮替工作
#2.将文件的权限设置为644,且拥有者为root,用户组为utmp
#3.仅保存前一个月的轮替
上面大致介绍了/var/log/wtmp这个文件的设置,但是还是不很详细,下面我们以 /etc/logrotate.d/syslog这个文件来进行说明:
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
[root@redflag ~]# cat /etc/logrotate.d/syslog
正确的 logrotate 的写法中:
* 将登录文件名称(包含绝对路径)写在前面,可以使用空格符分隔多个登录文件;
* 用{ }包括所有的设置;
* 设置的项目与之前提到的相同,并且可以加入轮替之前(pre)与之后(post)的一些特殊执行的命令。这个设置需与sharedscripts…endsript设置合用。
----prerotate:在启动logrotate之前进行的命令,例如修改登录文件的属性
----postrotate:在做完logrotate之后执行的命令,例如重新启动(kill -l或kill -HUP)某个服务
----对于已加上特殊属性的文件处理,prerotate与postrotate是相当重要的
范例:假设/var/log/messages加上了chattr +a属性,这个时候需要对syslog文件进行设置才能进行日志轮替的操作。
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { sharedscripts prerotate /usr/bin/chattr -a /var/log/messages postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true /usr/bin/chattr +a /var/log/messages endscript } 注意,这里/bin/kill……的含义在于将系统的syslogd重新读入一次参数文件(syslog.conf)
[root@redflag ~]# vi /etc/logrotate.d/syslog
三、测试logrotate的操作
在设置完成后,我们需要测试登陆文件的设置是否正确。使用的命令是:logrotate
[root@redflag ~]# logrotate [-vf] logfile
参数:
-v:启动显示模式,会显示logrotate运行的过程
-f:强制每个登陆文件都进行rotate
下面以一个范例来总结之前所说的内容。
* 登陆文件轮替一个月一次; * 保存5个备份文件 [root@redflag ~]# chattr +a /var/log/admin.log [root@redflag ~]# vi /etc/logrotate.d/admin.log /var/log/admin.log{ monthly size=10M rotate 5 nocompress sharedscripts prerotate /usr/bin/chattr –a /var/log/admin.log endscript sharedscripts postrotate /usr/bin/killall –UHP syslogd /usr/bin/chattr +a /var/log/admin.log endscript } [root@redflag ~]# logrotate –vf /etc/logrotate.d/admin.log
范例:假设已有/var/log/admin.log文件,现在要将该文件加上+a属性,而且设置下面的相关信息:
* 该登陆文件若大于10M则主动轮替,不考虑一个月的期限