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サーバ)の起動まで。

  1. /usr/local/share/examples/ja-samba/LDAP/samba.schema を /usr/local/etc/openldap/scheam/samba.schema に複製。/li>
  2. /usr/local/etc/openldap/slapd.conf を編集します。

    # 追加
    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

    なお、こちらの設定ファイルでSSHAにしても、smbldap-toolsの設定ファイルでは生パスワードで保存されるようなのでご注意ください。

  3. /usr/local/etc/openldap/DB_CONFIG.example を /var/db/openldap-data/DB_CONFIG に複製。このファイルは編集しませんでした。

  4. /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のコンフィギュレーション

  1. /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 等は、ログイン時にどう使ってもらうかで変わります。
  2. /usr/local/share/examples/smbldap-tools/smbldap.conf を /usr/local/etc/smbldap-tools/smbldap.conf に複製。
  3. /usr/local/share/examples/smbldap-tools/smbldap_bind.conf を /usr/local/etc/smbldap-tools/smbldap_bind.conf に複製。
  4. /usr/local/share/examples/smbldap-tools/smb.conf を /usr/local/etc/smb.conf に複製。
  5. /usr/local/etc に移動し、nss_ldap.conf.sample を ldap.conf に変更し、lda.confからnss_ldap.confにシンボリックリンク
  6. /usr/local/etc/ldap.conf を編集。

    # 変更
    # base dc=padl,dc=com
    base=dc=foo,dc=bar,dc=jp

smbldap-toolsによる各種設定

  1. smbldap-populate を実行。最後に "UNIX and samba passwords for root" を求められるので、LDAP管理パスワードを入れます。
  2. smbldap-migrate-unix-groups -G /etc/group
  3. smbldap-migrate-unix-accounts -M /etc/master.passwd

sambaの設定

  1. /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

  2. sambaにLDAP管理パスワードを教える

    smbpasswd -w (LDAP管理パスワード)
    (-wオプションを使用するとOK)

su, ssh が可能になるようにする。

  • /etc/nsswitch.conf を変更

    # 変更
    #group_compat: nis
    group_compat: ldap

    # 変更
    #passwd_compat: nis
    passwd_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 が失敗しました。