一人 OpenLDAP 勉強会

なんか色々勉強したいのですが、
続かないからブログで恥をかきながら勉強しようと思い立ちました。

まずは、OpenLDAP から。

  • とりあえず適当に書いてます。
  • そのうち reST で書き直します。
  • Arch でやっていますが Ubuntu だろうが Fedora だろうが殆ど一緒です。

Mac のアドレスブックとか ThunderbirdLDAP の住所録を使えるようにする事が目標です。

# 多分相当簡単

「オープンディレクトリ使えよ馬鹿」はナシでお願いします。

参考資料

LinuxLDAPサーバを構築するには − @IT
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/904ldapserver.html

LDAPサーバへエントリを追加するには − @IT
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/907ldapentrie.html

LDAPにメールアドレス帳データを入力するには − @IT
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/910ldap2mail.html

Server Admin 10.4 Help: LDAP ディレクトリへのアクセスを設定する
http://docs.info.apple.com/article.html?path=ServerAdmin/10.4/jp/c7od24.html

Server Admin 10.4 Help: LDAP 検索とマッピングを設定する
http://docs.info.apple.com/article.html?path=ServerAdmin/10.4/jp/c7od31.html

OpenLDAP ソフトウェア 2.3 管理者ガイド
http://www5f.biglobe.ne.jp/~inachi/openldap/admin23/index-ja.html

OpenLDAP Faq-O-Matic: What is LDAP?
http://www.openldap.org/faq/data/cache/29.html
# なんか 4000 番台なんですけど ... 一新計画?

http://www.opensource.apple.com/darwinsource/10.2.3/OpenLDAP-15.1/AppleExtras/apple.schema
# apple用のスキーマファイル

Re: line 144: AttributeType not found: "audio"
http://www.openldap.org/lists/openldap-software/200105/msg00329.html

懸念点

  • Mac のアドレス帳と Thunderbird のアドレス帳のスキーマって一緒なのか
  • Mac のアドレス帳では日本語タイプが設定できるのでもしかしてスキーマ独特?

お試し

まずは Arch LinuxOpenLDAP サーバ立てて試してみてみる。
別に MacPorts 版でも問題はなかったりしますが Arch の勉強もかねて。

OpenLDAP on Arch Linux

とりあえず検索

$ pacman -Ss openldap
extra/openldap 2.3.38-1
    LDAP Server
extra/openldap-clients 2.3.38-1
    LDAP Client utilities

見つけたのでまずはインストール

$ sudo pacman -S openldap openldap-clients

管理者パスワードを作る必要有り。
ハッシュは必須なんだろうか。

とりあえず man してみた。

$ man slappasswd

CRYPT,MD5,SMD5,SSHA,SHA ということで、ハッシュ必須らしい。
あ、CLEARTEXT があるので、ハッシュ化しなくてもいいらしい。

ちなみにRFC ではユーザパスワードをハッシュ化するとスキーマ違反。
とりあえず CLEARTEXT で入れておくことにする。

スキーマ違反だるいし。

適当にパスワードは pass で設定。

$ sudo slappasswd -h {CLEARTEXT}
New password:
Re-enter new password:
pass

設定ファイルはこの辺

$ sudo vim /etc/openldap/slapd.conf

パスワードはこれでいいのかな。
設定ファイル見られたら終わりだな。

database bdb
suffix "dc=example,dc=com"
rootdn "cn=Manager,dc=example,dc=com"
rootpw pass

アクセス制御

よくわからんが最小設定で。

access to *
  by dn="cn=Manager,dc=example,dc=com" write
  by self write
  by * read

全てのユーザに読み出し許可、書き込みは Manager のみ。

起動

設定が終わったらとりあえず OpenLDAP を起動。
そして一応自動起動するように rc.conf 書き換える。

$ /etc/rc.d/slapd start
:: Starting OpenLDAP     [DONE]
$ sudo vim /etc/rc.conf
DAEMONS=(syslog-ng network netfs crond sshd slapd)

エントリ追加ファイルの作成

管理者とデータベースの LDIF ファイルを作成する。

entries.ldif

dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
dc: example
o: 組織名
description: 組織の説明

dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager <- 管理者名らしい Manager/Admin/Root なんでもいいのかな
description: 説明

エントリファイルを作成したら、ldapadd で追加する。

ldapadd

$ sudo ldapadd -f entries.ldif -x -D "cn=Manager,dc=example,dc=com" -W

ユーザ登録

core.schema と inetorgperson.schema で事足りるらしいので、
LDIF を準備する必要有り。

そのまえに /etc/openldap/slapd.conf に include 追加する。

include /etc/openldap/schema/cosine.schema
include /etc/openldap/schama/inetorgperson.schema

cosine.schema を追加しないと AttributeType not found: "audio" とかいわれますので、要注意。

あ、slapd の再起動必須。

MUST で定義された sn (Sir Name: 姓) と cn (Common Name: 名) だけで OK らしい。

dn: mail=spam@example.com, dc=example, dc=com
objectclass: inetOrgPerson
displayName: Spam Egg
sn: ふぁーすとねーむ
cn: らすとねーむ
mail: spam@example.com

準備したら address.ldif として保存する。

$ sudo ldapadd -f address.ldif -x -D "cn=Manager,dc=example,dc=dom" -W

とりあえずこれで完了

無事表示されるかどうか適当に検索してみる

$ ldapsearch -x -b 'dc=example,dc=com'
# spam@example.com, example.com
dn: mail=spam@example.com,dc=example,dc=com
objectClass: inetOrgPerson
(書略)

こんなのがでれば OK。

日本語がうまいこと表示されないのは仕様なのかな。

アドレスブック設定

  • 環境設定から LDAP を選択します。
  • 名前 ... お任せ
  • サーバ ... ホストなりIPなり
  • 検索ベース ... dc=example,dc=com
  • ポート ... いじってなければ 389 SSL は未使用
  • 検索範囲 ... サブツリー
  • 認証オプションはいりません(読み込みは誰でも出来るので。

グループのディレクトリで、spam とか検索して出てきたら OK

課題&調査

  • 認証は使いましょう
  • SSL 通信にしないと不安ではある
  • LDIF 書くのかなりだるいのでなんとかするべき
  • 日本語の表示周り
  • Manager という名前の付け方

感想

  • エラーメッセージがわかりにくすぎる。
  • スペルミスが命取り
  • 結構簡単
  • 検索だから常に登録されている情報が表示されるわけではない(あたりまえ
  • 認証とSSLを組み合わせれば安心して使えそう。
  • python-ldap を使って簡単に追加とかできるようにしたい。
  • 知ってて当たり前のことを知らなすぎて凹む。