解码 wtmp 中的所有记录

解码 wtmp 中的所有记录

/var/log/wtmp根据手册页的Linux 日志http://linux.die.net/man/5/wtmp存储许多系统事件的“utmp”事件,例如登录(LOGIN_PROCESS ut_type)、更改运行级别(RUN_LVL ut_type)等。

last一个实用程序,它可以解析 wtmp 并打印谁登录了系统以及何时重新启动。

有没有工具可以显示wtmp日志中的其他记录?

将信息写入日志的过程是什么wtmp

答案1

有几个简单的 perl 解析器用于 wtmp 文件,例如wtmp.pl“Brocade Blue”

http://brocadeblue.blogspot.com/2012/10/perl-script-to-parse-wtmp-logs.html

完整源代码,wtmp.pl修正了一些小错误:

#!/usr/bin/perl
@type = (
    "Empty", "Run Lvl", "Boot", "New Time", "Old Time", "Init",
    "Login", "Normal",  "Term", "Account"
);
$recs = "";
while (<>) { 
    $recs .= $_;
}
foreach ( split( /(.{384})/s, $recs ) ) {
    next if length($_) == 0 ;
    my ( $type, $pid, $line, $inittab, $user, $host, $t1, $t2, $t3, $t4, $t5 ) =
      $_ =~ /(.{4})(.{4})(.{32})(.{4})(.{32})(.{256})(.{4})(.{4})(.{4})(.{4})(.{4})/s;
    if ( defined $line && $line =~ /\w/ ) {  ##FILTER
        $line =~ s/\x00+//g;
        $host =~ s/\x00+//g;
        $user =~ s/\x00+//g;
        printf(
            "%s %-8s %-12s %10s %-45s \n",
            scalar( gmtime( unpack( "I4", $t3 ) ) ),
            $type[ unpack( "I4", $type ) ],
            $user,   $line,   $host
        );
    }
}
printf "\n" 

(.{4})该脚本可能无法在 64 位机器上运行。应针对 64 位环境修复“384”和较长的行。

ifPS:若要查看全部记录,请禁用标有“ ”的表达式##FILTER

答案2

您应该查看审计日志。

尝试使用ausearch,它提供了utmp更多功能。

相关内容