少々過去の話なのですが、sambaサーバのOSをDebian10 busterからDebian11 bullseyeにアップグレードしたあとに、sambaサーバで取得しているvfs_full_audit指定が意図しない動作となったため対処した内容をご報告します。
bullseyeのsambaで起こったこと
対象の環境は以前に設定したDebian環境のsambaサーバです。
(1/2)Debian Jessieのsambaでファイル監視 - treedown’s Report
(2/2)Debian Jessieのsambaでファイル監視 - treedown’s Report
この時には、<sambaサーバ監視オプション(使いそうなものだけ) - treedown’s Report>で調べたように削除だけを追跡するログ取得として、smb.confに
----------------------------------------------
[share]
comment = PCData
path = /home/samba/public/share
…以下略、↓ここから
vfs objects = full_audit
full_audit:facility = local1
full_audit:prefix = %m|%I
full_audit:failure = connect
full_audit:success = rmdir pwrite rename unlink
###share###
----------------------------------------------
と設定を記述していました。(詳細は前述のURLにある設定を実施した記事に記載してあります。)
この状態でsambaサーバとして稼働しているDebian10 busterをDebian11 bullseyeへOSのアップグレードをした結果、sambaのバージョンも
Version 4.13.13-Debian
にバージョンアップしました。この影響と思われるのですが、vfs_full_auditにて取得しているログの動作が意図しないものとなり、必要最小限の取得としていたものが大量の操作ログを収集するように動作が変わってしまいました。

それほどの規模で利用しているわけではないsambaですが、従来は数MB程度だったログデータが3GB/日、35GB/週くらいまで肥大化してしまい、ディスク領域を圧迫していました。
ログ収集で発生しているため、前述の「vfs objects」以下「full_audit:」で始まる行の指定で何か解釈できないことが発生したのだろう、というところはなんとなく推測ができました。
ログファイルを調べてみる
肥大化したログファイルを調べてみると、smb.confでログ収集を指定している動作以外のファイルアクセスに対してもログの収集が実施されているような動きが見て取れました。
例えばtest.txtファイルをtestフォルダごと削除した場合、数十行の表示では表示しきれないほどのログが表示されていました。
その中からファイル名やフォルダ名の削除を抜き出すと、
--------------------------------------------------------------
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|stat|ok|/home/samba/shgrp/share/test/test/test2.txt
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|file_id_create|ok|2081:158214437:0
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test/test/test2.txt
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|stat|ok|/home/samba/shgrp/share/test/test
(中略)
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|lstat|ok|/home/samba/shgrp/share/test/test
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test/test
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|close|ok|/home/samba/shgrp/share/test/test
--------------------------------------------------------------
結局、grepしてみたら2行だけしか表示されないです。
--------------------------------------------------------------
root@FSsvr:/var/log/samba# cat /var/log/samba/audit.log | grep unlinkat | less
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test/test/test2.txt
May 2 12:55:06 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test/test
(END)
--------------------------------------------------------------
この「unlinkat」が、以前の「unlink」を示している、ということは実際にログを確認してみて分かりました。バージョンアップでこの辺りの指定が変更になったのかなと考えて、公式のドキュメントを確認してみることにしました。
smb.confの設定を調べてみる
公式のドキュメント<https://www.samba.org/samba/docs/man/>を確認していると、「vfs_full_audit(8)」のページで、従来のオプションと相違する箇所を発見しました。
■vfs_full_audit(8) : record Samba VFS operations in the system log
https://www.samba.org/samba/docs/current/man-html/vfs_full_audit.8.html
このページに「full_audit:success = LIST」や「full_audit:failure = LIST」で指定する「LIST」に該当する"VFS操作のリスト"が掲載されているのですが、従来から存在したmkdirやrmdirの記述が削除されており、unlinkやrenameの記述がunlinkatやrenameatという具合に末尾に「~at」を付加するように変更になっていました。
※なお、公式で発見できなかったのですが、このLIST指定でsambaが解釈できないオプションが指定されていた場合、動作を決定できないため全てのログを記録するという動作をするようです。
気になったので、どのバージョンからこの変更点が適用されたかと調べてみたところ、
version 4.12.1<https://www.samba.org/samba/docs/4.12/man-html/vfs_full_audit.8.html>以前はこれまでの指定、
version 4.13.3<https://www.samba.org/samba/docs/4.13/man-html/vfs_full_audit.8.html>以降は新しい(~at付きの)指定、
となっていました。つまり今回の対象となる「Version 4.13.13-Debian」は新しい(~at付きの)指定、ということになります。早速修正が必要です。
修正箇所を確認する
公式のドキュメントから、以前設定をした
full_audit:success = rmdir pwrite rename unlink
の行を変更する必要があるようです。
使っている
rmdir pwrite rename unlink
各々の書き換えが必要になります。
- rmdir =廃止(unlinkatが代替する)
- pwrite =そのまま(同じpwrite)
- rename =renameat
- unlink =unlinkat
書き換えは「rmdir」の削除と、既存の<rename/unlink>を<renameat / unlinkat>に書き換えるする、二つの変更点が必要となります。
そこで、smb.conf内で対象の箇所を以下のように書き換えてみました。
--------------------------------------------------------------
# full_audit:success = rmdir pwrite rename unlink
full_audit:success = pwrite renameat unlinkat
--------------------------------------------------------------
以前の行はいったんコメントアウト、検証後行を削除するようにします。
追加した「full_audit:success = pwrite renameat unlinkat」行は新しい指定で、廃止のrmdirを除いています。
以前のsmb.conf内容が以下のようになる、ということです。
----------------------------------------------
[share]
comment = PCData
path = /home/samba/public/share
…以下略、↓ここから
vfs objects = full_audit
full_audit:facility = local1
full_audit:prefix = %m|%I
full_audit:failure = connect
full_audit:success = pwrite renameat unlinkat
###share###
----------------------------------------------
修正完了後、sambaサーバをリスタート(<systemctl restart smbd>を実行)して、ログを確認してみました。
修正後のログを確認する
書き換え後のログを掲載します。良好でした。
--------------------------------------------------------------
root@FSsvr:/var/log/samba# tail -f /var/log/samba/audit.log
May 2 13:05:30 FSsvr smbd_audit: PC-01|192.168.1.201|stat|ok|/home/samba/shgrp/share
May 2 13:05:30 FSsvr smbd_audit: PC-01|192.168.1.201|get_alloc_size|ok|0
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|close|ok|/home/samba/shgrp/share
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|close|ok|/home/samba/shgrp/share
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|closedir|ok|
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|chdir|ok|chdir|/
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|stat|ok|/home/samba/shgrp/share
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|file_id_create|ok|2304:2:0
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|stat|ok|/
May 2 13:16:45 FSsvr smbd_audit: PC-01|192.168.1.201|disconnect|ok|share
-------ここでsystemctl restart smbd実行-------
May 2 13:17:47 FSsvr smbd_audit: PC-01|192.168.1.201|renameat|ok|/home/samba/shgrp/share/新しいフォルダー|/home/samba/shgrp/share/test
May 2 13:17:53 FSsvr smbd_audit: PC-01|192.168.1.201|renameat|ok|/home/samba/shgrp/share/test/新しいフォルダー|/home/samba/shgrp/share/test/test
May 2 13:18:00 FSsvr smbd_audit: PC-01|192.168.1.201|renameat|ok|/home/samba/shgrp/share/test/test/新規 テキスト ドキュメント.txt|/home/samba/shgrp/share/test/test/test.txt
May 2 13:18:05 FSsvr smbd_audit: PC-01|192.168.1.201|renameat|ok|/home/samba/shgrp/share/test/test/test.txt|/home/samba/shgrp/share/test/test/test1.txt
May 2 13:18:14 FSsvr smbd_audit: PC-01|192.168.1.201|renameat|ok|/home/samba/shgrp/share/test/新規 テキスト ドキュメント.txt|/home/samba/shgrp/share/test/test2.txt
May 2 13:18:20 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test/test/test1.txt
May 2 13:18:20 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test/test
May 2 13:18:32 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test/test2.txt
May 2 13:18:37 FSsvr smbd_audit: PC-01|192.168.1.201|unlinkat|ok|/home/samba/shgrp/share/test
--------------------------------------------------------------
これにて対処を完了します。