Table of contents
LDAPデータのユーザ間セキュリティを考慮する
LDAPのデータはいろいろ重要データが入っています。中には人に見られたくないデータもある。なもので、ユーザ間で見られても良いデータ、見られると嫌なデータを分けておこうと思います。
私のポリシーは以下で。
- Managerさんは当然全て読み書き可能
- syncuserさんはレプリカの都合上全て読み出し可能
- パスワードは自分自身は読み書き可能。他ユーザは参照も不可
- 個人アドレス帳も他ユーザは参照不可。個人情報保護の観点で。
- その他の情報は他ユーザも参照可能 ということで行ってみましょう。
LDAPサーバのアクセスリスト
OpenLDAPにはアクセスリストという便利な機能があります。これを用いることで、各ユーザのアクセス制御が可能です。 SLAPD.ACCESSのManページとか見ると良いですかね。構文は
access to <what> [ by <who> <access> [ <control> ] ]+
- <what>
- どの要素を
- <who>
- 誰に
- <access>
- どんなアクセスを許すか
- <control>
- アクセス規則適用のフローを制御します
詳しくは、SLAPD.ACCESSのManページを見てやってください。
さて、アクセスリストのポリシー実現方法を具体的に。
パスワードは自分自身は読み書き可能。他ユーザは参照も不可
access to attrs=userPassword,sambaNTPassword by self write by dn="cn=Manager,dc=example,dc=com" write by dn="cn=syncuser,dc=example,dc=com" read by anonymous auth by * none
さて。userPasswordとsambaNTPasswordは、
- self=自分自身は書き込み可能。
- Managerさんも書き込み可能
- レプリカに使用するユーザは読み込みが可能
- その他の人は認証
個人アドレス帳も他ユーザは参照不可
access to dn.regex="ou=(.+),ou=Address,,dc=example,dc=com" by self write by dn="uid=$1,ou=People,dc=example,dc=com" write by dn="cn=Manager,dc=example,dc=com" write by dn="cn=syncuser,dc=example,dc=com" read by anonymous auth by * none
さてー、今度は記号が出てきましたね…正規表現です。(.+)は、任意の文字列にマッチする、を表現します。つまりうちのポリシーの場合は、ユーザごとにuidと一致したouのアドレス帳を持つ設定にしてますので、対応する文字列が出てきますね。
で、2行飛ばして、uid=$1ってあるのわかりますかね?これは、後方検索といって、先の正規表現にマッチした文字列が代入されます。つまり、あるユーザのアドレス帳は、あるユーザだけ書き込み可能を意味します。つまりあるユーザのアドレス帳は
- 自分は書き込みOK
- あるユーザだけ書き込み可能
- Managerさんも書き込み可能
- レプリカユーザは読み込みだけ可能
- その他の人は認証
その他の情報は他ユーザも参照可能
access to * by self write by users read by anonymous auth by * none
他の情報全ては
- 自分は書き込み可能
- ユーザは参照のみ可能
- その他の人は認証
slapd.confに反映
以上の設定を/etc/openldap/slapd.confに反映します。
access to attrs=userPassword,sambaNTPassword by self write by dn="cn=Manager,dc=example,dc=com" write by dn="cn=syncuser,dc=example,dc=com" read by anonymous auth by * none access to dn.regex="ou=(.+),ou=Address,,dc=example,dc=com" by self write by dn="uid=$1,ou=People,dc=example,dc=com" write by dn="cn=Manager,dc=example,dc=com" write by dn="cn=syncuser,dc=example,dc=com" read by anonymous auth by * none access to * by self write by users read by anonymous auth by * none
このアクセスリストは、上から順に評価されていきますので、順序は誤らないように注意してね。特に一番最後のaccess to *が頭にあると、全てが台無しでございます。気をつけてねー。
Page Info | |
---|---|
Page Name : | Gentoo Linuxな生活/LDAPのセキュリティ設定 |
Page aliases : | None |
Page owner : | maruo |
Can Read | |
Groups : | All visitors |
Users : | All visitors |
Can Edit | |
Groups : | No one |
Users : | No one |
Counter: 5434,
today: 2,
yesterday: 0
Princeps date: 2011-01-10 (Mon) 22:23:09
Last-modified: 2011-01-10 (Mon) 22:27:05 (JST) (5020d) by maruo