26 December 2023

(Linux)Sambaの応用設定

Ubuntu Linuxで「初期設定」のままでSambaサーバ(SMB - Server Message Block サーバ)を立ち上げたら、アクセスできなかった...

ということで、どう設定したらよいのか。LinuxのコマンドラインでSambaサーバの状況を確認する方法をメモを前回記述したが、今回は応用設定編。

サーバ検証環境
・Version 4.15.13 / Ubuntu 22.04

目次
(Linux)Sambaの設定とコマンドでの調査方法
(Linux)Sambaの応用設定

参考資料

smb.conf Ubuntu 22.04 manpage
smb.conf 現行バージョン(Ver 4.17.0)マニュアル 日本語版
smb.conf バージョン 4(Ver 4.1.20 - 4.1.22)マニュアル 日本語版
smb.conf バージョン 3(Ver 3.5.16 - 3.5.20)マニュアル 日本語版

samba 現行バージョン(Ver 4.17.0)マニュアル目次 日本語版
samba バージョン 4 マニュアル目次 日本語版
samba バージョン 3 マニュアル目次 日本語版


ユーザ認証ありで、特定ユーザのみ書き込み権限ありの共有フォルダ

次のようなアクセス権限を想定する。
・読み出し権限 : vm, vm-root
・書き込み権限 : vm-root

write list は、 例え read only オプションが yes であっても書き込み権が与えられるので、次のように設定を行う。

/etc/samba/smb.conf に追加
[vm_share]
  comment = user share folder (vm-root:ReadWrite, vm:Read) 
  create mask = 0666
  directory mask = 0777
  path = /media/samba_share/vm_share/
  valid users = vm vm-root
  write list = vm-root
;  read only = yes      ; default value
;  browsable = yes      ; default value

ゲストアクセス可で、特定ユーザのみ書き込み権限ありの共有フォルダ

いわゆるダウンロード サイトを作成する場合を想定し、次のようなアクセス権限とする。
・読み出し権限 : すべてのアクセス
・書き込み権限 : vm-root

ゲスト認証を有効化するには、 global セクションに次の1行が必要。

/etc/samba/smb.conf に次の記述があるのを確認
[global]
  map to guest = Bad User

そして、共有フォルダの設定を行う。

/etc/samba/smb.conf に追加
[vm_share]
  comment = user share folder (vm-root:ReadWrite, Everyone:Read) 
  create mask = 0666
  directory mask = 0777
  guest ok = yes
  path = /media/samba_share/vm_share/
  write list = vm-root
;  read only = yes      ; default value
;  browsable = yes      ; default value

指定したファイルを非表示にする設定

たとえば、「.」で始まるファイル(例 .bashrc)や、Windows実行ファイル(*.exe)を非表示にするには、次のような1行を加えればよい。なお、設定値の区切り文字はスラッシュ「/」。

/etc/samba/smb.conf の共有セクションに追記
[vm_share]
  veto files = /.?*/*.exe/

簡易ごみ箱機能を実装する

Samba VFSモジュールを有効化する。(Samba 3 スタッカブルVFSモジュール 日本語マニュアル

$ sudo apt install samba-vfs-modules

今回利用する recycle VFSモジュールは、「Windowsのごみ箱」ではなく、削除を行うときに指定ディレクトリ(.recycle)にファイルを移動する簡易機能である。マニュアルファイルの記述を引用すると " unlinkシステムコールを 横取り、ファイルを削除する代わりにゴミ箱ディレクトリに移動する " という機能のことだ。

ごみ箱を利用するのが単独ユーザならば、ごみ箱のフォルダ名は「.recycle」の1種類に固定で問題ない。

/etc/samba/smb.conf に追加
[vm_share]
  comment = user share folder (vm-root:ReadWrite, vm:Read)
  create mask = 0666
  directory mask = 0777
  path = /media/samba_share/vm_share/
  valid users = vm vm-root
  write list = vm-root
;  read only = yes      ; default value
;  browsable = yes      ; default value
  vfs objects = recycle
  recycle:maxsize = 10000000
  recycle:touch = yes
  recycle:versions = yes
  recycle:keeptree = yes
  recycle:repository = .recycle

ごみ箱を利用するのが複数ユーザの場合は、ごみ箱のフォルダ名は「.recycle.ユーザ名」として別ユーザのファイルが混じりこまないよう配慮する。

/etc/samba/smb.conf に追加
[vm_share]
  comment = user share folder (vm-root:ReadWrite, vm:Read)
  create mask = 0666
  directory mask = 0777
  path = /media/samba_share/vm_share/
  valid users = vm vm-root
  write list = vm-root
;  read only = yes      ; default value
;  browsable = yes      ; default value
  vfs objects = recycle
  recycle:maxsize = 10000000
  recycle:touch = yes
  recycle:versions = yes
  recycle:keeptree = yes
  recycle:repository = .recycle.%U

複数ユーザの共有フォルダで、アクセス権限を強制指定する

複数のユーザが、それぞれの保存したファイルを他者も読み書きできるよう、ファイルやディレクトリ作成時のグループ設定を強制指定する。

今回は、Sambaのインストール時に自動作成されるグループ sambashare を利用する。

/etc/samba/smb.conf に追加
[vm_share]
  comment = user share folder (vm-root:ReadWrite, vm:ReadWrite)
  create mask = 0664
  directory mask = 0775
  force create mode = 0664
  force directory mode = 0775
  force group = sambashare
  path = /media/samba_share/vm_share/
  read only = no
;  browsable = yes      ; default value
  valid users = vm vm-root

実際に、複数(今回は2つの)ユーザで新規ファイルを作成したときに、同一のsambashareグループに属していることを、サーバ側のコンソールで確認すると次のような形になる。

$ ll /media/samba_share/vm_share/
合計 416
drwxrwxrwx 5 vm      vm           4096 2023-12-26 22:30:31 ./
drwxrwxrwx 4 nobody  nogroup      4096 2023-12-20 22:41:03 ../
-rw-rw-r-- 1 vm-root sambashare     52 1970-01-01 09:00:00 テストvm-root.txt
-rw-rw-r-- 1 vm      sambashare     23 2023-12-26 22:29:48 テストvm.txt

IPアドレスでのアクセス制限

192.168.1.0 〜 192.168.1.255 のアクセスのみを許可する場合は、次のように設定する。なお、localhostは hosts deny で明示的に禁止しない限り、アクセスが許可されている。

/etc/samba/smb.conf に次の1行を追加
[global]
  hosts allow = 192.168.1.