Monitore o acesso ao seu Linux: Descubra quem, quando e de onde!

Quem acessa seu sistema Linux, quando e de qual local? As melhores práticas de segurança recomendam que você monitore quem está utilizando seu computador Linux. Vamos demonstrar como realizar esse acompanhamento.

O Arquivo wtmp

Sistemas Linux e outros similares ao Unix, como o MacOS, possuem um sistema de registro bastante eficiente. Internamente, o sistema armazena logs de praticamente tudo que se possa imaginar. O arquivo de log de nosso interesse aqui é o wtmp. A letra “w” pode representar “quando” ou “quem”, não há um consenso. A parte “tmp” provavelmente significa “temporário”, mas há quem diga que se refere a “carimbo de data/hora”.

O que se sabe é que o wtmp é um registro que armazena cada evento de login e logout no sistema. Analisar os dados desse log é um procedimento fundamental para adotar uma postura de segurança proativa em tarefas de administração do sistema. Embora não seja tão crítico para computadores domésticos, pode ser interessante analisar o uso geral do computador.

Diferentemente de muitos outros arquivos de log do Linux, que são textuais, o wtmp é um arquivo binário. Para acessar as informações que ele contém, é necessário utilizar uma ferramenta específica.

Essa ferramenta é o comando last.

O Comando last

O comando last realiza a leitura dos dados do log wtmp e os apresenta em uma janela de terminal.

Ao digitar last e pressionar Enter, todos os registros do arquivo de log serão exibidos.

last

Cada registro do wtmp é apresentado na janela do terminal.

Da esquerda para a direita, cada linha contém:

O nome de usuário da pessoa que fez login.
O terminal no qual o usuário se conectou. Uma entrada de terminal como “:0” indica que o login foi feito diretamente no computador Linux.
O endereço IP da máquina de onde o usuário se conectou.
A data e hora do login.
A duração da sessão.

A última linha mostra a data e hora da primeira sessão registrada no log.

Um registro de login do usuário fictício ‘reboot’ é adicionado ao log a cada reinicialização do computador. O campo do terminal exibe a versão do kernel. A duração da sessão para essas entradas representa o tempo de atividade do computador.

Exibindo um Número Específico de Linhas

Utilizar o comando last sem nenhum argumento exibe todo o conteúdo do log, que passa rapidamente pela tela do terminal. A parte que fica visível é a mais antiga do log. Provavelmente, não é o que você deseja ver.

Você pode especificar para o comando last mostrar um número específico de linhas. Para isso, basta adicionar o número de linhas desejadas na linha de comando. Observe o uso do hífen. Para ver cinco linhas, você deve digitar -5 e não 5:

last -5

Isso mostrará as cinco linhas mais recentes do log.

Exibindo Nomes de Rede para Usuários Remotos

A opção -d (Sistema de Nome de Domínio) instrui o comando last a tentar resolver os endereços IP de usuários remotos para nomes de máquina ou nomes de rede.

last -d

Nem sempre é possível para o last converter o endereço IP para um nome de rede, mas ele fará a conversão quando possível.

Ocultando Endereços IP e Nomes de Rede

Se você não estiver interessado em exibir o endereço IP ou o nome da rede, utilize a opção -R (sem nome de host) para suprimir essa informação.

Como isso resulta em uma saída mais organizada, sem informações desnecessárias, essa opção será utilizada nos exemplos a seguir. Caso você estivesse utilizando o last para identificar atividades suspeitas, o campo do endereço IP não seria omitido.

Selecionando Registros por Data

A opção -s (desde) possibilita restringir a saída para exibir apenas eventos de login que ocorreram a partir de uma data específica.

Se você desejar visualizar somente os eventos de login que ocorreram a partir do dia 26 de maio de 2019, utilize o seguinte comando:

last -R -s 2019-05-26

A saída mostrará todos os registros de eventos de login que ocorreram a partir das 00:00 do dia especificado, até os registros mais recentes do log.

Pesquisando Até Uma Data de Término

A opção -t (até) permite que você especifique uma data de término. Isso possibilita selecionar um conjunto de registros de login que ocorreram entre duas datas específicas.

O comando abaixo solicita ao last que exiba os registros de login que ocorreram das 00:00 do dia 26 até as 00:00 do dia 27. Dessa forma, a lista é restrita a sessões de login que ocorreram apenas no dia 26.

Formatos de Data e Hora

Você pode utilizar diferentes formatos de data e hora com as opções -s e -t.

Os diferentes formatos que podem ser usados com as opções do last que utilizam datas e horas são (supostamente):

AAAAMMDDhhmmss
AAAA-MM-DD hh:mm:ss
AAAA-MM-DD hh:mm – os segundos são definidos como 00
AAAA-MM-DD – a hora é definida como 00:00:00
hh:mm:ss – a data é definida como hoje
hh:mm – a data é definida como hoje, segundos como 00
agora
ontem – a hora é definida como 00:00:00
hoje – a hora é definida como 00:00:00
amanhã – a hora é definida como 00:00:00
+5min
-5dias

Por que ‘supostamente’ ?

O segundo e terceiro formatos da lista não funcionaram durante os testes para este artigo. Esses comandos foram testados nas distribuições Ubuntu, Fedora e Manjaro. Essas distribuições são derivadas do Debian, RedHat e Arch, respectivamente. Isso abrange todas as principais famílias de distribuições Linux.

last -R -s 2019-05-26 11:00 -t 2019-05-27 13:00

Como você pode observar, o comando não retornou nenhum registro.

Ao utilizar o primeiro formato de data e hora da lista com a mesma data e hora do comando anterior, os registros são retornados:

last -R -s 20190526110000 -t 20190527130000

Pesquisando por Unidades Relativas

Você pode especificar períodos de tempo que são medidos em minutos ou dias, em relação à data e hora atual. No exemplo abaixo, estamos solicitando os registros de dois dias atrás até um dia atrás.

last -R -s -2days -t -1days

Ontem, Hoje e Agora

Você pode usar yesterday (ontem) e tomorrow (amanhã) como abreviações para a data de ontem e a data de hoje.

last -R -s yesterday -t today

Note que isso não inclui nenhum registro de hoje. Esse é o comportamento esperado. O comando solicita os registros da data de início até a data de término. Não inclui registros da data de término.

A opção now é uma abreviação para “hoje na hora atual”. Para ver os eventos de login que ocorreram das 00:00 até o momento em que você executa o comando, use este comando:

last -R -s today -t now

Isso exibirá todos os eventos de login até o momento, incluindo aqueles que ainda estão conectados.

A Opção -p

A opção -p (presente) permite que você descubra quem estava conectado em um determinado momento.

Não importa quando os usuários se conectaram ou desconectaram, mas se estavam conectados ao computador no momento que você especificar, eles serão listados.

Ao especificar um horário sem uma data, o last irá assumir que você quer dizer “hoje”.

last -R -p 09:30

Usuários que ainda estão logados (obviamente) não possuem um tempo de logout; eles são descritos como ainda conectados. Se o computador não foi reinicializado desde o momento que você especificou, ele será listado como ainda em execução.

Ao usar o atalho now com a opção -p (presente), você poderá descobrir quem está conectado no momento em que você executa o comando.

last -R -p now

Esta é uma forma um tanto prolixa de obter o mesmo resultado que o comando who oferece.

O Comando lastb

O comando lastb merece ser mencionado. Ele lê os dados de um log chamado btmp. Há um pouco mais de consenso sobre o significado desse nome de log. A letra ‘b’ significa ‘bad’ (ruim), mas a parte ‘tmp’ ainda é um mistério.

O comando lastb lista as tentativas de login mal-sucedidas. Aceita as mesmas opções que o comando last. Como são tentativas de login que não foram bem-sucedidas, todas as entradas terão uma duração de 00:00.

Você deve utilizar sudo com lastb.

sudo lastb -R

Considerações Finais

Saber quem acessou seu computador Linux, quando e de qual local, é uma informação valiosa. Combinar esses dados com as informações das tentativas de login mal-sucedidas, fornece os primeiros passos para a investigação de comportamentos suspeitos.