Como ler o histórico atual de um usuário ainda logado?

Como ler o histórico atual de um usuário ainda logado?

Atualmente tenho uma sessão SSH root em um servidor Debian Wheezy e vejo que outro usuário está logado (com uma conta sem privilégios). Como o usuário ainda está logado, o comando historynão está mostrando a coisa certa porque o histórico não foi liberado e o ~/.bash_historyarquivo não está atualizado (ainda está na memória).

Como posso despejar memória para ver o que um usuário fez durante sua sessão quando ainda estava logado?

Responder1

Aqui está um pequeno script que deve despejar o histórico. Observe que você precisa ser root para roubar espaço de memória de outros processos.

#!/bin/bash
if [ $# -eq 0 ]; then
        echo "usage: $0 <bash_pid>"
        exit 1
fi
gdb -batch \
        --eval "set sysroot /" \
        --eval "attach $1" \
        --eval "call write_history(\"/tmp/bash_history-$1.txt\")" \
        --eval 'detach' \
        --eval 'q'
exit 0

ps Ver um erro como 'aviso: não foi possível carregar símbolos de biblioteca compartilhada para ...' pode ocorrer junto com algumas outras linhas de erro. Tente encontrar o arquivo de histórico em /tmp/ antes de começar, convencido de que o script não funcionou.

Responder2

Você realmente não pode confiar no bash_history porque ele nem sempre é salvo ou pode ser sobrescrito. Além disso, nem tudo geralmente é salvo durante o uso em várias sessões (isso depende da configuração, é claro).

Se você realmente precisa desses dados rastreados, eu continuaria configurando accto que possui ferramentas úteis como:

  • acO comando imprime as estatísticas de logins/logouts de usuários (tempo de conexão) em horas.
  • lastcommcomando imprime as informações dos comandos do usuário executados anteriormente.
  • acctonO comando é usado para ligar/desligar o processo de contabilidade.
  • sacomando resume informações de comandos executados anteriormente.
  • laste lastbos comandos mostram a listagem dos últimos usuários logados.

Para instalar:

apt-get install acct

Então você deve habilitar o serviço

service pcacct start

informação relacionada