Posso pesquisar o histórico bash em todos os usuários em um servidor?

17

Eu quero ver todos os comandos bash que foram executados em um servidor Linux em várias contas de usuário. A distribuição específica que estou usando é o CentOS 5.7. Existe uma maneira de pesquisar globalmente os arquivos .bash_history em um servidor ou seria um processo mais caseiro de locate | cat | grep ? (Eu estremeço apenas digitando isso).

    
por Wesley 15.02.2012 / 05:33

3 respostas

20

Use getent para enumerar os diretórios iniciais.

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern" 

Se os seus diretórios pessoais estiverem em um local bem conhecido, pode ser tão simples quanto

grep -e "$pattern" /home/*/.bash_history

É claro que, se um usuário usar um shell diferente ou um valor diferente de HISTFILE , isso não lhe dirá muito. Nem isso lhe dirá sobre comandos que não foram executados através de um shell, ou sobre aliases e funções e comandos externos removidos que estavam em algum diretório do usuário no início do usuário $PATH . Se o que você quer saber é o que os comandos executam, você precisa de contabilidade de processo ou algum sistema de auditoria mais sofisticado; veja Monitorando a atividade no meu computador. , Como verificar quanto tempo decorreu um processo depois de terminado? .

    
por 15.02.2012 / 08:03
3

Você poderia fazer

find /home | grep bash_history | xargs grep "whatever"

Mas eu realmente não acho que é muito melhor do que você estava pensando.

    
por 15.02.2012 / 06:10
3
find /home -name .bash_history | xargs grep <string>

Alternativamente:

grep string $(find /home -name .bash_history)

Observe que isso abrange diretórios pessoais em locais padrão. Seria melhor analisar /etc/passwd ou invocar getent e analisar a saída disso.

for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
    
por 15.02.2012 / 08:03