こんにちは。日々是発見が楽しみな西山です。
以前、「Sambaサーバーを構築してみた記録(2024年版)」という記事を書きました。
このSambaサーバーは自宅で普段使いするものを構築したので、その後も手元で色んな使い方を試しました。
すると「見た目や使い心地がWindowsファイルサーバーと違うなぁ」と思う点がいくつかあったので、そこをできるだけ近づけてみよう! と頑張って試行錯誤してみました。その成果をここでご紹介します。
「ファイルサーバーを無償のSambaに置き換えろって言われて作ったけど、前と違うってユーザーに文句言われて……」なんて、お悩みのエンジニアに役立てれば幸いです。
avahi-daemonでネットワークブラウザに表示させよう
PCの「ネットワークブラウザ」にファイルサーバーのアイコンが表示される使い勝手に慣れている人は多いですね。
昔々は「NetBIOS」でネットワークブラウザの機能が実装されていましたが、今ではSambaでnmbdを起動してもサーバーアイコンは表示されません。
調べてみると、WindowsでSMB1.0が削除されたのと同時期に、NetBIOSを用いたブラウズ機能が動かなくなったようです。以降は「mDNS」を利用してネットワークブラウザに端末を表示させるようになっています。
Linuxでは「avahi-daemon」を使うと、同じ挙動が実現できます。
AlmaLinux9の場合は、
dnf install avahi-daemon nss-mdns
で必要なパッケージをインストールします。
インストール後、SMB共有をネットワークに広報するのに必要な設定ファイルを作成します。
以下の内容で「この端末はSMB共有サービスをTCP/445で提供していますよ」とローカルネットワークに広報できます。
/etc/avahi/services/smb.service
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_smb._tcp</type>
<port>445</port>
</service>
</service-group>
その後、
systemctl restart avahi-daemon
で設定ファイルを読み込ませると、PCのネットワークブラウザにサーバーのアイコンが表示されます。
前回記事で「wsdd」をご紹介しましたが、「avahi-daemon」は端末の存在を広報、「wsdd」は共有パスの存在を広報、という風に機能が分かれているようです。いくつもデーモンがいるのはちょっとややこしいですが、仕方ないところですかね……。
「map to guest」は「never」に!
Sambaのゲスト共有に関する設定。ネットで公開されている例ではだいたい以下のように紹介されていますし、パッケージでインストールされるconfファイルもこうなっています。
[global]
map to guest = bad user
(ゲスト共有がある場合)
[share]
guest = ok
ですが、今どきのまっさらなPCでこのSambaに接続しようとすると、どうなるでしょう?
こんなダイアログが出て、永遠に接続できません……!
この挙動は、Windowsのログオンユーザー名と、ファイルサーバーに接続するユーザー名が違う場合に起きます。
Samba共有を見つけると、WindowsはまずPCにログオンしたユーザー名での認証を試みます。
ここで「map to guest = bad user」が設定されていて、かつログオンユーザー名がファイルサーバーのユーザー名と違う場合、Sambaはゲスト共有を提供します。
ところが最近のWindowsでは、セキュリティ観点からデフォルトでゲスト共有に接続しないようポリシーが設定されているため、PC側からSambaサーバーへの接続を拒否します。
Sambaを拒否してコネクションを切ったので「ネットワークパスが見つかりません。」というエラーダイアログが出るわけです。
で、最近はWindowsをセットアップする時、Microsoftアカウントでログオンにする場合が多いですね。なので、このパターンに当てはまってトラブルが起きやすいです。
ユーザー目線からすると全く不可解な挙動なので、Sambaの設定を修正します。
[global]
map to guest = never
これで、Sambaは接続した端末に最初からユーザー認証を開始し、PC側では無事にパスワード入力ダイアログが表示されます。
そもそもWindowsが「ゲスト共有に接続しないポリシー」を設定するのは「ゲスト共有で危険なファイルを配布してPCを侵害する」攻撃を防ぐ意味があります。
Windowsがデフォルトでゲスト共有を止めているなら、Sambaもそれに揃えるのがスジでしょう。
× map to guest = bad user
◯ map to guest = never
今日はこれを覚えて帰ってくださいね!