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 arquivos .bash_history em um servidor ou seria um processo mais caseiro locate | cat | grep
? (Estremeço apenas digitando isso).
fonte
getent passwd | cut -d : -f 6 | sed "s:$:/.bash_history:" | xargs -d'\n' -I{} sh -c "[ -f {} ] && echo {}" | xargs -d'\n' grep -Hn -e "$pattern"
{}
assim é muito perigoso. O nome do arquivo é interpolado diretamente no script. Se você tiver um nome de arquivo (aqui: um nome de usuário) contendo, digamos,$(rm -rf /)
ou;rm -rf /;
, o comando será executado. Sempre passe nomes de arquivos como argumentos para scripts de shell, nunca use o{}
mecanismo find ou xargs .Alternativamente:
Observe que isso abrange os diretórios pessoais nos locais padrão. Seria melhor analisar
/etc/passwd
ou invocargetent
e analisar a saída disso.fonte
Você poderia fazer
Mas eu realmente não acho que isso seja muito melhor do que você estava pensando.
fonte