Ubuntu 22.04 で Samba を LDAP 認証と組み合わせる場合、Linux のユーザー解決、SMB の認証情報、Samba の SID を分けて考える必要があります。LDAP にユーザーがあるだけでは、Samba の SMB 認証と SID の扱いまで自動で決まるわけではありません。
この記事では、既存の Ubuntu 22.04 環境を保守する前提で、ldapsam を使った Samba の基本設定、SID の確認、Samba ユーザー登録、接続確認の流れを確認します。
- Samba の認証情報を LDAP に置く構成
- Linux 認証、SMB 認証、SID の役割の違い
ldapsamを使うsmb.confの基本net getlocalsidとnet setlocalsidの確認pdbeditによる Samba ユーザー登録
書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作を基礎から確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Samba と LDAP の役割を分ける
LDAP はユーザーやグループの情報を保持します。SSSD は Linux 側で UID/GID やログイン認証を扱います。Samba は SMB クライアントに対する認証、共有、SID の管理を扱います。
| 要素 | 主な役割 | 確認コマンド |
| LDAP | ユーザー、グループ、Samba 属性の保存 | ldapsearch |
| SSSD | Linux のユーザー解決とログイン認証 | getent passwd |
| Samba | SMB 認証、共有、SID の管理 | pdbedit / net |
Active Directory 構成にしない前提
この記事では Samba を Active Directory Domain Controller として構成しません。既存の LDAP に Samba の認証情報を持たせ、Samba は standalone server としてファイル共有を提供する前提です。
- Windows ドメイン参加や Group Policy は扱わない
- LDAP はユーザー情報と Samba 属性の保存先として使う
- Linux ログイン認証は SSSD 側で確認する
- SMB 認証は Samba の passdb と SID で確認する
パッケージをインストールする
Samba 本体を導入します。LDAP クライアント確認用のコマンドは、LDAP 連携の記事側で準備済みである前提にします。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y samba
smbd --versionLDAP と Linux ユーザーを確認する
Samba 設定に入る前に、対象ユーザーを Linux 側で解決できることを確認します。ここで失敗する場合は、Samba ではなく LDAP または SSSD 側を先に確認します。
getent passwd myadmin
id myadmin
ldapsearch -x -H ldaps://ldap.example.local -b dc=example,dc=local uid=myadminsmb.conf を作成する
passdb backend に ldapsam を指定し、Samba の認証情報を LDAP に保存する構成にします。DN や suffix は環境に合わせて変更します。
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
sudo tee /etc/samba/smb.conf >/dev/null <<'EOF'
[global]
server role = standalone server
server string = %h file server
workgroup = EXAMPLE
security = user
passdb backend = ldapsam:ldaps://ldap.example.local
ldap admin dn = cn=samba-admin,dc=example,dc=local
ldap suffix = dc=example,dc=local
ldap user suffix = ou=users
ldap group suffix = ou=groups
ldap ssl = start tls
ldap passwd sync = yes
log file = /var/log/samba/log.%m
logging = file
max log size = 1000
map to guest = Bad User
usershare allow guests = No
load printers = No
idmap config * : backend = tdb
[homes]
read only = No
browseable = No
create mask = 0600
directory mask = 0700
EOF
sudo testparm -sLDAP admin DN のパスワードを登録する
Samba が LDAP へ Samba 属性を書き込むため、ldap admin dn のパスワードを Samba 側に登録します。この値は平文で手順に残さず、対象サーバー上で入力します。
sudo smbpasswd -w
sudo testparm -sSID を確認する
Samba では SID が SMB 認証や権限管理に関わります。複数の Samba サーバーで同じ認証基盤を扱う場合、SID の扱いを確認してから運用します。
sudo net getlocalsid
sudo net getdomainsidSID を指定する
既存環境に合わせて SID を指定する場合は、対象 SID を確認したうえで net setlocalsid を実行します。新規環境では、むやみに変更せず、設計上必要な場合だけ実施します。
sudo net setlocalsid S-1-5-21-1111111111-2222222222-3333333333
sudo net getlocalsidSamba サービスを再起動する
設定ファイルと SID を確認したら、Samba サービスを再起動します。Ubuntu 22.04 では smbd と nmbd の状態を確認します。
sudo systemctl restart smbd nmbd
systemctl status smbd --no-pager
systemctl status nmbd --no-pagerSamba ユーザーを追加する
LDAP に Linux ユーザーが存在していても、Samba の SMB 認証情報は別に登録が必要です。pdbedit で Samba ユーザーとして追加します。
sudo pdbedit -a myadmin
sudo pdbedit -L
sudo pdbedit -Lv myadminホームディレクトリを確認する
[homes] 共有を使う場合は、対象ユーザーのホームディレクトリが存在し、所有者と権限が適切であることを確認します。自動作成の方針は別記事で扱います。
sudo install -d -m 0700 -o myadmin -g myadmin /home/myadmin
ls -ld /home/myadmin接続を確認する
Samba サーバー自身または別端末から、共有一覧とホーム共有への接続を確認します。名前解決で迷う場合は、ホスト名ではなく IP アドレスでも確認します。
smbclient -L //samba.example.local -U myadmin
smbclient //samba.example.local/myadmin -U myadmin
sudo journalctl -u smbd -n 100 --no-pagerパスワード変更を確認する
SMB 認証用のパスワードを変更する場合は smbpasswd を使います。Linux ログイン用パスワードとの同期方針は、LDAP と Samba の設計に合わせて決めます。
sudo smbpasswd myadmin
sudo pdbedit -Lv myadmin運用時に見るポイント
Samba と LDAP の連携では、どこで失敗しているかを層ごとに切り分けます。Linux ユーザー解決、LDAP 書き込み、SMB 認証、共有アクセスを同時に追わない方が判断しやすくなります。
getent passwdで Linux 側のユーザー解決を確認するldapsearchで LDAP の対象エントリを確認するpdbedit -Lで Samba ユーザーを確認するnet getlocalsidで SID を確認するsmbclientで SMB 接続を確認する
まとめ
Ubuntu 22.04 で Samba と LDAP を組み合わせる場合、LDAP、SSSD、Samba の役割を分けて確認します。LDAP ユーザーが存在すること、Linux で UID/GID を解決できること、Samba の SMB 認証情報が登録されていることは別の確認項目です。
SID は Samba 側の識別情報として扱い、既存環境に合わせる必要がある場合だけ慎重に変更します。設定変更後は testparm、pdbedit、smbclient で段階的に確認します。

