玄箱X4/サーバー設定/slapd

提供: fukudat
移動: 案内検索

LDAP server.

目次

インストール

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

を実行して動いていることを確認する.

設定

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

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

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

ここまででとりあえずリブートしておいたほうがよいかも.

sambaのLDAP化

インストール

# apt-get install smbldap-tools

コマンドリファレンス

一般の属性の変更

$ 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                   # 新しい値

shadowMaxの変更

$ smbldap-usermod --shadowMax 65535 fukudat

これで fukudat, People, fukudat.com の shadowMax が 65535 に変更される.

参考文献

個人用ツール
名前空間

変種
操作
案内
ツールボックス