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.