2014年9月23日火曜日

OpenLDAPで access to * に迂闊に by self write をつけてはいけない

先日書いた件の詳細です。このダメダメ設定がどのくらい蔓延しているかというと、Qiitaの記事2本中2本ともにダメな設定になっているくらい蔓延しています。それと、今年か去年出た書籍もダメ設定が紹介されていました。

 何がいけないのか

 access to * によって、uidNumber, gidNumber, homeDirectoryあたりのアクセス権を by self write によってユーザに与えてしまっていることです。ログインしたユーザが、自分自身でldapmodifyコマンドや LDAP で通信するプログラムを使ってこれらの属性を書き換えることができるからです。

何がおこるのか

ldap.conf の設定にもよりますが、ローカルユーザが root のパスワードなどを知らなくても root に昇格できます。

どうしてこんなことになるのか

ローカルユーザがLDAPプロトコルを叩けることを忘れているからでしょう。それと OpenLDAP管理者ガイドのACLの節にby self writeの設定例が載っているのも一因でしょうか。LDAPサーバをディレクトリサーバとして使う分には access to * by self write していても問題ないのですが、認証サーバとして使うにはちゃんと ACL を考えないといけないということが抜け落ちているからでしょう。

pam_min_uidとか設定しているし大丈夫だよね・・・

直接 root になることはできません。しかし、sudoers の設定によっては、gidNumber を変えることで sudo  できるグループに自分で勝手に変更できてしまうかもしれません。そもそも他人のuidに変更できる時点で認証システムとしては失格です。

どう設定すれば良いのか

例えば、Debianの設定例のように loginShell, gecos に限定して by self write を付けるのが一つ目の方法です。二つ目の方法としては、uidNumber, gidNumber, homeDirectory などの勝手に変更されては困る属性を先に read-only に設定した上で by self write を付けることです。どちらかといえば前者の方がおススメですかね。

ダメダメ設定で実際に確認してみたい


0 件のコメント:

コメントを投稿