Samba 4 (スタンドアロン) の認証を LDAP にする

(2015.6.17)

Samba 4をスタンドアロンサーバとしてファイルサーバにしたうえで、ユーザ情報を外部 LDAP サーバに置く方法。

この運用スタイルは、Samba 3 以前の古い情報はいろいろ見つかるが, 意外と Samba 4 のが見当たらない。

Active Directory は使わない。

まず, 既存のユーザ情報を LDAP に移行する。

OpenLDAPの設定

Samba 4と OpenLDAP が, それぞれ単独できちんと動いていることが重要。

OpenLDAP のインストールはこちら; OpenLDAP の設定

データ移行の前に, 必要なスキーマ (クラス) を追加する.

  • samba.schema
  • nis.schema ... 'posixGroup' クラス

rootエントリを追加する。

samba-root.ldif::

dn: dc=fruits
# suffix に対しては STRUCTURAL なオブジェクト
# 'organization' is a STRUCTURAL
objectClass: dcObject
objectClass: organization
dc: fruits
o: sample org

このldif を投入.

# ldapadd -x -w パスワード -D "cn=admin,dc=orange,dc=fruits" -f samba-root.ldif
adding new entry "dc=fruits"

Sambaの設定

/etc/samba/smb.conf ファイルの [global] セクションを編集する。

smbldap-populate までは, passdb backend を変更しない。

# まだコメントアウトしない
    passdb backend = tdbsam

# ここから追加

# まだコメント
#    passdb backend = ldapsam:"ldap://localhost/"

    ldap admin dn = cn=admin,dc=orange,dc=fruits
    ldap suffix = dc=orange,dc=fruits
    ldap user suffix = ou=people
    # ou=でなければならない. cn=groupsとすると, ou=cn=groups
    ldap group suffix = ou=groups
    ldap machine suffix = ou=hosts
    ldap idmap suffix = ou=idmap
    ldap ssl = no
# ここまで追加

それぞれの意味;

ldap admin dn LDAPサーバの管理者の DN (Distinguished Name). ldap suffix 値は追加されない。
ldap suffix
ldap group suffix ldap suffix 値が付加される
ldap idmap suffix ldap suffix 値が付加される
ldap machine suffix ldap suffix 値が付加される
ldap user suffix ldap suffix 値が付加される

LDAP adminパスワードを設定. secrets.tdb ファイルに保存される。

# smbpasswd -w パスワード
Setting stored password for "cn=admin,dc=orange,dc=fruits" in secrets.tdb

smbldap-tools

Samba-LDAP連携のツール集。yum コマンドでインストールする。

# yum install smbldap-tools

対話形式で初期設定する. 上の ldap suffix などの値と合わせること。

# smbldap-config

とはいうものの, 自動的に, /etc/samba/smb.conf ファイルの値が初期値になっている。ほとんどは [Enter]キーで進んでいい。変更するのは 'ldap master bind password' ぐらい。ldap master bind dn [cn=admin,dc=orange,dc=fruits] のパスワード。

Fedora 22 Linux の場合, /etc/smbldap-tools/smbldap.conf ファイルと /etc/smbldap-tools/smbldap_bind.conf ファイルが更新される。

LDAP内に必要なツリーを作成させる。

# smbldap-populate
Populating LDAP directory for domain MYGROUP (S-1-5-21-xxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx)
(using builtin directory structure)

adding new entry: dc=orange,dc=fruits
adding new entry: ou=people,dc=orange,dc=fruits
adding new entry: ou=cn=groups,dc=orange,dc=fruits
adding new entry: ou=hosts,dc=orange,dc=fruits
adding new entry: ou=idmap,dc=orange,dc=fruits
adding new entry: sambaDomainName=MYGROUP,dc=orange,dc=fruits
adding new entry: uid=root,ou=people,dc=orange,dc=fruits
adding new entry: uid=nobody,ou=people,dc=orange,dc=fruits
adding new entry: cn=Domain Admins,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Domain Users,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Domain Guests,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Domain Computers,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Administrators,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Account Operators,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Print Operators,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Backup Operators,ou=cn=groups,dc=orange,dc=fruits
adding new entry: cn=Replicators,ou=cn=groups,dc=orange,dc=fruits

Please provide a password for the domain root: 
Changing UNIX and samba passwords for root
New password: パスワードを入力
Retype new password: 

JXplorer などで、ツリーを確認してみよう。

アカウント情報を移行

既存のアカウント (ユーザ) 情報を移行

# pdbedit -i tdbsam -e ldapsam:ldap://localhost
Importing account for xxxx...ok
Importing account for xxxx...ok

ようやく, smb.conf ファイルで LDAP を有効にする。passdb backendを変更する。

Sambaを再起動。共有フォルダにアクセスできる??

JXplorer などでエントリを見ると、

objectClass 'sambaSamAccount'
  • sambaNTPassword パスワード
objectClass 'account'
  • MUST uid

ところで, Zimbra による LDAP では、userPassword アトリビュートにパスワードが格納される。共通化できない。

userPassword アトリビュートは, inetOrgPerson -> organizationalPerson -> person クラスで定められている。

新規ユーザの追加

ユーザの追加は smbldap-useradd コマンド. ホスト名などをいちいちコマンドラインで指定する必要はない。

# smbldap-useradd -a nasuser1

パスワード変更は smbldap-passwd.