it-swarm-ja.com

bash履歴でどのユーザーがコマンドを実行したかを判別する方法はありますか?

私たちは、SSH経由で100人以上の従業員が利用できるCentOSサーバーで作業しており、それぞれが独自のログインを持っています。通常のhistory bashコマンドを実行すると、すべての従業員によって実行されたすべてのコマンドが表示されますが、コマンドが実行された従業員は指定されません。実行されたbashコマンドだけでなく、実行されたSSHユーザーも履歴に表示することはできますか?

2
SSH_Noob

一般に、システムの監査を強化したいようですが、Bashと履歴に関しては、タイムスタンプを有効にすることができます。これを最後のコマンドおよび調整されたgrepと組み合わせると、どの特定のユーザーが犯罪を実行したかを判断するのに役立ちます。えー、コマンド。

  1. 履歴タイムスタンプを有効にします。

GNUのBashページから:

[〜#〜] histt​​imeformat [〜#〜]

この変数が設定されていてnullでない場合、その値はstrftimeのフォーマット文字列として使用され、組み込みの履歴によって表示される各履歴エントリに関連付けられたタイムスタンプを出力します。この変数が設定されている場合、タイムスタンプは履歴ファイルに書き込まれるため、シェルセッション間で保持されます。これは、履歴コメント文字を使用して、タイムスタンプを他の履歴行と区別します。

時間文字列のフォーマットに関するリファレンス

  1. 最後のコマンドを使用する

Lastには、ユーザーのログイン/ログアウト時間が表示されます。これにより、検索が数人のユーザーに絞り込まれます。

  1. 特定のコマンドに対して上記で一致した特定のユーザーをgrepします。

何かのようなもの:

grep "command" /home/{user_a,user_b}/.history

履歴ファイルにはタイムスタンプの追加データが含まれますが、テキストで非常に読みやすいことに注意してください。

  1. 上記のすべてを実行するBash関数を作成します

コマンド名という1つの引数を取る関数histuser()を作成し、上記の検索を実行して特定のユーザーの名前を返します。あなたがこれをしたいならば、私に電子メールを送ってください。私は簡単ですが、安くはありません。

1
Daniel

あなたはこれを試すことができます

cat /home/user_you_are_looking_for/.bash_history
0
Unnikrishnan

「Unix&Linux StackExchange」サイトのこの回答 によると、 getent を使用して、各ユーザーのホームディレクトリをロールスルーし、コマンドを検索できます/その出力のパターン:

getent passwd |
cut -d : -f 6 |
sed 's:$:/.bash_history:' |
xargs -d '\n' grep -H -e "[command/pattern you are looking for]" 

または、 grep を使用して、次のようにすべてのbash履歴を検索できます。

grep -e "[command/pattern you are looking for]" /home/*/.bash_history
0
JakeGould