389 Directory Server のアクセス制御を整理します。LDAP では、誰がどの属性を読めるのか、誰が書き込めるのかを明確にしないと、内部基盤として危険な状態になります。
参考
書籍
書籍
参考書籍
LDAP – 設定・管理・プログラミング
LDAP の基礎、ディレクトリ設計、検索、認証連携を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
389 Directory Server シリーズ
前の記事: Ubuntu 22.04 389 Directory Server #3 – ベースエントリーの登録
次の記事: Ubuntu 22.04 389 Directory Server #5 – グループとユーザーの登録
匿名 BIND の扱い
内部 LDAP でも、匿名 BIND を許可するかどうかは明確に決めます。認証基盤として使う場合は、基本的に匿名 BIND を無効化し、参照用 BIND ユーザーを作る方が扱いやすいです。
sudo dsconf ldap01 config replace nsslapd-allow-anonymous-access=off
sudo dsctl ldap01 restartBIND ユーザー
読み取り専用の cn=ro と、書き込み用の cn=rw を分けます。Samba や Postfix が参照する場合、必要な権限だけを持つ BIND ユーザーを使います。
cat <<'EOF' > /tmp/bind-users.ldif
dn: cn=ro,ou=service,dc=example,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: ro
userPassword: change-me-ro
dn: cn=rw,ou=service,dc=example,dc=local
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: rw
userPassword: change-me-rw
EOF
ldapadd -x -H ldaps://ldap.example.local -D 'cn=Directory Manager' -W -f /tmp/bind-users.ldifACI の考え方
ACI は、LDAP ツリーに対するアクセス制御です。ここでは例として、cn=ro に読み取り、cn=rw に書き込みを許可する考え方を示します。
ldapmodify -x -H ldaps://ldap.example.local -D 'cn=Directory Manager' -W <<'EOF'
dn: dc=example,dc=local
changetype: modify
add: aci
aci: (target="ldap:///dc=example,dc=local")(targetattr="*")(version 3.0; acl "read access for ro"; allow (read,search,compare) userdn="ldap:///cn=ro,ou=service,dc=example,dc=local";)
aci: (target="ldap:///dc=example,dc=local")(targetattr="*")(version 3.0; acl "write access for rw"; allow (all) userdn="ldap:///cn=rw,ou=service,dc=example,dc=local";)
EOF確認
ldapsearch -x -H ldaps://ldap.example.local -D 'cn=ro,ou=service,dc=example,dc=local' -W -b dc=example,dc=local dn
ldapsearch -x -H ldaps://ldap.example.local -b dc=example,dc=local dnまとめ
LDAP のアクセス制御は、匿名 BIND、読み取り専用 BIND、書き込み BIND を分けて考えると整理しやすくなります。Samba や Postfix から参照する場合も、必要最小限の権限を持つ BIND ユーザーを使います。
Ubuntu 22.04 389 Directory Server #4 – BIND ユーザーとアクセス制御


