Linux上的日志系统早期的版本有syslog,后来推出了其升级版syslog-ng(即下一代),该版本又可分为开源版和商业版。下面我们主要介绍syslog。那么日志是用来做什么的呢?
1. 记录系统和内核的运行信息;
2. 记录每一次网络连接和它们的源IP地址、长度,有时还包括攻击者的用户名和使用的操作系统;
3. 记录远程用户申请访问哪些文件;
4. 记录用户可以控制哪些进程;
5. 记录具体用户使用的每条命令。
6. 等……
l 连接时间日志记录在/var/log/wtmp和/var/run/utmp中,用于跟踪谁在何时登录到系统;
l 进程统计日志(pacct或acct)给系统中的基本服务提供命令使用统计(默认不激活,要想激活该服务,可使用该命令激活:# accton /var/account/pacct);
l 错误日志由syslogd后台进程记录,各种系统守护进程、用户程序通过调用函数syslog向文件/var/og/messages记录值得注意的事件。
Ø syslogd:系统,记录非内核产生的信息
Ø klogd:内核,专门负责记录内核产生的信息
kernel初始化时的所有日志信息都将由klogd负责,一旦控制权由内核转交给/sbin/init后,日志信息都将由syslogd来负责,除非是与内核相关的信息。kernel初始化时因还没有虚拟终端,所有信息都显示在物理终端(/dev/console)上,系统初始化完成后内核产生的所有日志信息都将被记录在/var/log/dmesg文件中,可使用如下命令查看内核信息:# dmesg 或 # cat /var/log/dmesg
上边提到了日志滚动,什么是日志滚动呢?日志需要滚动(日志切割):日志应经常滚动,以免日志文件过大分析起来不便。比方说,系统运行一段时间后,messages因记录信息会比较大,我们知道单个日志文件过大当系统出现问题时,分析起来不方便,所以就需要对日志文件进行分割。对日志文件进行分割时,会产生一个以.X(1,2,3)结尾的与原日志文件同名的文件,如:当messages文件第一次滚动时,原文件会变成messages.1,同时会产生一个新的messages文件;当messages文件第二次滚动时,原来的messages.1文件变成messages.2,而messages变成messages.1,同时产生新的messages文件。
- 常用的日志文件说明如下:
- boot.log 记录系统在引导过程中发生的事件。
- cron 记录crontab守护进程crond所派生的子进程的动作。
- maillog 记录电子邮件的活动。
- acct/pacct 记录用户命令。
- lastlog 记录最近几次成功登录的事件和最后一次不成功的登录。
- messages 从syslog中记录信息(有的链接到syslog文件)。
- sulog 记录su命令的使用。
- syslog 从syslog中记录信息(通常链接到messages文件);
- utmp 记录当前登录用户的信息。
- wtmp 一个用户每次登录进入和退出时间的永久记录。另外,wtmp和utmp文件都是二进制文件,需要使用who、w、users、last和ac命令查看它们包含的信息。
- # chkconfig --list syslog :可查看系统有没有启动该服务
- # service syslog status :可查看该服务的两个进程运行情况
syslog的配置文件为/etc/syslog.conf,在配置文件中,对日志系统的格式做出了明确的定义,其格式为:facility.priority action ,其中syslog.conf 的第一列facility.priority用来指定日志功能和日志级别,中间用.隔开,可以使用*来匹配所有的日志功能和日志级别, "设备" 标识发出消息的子系统,可以把同一类型的消息组合在一起,"优先级" 表示消息的重要性,其范围从debug (最不重要)到emerg (最重要)。第二列action定义消息的分发目标,或收到消息后如何处理。下面具体介绍下facility、priority和action都包含哪些含义。
- facility 指定 syslog 功能,可以理解为日志的来源或设备,目前常用的facility有以下几种:
- auth 由 pam_pwdb 报告的认证活动
- authpriv 包括特权信息如用户名在内的认证活动
- cron 与任务计划有关的信息
- daemon 与 inetd 守护进程有关的信息
- kern 内核信息,首先通过 klogd 传递
- lpr 与打印服务有关的信息
- mail 与电子邮件有关的信息
- mark syslog 内部功能用于生成时间戳
- news 来自新闻服务器的信息
- security 安全相关的信息,与auth 类似
- syslog 由 syslog 生成的信息
- user 由用户程序生成的信息
- uucp 由 uucp 生成的信息
- local0----local7 与自定义程序使用,例如使用 local5 做为 ssh 功能
- * 通配符代表除了 mark 以外的所有功能
- priority(log level)日志的级别,决定信息的重要性。 与每个功能对应的优先级是按一定顺序排列的,emerg 是最高级,其次是 alert,依次类推。缺省时,在 /etc/syslog.conf 记录中指定的级别为该级别和更高级别。如果希望使用确定的级别可以使用两个运算符号!(不等)和=。
- 例如:user.=info 表示告知 syslog 接受所有在 info 级别上的 user 功能信息。以下的等级重要性逐次递减:
- emerg 该系统不可用
- alert 需要立即被修改的条件
- crit 阻止某些工具或子系统功能实现的错误条件
- err 阻止工具或某些子系统部分功能实现的错误条件
- warning 预警信息
- notice 具有重要性的普通条件
- info 提供信息的消息
- debug 不包含函数条件或问题的其他信息
- none 没有重要级,通常用于排错
- * 所有级别,除了none
- 注:当我们指定记录某一级别的日志信息时,该级别及比该级别高的日志信息也会被记录下来
- action 字段为动作域,所表示的活动具有许多灵活性,特别是,可以使用名称管道的作用是可以使 syslogd 生成后处理信息。syslog 主要支持以下活动:
- file 将消息追加到指定的文件尾
- terminal 或 print 完全的串行或并行设备标志符
- @host 远程的日志服务器(将日志记录在远程主机上,在某些情况下可加强日志安全)
- username 将消息写到指定的用户
- named pipe 指定使用 mkfifo 命令来创建的 FIFO 文件的绝对路径。
- * 将消息写到登录到系统上的所有用户,一般emerg级别的日志是这样定义的
- 注:在/etc/sysconfig/syslog文件中做如下修改可实现作为日志服务器使用
- # Options to syslogd
- # -m 0 disables 'MARK' messages.
- # -r enables logging from remote machines
- # -x disables DNS lookups on messages recieved with -r
- # See syslogd(8) for more details
- SYSLOGD_OPTIONS="-r -m 0" # -r选项默认不启用,然后重启日志服务即可
- /etc/syslog.conf配置文件定义格式例子:
- mail.info /var/log/mail.log :表示将mail相关的,级别为info及info以上级别的信息记录到var/log/mail.log文件中
- auth.=info @172.16.0.1 :表示将auth相关的,级别为info的信息记录到172.16.0.1主机上
- mark.!=warn : 表示记录与mark相关的,除了error级别以外的所有信息
- mark.!warn :与mark.warn相反,表示只记录与mark有关的比warn级别低的日志信息
- *.info : 表示记录所有info级别的所有日志信息
- auth.* :表示记录与auth相关的所有级别的信息
- *.* : 表示记录所有功能或设施所有级别的信息
- cron.info;mail.info :表示记录cron和mail有关的,info级别的及以上的信息,多个日志来源可以用";" 隔开
- cron,mail.info : 意义同上
- mail.*;mail.!=info :表示记录与mail相关但不包含info级别的所有其他级别的信息
- 下面一起来看一下syslog配置文件/etc/syslog.conf中的内容,其中#表示注释信息,帮助理解,可忽略,这里只贴出非注释信息:
- *.info;mail.none;authpriv.none;cron.none /var/log/messages
- 表示除了邮件、权限、任务计划外的所有inifo及以上级别的信息都记录在/var/log/messages中
- authpriv.* /var/log/secure
- 表示所有与权限或授权有关的,所有级别的信息都记录在/var/log/secure文件中,该文件权限比较特殊,为600,仅允许管理员读取
- mail.* -/var/log/maillog
- 表示与邮件有关的,所有级别的信息都记录在/var/log/maillog文件中,其中-表示异步写入磁盘,不写表示同步写入磁盘
- cron.* /var/log/cron
- 表示与任务计划有关的所有级别的日志信息都记录在/var/log/cron文件中
- *.emerg *
- 表示emerg级别的所有信息通知所有登陆该系统的所有用户
- uucp,news.crit /var/log/spooler
- 表示uucp和新闻有关的,crit级别及以上的所有信息记录在该文件中
- local7.* /var/log/boot.log
- 用户自定义的,不管什么级别都记录在该文件中
如果自己想要修改日志中定义的格式,可在该文件/etc/syslog.conf中修改,但不会立即生效,要想立即生效,需重新载入该服务,即使用如下命令重新装载日志服务:# service syslog reload ,该命令可实现不用重启服务就可以使其读取配置文件,即向系统发送1号信号;如果选择如下命令# service syslog restart 重启日志服务,可能会导致在重启时正好有其它日志系统正在向syslog发送信息,但因重启日志服务syslog将收不到信息的情况,因此一般不建议重启日志服务
- weekly #按周滚动
- rotate 4 #表示保留4个历史版本
- create #创建新的日志,以上几个为全局定义,如果某个日志文件没有定义,就从此处继承,如果定义了就使用自己已定义好的
- include /etc/logrotate.d #包含多个片段
- /var/log/wtmp {
- monthly #按月滚动
- minsize 1M #最小为1M
- create 0664 root utmp #创建新的日志文件,权限为0664,用户为root,文件名为utmp
- rotate 1 #保留1个历史版本
- }
- /var/log/btmp {
- missingok #如果此前没有也没有关系
- monthly
- minsize 1M
- create 0600 root utmp
- rotate 1
- }