荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: nttiger (平平淡淡才是真。), 信区: Linux
标  题: linux日志管理与分析(转寄)
发信站: 荔园晨风BBS站 (Mon May 28 17:01:15 2001), 转信

【 以下文字转载自 nttiger 的信箱 】
【 原文由 nttiger.bbs@bbs.xjtu.edu.cn 所发表 】
发信人: Romance (随意), 信区: linux
标  题: linux日志管理与分析(转寄)
发信站: 交通大学兵马俑BBS站 (2001年05月24日17:57:00 星期四), 站内信件

日志管理与分析
1. 日志简介
日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,可以通过他
来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审计
和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。
在Linux系统中,有三个主要的日志子系统:
连接时间日志----由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,lo
gin等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。Utmp和w
tmp的文件格式都是data,不能直接用cat观看。
进程统计----由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacc
t或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。
错误日志--由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)
向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTT
P和FTP这样提供网络服务的服务器也保持详细的日志。
常用的日志文件如下:
access-log  纪录HTTP/web的传输
acct/pacct  纪录用户命令
aculog  纪录MODEM的活动
btmp    纪录失败的纪录
lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
messages    从syslog中记录信息(有的链接到syslog文件)
sudolog 纪录使用sudo发出的命令
sulog   纪录使用su命令的使用
syslog  从syslog中记录信息(通常链接到messages文件)
utmp    纪录当前登录的每个用户
wtmp    一个用户每次登录进入和退出时间的永久纪录
xferlog 纪录FTP会话
utmp、wtmp和lastlog日志文件是多数UNIX/Linux日志子系统的关键--保持用户登录进入
和退出的纪录。有关当前登录用户的信息记录在文件utmp中;登录进入和退出纪录在文
件wtmp中;最后一次登录文件可以用lastlog命令察看。数据交换、关机和重起也记录在
wtmp文件中。所有的纪录都包含时间戳。这些文件(lastlog通常不大)在具有大量用户
的系统中增长十分迅速。例如wtmp文件可以无限增长,除非定期截取。许多系统以一天
或者一周为单位把wtmp配置成循环使用。它通常由cron运行的脚本来修改。这些脚本重
新命名并循环使用wtmp文件。通常,wtmp在第一天结束后命名为wtmp.1;第二天后wtmp
.1变为wtmp.2等等,直到wtmp.7。
每次有一个用户登录时,login程序在文件lastlog中察看用户的UID。如果找到了,则把
用户上次登录、退出时间和主机名写到标准输出中,然后login程序在lastlog中纪录新
的登录时间。在新的lastlog纪录写入后,utmp文件打开并插入用户的utmp纪录。该纪录
一直用到用户登录退出时删除。utmp文件被各种命令文件使用,包括who、w、users和f
inger。
2. 具体命令
utmpx 是扩展的utmp
wtmp 记录每一次用户登录和注销的历史信息 wtmpx 扩展的wtmp
vold.log 记录使用外部介质出现的错误
lastlog文件
Unix在lastlog日志文件中记录每一个用户注册进入系统的最后时间,在你每一次进入系
统时,系统会显示出这个时间:
login: wwang
Password:
Last login: Tue Dec 19 19:51:35 from 192.168.1.210
lastlog告诉用户,要核对一下最后注册进入系统的时间是否正,若系统显示的时间与你
上次进入系统的时间不符,说明发生了非授权用户注册,若这种情况发生了,用户应该
马上修改帐户口令,并通知管理员。在每次注册时,lastlog新的内容冲掉老的内容。l
oginlog文件
Unix system V版本中,可以把不成功的登录行为记录在
/var/adm/loginlog中。要登记不成功的注册行为,可以
用下列命令建立/var/adm/loginlog文件:
#touch /var/adm/loginlog
#chmod 600 /var/adm/loginlog
#chown root /var/adm/loginlog
/var/adm/loginlog会记录失败的登录尝试
#cat /var/adm/loginlog
hacker: from 202.88.88.xx: Tue Jul 27 02:44:50 1999
值得注意的是,为了防止入侵者修改、删
除messages里的记录信息,可以采用用打印机记录或跨越网络登记的方式来挫败入侵者
的企图。
syslog.conf的详细说明
以Sun Solaris operating system, version 2.5.1. 为例
/etc/syslog.conf的一般格式如下:
设备.行为级别 [;设备.行为级别]        记录行为
设备                   描述
auth       used by authorization systems (login)
          认证系统,即询问用户名和口令
cron       used for the cron and at systems
          系统定时系统
daemon     system/netword daemon
          其他系统的daemons
kern       produced by kernel messages
          内核
lpr        printing system
          打印机系统
mail       mail system
          邮件系统
mark       internally used for time stamps
          定时发送消息的时标程序
news       reserved for the news system
          新闻系统
user       default facility, used for any program
          正式用户处理程序
uucp       reserved for the uucp system
          uucp子系统
local0..7  reserved for local use
          留做指定站点使用
行为级别                描述
debug      normally used for debugging
          调试程序时的消息
info       informational messages
          信息消息
notice     conditions that may require attention
          要注意的消息
warning    any warnings
          警告
err        any errors
          一般性错误
crit       critical conditions like hardware
problems      严重情况
alert      any condition that demand immediate
attention   应该立即被纠正的情况
emerg      any emergency condition      紧急情况
none       Do  not  send  messages  from  the indicated   指定的服务程序未给
所选择的
           facility  to the selected file.
          文件发送信息
记录归属(举例)             描述
/dev/console          send messages to devices   控制台
/var/adm/messages     write messages to files   写入/var/adm/messages@loghos
t              forward messages to a
loghost        其他的日志记录服务器fred,user1            send messages to us
ers
传送消息给用户
*                     send messages to all
logged-in users 传送消息给所有的在线用户
下面是一个/etc/syslog.conf的模式
*.notice;mail.info     /var/log/notice
*.crit                 /var/log/critical
kern,mark.debug        /dev/console
kern.err               @server
*.emerg                *
*.alert                root,operator
*.alert;auth.warning   /var/log/auth
如果用打印机来记录日志文件,可以采用如下方法:
把打印机连接到终端端口/dev/ttya上,在
/etc/syslog.conf中加入配置语句,例如:
auth.*  dev/ttya
这样就可以记录如不正确口令等信息了。
如果采用跨越网络登记,可以在/etc/syslog.conf中加入配置语句,例如:
auth.*  @loghost
可以采用非unix主机来作为日志记录机,这样的话入侵者就算是得到了root权限也没有
办法修改日志文件。
在/var/adm/messages中的一些记录,可以找出入侵者的痕迹,举如下:
1。Jun 21 06:17:55 youserver /usr/dt/bin/rpc.ttdbserverd[371]:
_Tt_file_system::findBestMount.
   Jun 21 06:17:55 youserver inetd[146]:
/usr/dt/bin/rpc.ttdbserverd: Segmentation Fault -
cod
   Jun 21 06:17:58 youserver inetd[146]:
/usr/dt/bin/rpc.ttdbserverd: Illegal Instruction
- cd
入侵者利用rpc.ttdbserverd漏洞进攻服务器
2。"Sep 8 09:08:03 xxx login: REPEATED LOGIN
FAILURES ON /dev/pts/3 FROM xxxxx "
入侵者采用暴力试口令命令失败
3。"Sep 8 09:08:03 xxx su: 'su root' failed for
xxxxx on /dev/pts/2"
入侵者想利用su命令成为root失败
wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)
。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。
who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终
端类型、登录日期及远程主机。例如:who(回车)显示
wwang    pts/0    Dec 19 19:51
如果指明了wtmp文件名,则who命令查询所有以前的纪录。命令who /var/log/wtmp将报
告自从wtmp文件创建或删改以来的每一次登录。
w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如:w(回
车)显示:  9:20pm  up  2:33,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU  WHAT
wwang    pts/0    192.168.1.210     7:51pm  0.00s  0.10s   ?     -
users:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会
话。如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数。例如:user
s(回车)显示:chyang lewis lewis ylou ynguo ynguo
last:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如:
wwang   pts/0       192.168.1.210    Tue Dec 19 19:51   still logged in
lxg     pts/0       192.168.1.208    Tue Dec 19 18:50 - 18:50  (00:00)
如果指明了用户,那么last只报告该用户的近期活动,例如:last ynguo(回车)显示

ynguo   pts/4   simba.nic.ustc.e    Fri Aug 4 16:50 - 08:20 (15:30)
ynguo   pts/4   simba.nic.ustc.e    Thu Aug 3 23:55 - 04:40 (04:44)
ynguo   pts/11  simba.nic.ustc.e    Thu Aug 3 20:45 - 22:02 (01:16)
ynguo   pts/0   simba.nic.ustc.e    Thu Aug 3 03:17 - 05:42 (02:25)
ynguo   pts/0   simba.nic.ustc.e    Wed Aug 2 01:04 - 03:16 1+02:12)
ynguo   pts/0   simba.nic.ustc.e    Wed Aug 2 00:43 - 00:54 (00:11)
ynguo   pts/9   simba.nic.ustc.e    Thu Aug 1 20:30 - 21:26 (00:55)
//ac 命令没有测试成功,可能是因为电脑的linxu版本上没有装上这条命令。//
ac:ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间(
小时),如果不使用标志,则报告总的时间。例如:ac(回车)显示:total 5177.47
ac -d(回车)显示每天的总的连结时间
Aug 12  total   261.87
Aug 13  total   351.39
Aug 14  total   396.09
Aug 15  total   462.63
Aug 16  total   270.45
Aug 17  total   104.29
Today   total   179.02
ac -p (回车)显示每个用户的总的连接时间
ynguo   193.23
yucao   3.35
rong    133.40
hdai    10.52
zjzhu   52.87
zqzhou  13.14
liangliu    24.34
total   5178.24
lastlog:lastlog文件在每次有用户登录时被查询。可以使用lastlog命令来检查某特定
用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容。它根据UI
D排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlo
g显示"**Never logged**。注意需要以root运行该命令,例如:
money          tty1                      Fri Nov 17 15:10:30 +0800 2000
windylm                                 **Never logged in**
tj             tty1                      Mon Dec 18 10:59:01 +0800 2000
lxg            0        192.168.1.208    Tue Dec 19 18:50:45 +0800 2000
wwang          0        192.168.1.210    Tue Dec 19 19:51:35 +0800 2000
另外,可一加一些参数,例如,last -u 102将报告UID为102的用户;last -t 7表示限
制上一周的报告。
3. 进程统计
UNIX/Linux可以跟踪每个用户运行的每条命令,如果想知道昨晚弄乱了哪些重要的文件
,进程统计子系统可以告诉你。它对还跟踪一个侵入者有帮助。与连接时间日志不同,
进程统计子系统缺省不激活,它必须启动。在Linux系统中启动进程统计使用accton命令
,必须用root身份来运行。Accton命令的形式accton file,file必须先存在。先使用t
ouch命令来创建pacct文件:touch /var/log/pacct,然后运行accton: accton /var/
log/pacct。一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命
令。若要关闭统计,可以使用不带任何参数的accton命令。
lastcomm命令报告以前执行的文件。不带参数时,lastcomm命令显示当前统计文件生命
周期内纪录的所有命令的有关信息。包括命令名、用户、tty、命令花费的CPU时间和一
个时间戳。如果系统有许多用户,输入则可能很长。下面的例子:
crond   F   Root    ??  0.00 secs Sun Aug 20 00:16
sh      Root    ??  0.02 secs Sun Aug 20 00:15
ping    S   Root    ??  0.00 secs Sun Aug 20 00:15
ping6.pl    F   Root    ??  0.01 secs Sun Aug 20 00:15
sh      Root    ??  0.01 secs Sun Aug 20 00:15
ping    S   Root    ??  0.01 secs Sun Aug 20 00:15
sh      Root    ??  0.02 secs Sun Aug 20 00:15
ping    S   Root    ??  1.34 secs Sun Aug 20 00:15
locate      Root    ttyp0   1.34 secs Sun Aug 20 00:15
accton  S   Root    ttyp0   0.00 secs Sun Aug 20 00:15
进程统计的一个问题是pacct文件可能增长的十分迅速。这时需要交互式的或经过cron机
制运行sa命令来保持日志数据在系统控制内。sa命令报告、清理并维护进程统计文件。
它能把/var/log/pacct中的信息压缩到摘要文件/var/log/savacct和/var/log/usracct
中。这些摘要包含按命令名和用户名分类的系统统计数据。sa缺省情况下先读它们,然
后读pacct文件,使报告能包含所有的可用信息。sa的输出有下面一些标记项:
avio--每次执行的平均I/O操作次数
cp--用户和系统时间总和,以分钟计
cpu--和cp一样
k--内核使用的平均CPU时间,以1k为单位
k*sec--CPU存储完整性,以1k-core秒
re--实时时间,以分钟计
s--系统时间,以分钟计
tio--I/O操作的总数
u--用户时间,以分钟计
例如:
842 173.26re    4.30cp  0avio   358k
2   10.98re 4.06cp  0avio   299k    find
9   24.80re 0.05cp  0avio   291k    ***other
105 30.44re 0.03cp  0avio   302k    ping
104 30.55re     0.03cp  0avio   394k    sh
162 0.11re  0.03cp  0avio   413k    security.sh*
154 0.03re  0.02cp  0avio   273k    ls
56  31.61re 0.02cp  0avio   823k    ping6.pl*
2   3.23re  0.02cp  0avio   822k    ping6.pl
35  0.02re  0.01cp  0avio   257k    md5sum
97  0.02re  0.01cp  0avio   263k    initlog
12  0.19re  0.01cp  0avio   399k    promisc_check.s
15  0.09re  0.00cp  0avio   288k    grep
11  0.08re  0.00cp  0avio   332k    awk
用户还可以根据用户而不是命令来提供一个摘要报告。例如sa -m显示如下:
    885 173.28re    4.31cp  0avk
root    879 173.23re    4.31cp  0avk
alias   3   0.05re  0.00cp  0avk
qmailp  3   0.01re  0.00cp  0avk

//上面的accton命令也没有找到
4. Syslog设备
最初,syslog只是为了sendmail而设计的消息日志工具,由于它提供了一个中心控制点
,使得syslog非常好用和易配置,因此当今很多程序都使用syslog来发送它们的记录信
息。syslog是一种强大的日志记 录方式,不但可以将日志保存在本地文件中,还可以根
据设置将syslog记录发送到网络上的另一台主机中。
  支持syslog方式的系统启动了syslogd守护进程,这个程序从本地的Unix套接字和监
听在514端 口(UDP)上的Internet套接字,来获得syslog的记录。本机中进程使用sys
log系统调用发送来syslog记录,然后由syslogd将他们保存到正确的文件或发送到网络
上另一台运行syslogd主机中去。
Syslog已被许多日志函数采纳,它用在许多保护措施中--任何程序都可以通过syslog 纪
录事件。Syslog可以纪录系统事件,可以写到一个文件或设备中,或给用户发送一个信
息。它能纪录本地事件或通过网络纪录另一个主机上的事件。
Syslog设备依据两个重要的文件:/etc/syslogd(守护进程)和/etc/syslog.conf配置
文件,习惯上,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中(mess
ages.*)。一个典型的syslog纪录包括生成程序的名字和一个文本信息。它还包括一个
设备和一个优先级范围(但不在日之中出现)。
每个syslog消息被赋予下面的主要设备之一:
LOG_AUTH--认证系统:login、su、getty等
LOG_AUTHPRIV--同LOG_AUTH,但只登录到所选择的单个用户可读的文件中
LOG_CRON--cron守护进程
LOG_DAEMON--其他系统守护进程,如routed
LOG_FTP--文件传输协议:ftpd、tftpd
LOG_KERN--内核产生的消息
LOG_LPR--系统打印机缓冲池:lpr、lpd
LOG_MAIL--电子邮件系统
LOG_NEWS--网络新闻系统
LOG_SYSLOG--由syslogd(8)产生的内部消息
LOG_USER--随机用户进程产生的消息
LOG_UUCP--UUCP子系统
LOG_LOCAL0~LOG_LOCAL7--为本地使用保留
Syslog为每个事件赋予几个不同的优先级:
LOG_EMERG--紧急情况
LOG_ALERT--应该被立即改正的问题,如系统数据库破坏
LOG_CRIT--重要情况,如硬盘错误
LOG_ERR--错误
LOG_WARNING--警告信息
LOG_NOTICE--不是错误情况,但是可能需要处理
LOG_INFO--情报信息
LOG_DEBUG--包含情报的信息,通常旨在调试一个程序时使用
syslog.conf文件指明syslogd程序纪录日志的行为,该程序在启动时查询配置文件。该
文件由不同程序或消息分类的单个条目组成,每个占一行。对每类消息提供一个选择域
和一个动作域。这些域由tab隔开:选择域指明消息的类型和优先级;动作域指明syslo
gd接收到一个与选择标准相匹配的消息时所执行的动作。每个选项是由设备和优先级组
成。当指明一个优先级时,syslogd将纪录一个拥有相同或更高优先级的消息。所以如果
指明"crit",那所有标为crit、alert和emerg的消息将被纪录。每行的行动域指明当选
择域选择了一个给定消息后应该把他发送到哪儿。例如,如果想把所有邮件消息纪录到
一个文件中,如下:
#Log all the mail messages in one place
mail.* /var/log/maillog
其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自
己的日志(/var/log/spooler)中并把级别限为"err"或更高。例如:
# Save mail and news errors of level err and higher in aspecial file.
uucp,news.crit /var/log/spooler
当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保
存。
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @sei.xjtu.edu.cn
alert消息应该写到root和wwang的个人账号中:
#Root and wwang get alert and higher messages
*.alert root,wwang
有时syslogd将产生大量的消息。例如内核("kern"设备)可能很冗长。用户可能想把内
核消息纪录到/dev/console中。下面的例子表明内核日志纪录被注释掉了:
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console
用户可以在一行中指明所有的设备。下面的例子把info或更高级别的消息送到/var/log
/messages,除了mail以外。级别"none"禁止一个设备:
#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages
在有些情况下,可以把日志送到打印机,这样网络入侵者怎么修改日志都没有用了。通
常要广泛纪录日志。Syslog设备是一个攻击者的显著目标。一个为其他主机维护日志的
系统对于防范服务器攻击特别脆弱,因此要特别注意。
有个小命令logger为syslog(3)系统日志文件提供一个shell命令接口,使用户能创建
日志文件中的条目。用法:logger 例如:logger This is a test!
它将产生一个如下的syslog纪录:Dec 19 22:22:34 wwang: This is a test!
注意不要完全相信日志,因为攻击者获得了root密码之后就很容易修改它的。
5. 程序日志
许多程序通过维护日志来反映系统的安全状态。su命令允许用户获得另一个用户的权限
,所以它的安全很重要,它的文件为sulog。同样的还有sudolog。另外,想Apache有两
个日志:access_log和error_log。
进一步的信息最好的方法就是查看man帮助。用"man 8 sysklogd"查看syslogd守护进程
的信息;用"man 5 syslog.conf"查看配置文件的格式;内核是怎么处理消息的,可以用
"man 8 klogd";用"man 3 syslog"查看有关系统日志的C语言函数;最后,还可以用"m
an 1 logger"查看这个命令的用法。此外还应该用第三方软件来监控日志。
  syslogd的设置文件为/etc/syslog.conf,定义消息对应的相应目标,一条消息可以
达到多 个目标,也可能被忽略。
  syslog.conf的配置可以分为两个部分,第一部分用于区分消息的类型,另一个用于
设置消息发送的目的 地。通常,消息的类型包括消息的产生者,例如kern表示内核产生
的消息,auth表示认证系统产生的消息,等等,还 包括消息的级别,例如emerg表示非
常重要的紧急信息,alert表示系统告警状态,crit表示关键状态,err 表示一般的错误
信息,warning表示警告信息,notice表示提示信息,但还不是错误,info表示一般信息
, debug表示调试信息等,因此一个消息的类型可能为:kern.debug、mail.info等,但
页可以使用通 配符*进行匹配。
 其他日志
  除了系统登录记录和syslog记录之外,其他还有一些应用程序使用自己的记录方式

  系统每天都会自动检查系统的安全设置,包括对SetUID、SetGID的执行文件的检查
,其结果将输出到/ var/log/security.today文件中,管理员可以与/var/log/securit
y.yeste rday文件对比,寻找系统安全设置的变化。
  如果系统使用sendmail,那么sendmail.st文件中以二进制形式保存了sendmail的统
计 信息。
  在系统启动的时候,就将内核的检测信息输出到屏幕上,这些信息可以帮助用户分
析系统中的硬件状态。一般使用d mesg命令来查看最后一次启动时输出的这个检测信息
。这个信息也被系统保存在/var/log/dmesg.tod ay文件中,系统中同时也存在另一个文
件dmesg.yesterday,是上次的启动检测信息,对比这两个文件,就 可以了解到系统硬
件和内核配置的变化。
  lpd-errs记录了系统中lpd产生的错误信息。
此外,各种shell还会记录用户使用的命令历史,它使用用户主目录下的文件来记录这些
命令历史,通常这个文 件的名字为.history(csh),或.bash-history等。


--

you can win if you want

try your best and be yourself!
※ 来源:·交通大学兵马俑BBS站 bbs.xjtu.edu.cn·[FROM: 14h71] --
※ 转寄:·交通大学兵马俑BBS站 bbs.xjtu.edu.cn·[FROM: 210.39.3.50]
--
※ 转载:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.118]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店