centos 日志分析?centos7基础软件仓库出错

各位老铁们,大家好,今天由我来为大家分享centos 日志分析,以及centos7基础软件仓库出错的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

Linux系统日志分析的基本教程

首先,我们将描述有关 Linux日志是什么,到哪儿去找它们,以及它们是如何创建的基础知识

Linux系统日志

许多有价值的日志文件都是由 Linux自动地为你创建的。你可以在/var/log目录中找到它们。下面是在一个典型的 Ubuntu系统中这个目录的样子:

一些最为重要的 Linux系统日志包括:

/var/log/syslog或/var/log/messages存储所有的全局系统活动数据,包括开机信息。基于 Debian的系统如 Ubuntu在/var/log/syslog中存储它们,而基于 RedHat的系统如 RHEL或 CentOS则在/var/log/messages中存储它们。

/var/log/auth.log或/var/log/secure存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。Ubuntu和 Debian在/var/log/auth.log中存储认证信息,而 RedHat和 CentOS则在/var/log/secure中存储该信息。

/var/log/kern存储内核的错误和警告数据,这对于排除与定制内核相关的故障尤为实用。

/var/log/cron存储有关 cron作业的信息。使用这个数据来确保你的 cron作业正成功地运行着。

Digital Ocean有一个关于这些文件的完整教程,介绍了 rsyslog如何在常见的发行版本如 RedHat和 CentOS中创建它们。

应用程序也会在这个目录中写入日志文件。例如像 Apache,Nginx,MySQL等常见的服务器程序可以在这个目录中写入日志文件。其中一些日志文件由应用程序自己创建,其他的则通过 syslog(具体见下文)来创建。

什么是 Syslog?

Linux系统日志文件是如何创建的呢?答案是通过 syslog守护程序,它在 syslog套接字/dev/log上监听日志信息,然后将它们写入适当的日志文件中。

单词“syslog”代表几个意思,并经常被用来简称如下的几个名称之一:

Syslog守护进程—一个用来接收、处理和发送 syslog信息的程序。它可以远程发送 syslog到一个集中式的服务器或写入到一个本地文件。常见的例子包括 rsyslogd和 syslog-ng。在这种使用方式中,人们常说“发送到 syslog”。

Syslog协议—一个指定日志如何通过网络来传送的传输协议和一个针对 syslog信息(具体见下文)的数据格式的定义。它在 RFC-5424中被正式定义。对于文本日志,标准的端口是 514,对于加密日志,端口是 6514。在这种使用方式中,人们常说“通过 syslog传送”。

Syslog信息— syslog格式的日志信息或事件,它包括一个带有几个标准字段的消息头。在这种使用方式中,人们常说“发送 syslog”。

Syslog信息或事件包括一个带有几个标准字段的消息头,可以使分析和路由更方便。它们包括时间戳、应用程序的名称、在系统中信息来源的分类或位置、以及事件的优先级。

下面展示的是一个包含 syslog消息头的日志信息,它来自于控制着到该系统的远程登录的 sshd守护进程,这个信息描述的是一次失败的登录尝试:

341 2003-10-11T22:14:15.003Z server1.com sshd-- pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.2.2

Syslog格式和字段

每条 syslog信息包含一个带有字段的信息头,这些字段是结构化的数据,使得分析和路由事件更加容易。下面是我们使用的用来产生上面的 syslog例子的格式,你可以将每个值匹配到一个特定的字段的名称上。

复制代码

代码如下:

%pri%%protocol-version%%timestamp:::date-rfc3339%%HOSTNAME%%app-name%%procid%%msgid%%msg%n

下面,你将看到一些在查找或排错时最常使用的 syslog字段:

时间戳

时间戳(上面的例子为 2003-10-11T22:14:15.003Z)暗示了在系统中发送该信息的时间和日期。这个时间在另一系统上接收该信息时可能会有所不同。上面例子中的时间戳可以分解为:

2003-10-11年,月,日。

T为时间戳的必需元素,它将日期和时间分隔开。

22:14:15.003是 24小时制的时间,包括进入下一秒的毫秒数(003)。

Z是一个可选元素,指的是 UTC时间,除了 Z,这个例子还可以包括一个偏移量,例如-08:00,这意味着时间从 UTC偏移 8小时,即 PST时间。

主机名

主机名字段(在上面的例子中对应 server1.com)指的是主机的名称或发送信息的系统.

应用名

应用名字段(在上面的例子中对应 sshd:auth)指的是发送信息的程序的名称.

优先级

优先级字段或缩写为 pri(在上面的例子中对应)告诉我们这个事件有多紧急或多严峻。它由两个数字字段组成:设备字段和紧急性字段。紧急性字段从代表 debug类事件的数字 7一直到代表紧急事件的数字 0。设备字段描述了哪个进程创建了该事件。它从代表内核信息的数字 0到代表本地应用使用的 23。

Pri有两种输出方式。第一种是以一个单独的数字表示,可以这样计算:先用设备字段的值乘以 8,再加上紧急性字段的值:(设备字段)(8)+(紧急性字段)。第二种是 pri文本,将以“设备字段.紧急性字段”的字符串格式输出。后一种格式更方便阅读和搜索,但占据更多的存储空间。

分析 Linux日志

日志中有大量的信息需要你处理,尽管有时候想要提取并非想象中的容易。在这篇文章中我们会介绍一些你现在就能做的基本日志分析例子(只需要搜索即可)。我们还将涉及一些更高级的分析,但这些需要你前期努力做出适当的设置,后期就能节省很多时间。对数据进行高级分析的例子包括生成汇总计数、对有效值进行过滤,等等。

我们首先会向你展示如何在命令行中使用多个不同的工具,然后展示了一个日志管理工具如何能自动完成大部分繁重工作从而使得日志分析变得简单。

用 Grep搜索

搜索文本是查找信息最基本的方式。搜索文本最常用的工具是 grep。这个命令行工具在大部分 Linux发行版中都有,它允许你用正则表达式搜索日志。正则表达式是一种用特殊的语言写的、能识别匹配文本的模式。最简单的模式就是用引号把你想要查找的字符串括起来。

正则表达式

这是一个在 Ubuntu系统的认证日志中查找“user hoover”的例子:

复制代码

代码如下:

$ grep"user hoover"/var/log/auth.log

Accepted password for hoover from 10.0.2.2 port 4792 ssh2

pam_unix(sshd:session): session opened for user hoover by(uid=0)

pam_unix(sshd:session): session closed for user hoover

构建精确的正则表达式可能很难。例如,如果我们想要搜索一个类似端口“4792”的数字,它可能也会匹配时间戳、URL以及其它不需要的数据。Ubuntu中下面的例子,它匹配了一个我们不想要的 Apache日志。

复制代码

代码如下:

$ grep"4792"/var/log/auth.log

Accepted password for hoover from 10.0.2.2 port 4792 ssh2

74.91.21.46-- [31/Mar/2015:19:44:32+0000]"GET/scripts/samples/search?q=4972 HTTP/1.0" 404 545"-""-”

环绕搜索

另一个有用的小技巧是你可以用 grep做环绕搜索。这会向你展示一个匹配前面或后面几行是什么。它能帮助你调试导致错误或问题的东西。B选项展示前面几行,A选项展示后面几行。举个例子,我们知道当一个人以管理员员身份登录失败时,同时他们的 IP也没有反向解析,也就意味着他们可能没有有效的域名。这非常可疑!

复制代码

代码如下:

$ grep-B 3-A 2'Invalid user'/var/log/auth.log

Apr 28 17:06:20 ip-172-31-11-241 sshd[12545]: reverse mapping checking getaddrinfo for 216-19-2-8.commspeed.net [216.19.2.8] failed- POSSIBLE BREAK-IN ATTEMPT!

Apr 28 17:06:20 ip-172-31-11-241 sshd[12545]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth]

Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: Invalid user admin from 216.19.2.8

Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: input_userauth_request: invalid user admin [preauth]

Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth]

Tail

你也可以把 grep和 tail结合使用来获取一个文件的最后几行,或者跟踪日志并实时打印。这在你做交互式更改的时候非常有用,例如启动服务器或者测试代码更改。

复制代码

代码如下:

$ tail-f/var/log/auth.log| grep'Invalid user'

Apr 30 19:49:48 ip-172-31-11-241 sshd[6512]: Invalid user ubnt from 219.140.64.136

Apr 30 19:49:49 ip-172-31-11-241 sshd[6514]: Invalid user admin from 219.140.64.136

关于 grep和正则表达式的详细介绍并不在本指南的范围,但 Ryan’s Tutorials有更深入的介绍。

日志管理系统有更高的性能和更强大的搜索能力。它们通常会索引数据并进行并行查询,因此你可以很快的在几秒内就能搜索 GB或 TB的日志。相比之下,grep就需要几分钟,在极端情况下可能甚至几小时。日志管理系统也使用类似 Lucene的查询语言,它提供更简单的语法来检索数字、域以及其它。

用 Cut、 AWK、和 Grok解析

Linux提供了多个命令行工具用于文本解析和分析。当你想要快速解析少量数据时非常有用,但处理大量数据时可能需要很长时间。

Cut

cut命令允许你从有分隔符的日志解析字段。分隔符是指能分开字段或键值对的等号或逗号等。

假设我们想从下面的日志中解析出用户:

复制代码

代码如下:

pam_unix(su:auth): authentication failure; logname=hoover uid=1000 euid=0 tty=/dev/pts/0 ruser=hoover rhost= user=root

我们可以像下面这样用 cut命令获取用等号分割后的第八个字段的文本。这是一个 Ubuntu系统上的例子:

复制代码

代码如下:

$ grep"authentication failure"/var/log/auth.log| cut-d'='-f 8

root

hoover

root

nagios

nagios

AWK

另外,你也可以使用 awk,它能提供更强大的解析字段功能。它提供了一个脚本语言,你可以过滤出几乎任何不相干的东西。

例如,假设在 Ubuntu系统中我们有下面的一行日志,我们想要提取登录失败的用户名称:

复制代码

代码如下:

Mar 24 08:28:18 ip-172-31-11-241 sshd[32701]: input_userauth_request: invalid user guest [preauth]

你可以像下面这样使用 awk命令。首先,用一个正则表达式/sshd.*invalid user/来匹配 sshd invalid user行。然后用{ print$9}根据默认的分隔符空格打印第九个字段。这样就输出了用户名。

复制代码

代码如下:

$ awk'/sshd.*invalid user/{ print$9}'/var/log/auth.log

guest

admin

info

test

ubnt

你可以在 Awk用户指南中阅读更多关于如何使用正则表达式和输出字段的信息。

日志管理系统

日志管理系统使得解析变得更加简单,使用户能快速的分析很多的日志文件。他们能自动解析标准的日志格式,比如常见的 Linux日志和 Web服务器日志。这能节省很多时间,因为当处理系统问题的时候你不需要考虑自己写解析逻辑。

下面是一个 sshd日志消息的例子,解析出了每个 remoteHost和 user。这是 Loggly中的一张截图,它是一个基于云的日志管理服务。

你也可以对非标准格式自定义解析。一个常用的工具是 Grok,它用一个常见正则表达式库,可以解析原始文本为结构化 JSON。下面是一个 Grok在 Logstash中解析内核日志文件的事例配置:

复制代码

代码如下:

filter{

grok{

match={"message"="%{CISCOTIMESTAMP:timestamp}%{HOST:host}%{WORD:program}%{NOTSPACE}%{NOTSPACE}%{NUMBER:duration}%{NOTSPACE}%{GREEDYDATA:kernel_logs}"

}

}

下图是 Grok解析后输出的结果:

用 Rsyslog和 AWK过滤

过滤使得你能检索一个特定的字段值而不是进行全文检索。这使你的日志分析更加准确,因为它会忽略来自其它部分日志信息不需要的匹配。为了对一个字段值进行搜索,你首先需要解析日志或者至少有对事件结构进行检索的方式。

如何对应用进行过滤

通常,你可能只想看一个应用的日志。如果你的应用把记录都保存到一个文件中就会很容易。如果你需要在一个聚集或集中式日志中过滤一个应用就会比较复杂。下面有几种方法来实现:

用 rsyslog守护进程解析和过滤日志。下面的例子将 sshd应用的日志写入一个名为 sshd-message的文件,然后丢弃事件以便它不会在其它地方重复出现。你可以将它添加到你的 rsyslog.conf文件中测试这个例子。

复制代码

代码如下:

:programname, isequal,“sshd”/var/log/sshd-messages

~

用类似 awk的命令行工具提取特定字段的值,例如 sshd用户名。下面是 Ubuntu系统中的一个例子。

复制代码

代码如下:

$ awk'/sshd.*invalid user/{ print$9}'/var/log/auth.log

guest

admin

info

test

ubnt

用日志管理系统自动解析日志,然后在需要的应用名称上点击过滤。下面是在 Loggly日志管理服务中提取 syslog域的截图。我们对应用名称“sshd”进行过滤,如维恩图图标所示。

如何过滤错误

一个人最希望看到日志中的错误。不幸的是,默认的 syslog配置不直接输出错误的严重性,也就使得难以过滤它们。

这里有两个解决该问题的方法。首先,你可以修改你的 rsyslog配置,在日志文件中输出错误的严重性,使得便于查看和检索。在你的 rsyslog配置中你可以用 pri-text添加一个模板,像下面这样:

复制代码

代码如下:

"%pri-text%:%timegenerated%,%HOSTNAME%,%syslogtag%,%msg%n"

这个例子会按照下面的格式输出。你可以看到该信息中指示错误的 err。

复制代码

代码如下:

: Mar 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: Authentication failure

你可以用 awk或者 grep检索错误信息。在 Ubuntu中,对这个例子,我们可以用一些语法特征,例如.和,它们只会匹配这个域。

复制代码

代码如下:

$ grep'.err'/var/log/auth.log

: Mar 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: Authentication failure

你的第二个选择是使用日志管理系统。好的日志管理系统能自动解析 syslog消息并抽取错误域。它们也允许你用简单的点击过滤日志消息中的特定错误。

下面是 Loggly中一个截图,显示了高亮错误严重性的 syslog域,表示我们正在过滤错误:

在CentOS系统上查看用户登录记录的方法

保留、维护和分析日志(如某个特定时期内发生过的,或正在发生的帐号事件),是Linux系统管理员最基础和最重要的任务之一。对于用户管理,检查用户的登入和登出日志(不管是失败的,还是成功的)可以让我们对任何潜在的安全隐患或未经授权使用系统的情况保持警惕。例如,工作时间之外或放假期间的来自未知IP地址或帐号的远程登录应当发出红色警报。

在CentOS系统上,用户登录历史存储在以下这些文件中:

/var/run/utmp(用于记录当前打开的会话)被who和w工具用来记录当前有谁登录以及他们正在做什么,而uptime用来记录系统启动时间。

/var/log/wtmp(用于存储系统连接历史记录)被last工具用来记录最后登录的用户的列表。

/var/log/btmp(记录失败的登录尝试)被lastb工具用来记录最后失败的登录尝试的列表。

   在本文中,我将介绍如何使用utmpdump,这个小程序来自sysvinit-tools包,可以用于转储二进制日志文件到文本格式的文件以便检查。此工具默认在CentOS 6和7系列上可用。utmpdump收集到的信息比先前提到过的工具的输出要更全面,这让它成为一个胜任该工作的很不错的工具。除此之外,utmpdump可以用于修改utmp或wtmp。如果你想要修复二进制日志中的任何损坏条目,它会很有用(LCTT译注:我怎么觉得这像是做坏事的前奏?)。

Utmpdump的使用及其输出说明

正如我们之前提到的,这些日志文件,与我们大多数人熟悉的其它日志相比(如/var/log/messages,/var/log/cron,/var/log/maillog),是以二进制格式存储的,因而我们不能使用像less或more这样的文件命令来查看它们的内容。所以,utmpdump的出现拯救了世界。

为了要显示/var/run/utmp的内容,请运行以下命令:

代码如下:

# utmpdump/var/run/utmp

   同样要显示/var/log/wtmp的内容:

代码如下:

# utmpdump/var/log/wtmp| tail-15[code]

最后,对于/var/log/btmp:

[code]# utmpdump/var/log/btmp

   正如你所能看到的,三种情况下的输出结果是一样的,除了utmp和btmp的记录是按时间排序,而wtmp的顺序是颠倒的这个原因外(LCTT译注:此处原文有误,实际上都是按照时间顺序排列的)。

每个日志行格式化成了多列,说明如下。第一个字段显示了会话识别符,而第二个字段则是PID。第三个字段可以是以下值:--(表示运行等级改变或系统重启),bw(启动守候进程),数字(表示TTY编号),或者字符和数字(表示伪终端)。第四个字段可以为空或用户名、重启或运行级别。第五个字段是主TTY或PTY(伪终端),如果此信息可获得的话。第六个字段是远程主机名(如果是本地登录,该字段为空,运行级别信息除外,它会返回内核版本)。第七个字段是远程系统的IP地址(如果是本地登录,该字段为0.0.0.0)。如果没有提供DNS解析,第六和第七字段会显示相同的信息(远程系统的IP地址)。最后一个(第八)字段指明了该记录创建的日期和时间。

Utmpdump使用样例

下面提供了一些utmpdump的简单使用情况。

1、检查8月18日到9月17日之间某个特定用户(如gacanepa)的登录次数。

代码如下:

# utmpdump/var/log/wtmp| grep gacanepa

   如果你需要回顾先前日期的登录信息,你可以检查/var/log下的wtmp-YYYYMMDD(或wtmp.[1...N])和btmp-YYYYMMDD(或btmp.[1...N])文件,这些是由logrotate生成的旧wtmp和btmp的归档文件。

2、统计来自IP地址192.168.0.101的登录次数。

代码如下:

# utmpdump/var/log/wtmp| grep 192.168.0.101

   3、显示失败的登录尝试。

代码如下:

# utmpdump/var/log/btmp

   在/var/log/btmp输出中,每个日志行都与一个失败的登录尝试相关(如使用不正确的密码,或者一个不存在的用户ID)。上面图片中高亮部分显示了使用不存在的用户ID登录,这警告你有人尝试猜测常用帐号名来闯入系统。这在使用tty1的情况下是个极其严重的问题,因为这意味着某人对你机器上的终端具有访问权限(该检查一下谁拿到了进入你数据中心的钥匙了,也许吧?)

4、显示每个用户会话的登入和登出信息

代码如下:

# utmpdump/var/log/wtmp

   在/var/logwtmp中,一次新的登录事件的特征是,第一个字段为‘7’,第三个字段是一个终端编号(或伪终端id),第四个字段为用户名。相关的登出事件会在第一个字段显示‘8’,第二个字段显示与登录一样的PID,而终端编号字段空白。例如,仔细观察上面图片中PID 1463的行。

在 [Fri Sep 19 11:57:40 2014 ART],TTY1上显示登录提示符。

在 [Fri Sep 19 12:04:21 2014 ART],用户 root登入。

在 [Fri Sep 19 12:07:24 2014 ART],用户 root登出。

旁注:第四个字段的LOGIN意味着出现了一次登录到第五字段指定的终端的提示。

到目前为止,我介绍一些有点琐碎的例子。你可以将utmpdump和其它一些文本处理工具,如awk、sed、grep或cut组合,来产生过滤和加强的输出。

例如,你可以使用以下命令来列出某个特定用户(如gacanepa)的所有登录事件,并发送输出结果到.csv文件,它可以用像LibreOffice Calc或Microsoft Excel之类的文字或工作簿应用程序打开查看。让我们只显示PID、用户名、IP地址和时间戳:

代码如下:

# utmpdump/var/log/wtmp| grep-E"/[7].*gacanepa"| awk-v OFS=","'BEGIN{FS="]"};{print$2,$4,$7,$8}'| sed-e's//[//g'-e's//]//g'

   就像上面图片中三个高亮区域描绘的那样,过滤逻辑操作是由三个管道步骤组成的。第一步用于查找由用户gacanepa触发的登录事件([7]);第二步和第三部用于选择期望的字段,移除utmpdump输出的方括号并设置输出字段分隔符为逗号。

当然,如果你想要在以后打开来看,你需要重定向上面的命令输出到文件(添加“[文件名].csv”到命令后面)。

   在更为复杂的例子中,如果你想要知道在特定时间内哪些用户(在/etc/passwd中列出)没有登录,你可以从/etc/passwd中提取用户名,然后运行grep命令来获取/var/log/wtmp输出中对应用户的列表。就像你看到的那样,有着无限可能。

在进行总结之前,让我们简要地展示一下utmpdump的另外一种使用情况:修改utmp或wtmp。由于这些都是二进制日志文件,你不能像编辑文件一样来编辑它们。取而代之是,你可以将其内容输出成为文本格式,并修改文本输出内容,然后将修改后的内容导入回二进制日志中。如下:

代码如下:

# utmpdump/var/log/utmp tmp_output

使用文本编辑器修改 tmp_output

# utmpdump-r tmp_output/var/log/utmp

这在你想要移除或修复二进制日志中的任何伪造条目时很有用。

下面小结一下,utmpdump从utmp、wtmp和btmp日志文件或轮循的旧归档文件来读取详细的登录事件,来补充如who,w,uptime,last,lastb之类的标准工具的不足,这也使得它成为一个很棒的工具。

centos 查看系统有哪些用户

保留、维护和分析日志(如某个特定时期内发生过的,或正在发生的帐号事件),是Linux系统管理员最基础和最重要的任务之一。对于用户管理,检查用户的登入和登出日志(不管是失败的,还是成功的)可以让我们对任何潜在的安全隐患或未经授权使用系统的情况保持警惕。例如,工作时间之外或放假期间的来自未知IP地址或帐号的远程登录应当发出红色警报。在CentOS系统上,用户登录历史存储在以下这些文件中:/var/run/utmp(用于记录当前打开的会话)被who和w工具用来记录当前有谁登录以及他们正在做什么,而uptime用来记录系统启动时间。/var/log/wtmp(用于存储系统连接历史记录)被last工具用来记录最后登录的用户的列表。/var/log/btmp(记录失败的登录尝试)被lastb工具用来记录最后失败的登录尝试的列表。在本文中,我将介绍如何使用utmpdump,这个小程序来自sysvinit-tools包,可以用于转储二进制日志文件到文本格式的文件以便检查。此工具默认在CentOS 6和7系列上可用。utmpdump收集到的信息比先前提到过的工具的输出要更全面,这让它成为一个胜任该工作的很不错的工具。除此之外,utmpdump可以用于修改utmp或wtmp。如果你想要修复二进制日志中的任何损坏条目,它会很有用(LCTT译注:我怎么觉得这像是做坏事的前奏?)。 Utmpdump的使用及其输出说明正如我们之前提到的,这些日志文件,与我们大多数人熟悉的其它日志相比(如/var/log/messages,/var/log/cron,/var/log/maillog),是以二进制格式存储的,因而我们不能使用像less或more这样的文件命令来查看它们的内容。所以,utmpdump的出现拯救了世界。为了要显示/var/run/utmp的内容,请运行以下命令:代码如下:# utmpdump/var/run/utmp同样要显示/var/log/wtmp的内容:代码如下:# utmpdump/var/log/wtmp tail-15[code]最后,对于/var/log/btmp: [code]# utmpdump/var/log/btmp正如你所能看到的,三种情况下的输出结果是一样的,除了utmp和btmp的记录是按时间排序,而wtmp的顺序是颠倒的这个原因外(LCTT译注:此处原文有误,实际上都是按照时间顺序排列的)。每个日志行格式化成了多列,说明如下。第一个字段显示了会话识别符,而第二个字段则是PID。第三个字段可以是以下值:--(表示运行等级改变或系统重启),bw(启动守候进程),数字(表示TTY编号),或者字符和数字(表示伪终端)。第四个字段可以为空或用户名、重启或运行级别。第五个字段是主TTY或PTY(伪终端),如果此信息可获得的话。第六个字段是远程主机名(如果是本地登录,该字段为空,运行级别信息除外,它会返回内核版本)。第七个字段是远程系统的IP地址(如果是本地登录,该字段为0.0.0.0)。如果没有提供DNS解析,第六和第七字段会显示相同的信息(远程系统的IP地址)。最后一个(第八)字段指明了该记录创建的日期和时间。 Utmpdump使用样例下面提供了一些utmpdump的简单使用情况。 1、检查8月18日到9月17日之间某个特定用户(如gacanepa)的登录次数。代码如下:# utmpdump/var/log/wtmp grep gacanepa如果你需要回顾先前日期的登录信息,你可以检查/var/log下的wtmp-YYYYMMDD(或wtmp.[1...N])和btmp-YYYYMMDD(或btmp.[1...N])文件,这些是由logrotate生成的旧wtmp和btmp的归档文件。 2、统计来自IP地址192.168.0.101的登录次数。代码如下:# utmpdump/var/log/wtmp grep 192.168.0.101 3、显示失败的登录尝试。代码如下:# utmpdump/var/log/btmp在/var/log/btmp输出中,每个日志行都与一个失败的登录尝试相关(如使用不正确的密码,或者一个不存在的用户ID)。上面图片中高亮部分显示了使用不存在的用户ID登录,这警告你有人尝试猜测常用帐号名来闯入系统。这在使用tty1的情况下是个极其严重的问题,因为这意味着某人对你机器上的终端具有访问权限(该检查一下谁拿到了进入你数据中心的钥匙了,也许吧?) 4、显示每个用户会话的登入和登出信息代码如下:# utmpdump/var/log/wtmp在/var/logwtmp中,一次新的登录事件的特征是,第一个字段为‘7’,第三个字段是一个终端编号(或伪终端id),第四个字段为用户名。相关的登出事件会在第一个字段显示‘8’,第二个字段显示与登录一样的PID,而终端编号字段空白。例如,仔细观察上面图片中PID 1463的行。在 [Fri Sep 19 11:57:40 2014 ART],TTY1上显示登录提示符。在 [Fri Sep 19 12:04:21 2014 ART],用户 root登入。在 [Fri Sep 19 12:07:24 2014 ART],用户 root登出。旁注:第四个字段的LOGIN意味着出现了一次登录到第五字段指定的终端的提示。到目前为止,我介绍一些有点琐碎的例子。你可以将utmpdump和其它一些文本处理工具,如awk、sed、grep或cut组合,来产生过滤和加强的输出。例如,你可以使用以下命令来列出某个特定用户(如gacanepa)的所有登录事件,并发送输出结果到.csv文件,它可以用像LibreOffice Calc或Microsoft Excel之类的文字或工作簿应用程序打开查看。让我们只显示PID、用户名、IP地址和时间戳:代码如下:# utmpdump/var/log/wtmp grep-E"[7].*gacanepa" awk-v OFS=","'BEGIN{FS="]"};{print$2,$4,$7,$8}' sed-e's/[//g'-e's/]//g'就像上面图片中三个高亮区域描绘的那样,过滤逻辑操作是由三个管道步骤组成的。第一步用于查找由用户gacanepa触发的登录事件([7]);第二步和第三部用于选择期望的字段,移除utmpdump输出的方括号并设置输出字段分隔符为逗号。当然,如果你想要在以后打开来看,你需要重定向上面的命令输出到文件(添加“>[文件名].csv”到命令后面)。在更为复杂的例子中,如果你想要知道在特定时间内哪些用户(在/etc/passwd中列出)没有登录,你可以从/etc/passwd中提取用户名,然后运行grep命令来获取/var/log/wtmp输出中对应用户的列表。就像你看到的那样,有着无限可能。在进行总结之前,让我们简要地展示一下utmpdump的另外一种使用情况:修改utmp或wtmp。由于这些都是二进制日志文件,你不能像编辑文件一样来编辑它们。取而代之是,你可以将其内容输出成为文本格式,并修改文本输出内容,然后将修改后的内容导入回二进制日志中。如下:代码如下:# utmpdump/var/log/utmp> tmp_output<使用文本编辑器修改 tmp_output># utmpdump-r tmp_output>/var/log/utmp这在你想要移除或修复二进制日志中的任何伪造条目时很有用。下面小结一下,utmpdump从utmp、wtmp和btmp日志文件或轮循的旧归档文件来读取详细的登录事件,来补充如who,w,uptime,last,lastb之类的标准工具的不足,这也使得它成为一个很棒的工具。

阅读剩余
THE END