コマンドの履歴をとる
サーバーの管理を行う上で、コマンドの実行履歴を残しておくと
後で同じ操作をしたり,トラブルが起こった際に有効そうです*1。
そこで、rootとadmin(サーバーの管理用アカウント)の操作の全体(ログインからログアウトまで)
を script コマンドを使って記録するようにしてみました。
まず、/usr/local/bin に log_session を作る。ログファイル名の後ろに時間を付けている。
$ sudo cat /usr/local/bin/log_session
#!/bin/shif 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:セキュリティのためにはならない。い。ログファイルは削除できるなど、抜け道がある