分类: LINUX
2009-11-28 09:10:08
登录文件
其实,可以说成是监控
系统的记录,系统一举 一动基本会记录下来。 这样由于信息非常全面 很重要,通常只有 root 可以进行视察!通过登 录文件(日志文件)可 以根据屏幕上面的错误 讯息与再配合登录文件 的错误信息,几乎就可 以解决大部分的 Linux 问题! 所以日志文件异常重要 ,作为一个合格的li nux系统工程师,日 志文件是必要熟练掌握 的部分。
常见的几个登录文件有
: /var/log/s
ecure:记录登入系统存取数据 的文件,例如 pop3, ssh, telnet, ftp 等都会被记录; /var/log/w
tmp:记录登入者的讯息数据 ,由于本文件已经被编 码过,所以必须使用 last指令来取出文 件的内容; /var/log/m
essages:尤为重要,几乎发生的 错误讯息(或是重要信 息)都会被记录在此; /var/log/b
oot.log:记录开机或者是一些服 务启动的时候,所显示 的启动或关闭讯息; /var/log/m
aillog 或 /var/log/m ail/*:纪录邮件存取或往来( sendmail 与 pop3 )的使用者记录; /var/log/c
ron:记录 crontab 这个例行性服务的内容 的。 /var/log/h
ttpd, /var/log/n ews, /var/log/m ysqld.log, /var/log/s amba, /var/log/p rocmail.lo g:分别是几个不同的网络 服务的记录文件!
登录文件的纪录程序之
一: syslogd 通常经过 syslog 而记录下来的数据主要
有: 事件发生的日期与时间
; 发生此事件的主机名称
; 启动此事件的服务名称
(如 samba, xinetd 等) 或函式名称 (如 libpam ..); 该讯息数据内容
syslogd的da
emon配置文件:/ etc/syslog .conf 内容语法是这样的:
服务名称[.=!]讯
息等级 讯息记录的文件名或 装置或主机 # 例如底下:
mail.info /var/log/
maillog_in fo
服务名称:该服务产生
的讯息会被纪录的意思 。syslog 认识的服务主要有底下 这些: auth, authpriv:主要与认证有关的机制
,例如telnet, login, ssh 等需要认证的服务都是 使用此一机制; cron:例行性命令 cron/at 等产生讯息记录的地方
; daemon:与各个 daemon 有关的讯息;
kern:核心 (kernel) 产生讯息的地方;
lpr:打印相关的讯息!
mail:只要与邮件收发有关的
讯息纪录都属于这个; news:与新闻群组服务器有关
的东西; syslog:syslogd 这支程序本身产生的信
息啊! user, uucp, local0 ~ local7:与 Unix like 机器本身有关的一些讯
息。
讯息等级
系统将讯息分为七个主
要的等级,依序是由不 级:重要排列到重要讯息等 info:仅是一些基本的讯息说
明而已; notice:比 info 还需要被注意到的一些
信息内容; warning 或 warn:警示讯息,可能有问题
,但是还不至于影响到 某个 daemon 运作。 err 或 error :一些重大的错误讯息,
这就要去找原因了。 crit:比 error 还要严重的错误信息,
crit 是临界点 (critical) 的缩写,已经很严重了 ! alert:警告警告,已经很有问
题的等级,比 crit 还要严重! emerg 或 panic:疼痛等级,意指系统已
经几乎要当机的状态! 很严重的错误信息了。 除了这些有等级的讯息
外,还有两个特殊的等 级,那就是 debug(错误侦测 等级) 与 none (不需登录等级) 两个,当要作一些错误 侦测,或者是忽略掉某 些服务的信息时,就用 这俩!
在讯息等级之前还有 [.=!] 的连结符号!他代表的
意思是: . :代表比后面还要高的
等级(含该等级)都被 记录下来的意思, 例如:mail.in fo 代表只要是 mail 的信息,而且该信息等 级高于 info (含info )时,就会被记录下来 。 .=:代表所需要的等级就
是后面接的等级而已! .!:代表不等于。
日志文件记录的文件名
或装置或主机常见的放 置处: 文件的绝对路径:通常
就是放在 /var/log 里头的文件! 打印机或其它:例如 /dev/lp0 这个打印机装置 (即使被黑客可以删
除掉日志文件,但是最 终删除不了打印出来的 日志信息) 使用者名称:显示给使
用者! 远程主机:例如 @test.adsl
dns.org,要对 方主机也能支持才行! *:代表目前在线的所
有人,类似 wall 这个指令的意义!
看看在尚未开启网络服
务的情况下来自 Fedora Core Release 4 的相关资料 [root@linu
x ~]# vi /etc/syslo g.conf #kern.* /dev/cons
ole # 只要是 kernel 产生的讯息,全部都送
到 console 去!默认是关闭的。 *.info;mai
l.none;aut hpriv.none ;cron.none /var/log/m essages # 在已知各服务的讯息中
,不要记录到这个文件 中,把已知的服务记录 到单独的日志文件中去 ,方便日后查询,否则 messages这个 文件就太混乱了。这个 文件非常重要,所有未 知的信息都会被记录在 这个文件中,所以有问 题,找这个文件就八九 不离十了。 authpriv.*
/var/log/s ecure # 这个就是经过一些身份
确认的行为之后,需要 记录身份的文件。 mail.* -/var/log/
maillog # 只要跟 mail 有关的(不论是 pop3 还是 sendmail )都会被纪录到这个文
件! cron.* /var/log/c
ron #例行性命令相关的。
*.emerg *
# 任何时候发生的警告讯
息都会显示给在线的所 有人!那个 * 就是目前在线的所有人 。 uucp,news.
crit /var/log/s pooler # 记录新闻错误高于 crit 的等级的信息,写入 spooler 当中!
local7.* /var/log/b
oot.log # 将开机的当中的讯息写
入 /var/log/b oot.log 中! 每个版本的 syslog.con
f 差异是很大的,所以, 每个登录文件记录的数 据其实不很固定。
例:让所有的信息都额
外写入到 /var/log/a dmin.log! [root@linu
x ~]# vi /etc/syslo g.conf *.info /var/log/
admin.log 》》如果服务器硬盘 容量够大,这么做也不 失为一个良策。 [root@linu
x ~]# /etc/init. d/syslog restart [root@linu
x ~]# ll /var/log/a dmin.log -rw-------
1 root root 122 Oct 23 22:21 /var/log/a dmin.log 》》注意权限
一台主机管理多台主机
登录文件 # 1. 先取得 port number 的信息!
[root@linu
x ~]# grep 514 /etc/servi ces syslog 514/udp 》》syslog的固
定端口 # 注意,/etc/se
rvices 里面必须要存在这一行 才行,否则自行手写! # 2. 修改 syslogd 的启动配置文件
[root@linu
x ~]# vi /etc/sysco nfig/syslo g #SYSLOGD_O
PTIONS="-m 0" 改成底下这样子 SYSLOGD_OP
TIONS="-m 0 -r" # 3. 重新启动与观察 syslogd !
[root@linu
x ~]# /etc/init. d/syslog restart [root@linu
x ~]# netstat -tlunp Proto Recv-Q Send-Q Local Address Foreign Address State PID/Progr
am name udp 0 0 0.0.0.0:5
14 0.0.0.0:* 24314/sys logd Linux 主机已经可以接收来自
其它主机的登录信息了 !client 端的设定就简单了!只 要指定某个信息传送到 这部主机即可!比如, 登录文件主机 IP 为 192.168.1. 100 ,而 client 端希望所有的数据都送 给主机,可以在 /etc/syslo g.conf 里面新增这样的一行: [root@linu
x ~]# vi /etc/syslo g.conf *.* @192.168.1
.100 未来主机上面的登
录文件当中,每一行的 主机名称就会显示来自 不同主机的信息了。
登录文件服务程序之二
,轮滚(logrot ate): 所谓的 logrotate ,就是将旧的 log 文件更名,然后建立一
个空的 log 文件,如此一来,新的 log 文件将从零开始记录, 然后只要将旧的 log 文件留下一段时间! 旧的纪录 保存了一段时间没有问 题,那么就可以让系统 自动的将他删掉,否则 占用硬盘空间。如图比 如规定了messag e日志文件轮滚3次:
最初的日志文件 message
轮滚一次后 message message1
轮滚二次后 message message1 message2
轮滚三次后 message message1 message2 message3 》》删除(如果再次
轮滚,message 3就会被删除,而me ssage2就会变成 message3,且 系统会新建立一个me ssage)
注意,相同颜色的mssa
ge表示的是一个内容 的文件,只不过每次轮 滚他的名字后面会改一 次数字。
logrotate 的配置文件
/etc/logro
tate.conf /etc/logro
tate.d/ 注意! logrotate.
conf 才是主要的参数文件, logrotate. d 是一个目录, 该目录里面的所有文件 都会被主动的读入/e tc/logrota te.conf 当中来进行!另外,在 /etc/logro tate.d/ 里面的文件中,如果没 有规定到的一些细部设 定,则以/etc/l ogrotate.c on f 的规定来指定为默认值 !
[root@linu
x ~]# vi /etc/logro tate.conf # 底下是 "logrotate
的预设值,如果个别的 文件设定了其它的参数 ,那么将以个别的文件 设定为主,若该文件没 有设定到的参数,则以 这个档案的内容为默认 值! Weekly 》》预设每个礼拜对登
录文件进行一次 rotate 的工作 rotate 4 》》保留四个登录文件
! create 》》是否建立新的登录
文件来记录! #compress 》》 rotate 之后的登录文件,是否
压缩,通常是不要压缩 啦,压缩登录文件扩展 名会变成 messages.1 .gz !系统负载不大,且日 志比较大,可以考虑压 缩。 include /etc/logro
tate.d 》》将底下这个目录 中的所有文件都读进来 执行 rotate 的工作! /var/log/w
tmp { monthly
create 0664 root utmp
rotate 1
}
。。。省略。。。
# 在 logrotate.
conf 文件当中,只有这个数 据是在记载如何对登录 文件进行轮替的!这个 登录文件记载的就是使 用 login 登入系统时的使用者状 态,last就是读自 /var/log/w tmp 当中记录的数据!整个 段落的意义是: # 1. 每个月进行一次 log rotate 的工作;
# 2. 将文件的权限设定为 664 ,且拥有者为 root ,群组为 utmp;
# 3. 仅保存前一个月的 rotate 备份!可以修改大一点
[root@linu
x ~]# vi /etc/logro tate.d/sys log /var/log/m
essages /var/log/ secure /var/log/ maillog /var/log/ spooler /var/log/b
oot.log /var/log/ cron { sharedscr
ipts postrotat
e /bin/kill
-HUP `cat /var/run/s yslogd.pid 2> /dev/null` 2> /dev/null || true endscript
}
设定的项目与前面提
到的相同,并且可加入 轮替前 (pre) 与后 (post) 的一些特殊执行的指令 ! 这个设定需与 sharedscri pts .... endscript 设定合用才行; prerotate:
启动 logrotate 之前进行的指令,例如 修改登录文件的属性等 动作; postrotate
:做完logrota te 之后启动的指令,例如 重新启动 (kill -1 或 kill -HUP) 某个服务! 这一段设定值说明
的是:『 /var/log 目录内的 messages, secure, mailog, spooler, boot.log 及 cron 这六个文件,每个礼拜 进行一次轮替,且保留 四个登录档,此外, 在轮替进行完毕之后, 执行 syslog 的重新启动』因为没有 提到该设定项目,所以 就用 /etc/logro tate.conf 内的默认值来作用
解决charrt+a
与lorotate矛 盾的方法: 矛盾处:a属性会
让文件只能添加数据, 不能修改文件名,不能 删除(防止日志文件被 入侵,被恶意删除), 而lorotate需 要修改文件的文件名。 解决办法就是利用
prerotate 与 postrotate 来进行登录文件轮替前 、后所需要作的动作! 可以这样修改一下这个 文件! [root@linu
x ~]# vi /etc/logro tate.d/sys log /var/log/m
essages /var/log/s ecure /var/log/m aillog /var/log/s pooler /var/log/b
oot.log /var/log/c ron { sharedscr
ipts prerotate
/usr/bin/
chattr -a /var/log/m essages endscript
sharedscr
ipts postrotat
e /bin/kill
-HUP `cat /var/run/s yslogd.pid 2> /dev/null` 2> /dev/null || true /usr/bin/
chattr +a /var/log/m essages endscript
}
特别留意,/bin/kill
-HUP ...这一行的目的在 于将系统的syslo gd重新以其参数( syslog.con f )的资料读入一次!也 可以想成是 reload 的意思! 由于建立了一个新的空 的纪录文件,如果不执 行此一行来重新启动服 务, 那么记录的时候将会发 生错误! 另外注意颜色字体部分 格式,需要配套书写。
实际测试 logrotate 的动作
[root@linu
x ~]# logrotate [-vf] logfile 参数:
-v :启动显示模式,会
显示 logrotate 运作的过程喔! -f :不论是否符合设定
文件的数据,强制每个 登录文件都进行 rotate 的动作!
例:强制进行 logrotate 的动作
[root@linu
x ~]# logrotate -vf /etc/logro tate.conf # 此命令属于企业危险命
令,因为旧的日志对企 业安全有很大作用,如 果强行轮滚,造成提前 删除旧日志文件,可能 会有麻烦,所以不要乱 用!预设的 logrotate 的执行时间就是放在 /etc/cron. daily/logr otate 里面的!由于logr otate 的工作已经加入cro ntab 里了!所以现在每天系 统都会自动的查看 logrotate !
案例:建立了 /var/log/a
dmin.log,想 要加上 +a属性,要求: 登录文件轮替一个月进
行一次; 该登录文件若大于 10MB 时,则主动进行轮替,
不需要考虑一个月的期 限; 保存五个备份文件;
备份文件不要压缩
[root@linu
x ~]# chattr +a /var/log/a dmin.log [root@linu
x ~]# lsattr /var/log/a dmin.log -----a----
--- /var/log/a dmin.log [root@linu
x ~]# mv /var/log/a dmin.log /var/log/a dmin.log.1 mv: cannot move '/var/log/
admin.log' to '/var/log/ admin.log. 1':permiss ion deny [root@linu
x ~]# vi /etc/logro tate.d/adm in # This configurat
ion is from lonogo 2009/6/26 /var/log/a
dmin.log { monthly
size=10M
rotate 5
nocompres
s sharedscr
ipts prerotate
/usr/bin/
chattr -a /var/log/a dmin.log endscript
sharedscr
ipts postrotat
e /usr/bin/
killall -HUP syslogd /usr/bin/
chattr +a /var/log/a dmin.log endscript
}
[root@linu
x ~]# logrotate -v /etc/logro tate.conf 。。省略。。
[root@linu
x ~]# logrotate -vf /etc/logro tate.d/adm in 》》强行滚一下 ....省略....
[root@linu
x ~]# lsattr /var/log/a dmin.log* 》》看看滚后的文件的 权限变化了 -----a----
--- /var/log/a dmin.log ----------
--- /var/log/a dmin.log.1 注意, /etc/syslo
g.conf 与 /etc/logro tate.d/*通常 是配合使用,目录下的 .d目录下的文件未提 及的设置,会参考助. conf配置文件的设 置。
分析登录文件
dmesg
[root@linu
x ~]# dmesg | more 由于系统在开机的
过程当中尚未将硬盘 mount 上来,所以无法直接将 数据直接读到 log file 当中去,但是为了除错 上面的方便, 所以在开机的过程当中 的讯息还是要记录下来 ,这个时候系统就将 ram 开了一个小区块来储存 这个数据!这个开机记 录文件就是:/pro c/kmsg! 几乎所有的核心信
息都可以使用 dmesg 来查阅得到的,例 想要知道开机有没有捉 到网卡,dmesg | grep 'eth' !
last
[root@linu
x ~]# last -n number [root@linu
x ~]# last -f filename 参数:
-n :last 会读出这个月的数据,
若数据量太大,可使用 -n 来严格要求显示的笔数 。例如 20 笔数据: last -n 20 或 last -20 均可。 -f :last预设读出
/var/log/w tmp,但是我们可以 透过 -f 读取不同的登录文件信 息!
例,将上个月的资料读出,
仅读出5笔资料 [root@linu
x ~]# last -n 5 -f /var/log/w tmp.1 dmtsai2 pts/2 Mon Oct 24 14:18 - 14:18 (00:00)
dmtsai2 work:0 work Mon Oct 24 14:18 gone - no logout
dmtsai2 work:0 work Mon Oct 24 14:18 - 14:18 (00:00)
dmtsai2 pts/2 Mon Oct 24 14:18 - 14:18 (00:00)
dmtsai2 work:0 work Mon Oct 24 14:18 - 14:18 (00:00)
[root@linu
x ~]# lastlog lastlog 只是读出 /var/log/l
astlog 内的信息. 他会显示目前系统上面 的所有账号当中,每个 账号最近一次登入的时 间!