LDAP概要

LDAP (Lightweight Directory Access Protocol)はディレクトリ・サービスに接続するために使用するプロトコル (DAP)の一つ。ディレクトリに対する対話的な読込/書込アクセスを提供する管理アプリケーションやブラウザアプリケーションを特に対象とする。

LDAPの基本アクセス

やりとりするデータは原則LDIF形式。(LDAP Data Interchange Format)
簡単な仕様と操作は以下の通り。
  • テキスト形式:文字コードはUTF-8
  • バイナリ形式:base64でエンコード
  • エントリ
    • フォーマット:「属性:データ」
    • 開始:「dn:識別名(Distinguished Name)」
    • 終了:空白行

方法 説明
ldapadd エントリ追加
ldapdelete エントリ削除
ldapmodify エントリ更新
ldapsearch 検索

LDAPの用途

  • Linuxユーザの統合管理(Mail, Ftp, Telnet, Proxy, sshなど)
  • Samba/Windowsユーザの統合管理
  • Webサーバのアクセス制御
  • 電話帳、メールアドレス帳
  • PKI(公開キー)の保管場所

LDAPのスキーマ

LDAPのディレクトリサービスのモデルはエントリを基にしている。情報は階層ツリー構造で構成。
  • エントリ
    • 識別名 (Distinguished Name : DN)というグローバルに一意な名前を持った属性の集まり
    • DNはエントリを一意に参照するために利用
    • DNは相対識別名 (Relative Distinguished Name : RDN)というエントリ自体の名前に上位のエントリの名前を連結したものから構成
  • エントリの属性
    • "型"と"値"から構成
    • "型"には覚えやすい名前がついている。
例えば一般名 (Common Name)には"cn"、電子メールアドレス (email address)には"mail"という名前がついている。

  • objectClass
    • エントリに必要な属性と保有できる属性を制御する特殊な属性
    • 属性objectClassの値は、エントリが従わなければならないスキーマ規則を決定する。


登録済みスキーマ (OpenLDAPのObjectClass)

LDAPでは既存の登録済みスキーマ(ObjectClass)を利用するのが一般的。
  • core.schema
    • OpenLDAPの核となるスキーマで以下のRFCで定義されたスキーマが定義されている。
    • これだけでは何もできないが、CNやOUなど他のスキーマを使うための基本部部分が定義されている。
      • RFC 2252/2256 (LDAPv3)
      • RFC 1274 (uid/dc)
      • RFC 2079 (URI)
      • RFC 2247 (dc/dcObject)
      • RFC 2587 (PKI)
      • RFC 2589 (Dynamic Directory Services)
      • RFC 2377 (uidObject)
  • cosine.schema
    • X.500やX.400で規定されたアトリビュートなど以下のようなものが定義されている。
      • RFC1274で定義されるhost,manager, documentIdentifierなど
      • DNSレコードであるAレコード、MXレコード、NXレコード、SOAレコード、CNAMEレコード
  • inetorgperson.schema
    • インターネット特にメールアドレス帳のためのスキーマで以下のようなものが定義される。
  • misc.schema
    • mailLocalAddressやnisMailAliasなどメールサーバが使うスキーマが定義される。
  • nis.schema
    • posixAccountやposixGroupなどLinux/UNIXのユーザ認証統合に必須なスキーマが定義される。
    • NISをLDAPに置き換えるのに必要なスキーマも定義されている。
  • samba.schema
    • このスキーマはOpenLDAPではなく、Sambaパッケージによって提供されるが、Sambaを使ってWindows/UNIXのユーザ認証統合に必須なスキーマが定義される。
    • WindowsドメインをSambaに置き換えるのに必要なスキーマも定義されている。
  • java.schema
    • javaClassName, javaCodebaseなどJava Object (RFC 2713)を扱うためのスキーマが定義される。

OpenLDAPサーバ

設定ファイル概要

  • サーバ用設定ファイル
    • /etc/openldap/slapd.conf
  • クライアント用設定ファイル
    • NSS,PAM用:/etc/ldap.conf
    • ldapadd等の管理コマンド用:/etc/openldap/ldap.conf

slapd.confの注意
OpenVPN2.3よりConfiguration Backendという方式になり、従来slapd.confへ記述していた設定内容をデータベース化した。つまり設定内容をすべてLDIFファイルに記述して、ldapaddコマンドによって設定するようになった。従ってデフォルトではslapd.confは無い。

サーバ設定

以前の OpenLDAP リリースと違い、2.3 では slapd の実行時設定が完全に LDAP で可能であり、標準の LDAP 操作により LDIF を使って管理できます。 LDAP 設定エンジンでは slapd の実行時に設定変更が可能です。一般には設定を反映するためのサーバ再起動も必要ありません。
古いスタイルの slapd.conf(5) もまだサポートしていますが、実行時の変更が反映されるようにするには新しい slapd.d(5) 形式に変換しておかなければなりません。古いスタイルの設定では、普通は /usr/local/etc/openldap/slapd.conf としてインストールされる単一のファイルを使っていましたが、新しいスタイルでは設定を格納するために slapd バックエンドデータベースを使います。
設定データベースは普通 /usr/local/etc/openldap/slapd.d ディレクトリに置かれます。


サーバ設定手順

OpenLDAPの設定は、/etc/openldap/slapd.conf を作成し、slaptestコマンドで、/etc/openldap/slapd.d/以下に設定ファイルを変換・作成します。

設定の初期化

デフォルト設定の削除
# rm -rf /etc/openldap/slapd.d/*

DB_CONFIGのコピー
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

ファイルオーナの変更
# chown -R ldap.ldap /var/lib/ldap

/etc/openldap/slapd.conf の作成


設定項目 設定値
include 読み込むスキーマ定義を指定します。読み込んだスキーマから、LDAPのRFCで定義されている属性名やobjectClassが使用できるようになります。
pidfile PIDファイルの保存場所
databese バックエンドDBの指定
suffix このLDAPのrootサフィックスを指定します。このサフィックスはLDAPサーバのネーミングコンテキストとして使用されます。DIT設計に合わせて変更してください。
rootdn 特権ユーザーでDBの全アクセス権を有する、ルートユーザサフィックスを設定します。
rootpw 特権ユーザーのパスワード(暗号化パスワードの利用推奨)
directory 利用するバックエンドDBの置き場所を指定します。
index インデックスを指定します(DBですから、index付けて検索性能を上げるんです。)indexを編集したらコマンドでindexを再構築してください。

暗号化パスワードの生成
slapd.confのrootpwには暗号化した文字列を利用する事を推奨します。暗号化した文字列は、OpenLDAP付属のslappasswdコマンドで生成します。
# slappasswd -h {MD5} -s パスワード文字列
MD5以外に以下のものも指定可能。
  • {CRYPT}
  • {MD5}
  • {SMD5}
  • {SSHA}
  • {SHA}

indexの設定
indexを設定し、効率良くデータを検索できるように設定します。
比較には、pres:存在、eq:等価性、sub:部分文字列、から指定します。

例えば、mail属性にindexを設定する場合は、以下の設定を追加します。
index mail pres,eq,sub

以下のコマンドでindexの再構築を行う。
# slapindex -v -b dc=unixlife,dc=local -f slapd.conf

アクセス制限
たとえば、ユーザ認証用のデータベースを作成したとして、以下のルールでアクセス制限を設定します。
  • ユーザパスワードは、認証したユーザのみ参照、変更が可能
  • ユーザの他の情報は、認証したユーザは参照、変更が可能、それ以外のユーザは参照のみ可能

access to attrs=userPassword
       by self write
       by anonymous auth
       by * none
access to *
       by self write
       by * read

/etc/openldap/slapd.d/以下に設定ファイルを変換・作成

/etc/openldap/slapd.conf の作成が終わったら、slaptest コマンドで、/etc/openldap/slapd.d/以下に設定ファイルを変換・作成します。

# slaptest -f slapd.conf -F /etc/openldap/slapd.d/

# chown -R ldap.ldap /etc/openldap/slapd.d


設定ツリーのレイアウト
  • cn=config : Global config options
    • cn=include{0} : An include file
    • cn=schema : System shema
      • cn={0}core : Core schema
      • cn={1}cosine : COSINE schema
    • olcDatabase={0}bdb : A back-bdb instance


コマンドでのデータ操作

以下のコマンドはOpenLDAPを起動した状態で利用する。なお環境は以下の通りとする。
  • suffix = "dc=domain,dc=jp"
  • rootdn = "cn=Manager,dc=domain,dc=jp"
  • rootpw = "secret"

データ登録 (ldapadd)

user.ldifファイルを登録する。
# ldapadd -x -h localhost -D "cn=Manager,dc=domain,dc=jp" -w secret -f user.ldif

データ検索 (ldapsearch)

uidの末尾が"01"のデータ検索をする。
# ldapsearch -x -h localhost -b "dc=domain,dc=jp" -s sub "(uid=*01)"

データ削除 (ldapdelete)

"dn : uid=ito,dc=domain,dc=jp"のデータを削除します。
# ldapdelete -x -h localhost -D "cn=Manager,dc=domain,dc=jp" -w secret "uid=ito,dc=domain,dc=jp"

データ変更 (ldapmodify)

データの変更には更新用ldifファイルを作成し行います。
# ldapmodify -x -h localhost -D "cn=Manager,dc=domain,dc=jp" -w secret < modify.ldif

その他

slapcat
slapdデータベースからの LDIF の生成。

modify.ldifの書式
  1. "dn:"を指定
  2. ldifのタイプをmodifyで指定
  3. 属性値を置き換える場合は”replace”、追加する場合は”add”、を指定し、属性と値を記入
  4. 削除する場合は”delete”で削除する属性を指定

dn: uid=ito,ou=User,dc=domain,dc=jp
changetype: modifty
replace: sn
sn: shimizu
-
add: homeDirectory
homeDirectory: /home/shimizu
-
delete: telephoneNumber


LDIF(LDAP Data Interchange Format)

以下の表は属性記述子(="型")とその説明。

属性記述子 説明
dc(domainComponent) 完全修飾ドメイン名の単一のドメインコンポーネント
c(countryName) 2文字の国コード
l(localityName) 地理的な場所名
ou(organizationalUnit) 該当エントリが所属する部局(局、部、課など)
o (organizationName) 組織名
cn(commonName) オブジェクトの名前(フルネーム)
sn(surname)
st 州や県などのフルネーム
mail メールアドレス
telephoneNumber 電話番号
mobile 携帯電話
uid 該当アカウントのログイン名
userPassword エントリのパスワード
serialNumber 装置のシリアルナンバー
description 説明、特徴など

Apache Directory Studio

"New LDAP Connection"では以下の内容を設定する。
  • Authentication Mothod : Simple Authentication
  • Bind DN or user : uid=Manager,dc=XXX,dc=YYY
  • Bind password : インストール時に設定したパスワード

cf.

link




タグ:

LDAP
最終更新:2012年05月22日 23:48
添付ファイル