treedown’s Report

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

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

sambaサーバのauditログの取得ができてないので対処

以前から設定していたsambaサーバのaudit.logが記録されないことがあったので、実施した調査と対処をご報告です。

環境

前提となるこの環境は以前からちょくちょく設定してログ取得していたsambaサーバ環境のaudit.logです。

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

(1/2)sambaサーバの監視ログを切り出す - treedown’s Report

sambaサーバの操作ログ、二系統取得したい - treedown’s Report

sambaサーバのファイル監視オプションを再設定する - treedown’s Report

OSはDebian bookwormのsambaサーバでバージョン4.17です。

</etc/samba/smb.conf>には
   full_audit:facility = local1
   full_audit:facility = local2
という記述を各共有フォルダに記載しています。

</etc/rsyslog.conf>で
   # local facility
   local1.*                        /var/log/samba/audit.log
   local2.*                        /var/log/samba/audit-2.log
とログファイルを指定しています。これはフォルダによってログファイルを分割する意図で二つの指定が存在しています。

課題となる動作

対象のaudit.logとaudit-2.logのファイルの二つはaudit.logだけがログの記録が出来ていません。audit-2.logは正常にログの取得が出来ています。

対象のaudit.logは数日前までログの取得は出来ていたことと、この数日間で設定変更作業はありませんでした。このためパーミッションや設定の不備は考えにくい状況です。

数日前までのようにaudit.logが正常に記録されていない原因を調べることになりました。

動作の確認

まずは手動でログの記録ができる状態かをコマンドで確認してみます。

sudo logger -t TEST -p local1.info "local1 to test message"

コマンドを実行した結果audit.logに記録されない、コマンドに間違いがないか確認のため、

sudo logger -t TEST -p local2.info "local2 to test message"

正常動作している</var/log/samba/audit-2.log>へテストログの記録を確認したところ、ログファイル内に

Jul 10 16:00:20 Server TEST: local2 test message

の記録が確認できました。現状はaudit.logだけにログの書き込みが出来ない状況という確認ができました。なんかパーミションっぽいのですが、そうじゃないはず。

いったんsyslogをリスタートしてみます。

sudo systemctl restart rsyslog

このコマンドでsyslogプロセスを再起動した後に「sudo logger -t TEST -p local1.info "local1 to test message"」で再度テストログの書き込みを実行したところ、

Jul 10 16:08:00 Server TEST: local1 test message

ログが記録されたことを確認できました。

自分で設置したシェルが原因

「sudo systemctl restart rsyslog」を実行すると問題が解消するのですが、翌日のある時間で問題が再発します。

ただ、リスタートすると解消するので、時間が規則性があると思いcronを確認したところ、そういえば自分で作ったシェルが当該時間に動作していることを思い出しました。

(1/2)sambaサーバの監視ログを切り出す - treedown’s Report

にて用意したaudit.logを切り出して日次でログファイルを保存するシェルです。
(以下抜粋)
----------------------------------------------
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
----------------------------------------------

このシェルの部分で「/etc/init.d/rsyslog restart」にてsyslogプロセスリスタートを実行しているのですが、このプロセス再起動後にaudit.logにログが記録できないようになっている、という動きをしていることが分かりました。

当該部分を以下のように書き換えてみます。

----------------------------------------------
#/etc/init.d/rsyslog restart
systemctl restart rsyslog
----------------------------------------------

プロセス再起動をsystemctlコマンドで書き換えたところ、audit.logがシェル実行後にも適切に記述されるようになりました。

systemctlコマンドを使う

そういえば昔<Debianが「Reached target Shutdown」で電源OFFされない - treedown’s Report>にて、これからはsystemctlコマンドに標準が変わっている、ということをshutdownコマンドの実行で実感してました。

自作のシェルでsystemd標準に乗り遅れたシェルというのはこういう動作をしてしまうということもあると言うことなのかもしれません。これから気をつけていこうと思います。