#用語と概念#
・識別名
ディレクトリツリー内のエントリを識別するには、識別名を使う。
ツリー構造の末尾から「,」でつないだものです。
uid=linucuser,ou=education,dc=linuc,dc=jp
・LDIF
ディレクトリ内の情報は、LDIFというテキストファイルで表現する。1行目は識別名です。
dn: uid=linucuser,ou=education,dc=linuc,dc=jp
uid: linucuser
objectclass: posixAccount
cn: linucuser
uidNumber: 700
gidNumber: 700
homeDirectory: /home/linucuser
loginShell: /bin/bash
・オブジェクトクラス
エントリが表す具体的ものの種類や、エントリで利用できる属性を定義したもので、何らかのオブジェクトクラスに属する。
(例)
組織:organization
ユーザーアカウント:account
国:country
・スキーマ
オブジェクトクラスや属性の定義。
LDAPでは様々なスキーマが予め用意されているので、一般的な用途では個別に定義しなくても良い。
/etc/openldap/schemaに格納される。
| スキーマファイル | 説明 |
|---|---|
| core.schema | OpenLDAPで必須のスキーマ |
| cosine.schema | ディレクトリサービスのX.500規格で規定された属性が定義されたスキーマ |
| inetorgperson.schema | アドレス帳など個人情報を扱うためのスキーマ |
| nis.schema | UNIX/Linuxのユーザーやグループ情報を扱うためのスキーマ |
・オブジェクト識別子
オブジェクトラスや属性には、オブジェクト識別子が割り当てられる。
OIDは重複しないようにIANAで管理されている。
・ホワイトページ
個人別電話帳のことです。
作成するには、inetorgperson.schema で定義されている inetOrgPerson を利用するのが一般的です。
| 属性 | 説明 |
|---|---|
| cn | 一般名(common name) |
| sn | 苗字 |
| メールアドレス | |
| o | 組織名 |
| ou | 組織単位名 |
| streetAddress | 住所 |
| postalCode | 郵便番号 |
| telephoneNumber | 電話番号 |
| description | 説明 |
#OpenLDAPの設定#
- デーモンは、slapd です。
- かつては、/etc/openldap/ldap.conf を利用、現在は、/etc/openldap/slapd.d/.ldif 以下に設定が格納され、OpenLDAPサーバーユーティリティコマンドを使って、動的に変更できるようになっている。
| OpenLDAPサーバーユーティリティコマンド | 説明 |
|---|---|
| slapadd | エントリを追加する |
| slapcat | 内容をLDIF形式で出力する |
| slapindex | インデックスを再構築する |
| slappasswd | 暗号化されたパスワードを生成する |
| slaptest | LDAPサーバーの設定をチェックする |
slappasswd でOpenLDAPサーバー管理者パスワードを生成してLDAPデータベースに登録します。
# slappasswd
生成されたパスワードを含むLDIFエントリを作成します。
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: ************
このLDIFエントリを ldapadd でLDAPデータベースに登録します。
# ldapadd -Y EXTERNAL -H ldapi:/// -f setrootpass.ldif
ベースDNを設定します。管理するLDAPエントリの最上位となるのが、ベースDNです。
ここでもLDIFファイルを作成します。設定を変更することになるので、ldapmodify を使います。
dn: cn=ToModify,dc=example,dc=com
changetype: Modify
........
# ldapmodify -x -D cn=config -W -f modify_basedn.ldif
上記のLDAPデータベース管理者パスワードを設定します。(先のサーバー管理者とは別です。)
slappasswd を実行し、そのパスワードを記載したLDIFファイルを作成します。
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: ************
管理者パスワードを登録します。
# ldapadd -Y EXTERNAL -H ldapi:/// -f setMangerpass.ldif
LDAPデータベースのスキーマを拡張します。後にユーザーを登録するのに必要になります。
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
テストとして、Linuxユーザーアカウントを登録してみます。次のようなLDIFファイルを作成します。
dn: dc=thinkit,dc=co,dc=jp
objectClass: dcObject
dc: linuc
............
LDAPデータに登録します。
# ldapadd -x -D "cn=MAnger,d =linuc,dc=jp" -W -f test.ldif
slapcat でLDAPデータベースの内容がLDIF形式で出力されます。
# slapcat
slapadd で、LDIFデータをLDAPデータベースに登録できます。
つまり、slapcatを使って、LDAPデータベースのバックアップをとり、slapaddでリストアできます。
# slapcat > ldapdb.ldif
# slapadd -l ldapdb.ldif
データベースをリストアした後は、slapindex を実行してデータベースのインデックスを再構築できます。
# slapindex
#LDAPのアクセス制御#
olcAccess: to アクセス制御対象 by アクセス許可対象 アクセスレベル
| アクセス制御対象 | 説明 |
|---|---|
| * | すべてのエントリ |
| attrs=属性 | 指定した属性のみ |
| dn=DN | 指定したdnのみ |
| アクセス許可対象 | 説明 |
|---|---|
| * | すべてのユーザー |
| anonymous | 認証前のユーザー |
| users | 認証されたユーザー |
| self | 接続中の認証済みユーザー自身 |
| dn[.範囲]=DN | 指定したDNのユーザー |
| アクセス許可対象の範囲 | 説明 |
|---|---|
| exact | 完全一致 |
| base | ベースDNで指定されたエントリのみ |
| one | ベースDNで指定されたエントリとその直下 |
| sub | ベースDNで指定されたエントリとその下にある全エントリ |
| アクセスレベル | 説明 |
|---|---|
| manage | すべて可能 |
| write | 属性値を変更できる |
| read | 検索結果を参照できる |
| search | 検索できる |
| compare | 比較できる |
| auth | 認証を受けることができる |
| disclose | エラー情報が出る |
| none | アクセスできない |
アクセス制御がされていない場合は、すべてのユーザーがすべてのエントリを読み込むことができる。
ただし、エントリの更新はrootdnだけが可能。
##LDAPクライアント##
| LDAPクライアント | 説明 |
|---|---|
| ldapadd | エントリを追加する |
| ldapsearch | エントリを検索する |
| ldapdelete | エントリを削除する |
| ldapmodify | エントリを変更する |
| ldappasswd | パスワードを変更する |
| LDAPクライアントのオプション | 説明 |
|---|---|
| -h | LDAPサーバを指定する |
| -H | LDAPサーバをURIで指定する |
| -x | SASLを使わずに簡易認証を用いる |
| -p | LDAPのポートを指定する。389 |
| -D | LDAPサーバでの認証に使用するバインドDNを指定する |
| -W | 認証時のパスワードを対話的に入力する |
| -w | 認証に使用するパスワード指定する |
| -f | データファイル指定する |
| -b | LDAPサーバの検索をするベースDNを指定する |
| ldapsearchのオプション | 説明 |
|---|---|
| -b | 検索を開始するベースDNを指定する |
| -L | 検索結果をLDIFv1形式で表示する |
| -LL | 検索結果をコメントなしの形式で表示する |
| -LLL | 検索結果をコメントとLDAPバージョン表示なしで表示する |
| ldapmodifyの属性 | 説明 |
|---|---|
| add | 追加 |
| replace | 修正 |
| delete | 削除 |
| ldappasswdのオプション | 説明 |
|---|---|
| -b | 検索を開始するベースDNを指定する |
| -s | 新しいパスワードを指定する |
| -S | 新しいパスワードを対話的に入力する |