Linuxで全コマンドの実行履歴を記録する方法いろいろ

以前に、いろいろとLinuxでコマンドの実行履歴をログに記録する方法について書いてたので、まとめてみることにした。

1.シェルのhistoryを利用する

まぁ、基本といえば基本。
シェルのhistory機能を使って記録しておくというもの。

ただ、デフォルトだとファイルへの書き出しがセッションクローズ後で、タイムスタンプもついてないので、そのままでは使いにくい。
また、コマンドの実行ユーザが権限を持っているので、ファイルを直接編集できるのもよくないかも。

2.bashの機能を用いる

bash 4.1以降だと、実行したコマンドをsyslogで記録させることができるようになっている。
ただ、CentOSやUbuntuだとそのままでは利用することはできず、コンパイルしなおす必要がある。

yumやapt-getでアップデートができなくなるので、何かしらの脆弱性が見つかるとコンパイルしなおす必要が出てくるのでちょっと注意。

3.Snoopy Loggerを利用する

Snoopy Loggerというパッケージを使うことで、実行したコマンドをログに記録することができるようになる。

インストール方法など、詳細についてはリンク先に記述してあるので、そちらを参照してもらいたい。
yumで簡単にインストールできるので、個人的にはコマンドの実行結果を記録するなら一番手軽、かつ手堅い方法ではないかと思う。

4.scriptコマンドを利用する

Linuxのターミナル上での操作内容を記録するコマンドでscriptコマンドというのがあるが、それを使う方法もある。
ただ、自動記録や操作が行われた時間についても取得するにはひと手間必要だし、操作時の全ターミナルの表示がそのまま記録されているので、実行コマンドだけを見るのも一苦労だろう。

実行したコマンドの情報だけを記録するには、あまりいい方法ではないと思う。

5.auditを利用する

Linux標準の機能であるauditを用いる方法もある。
以下のコマンドを実行して、コマンド実行時にその情報をログに残すよう監査設定をすることでコマンドの実行結果を残すことができるようになっている。

auditctl -a exit,always -S execve

Snoopy Loggerに比べると少し読みにくいけど、ちゃんと読むことができる。

とりあえずこんなところだろうか。
その他、acctやlastcommといった古い処理方法についてもあるが、これらについてはさすがにあまり使いやすいものではないので割愛する。

個人的には、パッケージの導入が許される環境ならばSnoopy Loggerを、デフォルトの機能で頑張らなければならない場合であればauditを使うのがおすすめ。