Quiero ver todos los comandos bash que se han ejecutado en un servidor Linux en varias cuentas de usuario. La distribución específica que estoy usando es CentOS 5.7. ¿Hay alguna manera de buscar globalmente archivos .bash_history en un servidor o sería un proceso más interno locate | cat | grep
? (Me estremezco simplemente escribiendo eso).
fuente
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"
{}
este tipo es muy peligroso. El nombre del archivo se interpola directamente en el script. Si tiene un nombre de archivo (aquí: un nombre de usuario) que contiene, digamos,$(rm -rf /)
o;rm -rf /;
, el comando se ejecutará. Siempre pase los nombres de los archivos como argumentos a los scripts de shell, nunca use el{}
mecanismo find o xargs .Alternativamente:
Tenga en cuenta que esto cubre los directorios principales en ubicaciones predeterminadas. Sería mejor analizar
/etc/passwd
o invocargetent
, y analizar el resultado de eso.fuente
Podrías hacerlo
Pero realmente no creo que sea mucho mejor de lo que estabas pensando.
fuente