Linux 日志系统

在Linux系统中,有三个主要的日志子系统: 

连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。

如:查看linux下的用户登录日志,包括用户登录时所用的主机的ip

more /var/log/secure
who /var/log/wtmp

查看做过什么?

root账户下输入su - username
切换到username下输入
history
能看到这个用户历史命令,默认最近的1000条 

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

错误日志--由syslogd(8)执行。各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件。另外有许多UNIX程序创建日志。像HTTP

FTP这样提供网络服务的服务器也保持详细的日志。

什么是syslog?
Linux内核由很多子系统组成:包括网络、文件访问、内存管理等。子系统需要给用户传送一些消息,这些消息内容包括消息的来源及其重要性等。所有的子系统都要把消息传送到一个可以维护的公共消息区,于是就有了syslog。
syslog是一个综合的日志记录系统。它的主要功能是:方便日志管理和分类存放日志。syslog使程序设计者从繁重的、机械的编写日志文件代码的工作中解脱出来,使管理员更好的控制日志的记录过程。syslog能够设置成根据输出信息的程序或重要程度将信息排序到不同的文件中。例如:
由于核心信息更重要,且需要有规律地单独阅读以确定问题出在哪里,所以要把核心信息与其他信息分开来,单独定向到一个分离的文件中。管理员可以通过编写/etc/syslog.conf来配置他们的行为。

syslog的配置文件:


syslogd 的配置文件/etc/syslog.conf 规定了系统中需要监视的事件和相应的日志的保存位置。
# Log all kernel messages to the console.
#Logging much else clutters up the screen.
#kern.*                                                /dev/console

# 将 info 或更高级别的消息送到/var/log/messages,
# 除了 mail/news/authpriv/cron 以外。
# 其中*是通配符,代表任何设备;none 表示不对任何级别的信息进行记录。
*.info;mail.none;news.none;authpriv.none;cron.none      /var/log/messages

# 将 authpirv 设备的任何级别的信息记录到/var/log/secure文件中,
# 这主要是一些和认证、权限使用相关的信息。
authpriv.*                                              /var/log/secure

# 将 mail 设备中的任何级别的信息记录到/var/log/maillog 文件中,  这主要是和电子邮件相关的信息。
mail.*                                                 -/var/log/maillog

# 将 cron 设备中的任何级别的信息记录到/var/log/cron 文件中,
# 这主要是和系统中定期执行的任务相关的信息。

该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户、登录时间和PID,以及派生出的进程的动作。CMD的一个动作是cron派生出一个调度进程的常见情况。REPLACE(替换)动作记录用户对它的cron文件的更新,该文件列出了要周期性执行的任务调度。RELOAD动作在REPLACE动作后不久发生,这意味着cron注意到一个用户的cron文件被更新而cron需要把它重新装入内存。该文件可能会查到一些反常的情况。
cron.*                                                 /var/log/cron

# 将任何设备的emerg 级别或更高级别的消息发送给所有正在系统上的用户。
*.emerg                                                * 

# 将 uucp 和 news 设备的 crit 级别或更高级别的消息记录到/var/log/spooler文件中。

uucp,news.crit                                          /var/log/spooler

# 将和本地系统启动相关的信息记录到/var/log/boot.log文件中。该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息。
local7.*                                               /var/log/boot.log

# 将 news 设备的 crit 级别的消息记录到/var/log/news/news.crit 文件中。
news.=crit                                        /var/log/news/news.crit

# 将 news 设备的 err 级别的消息记录到/var/log/news/news.err 文件中。
news.=err                                         /var/log/news/news.err

# 将 news 设备的 notice或更高级别的消息记录到/var/log/news/news.notice 文件中。
news.notice

/var/log/syslog

默认RedHatLinux不生成该日志文件,但可以配置/etc/syslog.conf让系统生成该日志文件。它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件。要让系统生成该日志文件,在/etc/syslog.conf文件中加上:*.warning  /var/log/syslog   该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息。下面是一条记录:

QUOTE:

Sep 616:47:52 UNIX login(pam_unix)[2384]:check pass; user unknown 


syslogd 配置 设备.级别       动作 




常见的日志文件:

几个跟用户登录相关的日志:

var/log/lastlog

该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成。在每次用户登录时被查询,该文件是二进制文件,需要使用lastlog命令查看,根据UID排序显示登录名、端口号和上次登录时间。如果某用户从来没有登录过,就显示为"**Neverlogged in**"。该命令只能以root权限执行。简单地输入lastlog命令后就会看到类似如下的信息:

QUOTE:

UsernamePort From Latest

roottty2 Tue Sep 3 08:32:27 +0800 2002

bin**Never logged in**

daemon**Never logged in**

adm**Never logged in**

lp**Never logged in**

系统账户诸如bin、daemon、adm、uucp、mail等决不应该登录,如果发现这些账户已经登录,就说明系统可能已经被入侵了。若发现记录的时间不是用户上次登录的时间,则说明该用户的账户已经泄密了。

/var/log/wtmp

该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端tty或时间显示相应的记录。

关于last命令:
NAME
       last, lastb - show listing of last logged in users

SYNOPSIS
       last [-R] [-num] [ -n num ] [-adFiowx] [ -f file ] [ -t YYYYMMDDHHMMSS ] [name...]  [tty...]
       lastb [-R] [-num] [ -n num ] [ -f file ] [-adFiowx] [name...]  [tty...]

DESCRIPTION
       Last  searches back through the file /var/log/wtmp (or the file designated by the -f flag) and displays a
       list of all users logged in (and out) since that file was created.  Names  of  users  and  tty?.  can  be
       given,  in  which  case  last  will show only those entries matching the arguments.  Names of ttys can be
      abbreviated, thus last 0 is the same as last tty0.

       When last catches a SIGINT signal (generated by the interrupt key, usually control-C) or a SIGQUIT signal
       (generated  by the quit key, usually control-\), last will show how far it has searched through the file;
       in the case of the SIGINT signal last will then terminate.

       The pseudo user reboot logs in each time the system is rebooted.  Thus last reboot will show a log of all
       reboots since the log file was created.

       Lastb  is  the  same as last, except that by default it shows a log of the file /var/log/btmp, which con-
       tains all the bad login attempts.

/var/run/utmp

该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如who、w、users、finger等就需要访问这个文件。该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新utmp记录,因此该日志文件的记录不是百分之百值得信赖的。

以上提及的3个文件(/var/log/wtmp、/var/run/utmp、/var/log/lastlog)是日志子系统的关键文件,都记录了用户登录的情况。这些文件的所有记录都包含了时间戳。这些文件是按二进制保存的,故不能用less、cat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看。

每次有一个用户登录时,login程序在文件lastlog中查看用户的UID。如果存在,则把用户上次登录、注销时间和主机名写到标准输出中,然后login程序在lastlog中记录新的登录时间,打开utmp文件并插入用户的utmp记录。该记录一直用到用户登录退出时删除。utmp文件被各种命令使用,包括who、w、users和finger。

下一步,login程序打开文件wtmp附加用户的utmp记录。当用户登录退出时,具有更新时间戳的同一utmp记录附加到文件中。wtmp文件被程序last使用。

更多参考:http://download.csdn.net/detail/changyanmanman/7276543

时间: 2024-09-19 09:45:23

Linux 日志系统的相关文章

Linux下一个简单的日志系统的设计及其C代码实现

1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息,包括:变量名称及其值.消息结构定义.函数返回值及其执行情况.脚本执行及调用情况等.通过阅读日志文件,我们能够较快地跟踪程序流程,并发现程序问题.因此,熟练掌握日志系统的编写方法并快速地阅读日志文件,是对一个软件开发工程师的基本要求. 本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现.本文为相关开发项目Linux下软

Linux下搭建Linux日志服务器图解

为什么架设LINUX日志服务器: 众所周知,Linux是一个日志系统完善的操作系统.系统管理员在运行维护服务器的时候,少不了查看日志文件,当服务器出现错误,排错的时候更是少不了查看系统日志.当管理员管理的网络中有多台Linux服务器的时候,并且服务器比较分散,管理跑到各个服务器上查看系统日志甚是麻烦.那么,我们可以构建一台日志服务器,所有的Linux系统产生的日志,都发送到日志服务器上.管理员只需要查看日志服务器中的日志文件即可. 配置环境:vmware虚拟机. 服务器IP地址:192.168.

Linux日志管理的5个常用命令

从Ext到Ext2,从Ext2再到Ext3,乃至以后的Ext4或者更高版本,Linux系统历来以强大.丰富和完整的日志系统著称.通过管理日志,可以清晰地了解系统的运行状况,也能从各种蛛丝马迹中发现入侵和快速地阻止入侵.本文是有关Linux系统全方位管理的第四部分,讲述Linux日志管理方面的事项.前面三个部分分别为:文件系统管理,Linux进程管理,以及用户管理. 日志主要的功能有:审计和监测.它还可以实时的监测系统状态,监测和追踪侵入者等等.成功地管理任何系统的关键之一,是要知道系统中正在发生

Linux 日志基础

首先,我们将描述有关 Linux 日志是什么,到哪儿去找它们,以及它们是如何创建的基础知识.如果你已经知道这些,请随意跳至下一节. Linux 系统日志 许多有价值的日志文件都是由 Linux 自动地为你创建的.你可以在 /var/log 目录中找到它们.下面是在一个典型的 Ubuntu 系统中这个目录的样子: 一些最为重要的 Linux 系统日志包括: /var/log/syslog 或 /var/log/messages 存储所有的全局系统活动数据,包括开机信息.基于 Debian 的系统如

linux-LINUX系统下,开发日志系统,没有头绪,求指点

问题描述 LINUX系统下,开发日志系统,没有头绪,求指点 问题描述: 是在ARM开发板上开发LINUX系统及上软件,因为我刚参与进来,所以框架我还不清楚,主要是socket和can协议这样. 周五开会,让我开发一套日志系统,作为一个独立的模块,谁想写日志,就调用我的接口. 然而,我弄到现在完全没有头绪,因为以前也没搞过日志,所以求指点,给个头绪,让我进行下去.

Linux日志文件总管——logrotate

Linux日志文件总管--logrotate 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事. logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件.例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志.配置完后,lo

suse linux 10系统时间跑偏问题解析

在suse linux 10上部署WAS应用和搭建ORACLE RAC集群时,经常会碰到因系统时间不准而导致WAS不正常和RAC节点宕机问题,解决系统时间跑偏的问题,大家会很自然的想到NTP和CRONTAB.下面针对这个问题来具体说说suse linux 10系统时间跑偏问题. 一.现象         经过观察,你会发现在安装系统后第一次设置正确系统时间后,没设置定时校准的情况下,它的系统时间一小时会偏差有4-6分钟左右,一天下来通常会偏差50分钟左右.这在生产环境下肯定会出问题. 二.NTP

Android日志系统驱动程序Logger源代码分析

  我们知道,在Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是Android应用程序还是系统组件.在前面的文章浅谈Android系统开发中LOG的使用中,已经简要地介绍了在Android应用程序开发中Log的使用方法,在这一篇文章中,我们将更进一步地分析Logger驱动程序的源代码,使得我们对Android日志系统有一个深刻的认识.         既然And

Android 日志系统Logger源代码详细介绍_Android

 我们知道,在Android系统中,提供了一个轻量级的日志系统,这个日志系统是以驱动程序的形式实现在内核空间的,而在用户空间分别提供了Java接口和C/C++接口来使用这个日志系统,取决于你编写的是Android应用程序还是系统组件.在前面的文章浅谈Android系统开发中LOG的使用中,已经简要地介绍了在Android应用程序开发中Log的使用方法,在这一篇文章中,我们将更进一步地分析Logger驱动程序的源代码,使得我们对Android日志系统有一个深刻的认识.         既然Andr