Samba 3 + OpenLDAP をいまさらやってみる。
SambaとLDAPの連携に使うツールがあるとのことで、以前のものはクリアして、いちからやり直してみましたので、メモ。
酷い「力作」になってしまった…。
LDAPのdcリストは、dc=foo,dc=bar,dc=jpとしました。
インストール
全部portsから、japanese/samba3, net/openldap23-server ("make WITUHOUT_SASL=true install"), net/nss_ldap, secuirty/pam_ldap, net/smbldap-tools の順にインストールしました。
slapd(LDAPサーバ)の起動まで。
- /usr/local/share/examples/ja-samba/LDAP/samba.schema を /usr/local/etc/openldap/scheam/samba.schema に複製。/li>
- /usr/local/etc/openldap/slapd.conf を編集します。
なお、こちらの設定ファイルでSSHAにしても、smbldap-toolsの設定ファイルでは生パスワードで保存されるようなのでご注意ください。
# 追加
include /usr/local/etc/openldap/schema/cosine.schema
include /usr/local/etc/openldap/schema/dyngroup.schema
include /usr/local/etc/openldap/schema/inetorgperson.schema
include /usr/local/etc/openldap/schema/nis.schema
include /usr/local/etc/openldap/schema/samba.schema
include /usr/local/etc/openldap/schema/openldap.schema# 変更
#suffix "dc=my-domain,dc=com"
#rootdn "cn=Manager,dc=my-domain,dc=com"
suffix "dc=foo,dc=bar,dc=jp"
rootdn "cn=Manager,dc=foo,dc=bar,dc=jp"# 変更
rootpw {SSHA}... (slappasswd で表示されるパスワードのダイジェスト)# 変更
# index objectClass eq
index default pres,eq
index objectClass
index uid,uidNumber
index memberUid,gidNumber - /usr/local/etc/openldap/DB_CONFIG.example を /var/db/openldap-data/DB_CONFIG に複製。このファイルは編集しませんでした。
- /etc/rc.conf を編集します。
slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"
slapd_owner="DEFAULT"
smbldap-toolsのコンフィギュレーション
- /usr/local/share/examples/smbldap-tools/configure.pl を実行
- Smbldap-tools Configuration Directory Path を /usr/local/share/examples/smbldap-tools/ に変更。
- workgroup name, netbios name は独自のものを設定。
- ldap suffix は、dc=foo,dc=bar,dc=jp
- group suffix, user suffix, machine suffix Idmap suffix はそれぞれ ou=Groups, ou=Users, ou=Computers, ou=Idmap
- ldap master bind dn は cn=Manager,dc=foo,dc=bar,dc=jp
- ldap master bind password は、 rootpw でセットしたパスワード(生のパスワードであって、ダイジェストではない)
- ldap slave bind dn, ldap slave bind password は、master と同じにしました。
- default login shell 等は、ログイン時にどう使ってもらうかで変わります。
- /usr/local/share/examples/smbldap-tools/smbldap.conf を /usr/local/etc/smbldap-tools/smbldap.conf に複製。
- /usr/local/share/examples/smbldap-tools/smbldap_bind.conf を /usr/local/etc/smbldap-tools/smbldap_bind.conf に複製。
- /usr/local/share/examples/smbldap-tools/smb.conf を /usr/local/etc/smb.conf に複製。
- /usr/local/etc に移動し、nss_ldap.conf.sample を ldap.conf に変更し、lda.confからnss_ldap.confにシンボリックリンク。
- /usr/local/etc/ldap.conf を編集。
# 変更
# base dc=padl,dc=com
base=dc=foo,dc=bar,dc=jp
smbldap-toolsによる各種設定
sambaの設定
- /usr/local/etc/smb.conf を作成
[global]
passdb backend = ldapsam:ldap://127.0.0.1/
passwd program = /usr/local/sbin/smbldap-passwd "%u"
passwd chat = "Changing *\nNew password*" %n\n "*Retype new password*" %n\n"
unix password sync = Yes
add user script = /usr/local/sbin/smbldap-useradd -m "%u"
delete user script = /usr/local/sbin/smbldap-userdel "%u"
add group script = /usr/local/sbin/smbldap-groupadd -p "%g"
add user to group script = /usr/local/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/local/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/local/sbin/smbldap-usermod -g '%g' '%u'
add machine script = /usr/local/sbin/smbldap-useradd -t 0 -w "%u"
ldap admin dn = cn=Manager,dc=foo,dc=bar,dc=jp
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap machine suffix = ou=Computers
ldap suffix = dc=foo,dc=bar,dc=jp
ldap ssl = no
ldap user suffix = ou=Users[homes]
read only = No
browseable = No
oplocks = No - sambaにLDAP管理パスワードを教える
(-wオプションを使用するとOK)
smbpasswd -w (LDAP管理パスワード)
su, ssh が可能になるようにする。
- /etc/nsswitch.conf を変更
# 変更
#group_compat: nis
group_compat: ldap - /etc/pam.d/su の書き換え
auth requisite pam_group.so no_warn group=wheel root_only fail_safe
# この直下だけ追加(順序があるので、前後を書きました)
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth include system - /etc/pam.d/ssh の書き換え
# この直下だけ追加(順序があるので、前後を書きました)
auth sufficient /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth required pam_unix.so no_warn try_first_pass
その他
ユーザ追加は、
smbldap-seradd -a -m (ユーザ名) smbldap-passwd (ユーザ名)
としました。smbpasswd -a だと、su, ssh が失敗しました。