はじめに
自身が実行したコマンドのログならhistoryコマンドで見る事ができますが、シェルを介在せずに実行されたコマンドや、自信が実行したもの以外のコマンドが実行されたを確認したい場合に昔からpsacctサービスがあります。
psacct サービスの実行
RedHat el7 以降等のsystemdを使っている場合は、
# systemctl enable psacct.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/psacct.service → /usr/lib/systemd/system/psacct.service.
設定はこれだけ。
ログは /var/account/ 以下に作成されます。
注)ディストリビューションや設定によって場所が異なる場合があります。
実行されたコマンドを見てみる
見るには lastcomm コマンドを使います。
# lastcomm
proxymap S postfix __ 0.00 secs Mon Mar 18 15:53
lastcomm root pts/0 0.04 secs Mon Mar 18 15:55
ls root pts/0 0.00 secs Mon Mar 18 15:55
systemd-cgroups root __ 0.00 secs Mon Mar 18 15:55
pmlogctl S root __ 0.02 secs Mon Mar 18 15:55
rm root __ 0.00 secs Mon Mar 18 15:55
rm root __ 0.00 secs Mon Mar 18 15:55
pmlogctl F root __ 0.00 secs Mon Mar 18 15:55
sed root __ 0.00 secs Mon Mar 18 15:55
wc root __ 0.00 secs Mon Mar 18 15:55
mv root __ 0.00 secs Mon Mar 18 15:55
オプションを何も指定しなければ全てのコマンド実行ログが表示されます。3項目目が実行したユーザで、4項目目がターミナルになります。-- になっているのはdaemon等の端末から実行されていないコマンドになります。
ではどの様なオプションがあるかヘルプを表示させてみましょう。
# lastcomm -h
MUsage: lastcomm [-hpV] [-f file] [command] ... [user] ... [terminal] ...
[--forwards] [--file <file>] [--strict-match] [--print-controls]
[--user <name>] [--tty <name>] [--command <name>] [--debug]
[--show-paging] [--pid] [--ahz <freq>] [--version] [--help]
The system's default process accounting file is /var/account/pacct.
ユーザやターミナル等も指定できるようです。試しに postfix が何を実行しているのか見てみましょう。
# lastcomm postfix
proxymap S postfix __ 0.00 secs Mon Mar 18 16:00
smtpd S postfix __ 0.17 secs Mon Mar 18 15:57
proxymap S postfix __ 0.00 secs Mon Mar 18 15:57
smtpd S postfix __ 0.13 secs Mon Mar 18 15:53
proxymap S postfix __ 0.00 secs Mon Mar 18 15:53
smtpd S postfix __ 0.14 secs Mon Mar 18 15:50
proxymap S postfix __ 0.00 secs Mon Mar 18 15:50
まあ本番のサーバーではありませんので残念ながら特に変わったログはありません。
最後に
psacctは古くからあるツールで簡単にコマンドの実行ログを取得する事がメリットだと思いますが、実行されたコマンドのオプション等が調べなかったりと不満な点もあります。
現在では audit が psacct に変わるツールとしてありますので、機会があればそちらも紹介してみたいと思います。