|
|
|
|
|
|
|
OpenLDAPの使用方法とスキーマ |
|
|
ここでは、OpenLDAPの利用方法やデータ定義ファイルのスキーマについての、一般的なことを解説します。
|
OpenLDAPの設定
|
| OpenLDAPの設定は、slapd.confで行います。主な設定項目は以下の通りです。 |
| 設定値 | 解 説 |
| include | スキーマ定義情報を取りこみます。 LDAPのRFCで定義されている属性名やobjectClassが使用できるようになります |
| pidfile | PIDファイルの保存場所 |
| databese | バックエンドDBの設定、2.0.xはldbm、2.1.xはbdbです。 |
| suffix | 該当DBで使用するDNサフィックスを指定します。 このサフィックスはLDAPサーバのネーミングコンテキストとして使用されます。 DIT設計に合わせて変更してください。 |
| rootdn | 特権ユーザーでDBの全アクセス権を有します。このユーザは実際にDBに存在する必要ありません |
| rootpw | 特権ユーザーのパスワード(暗号化パスワードの利用推奨) |
| directory | LDBMまたはBDBの置き場所を指定します。 複数のdbを使用する場合は、別々のディレクトリを指定します |
| index | インデックスを指定します (DBですから、index付けて検索性能を上げるんです。付けすぎには注意) indexを編集したらコマンドでindexを再構築してください。 デフォルトは、objectClass eq |
|
例)slapd.confの設定(rootdn = o=example,c=JP)
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
pidfile /var/run/slapd/slapd.pid
database bdb
suffix "o=exmaple,c=JP"
rootdn "cn=Manager,o=example,c=JP"
rootpw manager
directory "/var/lib/ldap"
index objectClass eq
|
暗号化パスワードの求め方
OpenLDAP付属のlsappasswdコマンドで、{CRYPT},{MD5},{SMD5},{SSHA},{SHA}の文字列が生成できます。
slappasswd -h {SSHA} -s パスワード文字列
*-h オプションでハッシュ形式をします。
標準出力にパスワード文字列のハッシュ化された物({SSHA}BhJllfHnfkedなど)が表示されますので、それをそのまま利用します。
indexの設定
indexを設定し、効率良くデータを検索できるように設定します。
indexは、pres:存在、eq:等価性、sub:部分文字列、から指定します
例えば、mail属性にindexを設定する場合は、
index mail pres,eq,sub と指定します。
indexの設定を変更したら、indexの再構築を行ってください。
slapindex -v -b o=example,c=JP -f slapd.conf
|
| OpenLDAPのツリー構造の設計 |
OpenLDAPを利用する場合は、まずツリー構造の設計をする必要があります。今回はわかりやすく、組織階層を利用し作成した例を示します。
この例は、exampleという日本にある会社を示しています。
左側が組織の階層図で、右側がそれをOpenLDAPのツリー構造に置き換えた物です。また、このツリーのTOPが、slapd.confの"suffix"に当てはまります。
組織の階層図
-----------
| example |
-----------
| |
-------- -------
|総務部| |営業部|
-------- -------
| |
-------- -------
| 社員 | | 社員 |
-------- -------
|
OpenLDAPのツリーに置き換えた場合。
--------------------
|dn:o=example,c=JP |
--------------------
| |
--------------------------- ----------------------------
|dn:ou=somu,o=example,c=JP| |dn:ou=eigyo,o=example,c=JP|
--------------------------- ----------------------------
| |
-------------------------------------- --------------------------------------
|dn:uid=社員ID,ou=somu,o=example,c=JP| |dn:uid=社員ID,ou=eigyo,o=example,c=JP|
-------------------------------------- --------------------------------------
|
*もし組織がドメインを保有しているなら、dc(ドメイン)を利用し、表現した方が良いかもしれません。
例えば、example.jpドメインを保有しているなら、rootdnは、dc=example,dc=jpになります。
ここで利用されている、'c'や'o','uid'などの説明をしておきます。
これは、OpenLDAPのスキーマにより定義された要素を示しています。今回説明するものや代表的な物を以下の示します。
dn = ツリーの識別名
o = organization。会社(組織)名を意味する
ou = organization unit。会社(組織)の一部署(部局)を意味する。
c = country。国を表す。
cn = ラストネーム
sn = ファーストネーム
uid= ユーザID
userPassword = uidに対するパスワード
これは簡単なツリー構造です。イメージをつかんでください。(ツリー構造は自由に作成してかまいません。)
今度は、このツリー構造を利用し、実際にデータを登録してみます。
| | OpenLDAPへの登録データ作成 |
OpenLDAPにデータ登録する場合は、ldifファイルを作成ます。ldifファイルはutf-8エンコードで作成してください。
では、実際に、上記のツリー構造に合わせた'example.ldif'ファイルを作成してみましょう。
#TOPツリー用
dn: o=example,c=JP
objectClass: organization
o: example
#部署ツリー用
dn: ou=somu,o=example,c=JP
objectClass: organizationalUnit
ou: somu
dn: ou=eigyo,o=example,c=JP
objectClass: organizationalUnit
ou: eigyo
#社員ツリー用
dn: uid=u001,ou=somu,o=example,c=JP
objectClass:inetOrgPerson
cn: takesi
sn: yamada
uid: u001
userPassword: p-yamada
dn: uid=u002,ou=eigyo,o=example,c=JP
objectClass:inetOrgPerson
cn: taro
sn: maeda
uid: u002
userPassword: p-maeda
dn: uid=u003,ou=eigyo,o=example,c=JP
objectClass:inetOrgPerson
cn: dai
sn: ito
uid: u003
userPassword: p-ito
|
TOPツリーは、slapd.confのsuffixに該当します。
o=組織(会社)要素は、オブジェクトクラス'organization'で定義されていますので、
オブジェクトクラスを指定します。
'organization'では、'o'は必項属性ですので、'o: example'指定しています。
部署用ツリーです。
ou=部署(部局)は、'organizationalUnit'で定義されています。
'organizationalUnit'では、'ou:'が必項属性です。
ここでは、総務部と営業部をそれぞれ作成しています。
社員用ツリーです。
uid=ユーザIDは、'inetOrgPerson'で定義されています。
'uid''sn''cn'は、'inetOrgPerson'の必項属性です。
uidには、重複しないよう社員IDなどを利用するのがいいでしょう。
ここでは、総務部の山田さんと、営業部の前田さん、伊藤さんのデータを作成してあります。
また、userPasswordは、slapd.confのrootpw同様、暗号化パスワードを利用できます。
|
以上がこのツリーのデータ登録に利用する'example.ldif'ファイルです。このファイルを利用しコマンドで登録します。
|
| OpenLDAPのデータ登録や検索、削除 |
データ操作には、いくつか利用できるコマンドがありますが、今回はldap***というコマンドを紹介します。
このコマンドは、OpenLDAPを起動した状態で利用でします。
なお、環境は、suffix='o=example,c=JP'、rootdn='cn=Manager,o=example,c=JP'、rootpw='manager'とします。
1.データの追加
先程作成した、example.ldifファイルを利用し登録します。
ldapadd -x -h localhost -D "cn=Manager,o=example,c=JP" -w manager -f example.ldif
2.データの検索
uidの末尾が'01'のデータを検索します。
ldapsearch -x -h localhost -b "o=example,c=JP" -s sub "(uid=*01)"
3.データの削除
'dn : uid=u003,ou=eigyo,o=example,c=JP'のデータを削除します
ldapdelete -x -h localhost -D "cn=Manager,o=example,c=JP" -w manager "uid=u003,ou=eigyo,o=example,c=JP"
4.データの更新
更新は更新用ldifファイルを作成し行います。
ldapmodify -x -h localhost -D "cn=Manager,o=example,c=JP" -w manager < modify.ldif
modify.ldifの書式
1.dn:を指定します。
2.ldifのタイプをmodifyで指定します。
3.属性値を置き換える場合は"replace"、追加する場合は"add"、を指定し、属性と値を記入します。
4.削除する場合は"delete"で削除する属性を指定します。
dn: uid=u001,ou=somu,o=example,c=JP
changetype: modifty
replace: sn
sn: shimizu
-
add: homeDirectory
homeDirectory: /home/shimizu
-
delete: telephoneNumber
|
5.GUIアプリケーション
javaで作成されたGUIのアプリケーション、LDAP Browser/Editerは便利です。
http://www.iit.edu/~gawojar/ldap/で配布されています。
|
| OpenLDAPのスキーマファイル |
スキーマファイルは、/etc/ldap/schema/内に、"***.schema"ファイルで定義されており、
この中で定義されたオブジェクトと要素に沿ってツリー構造を作成して行きます。また、目的にあった要素が見つからない場合は、
ユーザ自らが独自のスキーマファイルを作成し利用することもできます。
OpenLDAPで用意されているスキーマ
| core.schema | OpenLDAPのコアスキーマ(必項) |
| cosine.schema | Cosine and Internet X.500スキーマ(RFC 1274) |
| inetorgperson.schema | InetOrgPersonスキーマ(RFC 2798) |
| nis.schema | Network Infomation Servicesスキーマ(RFC 2307) |
| java.schema | Javaスキーマ(RFC 2713) |
| corba.schema | CORBAスキーマ(RFC 2714) |
| openldap.schema | OpenLDAP Projectの実験用スキーマ |
| misc.schema | その他実験用スキーマ |
|
schemaファイルの書式
|
*データ属性の定義
attributetype (オブジェクト識別子 NAME '属性名'
DESC '説明'
EQUALITY 照合規則
SYNTAX データ型 キーワード)
|
|
| オブジェクト識別子 | ローカルで利用する場合は、1.1台が利用できます。 |
| 属性名 | 属性の名称です。 |
| 説明 | 属性の説明です。 |
| 照合規則 | 照合規則を設定します |
| データ型 | データ型を設定します。 |
| キーワード | データに関するOption |
|
*オブジェクトクラス定義
objectClass (オブジェクト識別子 NAME 'オブジェクト名'
DESC '説明'
SUP 基底オブジェクトクラス
MUST ( 必項属性 )
MAY ( オプション属性 ))
|
|
| オブジェクト識別子 | ローカルで利用する場合は、1.1台が利用できます。 |
| オブジェクト名 | オブジェクトの名称です。 |
| 説明 | オブジェクトクラスの説明です。 |
| 基底オブジェクトクラス | ここに指定したオブジェクトクラスの属性を利用できます。(継承) |
| 必項属性 | 必ず利用しなければ行けない属性を指定(複数指定する場合は、$ で区切ります) |
| オプション属性 | 利用できる(しなくても良い)属性を指定(複数指定する場合は、$ で区切ります) |
|
以下の表は、スキーマで利用するデータ定義です。
OIDの割り当て(1.1台)
| OID | 割り当て |
| 1.1 | 組織に割り当てられるOID |
| 1.1.1 | SNMP要素 |
| 1.1.2 | LDAP要素 |
| 1.1.2.1 | 属性型群 |
| 1.1.2.1.1 | 単一の属性 |
| 1.1.2.2 | オブジェクトクラス群 |
| 1.1.2.2.1 | 単一のオブジェクトクラス |
照合規則(EQUALITY)
等価照合規則
| OID | 名前 | 説明 |
| 2.5.13.0 | objectLdentiferMatch | OID |
| 2.5.13.1 | distinguishedNameMatch | DN |
| 2.5.13.2 | caseIgnoreMatch | 英大小文字区別なし、スペース無視 |
| 2.5.13.5 | caseExactMatch | 英大小文字区別あり、スペース無視 |
| 2.5.13.8 | numericStringMatch | 数値文字列 |
| 2.5.13.13 | booleanMatch | 真偽値(TRUE/FALSE) |
| 2.5.13.17 | octetStringMatch | 任意のオクテット文字列 |
| 2.5.13.23 | uniqueMemberMatch | オプションでUIDの付いた名前 |
| 1.3.6.1.4.1.1466.109.114.1 | caseExactIA5Match | ASCII文字列の英大小文字区別あり、スペース無視 |
| 1.3.6.1.4.1.1466.109.114.1 | caseIgnoreIA5Match | ASCII文字列の英大小文字区別あり、スペース無視 |
順序照合規則
| OID | 名前 | 説明
| | 2.5.13.3 | caseIgnoreOrderingMatch | 英大小文字区別なし、スペース無視 |
| 2.5.14.6 | caseExactOrderingMatch | 英大小文字区別あり、スペース無視 |
| 2.5.13.15 | numericStringOrderingMatch | 数値文字列 |
部分文字列照合規則
| OID | 名前 | 説明 |
| 2.5.13.4 | caseIgnoreSubstringsMatch | 英大小文字区別なし、スペース無視 |
| 2.5.13.7 | caseExactSubstringsMatch | 英大小文字区別あり、スペース無視 |
| 2.5.13.10 | numericStringSubstringsMatch | 数値文字列 |
データ型(SYNTAX)
| OID | 説明 |
| 1.3.6.1.4.1.1466.115.121.1.7 | TRUE or FALSE |
| 1.3.6.1.4.1.1466.115.121.1.12 | Dn形式の文字列 |
| 1.3.6.1.4.1.1466.115.121.1.15 | UTF-8文字列 |
| 1.3.6.1.4.1.1466.115.121.1.26 | ASCII文字列 |
| 1.3.6.1.4.1.1466.115.121.1.27 | 整数値 |
| 1.3.6.1.4.1.1466.115.121.1.28 | JFIFエンコードされたJPEG画像 |
| 1.3.6.1.4.1.1466.115.121.1.34 | DnおよびUID |
| 1.3.6.1.4.1.1466.115.121.1.36 | 数値文字列 |
| 1.3.6.1.4.1.1466.115.121.1.38 | OID形式の文字列 |
| 1.3.6.1.4.1.1466.115.121.1.40 | 任意のオクテット文字列 |
| 1.3.6.1.4.1.1466.115.121.1.41 | 住所([$]で区切ったUTF-8文字列) |
| 1.3.6.1.4.1.1466.115.121.1.44 | 表示可能な文字列 |
| 1.3.6.1.4.1.1466.115.121.1.50 | 電話番号 |
キーワード
| 値 | 説明 |
| SINGLE-VALUE | 単一値のみ持てる |
| NO-USER-MODIFICATION | サービス利用者が値を更新することを禁止 |
|
|
|
|
|
|
|
|
Producted by Tomoya Sakurai
|
|
|