サーバー上の全てのコマンド実行のログを取る(psacct編)

古都の老兵
2024-03-22
2024-03-22

はじめに

 自身が実行したコマンドのログなら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 に変わるツールとしてありますので、機会があればそちらも紹介してみたいと思います。