このpsacctパッケージを利用することで、プロセスアカウンティングを実現することができます。
プロセスアカウンティングというカッコイイ名前が付いていますが、簡単に言えば、各アカウントのコマンド実行履歴をログとして残すということです。。。
1.インストール
CentOSでは、デフォルトでインストールされています。ただし自動起動はしないようになっています。
もしインストールされていなければ、yumコマンドでインストールしてください。
標準リポジトリでインストールが可能です。
この場合、ログは基本的にはrootユーザでしか参照できず、「/var/account/pacct」(バイナリ)として統合的にロギングされますので、アカウント毎にファイルが作られるとうこともありません。
ただし、コマンドのオプションまでは記録することができないので、historyコマンドと併せて利用することで、効果的な操作履歴の管理ができます。
2.動作確認
記録した内容は、専用のlastcommコマンドで見ることができます。
適当にlsや、catコマンドを実行してみます。
実際に記録されているか確認します。
こんな感じで記録されていきます。
たしかにcatや、lsなどが記録されています。
※表示が長いので、headコマンドで最初の出力のみ表示させています。
10分毎に起動させているcrontなんかも記録されます。
表示については、historyコマンドの場合は、表示の一番下に履歴が追加されますが、lastcommコマンドの場合は、逆に一番上に新しい履歴が追加されます。
また、記録されるコマンドはLinuxのシステムコマンドが対象なので、「pwd」や「echo」といったシェルの「ビルトインコマンド」は記録されません。
対象のコマンドがビルトインコマンドかどうかは「type」コマンドで確認できます。
3.オプション
userオプション
ユーザ毎に履歴を見たければ、userオプションを付けます。
commandオプション
コマンド毎に履歴を見たければ、commandオプションを付けます。
組み合わせ
これらを組み合わせて「lastcomm --user hoge --command ls」というようにしても
最初の「--user hoge」に一致する結果が表示されます。
strict-matchオプション
両方の条件に一致する結果だけを表示させたい場合は、「--strict-match」オプションを付けます。
fオプション
過去のログファイルを対象にしたければ、-f オプションを付けます。
履歴のログファイルは、デフォルトで「/var/account/pacct」です。
このログファイルはテキストファイルではないので、less やcatコマンドでは直接みることはできません。
※ログファイルの指定は、起動スクリプト/etc/init.d/psacctファイルの中で指定されているので、これを変更すれば変えられます。
26行目:ACCTFILE=/var/account/pacct
4. ログローテート
また、このログファイルは以下の設定でローテーションされますので、保存する世代数などは希望に応じて変更して下さい。
以下のように、前回紹介したhistoryコマンドと組み合わせて運用することで、履歴を詳細に追いかけることができるようになります。
・操作履歴を確認したい
↓
・psacctコマンドでユーザと該当時間を確認
↓
・判明したユーザのhistoryから詳細を確認
5.注意
OpenVZ上の仮想マシンでは、OpenVZカーネルのバグにより起動することができません。
(起動スクリプトの中で呼ばれるacctonコマンドの実行ができません。)
少なくとも「2.6.32-ovz-el-alt16」でのカーネルでは起動しないようです。
現状はフィックスされているようですが、詳細は未確認です。
もし、利用中のサーバがOpenVZやVirtuozzoベースの仮想マシンであれば、起動できない可能性があるので、事前に確認しておくとよいと思います。