コンテンツにスキップ

認証共有の設定

Debian 13.xのSambaで、smbusersグループのSambaユーザーだけが読み書きできるprivate共有を構成する。


項目 値
OS Debian 13.x
サーバー名 files.example.com
共有名 private
共有パス /srv/samba/private
許可するLinuxグループ smbusers
ユーザー alice
接続先 \\files.example.com\private

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


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

2. Linuxユーザーとグループを作成する

Section titled “2. Linuxユーザーとグループを作成する”

SambaはパスワードをSambaユーザーデータベースで検証した後、対応するLinuxユーザーのUIDとグループで共有内のファイルを操作する。そのため、Sambaパスワードを登録する前にLinuxユーザーと共有用グループを用意する。

共有を許可するLinuxグループを作成する。

Terminal window
sudo groupadd --force smbusers

Linuxユーザーaliceが存在しない場合は、対話ログインを許可しないローカルユーザーとして作成する。

Terminal window
getent passwd alice >/dev/null || \
sudo useradd --no-create-home --shell /usr/sbin/nologin alice

aliceをsmbusersへ追加する。

Terminal window
sudo usermod --append --groups smbusers alice
id alice

idの出力にsmbusersが含まれることを確認する。


Terminal window
sudo smbpasswd -a alice

SMBクライアントから使用するパスワードを2回入力する。既にSambaユーザーとして登録されていたアカウントが無効化されている場合だけ、任意で再有効化する。

Terminal window
sudo smbpasswd -e alice
Terminal window
sudo pdbedit -L

一覧にaliceが表示されることを確認する。


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

Section titled “4. 共有ディレクトリを作成する”
Terminal window
sudo install -d -o root -g smbusers -m 2770 /srv/samba/private
Terminal window
ls -ld /srv/samba/private

所有者がroot、グループがsmbusers、モードがdrwxrws---であることを確認する。


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

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

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

Terminal window
sudoedit /etc/samba/smb.conf

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

/etc/samba/smb.conf
[global]
server role = standalone
security = user

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

/etc/samba/smb.conf
[private]
path = /srv/samba/private
browseable = yes
guest ok = no
read only = no
valid users = @smbusers
force group = smbusers
create mask = 0660
directory mask = 0770

valid usersによる接続許可とLinuxグループ権限の関係はSMB・Samba・共有権限の仕組みを参照する。

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


Terminal window
sudo testparm -s

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

Terminal window
sudo systemctl reload smbd
systemctl status smbd

ユーザーaliceで共有一覧を取得する。

Terminal window
smbclient -L //localhost -U alice

プロンプトへSambaパスワードを入力し、privateがDiskとして表示されることを確認する。

privateへ接続し、ファイルをアップロードしてダウンロードする。

Terminal window
smbclient //localhost/private -U alice \
-c 'put /etc/hostname hostname.txt; ls; get hostname.txt /tmp/private-hostname.txt'
Terminal window
cat /tmp/private-hostname.txt
ls -l /srv/samba/private/hostname.txt

ファイルのグループがsmbusersであり、otherに権限が付いていないことを確認する。

ゲスト接続が拒否されることを確認する。

Terminal window
smbclient //localhost/private -N -c ls

NT_STATUS_ACCESS_DENIEDまたは認証を要求するエラーになることを確認する。

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

Terminal window
smbclient //files.example.com/private -U alice

Windowsクライアントでは、エクスプローラーのアドレス欄へ次を入力し、ユーザー名aliceとSambaパスワードを指定する。

\\files.example.com\private

Terminal window
sudo testparm -s
sudo pdbedit -L
smbclient -L //localhost -U alice
smbstatus
systemctl status smbd
journalctl -u smbd