玄箱X4/サーバー設定/slapd
出典: Fukudat.com
LDAP server
目次 |
1 インストール
apt-getでインストールする.
# apt-get install slapd ldap-utils nscd sasl2-bin
インストールの途中でなぜかadminのパスワードだけ聞かれて終わる.
dpkg-reconfigureを実行してみる.
# dpkg-reconfigure slapd
すると改めて以下のことを聞かれる.
- DNS domain (fukudat.com)
- organization name (fukudat.com)
- adminのパスワード (内緒)
- LDAPv2 protocolを使うか (yes)
適当に答える(括弧内は私の設定).もし聞かれなかったら,
これが完了すると,/etc/ldap の下に設定ファイルができていて,既に slapd が起動しているはず.
# ldapsearch -x
を実行して動いていることを確認する.
2 設定
2.1 SASL対応
/etc/default/saslauthd を編集して,以下の行を追加する.
START=yes MECHANISMS="pam"
/etc/ldap/slapd.conf を編集して,以下の行を追加する.
# sasl
sasl-realm fukudat.com
sasl-host ldap1.fukudat.com
sasl-regexp uid=admin,cn=fukudat.com,cn=.+ \
cn=admin,dc=fukudat,dc=com
sasl-regexp uid=(.*),cn=fukudat.com,cn=.+ \
uid=$1,ou=People,dc=fukudat,dc=com
sasl-secprops none
#password-hash {CLEARTEXT}
#password-hash {SHA}
password-hash {MD5}
ldap1.fukudat.comはLDAPサーバーのホスト名.
/etc/ldap/ldap.conf を編集して,以下の行を追加する.
BASE dc=fukudat,dc=com host ldap1.fukudat.com
ローカルに管理されるユーザ情報が入る /etc/sasldb2 というファイルのグループを一時的に変更して,slapdが認証情報を読むことができるようにする(後でこのファイルは削除する).
# ls -l /etc/sasldb2 -rw-r----- 1 root root 12288 Feb 15 11:29 /etc/sasldb2 <-- これだとopenldapユーザで動いているslapdには読めない # chgrp openldap /etc/sasldb2 # ls -l /etc/sasldb2 -rw-r----- 1 root openldap 12288 Feb 15 11:29 /etc/sasldb2 <-- これでslapdが読めるようになった
次のコマンドで saslauthd を起動する
/etc/init.d/saslauthd start
管理者ユーザのパスワードを作成する
# saslpasswd2 -c admin@fukudat.com Password: xxxx Again (for verification): xxxx
SASLの認証でLDAPがサーチできるかテスト
# ldapsearch -U admin "(cn=admin)" SASL/DIGEST-MD5 authentication started Please enter your password: xxxx <-- 上で設定したパスワード SASL username: admin@fukudat.com SASL SSF: 128 SASL data security layer installed. # extended LDIF # # LDAPv3 # base <dc=fukudat,dc=com> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # fukudat.com dn: dc=fukudat,dc=com objectClass: top objectClass: dcObject objectClass: organization o: fukudat dc: fukudat # admin, fukudat.com dn: cn=admin,dc=fukudat,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 4 result: 0 Success # numResponses: 3 # numEntries: 2
adminのパスワードをLDAPに登録するために,次の内容の/tmp/admin_password.ldif を作成.
dn: cn=admin,dc=fukudat,dc=com changetype: modify replace: userPassword userPassword: xxxxxx <-- パスワード
次のコマンドを実行
# saslpasswd2 -u fukudat.com -c admin # ldapmodify -U admin -f /tmp/admin_password.ldif # rm /etc/sasldb2 <-- ローカルのパスワードDBは削除 # rm /tmp/admin_password.ldif <-- パスワードが入っているので削除
これで admin のパスワードがLDAPに入った.次のコマンドで確認できる.
# ldapsearch -U admin
2.2 PAMの設定
インストール
# apt-get install libpam-ldap libpam-cracklib
インストール中に色々聞かれるので適当に答える. 答えた結果は /etc/pam_ldap.conf, /etc/pam_ldap.secret に書き込まれる. やり直したければ,
# dpkg-reconfigure libpam-ldap
を実行する.
この後は失敗するとログインができなくなってしまう.万一失敗しても元に戻せるように,/etc/pam.dの中身をバックアップし,LDAP対応のpam.dを別ディレクトリ (/etc/pam.d.ldap) に作ってシンボリックリンクを張ることにする.
# cd /etc # mv pam.d pam.d.orig # mkdir pam.d.ldap # cp -p pam.d.orig/* pam.d.ldap/ # cp -p /usr/share/doc/libpam-ldap/examples/pam.d/* pam.d.ldap/ # ln -s pam.d.ldap pam.d
/usr/share.../examples/pam.d/の例には pam_pwdb.so がたくさん使われているが Debian にはない. pam_unix.so と同じと思われるので,エラーメッセージを防ぐために,以下のようにして修正する.
# cd /etc/pam.d # for i in *; do > echo $i > ed -s $i <<'EOF' > 1,$s/pwdb/unix/g > w > EOF > done
2.3 nsswitchの設定
インストール
# apt-get install libnss-ldap
インストール中,LDAPの管理者とそのパスワードを聞かれるので答える. 設定内容は,/etc/libnss-ldap.conf, /etc/libnss-ldap.secret に書き込まれる. やり直すなら
# dpkg-reconfigure libnss-ldap
/etc/nsswitch.confを編集.
passwd: files ldap group: files ldap shadow: compat
ここまででとりあえずリブートしておいたほうがよいかも.
2.4 sambaのLDAP化
インストール
# apt-get install smbldap-tools
3 コマンドリファレンス
- 変更
$ ldapmodify -D cn=admin,dc=fukudat,dc=com -W -f input.ldif
- -D ... distinguish name を指定
- -W ... password 入力をプロンプト (-w だとコマンドライン引数でパスワードを指定)
- -f ... ldif形式のファイルを指定
- LDIFファイルの中身
dn: uid=fukudat,ou=People,dc=fukudat,dc=com # 変更するエントリ changetype: modify # 変更することを指示 replace: sambaPwdLastSet # アップデートは "replace". 他に "add", "delete" sambaPwdLastSet: 1304787137 # 新しい値
