以前から設定していた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標準に乗り遅れたシェルというのはこういう動作をしてしまうということもあると言うことなのかもしれません。これから気をつけていこうと思います。