Ich möchte alle Bash-Befehle anzeigen, die auf einem Linux-Server über mehrere Benutzerkonten ausgeführt wurden. Die von mir verwendete Distribution ist CentOS 5.7. Gibt es eine Möglichkeit, .bash_history-Dateien auf einem Server global zu durchsuchen, oder handelt es sich um einen eigenentwickelten Prozess locate | cat | grep
? (Ich schaudere, wenn ich das schreibe).
quelle
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"
{}
dieser Zeichen sehr gefährlich. Der Dateiname wird direkt im Skript interpoliert. Wenn Sie einen Dateinamen (hier: einen Benutzernamen) haben, der beispielsweise$(rm -rf /)
oder enthält;rm -rf /;
, wird der Befehl ausgeführt. Übergeben Sie Dateinamen immer als Argumente an Shell-Skripte, verwenden Sie niemals den{}
Mechanismus von find oder xargs .Alternative:
Beachten Sie, dass dies Basisverzeichnisse in Standardverzeichnissen abdeckt. Es wäre besser, zu analysieren
/etc/passwd
oder aufzurufengetent
und die Ausgabe davon zu analysieren .quelle
Du könntest es tun
Aber ich denke nicht wirklich, dass das viel besser ist, als Sie dachten.
quelle