トップ基幹クラウド運用保守Linuxでコマンド実行履歴を取得したい2019.09.12717Naritoshi基幹クラウド運用保守bashlinuxltrapSUSEだれがどのコマンドを実行したかを後から調べるため、Linuxのコマンド実行履歴を保存しておく手軽な方法がないか調べてみました。前提として、シェルはbashとしています。ヒストリーをファイルに保存するbashのコマンド履歴をexit時にファイルに保存する方法です。記載すれば、すべてのbashユーザに有効です。SP1で試してみました。ec2-userでコマンド実行します。2019ログアウトしヒストリファイルが保存させます。再度ログインして、ヒストリファイルを確認してみます。実行時間付きで保存されています。rootになってから操作してみます。exitヒストリファイル名にsudo前のユーザ名(ec2-user)があります。ヒストリファイルを回収すれば、実行コマンド履歴を保存しておけます。実行されたコマンドをリアルタイムで見ることができないのと、ヒストリファイルをユーザに削除される可能性があります。コマンド実行毎にシスログ転送するfunctionとトラップを変更し、コマンド実行時に内容をシスログ転送します。readonly属性にし、functionの内容を変更できないようにします。EXITコマンド実行とシスログの内容です。rootになって操作してみます。/var/log/localmessagessudo前のユーザ名(ec2-user)、実効ユーザ(root)が記録されており、だれがsudoしたか一目で分かります。DEBUGを再設定されるとコマンド取得できませんが、最低限trapを変更したことも記録されます。二番目の方法はコマンド実行毎に動くので反応が重くならないか気になりますが、リアルタイムでコマンド内容を取得出来るのが利点です。ヒストリをまとめて取得するのでよければ、最初の方法を使用した方法がシステムへの負荷が低くて良いかと思います。ファイル出力の代わりに、loggerでシスログ転送する方法もありかと思います。手軽にコマンド実行履歴を取得出来るので、お試しください。関連サービス:クラウド・SAPシステム運用保守サービス日々変わり続けるクラウドの最新技術やトレンドを取り込み、貴社に最適な基幹クラウド向け運用保守サービスを提供します。Blogのエントリにご質問が御座いましたらお気軽にお問合せください。