Existe uma maneira de determinar qual usuário executou um comando no bash history?

1

Trabalhamos em servidores CentOS disponíveis para mais de cem funcionários via SSH, cada um com seu próprio login. Executar um comando normal history bash mostra todos os comandos executados por todos os funcionários, no entanto, ele não especifica a qual funcionário o comando foi executado. É possível que o histórico mostre não apenas o comando bash que foi executado, mas também em qual usuário do SSH ele foi executado?

    
por SSH_Noob 02.02.2015 / 21:34

3 respostas

1

Parece que você deseja uma auditoria maior em seu sistema em geral, mas em relação ao Bash e ao histórico, é possível ativar a marcação de data e hora. Isso em conjunto com o último comando e um grep adaptado deve ajudar a determinar qual usuário específico executou o crime. er, comando.

  1. ativar o registro de data e hora do histórico.

Da página do Bash do GNU:

HISTTIMEFORMAT

Se essa variável for definida e não nula, seu valor será usado como uma string de formato para strftime para imprimir o registro de data e hora associado a cada entrada de histórico exibida pelo histórico integrado. Se esta variável for configurada, os registros de data e hora serão gravados no arquivo de histórico para que possam ser preservados nas sessões de shell. Isso usa o caractere de comentário do histórico para distinguir carimbos de data e hora de outras linhas do histórico.

Referência na formatação da cadeia de tempo

  1. Use o último comando

A última mostra os tempos de login / logout do usuário. Isso limitará sua pesquisa a alguns usuários.

  1. grep os usuários específicos correspondidos acima para o comando específico.

algo como:

grep "command" /home/{user_a,user_b}/.history

observe que o arquivo de histórico terá dados adicionais para o registro de data e hora, no entanto, ele ainda será muito legível no texto.

  1. crie uma função Bash para realizar todas as ações acima

Crie uma função, histuser (), que receberá um argumento: um nome de comando, e faça as pesquisas acima retornando o nome do usuário específico. Se você quer que isso seja feito, me mande um email. Eu sou fácil, mas não é barato.

    
por 02.02.2015 / 22:28
0

Você pode tentar isso

cat /home/user_you_are_looking_for/.bash_history
    
por 02.02.2015 / 21:44
0

De acordo com esta resposta no "Unix & Site do Linux Stack Exchange ” você pode usar o getent para percorrer o diretório pessoal de cada usuário e pesquisar para um comando / padrão nessa saída:

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -H -e "[command/pattern you are looking for]" 

Ou você pode usar grep para pesquisar todos os históricos do bash assim:

grep -e "[command/pattern you are looking for]" /home/*/.bash_history
    
por 02.02.2015 / 21:53