本文主要是介绍第十九章 syslogd :记录登录文件的服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
刚刚提到说 Linux 的登录文件主要是
由 syslogd 在负责,那么你的 Linux 是否有启动 syslogd 呢?而且是否有配置启动时启动呢?呵呵!检查一下先:
看到 syslog 这个服务名称了吧?所以知道他已经在系统中工作罗!好了,既然本章主要是讲登录文件,那么你知道登录文件的内容是如何展现的? syslog 的配置档在哪里?如何配置?如果你的 Linux 主机想要当作整个局域网的登录文件服务器时,又该如何配置? 底下就让我们来玩玩这玩意!
登录文件内容的一般格式
一般来说,系统产生的信息经过 syslog 而记录下来的数据中,每条信息均会记录底下的几个重要数据:
事件发生的日期与时间;
发生此事件的主机名称;
启动此事件的服务名称 (如 samba, xinetd 等) 或函式名称 (如 libpam ..);
该信息的实际数据内容。
当然,这些资讯的『详细度』是可以修改的,而且,这些资讯可以作为系统除错之用呢! 我们拿登录时一定会记载帐号资讯的 /var/log/secure 为例好了:
我们拿第一笔数据来说明好了,该数据是说:『 在三月14日 (Mar 14) 的下午 15:38 分,由 www 这部主机的 atd [PID 为 18701] 传来的消息,这个消息是透过 pam_unix 这个模块所提出的。信息内容为 root (uid=0) 这个帐号已经开启 atd 的活动了。』有够清楚吧! 那请您自行翻译一下后面的 4 条信息内容是什么喔!
其实还有很多的资讯值得查阅的呢!尤其是 /var/log/messages 的内容。记得一个好的系统管理员, 要常常去『巡视』登录文件的内容喔!尤其是发生底下几种情况时:
当你觉得系统似乎不太正常时;
某个 daemon 老是无法正常启动时;
某个使用者老是无法登陆时;
某个 daemon 运行过程老是不顺畅时;
还有很多啦!反正觉得系统不太正常,就得要查询查询登录文件就是了。
syslog 的配置档:/etc/syslog.conf
什么?登录文件还有配置档?喔!不是啦~ 是 syslogd 这个 daemon 的配置档啦! 我们现在知道 syslogd 可以负责主机产生的各个资讯的登录,而这些资讯本身是有『严重等级』之分的, 而且,这些数据最终要传送到哪个文件去是可以修改的呢,所以我们才会在一开头的地方讲说, 每个 Linux distributions 放置的登录文件档名可能会有所差异啊!
基本上, syslog 针对各种服务与信息记录在某些文件的配置档就是 /etc/syslog.conf, 这个文件规定了『(1)什么服务 (2)的什么等级信息 (3)需要被记录在哪里(装置或文件)』 这三个咚咚,所以配置的语法会是这样:
我们将上面的数据简单的分为三部分来说明:
服务名称
syslog 本身有规范一些服务,你可以透过这些服务来储存系统的信息。syslog 认识的服务主要有底下这些: (可使用 man 3 syslog 查询到相关的资讯)
服务类别 说明
auth (authpriv) 主要与认证有关的机制,例如 login, ssh, su 等需要帐号/口令的咚咚;
cron 就是例行性工作排程 cron/at 等产生信息记录的地方;
daemon 与各个 daemon 有关的信息;
kern 就是核心 (kernel) 产生信息的地方;
lpr 亦即是列印相关的信息啊!
mail 只要与邮件收发有关的信息纪录都属於这个;
news 与新闻群组服务器有关的东西;
syslog 就是 syslogd 这支程序本身产生的资讯啊!
user, uucp, local0 ~ local7 与 Unix like 机器本身有关的一些信息。
上面谈到的都是 syslog 自行制订的服务名称,软件开发商可以透过呼叫上述的服务名称来记录他们的软件。 举例来说, sendmail 与 postfix 及 dovecot 都是与邮件有关的软件,这些软件在设计登录文件记录时, 都会主动呼叫 syslogd 内的 mail 服务名称 (LOG_MAIL),所以上述三个软件 (sendmail, postfix, dovecot) 产生的信息在 syslog 看起来,就会『是 mail 』类型的服务了。我们可以将这个概念绘制如底下的图示来理解:
tu
另外, 每种服务所产生的数据量其实差异是很大的,举例来说, mail 的登录文件信息多的要命, 每一封信件进入后, mail 至少需要记录『寄信人的资讯;与收信者的信息』等等; 而如果是用来做为工作站主机的,那么登陆者 (利用 login 登录主机处理事情) 的数量一定不少,那个 authpriv 所管辖的内容可就多的要命了。
为了让不同的资讯放置到不同的文件当中,好让我们分门别类的进行登录文件的管理, 所以罗, 将各种类别的服务之登录文件,记录在不同的文件里面,就是我们 /etc/syslog.conf 所要作的规范了!
信息等级
同一个服务所产生的信息也是有差别的, 有启动时仅通知系统而已的一般信息 (information), 有出现还不至於影响到正常运行的警告信息 (warn) ,还有系统硬件发生严重错误时,所产生的重大问题信息 (error 等等); 信息到底有多少种严重的等级呢?基本上,syslog 将信息分为七个主要的等级,依序是这样的(由不重要排列到重要信息等级):
等级 等级名称 说明
1 info 仅是一些基本的信息说明而已;
2 notice 比 info 还需要被注意到的一些资讯内容;
3 warning
(warn) 警示的信息,可能有问题,但是还不至於影响到某个 daemon 运行的资讯;基本上, info, notice, warn 这三个信息都是在告知一些基本资讯而已,应该还不至於造成一些系统运行困扰;
4 err
(error) 一些重大的错误信息,例如配置档的某些配置值造成该服务服法启动的资讯说明, 通常藉由 err 的错误告知,应该可以了解到该服务无法启动的问题呢!
5 crit 比 error 还要严重的错误资讯,这个 crit 是临界点 (critical) 的缩写,这个错误已经很严重了喔!
6 alert 警告警告,已经很有问题的等级,比 crit 还要严重!
7 emerg
(panic) 疼痛等级,意指系统已经几乎要死机的状态! 很严重的错误资讯了。通常大概只有硬件出问题,导致整个核心无法顺利运行,就会出现这样的等级的信息吧!
除了这些有等级的信息外,还有两个特殊的等级,那就是 debug(错误侦测等级) 与 none (不需登录等级) 两个,当我们想要作一些错误侦测,或者是忽略掉某些服务的资讯时, 就用这两个咚咚吧!
特别留意一下在信息等级之前还有 [.=!] 的连结符号喔!他代表的意思是这样的:
. :代表『比后面还要高的等级 (含该等级) 都被记录下来』的意思,例如: mail.info 代表只要是 mail 的资讯,而且该资讯等级高於 info (含 info 本身)时,就会被记录下来的意思。
.=:代表所需要的等级就是后面接的等级而已, 其他的不要!
.!:代表不等於, 亦即是除了该等级外的其他等级都记录。
一般来说,我们比较常使用的是『.』这个连结符号啦!^_^
信息记录的档名或装置或主机
再来则是这个信息要放置在哪里的纪录了。 通常我们使用的都是记录的文件啦!但是也可以输出到装置呦! 例如打印机之类的!也可以记录到不同的主机上头去呢!底下就是一些常见的放置处:
文件的绝对路径:通常就是放在 /var/log 里头的文件啦!
打印机或其他:例如 /dev/lp0 这个打印机装置
使用者名称:显示给使用者罗!
远程主机:例如 @www.vbird.tsai 当然啦,要对方主机也能支持才行!
*:代表『目前在线上的所有人』,类似 wall 这个命令的意义!
syslog.conf 语法练习
基本上,整个 syslog 的配置档就只是这样而已,底下我们来思考一些例题,好让你可以更清楚的知道如何配置 syslogd 啊!
例题:
如果我要将我的 mail 相关的数据给他写入 /var/log/maillog 当中,那么在 /etc/syslog.conf 的语法如何设计?
答:
基本的写法是这样的:
mail.info /var/log/maillog
注意到上面喔,当我们的等级使用 info 时,那么 『任何大於 info 等级(含 info 这个等级)之上的信息, 都会被写入到后面接的文件之中!』这样可以了解吗?也就是说,我们可以将所有 mail 的登录资讯都纪录在 /var/log/maillog 里面的意思啦!
例题:
我要将新闻群组数据 (news) 及例行性工作排程 (cron) 的信息都写入到一个称为 /var/log/cronnews 的文件中,但是这两个程序的警告信息则额外的记录在 /var/log/cronnews.warn 中, 那该如何配置我的 syslog.conf 呢?
答:
很简单啦!既然是两个程序,那么只好以分号来隔开了,此外,由於第二个指定文件中,我只要记录警告信息, 因此配置上需要指定『.=』这个符号,所以语法成为了:
news.*;cron.* /var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
上面那个 『.=』就是在指定等级的意思啦!由於指定了等级,因此,只有这个等级的信息才会被纪录在这个文件里面呢! 此外你也必须要注意,news 与 cron 的警告信息也会写入 /var/log/cronnews 内喔!
例题:
我的 messages 这个文件需要记录所有的资讯,但是就是不想要记录 cron, mail 及 news 的资讯,那么应该怎么写才好?
答:
可以有两种写法,分别是:
*.*;news,cron,mail.none /var/log/messages
*.*;news.none;cron.none;mail.none /var/log/messages
使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话, 那么就需要将服务与等级都写上去罗!这样会配置了吧!
CentOS 5.x 默认的 syslog.conf 内容
了解语法之后,我们来看一看 syslog 有哪些系统服务已经在记录了呢?就是瞧一瞧 /etc/syslog.conf 这个文件的默认内容罗! (注意!如果需要将该行做为注解时,那么就加上 # 符号就可以啦)
上面总共仅有十一行配置值,每一行的意义是这样的:
#kern.*:只要是核心产生的信息,全部都送到 console(终端机) 去。console 通常是由外部装置连接到系统而来, 举例来说,很多封闭型主机 (没有键盘、萤幕的系统) 可以透过连接 RS232 连接口将信息传输到外部的系统中, 例如以笔记本计算机连接到封闭主机的 RS232 插口。这个项目通常应该是用在系统出现严重问题而无法使用默认的萤幕观察系统时, 可以透过这个项目来连接取得核心的信息。(注1)
*.info;mail.none;news.none;authpriv.none;cron.none:由於 mail, news, authpriv, cron 等类别产生的信息较多, 且已经写入底下的数个文件中,因此在 /var/log/messages 里面就不记录这些项目。除此之外的其他信息都写入 /var/log/messages 中。这也是为啥我们说这个 messages 文件很重要的缘故!
authpriv.*:认证方面的信息均写入 /var/log/secure 文件;
mail.*:邮件方面的信息则均写入 /var/log/maillog 文件;
cron.*:例行性工作排程均写入 /var/log/cron 文件;
*.emerg:当产生最严重的错误等级时,将该等级的信息以 wall 的方式广播给所有在系统登陆的帐号得知, 要这么做的原因是希望在线的使用者能够赶紧通知系统管理员来处理这么可怕的错误问题。
uucp,news.crit:uucp 是早期 Unix-like 系统进行数据传递的通讯协议,后来常用在新闻群组的用途中。 news 则是新闻群组。当新闻群组方面的资讯有严重错误时就写入 /var/log/spooler 文件中;
local7.*:将本机启动时应该显示到萤幕的信息写入到 /var/log/boot.log 文件中;
后面的 news.=crit、news.=err、news.notice 则主要在分别记录新闻群组产生的不同等级的信息。
在上面的第四行关於 mail 的记录中,在记录的文件 /var/log/maillog 前面还有个减号『 - 』是干嘛用的? 由於邮件所产生的信息比较多,因此我们希望邮件产生的信息先储存在速度较快的内存中 (buffer) ,等到数据量够大了才一次性的将所有数据都填入磁碟内,这样将有助於登录文件的存取性能。 只不过由於信息是缓存在内存内,因此若不正常关机导致登录资讯未回填到登录文件中,可能会造成部分数据的遗失。
此外,每个 Linux distributions 的 syslog.conf 配置差异是颇大的,如果你想要找到相对应的登录资讯时, 可得要查阅一下 /etc/syslog.conf 这个文件才行!否则可能会发生分析到错误的资讯喔!举例来说, 鸟哥有自己写一支分析登录文件的 script,这个 script 是依据 Red Hat 系统默认的登录文件所写的,因此不同的 distributions 想要使用这支程序时,就得要自行设计与修改一下 /etc/syslog.conf 才行喔!否则就可能会分析到错误的资讯罗。 那么如果你有自己的需要而得要修订登录文件时,该如何进行?
自行添加登录文件文件功能
如果你有其他的需求,所以需要特殊的文件来帮你记录时,呵呵!别客气,千万给他记录在 /etc/syslog.conf 当中,如此一来,你就可以重复的将许多的资讯记录在不同的文件当中,以方便你的管理呢! 让我们来作个练习题吧!如果你想要让『所有的资讯』都额外写入到 /var/log/admin.log 这个文件时, 你可以怎么作呢?先自己想一想,并且作一下,再来看看底下的作法啦!
很简单吧!如此一来,所有的资讯都会写入 /var/log/admin.log 里面了!
登录文件的安全性配置
好了,由上一个小节里面我们知道了 syslog.conf 的配置,也知道了登录文件内容的重要性了, 所以,如果幻想你是一个很厉害的黑客,想利用他人的计算机干坏事,然后又不想留下证据, 你会怎么作?对啦!就是离开的时候将屁股擦干净,将所有可能的信息都给他抹煞掉, 所以第一个动脑筋的地方就是登录文件的清除工作啦~ 如果你的登录文件不见了,那该怎办?
伤脑筋呢!有没有办法防止登录文件被删除?或者是被 root 自己不小心变更呢?有呀!拔掉网络线或电源线就好了……呵呵! 别担心,基本上,我们可以透过一个隐藏的属性来配置你的登录文件,成为『 只可以添加数据,但是不能被删除 』的状态,那么或许可以达到些许的保护!不过,如果你的 root 帐号被破解了,那么底下的配置还是无法保护的,因为你要记得『 root 是可以在系统上面进行任何事情的 』,因此,请将你的 root 这个帐号的口令配置的安全一些!千万不要轻忽这个问题呢!
既然如此,那么我们就来处理一下隐藏属性的东东吧!我们在第七章谈到过 lsattr 与 chattr 这两个东西啦!如果将一个文件以 chattr 配置 i 这个属性时,那么该文件连 root 都不能杀掉!而且也不能新增数据,嗯!真安全!但是,如此一来登录文件的功能岂不是也就消失了? 因为没有办法写入呀!所以罗,我们要使用的是 a 这个属性!你的登录文件如果配置了这个属性的话,那么 他将只能被添加,而不能被删除!嗯! 这个项目就非常的符合我们登录文件的需求啦!因此,你可以这样的添加你的登录文件的隐藏属性。
加入了这个属性之后, 你的 /var/log/messages 登录文件从此就仅能被添加,而不能被删除,直到 root 以『 chattr -a /var/log/messages 』取消这个 a 的参数之后,才能被删除或移动喔!
虽然,为了你登录文件的资讯安全,这个 chattr 的 +a 旗标可以帮助你维护好这个文件, 不过,如果你的系统已经被取得 root 的权限,而既然 root 可以下达 chattr -a 来取消这个旗标, 所以罗,还是有风险的啦!此外,前面也稍微提到,新手最好还是先不要添加这个旗标, 很容易由於自己的忘记,导致系统的重要信息无法记录呢。
基本上,鸟哥认为,这个旗标最大的用处除了在保护你登录文件的数据外, 他还可以帮助你避免掉不小心写入登录文件的状况喔。要注意的是,当『 你不小心 "手动" 更动过登录文件后,例如那个 /var/log/messages , 你不小心用 vi 开启他,离开却下达 :wq 的参数,呵呵!那么该文件未来将不会再继续进行登录动作! 』这个问题真的很常发生!由於你以 vi 储存了登录文件,则 syslogd 会误判为该文件已被更动过, 将导致 syslogd 不再写入该文件新的内容~很伤脑筋的!
要让该登录文件可以继续写入,你只要重新启动 syslog (/etc/init.d/syslog restart) 即可。 不过,总是比较麻烦。所以啊,如果你针对登录文件下达 chattr +a 的参数,嘿嘿! 未来你就不需要害怕不小心更动到该文件了!因为无法写入嘛!除了可以新增之外~ ^_^
不过,也因为这个 +a 的属性让该文件无法被删除与修改,所以罗,当我们进行登录文件轮替时 (logrotate) ,将会无法移动该登录文件的档名呢!所以会造成很大的困扰。这个困扰虽然可以使用 logrotate 的配置档来解决,但是,还是先将登录文件的 +a 旗标拿掉吧!
登录文件服务器的配置
我们在之前稍微提到的,在 syslog.conf 文件当中,可以将登录数据传送到打印机或者是远程主机上面去。这样做有什么意义呢? 如果你将登录资讯直接传送到打印机上面的话,那么万一不小心你的系统被 cracker 所入侵, 他也将你的 /var/log/ 砍掉了,怎么办?没关系啊!反正你已经将重要数据直接以打印机记录起来了, 嘿嘿!他是无法逃开的啦!^_^
再想像一个环境,你的办公室内有十部 Linux 主机,每一部负责一个网络服务, 你为了要了解每部主机的状态,因此,你常常需要登陆这十部主机去查阅你的登录文件~ 哇!光用想的,每天要进入十部主机去查数据,想到就烦~没关系~这个时候我们可以让某一部主机当成 『登录文件服务器』,用他来记录所有的十部 linux 主机的资讯,嘿嘿!这样我就直接进入一部主机就可以了! 省时又省事,真方便~
那要怎么达到这样的功能呢?很简单啦,我们 CentOS 5.x 默认的 syslog 本身就已经具有这个登录文件服务器的功能了, 只是默认并没有启动该功能而已。你可以透过 man syslogd 去查询一下相关的选项就能够知道啦! 既然是登录文件服务器,那么我们的 Linux 主机当然会启动一个端口来监听了, 那个默认的端口就是 UDP 的 514 喔!
tu
如上图所示,服务器会启动监听的端口,用户端则将登录文件再转出一份送到服务器去。 而既然是登录文件『服务器』,所以当然有服务器与用户端 (client) 罗!这两者的配置分别是这样的:
透过这个简单的动作,你的 Linux 主机已经可以接收来自其他主机的登录资讯了! 当然啦,你必须要知道网络方面的相关基础,这里鸟哥只是先介绍, 未来了解了网络相关资讯后,再回头来这里瞧一瞧先! ^_^
至於 client 端的配置就简单多了!只要指定某个资讯传送到这部主机即可! 举例来说,我们的登录文件服务器 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以,可以在 /etc/syslog.conf 里面新增这样的一行:
再重新启动 syslog 后,立刻就搞定了!而未来主机上面的登录文件当中,每一行的『主机名称』就会显示来自不同主机的资讯了。 很简单吧! ^_^。接下来,让我们来谈一谈,那么如何针对登录文件来进行轮转 (rotate) 呢?
转自: http://vbird.dic.ksu.edu.tw/linux_basic/0570syslog_2.php <script type="text/javascript"> /*iteye博客内页Banner-468*60,创建于2016-5-31*/ var cpro_id = "u1405021"; </script> <script type="text/javascript" src="http://cpro.baidustatic.com/cpro/ui/c.js"></script>
<script type="text/javascript"> dp.SyntaxHighlighter.HighlightAll('code', true, true); $$('#main .blog_content pre[name=code]').each(function(pre, index){ // blog content var post_id = 2123507; var location = window.location; source_url = location.protocol + "//" + location.host + location.pathname + location.search; pre.writeAttribute('codeable_id', post_id); pre.writeAttribute('codeable_type', "Blog"); pre.writeAttribute('source_url', source_url); pre.writeAttribute('pre_index', index); pre.writeAttribute('title', '第十九章 syslogd :记录登录文件的服务'); }); fix_image_size($$('div.blog_content img'), 700); function processComment() { $$('#main .blog_comment > div').each(function(comment){// comment var post_id = comment.id.substr(2); $$("#"+comment.id+" pre[name=code]").each(function(pre, index){ var location = window.location; source_url = location.protocol + "//" + location.host + location.pathname + location.search; source_url += "#" + comment.id; pre.writeAttribute('codeable_id', post_id); pre.writeAttribute('codeable_type', "BlogComment"); pre.writeAttribute('source_url', source_url); pre.writeAttribute('pre_index', index); pre.writeAttribute('title', '第十九章 syslogd :记录登录文件的服务'); }); }); } function quote_comment(id) { new Ajax.Request('/editor/quote', { parameters: {'id':id, 'type':'BlogComment'}, onSuccess:function(response){editor.bbcode_editor.textarea.insertAfterSelection(response.responseText); Element.scrollTo(editor.bbcode_editor.textarea.element);} }); } code_favorites_init(); processComment(); new WeiboShare({share_buttons: $('share_weibo'), img_scope: $('blog_content')}); </script>
[root@www ~]# ps aux | grep syslog USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 4294 0.0 0.0 1716 568 ? Ss Mar31 0:00 syslogd -m 0 # 瞧!确实有启动的! [root@www ~]# chkconfig --list syslog syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off # 默认情况下,文字介面与图形介面 (3, 5) 都有启动喔!
看到 syslog 这个服务名称了吧?所以知道他已经在系统中工作罗!好了,既然本章主要是讲登录文件,那么你知道登录文件的内容是如何展现的? syslog 的配置档在哪里?如何配置?如果你的 Linux 主机想要当作整个局域网的登录文件服务器时,又该如何配置? 底下就让我们来玩玩这玩意!
登录文件内容的一般格式
一般来说,系统产生的信息经过 syslog 而记录下来的数据中,每条信息均会记录底下的几个重要数据:
事件发生的日期与时间;
发生此事件的主机名称;
启动此事件的服务名称 (如 samba, xinetd 等) 或函式名称 (如 libpam ..);
该信息的实际数据内容。
当然,这些资讯的『详细度』是可以修改的,而且,这些资讯可以作为系统除错之用呢! 我们拿登录时一定会记载帐号资讯的 /var/log/secure 为例好了:
root@www ~]# cat /var/log/secure 1 Mar 14 15:38:00 www atd[18701]: pam_unix(atd:session): session opened for user root by (uid=0) 2 Mar 14 15:38:00 www atd[18701]: pam_unix(atd:session): session closed for user root 3 Mar 16 16:01:51 www su: pam_unix(su-l:auth): authentication failure; logn ame=vbird uid=500 euid=0 tty=pts/1 ruser=vbird rhost= user=root 4 Mar 16 16:01:55 www su: pam_unix(su-l:session): session opened for user root by vbird(uid=500) 5 Mar 16 16:02:22 www su: pam_unix(su-l:session): session closed for user root |--日期/时间---|-H-|-----服务与相关函数-------|--信息说明------>
我们拿第一笔数据来说明好了,该数据是说:『 在三月14日 (Mar 14) 的下午 15:38 分,由 www 这部主机的 atd [PID 为 18701] 传来的消息,这个消息是透过 pam_unix 这个模块所提出的。信息内容为 root (uid=0) 这个帐号已经开启 atd 的活动了。』有够清楚吧! 那请您自行翻译一下后面的 4 条信息内容是什么喔!
其实还有很多的资讯值得查阅的呢!尤其是 /var/log/messages 的内容。记得一个好的系统管理员, 要常常去『巡视』登录文件的内容喔!尤其是发生底下几种情况时:
当你觉得系统似乎不太正常时;
某个 daemon 老是无法正常启动时;
某个使用者老是无法登陆时;
某个 daemon 运行过程老是不顺畅时;
还有很多啦!反正觉得系统不太正常,就得要查询查询登录文件就是了。
syslog 的配置档:/etc/syslog.conf
什么?登录文件还有配置档?喔!不是啦~ 是 syslogd 这个 daemon 的配置档啦! 我们现在知道 syslogd 可以负责主机产生的各个资讯的登录,而这些资讯本身是有『严重等级』之分的, 而且,这些数据最终要传送到哪个文件去是可以修改的呢,所以我们才会在一开头的地方讲说, 每个 Linux distributions 放置的登录文件档名可能会有所差异啊!
基本上, syslog 针对各种服务与信息记录在某些文件的配置档就是 /etc/syslog.conf, 这个文件规定了『(1)什么服务 (2)的什么等级信息 (3)需要被记录在哪里(装置或文件)』 这三个咚咚,所以配置的语法会是这样:
服务名称[.=!]信息等级 信息记录的档名或装置或主机 # 底下以 mail 这个服务产生的 info 等级为例: mail.info /var/log/maillog_info # 这一行说明:mail 服务产生的大於等於 info 等级的信息,都记录到 # /var/log/maillog_info 文件中的意思。
我们将上面的数据简单的分为三部分来说明:
服务名称
syslog 本身有规范一些服务,你可以透过这些服务来储存系统的信息。syslog 认识的服务主要有底下这些: (可使用 man 3 syslog 查询到相关的资讯)
服务类别 说明
auth (authpriv) 主要与认证有关的机制,例如 login, ssh, su 等需要帐号/口令的咚咚;
cron 就是例行性工作排程 cron/at 等产生信息记录的地方;
daemon 与各个 daemon 有关的信息;
kern 就是核心 (kernel) 产生信息的地方;
lpr 亦即是列印相关的信息啊!
mail 只要与邮件收发有关的信息纪录都属於这个;
news 与新闻群组服务器有关的东西;
syslog 就是 syslogd 这支程序本身产生的资讯啊!
user, uucp, local0 ~ local7 与 Unix like 机器本身有关的一些信息。
上面谈到的都是 syslog 自行制订的服务名称,软件开发商可以透过呼叫上述的服务名称来记录他们的软件。 举例来说, sendmail 与 postfix 及 dovecot 都是与邮件有关的软件,这些软件在设计登录文件记录时, 都会主动呼叫 syslogd 内的 mail 服务名称 (LOG_MAIL),所以上述三个软件 (sendmail, postfix, dovecot) 产生的信息在 syslog 看起来,就会『是 mail 』类型的服务了。我们可以将这个概念绘制如底下的图示来理解:
tu
另外, 每种服务所产生的数据量其实差异是很大的,举例来说, mail 的登录文件信息多的要命, 每一封信件进入后, mail 至少需要记录『寄信人的资讯;与收信者的信息』等等; 而如果是用来做为工作站主机的,那么登陆者 (利用 login 登录主机处理事情) 的数量一定不少,那个 authpriv 所管辖的内容可就多的要命了。
为了让不同的资讯放置到不同的文件当中,好让我们分门别类的进行登录文件的管理, 所以罗, 将各种类别的服务之登录文件,记录在不同的文件里面,就是我们 /etc/syslog.conf 所要作的规范了!
信息等级
同一个服务所产生的信息也是有差别的, 有启动时仅通知系统而已的一般信息 (information), 有出现还不至於影响到正常运行的警告信息 (warn) ,还有系统硬件发生严重错误时,所产生的重大问题信息 (error 等等); 信息到底有多少种严重的等级呢?基本上,syslog 将信息分为七个主要的等级,依序是这样的(由不重要排列到重要信息等级):
等级 等级名称 说明
1 info 仅是一些基本的信息说明而已;
2 notice 比 info 还需要被注意到的一些资讯内容;
3 warning
(warn) 警示的信息,可能有问题,但是还不至於影响到某个 daemon 运行的资讯;基本上, info, notice, warn 这三个信息都是在告知一些基本资讯而已,应该还不至於造成一些系统运行困扰;
4 err
(error) 一些重大的错误信息,例如配置档的某些配置值造成该服务服法启动的资讯说明, 通常藉由 err 的错误告知,应该可以了解到该服务无法启动的问题呢!
5 crit 比 error 还要严重的错误资讯,这个 crit 是临界点 (critical) 的缩写,这个错误已经很严重了喔!
6 alert 警告警告,已经很有问题的等级,比 crit 还要严重!
7 emerg
(panic) 疼痛等级,意指系统已经几乎要死机的状态! 很严重的错误资讯了。通常大概只有硬件出问题,导致整个核心无法顺利运行,就会出现这样的等级的信息吧!
除了这些有等级的信息外,还有两个特殊的等级,那就是 debug(错误侦测等级) 与 none (不需登录等级) 两个,当我们想要作一些错误侦测,或者是忽略掉某些服务的资讯时, 就用这两个咚咚吧!
特别留意一下在信息等级之前还有 [.=!] 的连结符号喔!他代表的意思是这样的:
. :代表『比后面还要高的等级 (含该等级) 都被记录下来』的意思,例如: mail.info 代表只要是 mail 的资讯,而且该资讯等级高於 info (含 info 本身)时,就会被记录下来的意思。
.=:代表所需要的等级就是后面接的等级而已, 其他的不要!
.!:代表不等於, 亦即是除了该等级外的其他等级都记录。
一般来说,我们比较常使用的是『.』这个连结符号啦!^_^
信息记录的档名或装置或主机
再来则是这个信息要放置在哪里的纪录了。 通常我们使用的都是记录的文件啦!但是也可以输出到装置呦! 例如打印机之类的!也可以记录到不同的主机上头去呢!底下就是一些常见的放置处:
文件的绝对路径:通常就是放在 /var/log 里头的文件啦!
打印机或其他:例如 /dev/lp0 这个打印机装置
使用者名称:显示给使用者罗!
远程主机:例如 @www.vbird.tsai 当然啦,要对方主机也能支持才行!
*:代表『目前在线上的所有人』,类似 wall 这个命令的意义!
syslog.conf 语法练习
基本上,整个 syslog 的配置档就只是这样而已,底下我们来思考一些例题,好让你可以更清楚的知道如何配置 syslogd 啊!
例题:
如果我要将我的 mail 相关的数据给他写入 /var/log/maillog 当中,那么在 /etc/syslog.conf 的语法如何设计?
答:
基本的写法是这样的:
mail.info /var/log/maillog
注意到上面喔,当我们的等级使用 info 时,那么 『任何大於 info 等级(含 info 这个等级)之上的信息, 都会被写入到后面接的文件之中!』这样可以了解吗?也就是说,我们可以将所有 mail 的登录资讯都纪录在 /var/log/maillog 里面的意思啦!
例题:
我要将新闻群组数据 (news) 及例行性工作排程 (cron) 的信息都写入到一个称为 /var/log/cronnews 的文件中,但是这两个程序的警告信息则额外的记录在 /var/log/cronnews.warn 中, 那该如何配置我的 syslog.conf 呢?
答:
很简单啦!既然是两个程序,那么只好以分号来隔开了,此外,由於第二个指定文件中,我只要记录警告信息, 因此配置上需要指定『.=』这个符号,所以语法成为了:
news.*;cron.* /var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
上面那个 『.=』就是在指定等级的意思啦!由於指定了等级,因此,只有这个等级的信息才会被纪录在这个文件里面呢! 此外你也必须要注意,news 与 cron 的警告信息也会写入 /var/log/cronnews 内喔!
例题:
我的 messages 这个文件需要记录所有的资讯,但是就是不想要记录 cron, mail 及 news 的资讯,那么应该怎么写才好?
答:
可以有两种写法,分别是:
*.*;news,cron,mail.none /var/log/messages
*.*;news.none;cron.none;mail.none /var/log/messages
使用『,』分隔时,那么等级只要接在最后一个即可,如果是以『;』来分的话, 那么就需要将服务与等级都写上去罗!这样会配置了吧!
CentOS 5.x 默认的 syslog.conf 内容
了解语法之后,我们来看一看 syslog 有哪些系统服务已经在记录了呢?就是瞧一瞧 /etc/syslog.conf 这个文件的默认内容罗! (注意!如果需要将该行做为注解时,那么就加上 # 符号就可以啦)
# 来自 CentOS 5.x 的相关数据 [root@www ~]# vim /etc/syslog.conf 1 #kern.* /dev/console 2 *.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages 3 authpriv.* /var/log/secure 4 mail.* -/var/log/maillog 5 cron.* /var/log/cron 6 *.emerg * 7 uucp,news.crit /var/log/spooler 8 local7.* /var/log/boot.log 9 news.=crit /var/log/news/news.crit 10 news.=err /var/log/news/news.err 11 news.notice /var/log/news/news.notice
上面总共仅有十一行配置值,每一行的意义是这样的:
#kern.*:只要是核心产生的信息,全部都送到 console(终端机) 去。console 通常是由外部装置连接到系统而来, 举例来说,很多封闭型主机 (没有键盘、萤幕的系统) 可以透过连接 RS232 连接口将信息传输到外部的系统中, 例如以笔记本计算机连接到封闭主机的 RS232 插口。这个项目通常应该是用在系统出现严重问题而无法使用默认的萤幕观察系统时, 可以透过这个项目来连接取得核心的信息。(注1)
*.info;mail.none;news.none;authpriv.none;cron.none:由於 mail, news, authpriv, cron 等类别产生的信息较多, 且已经写入底下的数个文件中,因此在 /var/log/messages 里面就不记录这些项目。除此之外的其他信息都写入 /var/log/messages 中。这也是为啥我们说这个 messages 文件很重要的缘故!
authpriv.*:认证方面的信息均写入 /var/log/secure 文件;
mail.*:邮件方面的信息则均写入 /var/log/maillog 文件;
cron.*:例行性工作排程均写入 /var/log/cron 文件;
*.emerg:当产生最严重的错误等级时,将该等级的信息以 wall 的方式广播给所有在系统登陆的帐号得知, 要这么做的原因是希望在线的使用者能够赶紧通知系统管理员来处理这么可怕的错误问题。
uucp,news.crit:uucp 是早期 Unix-like 系统进行数据传递的通讯协议,后来常用在新闻群组的用途中。 news 则是新闻群组。当新闻群组方面的资讯有严重错误时就写入 /var/log/spooler 文件中;
local7.*:将本机启动时应该显示到萤幕的信息写入到 /var/log/boot.log 文件中;
后面的 news.=crit、news.=err、news.notice 则主要在分别记录新闻群组产生的不同等级的信息。
在上面的第四行关於 mail 的记录中,在记录的文件 /var/log/maillog 前面还有个减号『 - 』是干嘛用的? 由於邮件所产生的信息比较多,因此我们希望邮件产生的信息先储存在速度较快的内存中 (buffer) ,等到数据量够大了才一次性的将所有数据都填入磁碟内,这样将有助於登录文件的存取性能。 只不过由於信息是缓存在内存内,因此若不正常关机导致登录资讯未回填到登录文件中,可能会造成部分数据的遗失。
此外,每个 Linux distributions 的 syslog.conf 配置差异是颇大的,如果你想要找到相对应的登录资讯时, 可得要查阅一下 /etc/syslog.conf 这个文件才行!否则可能会发生分析到错误的资讯喔!举例来说, 鸟哥有自己写一支分析登录文件的 script,这个 script 是依据 Red Hat 系统默认的登录文件所写的,因此不同的 distributions 想要使用这支程序时,就得要自行设计与修改一下 /etc/syslog.conf 才行喔!否则就可能会分析到错误的资讯罗。 那么如果你有自己的需要而得要修订登录文件时,该如何进行?
自行添加登录文件文件功能
如果你有其他的需求,所以需要特殊的文件来帮你记录时,呵呵!别客气,千万给他记录在 /etc/syslog.conf 当中,如此一来,你就可以重复的将许多的资讯记录在不同的文件当中,以方便你的管理呢! 让我们来作个练习题吧!如果你想要让『所有的资讯』都额外写入到 /var/log/admin.log 这个文件时, 你可以怎么作呢?先自己想一想,并且作一下,再来看看底下的作法啦!
# 1. 先配置好所要创建的文件配置! [root@www ~]# vim /etc/syslog.conf # Add by VBird 2009/04/08 <==再次强调,自己修改的时候加入一些说明 *.info /var/log/admin.log <==有用的是这行啦! # 2. 重新启动 syslog 呢! [root@www ~]# /etc/init.d/syslog restart [root@www ~]# ll /var/log/admin.log -rw------- 1 root root 118 Apr 8 13:50 /var/log/admin.log # 瞧吧!创建了这个登录文件出现罗!
很简单吧!如此一来,所有的资讯都会写入 /var/log/admin.log 里面了!
登录文件的安全性配置
好了,由上一个小节里面我们知道了 syslog.conf 的配置,也知道了登录文件内容的重要性了, 所以,如果幻想你是一个很厉害的黑客,想利用他人的计算机干坏事,然后又不想留下证据, 你会怎么作?对啦!就是离开的时候将屁股擦干净,将所有可能的信息都给他抹煞掉, 所以第一个动脑筋的地方就是登录文件的清除工作啦~ 如果你的登录文件不见了,那该怎办?
伤脑筋呢!有没有办法防止登录文件被删除?或者是被 root 自己不小心变更呢?有呀!拔掉网络线或电源线就好了……呵呵! 别担心,基本上,我们可以透过一个隐藏的属性来配置你的登录文件,成为『 只可以添加数据,但是不能被删除 』的状态,那么或许可以达到些许的保护!不过,如果你的 root 帐号被破解了,那么底下的配置还是无法保护的,因为你要记得『 root 是可以在系统上面进行任何事情的 』,因此,请将你的 root 这个帐号的口令配置的安全一些!千万不要轻忽这个问题呢!
既然如此,那么我们就来处理一下隐藏属性的东东吧!我们在第七章谈到过 lsattr 与 chattr 这两个东西啦!如果将一个文件以 chattr 配置 i 这个属性时,那么该文件连 root 都不能杀掉!而且也不能新增数据,嗯!真安全!但是,如此一来登录文件的功能岂不是也就消失了? 因为没有办法写入呀!所以罗,我们要使用的是 a 这个属性!你的登录文件如果配置了这个属性的话,那么 他将只能被添加,而不能被删除!嗯! 这个项目就非常的符合我们登录文件的需求啦!因此,你可以这样的添加你的登录文件的隐藏属性。
[root@www ~]# chattr +a /var/log/messages [root@www ~]# lsattr /var/log/messages -----a------- /var/log/messages
加入了这个属性之后, 你的 /var/log/messages 登录文件从此就仅能被添加,而不能被删除,直到 root 以『 chattr -a /var/log/messages 』取消这个 a 的参数之后,才能被删除或移动喔!
虽然,为了你登录文件的资讯安全,这个 chattr 的 +a 旗标可以帮助你维护好这个文件, 不过,如果你的系统已经被取得 root 的权限,而既然 root 可以下达 chattr -a 来取消这个旗标, 所以罗,还是有风险的啦!此外,前面也稍微提到,新手最好还是先不要添加这个旗标, 很容易由於自己的忘记,导致系统的重要信息无法记录呢。
基本上,鸟哥认为,这个旗标最大的用处除了在保护你登录文件的数据外, 他还可以帮助你避免掉不小心写入登录文件的状况喔。要注意的是,当『 你不小心 "手动" 更动过登录文件后,例如那个 /var/log/messages , 你不小心用 vi 开启他,离开却下达 :wq 的参数,呵呵!那么该文件未来将不会再继续进行登录动作! 』这个问题真的很常发生!由於你以 vi 储存了登录文件,则 syslogd 会误判为该文件已被更动过, 将导致 syslogd 不再写入该文件新的内容~很伤脑筋的!
要让该登录文件可以继续写入,你只要重新启动 syslog (/etc/init.d/syslog restart) 即可。 不过,总是比较麻烦。所以啊,如果你针对登录文件下达 chattr +a 的参数,嘿嘿! 未来你就不需要害怕不小心更动到该文件了!因为无法写入嘛!除了可以新增之外~ ^_^
不过,也因为这个 +a 的属性让该文件无法被删除与修改,所以罗,当我们进行登录文件轮替时 (logrotate) ,将会无法移动该登录文件的档名呢!所以会造成很大的困扰。这个困扰虽然可以使用 logrotate 的配置档来解决,但是,还是先将登录文件的 +a 旗标拿掉吧!
[root@www ~]# chattr -a /var/log/messages
登录文件服务器的配置
我们在之前稍微提到的,在 syslog.conf 文件当中,可以将登录数据传送到打印机或者是远程主机上面去。这样做有什么意义呢? 如果你将登录资讯直接传送到打印机上面的话,那么万一不小心你的系统被 cracker 所入侵, 他也将你的 /var/log/ 砍掉了,怎么办?没关系啊!反正你已经将重要数据直接以打印机记录起来了, 嘿嘿!他是无法逃开的啦!^_^
再想像一个环境,你的办公室内有十部 Linux 主机,每一部负责一个网络服务, 你为了要了解每部主机的状态,因此,你常常需要登陆这十部主机去查阅你的登录文件~ 哇!光用想的,每天要进入十部主机去查数据,想到就烦~没关系~这个时候我们可以让某一部主机当成 『登录文件服务器』,用他来记录所有的十部 linux 主机的资讯,嘿嘿!这样我就直接进入一部主机就可以了! 省时又省事,真方便~
那要怎么达到这样的功能呢?很简单啦,我们 CentOS 5.x 默认的 syslog 本身就已经具有这个登录文件服务器的功能了, 只是默认并没有启动该功能而已。你可以透过 man syslogd 去查询一下相关的选项就能够知道啦! 既然是登录文件服务器,那么我们的 Linux 主机当然会启动一个端口来监听了, 那个默认的端口就是 UDP 的 514 喔!
tu
如上图所示,服务器会启动监听的端口,用户端则将登录文件再转出一份送到服务器去。 而既然是登录文件『服务器』,所以当然有服务器与用户端 (client) 罗!这两者的配置分别是这样的:
# 1. Server 端:修改 syslogd 的启动配置档,通常在 /etc/sysconfig 内! [root@www ~]# vim /etc/sysconfig/syslog # 找到底下这一行: SYSLOGD_OPTIONS="-m 0" # 改成底下这样子! SYSLOGD_OPTIONS="-m 0 -r" # 2. 重新启动与观察 syslogd 喔! [root@www ~]# /etc/init.d/syslog restart [root@www ~]# netstat -lunp | grep syslog Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name udp 0 0 0.0.0.0:514 0.0.0.0:* 13981/syslogd # 嘿嘿!你的登录文件主机已经配置妥当罗!很简单吧!
透过这个简单的动作,你的 Linux 主机已经可以接收来自其他主机的登录资讯了! 当然啦,你必须要知道网络方面的相关基础,这里鸟哥只是先介绍, 未来了解了网络相关资讯后,再回头来这里瞧一瞧先! ^_^
至於 client 端的配置就简单多了!只要指定某个资讯传送到这部主机即可! 举例来说,我们的登录文件服务器 IP 为 192.168.1.100 ,而 client 端希望所有的数据都送给主机, 所以,可以在 /etc/syslog.conf 里面新增这样的一行:
[root@www ~]# vim /etc/syslog.conf *.* @192.168.1.100
再重新启动 syslog 后,立刻就搞定了!而未来主机上面的登录文件当中,每一行的『主机名称』就会显示来自不同主机的资讯了。 很简单吧! ^_^。接下来,让我们来谈一谈,那么如何针对登录文件来进行轮转 (rotate) 呢?
转自: http://vbird.dic.ksu.edu.tw/linux_basic/0570syslog_2.php <script type="text/javascript"> /*iteye博客内页Banner-468*60,创建于2016-5-31*/ var cpro_id = "u1405021"; </script> <script type="text/javascript" src="http://cpro.baidustatic.com/cpro/ui/c.js"></script>
oracle 高效Sql语句总结 | maven 命令创建web项目和jetty插件
- 2014-09-28 20:11
- 浏览 105
- 评论(0)
- 分类:编程语言
- 相关推荐
发表评论
文章已被作者锁定,不允许评论。
艾伦蓝
- 浏览: 90058 次
- 性别:
- 来自: 深圳
最近访客 更多访客>>
wn2sun
jiqqqqq
风吹屁屁凉a
G10A
社区版块
- 我的资讯 (0)
- 我的论坛 (0)
- 我的问答 (0)
存档分类
- 2017-04 (9)
- 2017-03 (28)
- 2017-02 (2)
- 更多存档...
最新评论
这篇关于第十九章 syslogd :记录登录文件的服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!
参考知识库