syslog详解

第一篇

http://blog.chinaunix.net/uid-24180754-id-3036948.html

日志文件由系统日志和内核日志监控程序syslogd 与klogd 控制, 在/etc/syslog.conf 文件中配置这两个监控程序默认活动。

日志文件按/etc/syslog.conf 配置文件中的描述进行组织。下图是/etc/syslog.conf 文件的内容

[root@localhost ~]# cat /etc/syslog.conf

# Log all kernel messages to the console.

# Logging much else clutters up the screen.

#kern.* /dev/console

# Log anything (except mail) of level info or higher.

# Don't log private authentication messages!

*.info;mail.none;authpriv.none;cron.none /var/log/messages

# The authpriv file has restricted access.

authpriv.* /var/log/secure

# Log all the mail messages in one place.

mail.* -/var/log/maillog

# Log cron stuff

cron.* /var/log/cron

# Everybody gets emergency messages

*.emerg *

# Save news errors of level crit and higher in a special file.

uucp,news.crit /var/log/spooler

# Save boot messages also to boot.log

local7.* /var/log/boot.log


syslog.conf

emerg  emergency , 紧急

alert     ,          警报

crit  critical , 关键

errerror ,          错误

warning              警告

notice               通知

info                信息

debug               调试

-------------------------------------------------------

简单列一下消息来源

auth        认证系统,如login 或su ,即询问用户名和口令

cron        系统执行定时任务时发出的信息

daemon        某些系统的守护程序的 syslog ,如由in.ftpd 产生的log

kern        内核的信息

lpr       打印机的信息

mail        处理邮件的守护进程发出的信息

mark        定时发送消息的时标程序

news        新闻组的守护进程的信息

user        本地用户的应用程序的信息

uucp        uucp 子系统的信息

local0~local7   系统预留

*          表示所有可能的信息来源

----------------------------------------------------------

处理方案

" 处理方案" 选项可以对日志进行处理。可以把它存入硬盘,转发到另一台机器或显示在管理员的终端上。

处理方案一览:

文件名  写入某个文件,要注意绝对路径。

@ 主机名 转发给另外一台主机的syslogd 程序。

@IP 地址 同上,只是用IP 地址标识而已。

/dev/console 发送到本地机器屏幕上。

* 发送到所有用户的终端上。

| 程序 通过管道转发给某个程序。

例如:

kern.emerg /dev/console( 一旦发生内核的紧急状况,立刻把信息显示在控制台上)

说明:

如果想修改syslogd 的记录文件,首先你必须杀掉syslogd 进程,在修改完毕后再启动syslogd 。攻击者进入系统后通常立刻修改系统日志,因 此作为网管你应该用一台机器专门处理日志信息,其他机器的日志自动转发到它上面,这样日志信息一旦产生就立刻被转移,这样就可以正确记录攻击者的行为

将日志文件记录到远程主机 。

说到这远程主机就是我们本文要配置的syslog 服务器。

----------------------------------------------------------------

2.syslog 服务器配置实践步骤

例如: 10.0.0.1 为syslog 服务器     10.0.0.2 为客户机

步骤: 1. 服务端配置

vi /etc/sysconfig/syslog   

   sysLOGD_OPTIONS = “-r –m 0” ## -r 意思是接受远程的日志

重起syslog 服务 /etc/rc.d/init.d/syslog restart

2. 客户端配置

   vi /etc/syslog.conf

   在消息去向处添加 @10.0.0.1

例如:*.info;mail.none;authpriv.none;cron.none @10.0.0.1

   存盘退出重起服务

   /etc/rc.d/init.d/syslog restart

( 知识点:直接查看日志尾部: tail /var/log/messages 或者tail /var/log/boot 这样就可以看到syslog 重起)

--------------------------------------------------------------------

注意:日志服务使用的端口是:514/udp syslog 服务器应该打开这个端口

syslog 日志服务器端不能根据源地址过滤,为了防止外网向日志服务器写垃圾信息要在网络拓扑中解决,网关上做限制外网访问514 端口。

如果服务器比较多的话,这样形成的日志比较大,要做好日志的分析

------------------------------自己补充内容----------------------------

日志自动压缩回滚:

在freebsd的newsyslog.conf加入

日志文件    640   3     *     @T00   JC     进程路径

在linux中编辑

/etc/logrotate.d/slockd,内容为:

/var/log/slockd.log {

   daily

   notifempty

   missingok

   rotate 5

   compress

   create 644 root root

   sharedscripts

}

行的基本语法是:

[ 消息类型]     [ 处理方案]

注意:中间的分隔符必须是Tab 字符!

消息类型是由" 消息来源" 和" 紧急程度" 构成,中间用点号连接。例如上图中,news.crit 表示来自news 的“ 关键” 状况。在这里,news 是消息来源,crit 代表关键状况。通配符* 可以代表一切消息来源。

说明:

第一条语句*.info ,将info 级以上(notice,warning,err,crit,alert 与emerg )的所有消息发送到相应日志文件。

日志文件类别(按重要程度分类)日志文件可以分成八大类。

第二篇

http://patterson.blog.51cto.com/1060257/621264

syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件。syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息。它能记录本地事件或通过网络记录另一个主机上的事件。

1、syslog简介

syslog是一种工业标准的协议,可用来记录设备的日志。在UNIX系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX的系统日志是通过syslogd这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行syslog协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。

2、syslog配置文件

syslog设备依据两个重要的文件:/etc/syslogd守护进程和/etc/syslog.conf配置文件。通常情况下,多数syslog信息被写到/var/adm或/var/log目录下的信息文件中(messages.*)。一个典型的syslog记录包括生成程序的名字和一个文本信息。它还包括一个设备和一个优先级范围。

通过使用syslog.conf文件,可以对生成的日志的位置及其相关信息进行灵活的配置。该配置文件指明了syslogd守护程序记录日志的行为,该程序在启动时查询配置文件。该文件由不同程序或消息分类的单个条目组成,每个占一行。对每类消息提供一个选择域和一个动作域。这些域由tab隔开:

  •  选择域指明消息的类型和优先级;
  •  动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。

syslog.conf行的基本语法是:

消息类型.优先级 动作域

其中,每个选择域是由消息类型和优先级组成。当指明一个优先级时,syslogd将记录一个拥有相同或更高优先级的消息。Linux中一些主要的消息类型如表2所示,表3列出了一些优先级信息:

表2 syslog消息类型

消息类型 消息来源
kern 内核
User 用户程序
Damon 系统守护进程
Mail 电子邮件系统
Auth 与安全权限相关的命令
Lpr 打印机
News 新闻组信息
Uucp Uucp程序
Cron 记录当前登录的每个用户信息
wtmp 一个用户每次登录进入和退出时间的永久记录
Authpriv 授权信息

表3 syslog常用优先级

优先级 描述
emerg 最高的紧急程度状态
alert 紧急状态
Cirt 重要信息
warning 警告
err 临界状态
notice 出现不寻常的事情
info 一般性消息
Debug 调试级信息
None 不记录任何日志信息

不同的服务类型有不同的优先级,数值较大的优先级涵盖数值较小的优先级。如果某个选择条件只给出了一个优先级而没有使用任何优先级限定符,对应于这个优先级的消息以及所有更紧急的消息类型都将包括在内。比如说,如果某个选择条件里的优先级是“warning”,它实际上将把“warning”、“err”、“crit”、“alert“和“emerg”都包括在内。

syslog允许人们使用三种限定符对优先级进行修饰:星号(*)、等号(=)和叹号(!):

  •  星号(*)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点。就像它在规则表达式里的作用一样,星号代表“任何东西”。在前面给出的例子里,“mail.*”将把所有优先级的消息都发送到操作动作指定的/var/log/mail文件里。使用“*”限定符与使用“debug”优先级的效果完全一样,后者也将把所有类型的消息发送到指定地点。
  •  等号(=)的含义是只把本项服务生成的本优先级的日志消息都发送到操作动作指定的地点。比如说,可以用“=”限定符只发送调试消息而不发送其他更紧急的消息(这将为应用程序减轻很多负担)。当你只需要发送特定优先级别的消息时,就要使用等号限定符。
  • 叹号(!)的含义是把本项服务生成的所有日志消息都发送到操作动作指定的地点,但本优先级的消息不包括在内。

所以,根据上面介绍的相关知识,我们给出如下例子作为示范:

(1)如果指明\"crit\",那所有标为crit、alert和emerg的消息将被记录。每行的行动域指明当选择域选择了一个给定消息后应该把他发送到哪儿。例如,如果想把所有邮件消息记录到一个文件中,如下所示:

#Log all the mail messages in one place
mail.* /var/log/maillog

(2)其他设备也有自己的日志。UUCP和news设备能产生许多外部消息。它把这些消息存到自己的日志(/var/log/spooler)中并把级别限为\"err\"或更高。例如:

# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler

(3)当一个紧急消息到来时,可能想让所有的用户都得到。也可能想让自己的日志接收并保存。

#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn

(4)有时syslogd将产生大量的消息。例如内核(\"kern\"设备)可能很冗长,用户很难看得清楚明了,那么用户可能想把内核消息记录到/dev/console中。下面的例子表明内核日志记录被注释掉了:

#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console

(5)用户可以在一行中指明所有的设备。下面的例子把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

 

3、syslog进程

syslogd守护程序是由/etc/rc.d/init.d/syslog脚本在运行级2下被调用的,缺省不使用选项。但有两个选项-r和-h很有用:

  •  如果将要使用一个日志服务器,必须调用syslogd -r。缺省情况下syslogd不接受来自远程系统的信息。当指定-r选项,syslogd将会监听从514端口上进来的UDP包。
  •  如果还希望日志服务器能传送日志信息,可以使用-h标志。缺省时,syslogd将忽略使其从一个远程系统传送日志信息到另一个系统的syslogd。

另外,如果需要重新启动syslog守护进程(/etc/syslog.conf的修改只有在syslog守护进程重新启动后才会生效),并且只想重新启动syslog守护进程而不是整个系统,在Red Hat Linux机器上,执行以下两条命令之一即可:

/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart
/etc/rc.d/init.d/syslogrestart

4、灵活运用syslog调用接口

在实际的使用过程中,我们可以通过配置文件和查看相应的日志文件来使用syslog。然而,在许多应用场景下,我们往往需要通过程序产生输出信息并进行记录,也就是说要把一些信息写成日志文件,正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。因此,下面将详细介绍如何通过syslog日志系统提供的API调用接口,来使用程序实现对syslog的使用。

1.主要的函数

在Linux中,提供了四个有关syslog日志系统的系统调用,供用户使用:

  •  openlog:打开日志设备,以供读取和写入,与文件系统调用的open类似;
  •  syslog:写入日志,与文件系统调用的write类似;
  •  closelog:关闭日志设备,与文件系统调用的close类似;
  •  vsyslog:它和syslog功能一样,负责写入日志,只是参数格式不同。

(1)openlog函数

该函数的声明如下:

void openlog(const char *ident, int option, int facility);

此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。

openlog的第一个参数ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。第二个参数option一般是下列选项值取“与”运算(使用“|”表示,如“LOG_CONS | LOG_PID”)的结果:

  •  LOG_CONS:如果送到system logger时发生问题,直接写入系统终端;
  •  LOG_NDELAY:立即开启连接,通常连接是在第一次写入消息时才打开的;
  •  LOG_PERROR:将消息也同时送到stderr设备;
  •  LOG_PID:将进程PID含入所有消息中。

第三个参数facility指明记录日志的程序的类型,它主要具有如下几类日志类型:

  •  LOG_AUTH :安全/授权消息
  •  LOG_AUTHPRIV:安全/授权消息
  •  LOG_CRON:时间守护进程(cron和at)专用
  •  LOG_DAEMON:其它系统守护进程
  •  LOG_KERN:核心消息
  •  LOG_LOCAL0到LOG_LOCAL7:系统保留
  •  LOG_LPR:printer子系统
  •  LOG_MAIL:mail子系统
  •  LOG_NEWS:USENET新闻子系统
  •  LOG_SYSLOG:syslogd进程内部所产生的消息
  •  LOG_USER(缺省):一般使用者缺省使用消息
  •  LOG_UUCP:UUCP子系统
  •  LOG_FTP:FTP子系统使用

(2)syslog函数

syslog函数的声明如下:

void syslog(int priority, const char * message, ...);

第一个参数是消息的紧急级别priority,第二个参数是消息及其格式,之后是格式对应的参数,如同C语言里面printf输出函数一样使用,具体的格式这里就不再详述,它不是本书介绍的重点。

这里还需要详细介绍一下第一个参数priority,它是由severity level和facility组成的。Facility已经在上面介绍了,下面介绍一下severity level,也就是消息的重要级别,它主要包括:

  •  LOG_EMERG:紧急状况
  •  LOG_ALERT:高优先级问题,比如说数据库崩溃等,必须要立即采取反应行动
  •  LOG_CRIT:重要状况发生,比如硬件故障
  •  LOG_ERR:错误发生
  •  LOG_WARNING:警告发生
  •  LOG_NOTICE:一般状况,需要引起注意
  •  LOG_INFO:信息状况
  •  LOG_DEBUG:调试消息

在实际使用中,如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。

(3)closelog函数

相对上述2个函数来说,该函数非常简单,其声明如下:

void closelog( void );

值得注意的是,虽然该函数的使用和调用情况非常简单,但是是必不可少的,因为在Linux系统中,打开的日志也是资源,如果只使用openlog函数打开日志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到一定程度,便会造成内存不足,从而引起系统问题。所以,提醒用户在使用中特别注意。

2.一个实际的程序调用例子

下面给出一个使用上述几个函数写日志的例子,以供大家参考:

#include
#include
#include
int main(void)
{
int log_test;
/*打开日志*/
openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);
/*写日志*/
syslog(LOG_INFO, "PID information, pid=%d", getpid());
syslog(LOG_DEBUG,"debug message ");
/*关闭日志*/
closelog();
}

第三篇

http://blog.chinaunix.net/uid-8504518-id-2030628.html

Part I:

syslogd & klogd   ---------/etc/syslog.conf

/var/log/secure:登录到系统存取资料的记录;FTP、SSH、TELNET...
/var/log/wtmp:记录登录者讯录,二进制文件,须用last来读取内容
/var/log/messages:杂货铺
/var/log/boot.log:记录开机启动讯息,dmesg | more

一、常识
# ps aux | grep syslog
# chkconfig --list | grep syslog
# cat /var/log/secure

/etc/syslog.conf 哪些服务产生的哪些等级讯息记录到哪里
记录到相同地方的多个讯息源用分号间隔
vi /etc/syslog.conf

二、接收远程日志
# grep 514 /etc/services
syslog          514/udp

vi /etc/sysconfig/syslog
# 将SYSLOGD_OPTIONS="-m 0"
# 改成
SYSLOGD_OPTIONS="-m 0 -r"

/etc/init.d/syslog restart
[root@linux ~]# netstat -tlunp
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:*              24314/syslogd

对应client
# vi /etc/syslog.conf
*.*       @192.168.1.100

三、logrotate

    * /etc/logrotate.conf
    * /etc/logrotate.d/

logrotate.conf 才是主要配置文件,而/logrotate.d /这个目录内的所有文件都被读入 /etc/logrotate.conf来执行!
如果在 /etc/logrotate.d/ 目录文件中,没有相应的细节设定則以 /etc/logrotate.conf 设定为缺省值!
vi /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler
/var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
1、用空格作多个档案分隔
2、所有设定在{}中
3、# prerotate:在启动logrotate执行的指令
   # postrotate:在做完 logrotate后需处理的指令

logrotate [-vf] logfile
參數:
-v :显示过程
-f :强制执行

而 logrotate 的工作加入到 crontab /etc/cron.daily/logrotate;所以系统每天自动查看
只是要注意一下:/var/log/messages 是否有这样的类似内容
Oct 24 15:15:35 localhost syslogd 1.4.1: restart.

四、实例:
要求: 登录档案每月替换一次
       若> 10MB ;强制替换,不不考虑一个月的期限;
       保存五备份文档;
       备份文档不压缩。

步骤1:
root@linux ~]# chattr +a /var/log/admin.log
[root@linux ~]# lsattr /var/log/admin.log
-----a------- /var/log/admin.log
只能新增不能删节除,除非chattr -a /var/log/admin.log
[root@linux ~]# mv /var/log/admin.log /var/log/admin.log.1
mv: cannot move '/var/log/admin.log' to '/var/log/admin.log.1':permission deny
步骤2:
vi /etc/logrotate.d/admin
# This configuration is from VBird 2005/10/24
/var/log/admin.log {
        monthly
        size=10M
        rotate 5
        nocompress
        sharedscripts
        prerotate
                /usr/bin/chattr -a /var/log/admin.log
        endscript
        sharedscripts
        postrotate
                /usr/bin/killall -HUP syslogd
                /usr/bin/chattr +a /var/log/admin.log
        endscript
}
步骤3:测试
# logrotate -v /etc/logrotate.conf
.....(前面省略).....
rotating pattern: /var/log/admin.log 10485760 bytes (5 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/admin.log
log does not need rotating
not running shared prerotate script, since no logs will be rotated
............
# logrotate -vf /etc/logrotate.d/admin
reading config file /etc/logrotate.d/admin
reading config info for /var/log/admin.log

也就是说: /etc/syslog.conf 与/etc/logrotate.d/* 对应文档搭配起来使用;先由syslogd 按照syslog.conf指定的方法处理消息,
然后送给 logrotat来按照/etc/logrotate.d/*文档要求来轮替日志。

五、常见指令:

# dmesg | more   读/var/log/boot.log
dmesg | grep 'eth'

# last -n number
[root@linux ~]# last -f filename

-n :number
-f :last 预设值为读 /var/log/wtmp 文档,而 -f 读取不同的文档
     
# last -n 5 -f /var/log/wtmp.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)

# lastlog
只读取/var/log/lastlog 内容,只包括当前系统上面所有的帐号最近一次LOGIN的时间。


Part II:
1. 日志简介
日志对于安全来说,非常重要,他记录了系统每天发生的各种各样的事情,你可以通过他来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。日志主要的功能有:审
计和监测。他还可以实时的监测系统状态,监测和追踪侵入者等等。
在Linux系统中,有三个主要的日志子系统:
连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。

进程统计--由系统内核执行。当一个进程终止时,为每个进程往进程统计文件(pacct或acct)中写一个纪录。进程统计的目的是为系统中的基本服务提供命令使用统计。

错误日志--由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP和FTP这样提供网络服务的服务器也保持详细的日志。

2、常用的日志文件如下:

access-log 纪录HTTP/web的传输
acct/pacct 纪录用户命令
aculog 纪录MODEM的活动
btmp 纪录失败的纪录
lastlog 纪录最近几次成功登录的事件和最后一次不成功的登录
messages 从syslog中记录信息(有的链接到syslog文件)
sudolog 纪录使用sudo发出的命令
sulog 纪录使用su命令的使用
syslog 从syslog中记录信息(通常链接到messages文件)
utmp 纪录当前登录的每个用户 /var/run/utmp
wtmp 一个用户每次登录进入和退出时间的永久纪录 /var/log/wtmp 系统重启及系统状态变化情况。
xferlog 纪录FTP会话

utmp、wtmp和lastlog日志文件是多数重用UNIX日志子系统的关键--保持用户登录进入和退出的纪录。
有关当前登录用户的信息记录在文件utmp中;[针对当前已LOGIN的用户]
登录进入和退出纪录在文件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纪录。该纪录一直用到用户登录退出时删除。 下一步,login程序打开文件wtmp附加用户的utmp纪录。当用户登录退出时,具有更新时间戳的同一utmp纪录附加到文件中。

LOGIN----刷新LAGTLOG----写入用户的utmp纪录-----退出时删除utmp中相应的纪录------LOGIN根据utmp更新对应wtmp文件中的记录。

utmp文件被各种命令文件使用,包括who、w、users和finger。均针对系统已login in的用户
wtmp文件被程序last和ac使用。这两个命令所按历史记录进行统计

3、. 具体命令
wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。

who:who命令查询utmp文件并报告当前登录的每个用户。Who的缺省输出包括用户名、终端类型、登录日期及远程主机。例如:who(回车)显示
chyang pts/0 Aug 18 15:06
ynguo pts/2 Aug 18 15:32
如果指明了wtmp文件名,则who命令查询所有以前的纪录。命令who /var/log/wtmp将报告自从wtmp文件创建或删改以来的每一次登录。

w:w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息。例如:w(回车)显示:
3:36pm up 1 day, 22:34, 6 users, load average: 0.23, 0.29, 0.27
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
chyang pts/0 202.38.68.242 3:06pm 2:04 0.08s 0.04s -bash

users:users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话。如果一个用户有不止一个登录会话,那他的用户名将显示相同的次数。
例如:users(回车)显示:
chyang lewis lewis ylou ynguo ynguo

last:last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户。例如:
chyang pts/9 202.38.68.242 Tue Aug 1 08:34 - 11:23 (02:49)
cfan pts/6 202.38.64.224 Tue Aug 1 08:33 - 08:48 (00:14)
如果指明了用户,那么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)

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的内容。
它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示"**Never logged**。
注意需要以root运行该命令,例如:
rong 5 202.38.64.187 Fri Aug 18 15:57:01 +0800 2000
dbb **Never logged in**
xinchen **Never logged in**
pb9511 **Never logged in**
xchen 0 202.38.64.190 Sun Aug 13 10:01:22 +0800 2000
另外,可一加一些参数,例如,last -u 102将报告UID为102的用户;last -t 7表示限制上一周的报告。

4. 进程统计

UNIX可以跟踪每个用户运行的每条命令,如果想知道昨晚弄乱了哪些重要的文件,进程统计子系统可以告诉你。它对还跟踪一个侵入者有帮助。
与连接时间日志不同,进程统计子系统缺省不激活,它必须启动。
在Linux系统中启动进程统计使用accton命令,必须用root身份来运行。Accton命令的形式accton file,file必须先存在。
1、先使用touch命 令来创建pacct文件:touch /var/log/pacct,
2、然后运行accton: accton /var/log/pacct。
3、一旦accton被激活,就可以使用lastcomm命令监测系统中任何时候执行的命令。
4、若要关闭统计,可以使用不带任何参数的accton命令。

lastcomm命令报告以前执行的文件。
不带参数时,lastcomm命令显示当前统计文件生命周期内纪录的所有命令的有关信息。包括命令名、用户、tty、命令花费的CPU时间和一个时间戳。如果系统有许多用户,输入则可能很长。下面的例子:
crond F root ?? 0.00 secs Sun Aug 20 00:16
promisc_check.s S root ?? 0.04 secs Sun Aug 20 00:16
promisc_check root ?? 0.01 secs Sun Aug 20 00:16
grep root ?? 0.02 secs Sun Aug 20 00:16
tail root ?? 0.01 secs Sun Aug 20 00:16
sh root ?? 0.01 secs Sun Aug 20 00:15
ping S root ?? 0.01 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

用户还可以根据用户而不是命令来提供一个摘要报告。例如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

使用logrorate对增长快的日志文件进行管理

Logrotate读取/etc/logrotate.d下的档案。管理员通过此处的脚本档案来控制Logrotate的运行。如下例:
{
rotate 5
weekly
errors root@serve1r
mail root@server1
copytruncate
compress
size 100k
}

5. Syslog设备

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隔开:选择域指明消息的类型和优先级;动作域指明syslogd接收到一个与选择标准相匹配的消息时所执行的动作。每个选项是由设备和优先级组
成。当指明一个优先级时,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 @linuxaid.com.cn

alert消息应该写到root和tiger的个人账号中:

#Root and Tiger get alert and higher messages
*.alert root,tiger

有时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 log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages

在有些情况下,可以把日志送到打印机,这样网络入侵者怎么修改日志都没有用了。通常要广泛纪录日志。Syslog设备是一个攻击者的显著目标。一个为其他主机维护日志的
系统对于防范服务器攻击特别脆弱,因此要特别注意。
有个小命令logger为syslog(3)系统日志文件提供一个shell命令接口,使用户能创建日志文件中的条目。用法:logger 例如:logger This is a test!
它将产生一个如下的syslog纪录:Aug 19 22:22:34 tiger: This is a test!
注意不要完全相信日志,因为攻击者很容易修改它的。
5. 程序日志
许多程序通过维护日志来反映系统的安全状态。su命令允许用户获得另一个用户的权限,所以它的安全很重要,它的文件为sulog。同样的还有sudolog。另外,想Apache有两 个日志:access_log和error_log。
6. 其他日志工具
chklastlog
ftp://coast.cs.purdue.edu/pub/tools/unix/chklastlog/
chkwtmp
ftp://coast.cs.purdue.edu/pub/tools/unix/chkwtmp/
dump_lastlog
ftp://coast.cs.purdue.edu/pub/tools/unix/dump_lastlog.Z
spar

ftp://coast.cs.purdue.edu/pub/tools/unix/TAMU/
Swatch
http://www.lomar.org/komar/alek/pres/swatch/cover.html
Zap
ftp://caost.cs.purdue.edu/pub/tools/unix/zap.tar.gz
日志分类方法
http://csrc.nist.gov/nissc/1998/proceedings/paperD1.pdf


Part III. 将Linux设置成Cisco路由器的日志服务器


首先 设置系统日志配置文件:

Vi /etc/sysconfig/syslog

SYSLOGD_OPTIONS="-m 0"

修改为

SYSLOGD_OPTIONS="-r -m 0" //-r 从远端主机写入 -m 0 sables 'MARK' messages

vi /etc/syslog.conf

加入下列内容

把设备号为local4(PIX的默认设备号)的所有的日志记录到 /var/log/router.log中

#Save pix messages all to router.log
local4.* /var/log/router.log

把设备号为local5(在S8016中用info-center loghost host-ip-addr facility local-number指定)的所有的日志记录到 /var/log/router.log中

#Save S8016 messages all to S8016.log
local5.* /var/log/S8016.log

生成空的日志文件

touch /var/log/router.log
touch /var/log/S8016.log

然后重启syslog,就ok了

/etc/rc.d/init.d/syslog restart

别忘了设置防火墙规则,仅允许你的设备发送到udp/514(默认的UDP端口为514,默认的tcp端口为146

为了避免日志过大,配置日志轮循(man logrotate 查看详细的帮助信息)

vi /etc/logrotate.conf

增加下列内容# system-specific logs may be also be configured here.
/var/log/router.log (
rotate 2
}
/var/log/S8016.log {
weekly //每周轮循
rotate 4 //轮循4次
}


配置crontab进行日志备份,如按照日期进行备份。

如网络设备很多,可把同类的设备配置为相同的设备号。

例:more switch.log | grep X.X.X.X //查看某一设备的日志。

审核和记录系统的事件是非常重要的。如果仅仅把系统事件作为日志记录下来,而不去查看,还是无济于事。可用webadmin管理和查看日志,用 logchek 自动地检查日志文件,把正常的日志信息剔除掉,把一些有问题的日志保留下来,然后把这些信息 email 给系统管理员。

网络设备配置

PIX的配置

logging on //打开日志

logging host [if_name] ip_address [protocol/port] //指定日志主机

例:logging host log 133.3.3.2

logging trap level //指定日志消息的级别 (0:紧急(Emergencies) 1:告警(Alerts) 2:严重的(Critical) 3:错误(Errors) 4:警告(Warnings) 5:通知(Notifications) 6:信息(Informational) 7:调试(Debugging))

logging trap 7 //把调试信息设置为Debug级,记录FTP命令和WWW的URL

另外可用logging facility命令更改设备号,PIX默认为local4(20)

Huawei S8016的配置( VRP(R) Software, Version 3.10(NSSA), RELEASE 5331)

Huawei S8016 新命令行设置日志服务器

info-center enable //打开信息中心

inf-center loghost host-ip-addr channel 2 facility local-number

设置日志主机的IP地址

info-center logging host host-ip-addr

设置日志主机的信息通道

info-center host host-ip-addr channel {channel-number|channel-name}

设置日志主机记录工具

set logging host host-ip-addr facility local-number

取消向日志主机输出信息

undo info-center loghost host-ip-addr

huwei S3026配置(VRP (tm) Software, Version 3.10)

logging on

set logging host 133.3.3.2 channel 2 language chinese facility local1
 
Cisco 7505的配置
logging 133.3.3.2
logging on
logging trap 6
logging facility local0

Part IV. 摸清Linux日志处理的来龙去脉


每个使用UNIX/LINUX的人都知道日志的用处,那你是否清楚LINUX这些日志信息处理的来龙去脉呢?

我们可以看到LINUX系统信息日志的途径基本有以下2种:

(1)dmesg查看----这个命令比较常见

(2)/var/log/下的文件

那下面我们就从这个2个途径着手,一步步的走下去.

(一)首先,我们来看dmesg这个常见的命令背后隐藏的是什么!!

(1)先让我们来MAN一下这个家伙

-------------man dmesg--------------------------

NAME

dmesg - print or control the kernel ring buffer

SYNOPSIS

dmesg [ -c ] [ -n level ] [ -s bufsize ]

DESCRIPTION

dmesg is used to examine or control the kernel ring buffer.

The program helps users to print out their bootup mes- sages. Instead of copying the messages by hand, the user need only:

dmesg > boot.messages

and mail the boot.messages file to whoever can debug their

problem.

OPTIONS

-c Clear the ring buffer contents after printing.

-sbufsize

Use a buffer of size bufsize to query the kernel ring buffer. This is 16392 by default. (The default kernel syslog buffer size was 4096 at first, 8192 since 1.3.54, 16384 since 2.1.113.) If you have set the kernel buffer to be larger than the default then this option can be used to view the entire buffer.

-nlevel

Set the level at which logging of messages is done to the console. For example, -n 1 prevents all messages, expect panic messages, from appearing on the console. All levels of messages are still written to /proc/kmsg, so syslogd(8) can still be used to control exactly where kernel messages appear.

When the -n option is used, dmesg will not print or clear the kernel ring buffer.

When both options are used, only the last option on the command line will have an effect.

从LINUX提供的手册,我们可以得知一条最重要的信息dmesg是从kernel 的ring buffer(环缓冲区)中读取信息的.

(2)那什么是ring buffer呢?

在LINUX中,所有的系统信息(包内核信息)都会传送到ring buffer中.而内核产生的信息由printk()打印出来。系统启动时所看到的信息都是由该函数打印到屏幕中。 printk()打出的信息往往以 <0><2>...这的数字表明消息的重要级别。高于一定的优先级别会打印到屏幕上, 否则只会保留在系统的缓冲区中(ring buffer)。

至于dmesg具体是如何从ring buffer中读取的,大家可以看dmesg.c源代码.很短,比较容易读懂.

(二)dmesg怎么搞的大家应该很明白了吧.至于/var/log/下的文件更是大家熟悉得不能再熟悉了!

(1)/var/log/..下为什么有这么多文件呢?

一句话解释: 是syslogd这个守护进程根据/etc/syslog.conf,将不同的服务产生的Log记录到不同的文件中.

这里的/etc/syslog.conf我就不细说了,很多这方面的信息(去查吧).

(2)既然知道了,/var/log/..是由syslogd这个守护进程产生的.那就再顺着这条线走下去.

LINUX系统启动后,由/etc/init.d/sysklogd先后启动klogd,syslogd两个守护进程。

其中klogd会通过syslog()系统调用或者读取proc文件系统来从系统缓冲区(ring buffer)中得到由内核printk()

发出的信息.而syslogd是通过klogd来读取系统内核信息.

我想至此,大家心理应该对log产生,读取等一系列的动作有所感觉.

总结:

(1)所有系统信息是输出到ring buffer中去的.dmesg所显示的内容也是从ring buffer中读取的.

(2)LINUX系统中/etc/init.d/sysklogd会启动2个守护进程:Klogd&&Syslogd

(3)klogd是负责读取内核信息的,有2种方式:

syslog()系统调用(这个函数用法比较全,大家去MAN一下看看)

直接的对/proc/kmsg进行读取(再这提一下,/proc/kmsg是专门输出内核信息的地方)

(4)Klogd的输出结果会传送给syslogd进行处理,syslogd会根据/etc/syslog.conf的配置把log

信息输出到/var/log/下的不同文件中。


你可能感兴趣的:(syslog详解)