scriptコマンドを使うと全てのCUI出力をファイルに保存できる。
いろんなサイトに紹介されている方法によると、/etc/profileの最後にscriptログを採取するためのシェルスクリプトを追加するのが楽みたい。シェルが実行される前に必ず/etc/profileが実行されるので、全ユーザの操作ログが問答無用で取れる。
CUIの出力しかファイルに保存されないので、パスワードなどの入力は保存対象からは除外され、安心。
/etc/profileの末尾に以下を追加。
##################
# scriptログ採取 #
##################
if [ -n "$SSH_CLIENT" ]; then
# ssh経由でログインしている場合
TOPPROCESS_JUDGE_TOKEN='sshd:'
else
# コンソールからログインしている場合
TOPPROCESS_JUDGE_TOKEN='login'
fi
# scriptの多重起動を避けるための判定
if [ "$(ps -eo 'pid,args' | grep "$PPID" | grep "$TOPPROCESS_JUDGE_TOKEN" | awk '{print $2}')" = "$TOPPROCESS_JUDGE_TOKEN" ]; then
# scriptは未起動
SCRIPTLOGFILE="/tmp/script_$(whoami)_$(date +%Y%m%d%H%M%S).log"
touch $SCRIPTLOGFILE
chmod 600 $SCRIPTLOGFILE
script $SCRIPTLOGFILE
exit
fi
見ての通りですが、 /tmp に script_[ユーザID]_[年月日時分秒].log が作成されます。
CentOS4.5で動作を確認しました。