ログの管理

簡単な管理スクリプト

サーバーを維持・管理していく上で欠かせないのがログの管理です。
特に外に向けて開いているwwwサーバーやメールサーバーを抱えていると管理者としてはログチェックは必須です。
会社や商売でサーバーを立ち上げてるのならば、利益に見合った、もしくは効果に見合った人員と時間を掛けることが出来ますが、個人の趣味で運営してる方は大変ですよね。
以前は週に1〜2回ほどの頻度でログチェックしてたのを、もう少し精度を上げたいということでいろいろ検討したのですが、時間的な制約も考えてチェックとバックアップを半自動化する事にしました。
ログ管理ソフトを使えば良い様なものですが、一応管理者っぽくスクリプトで。

ログのバックアップについてはVineLinuxは元々"logrotate"というプログラムがログをローテーションしており、何段階かのバックアップを経た後自動的に古いログを削除するようになってます。
ただしバックアップファイルそのものは元々のログと同じディレクトリにありますので、ハード的な損傷に対応できるバックアップではありません。
そこでまず、ログのバックアップをMOに週1回ペースで取ることにしました。

#!/bin/sh
/bin/tar zcf /mnt/mo/log.tar.gz /var/log

/var/logのディレクトリを圧縮してMOに書き込ませるだけのスクリプトです。
このスクリプトを"bklog.sh"として保存しsuで以下のようにしました。

chmod 555 bklog.sh
mv bklog.sh /etc/cron.weekly/

chmodでスクリプトに実行属性を持たせ、"cron.weekly"というディレクトリに移動させてます。
"cron.weekly"に実行できるスクリプトを置いておくと、週1回OSが勝手に実行してくれます。

次はログチェックですが、ログを開く手間を無くすだけでも有効かと思ったので、日毎のログの差分を抽出させることにしました。
自分の作業用のPCへそのログ差分をメール送信させることにします。
とりあえず差分を抽出させるために現状のログを".old"をつけてコピーしておきます。

#!/bin/sh
/usr/bin/diff -u /var/log/maillog.old /var/log/maillog > /home/****/maillog.txt
/bin/mail -s 'one-day maillog' **** < /home/****/maillog.txt
/bin/cp /var/log/maillog /var/log/maillog.old
/bin/rm /home/****/maillog.txt

****はユーザー名の部分です。
2行目で".old"のついた古いログファイルと現在のログファイルの差分を抽出し"maillog.txt"というファイルにしてます。
3行目で"one-day maillog"という件名で"maillog.txt"を本文としたメールを****に対して発信します。
4行目は明日の処理のために現在のログファイルを".old"としてコピーしてます。
5行目で差分ファイルの"maillog.txt"を削除してます。
このスクリプトを"maillog.sh"として保存し、先ほどと同じようにsuで以下です。

chmod 555 maillog.sh
mv maillog.sh /etc/cron.daily/

今度は"cron.daily"に置きましたのでPCが毎日処理してくれます。
差分のみメールで送られてくることでチェックが少し気楽になりました。

ログファイルは山のようにありますが、常にチェックしてるのは"secure"と"maillog"とホームページのアクセスログくらいです。
思ってる以上にHPへのアクセスがあり更新怠慢を恥じるきっかけとなるログチェックですが、クラッキングのため(?)と思われる予備アクセスもこれまた想像以上に多いので困ったものです。