手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Samba 構築 – LDAP 認証と SID を整理する

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 認証と合わせて読むと整理しやすくなります。

構成の考え方

ここでは Samba 1 と Samba 2 という 2 台構成を前提にします。Samba 1 は LDAP と連携して Samba 認証情報を管理し、Samba 2 はファイルサーバーとして動作します。

ホスト役割
Samba 1LDAP + 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 samba

Samba 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
EOF

Samba 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
EOF

SID を合わせる理由

この構成では、Samba 1 と Samba 2 のローカル SID を合わせる必要があります。Samba の認証情報には SID が関係するため、LDAP に同じユーザー情報を持っていても、Samba 側の SID が異なると認証や権限の整合性が崩れます。

Samba 1 側で SID を確認します。

sudo net getlocalsid
sudo net getdomainsid

Samba 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-pager

Samba ユーザーの追加

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 か所に寄せることで、運用が分散しにくくなります。

Ubuntu 22.04 Samba 構築 – LDAP 認証と SID を整理する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る