差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ldap [2008/12/16 21:27]
admin
ldap [2012/04/07 10:32] (現在)
ライン 1: ライン 1:
-====== LDAP(slapd) on Debian ====== 
- 
-===== 導入 ===== 
- 
-**slapd**というパッケージになっているのでそれを入れる 
- 
-<​code>​ 
-# apt-get install slapd 
-パッケージリストを読み込んでいます... 完了 
-依存関係ツリーを作成しています... 完了 
-以下の特別パッケージがインストールされます:​ 
-  libiodbc2 libldap-2.3-0 libperl5.8 libslp1 psmisc 
-提案パッケージ:​ 
-  slpd openslp-doc ldap-utils 
-推奨パッケージ:​ 
-  libsasl2-modules 
-以下のパッケージが新たにインストールされます:​ 
-  libiodbc2 libldap-2.3-0 libperl5.8 libslp1 psmisc slapd 
-アップグレード:​ 0 個、新規インストール:​ 6 個、削除:​ 0 個、保留:​ 3 個。 
-2260kB のアーカイブを取得する必要があります。 
-展開後に追加で 6042kB のディスク容量が消費されます。 
-続行しますか [Y/n]? 
-</​code>​ 
- 
-adminのパスワードを聞かれるので適当に 
- 
-<​code>​ 
-あなたの LDAP ディレクトリでの admin エントリのパスワードを入力してくだ 
-さい。 ​                                                                 
-                                                                        
-admin パスワード: ​                                                     ​ 
-</​code>​ 
- 
-とりあえず**dpkg-reconfigure slapd**としておく 
- 
-<​code>​ 
- DNS ドメイン名はあなたの LDAP ディレクトリのベース DN を形成するのに使わ 
- ​れます。foo.bar.org という入力は、ベース DN dc=foo, dc=bar, dc=org とい ​ 
- ​う結果になります。 ​                                                     ​ 
-                                                                          
- DNS ドメイン名: ​                                                         
-</​code>​ 
- 
-ここには通常のfoo.bar.orgなどを入れる。dc=fooなどはいれない事。 
- 
-あとは適当に... 
- 
-===== 適当に追加/​削除してみる ===== 
- 
-==== slapなんとかコマンド ==== 
- 
-とりあえずou=memberとかいう**organizationalUnit**を作成してみる。本当は(基本的に)DNS ドメイン名から生成されるベースDNの**dcObject**をも作成しなくてはならないのだけれど、debianの場合はやらなくても最初から作られている。とにかくどんな内容がslapdに格納されているのか適当に知りたいのであればまずslapcatしてみるべき。**slapなんちゃら**のコマンドはldapプロトコルを経由しないコマンド群で、これらは最初からついてくるものだったりする。逆に**ldapなんちゃら**のコマンドはldapプロトコルを利用する**オンラインな**コマンド群であり、これは**ldap-utils**を導入しないとついてこない。slap*なコマンドはslapd特有であり、ldap*なコマンドは汎用ldapツールであるからであるが、それよりも気をつけないといけないのはslapなんちゃらなコマンドを発行する場合、読取だけならまだしも、書き込みを行う類(slapaddとか)を行う場合は**slapdを止めたオフラインの状態で行った方が無難**事である。(openldap2.1からはオンラインでも可とされているが、オフラインの方が良いかと思う。) 
- 
-またルートでやった場合所有者が変更されてデーモンが正常に動かなくなる事もままある。**Debianでは**、openldapというユーザでslapdのデータを管理しており、その実態は**/​var/​lib/​ldap**にある。念のためlsで確認しておくと良いかも。 
- 
-さて、前置きが長くなりすぎたが、とりあえず現状のslapdの内容をまるっと**ldif**で吐き出すには**slapcat**とすれば良いのであった 
- 
-<​code>​ 
-# slapcat 
-</​code>​ 
- 
--lオプションを渡せばファイルに落としこむ事もできるが、リダイレクトしても良い。要するに基本的にはdumperである。mysqldumpでダンプしたデータがmysqlから投入できるように、ここでも同じ事が出来る。slapcatの内容をバックアップしておくと共に実データもどこぞにバックアップしておくと安全だろう。 
- 
-また横道にそれてしまったけれども、slapcatのldifの内容には非常に沢山のエントリが含まれているのだが、**dn:​ **の値にルートオブジェクトと管理者**description:​ LDAP administrator**が含まれているのがわかるはず。 
- 
-実は管理者に関してはslapdの中に入っている必要は無い。**/​etc/​ldap/​slapd.conf**の**rootdn**で管理者エントリが定義できるし、**rootpw**という設定ファイルにてマスターパスワードを設定する事もできる。あえて設定ファイルにつっこまず、実態のDBにつっこんで**ACL**で管理するのがdebian流のようである。もちろん設定ファイルにこれらを書く事もできる。そして設定ファイルの方が優先される。 
- 
-他に**slapindex**や**slappasswd**などといったコマンドもある。 
- 
- 
-==== ou=membersでも作ってみる ==== 
- 
-前置きがひじょーに長くなったわけだが、いよいよ実際にエントリを追加していく作業に入る。ouとはorganizationalUnitの略で、簡単に言うと「単純にエントリを格納しておくだけの箱」=「フォルダ」というような概念である。ここではmembersというouを作成してみる。エントリの作成、更新、何から何までこの世界ではldifという**ちょっとアレだけど他に変わりもなさそうな**テキストファイルで用を済ます。 
- 
-<​code>​ 
-dn: ou=members, dc=catatsumuri,​ dc=org 
-ou: members 
-objectClass:​ organizationalUnit 
-</​code>​ 
- 
-というようなldifを実際のテキストとして起こすわけである(がそのうち面倒になってくるので何らかのツールを使う事になるのだが、コマンドとldifが基本なので何はともあれ最初は手作業で) 
- 
-さて、このエントリを追加する方法は2種類ある。それはオフラインの**slapadd**を使う場合と、ldapプロトコルを利用した**ldapadd**を利用する方法である。ldapaddはTCPで接続して**バインド**を行って権限を決定するので一般ユーザで行っても良い。slapaddはldapデータベースを直接触るので、然るべき権限が必要となる。 
- 
-というわけでldapaddしてみる事にしよう。「おや、コマンドが無いぞ」って場合は**ldap-utils**いれてやってください... 
- 
-<​code>​ 
-% ldapadd -D cn=admin,​dc=catatsumuri,​dc=org -x -W < members.ldif 
-Enter LDAP Password: 
-adding new entry "​ou=members,​ dc=catatsumuri,​ dc=org"​ 
-</​code>​ 
- 
-ここで重要なコマンドラインオプションが出てきた 
- 
-  * -D: どのエントリでバインドするか 
-  * -x: (SASLを利用しない)簡易認証を行う 
-  * -W: プロンプトから認証を行う(-wにするとコマンドラインにベタ書きする) 
- 
-ldapaddは標準入力から吸いあげるのだが、-lオプションでファイルを指定してやっても良い。 
- 
-==== さらに追加してみる ==== 
- 
-とりあえずouの下にベタっと何かのエントリを置いてみましょ。ともあれ何かではアレなので**inetOrgPerson**あたりでいってみましょう 
- 
-<​code>​ 
-dn: cn=catatsumuri,​ ou=members, dc=catatsumuri,​ dc=org 
-objectClass:​ inetOrgPerson 
-cn: catatsumuri 
-sn: catatsumuri 
-</​code>​ 
- 
-==== 修正してみる ==== 
- 
-mailでも足してみましょう 
- 
-<​code>​ 
-dn: cn=catatsumuri,​ ou=members, dc=catatsumuri,​ dc=org 
-objectClass:​ inetOrgPerson 
-cn: catatsumuri 
-sn: catatsumuri 
-mail: root@catatsumuri.org 
-</​code>​ 
- 
-ldapaddの変わりにldapmodifyを利用すれば該当するdnが**削除されても一度書き直され**ます。 
-がしかしこれは「たまたまそうなった」だけで実は修正用のldifというのがあったりします。 
- 
-例えばmailを消す時はこんな感じ 
- 
-<​code>​ 
-dn: cn=catatsumuri,​ ou=members, dc=private, dc=emit-japan,​ dc=com 
-changetype: modify 
-delete: mail 
-mail: root@catatsumuri.org 
-</​code>​ 
- 
-追加するときはこんな具合でもいいわけです。 
- 
-<​code>​ 
-dn: cn=catatsumuri,​ ou=members, dc=private, dc=emit-japan,​ dc=com 
-changetype: modify 
-mail: root@catatsumuri.org 
-mail: admin@catatsumuri.org 
-</​code>​ 
- 
-changetypeは以下の5つがあります 
- 
-  * add 
-  * delete 
-  * modify 
-  * modrdn 
-  * moddn 
- 
-いずれにしても面倒な話ですね 
- 
-===== もう少しまともなDITを設計してみる ===== 
- 
-あとやっぱり手作業はしんどいのでツールを使っていこうかと思います。ポイントはACLになるであろうと思います。 
- 
  
  
ldap.txt · 最終更新: 2012/04/07 10:32 (外部編集)
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