bashの実行コマンドをsyslogに記録

bash 4.x から bash command historyをsyslog に記録することができるようになりました。
ただしソースをGNUからDLし少々の設定とコンパイルが必要となります。

ソースの取得

wget http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz

syslogにコマンドを記録するため設定

ref: http://tiswww.case.edu/php/chet/bash/NEWS

l. There is a new configuration option (in config-top.h) that forces bash to
forward all history entries to syslog.

$vi config-top.h
変更前
/* Define if you want each line saved to the history list in bashhist.c:
bash_add_history() to be sent to syslog(). */
/* #define SYSLOG_HISTORY */
#if defined (SYSLOG_HISTORY)
# define SYSLOG_FACILITY LOG_USER
# define SYSLOG_LEVEL LOG_INFO
#endif

変更後
/* Define if you want each line saved to the history list in bashhist.c:
bash_add_history() to be sent to syslog(). */
/* #define SYSLOG_HISTORY */
#define SYSLOG_HISTORY
#if defined (SYSLOG_HISTORY)
# define SYSLOG_FACILITY LOG_USER
# define SYSLOG_LEVEL LOG_INFO
#endif

コンパイル

./configure
make -j2

確認
./bash
tail /var/log/messege

2012-07-24T13:59:43.208391+09:00 hostname bash: HISTORY: PID=15980 UID=0 tail /var/log/messages

しっかりとコマンド履歴が確認できます。

rsyslogなどでcollector へ送信するといつ誰が何を行ったか記録が残るので、ドキュメント作成、調査などいろいろ便利です。