openldap サーバの samba 連携

現在、ローカルの認証とsshの認証をLDAPに切り替えた。続いて統合したい認証はsamba。統合しないと独自でパスワード用のDBを持つことになるため、他の認証と比してダブルマスター感が非常に強く、何としても統合しておきたい対象の1つ。一方で認証不能の障害時にsambaが悪いのか、ldapが悪いのか、切り分けがしづらいので、いざとなったら通常認証に戻して切り分け出来るようにしておくのがベター。sshだったら、ldap認証でないユーザーもいるだろうから切り分けしやすいんだけどね。

何はともあれ、sambaはインストールする。そちらの設定内容についてはお任せ。yumで入れればsmb.confを準備するだけ。続いてsambaとldapを連携させるために、smbldap-toolsというパッケージも使うので一緒にインストールする。あとは確認用になるんだけど、認証用dbにtdbファイルを使うので、tdbdumpコマンドが含まれるtdb-toolsを入れておくと便利。もう1つはsmbclientコマンドが使えるsamba-clientも入れておくべし。これは別のノードでもいいけど。

yum install -y samba tdb-tools smbldap-tools samba-client
vi /etc/samba/smb.conf
    :
[global]
    dos charset = CP932
    unix charset = UTF-8
    netbios name = fileserver
    workgroup = DOMAIN.COM
    log file = /var/log/samba/log.%m
    max log size = 50
    security = user
    map to guest = Bad User
    printing = bsd
    unix extensions = no
    wide links = yes
    ntlm auth = yes
    strict locking = no

    passdb backend = ldapsam:ldap://ldap1/,ldap://ldap2/
    ldap suffix = dc=domain,dc=com
    ldap user suffix = ou=users
    ldap group suffix = ou=group
    ldap machine suffix = ou=computers
    ldap admin dn = cn=admin,dc=domain,dc=com
    ldap passwd sync = yes
    ldap ssl = no
    admin users = Administrator
[share]
    path = /data
    force user = test
    force group = test
    guest ok = yes
    vfs objects = recycle
    writable = yes

systemctl start smb nmb
systemctl enable smb nmb

インストールが終わったら、ldapにsamba用のschemaを組み込むため、sambaパッケージに含まれるsamba.ldifを読み込ます。また、sambaにldap管理者アカウントのパスワードを登録する。これにはsmbpasswdコマンドを使う。そして、smbldap-toolsの設定ファイルを生成するために、smbldap-configコマンドを実行する。必要な設定を幾つか確認されるが、基本的にはデフォルト値でよいはず。ldap masterやldap slaveのpasswordだけは正しく入力しておくこと。

ldapadd -Y EXTERNAL -H ldapi:/// -f /usr/share/doc/samba-4.6.2/LDAP/samba.ldif
smbpasswd -W
    :
Setting stored password for "cn=manager,dc=domain,dc=com" in secrets.tdb
New SMB password:
Retype new SMB password:

smbldap-config
    :
. ldap master bind password [] >
    :
. ldap slave bind password [] >

続いて、smbldap-populateコマンドを実行して必要なエントリーを追加する。rootのパスワード設定もあるので対応する。それが終わったら、いよいよ既存ユーザーをsamba対応させる。smbldap-usermodを使うことによって、既存ユーザーのschemaをsamba対応させることができた。さらにsmbldap-passwdでsamba用のパスワードも設定しておく。これでldap側の設定は終わり。クライアント側からネットワーク共有ディレクトリが見えるかどうか確認する。

smbldap-populate
    :
Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password:
Retype new password:

smbldap-usermod -a test
smbldap-passwd test
    :
New SMB password:
Retype new SMB password:

sambaはldapだろうがなかろうが、うまく動作しない場合の調査が非常に面倒。おそらくはクライアント側がwindowsだと思うんだけど、ネットワーク認証をネガティブ・キャッシュしてしまうため、正しい設定に変更してもエラーが出続けてしまったりする。そこでsmbclientを使ってLinux側から動作確認するのも1つの手段。windowsをいちいち再起動させながらの動作確認は極めて非効率なので、Linux側で認証通ったらwindows側も再起動して確認してみるとよい。tdbdumpでpasswordが正しく設定されているかも確認してみよう。

tdbdump /var/lib/samba/private/secrets.tdb
smbclient -U test -L fileserver

それでも認証が通らないようならsmb.confにlog level=3を指定して、認証周りのログをたっぷり出してデバッグする。ログは同様にsmb.confのlog fileパラメータで指定したディレクトリにあるはず。自分もsambaの設定ミスって、なかなかwindows側から見れなかった時は解決までに非常に時間がかかってしまうケースが多い。表示がえらった時は本当に疲労感。。。1つ1つ確実に設定を済ませて、1発で共有ディレクトリが見れるように健闘をお祈ります!

コメントを残す

メールアドレスが公開されることはありません。

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