Ubuntu 22.04 で Samba を構築する手順です。この記事では、単純なゲスト共有ではなく、LDAP に Samba の認証情報を統合し、認証管理サーバーとファイルサーバーを分ける構成として整理します。
Samba逆引きリファレンス Samba 3.4対応
Samba のファイルサーバー機能、認証、ドメイン、LDAP 連携を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
関連する LDAP / SSSD 記事
Samba の LDAP 連携は、LDAP サーバー側の suffix、TLS、BIND ユーザー、POSIX ユーザー登録、Linux 側の SSSD 認証と合わせて読むと整理しやすくなります。
- Ubuntu 22.04 389 Directory Server #1 – インスタンス作成と suffix 設計
- Ubuntu 22.04 389 Directory Server #2 – TLS 有効化と LDAPS 設定
- Ubuntu 22.04 389 Directory Server #3 – ベースエントリーの登録
- Ubuntu 22.04 389 Directory Server #4 – BIND ユーザーとアクセス制御
- Ubuntu 22.04 389 Directory Server #5 – グループとユーザーの登録
- Ubuntu 22.04 OpenLDAP LDAP ユーティリティ – ldapsearch / ldapadd / ldapmodify の使い方
- Ubuntu 22.04 SSSD – LDAP ユーザーで Linux 認証する
構成の考え方
ここでは Samba 1 と Samba 2 という 2 台構成を前提にします。Samba 1 は LDAP と連携して Samba 認証情報を管理し、Samba 2 はファイルサーバーとして動作します。
| ホスト | 役割 |
| Samba 1 | LDAP + Samba。ユーザー登録、削除、パスワード変更などの認証情報を管理する。 |
| Samba 2 | ファイルサーバー。認証情報は LDAP + Samba 側を参照する。 |
この構成の狙いは、ファイルサーバーごとに認証情報を分散させないことです。Samba の NT パスワードは Samba 側の操作で生成されるため、LDAP に Linux の認証情報だけを置いても Samba 認証としては不十分です。
Active Directory 構成にしない理由
Samba を Active Directory として構成する方法もあります。その場合、SID やドメイン参加の扱いはより統合的になります。ただし、ここでの目的は Windows ドメイン全体を作ることではなく、Samba の認証情報を LDAP に集約することです。Windows クライアントが主役ではない環境では、standalone server + LDAP backend の方が目的に合う場合があります。
インストール
Samba 1、Samba 2 の両方に Samba をインストールします。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y sambaSamba 1 の smb.conf
Samba 1 は認証情報の管理を担当します。ファイル共有は持たず、LDAP backend を使う構成です。
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
sudo tee /etc/samba/smb.conf <<'EOF'
[global]
dos charset = CP932
server role = standalone server
server string = %h server (Samba, Ubuntu)
passdb backend = ldapsam:ldaps://ldap.example.local
ldap admin dn = cn=rw,dc=example,dc=local
ldap suffix = dc=example,dc=local
ldap user suffix = ou=users
ldap group suffix = ou=groups
ldap passwd sync = yes
ldap ssl = no
load printers = No
log file = /var/log/samba/log.%m
logging = file
max log size = 1000
map to guest = Bad User
obey pam restrictions = Yes
pam password change = Yes
unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n
*Retype\snew\s*\spassword:* %n
*password\supdated\ssuccessfully* .
usershare allow guests = No
idmap config * : backend = tdb
EOFSamba 2 の smb.conf
Samba 2 はファイルサーバーとして動作します。認証情報は LDAP backend を参照し、ホームディレクトリ共有とゴミ箱機能を設定します。
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
sudo tee /etc/samba/smb.conf <<'EOF'
[global]
dos charset = CP932
server role = standalone server
server string = %h file server (Samba, Ubuntu)
passdb backend = ldapsam:ldaps://ldap.example.local
ldap admin dn = cn=rw,dc=example,dc=local
ldap suffix = dc=example,dc=local
ldap user suffix = ou=users
ldap group suffix = ou=groups
ldap passwd sync = yes
ldap ssl = no
load printers = No
log file = /var/log/samba/log.%m
logging = file
max log size = 1000
map to guest = Bad User
obey pam restrictions = Yes
pam password change = Yes
unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n
*Retype\snew\s*\spassword:* %n
*password\supdated\ssuccessfully* .
usershare allow guests = No
idmap config * : backend = tdb
[homes]
read only = No
browseable = No
vfs objects = recycle
recycle:repository = .recycle
recycle:versions = Yes
recycle:keeptree = No
recycle:touch = No
recycle:maxsize = 0
EOFSID を合わせる理由
この構成では、Samba 1 と Samba 2 のローカル SID を合わせる必要があります。Samba の認証情報には SID が関係するため、LDAP に同じユーザー情報を持っていても、Samba 側の SID が異なると認証や権限の整合性が崩れます。
Samba 1 側で SID を確認します。
sudo net getlocalsid
sudo net getdomainsidSamba 2 側で Samba 1 の SID に合わせます。この net setlocalsid は重要な手順です。
sudo net setlocalsid S-1-5-21-1546203982-3549129829-4190073355
sudo net getlocalsidここでは例として固定の SID を記載していますが、実際には Samba 1 で確認した SID を Samba 2 に設定します。同一の認証基盤として扱うため、Samba サーバー間で SID を揃えることが目的です。
LDAP admin DN のパスワード登録
Samba が LDAP backend へ書き込みできるように、ldap admin dn のパスワードを Samba に登録します。Samba 1、Samba 2 の両方で実施します。
sudo smbpasswd -w 'ldap-admin-password'設定確認とサービス再起動
testparm
sudo systemctl restart smbd nmbd
sudo systemctl status smbd --no-pager
sudo systemctl status nmbd --no-pagerSamba ユーザーの追加
Samba 1 で Samba ユーザーを追加します。Linux ユーザーまたは LDAP ユーザーとの整合性を確認してから登録します。
sudo pdbedit -a myadmin
sudo pdbedit -L
sudo pdbedit -Lv myadminホームディレクトリの作成
Samba 2 でホームディレクトリを共有する場合、Linux 側のホームディレクトリと権限も整える必要があります。Samba の共有権限だけでなく、Linux のファイルシステム権限が最終的に効きます。
sudo mkdir -p /home/myadmin
sudo chown myadmin:myadmin /home/myadmin
sudo chmod 0700 /home/myadmin接続確認
smbclient -L //samba2.example.local -U myadmin
smbclient //samba2.example.local/myadmin -U myadmin
sudo journalctl -u smbd -n 100 --no-pagerパスワード変更
パスワード変更は認証情報を管理する Samba 1 側で行います。これにより、ファイルサーバーごとに認証情報が分散することを避けます。
sudo smbpasswd myadmin
sudo pdbedit -Lv myadmin設計上の注意
- ゲスト共有は避ける。内部向けでも認証を前提にする。
- Samba の共有権限と Linux のファイル権限を混同しない。
- LDAP backend を使う場合、LDAP 障害時の影響範囲を考える。
- SID を揃える必要がある構成では、
net setlocalsidを手順から消さない。 - Active Directory が必要なのか、standalone + LDAP で十分なのかを先に決める。
- SMB は内部ネットワーク限定で公開し、インターネットへ直接公開しない。
まとめ
Ubuntu 22.04 で Samba を構築する場合、単にファイル共有を作るだけでなく、認証情報をどこで管理するかを決めることが重要です。この記事の構成では、Samba 1 を LDAP + Samba の認証管理、Samba 2 をファイルサーバーとして分離しています。
ポイントは、Samba 認証では SID と NT パスワードが重要になることです。LDAP に Linux ユーザー情報があるだけでは Samba 認証として十分ではありません。複数 Samba サーバーで同じ認証情報を扱う場合は、SID を揃え、認証管理の責任を 1 か所に寄せることで、運用が分散しにくくなります。





