Contents
Overview
LDAP サーバーのアクセス制御設定を行います。389 Directory Server では、cn=Directory Manager 以外のユーザーを使用する場合、ACI 属性の設定が必須となります。このアクセス制御設定はディレクトリ構造にも大きく関連する為、LDAP 設計の観点で大きな要素のひとつです。また、cn=Directory Manager は cn=config を含め LDAP 上の全ての情報にフルアクセスできる為、LDAP 自体の管理以外には使用しないことが推奨されます。
前提条件
- こちらを参考に 389 Directory Server のベースエントリーの登録が完了していること。
匿名 BIND の無効化
匿名 BIND を無効化します。対象の属性は nsslapd-allow-anonymous-access であり、初期値は on(匿名 BIND を許可)です。
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -w password -b cn=config | grep nsslapd-allow-anonymous-access
nsslapd-allow-anonymous-access: on
nsslapd-allow-anonymous-access に割り当て可能な設定値は on | off | rootdse となります。rootdse にすると、匿名 BIND の場合は rootdse 参照のみ許可となります。匿名 BIND を完全に無効化すると、匿名で rootdse 参照を行う LDAP クライアントで問題が発生する場合がある為、rootdse が最もバランスの良い設定値だと思います。
myadmin@ubuntu:~$ cat <<"EOF" | ldapmodify -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -w password
dn: cn=config
replace: nsslapd-allow-anonymous-access
nsslapd-allow-anonymous-access: rootdse
EOF
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -w password -b cn=config | grep nsslapd-allow-anonymous-access
nsslapd-allow-anonymous-access: rootdse
BIND ユーザーの作成
読み取り専用の DN (ro) と書き込みが可能な DN (rw) を作成します。これらの DN のアクセス制御を行う ACI 属性は dc=si1230,dc=com に記載します。
myadmin@ubuntu:~$ cat <<"EOF" | ldapadd -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -w password
dn: cn=ro,dc=si1230,dc=com
objectClass: person
cn: ro
sn: ro
userPassword: password
dn: cn=rw,dc=si1230,dc=com
objectClass: person
cn: rw
sn: rw
userPassword: password
EOF
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -w password -b dc=si1230,dc=com
アクセス制御
ACI 属性を追加します。ACI 属性は下位ディレクトリに継承されます。本稿では dc=si1230,dc=com に対して ACI 属性を設定しています。
- cn=ro,dc=si1230,dc=com は read,search,compare を許可します。
- cn=rw,dc=si1230,dc=com は ALL を許可します。
- ユーザーに自身のパスワード変更を許可しています。self は自身の DN 内の情報のみアクセスできます。この例では自身の DN 内の userPassword の書き込み(変更)のみ許可しているため閲覧もできません。
myadmin@ubuntu:~$ cat <<"EOF" | ldapmodify -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -w password
dn: dc=si1230,dc=com
add: aci
aci: (targetattr=*)(version 3.0;acl"";allow(read,search,compare)userdn="ldap:///cn=ro,dc=si1230,dc=com";)
-
add: aci
aci: (targetattr=*)(version 3.0;acl"";allow(all)userdn="ldap:///cn=rw,dc=si1230,dc=com";)
-
add: aci
aci: (targetattr=userPassword)(version 3.0;acl"";allow(write)userdn="ldap:///self";)
EOF
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D "cn=Directory Manager" -w password -b dc=si1230,dc=com -s sub "(aci=*)" aci
正常性確認
cn=ro,dc=si1230,dc=com
dc=si1230,dc=com の参照が可能であることを確認します。
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D cn=ro,dc=si1230,dc=com -w password -b dc=si1230,dc=com
dc=si1230,dc=com に書き込みできないことを確認します。
myadmin@ubuntu:~$ cat <<"EOF" | ldapadd -H ldap://ldap.si1230.com -D cn=ro,dc=si1230,dc=com -w password
dn: cn=test,dc=si1230,dc=com
objectClass: person
cn: test
sn: test
userPassword: password
EOF
cn=config が参照できないことを確認します。cn=features,cn=config の一部は仕様で表示されますが、特に問題なるような内容ではありません。気になるようなら検証の上、cn=features,cn=config の ACI を調整すると良いでしょう。
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D cn=ro,dc=si1230,dc=com -w password -b cn=config
cn=rw,dc=si1230,dc=com
dc=si1230,dc=comの 参照が可能であることを確認します。
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D cn=rw,dc=si1230,dc=com -w password -b dc=si1230,dc=com
dc=si1230,dc=com に書き込み可能であることを確認します。
myadmin@ubuntu:~$ cat <<"EOF" | ldapadd -H ldap://ldap.si1230.com -D cn=rw,dc=si1230,dc=com -w password
dn: cn=test,dc=si1230,dc=com
objectClass: person
cn: test
sn: test
userPassword: password
EOF
cn=config が参照できないことを確認します。説明は前述の通りです。
myadmin@ubuntu:~$ ldapsearch -H ldaps://ldap.si1230.com -D cn=rw,dc=si1230,dc=com -w password -b cn=config
匿名 BIND
匿名 BIND で RootDSE が参照可能であることを確認します。
- 匿名 BIND では -x で簡易認証にする必要があります。
- -b オプションに空の文字列 “” を指定することで、LDAP サーバーのルート DSE が検索のベースとなります。
- -s base オプションでベースオブジェクトのみを対象に検索することを指定しています。”(objectClass=*)” フィルターでルート DSE に含まれるすべてのオブジェクトを取得しています。
myadmin@ubuntu:~$ ldapsearch -x -H ldaps://ldap.si1230.com -b "" -s base "(objectClass=*)"
匿名 BIND で dc=si1230,dc=com が参照できないことを確認します。
myadmin@ubuntu:~$ ldapsearch -x -H ldaps://ldap.si1230.com -b dc=si1230,dc=com
匿名 BIND で dc=si1230,dc=com が参照できないことを確認します。
myadmin@ubuntu:~$ ldapsearch -x -H ldaps://ldap.si1230.com -b cn=config
次のステップ
389 Directory Server LDAP サーバー構築 #5 グループとユーザーの登録