LDAPデータのユーザ間セキュリティを考慮する anchor.png

LDAPのデータはいろいろ重要データが入っています。中には人に見られたくないデータもある。なもので、ユーザ間で見られても良いデータ、見られると嫌なデータを分けておこうと思います。

私のポリシーは以下で。

  • Managerさんは当然全て読み書き可能
  • syncuserさんはレプリカの都合上全て読み出し可能
  • パスワードは自分自身は読み書き可能。他ユーザは参照も不可
  • 個人アドレス帳も他ユーザは参照不可。個人情報保護の観点で。
  • その他の情報は他ユーザも参照可能 ということで行ってみましょう。
Page Top

LDAPサーバのアクセスリスト anchor.png

OpenLDAPにはアクセスリストという便利な機能があります。これを用いることで、各ユーザのアクセス制御が可能です。 SLAPD.ACCESSのManページとか見ると良いですかね。構文は

access to <what> [ by <who> <access> [ <control> ] ]+
<what>
どの要素を
<who>
誰に
<access>
どんなアクセスを許すか
<control>
アクセス規則適用のフローを制御します

詳しくは、SLAPD.ACCESSのManページを見てやってください。

さて、アクセスリストのポリシー実現方法を具体的に。

Page Top

パスワードは自分自身は読み書き可能。他ユーザは参照も不可 anchor.png

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さんも書き込み可能
  • レプリカに使用するユーザは読み込みが可能
  • その他の人は認証
Page Top

個人アドレス帳も他ユーザは参照不可 anchor.png

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さんも書き込み可能
  • レプリカユーザは読み込みだけ可能
  • その他の人は認証
Page Top

その他の情報は他ユーザも参照可能 anchor.png

access to *
       by self write
       by users read
       by anonymous auth
       by * none

他の情報全ては

  • 自分は書き込み可能
  • ユーザは参照のみ可能
  • その他の人は認証
Page Top

slapd.confに反映 anchor.png

以上の設定を/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 *が頭にあると、全てが台無しでございます。気をつけてねー。


Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 3657, today: 2, yesterday: 3
Princeps date: 2011-01-10 (Mon) 22:23:09
Last-modified: 2011-01-10 (Mon) 22:27:05 (JST) (3501d) by maruo
ページ内検索

ログイン

ユーザー名:


パスワード:





パスワード紛失

メインメニュー

サブメニュー
自宅鯖計画

Gentoo Linuxな生活

玄箱HGにGentoo格闘記

航空ショーへ行こう

モータースポーツな世界

奥深き写真の世界への誘い

我思う ゆえに我あり



携帯用QRコード