ACL

DITの設計とも密接に関係してくるのがこのACLの設定で、つまるところLDAP設計の一番重要な所とも言える。ACLとはすなわち 「誰が」「何に対して」「何が出来るか」という制御を行うもので、簡単に言えば権限管理である。実はdebianのパッケージでslapdを導入すると、これらのリストが既に設定されている。

# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the
# admin entry below
# These access lines apply to database #1 only
access to attrs=userPassword,shadowLastChange
        by dn="cn=admin,dc=example,dc=com" write
        by anonymous auth
        by self write
        by * none

# Ensure read access to the base for things like
# supportedSASLMechanisms.  Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work
# happily.
access to dn.base="" by * read

# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="cn=admin,dc=example,dc=com" write
        by * read

この設定だとやってみればわかるが、バインドさせなくても全ての項目に関してのreadが可能になっている。

ldapsearch -x -b "dc=example,dc=com" 

とすればババッと引けるはずである(-Hが必要な場合もある)。だが普通に考えて姓名やら住所やらといった個人情報が重に入るであろうldapの全エントリが誰にも彼にも読めていいはずもない。何故全てのエントリがどばっと参照できるかというとこれが原因なので、これを消せばとりあえず見えなくはなる

#access to dn.base="" by * read ←これと
access to *
        by dn="cn=admin,dc=example,dc=com" write
#        by * read ←これ

slapdの再起動を行えばACLが適用される。ただし、この状態だとcn=admin,dc=example,dc=comでバインドしないと全く何も出来ない状態になってしまう。この辺りを踏まえて、「誰に」「何を」「どうさせる」という設計を考えるのは非常に重要でありかつディレクトリサーバ目的に応じて大幅に変わってくるため定石は無い(例えば一人用のディレクトリサーバであれば自分一人分だけを設定すればいいのだろうし、ごく少人数であればもっと簡単だろうけど、この種のサーバはもっと幅広い用途で使われるため、このような限定されたACLにする事は極めてまれである)

注意: この状態だとcn=admin…はwriteしか行えないように見えるが実際はreadも出来る。writeは読み書きを意味している

(かなりスタブ)

slapd/acl.txt · 最終更新: 2014/01/16 16:46 by admin
www.chimeric.de Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0