喜欢Linux的朋友,交流交流呐......

Linux系统管理技术手册(第二版)部分章节快读-第10章

上一篇 / 下一篇  2008-07-21 10:22:09

   由于全书的章节数太多了,把所有的内容搬上来有点困难,所以挑了几章给大伙儿先饱下眼福。
S"t2QX/H*L0
A;\ u!M a:V9Z7]e0   申明:本著作版权归原书作者 LUPA开源社区5iG#@,k?#\as"c`$t2k
   Evi Nemeth,Garth Snyder,Trent R.Hein所有
O Br5],TZ-J` [1y8?0   LUPA开源社区TnTt]1N
   由人民邮电出版社出版发行,如果想看全书购买正版图书.LUPA开源社区XOn}5ICr2u
LUPA开源社区 p4Wr$T$B J
   以下篇目尽供交流,不得用于其他商业用途,谢谢合作!LUPA开源社区,P'LB%| Y~k%_`b:? ^A
LUPA开源社区3|W1m6v1o3S)d9`5A!W N
LUPA开源社区"\r5KYFQ
第10章  系统日志与日志文件
v&NN|(a0
%zS,jL.H!Ap~0

/A~#[0p)Gf0
LUPA开源社区(X X0wl?%xP7u
    系统守护进程、内核和各种工具都会产生一些数据,这些数据被记录下来,最终保存在容量有限的硬盘上。其中大部分数据有用的寿命都是有限的,因此需要对其它们进行汇总、压缩、存档并且最终扔掉。LUPA开源社区*U)C"h|f+c)X8F ~k
LUPA开源社区M&PaAC.j
10.1 日志记录的策略
#?7b3m Sg0
_Kr2R0[0    日志记录的策略随站点不同而不同。常见的方案包括以下几种:
^U2|@i8X0    ·立刻扔掉所有数据;LUPA开源社区/Eq6Hs ~)J.uG JqP
    ·定期重新设置日志文件;LUPA开源社区"bId:H(K?KV!v u
    ·轮换日志文件,把该数据保留一定的时间;LUPA开源社区]1_%m7Y"@)Nr
    ·将日志压缩并保存到磁带或其他永久性介质上。LUPA开源社区Z*f6j+dB'L?o\s z
    对于您的站点来说,正确的选择取决于磁盘空间有多大,您的安全意识有多强。即使具有充足的磁盘空间,还是不要让日志文件过快增长。LUPA开源社区 Nl4_;pO}R M.s Bv$}
    无论选择何种方案,都必须用cron自动维护日志文件。有关该守护进程的详细内容,请参考第8章。
@F8Z1U-UJT0LUPA开源社区FI$AIr;]b^
10.1.1  扔掉日志文件
`n+Kk+w3ObT,_,Y0
LUPA开源社区:|!M |Y6d Ay@r6h
    我们并不建议扔掉所有的日志信息。遭受到安全问题的站点常常会发现,日志文件提供了非法入侵的重要的证据。日志文件还有助于提醒您有关硬件和软件方面的问题。总而言之,如果磁盘空间足够的话,建议至少保存数据一个月,然后才可以丢弃。在实际生活中,您可能需要很长一段时间才会意识到站点已经被黑客攻破,这时就需要查看以前的日志。如果有必要回顾更远的过去所发生的事件,那么可以从备份磁带上恢复较早的日志文件。
.Wi!f/`.s3je |9Z9x0    有些管理员听任日志文件任意增长,直到它们变成麻烦后才将其清除并从零开始。这种方案比一点儿数据都不保存要好,但这样做无法保证日志记录项能够存留任何特定的时间长度。磁盘的平均利用率也要比使用其他管理方案的利用率高。LUPA开源社区5nNF'lP$U SZb%v
    在很个别的情况下,一个站点决定保留某些日志文件,可能不是为了任何有益的目的,而更多是为了应付传票。处于这种境地的一个站点可能会留着几周的日志数据,但是它或许要保证这些文件一定不能被存到永久性的介质上。有一个这样的案例:微软已经不止一次受到指控,其管理日志文件和电子邮件的政策破坏性过强。原告称,微软的数据保留政策无异于毁掉证据,尽管删除行动(或者至少是删除策略)是在法律诉讼之前就已经有了。遗憾的是,目前断定法庭将最终如何回应这些诉讼还为时过早[1]。在美国,Sarbanes-Oxley法案最近规定了保留记录的新要求,参考30.12.8节。LUPA开源社区 Q#?'E#D6yT+~

e*o&t1`Zg0
[1] 值得一提的是,在出现官司苗头的时候(或者更为恶劣一些,在诉讼过程期间)就删除相关的电子邮件或者日志文件的做法注定不会占理。只有正在执行的明确不保留数据的策略才会有望得到法律保护。LUPA开源社区^\Wt H!L
LUPA开源社区.p8`z.H5~Q+P
10.1.2 轮换日志文件
LUPA开源社区Er.@H%f6i@"s6LG
    把每周或者每月的日志信息保存在一个单独的文件里,这是一种通常(但不是通行)的做法。这些周期性的文件都会保留特定一段时间,然后被删除。我们专门在一台中央日志主机上划了一个硬盘分区(/var/log)给日志文件。LUPA开源社区\tm#i_3CJ
    在每个轮换周期结束的时候,有一个脚本或者工具程序更改每个文件的名字,然后把较早的数据向文件链的结尾推。例如,假设某个日志文件的名字叫做logfile,则它的备份文件可能叫做logfile.1、logfile.2,依此类推。如果每周轮换一次,并且保存8周的数据,那么就会有一个logfile.8文件但没有logfile.9文件。每周随着logfile.7文件覆盖logfile.8文件,logfile.8中原来的数据就没了。
o_Ba,}]6E Z0    稍微麻烦一点,压缩一下数据就能延长保存的时间。您可以运行zgrep,不必解压压缩文件,就能搜索压缩文件。
O]"p#Bp~ L B;?-z)Nf0    假定每周都要留意某个文件,而且(为了简化例子)假定希望存档该文件三周的内容。下面的脚本就可以实现一个适当的轮换策略:
G,[3bD{ ]7j0    #!/bin/shLUPA开源社区&Nn9p2SE Z/[
    cd /var/logLUPA开源社区"Bu ujE
    mv logfile.2 logfile.3
6DJ:S-VyH1xRU0    mv logfile.1 logfile.2
e F8{7s{![U V*l,I0    mv logfile logfile.1
z:F2Ou#H6RJ7q0    cat /dev/null > logfile
H#[.RX @1C0    chmod 600 logfileLUPA开源社区rX'|)e,y9u,a

qx.FvUi(}9}0    对于某些日志文件来说,权属信息很重要。您可能需要以日志文件属主的身份,而不是以root的身份从cron运行自己的轮换脚本,或者要在这些命令中加上chown命令。LUPA开源社区YG4z#i?*x+|e4o
    大多数Linux发行版本(包括我们全部的示例版本)都支持一种叫做logrotate的很不错的日志轮换工具,我们将从10.3节开始介绍它。比起编写您自己的脚本来说,它要容易得多(也可靠得多),如果您的发行版本没有包含它,那么还是值得找到并安装它的。LUPA开源社区 sE1}5k{F9D:L2H
    某些站点用日期而不是序列号来标识日志文件,例如logfile.tues或logfile.2005.04.01。这种系统实现起来稍微困难一点儿,但如果需要频繁用到旧的日志文件,那么还是值得这么做的。在Perl里设置用日期给文件起名字要比在sh中容易得多。一种不需要任何编程技巧的习惯用法是:LUPA开源社区x+[?tnx6B
    mv  logfile  logfile.`date  +%Y.%m.%d`
8o|`#F t _0    这种方法也有能让ls命令对日志文件按时间顺序进行排序这一优点。(ls的-t选项让它把任何目录下的文件按修改时间排序,但是如果这些文件没有要求就这样自行安排也挺不错。)LUPA开源社区4k f+e6G-ZO
    有些守护进程的日志文件自始至终都处于打开状态。由于文件系统工作方式的缘故,我们举例的脚本不能用于这样的守护进程。日志记录数据不会保存到再次创建的logfile中,而是继续保存到logfile.1里;即使在将文件重新命名之后,对原来文件的活动引用仍然存在。若想安装一个新的日志文件,则必须向守护进程发信号或者杀死并重启它。参考本书的相关章节(或者您的手册)确定在每种情况必须采取什么样的步骤。
`4W ` RCf V-Be0    下面的例子在上述例子的基础上进行了修改,它同时使用了压缩和信号:LUPA开源社区0C%`"}+c p2j4IC
    #!/bin/shLUPA开源社区n/x$y8FR:wh+R g?:^h
    cd /var/log
2B5f*n^'v0    mv logfile.2.gz logfile.3.gzLUPA开源社区S1R MV'ef x!U'c9h*h@
    mv logfile.1.gz logfile.2.gzLUPA开源社区|{0O ~*j.Uk
    mv logfile logfile.1
`*aU y.|e?(n0    cat /dev/null > logfile
G&qV"FM5r)o w,Va0    chmod 600 logfile
A(SSe,C'Q D0    kill -signal pidLUPA开源社区jw2r1v^rt@*ax
    gzip logfile.1LUPA开源社区3N~ g-e@

+p\~ b&g0    其中的signal代表向程序发出的写日志文件的适当信号,pid是它的进程ID。该信号可以直接写入脚本,但必须动态判断守护进程的PID,这可以通过读取该守护进程留下的文件(比如/var/run/syslogd.pid,这将在下面给予介绍)或是使用kill的变体killall来实现,killall能够在进程表中查找PID。例如,下面的命令
p2]RTU1[rMl T~m0LUPA开源社区ow@)Z:z8y
    killall -e -HUP syslogdLUPA开源社区u'Ol'E,E-AzIaU
LUPA开源社区)o`H?e+zL)\
    等价于LUPA开源社区k#T-U Wzl^'Y

'U:{ v2Hqn0    kill -HUP `cat /var/run/syslogd.pid` LUPA开源社区B/el5}/c N u[!B
LUPA开源社区vS"P? z'OYf
10.1.3 存档日志文件
W1i zzRa;V,l8cf0
r6?#V1e*e:GD ko0    除非您就是希望避免留下书面记录,否则应该在常规的系列备份中包含有日志文件。因为它们包含的信息对于调查安全事故来说至关重要,所以在您的转储频度允许的情况下,要以最高频度备份它们。日志文件变化很频繁,所以它们能够代表要保存在增量备份上的系统信息的重要部分。在设计您的日志政策和您的备份策略时要记得它们两者之间的相互作用关系。有关备份的更多信息,可参见第9章。
7^x}*Z,a,l0Q/fRL0    除了作为例行备份的一部分之外,日志也可以存档到另一套单独的磁带上。相比之下,单独的一套磁带使用起来不方便,但它们带来的建档负担要轻,同时又不影响您循环使用转储磁带的能力。在使用单独的磁带时,我们建议您采用tar格式,并编写一个脚本来自动执行备份方案。LUPA开源社区&Q9^P@7`7}

Ze/O6X^_@ BU g@/F010.2 Linux的日志文件
$JT[-PtU'o8SlUg0LUPA开源社区-Q^Iv0}?q xC
    传统的UNIX系统往往因为它们做日志的方法不一致,甚至还有点儿怪异而受到批评。幸运的是,虽然Linux系统的每一种发行版本都有自己的一套给日志文件命名和分类的方法,但是一般而言Linux要好一点儿。Linux的软件包大多将它们的日志信息记录到/var/log目录下的文件里。在有些发行版本上,个别日志也保存在/var/adm里。
+WlU7CH,Y0    现如今,大多数程序都把它们的日志项发送到一个称为syslog的中央清理系统,syslog将在本章后面予以介绍。默认的syslog配置一般将这些信息的大部分转储到/var/log中的某个地方。请检查系统日志的配置文件/etc/syslog.conf,找出这些信息究竟存在什么地方。有关syslog.conf文件的格式,请参考10.4节。
~;B4i0LZ1JY Sa0    表10.1总结了一些在我们举例的系统中较为常见的日志文件的有关信息。具体有如下几项:LUPA开源社区`E\mk#U#T
    ·存档、汇总或截断的日志文件;LUPA开源社区)VqT;|.i9D
    ·创建各个日志文件的程序;
&xW ^M+@0    ·有关如何指定每个文件名的指示;
p{?,w&^xeL0    ·我们认为留意或者清理的合理频率;
U_9nPz;A0    ·使用日志文件的发行版本(在我们的例子中出现过);
(vvesH0    ·文件内容的说明。LUPA开源社区9G-\.B)Y/jC d1H`$I#g
    除非特别说明,否则文件名都是相对于var/log而言的。LUPA开源社区(E8Lha:X K0L K QvK
    “出处”一列中的字符说明了日志文件的指定方法:S代表使用syslog的程序, F代表使用一个配置文件的程序,而H则代表文件名是否直接包含在代码中。“频率”一列表明了我们建议的清理频率。“发行版本”一列给出了该项适用的发行版本。
lr2I w%L4O8O#B0    虽然各个发行版本上日志文件的所属关系和模式都有不同,但日志文件一般由root所有。就我们看来,大多数日志的模式都应该是600(只有属主有读写权限),因为它们的内容对于黑客来说可能有帮助。如果用户的水平相当高,那么能够查看日志对用户会有好处。在这种情况下,放开日志文件的部分权限也是合理的。LUPA开源社区/p BK/S4e"o
    专为日志建立一个用户组,把日志文件的属组设为这个用户组,让这个用户组的成员都能读取日志文件,这是另一种合理的做法。您可以把本地的系统管理员加入到这个用户组里,让他们不必使用sudo命令就能看到日志文件的内容。如果站点有一个初级系统管理员,他没有完全的sudo特权,这样的安排就特有用。
*x X%|:}D'a0?0    至少,应该限制用户对secure、auth.log和sudo.log文件不经意地查看。绝对不要把任何日志文件的写权限交给属主之外的任何人。
7uqMD'`'Y,Z l0    值得说明的一点是,表10.1中给出的日志文件大多数都是由syslog维护的,但是syslog的默认配置则随系统的不同而变化很大。采用了比较一致的/etc/syslog.conf文件后,各Linux发行版本上的日志文件看上去就相当相似了。
/d&Ys_2C.@"F a0LUPA开源社区.A\Y[d,F&]v

10.1                              日志文件列表

4SR$Zz*t'_"bE J!I0

  LUPA开源社区(PUg fZ

 

FHWCJ"k0

  aLUPA开源社区kLQq8]r-j9Wpp

  a

0I3{;t `5vsW`0

发行版本a

zKpYS/F0

   

C FSFEb!\ }\0

auth.log

%PRv_*QQQp0

subLUPA开源社区1]q O7?9AD YZZ4j

SLUPA开源社区2oN6A PY@$]$Oz;AV

MLUPA开源社区#^6tya&A/FZc1b

DU

1vA~VH0EGv)L0

授权

8e+I@5NYr9O},a0

apache2/*

y!E-F;W(\0I eqb0

httpd2LUPA开源社区-l'pl e.d^.d@

FLUPA开源社区+`_%p j u O~@Qf

DLUPA开源社区(];W3s2Ma/R

SDULUPA开源社区bC8\vY N

Apache HTTP服务器的日志(第2版)LUPA开源社区\,W8O/?1lHy$`

boot.logLUPA开源社区:CN+d%^;@!pn6J&z\ Y~

rc脚本LUPA开源社区K l:Q-Ev.f6T'Y2@

Fc

]/g)n^)e2t_#r0

MLUPA开源社区6DEl et9J5I6J8Ig

RFLUPA开源社区HZ j*E%c,@8l0L$s.` z4w1~

系统启动脚本的输出

ABgyOObN2Nf0

boot.msg

6D%AJ+_'Nb(w2F0

内核LUPA开源社区8C9^6EwDmd

H

7@j a%}+kg3~}'A1o0

-LUPA开源社区{j{ h h"O#S

SLUPA开源社区-~ wKsuzC,fU;|8eI8o

内核消息缓冲的转储LUPA开源社区hL9O#u3ySr

cronLUPA开源社区 ye0m$\fvD;_b

cronLUPA开源社区(G!P9D&wO

S

8TaRu G1ss0

W

CAYN a@l0

RF

_V1oBj#WP0L2tb0

cron的执行情况和出错信息LUPA开源社区7iYI-M{ Bk5I"T

cups/*

&h ~(N9Y$B S0

CUPS

(}W\r2T;OF#A%G0

F

,H mA*zE0

W

!\`;kh#c:I)k0O0

所有LUPA开源社区I w^R8A sy

与打印有关的消息(CUPS

n8Khp'W5]D7L tv0

daemon.log

!s8Dh7yv.m:p8{{0

许多LUPA开源社区5ccx7o Lp~

S

+EJ l;[m0

W

(_l^ RZ![D0

DULUPA开源社区rI|'k&oX

所有守护进程功能的消息LUPA开源社区5aO\A v6zL L)F9eL

debug

{!uJ`9bDJZC u0

许多LUPA开源社区ZPG-CT)P

S

[!a$U1s`6Qp]0

DLUPA开源社区;axB4`TIA

DULUPA开源社区)V1W&vZ:U4u

调试输出

a(Z.^ C^X0

dmesgLUPA开源社区4a(B[%M cY

内核

!jnkT ?;ka:_(wD0

H

y3K+T7ch5E{5l0

-

6Ky!MEY0

RFDULUPA开源社区 m k(r*m y4n!S*j

内核消息缓冲的转储

i0o!l d Xh#D0

dpkg.log

v ?,S)B*o6rNED0

dkpgLUPA开源社区yN`^x7fZW

F

,Ak&x fA0

M

0B.?l~;kWd5ex0

DU

[l{;\A'az0

软件包管理日志

[6Wt yh vD@0

faillog

2f8Q,Rr`;V0

login

&XW8N zf#^ L0

H

9t_H{@!k7LP+S0

W

Z,g"R!\U8v}4X.C&y0

SDULUPA开源社区lFO&r/z XA,fX

不成功的登录企图

8hroR/]S,^0

httpd/logs/*LUPA开源社区+r-\JUVbb#R9U

httpdLUPA开源社区9|.`$]e+UU4s+`

FLUPA开源社区tS,w}5ZR:[

D

K\YvhC)g.l0

RF

2PQR&}$n*f a0

Apache HTTP服务器的日志(在/etc下)LUPA开源社区dz-qUzTS

续表LUPA开源社区Ot-J%GVY ?S y

 

~/Z$g)Jd0

 

Z5K8bV\8_0

  aLUPA开源社区~3Z{ `9[,k8f

  a

kw6k,E+{-ct6d0

发行版本aLUPA开源社区{:y*p[q8L

    LUPA开源社区bbBE3La"E.J(\

kern.log

,yi$i[P'vsN0

内核

S r/{/^9p0

SLUPA开源社区SQ'n?X!aN4T"T

W

]*nd6|c%f AVX0

DU

*q [[2t c%G#MS5\8[0

所有kern功能的消息LUPA开源社区1`,i,}FZ

lastlogLUPA开源社区},`*S,eL4xE P(b

login

q(Q0v:w&E4` G.]#a0

HLUPA开源社区4J*^5r,MwEv)B2h

-LUPA开源社区4{)Y7W&@ EC

所有LUPA开源社区]Gu&}rjGs*q

每个用户上次登录的时间(二进制)

^N1CZ|b9eP;R0

mail*LUPA开源社区 ~.f R)KS,[:R6@D

mail有关的

D;G t3l6wu8i0

SLUPA开源社区@j#a __

W

b"V P(oV,|n0

所有LUPA开源社区g"rMy_oT^#o

所有mail功能的消息LUPA开源社区6AmsV:^-K+x U:e

messages

8A `2z@*`f0

许多LUPA开源社区5XK5~Lb\ HB

S

Qb(V/j8dIO9C%Rhy0

W

SGf iU0E3g%{'y0

所有

{#Ub H7I:Dr0

经常是主要的系统日志文件LUPA开源社区tH^{Y3?

rpmpkgs

6}+n#B'Ri YX\8V0

cron.daily/rpmLUPA开源社区6A@D;n3eK@

H

%|v |[*]0

DLUPA开源社区l \w/w7}l

RF

ng#G&~.t6I0

已安装的RPM软件包清单

P7H(e+U'kh$Y2[ F0

samba/*LUPA开源社区"j E M4AJP h

smbdLUPA开源社区1a(A5e/q*k'H7W*E j'H

F

w!Q&}5Vl N!D0O3b0

W

L k Ij/g,X1Y0

-

'k[ JLq q0

SambaWindows/CIFS文件共享LUPA开源社区b9n+gw!u nLJ

secure

B5Vc\uI.@!D0

sshdsudo

+LJ,lnu0ww0

SLUPA开源社区s+_^-VX TQ`_I~

M

6@1OSg]/b?{)W B` F0

RF

A%Q0\|.fz8c(l0

保密的授权消息

e k0s9j2gAX0

syslogLUPA开源社区I"yW;YOI3~$r

许多LUPA开源社区r9}u)]Ry,[ dR

SLUPA开源社区b;^r#O:AZJ2T(U

W

XZ\,u"t]a:BH0

DULUPA开源社区7^!{z5H P8I

经常是主要的系统日志文件

%q C;A`d v&qF/B3A"w0

warn

hUb*m1\ X(?0

许多

'txZ$?(i7E0

SLUPA开源社区,F1hXh"@%L

WLUPA开源社区4P:?*f:p.k @.D q OH d

SLUPA开源社区n f y B.X3L&v [R

所有的警告/出错级的消息LUPA开源社区-k+O"y/O}

wtmp

rg%n;[y:{0

loginLUPA开源社区+V7?J|y5FQ*|

HLUPA开源社区Mb d5Js

M

v9qw'a }[*z2]vr P%H0

所有

CL+Aj%m aCh)^,]0

登录记录(二进制)

RN^)g!MeaG} ]'L0

Xrog.n.log

,B3J;UI+]"|)_0

Xorg

o5H1a;pitg0

FLUPA开源社区e$];qA'}0Fu

WLUPA开源社区r I#H~1o[au'i

RFS

%q)F+v`ve8fn0

X窗口服务器的出错信息LUPA开源社区"t.NF2r5RDF,Y.O!d

yum.logLUPA开源社区ln _)Q W%ci;l1y7vd

yum

(X f-l!x7`vN-x0

F

l``,\&ah] ~b0

W

ItC2C[0

RF

j7b#Xb4Q%Qf0

软件包管理日志

q#j?l?OF7x0

a.出处:S=syslog, H=硬连接,F=配置文件。LUPA开源社区|_9M`/L2}$e

   频率:D=每天,W=每周,M=每月。

.Cf P _V0

   发行版本: RRed Hat Enterprise LinuxF = FedoraDDebianSSUSEU = Ubuntu

;f/^0Jm,^ t8iAQCD0

bpasswdloginshutdown也可以写入授权日志。在Red HatFedora系统上,它在/var/adm里。

.G+m{9z4r+d0   c.实际是通过syslog做日志,但是在/etc/initlog.conf中配置功能和级别。
/R*L#Zir2xx;M0LUPA开源社区3Vf5z|Bg
10.2.1 特殊的日志文件LUPA开源社区"gqZV7m
LUPA开源社区#?`T)Y"}5Nz-l

    大多数日志是文本文件,当发生“感兴趣的”事件时,就会向这些文件中写入日志记录行。但是表10.1中列出的几个日志的来龙去脉却非常不同。LUPA开源社区]/gC'Q'~C

    /var/log/wtmp中包含用户登录系统和退出系统的记录,也包含了表明系统何时重启或者关机的记录项。因为新的记录项只是简单地追加到文件的末尾,所以它是一种相当普通的日志文件。不过,wtmp文件是以二进制形式保存的。使用last命令可以解读这些信息。尽管wtmp的格式不一般,但是应该像其他任何日志文件那样,轮换或者截断这个文件,因为它的自然特性是无限制的增长。LUPA开源社区9cO m;H9yY

    /var/log/lastlog包含的信息类似于/var/log/wtmp中的信息,但是它只记录每个用户上次登录的时间。它是一个稀疏的二进制文件,以UID作为索引。如果您的UID是以某种数字序列来指定的,那么虽然这肯定对现实世界没什么影响,但这个文件会变得小一些。lastlog文件不需要轮换,因为除非有新用户加入,否则它的大小保持不变。参见9.3.1节的脚注了解有关“稀疏”文件的更多知识。
9n:m+?)p3j3}0LUPA开源社区qkf K ~s,p&Q
10.2.2 内核和启动日志LUPA开源社区mMy+H*h.z @ b
LUPA开源社区U7v Q z'\s8L6M

    内核和系统启动脚本反映出了在日志领域内的 一些特殊的挑战。对于内核来说,问题在于既要创建有关引导进程和内核操作的永久记录,又不能增加对任何特殊的文件系统或者文件系统组成的依赖性。对于启动 脚本而言,挑战在于既要捕捉启动过程的连贯描述,又不能总是试图把任何系统守护进程都和启动日志文件扯到一块,干扰任何程序自己的日志机制,或是让启动脚 本做两份日志项或者把日志输出重定向。

3aw3i h$LH:U']0

    内核的日志机制是通过让内核把它的日志项保存在一个大小有限的内部缓冲区来做到的。缓冲区要足够大,以便能放得下内核在引导时的活动所产生的全部消息。一旦系统全部启动以后,用户进程就可以访问内核的日志缓冲,最终处理它的内容。各发行版本一般是运行dmesg命令,并把它的输出重定向到/var/log/dmesgRHELFedoraDebianUbuntu)或者/var/log/boot.msgSUSE)。这是查看最近启动过程信息的最好的地方。

_w M_ Z8~a0

    内核当前运行的日志机制是由一个叫做klogd的守护进程处理的。klogd的功能实际上是dmesg功能的超集,除了转储内核的日志并退出之外,它还可以在内核缓冲区内的消息产生的时候读取它们,并将其发送到一个文件或者syslog。在正常的运行方式下,klogd采取后一种模式。syslog根据对“kern”的指令来处理这些消息(一般把它们发送到/var/log/messages)。LUPA开源社区 uv{ bw)q)U

    我们举例用的发行版本的启动脚本在一开始转储日志消息的时候,都不用dmesg-c标志,所以虽然读取了内核的消息缓冲区,但并不清除它。当klogd启动的时候,它在缓冲区里发现了和dmesg见到的一样的一组消息,于是把它们发送给syslog。出于这个原因,有些日志项既会出现在dmesg或者boot.msg文件里,又会出现在如/var/log/messages这样由syslog管理的文件里。LUPA开源社区EQ0h;W)FrvQk7[o

    内核日志机制的另一个问题是要在系统控制台做适当的管理。伴随系统的引导,在控制台上输出信息是很重要的。不过,一旦系统已经启动了,控制台的消息可能与其说是帮助,不如说是烦人,如果用控制台登录的话就更是这样了。LUPA开源社区,sF(L,D%?

    dmesgklogd都可以让您用一个命令行标志设置内核的控制台日志级别。例如:

,g#s IK1s(G0

    $ sudo dmesg-n 2LUPA开源社区.@$? {4v"Hyx~

       7级提供的信息最多,还包括调试信息。1级只包含内核的“panic(恐慌)”消息(编号小的级别最严重)。所有的内核消息继续进入中央缓冲区(也进入syslog),而不管它们是否被转发到控制台。LUPA开源社区#]K/[&ll

    内核在/proc/sys目录下提供了一些控制文件,让大量重复发生的日志消息在来源处就被阻塞。参见28.4节,了解通过设置哪些内核参数来实现一般控制机制的更多信息。这些专门的控制文件是/proc/sys/kernel/printk_ratelimit/proc/sys/kernel/printk_ratelimit_burst,前者指定在启动阻塞之后内核消息之间必须间隔最少多少秒(默认为5s),后者规定在启动阻塞之前允许多少组消息通过(默认为10)。这两个参数都是建议性的,所以它们不会绝对保证能制止大量消息。

2Ow8qTX+VT2A0

遗憾的是,系统启动脚本的日志机制没有内核的日志机制管理得好。Red Hat Enterprise Linux采用一条叫做initlog的命令来捕获启动命令的输出,并把它发送给syslog。遗憾的是,无论什么时候运行命令,都必须明确调用initlog,所以确实要以某种复杂性为代价才能捕获到信息。这些日志项最终还是会进入/var/log/boot.logLUPA开源社区I&Q4Y6Lwl!M


(D(\ s?D0    我们举例用的其他系统都没有连续捕获启动脚本的历史输出。个别命令和守护进程能记录下来一些信息,但是大多数信息都不作日志记录。LUPA开源社区l#n wI2Vs#w5K
 
LUPA开源社区q"p/|{1am

Fedora以前使用和Red Hat一样的initlog系统,但是现在这条提交日志记录的命令已经从启动脚本中注释掉了。幸好还有一个工具函数的中央库/etc/init.d/functions,您可以在那里去掉initlog的注释行重新启用它们。LUPA开源社区!v{.dZJL#Tj5R

LUPA开源社区'QCV,@pW
LUPA开源社区+q3W j,Pxuy.P
10.3 logrotate:管理日志文件LUPA开源社区8~.~B\ xA"g

:m/O4],J4T0

    Erik Troan提供了一种优秀的工具logrotate,它实现了多种多样的日志管理策略,而且在我们举例的所有发行版本上都是标准应用。

s-V!L.j5fl4u.O0

    logrotate的配置文件由一系列规范组成,它们说明了要管理的日志文件组。出现在日志文件规范之外的选项(诸如下面例子中的errorsrotateweekly)适用于后面所有的规范,它们可以在特定日志文件的规范内被覆盖,也可以在文件的后面重新指定,修改默认值。

qej3_1W7t^0    下面是一个有点儿故意人为的例子,它设定了几种不同的日志文件:LUPA开源社区ttHez a6B1Gt$J6W
LUPA开源社区s%I"VhO+Z
    #Global options
Dk,l T MLsV0    errors errors@book.admin.com
m:^5]3rr'J2y j0    rotate 5
D-@2e&^g}u(T5u!U U0    weeklyLUPA开源社区TityB%Du h;S

C#A4K!jC'yaE^:k0    #Logfile rotation definitions and optionsLUPA开源社区 a`(T R9a*V:W(s
    /var/log/messages {LUPA开源社区z|2|J/K9oz8E4u2O
       postrotate
M-i/S/}7~5{0          /bin/kill -HUP `cat /var/run/syslogd.pid`LUPA开源社区([3mYL@` X
       endscrīpt
v*W _*b+p6d.F0    }LUPA开源社区n+J4{.\5HD,N,A
   
\'oFJ:Th0    /var/log/samba/*.log {LUPA开源社区GkEb$NU'g"ihn3i7hp
       notifempty
9C'@sj$U!|^1L%k5{0       copytruncate
}K3@d`t0C.B6Ov0       sharedscrīpts
+r%}?5S$U U0       postrotateLUPA开源社区6|;`$DV:\
          /bin/kill -HUP `cat /var/lock/samba/*.pid`
'LYuUz.e}"X0       endscrīptLUPA开源社区0r&sp2[\U"p!N6g
    }LUPA开源社区 }DX;{g.r

7vhN,?%tq0

这一配置每周轮换一次/var/log/messages文件。它保持了这个文件的5个版本,并且在每次重置文件的时候通知syslogdSamba的日志文件(这样的文件可能有好几个)也每周轮换一次,但不是移到一边后开始一个新的,而是复制以后截短。只有在轮换了所有的日志文件之后,才向守护进程SambaHUP信号。

@$u8Zi E-KF0

10.2列出了logrotate.conf最有用的选项。LUPA开源社区7i8lP4zL`j

10.2                            logrotate的选项LUPA开源社区tE+x(S Kt8u'hN0D

   

/C3L!nU:^/w?*]0

   

q#@d'J{*Y9w"` ~j0

 LUPA开源社区'|~/O Y uH4E{3g I+h

compress

FS)g_9rp o0

压缩日志文件的所有非当前版本

3n"bh;x]7`0

 

9{A0k4@1A+EaxR;g0

daily, weekly, monthly

"Q0UgZ!`(w Z\0

以指定的时间安排来轮换日志文件

y m7eU/}+Ni|3D7A0

 LUPA开源社区|)^W:m!f0}2]o)LY

delaycompress

qM7x B7?T$a|9H0

压缩除了当前和最近之外的所有其他版本LUPA开源社区+EVX7v0n }eQ V

 LUPA开源社区wF Z C%Y R9{L

endscrīptLUPA开源社区n$o']/E:A#|6}cU

标记prerotate或者postrotate脚本结束

^2}#V u c%[0

errors emailaddr

!b~&ZR-k"Pi{X0

向指定的emailaddr发送出错通知邮件

"JYe$C+t;q0

missingokLUPA开源社区IG i|Qa

如果日志不存在,不会发出抱怨

9B \1o4\T4s(p8FGk0

notifempty

8~@/n"@:u ~Lo5T0

如果日志为空,则不轮换它LUPA开源社区Jd"Pd xS

olddir dir

s^EX,o{WZ0

指定要放入dir里的日志文件老版本

J.tyV C"W0

postrotate

)S#Czy6XX0

引入在轮换过日志之后要运行的脚本LUPA开源社区!Do#dC,H!wv

prerotateLUPA开源社区"rd${ht7AeS(WQ

引入在进行任何改动之前运行的脚本

w@:v:WN Qquc0

rotate nLUPA开源社区g R A? nGJ

在轮换方案中包括n个版本的日志LUPA开源社区K_r^eR:CcBDJ

sharedscrīpts

]H,y:Y)f0I9z0

只为整个日志组运行一次的脚本LUPA开源社区H8|*^X1L9z:I8@1r

size=logsize

V!O(Jx-^/`0

如果日志文件大于logsize(例如,100K4M)才轮换LUPA开源社区pp!MKn0t1Y

 

w#^#MbB^0

    logrotate一般每天由cron运行一次。它的标准配置文件是/etc/logrotate.conf,但是在logrotate的命令行上一次可以出现多个配置文件(或者包含配置文件的目录)。这一特性被我们所举的发行版本充分利用,它们规定/etc/logrotate.d目录是保存logrotate配置文件的标准位置。懂得logrotate的软件包(这种软件有很多)能把执行日志管理指令作为它们安装过程的一部分,这大大地简化了管理工作。

$K9H#YK Ek6j0    除了logrotate之外,DebianUbuntu还提供了一种更简单的程序,它叫做savelog,能够管理单个文件的轮转工作。它比logrotate更直接,不用(或者不需要用)配置文件。有些软件包更愿意使用它们自己的savelog配置,而不用logrotate
*{'G4x.b8L^!|y0
eVu5GPQ010.4 syslog:系统事件的日志程序
yQ)Idl&n4B5_0
Ur1v2sm gwD0

    syslog最初是由Eric Allman编写的,它是一个综合的日志记录系统。syslog有两项重要的功能:使程序员从繁重、机械的编写日志文件代码的工作中解脱来,使管理员更好地控制日志的记录过程。在出现syslog之前,每个程序都有自己的日志记录策略。系统管理员对保存什么信息或是信息保存在哪儿没有控制权。

f P/ot @4f0     syslog相当灵活,它能让消息按照其来源和重要性(“严重性级别”)来排序,也能把消息送到各种目的地:日志文件、用户的终端、或者甚至是别的计算机。syslog集中管理网络日志的功能是它最有价值的特性之一。
;XKeJ8G*g0LUPA开源社区\"czK3} RR7uh
LUPA开源社区xQR hiv
10.4.1 syslog的其他替代方案
+`#b$OpDo0
B`SB:KG7X0    虽然syslog已经长期主导UNIXLinux的日志系统,但是人们已经开发出了替代它的几种方案,试图解决它的一些缺点。syslog-ng(下一代syslog)就是这其中之一,它现在成为SUSE系统上默认采用的日志工具。从配置的观点来看,它和标准的syslog有很大的不同,我们在本书里就不详细介绍它了。如果想在非SUSE的系统上试试,可以从www.balabit.com获得它
m)t.q!w ^&F0
    syslog-ng增加了更多的配置功能、能基于消息内容进行过滤,确保了消息一致性,以及在消息通过网络转发时针对防火墙的限制提供了更好的支持LUPA开源社区}t-H&r^_
   
圣地亚哥超级计算中心的)SDSC Secure Syslog也叫做高性能syslog。它通过实现RFC 3195的规范,提供了一种“达到举证水平”的审计系统。它的设计考虑到了大流量站点的需要,包含了大量性能优化措施。您可以从sourceforge.net/projects/sdscsyslog获得它的源代码LUPA开源社区e.QD7Z&S?,M-xa&V
LUPA开源社区+BAbP {/hE0Z
LUPA开源社区S'Mx"kb
10.4.2 syslog的体系结构
q'W\1KGb[9u0LUPA开源社区,Hr9]`CW8c_L;{

   syslog包括3个部分:
yPgyq0?,|0
LUPA开源社区1WA;d(y*M]S*`

   ·syslogd,日志守护进程(及其配置文件/etc/syslog.conf);

Bj2mOQ(EW0

       ·openlog等,将消息提交给syslogd的库例程;

fI@Q'I9My8?-A0

       ·logger,一条从shell提交日志记录项的用户级命令。LUPA开源社区5Yi+UN/w*J*T

    在下面的讨论中,我们先介绍syslogd的配置,然后简要说明如何从Perl脚本中使用syslog

l6@"u {:ME:R3F0

    syslogd在系统引导时启动并连续运行,它不能用inetd来管理。懂得syslog的程序把日志项(使用syslog库例程)写到专门的文件/dev/log中,这是一个UNIX的域套接口。syslogd从这个文件中读取消息,参考其配置文件,并将各条信息分发到合适的目的地。

|C$m.PM^,R@0

    挂起信号(HUP,信号1)可以让syslogd关闭它的日志文件,重新读取它的配置文件,并再度开始日志记录。如果用户修改了/etc/syslog.conf,那么必须向syslogd发送一个挂起信号来使修改生效。TERM信号将使syslogd退出。

*? D)[%nqu#@0

    syslogd将它的进程ID写入到文件/var/run/syslogd.pid里。这一约定使得从一个脚本向syslogd发送信号变得比较容易。例如,下面的命令将发送一个挂起信号: 

fPN(a p0eKQ!l0

    # kill-HUP ‘/bin/cat /var/run/syslogd.pid‘ LUPA开源社区XkG5M/^?

     试图压缩或者修改一个已经由syslogd打开以供写入信息的日志文件是不太安全的,可能会导致不可知的结果。恰当的步骤是把老的日志移到别处,重新创建日志,权属关系和权限都保持不变,然后向syslogd发送一个HUP信号。这个过程用logrotate很容易就能实现,参考10.3节的例子。
sK U6\G? Z:z1?M]0
:w.iKL E0e;W%M0
4{*E+s8Esuk q7p010.4.3 配置syslogdLUPA开源社区u'}:hn"M ~+Qz
LUPA开源社区(b0D7bw)r$qX g8Q:Kl

    配置文件/etc/syslog.conf控制着syslogd的行为。这是一个格式相当简单的文本文件。空白行和以字符“#”开始的行都被忽略。基本格式为:

u1T_-uv)grD0

    selector <Tab> actionLUPA开源社区0[yP-{)}[0S

     例如,下面的一行: LUPA开源社区F-o%E%Da/}3^
    mail.info       /var/log/maillog
LUPA开源社区*f@BGk}

    将把来自电子邮件系统的信息保存在文件/var/log/maillog中。LUPA开源社区 db+F:TY

    selector用语法facility.level指明正在发送日志消息的程序(即“设备[facility]”)和消息的严重性级别。设备的名称和严重性级别必须从已定义值的一个简短列表中选择,程序不能使用自己定义的值。设备分别为内核、常用应用程序组、以及本地编写的程序进行定义。任何其他程序则归为普通设备“用户(user)”一类。LUPA开源社区)g([-tQ(K"l8D

    selector可以包含特殊的关键字*none,其含义分别为“所有的”或“什么都没有”。selector可以包括多个用逗号分开的设备。多个selector可以用分号组合起来。LUPA开源社区:dV&Mk*C,~#~v

    一般而言,selector相互之间为“或(OR)”的关系,和某个selector匹配的消息将由同一行的action处理。但是,不管同一行中其他的selector是如何定义的,只要有一个带有none级别selector就会排除列出的设备。LUPA开源社区_ V1\ a+OfMX

    这里有几个格式化和组合selector的例子:LUPA开源社区(S2H;{&R6F1O}
LUPA开源社区;kq'rlb'RA
    facility.level                    actionLUPA开源社区gXD1w6@A.p7^#S b
    facility1.facility2.level         action
6Oi^K Vu~z ~7c0    facility1.level1;facility2.level2 actionLUPA开源社区 b p,UA(Zxe
    *.level                           actionLUPA开源社区sP9ilKA*KU rz
    *.level;badfacility.none          actionLUPA开源社区 G+]Kgk
LUPA开源社区\ V9oY[vQT

10.3列出了有效的设备名。目前的设备有21种。LUPA开源社区-c3f#U:JfX o

syslogd本身可以产生时间戳消息,如果syslog.conf中出现了“mark”设备(facility)为其指定的一个目的地,那么会记录这些消息。时间戳可以帮助用户确定机器是在早上3:003:20之间崩溃的,而不仅仅是“昨天晚上的某个时间”。这个信息在调试有规律发生的问题时有很大用处。例如,许多站点都经历过当清洁工在深夜插上吸尘器电源时发生跳闸而导致神秘崩溃的事。LUPA开源社区YPqTt+S Ws&W

10.3                             syslog的设备名LUPA开源社区.Cl"~ A7GC!G-T_ W

设备(facilityLUPA开源社区|:E#gwqg

使用该设备的程序LUPA开源社区to-D/I6V4Y OZ

*LUPA开源社区|D5{gj-Z0l

除了“mark”之外的所有设备LUPA开源社区PX]/TfP o&w

authLUPA开源社区2CcFyU[ `+m2C4U

与安全和授权有关的命令LUPA开源社区VqYu;j]

authprivLUPA开源社区d P"l LoCY ]"F

敏感/保密的授权消息a

1j/]+E PsG*x0

cron

vx \%]d [z;W0

守护进程cron

-?!Y;f6s)`2D1EqQR N0X0

续表LUPA开源社区$z3`v[*M

设备(facility

u!qe!l6L Y0

使用该设备的程序LUPA开源社区G*n j xQ%Zc

 LUPA开源社区R8zR#O{;[$L,K

daemonLUPA开源社区6u{k`"`lJ{)~

系统守护进程LUPA开源社区.P|BD(?q\

 

pk sm TgSb:On0

ftpLUPA开源社区Evy*YRj+u N.M

FTP守护进程,ftpdLUPA开源社区u1D(Ru~,aM

 LUPA开源社区Z#e9nG,TCdU

kernLUPA开源社区u9}$]R2z+K?1c0Nu

内核LUPA开源社区a'fs+fX O.Fv2^

 

K \Rd9M,W:E0

local0-7LUPA开源社区9vG"t#y }6a2fN

本地消息的8种类型

Mt:b'kK0

 

YY;{ cE+J8uN0

lprLUPA开源社区Nz+R \i TeX$H5D

行式打印机的假脱机系统

#P9THko~[ j1N V0

 

7h_q8VC)@;}4n5w0

mail

"_$vntV/`M0

sendmail以及其他与电子邮件相关的软件LUPA开源社区\!zC_ S le

 LUPA开源社区Eb,w5L9fLb;u8t

markLUPA开源社区X]{ZXMn

定期产生的时间戳LUPA开源社区&[&MbU F"U&f$EA)?

newsLUPA开源社区 v Q a(O,r;M

Usenet新闻系统LUPA开源社区 [jC;jA

syslog

L po&rxPd0

syslogd内部消息LUPA开源社区6Tw+c L8^-G5BD

user

3XgK8A$L r&H8j)y0

用户进程(如果没有指定,这将是默认值)LUPA开源社区't'{e)Bz6h*s*\n

uucp

5s%D?SRq d%Q\0

UUCP保留,并未使用LUPA开源社区Nl |7~sB_

    a.所有与授权有关的消息都敏感。authpriv消息和auth消息不应该让任何人都能读取。LUPA开源社区v3qvq&ZZ%{my

 

9tL-M1g/Sg?5C0

如果系统十分繁忙,其他日志消息通常可以提供充分的时间戳信息。但在凌晨的几个小时并不总是这种情况。LUPA开源社区@f g*sc7Wu

syslog的严重性级别按照重要性递减的顺序在表10.4中列出。LUPA开源社区4o9S eI$W&^l7s8GZv.c

消息的严重性级别指明了它的重要性。各个级别间的区别有时候显得比较模糊。在noticewarning之间(以及在warningerr之间)有一条清晰的界限,但是alertcrit相比,在所表达的含义上准确的细微差别则有点要靠猜测。表10.7列出了各种常用软件程序采用的特定级别。LUPA开源社区.]pR6D^)k q^2a$f'c

10.4                       syslog的严重性级别(降序)LUPA开源社区*Ya/tC(}g#e9e8L]d

    LUPA开源社区"l-}c:j|O4W'un@W

大 致 含 义

2?4^J7x2klb X0

   

t aL hs!S1Tb4h0

大 致 含 义LUPA开源社区_+`'iA+ek(l

emergLUPA开源社区g:[0j3y`1x5a

恐慌状态LUPA开源社区-m is6h,U9fC1rg

warning

~!S(WOc:L-U2L0

警告消息

mD5{Y"e.k0

alert

o1V'^){2cNL;uM1NG0

紧急状态

6xI*K0mv-y0

notice

%bh2i!G,O0

需要调查的事项LUPA开源社区o*IL;}9O6])@

crit

_ v:k)|&L7i0

临界状态LUPA开源社区f[ []o'c)}

info

%H}6B{ lm[h2B0

提供信息的消息LUPA开源社区V.w7V\]9z

errLUPA开源社区4zhZ*vpe3S$v1VTD

其他错误情况LUPA开源社区jrrO)Uc`

debugLUPA开源社区q;bf\T"s(I

仅供调试

&J3Z dIV2I^lg/e7tf0

 LUPA开源社区X1PwsF Eu4[)M4@

syslog.conf文件中,这些级别指定了最低程度的重要性,只有重要性大于(包括)它的消息才会被记录下来。例如,来自电子邮件系统的一条警告级消息和mail.warning匹配,也同样和mail.noticemail.infomail.debug*.warning*.notice*.info*.debug匹配。如果syslog.conf文件指定了mail.info消息应该被记录到某个日志文件中,那么mail.warning息也将被记录到该文件中。

WNz*tk*y6w.a?0

Linux版的syslog对基本语法做了改进,它也允许在优先级前面加上字符=!,分别表示“仅此优先级”和“除此优先级及其以上级别”的意思。表10.5给出了一些例子。

*Ue7i)~ L ].Dx't6\9h0

10.5                    syslog.conf中限定优先级的例子LUPA开源社区]#aE0q8e$xz,C y

   

c"v@5L6iw&O0

    LUPA开源社区(z.w,CCSo;@-y%[

mail.info

7\.hk,v:g ?0

选择与邮件相关的、优先级为info或者更高的消息

.}Zh)f'j'C{C0

mail.=infoLUPA开源社区F n/ARV

只选择优先级为info的消息LUPA开源社区6s9R^M5e{p

mail.info;mail.!errLUPA开源社区/Z9F5Y{@"Q E

只选择优先级为infonoticewarning的消息

H4@-q1Zjk"C0

mail.debug;mail.!=warning

%lZ {y9C$]})f0

选择除warning之外的所有优先级LUPA开源社区u@rf+_%U8u8J0we7f

action字段说明如何处理一则消息。表10.6列出了可以选择的处理方法。

My^ Q;z}0

10.6                              syslog的动作LUPA开源社区 ?e0dU;{Bf

动作(ActionLUPA开源社区TXaK7W$tii

    LUPA开源社区f%g#dF6xL5B1fH

filenameLUPA开源社区0j0q O Qy&~q%N W0_

把消息写入本地机器上的一个文件里

3O kavQ2`9V0

@hostname

%ef(w BI+K-e0

把消息转发给主机hostname上的syslogd

}(B(U-N9\BJ0

@ipaddress

(~/O+Q yy4K"GfW0

把消息转发给IP地址为ipaddress的主机

d.nu"K0A.pQ8a5G1{c8A0

| fifoname

*W&P2p3Fs)f h;AD0

把消息写入有名管道fifonamea

SD1aTaL0

user1,user2,…

4AUr*u6~;s7\L0

如果用户登录到了系统上,那么就把消息写在用户的屏幕上

9E@KlL:C0

*LUPA开源社区'k#g.b.pOut,p

把消息写给目前已经登录的所有用户

$R/Zh8LO;NA l)n0

    a. 参考info mkfifo了解更多的信息。LUPA开源社区sM4`}hX wv

 

6A6hi4}6lbY,Z0

如果采取了filename(或者fifoname)这样的动作,那么文件名应该用绝对路径。如果您指定了一个不存在的文件名,那么在首次有消息送到这个文件的时候,syslod会创建它[1]。您可以在filename动作之前加一个短划线“-”,表示在写完每条日志记录项后,不应该对文件系统执行sync。执行sync有助于在发生崩溃的时候尽可能多地保留日志信息,但是从磁盘吞吐上来看,代价又太大。LUPA开源社区2S$\{N yB

如果用的是hostname而不是IP地址,那么主机名必须能通过DNS或者NIS这样的转换机制解析出来。

f,u7nly9ps4[O0

虽然一个selector可以包含多个设备(facility)和级别,但是却不能提供多个动作。为了把一则消息发送到两个地方(比如,到本地文件和到中央日志主机),您可以在配置文件中包含具有相同Selector的两行。LUPA开源社区VP6Rhi5u)~5L:|

因为syslog消息能够用来实施拒绝服务攻击,所以除非syslogd-r标志启动,否则它不会接受来自其他机器的日志消息。默认情况下,syslogd也会拒绝充当第三方消息转发器,从一台网络主机来的消息不会再被发给另一台网络主机。使用-h标志能够取消这一功能。(如果您想让这些选项始终都被启用,那么对于RHELFedora,可以在脚本/etc/rc.d/init.d/syslog中加上这些标志,对于DebianUbuntu,可以在脚本/etc/init.d/sysklogd里加上这些标志。)

[1] 注意:这一行同syslog原本的实现正好相反,syslog原来要求事先就创建好日志文件。LUPA开源社区H0W'fW0|bU$_7X X~ `,\

5nX${A&u2HdJ9Il010.4.4 设计站点日志方案LUPA开源社区xUjS1js |-LB
LUPA开源社区+qT$T0K]

    配置日志记录以便把重要的系统错误和警告保存在每台计算机上的一个文件中,在一个小型站点中这样做足够了,就像前面我们用syslog做的那样。syslog.conf文件可以针对每台主机进行定制。

wj,n8wRptQ0

    在一个大型网络中,必须有中央日志记录。它 使得大量信息保持在可管理的状态,而且运气好的话,破坏网络计算机安全的人可能无法访问到审计数据。黑客常常通过修改系统日志来擦去他们留下的痕迹。如果 日志消息刚一产生就被转移到别的位置,那么想要破坏它就更难了。站点级的防火墙不应该让外部站点向syslogd提交消息。LUPA开源社区C b0l.v+db{m i-X

    但要清楚一点,任何人都可以调用syslog,并且可以伪造从任何守护进程或者应用程序来的日志项。syslog也使用UDP协议,而这个协议并不保证是可靠的,消息可能会丢失。LUPA开源社区*w L-Z(A b

    选择一台稳定的计算机作为日志记录服务器,最好是有很好的安全措施而且登录用户不多的一台机器。其他计算机可以使用保存在中央主机上的一个通用配置文件。因此,只需要维护两个版本的syslog.conf文件。这样可以保持日志记录的完整性,但同时对于管理员来说又不再是个恶梦。有关在网络上分布文件的更多信息,请参见第17章。

0dhv IM9G4I!p0

    为了达到最好的安全性,syslog服务器应该通过防火墙与网络的其余部分隔离开,只能让连到syslog端口的网络连接通过,另外只能让得到允许可以向syslog记录日志的主机访问syslog服务器。根据周边的风险程度不同,可以从系统管理员的工作站用SSH连接,让管理员更方便地检查日志。

ERW^/`hH,}l0    某些非常大的站点可能还需要给日志记录体系添加几个级别。遗憾的是,syslog的当前版本只能为最后一跳(hop)保留原来的主机名称。如果主机“client”将某些日志项发送到主机“server”,“server”又将它们发送到“master”,“master”只能知道消息来自“server”,而不知道是来自“client”。LUPA开源社区X*F9oz%aV5@
LUPA开源社区,HuQ{m

%K2g(D;J*v7f+jSJ010.4.5 配置文件举例
e a}!l'y/q)h0LUPA开源社区#]y5X.V6LU-{ n,V

syslog的配置上,不同的Linux发行版本变化非常大。因为读懂syslog.conf文件并不困难,所以就不详细看我们举例的发行版本中使用的配置文件了,它们都很直观易懂。我们转而要看一些常见的方法,如果您做出了不同于系统默认的选择,那么可能想要以这些方法来设置日志功能。

+t7}/n I WoI7q7g~L0

下面有3syslog.conf文件的实例,分别对应于小型网络上的一台单机、较大网络中的一台客户机和一台中央日志记录主机。中央日志记录主机称为“netloghost[1]LUPA开源社区Q~G+[r oDb[ pM

一、单机

下面是单机的基本配置:

L.f5wG/j0

 LUPA开源社区9N2Qy EYl!Eh;V

 

}x8i x6j ]yo0

1个非注释行把紧急(emergency)消息写到所有当前在线用户的屏幕上。在系统即将关闭时,shutdown所产生的消息就是一个紧急级别消息的例子。LUPA开源社区x,cw5^ P\}

2行把重要(important)消息写入/var/log/messages文件。info级别比warning级别低,因此daemon,auth.info子句又包含了来自passwdsu和守护进程的日志记录消息。第三行把打印机错误信息写入到/var/log/lpd-errs

p{$[3N(rf@ BI;C0

二、网络客户机

网络客户机通常把重要的消息转发给中央日志记录主机:

8GmEi0J(n\ K9s;v0

 

7wZ{6B7Hco+l0

 LUPA开源社区 u-l"l5?Yrk/i

这样的配置并没有在本地保存太多日志消息。值得一提的是,如果netloghost已经关闭或者不可达,日志消息将会不可避免地丢失。用户可以在本地机器上保存某些重要消息的额外副本来应付这种可能发生的情况。

5K+Zq8w-b0

在安装了许多本地软件的站点中,许多消息可能会被不恰当地记录到user设备(facility)的emerg级别里。在本例中,第一行用user.none子句专门把user/emerg排除在外。

{y"z.{G1c6N0

2和第3行把所有重要消息转发到中央日志记录主机,从打印系统和全校刷卡访问系统(local1)来的信息都被排除在外。第4行把本地日志消息也传送到netloghost。最后3项将保存打印机错误、sudo日志消息和内核消息的本地备份。有关sudo的更多信息,请参见3.4.2节。LUPA开源社区KDI;x9c,b$^B*\

三、中央日志记录主机

本例针对netloghost,它是由大约7000台主机构成的一个中等规模网络上的中央安全日志主机。

"P3L6[~/h7D-Q | E@)Q |0

 LUPA开源社区 h\2D)J fhz5s

 

'i|R;u mny2?0

从本地程序和网络上的syslogd来的日志记录数据被写入到文件。在某些情况下,每种设备(facility)的输出结果都保存在它自己的文件中。LUPA开源社区+D*C@fX&J

中央日志记录主机在写入每条消息时都为其生成一个时间戳。时间戳并不反映原来主机上的时间。如果用户拥有位于不同时区的主机,或者系统时钟不同步,那么时间戳就会有点儿误导性。LUPA开源社区)h9tI+n/f*^'c



[1] 更准确地说,它用“netloghost”作为它的主机别名。这样一来,几乎不需要重新配置就能对日志主机的标识进行调整。可以在/etc/hosts中加入别名,或者在DNS中用CNAME记录建一个别名。参考15.7.8节了解有关DNS CNAME记录的更多信息。
+i^Q*@0Ff0LUPA开源社区A[r%JiB` jE;Q+~
10.4.6 syslog输出的样本
\S;k6tP/K"[0
s{ ?|Y#{!VL0

下面的日志文件片段取自科罗拉多大学计算机系主控syslog主机中的日志文件之一。

g(j a7CBJ g;u0

 

hK]Y L5G0

 LUPA开源社区5iu7z#irq8])S

这个例子包含的记录项源自不同的主机(av18proxy-1mroecoyote)和不同的程序:sbatchdpop-proxypingem以及PAMPluggable Authentication Module,可插入式身份验证模块)库。LUPA开源社区sD2gq;{H2F9P

请注意节录的最后一行,它抱怨说有一条消息重复了100遍。为了使日志更加简短,syslog通常会合并重复的消息,并用这样的总结来替换它们。但是,取得这个日志示例的主机还可以接受来自许多其他主机的日志记录,因此这条特别的消息就有一点儿误导性。在这一混合的日志中,这条消息实际上指的是前面来自av18的日志记录,而不是紧接在它前面的那条日志记录。LUPA开源社区:O$s:lcX5X8K V

定期细读日志文件是个不错的想法。确切知道什么是正常的,以便在发生异常时可以很容易地发现它。还有一个更好的方法,安装一个日志的事后处理程序(例如swatch)来自动捕获异常情况。请参阅10.5节。
?ls3n,U.^D[0
(`Co/K,~1L5x010.4.7 使用syslog的软件LUPA开源社区 o7C W o5\ |'Db

2NoA-|d/Ut%xCK0

10.7中列出了使用syslog的一些程序,还包括了这些程序的日志记录的设备(facility)和重要程度的级别,以及对每个程序的简短描述。有些行加了阴影是为了便于阅读。LUPA开源社区6T.@)X z;eU

10.7                           使用syslog的软件

/L9T C}6H-G{ sr9T0

   

R7N*FQ b/]0

    LUPA开源社区 d-mkT9iOm

   

#O7Nr"W Mon0

   

MiFS uv:t7|0

cronLUPA开源社区Y\4\:Jt;W9v P

crondaemon

w'z4R'J2|Y2O&m{0

infoLUPA开源社区{&b O*M/e'u&E7o

系统任务调用守护进程

R2n3m^1Vuf0

cups

3RXL6Jv5V0v#MVP0

lprLUPA开源社区[xZj/_ R(C

info-err

RKq[(C0

常用的UNIX打印系统LUPA开源社区,zedd"X7r&S%K

ftpdLUPA开源社区g0~9\g!K7C&b4]!w

ftp

|_EVDbi"p?0

debug-critLUPA开源社区5q&|&h*K1y cp

FTP守护进程(wu-ftpdLUPA开源社区r8` ~q"?_Js*b`

inetd

Gd/R6Yc,w'[3e0

daemon

!D U$d,~)F:dm\0

errwarning

"JE G9HB-WSt$?0]0

Internet超级守护进程(Debian

#vh No*f2Ay'M(Tj+X'Y0

imapdLUPA开源社区 Q$s@*h"\x&s

mailLUPA开源社区7l p0r#}#v(@|

info-alert

-j$r*F)fS0

IMAP邮件服务器

N-S4r%QIH6Dn0

login

(hXAH(HG0

authprivLUPA开源社区VTgIS

info-errLUPA开源社区 ?W#~a _,Et2[^ nd$R

登录程序LUPA开源社区/E'I'?;x2l&@+U'dX

lpdLUPA开源社区-~"u4Ko"X&[^dqj

lprLUPA开源社区 ^$X2|{B||}

info-errLUPA开源社区ZM$YsF/cu

单行打印机守护进程LUPA开源社区0`&G7CVY;j3bg

namedLUPA开源社区k4Y4F`0Y+W

daemonLUPA开源社区3DL.uf*xd

info-err

b(~V\ XF s?K2o+J'M0

名字服务器(DNSLUPA开源社区g6nc]s/bQ(^ ?^

ntpd

)E7m E S_5t ^0

daemonuserLUPA开源社区 Ej~/k aipu/b

info-critLUPA开源社区#Oi3q.r X6i0Y.~

网络时间守护进程

,QRGMB3vOO)p0

passwdLUPA开源社区O7Q.x{|'`jy-TI

auth

}0ShX4eh0

noticewarning

B5B1hrT^i+}0

口令设置程序

3`:V-H }IqD?yS0

popper

untx C6X+g0z0

local0

(|4S9i{ s/x0

debugnoticeLUPA开源社区+QhdAK E

POP3邮件服务器

@ M%eiUS%y/t0

sendmail

!i&Y| {9zU ko3s0

mail

hD8g%pek0

debug-alert

4D V,Y9D8~(F9d0

邮件传输系统

R6U!vV8uk-r0

ssh

.l(cC2?$r)Zw0

auth

cjq ^.I0

info

1Wi\,sa$?,zNG0

安全shell(远程登录)

l,B M4q H ?o0

su

#cB5]6V[8TH0

authLUPA开源社区M0G6D]B A$^|,O

noticecritLUPA开源社区!mFEy_7M!GJ

切换UIDLUPA开源社区![8P \E%V{P

sudoLUPA开源社区1Z l&S_Uq$C/x

local2

3y f+sJ `N2^z-_0

noticealertLUPA开源社区#Gd/GXZ6n`

受限的su程序

M3fE(b.S^y j]7Lh0

syslogd

6^l1{x {4Q;\0

syslogmark

ECWZ q*k$H&C` T0

info-errLUPA开源社区 M EJ o O

内部错误、时间戳LUPA开源社区z6G{8i3Aak

tcpd

?T+L9`F ySQ0

local7

k&\D&edw0

debug-err

tC!t@;`@0

inetdTCP封装程序LUPA开源社区5^o G$F|7pY

vmlinuz

2t`T&h;it0

kern

,Kjy"a8y?0

所有级别

_@V3}B0

内核

B:uL1^5f2v&O/p5Jmcr0

xinetd

R/n y"V2vjX`0

可配置LUPA开源社区T?7vH NSRv]2Z@

info (默认)LUPA开源社区m3_e(n v,{ ?2w k

inetd的变体(Red HatSUSELUPA开源社区 b k{d-rvG

 LUPA开源社区 |'Ti$c:s Q/]!A&ZX

有了所有这些信息,用户应该非常清楚哪些消息应该保留、哪些应该删除了,不是吗?但是,可能未必如此。实际上,用户必须知道什么样的日志级别对自己的系统有用。最好的方式是首先让日志记录超过需要,然后去掉那些不想要的内容。等到产生数据的平均速率令您满意时就可以了。LUPA开源社区7g:]r.]JvWZ

z+w9]UNK!c,Z$N010.4.8 调试syslog
7T{T Y-|$G5e] d0
#x2D#eGi a+rQ#~0

logger命令用于从shell脚本提交日志项。用户也可以用它来检测syslogd的配置文件的变化。例如,如果已经添加了一行:

9P i/gO%bwO0

local5.warning         /tmp/evi.logLUPA开源社区lFw!G V,]M Ik;hj:C

而且想看看它是否起了作用,则运行:

H.g}d7\p0

$ logger -p local5.warning "test message" LUPA开源社区 I[8Jk)@&x4}L~
LUPA开源社区o5Y!M3yNMNb

含有“test message”的一行记录项应该写到/tmp/evi.log文件中。如果没有写入,那么可能是忘记了给syslogd发送挂起信号。LUPA开源社区Z{l$j6q4tDA"b

把日志记录发给控制台设备/dev/console、任何虚拟终端或支持流控的端口的时候应该小心。如果有人在控制台键入了<Control-S>,那么控制台的输出将会停止。所有对syslog的调用都将受阻,系统将变得非常缓慢。检查这种性能下降情况有一个好方法,即通过logger向控制台发送一条syslog消息。如果logger挂起了,则用户需要找到出了问题的端口,键入<Control-Q>,然后重新考虑日志记录的策略。

$P Z[ Z PYjP0

在控制台上做日志记录的另外一个缺点是,由一个大问题产生的大量消息可以使控制台变得不稳定,而此时正是最需要它的时候。如果没有优化过控制台驱动程序,又采用某种帧缓冲类型的话,大量的消息确实会让整个系统无法使用。

"QgZ K+n$F+L cdgL^0 根据控制台的设置和管理情况不同(例如,通过一台控制台服务器),控制台的日志记录也应该有一些安全措施。
u.t8O w^ G t |0
tu]4d `2Y&Ld010.4.9 在程序中使用syslogLUPA开源社区I%umfpdKo
LUPA开源社区#fX3bL{A"}'Zf

库例程openlogsyslogcloselog能够让程序使用syslog系统。这些库例程有CPerlPythonPHP的版本,这里只讨论Perl的接口。

)gb@l"v ` E(B0

Perl脚本的开始处加上下面的一行,就可以引入库例程的定义:LUPA开源社区 qz'_&HI2a

use Sys::Syslog;

G/Q~rjg"A5rc0

openlog例程使用指定的设备(facility)名称初始化日志记录:LUPA开源社区1uT%r'q0e9X9|

openlog(ident,  logopt,  facility);

i[(rqF!nD0

消息按照logopt指定的选项被记录下来,并以标识字符串ident开头。如果没有用过openlog,那么默认ident为当前用户名,logopt为一个空字符串,而facility为“user”。logopt字符串应该包含一个由逗号隔开的选项清单,这些选项在表10.8中列出。

1] c#k@$o0

10.8                           例程的日志记录选项

/KdX}9\ o0

   

\3N!TGZ)g9G0

    LUPA开源社区+NR%wV3@ yu

pid

r.wD K1I? |#YFX0

在每条日志消息上包含当前进程的PIDLUPA开源社区 g;] [ }L X

ndelayLUPA开源社区0kTQ/AY p

立即连接到syslogd(不用等到要发消息的时候再连接)

C9x9P,bba;R0

cons

!b {:sOP M&T0

如果syslogd不可达,就把消息发送到系统控制台

^&d? O3XI9r ll]0

nowait

&Kj:].`#tlk-x v[$]i0

不用等待(wait(3))派生子进程来写控制台消息LUPA开源社区~sa.L}6bqk3N

例如,合理的openlog调用可以是:LUPA开源社区%D7M3G3]F

openlog("adminscrīpt",  "pid,cons",  "local4");

N"s&S.\e-f0

syslog例程发送一个消息至syslogd,将其以指定的优先级记录:LUPA开源社区/W8d$Ow K

syslog(priority,  message,  ...);LUPA开源社区M$k0g@,d`+Y{q:g

来自openlog调用的日期、时间、主机名称和ident字符串都预先加入到日志文件的消息中。message后面可跟各种其他参数,以形成一个printf风格的输出格式,包括文本和其他变量的列表,例如:LUPA开源社区*tF pz,_0^

syslog("info","Delivery to'%s'failed after %d attempts.", $user, $nAttempts); LUPA开源社区L[0j@q

特殊符号%merrno的当前值(最新的错误代码)扩展为一条错误消息。LUPA开源社区j.b O)C5L

形如“level | facility”的优先级字符串既设置了严重性级别,也设置了设备名称。如果没有调用openlog并指定一个ident字符串,syslog例程还会检查message是否具有一条标准UNIX错误消息的形式,例如: LUPA开源社区[vB5nUu

adminscrīpt:  User  "nobody"  not  found  in  /etc/passwd  file. 
'd]5u u5tbvx0LUPA开源社区"E,`j*~6Kb^@\*egk

如果符合这个格式,冒号之前的那一部分就被秘密地采用为ident字符串。这些有用(但没有在文档中正式说明)的特性使得调用openlog并不是必不可少的了,但调用openlog仍然是个不错的想法。在一个地方(调用openlog时)指定设备的名称,比在整个代码中不断重复设备名称要好。

RG_1U.RP:HM4U7a0

closelog例程将关闭日志记录通道:

9DV/f IDmz,i0

closelog(); 

ReH urE!Ue,^0

如果想以不同的选项重新打开日志记录通道,就必须调用这个例程。在程序退出时调用closelog是一个很好的形式,但是这样做并非必不可少。LUPA开源社区 [3r6Qf#V,j r ^

下面有一个完整的例子: 

5C#lcY4g_k0

这一小段脚本将产生下面的日志记录(191admincriptPID):LUPA开源社区`!Dc*WR!P

Dec 28 22:56:24 moet.colorado.edu adminscrīpt[191]: Those whom the gods

a:HX bh*Y0      would destroy, they first teach Basic.LUPA开源社区SD%MBr n&d Ho1r

zX5|P{I010.5 分析日志文件LUPA开源社区e6Tk'b`a
LUPA开源社区|N6x1wT\0hE

syslog对于日志消息的排序和路由选择非常有用,但当所有一切都安排妥当之后,最终的结果仍然是一堆日志文件。虽然这些文件可能包含了所有有用的信息,但在出现问题时,这些文件并不会自己找上门来。需要另一层软件来分析日志并保证不会在众多日志中找不到重要的信息。

;{8O~-V3Hy?0

可以使用各种免费工具来弥补这个漏洞,它们 中的大多数都很相似:它们可以扫描最近的日志项、把它们与一个正则表达式的数据库进行匹配,并用某种引人注目的方式处理重要的信息。有些工具可以以电子邮 件形式发送报告,其他一些工具可以配置成发出声响、用不同的颜色打印日志项或者向呼机发送信息。这些工具的差别主要在于它们的灵活性程度和现成的匹配模式 数据库的大小。

F?&l7[5lX1@,I$r0

有两种比较常用的日志事后处理程序,一个是Todd Atkins编写的swatch,另一个是Craig Rowland编写的logcheck。这两个程序都能从sourceforge.net找到(logchecksentrytools软件包发布:sourceforge.net/projects/sentrytools)。

5Gw L'?W3f9g~0

swatch是一个Perl脚本,它从一个配置文件获得它的执行顺序。它的配置语法相当灵活,并且还能使用Perl的所有模式匹配功能。虽然swatch可以一次处理一个完整的文件,但主要还是让它自己保持运行,以便在新消息到达时可以用tail -f及时查看。swatch的一个不足之处是用户必须从头建立自己的配置文件,它不知道某些特殊系统,也不理解这些特殊系统可能生成的日志消息。

~7W'L3Y5EO$G*f0

logcheck是用sh写出的一个更基本的脚本,与它一起发布的还有一个C程序,logcheck用它帮助自己在一个日志文件中记录自己的位置。由于logcheck知道它从日志文件中读取了多少内容,所以降低了启动或者关机时丢失消息的可能性。此外,logcheck可以在cron中以一定间隔运行,而不是连续运行。LUPA开源社区r.R;z6Y9OBV P

logcheck还带有用于几种不同UNIXLinux版本的数据库样例。即使用户不想实际使用这些脚本,参考它们的格式看看能否从中借鉴一些以供自己使用也是值得的。

M$A-~5I[n#v0

这两个工具都有一个弊病,即一次只能用于一个日志文件。如果用户的syslog配置将消息分类到多个不同的文件中,则可能要把某些消息复制到一个频繁被截短的中央文件里,然后把汇总文件送给事后处理脚本来处理。这比建立一个复杂的脚本网络来处理多个文件要容易一些。

&SHWg0X0

另一种值得一提的工具是Kirk Bauer写的logwatch。与其说它是一个即时监测和报警工具,还不如说是一个日志总结工具。但它的优点有:相当简单,FedoraRed Hat默认都安装它,并且有RPM包和APT软件包可用。

8]x&V5KR4LuJp*A Xd0

SEC(简单事件关联程序,Simple Event Correlator)是一种不同类型的日志管理工具。它是一个Perl脚本,能够从文件、有名管道或者标准输入读取数据行,然后用正则表达式匹配它们,把它们转换为各类“输入事件”。配置规则接着规定了如何把输入事件变为输出事件,比如执行了某个脚本、向某个指定的管道或者文件发了一则消息。LUPA开源社区 r#pk7g{'UM~K

kodu.neti.ee/~risto/sec可以获得SEC的软件发布,它带有一份内容丰富的手册页,其中还有例子。在这个网站上还有更多别的例子。SEC并不像前面所列的那些工具一样是现成可用的,但它是一个用来构建定制的日志分析工具的好基础。LUPA开源社区0lI"q$G]r$L

不管用户使用什么系统来扫描日志文件,下面这些情况都应该留心,并应该立即引起管理员的注意。

C"EmK oS"l5PH9N0

·大多数与安全相关的消息都应该及时检查。对于监视登录、调用susudo的失败企图,以便在潜在的入侵发生之前先发现它们来说,这样做通常会有帮助。如果只是某人忘记了他的口令(这是经常发生的事情),那么及时而主动地提供帮助将给别人留下很好的印象,并且能巩固您具有敏锐洞察力的声望。

(hvB\Rs)h1Zn9|0

·磁盘已满的消息应该突出,并立即采取措施。充满的磁盘常常会使所有工作陷于停顿。

jg&bP"] {#Mv6D0 ·不管怎样,多遍重复的消息都应该特别注意。
M-l8Gf O'Gjv7N0LUPA开源社区}Ni!Q6n0p#?Uw f
10.6 习题LUPA开源社区c s1z+ivj9M coE
LUPA开源社区s;rZU8h5~Z6\
E10.1  保留老日志文件的主要理由有哪些?

E10.2  lastlogwtmp之间的区别是什么?每种日志合理的轮换策略是什么?LUPA开源社区1V5F+]c3v |.u9G

E10.3  剖析和理解下面的syslog.conf文件:LUPA开源社区9CY r&aoR#l
       *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages

7y6?5ar2H7@/P,H,G A0

        它看上去合理吗?

Ia'_F0c&kj n0

E10.4  看一遍您的日志文件,注意namedDNS名字服务器)的日志记录项。有什么机器试图动态更新您的名字域吗?它们取得成功了吗?(可能需要root权限)LUPA开源社区V9qY5d&W8j3m,{C

E10.5  您可以从哪个地方找到您机器上的引导日志?影响系统引导时日志记录机制的因素有哪些?klogd是如何解决这些问题的?

A)t:uY7o'o*r/n4EK0

E10.6  研究您的站点所采用的日志策略,包括日志文件轮换策略。为日志记录投入了多少磁盘空间?日志文件要保留多久?您可以预见到站点策略显出不足的情形吗?您建议的解决方案是什么?(需要root权限)LUPA开源社区/s$c"hn"[ L

E10.7  有些日志消息极为重要,系统管理员应该立即查看它们。您会安装什么系统来尽可能快地做到这一点?LUPA开源社区Sz^7sfErD

E10.8  编写一个C程序或者Perl脚本,用“user”设备把消息提交给syslog(可能需要root权限)。LUPA开源社区-x1|_i)P KWI


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2010-03-14  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 19862
  • 日志数: 50
  • 图片数: 28
  • 文件数: 3
  • 建立时间: 2007-02-28
  • 更新时间: 2009-09-25

RSS订阅

Open Toolbar