コンテンツにスキップ

ゲスト共有の設定

Debian 13.xのSambaで、パスワードなしで読み書きできるpublic共有を構成する。


項目 値
OS Debian 13.x
サーバー名 files.example.com
共有名 public
共有パス /srv/samba/public
ゲストアカウント nobody
接続先 \\files.example.com\public

files.example.comがDNSまたはクライアントのhostsファイルでSambaサーバーのIPアドレスへ解決できるようにする。

この共有へ接続できるクライアントは、nobodyの権限でファイルを作成・変更できる。共有するネットワークの境界とTCP 445への到達範囲を制限する。


Terminal window
sudo apt update
sudo apt install samba smbclient
Terminal window
sudo systemctl enable --now smbd
systemctl status smbd

2. 共有ディレクトリを作成する

Section titled “2. 共有ディレクトリを作成する”
Terminal window
sudo install -d -o nobody -g nogroup -m 2775 /srv/samba/public
Terminal window
ls -ld /srv/samba/public

所有者がnobody、グループがnogroup、モードがdrwxrwsr-xであることを確認する。


設定変更前のファイルを保存する。

Terminal window
sudo cp --archive /etc/samba/smb.conf /etc/samba/smb.conf.before-public

/etc/samba/smb.confを編集する。

Terminal window
sudoedit /etc/samba/smb.conf

既存の[global]セクションへ次のパラメーターを追加または変更する。[global]セクションを重複して作らない。

/etc/samba/smb.conf
[global]
server role = standalone
security = user
map to guest = Bad User
guest account = nobody

ファイル末尾へ[public]セクションを追加する。

/etc/samba/smb.conf
[public]
path = /srv/samba/public
browseable = yes
guest ok = yes
guest only = yes
read only = no
create mask = 0664
directory mask = 0775

各パラメーターとLinux権限の関係はSMB・Samba・共有権限の仕組みを参照する。

新規のstandalone file serverでは、server role = standaloneとsecurity = userは既定の実効動作を明示する任意設定である。guest account = nobodyとbrowseable = yesも一般的な既定値を明示しており、異なる既定値へ変更されていなければ省略できる。


Terminal window
sudo testparm -s

Loaded services file OK.と表示され、[public]に意図した設定が表示されることを確認する。

Terminal window
sudo systemctl reload smbd
systemctl status smbd

サーバー自身から認証なしで共有一覧を取得する。map to guest = Bad Userの動作を確認するため、サーバーに存在しないユーザー名smbguest-testを指定する。

Terminal window
getent passwd smbguest-test

何も表示されないことを確認する。

Terminal window
smbclient -L //localhost -N -U smbguest-test

publicがDiskとして表示されることを確認する。

認証なしでファイルをアップロードし、一覧表示とダウンロードを行う。

Terminal window
smbclient //localhost/public -N -U smbguest-test \
-c 'put /etc/hostname hostname.txt; ls; get hostname.txt /tmp/hostname-from-samba.txt'
Terminal window
cat /tmp/hostname-from-samba.txt
ls -l /srv/samba/public/hostname.txt

共有内のファイルを読み取れ、作成されたファイルの所有者がnobodyであることを確認する。

別のLinuxクライアントから確認する場合は、次を実行する。

Terminal window
smbclient //files.example.com/public -N -U smbguest-test

Windowsクライアントでは、エクスプローラーのアドレス欄へ次を入力する。

\\files.example.com\public

Windows側で認証なしのSMBゲスト接続が禁止されている場合は、Sambaの設定が成立していても接続できない。クライアントのinsecure guest logonとSMB signingのポリシーを確認する。ゲストログオンを許可すると、接続先サーバーの真正性を保証しにくくなるため、変更する範囲を限定する。


Terminal window
sudo testparm -s
smbclient -L //localhost -N -U smbguest-test
smbstatus
systemctl status smbd
journalctl -u smbd