読者です 読者をやめる 読者になる 読者になる

treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

(1/2)sambaサーバの監視ログを切り出す

samba Linux 運用管理

今日はsambaサーバからsyslog経由で収集したログをどうやって保存していくか、という点についてご報告します。
ログの収集は前回までで出来ていましたが、そのログをどのようにどれくらい保存するか、という点はちょっと棚上げにしていました。

収集しているログ

以前にsambaサーバでファイル監視を実行していましたが、そのログはsyslog経由で収集したログ、よって/var/log/配下にファイルが保存され、そのファイルに収集したログデータが書き込まれることになります。

(1/2)Debian Jessieのsambaでファイル監視 - treedown’s Report

(2/2)Debian Jessieのsambaでファイル監視 - treedown’s Report

前の記事の続きとして、前の記事で収集したログを別のフォルダに移動してしまいます。
ログは/var/log/samba/audit.logです。

ログファイルを移動する

どうせ移動するなら、そのログを閲覧したいユーザが見れるように共有フォルダを作って共有フォルダに移動しよう、と思いました。その共有フォルダのパスさえ連絡しておけば、見たい時期のログはユーザが勝手に閲覧してくれますから、いちいち問合せを受けてログファイルを整形したりファイルを送ったりしなくてもいいことになります。
まずはログを作業ディレクトリ/tmpあたりにコピーしログファイルを作り直します。
----------------------------------------------
cp /var/log/samba/audit.log /tmp/audit.log
mv -b /var/log/samba/audit.log /var/log/samba/audit.log.1
touch /var/log/samba/audit.log
/etc/init.d/rsyslog restart
----------------------------------------------
次のmv -bでいきなり削除するのは忍びない、ということでログを1世代だけ残しておきつつ、touchコマンドで新たにファイルaudit.logを生成してからrsyslogプロセスをリスタートしています。※rsyslogのリスタートは必要なiかもしれませんが、これをやらないとtouchコマンドで生成したaudit.logにログが追記されていないことがあったので一応念のためプロセスリスタートを実行しています。
そんでもって、
----------------------------------------------
chmod 774 /tmp/audit.log
cp -p /tmp/audit.log /home/samba/share/audit-log/audit`date "+%Y%m%d_%H%M%S"`.log
rm /tmp/audit.log
----------------------------------------------
共有フォルダのユーザに公開するためにファイルのアクセス権限を所有者と所属グループユーザだけはフルコントロールになるように設定しておきます。この辺りは追加で「chown %所有者ユーザ名% /tmp/audit.log」という具合にchownやchgrpで所有者や所有グループも変更しておくほうがいいかもしれません。デフォルトだとrootしか触れませんから。
で、公開フォルダにコピーします。smb.confで共有しているフォルダのパス「/home/samba/share/audit-log」にファイルをコピーしています。
最後に作業ファイルである/tmp/audit.logは削除してしまいます。
もし、ログファイルの区切り文字を変更したりファイル形式をUTF-8以外のフォーマットにしたい場合にはこの処理の途中で変換処理などを加えるとうまくいきます。

あとはこの辺をシェルにしてしまって「/opt/smblogcopy.sh」という具合にシェル化したものをcronで設定してしまいます。例えば毎朝6:00に実行するのなら、
0 6 * * * /opt/smblogcopy.sh
という行をcrontabsで登録します。

これをやっておくと、/var/log/samba/audit.logのログ状態が以下のようになります。
----------------------------------------------
# ls -la /var/log/samba/ | grep audit
-rw-r--r-- 1 root root 0 1月 20 6:00 audit.log
-rw-r--r-- 1 root root 738353 1月 20 5:39 audit.log.1
-rw-r--r-- 1 root root 277654 1月 19 5:50 audit.log.1~
----------------------------------------------
要するに、当日の(収集して書込み中の)ログはaudit.logというファイルに書き込まれますし、前日の一世代前のログはaudit.log.1というファイル名で保存されます。さらにmv -bで念のためmv時にファイルをもう一つ保存しておいたファイルがaudit.log.1~として保存されています。