手当たり次第に書くんだ

飽きっぽいのは本能

目次に戻る

Overview

Samba を構築します。本稿の例では以下のホストの構成を前提とします。便宜上、Samba1, Samba2 としています。

  • Samba1 (LDAP + Samba): Samba は pdbedit で Samba としての認証情報を管理(ユーザー登録・削除・パスワード変更等)し、LDAP に登録する。LDAP は Linux としての認証情報を管理するとともに、Samba の認証情報も格納し、LDAP としてネットワーク上で共有可能とする。また、Samba 上のパスワード変更を LDAP と同期させる。これは Samba では NT パスワードが必要であり、NT パスワードは Samba 上の操作により生成されるためです。
  • Samba2 (File server): 純粋なファイルサーバーとして使用する。認証は LDAP + Samba に問い合わせる。この際、SID が異なると認証できない(ローカル SID は通常ホスト毎に一意である)ため、LDAP + Samba と SID を合わせておく。

この構成にしない場合、ユーザーのパスワード変更はファイルサーバーとしての Samba 上で行うことになり、認証情報を管理するホストが分散してしまうことになります。この構成により、LDAP サーバー上でパスワード変更などの操作も含めて認証情報を管理することができます。

また、Samba で Active Directory を構成する方法(AD に参加すると SID は同一になる)もありますが、そもそもの目的が Samba の認証を LDAP に統合することであるため、Active Directory のような統合的な機能は不要である点と、筆者の環境では Windows が存在しないため、本稿の構成は合理的だと思っています。

前提条件

  • こちらを参考に LDAP サーバーの導入が完了していること。
  • コマンドの出力やプロンプトなどは例となりますので、説明に従って適宜読み替えて下さい。

インストール

Samba1, Samba2 で samba をインストールします。

myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install samba

/etc/samba/smb.conf

デフォルト値

デフォルト値は下記の通りです。testparm は現在の smb.conf の構文チェックと最小値を表示します。

myadmin@ubuntu:~$ testparm
[global]
    log file = /var/log/samba/log.%m
    logging = file
    map to guest = Bad User
    max log size = 1000
    obey pam restrictions = Yes
    pam password change = Yes
    panic action = /usr/share/samba/panic-action %d
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    passwd program = /usr/bin/passwd %u
    server role = standalone server
    server string = %h server (Samba, Ubuntu)
    unix password sync = Yes
    usershare allow guests = Yes
    idmap config * : backend = tdb

[printers]
    browseable = No
    comment = All Printers
    create mask = 0700
    path = /var/spool/samba
    printable = Yes

[print$]
    comment = Printer Drivers
    path = /var/lib/samba/printers

設定値

Samba1 の設定値は以下のとおりです。Samba1 は認証情報の管理だけを行うため、ファイル共有設定はありません。

myadmin@ubuntu:~$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
myadmin@ubuntu:~$ sudo tee /etc/samba/smb.conf <<"EOF"
[global]
    dos charset = CP932
    ldap admin dn = cn=rw,dc=si1230,dc=com
    ldap group suffix = ou=groups
    ldap passwd sync = yes
    ldap ssl = no
    ldap suffix = dc=si1230,dc=com
    ldap user suffix = ou=users
    load printers = No
    log file = /var/log/samba/log.%m
    logging = file
    map to guest = Bad User
    max log size = 1000
    obey pam restrictions = Yes
    pam password change = Yes
    panic action = /usr/share/samba/panic-action %d
    passdb backend = ldapsam:ldaps://ldap.si1230.com
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    passwd program = /usr/bin/passwd %u
    server role = standalone server
    server string = %h server (Samba, Ubuntu)
    unix password sync = Yes
    usershare allow guests = Yes
    idmap config * : backend = tdb
EOF

Samba2 の設定値は以下のとおりです。以下の例ではホームディレクトリを共有し、ゴミ箱機能を設定しています。

myadmin@ubuntu:~$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
myadmin@ubuntu:~$ sudo tee /etc/samba/smb.conf <<"EOF"
[global]
    dos charset = CP932
    ldap admin dn = cn=rw,dc=si1230,dc=com
    ldap group suffix = ou=groups
    ldap passwd sync = yes
    ldap ssl = no
    ldap suffix = dc=si1230,dc=com
    ldap user suffix = ou=users
    load printers = No
    log file = /var/log/samba/log.%m
    logging = file
    map to guest = Bad User
    max log size = 1000
    obey pam restrictions = Yes
    pam password change = Yes
    panic action = /usr/share/samba/panic-action %d
    passdb backend = ldapsam:ldaps://ldap.si1230.com
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
    passwd program = /usr/bin/passwd %u
    server role = standalone server
    server string = %h server (Samba, Ubuntu)
    unix password sync = Yes
    usershare allow guests = Yes
    idmap config * : backend = tdb

[homes]
    read only = No
    vfs objects = recycle
    recycle:maxsize = 0
    recycle:touch = No
    recycle:versions = Yes
    recycle:keeptree = No
    recycle:repository = .recycle
EOF

SID の設定

Samba1 の SID を確認します。domain SID は、おそらく NT ドメイン / Active Directory 構成などでは正常に出力されると思います。

myadmin@ubuntu:~$ sudo net getdomainsid
SID for local machine UBUNTU is: S-1-5-21-1546203982-3549129829-4190073355
Could not fetch domain SID

Samba2 のSIDを Samba1 に合わせます。

myadmin@ubuntu:~$ sudo net setlocalsid S-1-5-21-1546203982-3549129829-4190073355

今回は Samba1 に合わせていますが、同一の SID であれば問題ありません。

ldap admin dnのパスワード登録

Samba1, Samba2 で ldap admin dn のパスワードを Samba に登録します。これを登録しないと Samba の起動に失敗します。

myadmin@ubuntu:~$ sudo smbpasswd -w password
Setting stored password for "cn=rw,dc=si1230,dc=com" in secrets.tdb

設定の有効化

設定を有効化します。このタイミングで、LDAP に Samba1, Samba2 の情報が格納されます。

myadmin@ubuntu:~$ sudo systemctl restart smbd.service && systemctl status smbd.service

下記のログの通りではありますが、LDAP の sambaminpwdlength のパスワード要件を満たしていないと Samba が起動しません。これは ldap admin dn のパスワードだけが対象の様です。具体的なパスワード要件を調べてはいませんが、ランダム英数字 20 桁にすると問題なく起動します。前述の smbpasswd を再実施後に再起動します。

Jun 06 16:38:20 ubuntu ns-slapd[949]: [06/Jun/2022:16:38:20.627496855 +0900] - ERR - oc_check_allowed_sv - Entry "sambaDomainName=UBUNTU,dc=si1230,dc=com" -- attribute "sambaminpwdlength" not allowed
Jun 06 16:38:20 ubuntu systemd[1]: smbd.service: Main process exited, code=exited, status=1/FAILURE

Samba ユーザー追加

pdbedit で Samba ユーザーを追加します。LDAP に登録しているユーザーと同じユーザー名、パスワードにします。

myadmin@ubuntu:~$ sudo pdbedit -a u3000
new password:
retype new password:
Unix username:        u3000
NT username:          u3000
Account Flags:        [U          ]
User SID:             S-1-5-21-1546203982-3549129829-4190073355-1001
Primary Group SID:    S-1-5-21-1546203982-3549129829-4190073355-513
Full Name:            u1000
Home Directory:       \\UBUNTU\u3000
HomeDir Drive:
Logon Script:
Profile Path:         \\UBUNTU\u3000\profile
Domain:               UBUNTU
Account desc:
Workstations:
Munged dial:
Logon time:           0
Logoff time:          never
Kickoff time:         never
Password last set:    Mon, 06 Jun 2022 18:36:37 JST
Password can change:  Mon, 06 Jun 2022 18:36:37 JST
Password must change: never
Last bad password   : 0
Bad password count  : 0
Logon hours         : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

ホームディレクトリの作成

mkhomedir を有効にし、loginShell 属性を /bin/bash にしている場合、Samba2 に SSH 等でログインするとホームディレクトリが自動生成されます。手動でホームディレクトリを作成する場合はこちらを参照して下さい。

正常性確認

SMB クライアント( Windows のエクスプローラー等)から Samba2 に接続します。

パスワード変更

ユーザーのパスワードを変更するには Samba1 で下記を実行します。前述の設定に問題が無ければ unix password sync = Yes に従って LDAP のパスワードも変更されます。反対に LDAP で変更したパスワードは Samba に同期することはできません。

myadmin@ubuntu:~$ sudo smbpasswd u3000
New SMB password:
Retype new SMB password:

目次に戻る

Ubuntu 22.04 Samba 構築

コメントを残す

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

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

トップへ戻る