Decodifica todos os registros do wtmp

2

O log do Linux /var/log/wtmp de acordo com a página man link armazena eventos "utmp" para muitos eventos do sistema , como fazer login nele (LOGIN_PROCESS ut_type ), alterando o nível de execução (RUN_LVL ut_type ) e outros.

Existe o utilitário last , que analisa o wtmp e imprime quem estava conectado ao sistema e quando foi reinicializado.

Existe alguma ferramenta para exibir outros registros de wtmp log?

Qual é o processo que grava informações em wtmp log?

    
por osgx 26.03.2014 / 19:32

2 respostas

1

Existem vários analisadores de perl simples para arquivos wtmp, como wtmp.pl por "Brocade Blue"

link

Origem completa de wtmp.pl com erros de digitação menores:

#!/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" 

O script pode não funcionar em máquinas de 64 bits. A linha "384" e longa com (.{4}) deve ser corrigida para o ambiente de 64 bits.

PS: para ver realmente todos os registros, desative a expressão no if marcado com " ##FILTER ".

    
por 27.03.2014 / 16:15
1

Você deve examinar o log de auditoria.

Tente usar ausearch , oferece o que o utmp faz e muito mais.

    
por 26.03.2014 / 20:36