Je souhaite 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-il un processus plus adulte à domicile de locate | cat | grep
? (Je frémit juste de taper ça).
Utilisez getent
pour énumérer les annuaires de la maison.
getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern"
Si vos annuaires de maison sont dans un endroit bien connu, cela pourrait être aussi simple que
grep -e "$pattern" /home/*/.bash_history
Bien sûr, si un utilisateur utilise une coque différente ou une valeur différente de HISTFILE
, cela ne vous dira pas beaucoup. Cela ne vous indiquera pas non plus sur les commandes qui n'étaient pas exécutées via une coquille, ou sur des alias et des fonctions et des commandes externes désormais supprimées dans certains domaines de l'utilisateur de l'utilisateur $PATH
. Si ce que vous voulez savoir, ce sont les commandes des utilisateurs exécutés, vous avez besoin de la comptabilité de processus ou de certains systèmes d'audit de Fanier; Voir Surveillance de l'activité sur mon ordinateur. , Comment vérifier combien de temps un processus a couru après avoir terminé? .
find /home -name .bash_history | xargs grep <string>
Alternativement:
grep string $(find /home -name .bash_history)
Notez que cela couvre les répertoires de maison dans les emplacements par défaut. Il serait préférable d'analyser /etc/passwd
ou invoquer getent
et analyser la sortie de cela.
for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
Vous pourriez faire
find /home | grep bash_history | xargs grep "whatever"
Mais je ne pense pas vraiment que ce soit beaucoup mieux que ce que vous pensais.