こんにちは。日々是発見が楽しみな西山です。
自宅サーバーの構成をいろいろ変更した関係で、これまで仮想WindowsServerで動かしていたファイルサーバーをSambaを使って再構築しました。
が、ネット上の情報が新旧入り混じって設定の正解が見つけられずとても大変だったので、苦心して作ったミドルウェア構成とコンフィグをここに晒します。
Sambaインストールと設定
以下の前提条件に基づいてSambaファイルサーバーを構築しました。
- ワークグループ環境
- Windows端末は全てWindows10以降(=SMB1.0や2.0の古い端末は考慮外)
- 共有フォルダ以外の機能(プリンター共有、ユーザーホームディレクトリなど)は使用しない
私はAlmaLinux9上で構築しましたので、dnfで必要なパッケージを入れます。
AlmaLinux9.4のdnfからはSamba 4.19.4 がインストールされました。
dnf install epel-release
dnf install samba
dnf install samba-vfs-iouring samba-tools
Windows10以降では、ネットワークブラウズがNetBIOSの代わりにWSD(Web Service Discovery)を使うようになりました。ですので本構成でnmbdは起動させません(起動するとネットワークブラウズが非常に遅くなる、等のトラブルが起きます)。
代わりにWSD機能を提供するwsddをインストールして起動します。
dnf install wsdd
Sambaのコンフィグはこうなりました。
/etc/samba/smb.conf
[global]
workgroup = WORKGROUP
security = user
passdb backend = tdbsam
hosts allow = 2001:db8::/64 fe80::/64 192.168.0.0/24 127.0.0.0/8
map to guest = bad user
unix password sync = yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
smb ports = 445
min protocol = SMB3
unix extensions = no
load printers = no
use sendfile = Yes
min receivefile size = 16384
aio read size = 16384
aio write size = 16384
dfree cache time = 60
block size = 4096
[samba]
path = /data/samba/
browsable = yes
writable = yes
read only = no
force create mode = 0666
force directory mode = 0777
vfs objects = streams_xattr acl_xattr
acl_xattr:ignore system acls = yes
store dos attributes = yes
map archive = no
dos filemode = yes
map acl inherit = yes
以下、デフォルトから変更した設定を説明していきます。
hosts allow = 2001:db8::/64 fe80::/64 192.168.0.0/24 127.0.0.0/8
ローカルネットワーク外からの接続を拒否します。IPv6のグローバルアドレスが来てる場合は忘れずに指定しておきます(かく言う私もよく、IPv6の許可ルールを忘れてdenyされる失敗をやらかしちゃいます;;)。
min protocol = SMB3
ネットワーク内の端末は全てSMB3で通信できる前提なので、SMB1や2の通信を出さないようにします。
use sendfile = yes
min receivefile size = 16384
aio read size = 16384
aio write size = 16384
dfree cache time = 60
block size = 4096
共有の性能向上のためバッファサイズ等を設定しました。
ただ、wsddを入れる前に試行錯誤した名残なので、入れなくても問題なく動くかも知れません(もう疲れたのでそのままにしています(苦笑)。
vfs objects = streams_xattr acl_xattr
acl_xattr:ignore system acls = yes
map acl inherit = yes
WindowsファイルのACLとNTFS代替データストリームをLinux上のSamba共有に格納するための設定です。
これに必要な拡張モジュールを「dnf install samba-vfs-iouring」でインストールしています。
store dos attributes = yes
map archive = no
dos filemode = yes
Windowsファイルのファイル属性(実行/アーカイブ等)やアクセス権の動作をWindowsに近い動作にする設定です。この辺は昔から鉄板の内容かと思います。
Sambaの設定はここまで、次にwsddを設定します。
と言っても必須の設定は一つだけで、wsddがlistenするNICをsysconfigで指定し、デーモンの起動オプションとして渡します。
/etc/sysconfig/wsdd
OPTIONS="-i eth0"
「testparm」コマンドでコンフィグチェックし、問題なければsmbdとwsddを起動します。
systemctl start smbd
systemctl start wsdd
systemctl enable smbd
systemctl enable wsdd
Windowsクライアントからはマシン名やIPアドレス指定でSambaマシンに接続し、設定したユーザー・パスワードを入力すれば共有フォルダが見られます。
LinuxユーザーとSambaユーザーのパスワード同期、共有フォルダのパーミッションも注意して下さい。
ファイアウォールをサービス単位で開ける場合はSMB(445/TCP)、WSD(3702/UDP、5357-5358/TCP)あたりを開ける必要があるでしょう。
2024年にWindowsServerとSambaを使い比べた感想
あくまで私の私見ですが、率直なところを書きます。
- ライセンスを持ってるならWindowsServerをおススメします。GUIで共有ディレクトリとユーザーを設定すればポン付けで確実動作し、複数の設定が絡んだ不可解な現象に悩まされずに済みます。ファイル操作のレスポンスも(体感ですが)仮想WindowsServerの方が物理Linux+Samba構成を上回っていました。
- WindowsServerのライセンスを持ってない(高価ですしホームユーザーは大体持ってないですね)場合は、実績あるメーカーのNASを購入してWindows共有機能を使うのがおススメです。複雑なSambaの設定もメーカー調整済みなので悩むことなく快適に使えます。
- 予算が許せば「Azure Files」や「Amazon FSx for Windows File Server」等のクラウドソリューションを利用してもいいでしょう。
Sambaって商用製品(Windows)の互換ソフトで、Windows側の仕様変更によく追随してくれているのですが、それゆえに設定が複雑怪奇化してあちこちに落とし穴ができてしまい、結局出来合いの製品を買ってきた方が安パイ、という状況だと思います。
Samba公式がアップデートされた推奨設定を出してくれればまだ何とかなるのですが、探した限りではそういう情報も出ておらず、10年、20年前の賞味期限切れの情報が検索でごろごろ引っかかってしまう状態でした。
確かにWindowsのライセンス費用はかからないですが、構築や調整・メンテナンスの手間、性能差を考えると、イチから構築はちょっとおススメできない……というのが、今回の感想でした。