web-dev-qa-db-ja.com

サーバー上のすべてのユーザーのbash履歴を検索できますか?

Linuxサーバーで複数のユーザーアカウントで実行されたすべてのbashコマンドを確認したいと思います。私が使用している特定のディストリビューションはCentOS 5.7です。サーバー上の.bash_historyファイルをグローバルに検索する方法はありますか、それともlocate | cat | grep? (私はそれをタイプアウトするだけで身震いします)。

20
Wesley

getentを使用して、ホームディレクトリを列挙します。

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -s -H -e "$pattern" 

ホームディレクトリがよく知られた場所にある場合は、次のように簡単です。

grep -e "$pattern" /home/*/.bash_history

もちろん、ユーザーが別のシェルまたはHISTFILEの別の値を使用している場合、これはあまりわかりません。また、これは、シェルを介して実行されなかったコマンド、またはエイリアスと関数、およびユーザーの$PATHの初期の一部のユーザーディレクトリにあった削除された外部コマンドについても通知しません。ユーザーが実行したコマンドを知りたい場合は、プロセスアカウンティングまたはより洗練された監査システムが必要です。 コンピューター上のアクティビティの監視を参照してください。プロセスが終了してからどれだけの時間実行されたかを確認する方法は?

find /home -name .bash_history | xargs grep <string>

または:

grep string $(find /home -name .bash_history)

これは、デフォルトの場所にあるホームディレクトリを対象としています。 /etc/passwdを解析するか、getentを呼び出して、その出力を解析することをお勧めします。

for i in $(getent passwd | cut -d: -f6 ); do grep string ${i}/.bash_history; done
4
Devdas

あなたができる

find /home | grep bash_history | xargs grep "whatever"

しかし、私はそれがあなたが考えていたものよりもずっと良いとは本当に思っていません。

3
brodie31k