web-dev-qa-db-fra.com

Puis-je rechercher l'historique des bash sur tous les utilisateurs sur un serveur?

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).

20
Wesley

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
4
Devdas

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.

3
brodie31k