現在、ローカルの認証と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発で共有ディレクトリが見れるように健闘をお祈ります!