Назад | Перейти на главную страницу

Расшифровать все записи из wtmp

Журнал Linux /var/log/wtmp согласно странице руководства http://linux.die.net/man/5/wtmp хранит события «utmp» для многих системных событий, таких как вход в систему (LOGIN_PROCESS ut_type), изменение уровня выполнения (RUN_LVL ut_type) и другие.

Там есть last Утилита, которая анализирует wtmp и выводит информацию о том, кто вошел в систему и когда она была перезагружена.

Есть ли инструмент для отображения других записей из wtmp журнал?

Каков процесс записи информации в wtmp журнал?

Существует несколько простых парсеров perl для файлов wtmp, например wtmp.pl от "Парча синий"

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" 

Скрипт может не работать на 64-битных машинах. «384» и длинная линия с (.{4}) должно быть исправлено для 64-битной среды.

PS: чтобы увидеть действительно все записи, отключите выражение в if отмечен "##FILTER".

Вместо этого вам следует посмотреть журнал аудита.

Попробуйте использовать ausearch, он предлагает то, что utmp делает и многое другое.