コマンドの履歴をとる

サーバーの管理を行う上で、コマンドの実行履歴を残しておくと
後で同じ操作をしたり,トラブルが起こった際に有効そうです*1
そこで、rootとadmin(サーバーの管理用アカウント)の操作の全体(ログインからログアウトまで)
を script コマンドを使って記録するようにしてみました。


まず、/usr/local/bin に log_session を作る。ログファイル名の後ろに時間を付けている。

$ sudo cat /usr/local/bin/log_session
#!/bin/sh

if test -n "$1"
then
script $1_`date +%Y%m%d-%T`.log
else
echo usage: $0 log-name
fi

root_log を作る。ログをとる場所は /root/log/。ファイル名にユーザーIDを付けている。

$ sudo cat /root/bin/root_log
#!/bin/sh

# log root work

export SCREEN=1
/usr/local/bin/log_session ~/log/$USER
unset SCREEN

.bashrcに以下の記述を加える.

if test -z $SCREEN
then
~/bin/root_log
exit
fi

これでrootになった際に記録がとれる。SCREEN変数で無限ループを避けている。

adminの場合は root_logの代わりに以下のadmin_logを用意する。

$ cat /home/admin/bin/admin_log
#!/bin/sh

# log admin work

export SCREEN=1
/usr/local/bin/log_session ~/log/admin/work
unset SCREEN

ログファイルを見る

scriptでできたログファイルはバックスペースやエスケープ文字が含まれているので
通常のエディタでは見づらい。 less -r やmore で見ると良い。

特定の操作のログをとる

/usr/local/bin/log_session ログファイルのパス
ファイル名には自動的に末尾に 時間.log が付くので注意。
例えば, /usr/local/bin/log_session test とすると test_20071101-19:06:15.log ができる。

*1:セキュリティのためにはならない。い。ログファイルは削除できるなど、抜け道がある