Linux環境で、共有ユーザーを使っている場合に過去のコマンドの実行履歴を見てみようとしても誰が発行したものかわからなかったりして、何かサーバーに問題があったりした際にどのような作業をしたのかがわからずに困ったりすることがあります。
まぁ、共有でユーザー使うなよって話はありますが、そういった場合でも接続元のIPアドレスごとにhistoryコマンドの実行ログファイルを分けて保存することでユーザーごとのコマンド実行ログを残せたりします。
接続元のIPアドレスごとに.bash_historyを保存する
historyコマンドは、bash環境では通常は.bash_historyに保存されていきますが、これは環境変数で設定を変えることが出来ます。
以下のように、接続元のIPアドレスをベースにhisotryファイルを作るように.bash_profileに記述しておきます。
export RIPADDR=`who am i | cut -d '(' -f 2 | sed -e 's/)//g'` export HISTFILE=~/.bash_history_${RIPADDR} if [ ! -f $HISTFILE ]; then touch $HISTFILE chmod 600 $HISTFILE fi
環境変数はRIPADDRは接続もとのIPアドレスを、HISTFILEでhistoryコマンドの実行履歴の保存ファイルを定義します。
あとは、接続時にその設定ファイルが存在しなければ作成するというような具合です。
SSHで接続した場合は、SSH_CONNECTIONという環境変数に接続元のIPアドレスがセットされますが、suしたりすると環境変数が消えてしまうので、who am iから取得しています。(もっと簡単に取得する方法ないんですかね)
ただ、この方法は接続先のサーバーにだけは有効ですが、踏み台にして接続したりしたら当然その先のサーバーでは接続元が皆同一になるので意味がなくなったりします・・・。
そういった場合は、制御端末ごとに保存するようにしておいてもよいかもしれません。
export RIPADDR=`who am i | cut -d '(' -f 2 | sed -e 's/)//g'` export TTY_NUM=`tty | cut -d '/' -f4` export HISTFILE=~/.bash_history_${RIPADDR}_pts${TTY_NUM}
ちなみに、誰がサーバーへの接続元IPや制御端末を誰が使ったかの情報は、lastコマンドで取得できるので、何かあった際はつき合わせて確認するということもできます。
$ last | less work pts/1 192.168.0.1 Sun Mar 4 15:25 still logged in work pts/2 192.168.0.2 Sun Jan 22 22:55 - 00:04 (01:08) work pts/1 192.168.0.1 Sun Jan 22 22:55 - 23:41 (00:46)
.bash_historyファイルは編集や削除が出来てしまうので、ログとしての信憑性は薄いのですが、日々の運用の中で参考情報としては使えるかもしれません。
[PR]スマホやTV、PCで、いつでも映画や海外ドラマを見れる!今すぐ無料視聴!
[PR]固定IPが【業界最安値クラス】+【5分で発行】+【2ヶ月無料体験】
関連記事
ものすごい数のアタックを受けているようなのでその際のユーザー名を晒す
不要なファイルやディレクトリを削除できる「tmpwatch」コマンド
inotifyを使ってファイルやディレクトリに起きたイベントを簡単に監視する