注:在Centos6.x以后的发行版本syslogd进程已经完全被rsyslogd所替代,下文依然按照syslog做讨论
登录文件:
就是记录系统活动信息的文件,主要记录时间,ip,什么服务,什么action,换句话就是说记录系统什么时候什么进程做了什么操作
登录文件的重要性:
.解决系统方面的错误;
.解决网络服务的问题:
.过往事件记录
Linux 常见的登录文件名及其作用:
./dev/log/cron:记录例行性工作安排crontab
./var/log/dmesg:记录开机系统核心侦测过程所产生的各项信息。
./var/log/lastlog:记录系统上所有的账号最近一次登录信息。
./var/log/mailog:记录来往邮件信息,主要记录sendmail与dovecot所产生的信息。
./var/log/messages:几乎系统发生的错误信息都会对记录正在这个文件里。
./var/log/secure:基本上,只要涉及到输入密码的的软件,那么登录的时候都会被记录在此文件中。
./var/log/wtmp,/var/log/failog:记录正确登录系统的账户信息与错误登录系统的账户信息。
./var/log/*:不同的网络服务会有他们不同的登录文件
登录文件的相关deamon与进程:
产生登录文件的方式基本上有两种方式:一种是由软件开发商自行定义写入的登录文件,另一种则由Linux distribution提供的登录文件管理服务统一管理。
你只要将讯息丢给这个服务,他就会进行分门别类的将各种信息放置到相关的文件日志里,这个服务就是syslogd这个服务。
除了syslogd这服务之外,系统核心专门提供系统核心登录日志服务klogd.日常系统不会产生大量的日志信息,如果日积月累那么单个的日志文件就会非常大,读取就会很耗费内存,那么linux给我提供了logroate服务,会自动将旧的日志文件改名保存,新建一个文件存放日志信息,过一段时间旧的日志文件就会被自动删除。
.syslogd
.klogd
.logroate
一般来说,系统产生的信息经过syslogd记录下来的数据,专门记录非内核的其他进程及设备产生的日志,当系统将控制权交给init后,那么系统产生的日志就由syslogd记录,每条都会记录几个重要的数据:
.time
.hostname
.daemon
.action
这些信息可以被修改,而且可以作为系统除错之用。
syslogd的配置文件:/etc/syslog.conf
syslogd可以负责主机产生各种的登录信息,而这些信息有严格的等级分。
服务名称:
syslog认识的服务主要有:
.auth(authpriv):主要与认证的有关机制,例如login,ssh,su
.daemon:就是例行性工作安排cron/at等产生的信息记录发地方
.kern:就是核心(kernel)产生的信息的地方
.lpr:打印相关的信息
.mail:与邮件收发有关的信息
.news:与文件组服务器的相关的东西
.syslog:就是syslogd这只进程
上面的都是syslog自行定制的服务,软件开发商可以透过呼叫上述服务的名称的接口来记录的软件,如下图:
那么syslogd进程需要记录各个进程及设备的日志文件,那么这有一个巨量的日志信息,所以那么就需要日志分类管理,来更好的管理各这种日志,这个规定的规范就由syslog.conf所定义,那么我现在就来研究一下syslog.conf日志:
信息等级:
系统日常产生大量的日志信息,有许多都是日常的日志信息,绝大多数的日志信息对我们对服务的日常故障的解决没有作用,那么对日志的信息的分级就有比较大的
作用力,可以更加的高效的对日常的工作管理,syslog分为七个等级:
1.info:一般信息
2.notice:只是比info级别高而已
3.warn:警告信息,可能会照成影响
4.error:错误信息,已经对系统运行产生影响
5.crit:严重的错误信息
6.alert:已经可能影响使系统当机
7.emerg:几乎错误已经造成当机,
除了这些等级外还有两个特殊的等级是debug(错误侦测)和none(不需要登录等级),当我们需要进行一些错误侦测或者忽略掉一些命令的时候就需要
这两种级别了。特别注意在日志信息之前还有[.=!]等链接符号:
. :代表【比后面的还要高的等级(含该等级)都要记录下来】的意思
.= :代表所需的等更久就是后面的等级而已
.! :代表不等于,也就是除了该等级以为的其他等级都记录
一般来说,我们比较常使用【.】这个链接符号,大家可以自己进入syslog.conf查看相关的设定,而且可以安装上面的语法以及参考syslog.conf自行设定。
登录文档的安全设置
登录内容的非常重要,如果可以随便被修改那么岂不是给想搞破坏的黑客留下了非常好的隐匿自己行为的方法,那么我们如何保护登录文档不被他人篡改,
那么就可以使用lsattr与chattr这两个命令,通过设定chattr的i选项就可以达到该文件连root也无法杀掉,但是文件就无法增加新的日志消息,那么我就使用a这个选项就可以达到只可以增加新内容,无法对旧的内容做出修改。
登录文档服务器的设定:
在syslog.conf文件中,可以将登录数据传送到打印机或者远程主机上,在Centos上默认这个服务没有启动,可以通过/etc/sysconfig/syslog文件的修改开启此项功能。
登录文件的轮替(logrotate)
syslog是利用daemon的方式启动,当有需求的时候就立刻被执行,但是logrotate却是在规定的时间才进行登录文件的轮替,所以这个logrotate是系统例行性工作,
那么他就是挂载cron下进行执行,可以查看/etc/cron.daily/里的文件有这个文件。
logrotate的配置文件:
./etc/logrotate.conf:主要的参数的文件
./etc/loogrotate..d/:目录内所有文件都会被主动读入/etc/logrotate.conf当中来执行。
第一次进行轮回,logrotate将旧的日志文件命名为Message为Message1,并创建一个新的空的Message文件,第二次轮回,logrotate就是将上一次Message1文件改名为Message2,
并将第一次新创建的Message文件命名为Message1,再创建一个新的空的Message文件来存储新的日志信息,依次类推进行轮替。
/etc/logroate.d/syslog文件:
.文件名:被处理的登录文件绝对路劲文件名写在前面,可以使用空格符分割多个登录文件
.参数:上述文件进行轮替的参数使用{}包括起来;
.执行脚本:可呼叫外部指令来进行额外的命令下达,这个设定需要与sharescripts..endscripts设定合用才行,使用环境为:
.prerotate:在启动logrotate之前进行的指令,例如修改文件的属性等操作。
.postrotate:在做完2logrotate之后启动的指令,例如重新启动(kill -HUP)弄个服务。
.Prerotate与protrotate对已加上特殊属性的文件处理是非常的重要。
特别注意:/bin/kill -HUP 这一行的目的在于将系统的syslogd重新以其参数文件(syslog.conf)读入一次,这是由于我们新建立一个新的空日志文件,如果不重新执行此服务,
那么他依然指向旧文件,虽然已经被改名,但是它的inode号并没有变的。
实际测试logrotate的动作:
logrotate -vf[] logfile
-v:启动显示模式,会显示logrotate的运作过程
-f:不论是否符合配置文件的数据,强制每个登录文档进行rotate的动作
登录文档:
登录文档的分析非常重要,我们可以使用vi进入登录文件去查阅相关的信息,而系统也提供一些软件来帮助我们查看登录文档,例如之前我们谈过的last,lastlog,dmesg等,
不过这些数据都很分散,Centos有提供logwatch这个登录文件分析进程,可以用来查看登录文件。