Je veux voir toutes les commandes bash qui ont été exécutées sur un serveur Linux sur plusieurs comptes d'utilisateurs. La distribution spécifique que j'utilise est CentOS 5.7. Existe-t-il un moyen de rechercher globalement des fichiers .bash_history sur un serveur ou serait-ce un processus plus domestique locate | cat | grep
? (Je frissonne juste de taper ça).
la source
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"
{}
comme ça est très dangereux. Le nom du fichier est interpolé directement dans le script. Si vous avez un nom de fichier (ici: un nom d'utilisateur) contenant, disons,$(rm -rf /)
ou;rm -rf /;
, la commande sera exécutée. Toujours passer des noms de fichiers comme arguments aux scripts shell, ne jamais utiliser le{}
mécanisme de find ou xargs .Alternativement:
Notez que cela couvre les répertoires personnels dans les emplacements par défaut. Il serait préférable d'analyser
/etc/passwd
ou d'invoquergetent
, et d'analyser la sortie de cela.la source
Vous pourriez faire
Mais je ne pense pas vraiment que ce soit beaucoup mieux que ce que vous pensiez.
la source