はじめに
前回の記事では、GUIツールの Apache Directory Studio を使って OpenLDAP サーバーに接続し、テスト用のユーザーエントリを追加する方法を紹介しました(こちら)。
本記事ではその続編として、LDAPでユーザーを登録する際によく使われる「属性」 に焦点を当て、cn や sn、uid、mail などの項目の意味と使い方をやさしく解説します。
まず、LDAPにおける「エントリ (entry)」とは一人のユーザーや一つのオブジェクトに相当し、DN (Distinguished Name) という一意の名前で識別されます。エントリは属性 (attribute) の集合で表現され、各属性に名前と値が設定されています。
では、具体的にどのような属性項目があるのかを紹介します。
主なLDAP属性とその意味(一覧)
まずは、主な属性をユーザー・グループエントリごとに一覧にまとめました。
ユーザエントリ
属性名 | 意味・用途(説明) | |
---|---|---|
cn (Common Name) | 共通名。エントリ(オブジェクト)の名前を表す属性。ユーザーの場合は通常「氏名」など人を識別する名称を入れます | |
sn (Surname) | 姓。ユーザーの名字(苗字)を表す属性です | |
objectClass | オブジェクトクラス。エントリの種別(スキーマ)を指定する属性で、複数持つ場合があります | |
givenName | 名前。ユーザーの名前(下の名前)を表す属性。snと組み合わせてフルネームを構成します | |
uid (User ID) | ユーザーID。ユーザーを識別するためのログイン名や社員ID等を入れます。 一意であることが望ましいです | |
メールアドレス。ユーザーの電子メールアドレスを表します。複数あれば属性を繰り返して登録可能です | ||
ou | 組織単位。ユーザーの所属部署名やチーム名など、組織上の単位を表します | |
title | 役職名。ユーザーの職位・肩書きを表します | |
telephoneNumber | 電話番号。ユーザーの連絡先電話番号です。複数の電話番号(内線と携帯など)がある場合は属性を繰り返し追加します | |
memberOf | メンバーオブ。ユーザーエントリが属するグループのDNを示す属性。OpenLDAPでグループエントリのmemberに追加された際に、自動的に追加される項目です。memberOf属性も繰り返し追加されます | |
userPassword | ユーザーパスワード。ユーザーのパスワード(ハッシュ値)を格納する属性です。 | |
description | 説明。エントリの説明や備考を自由記述するための属性。任意フィールドで、メモ書きや追加情報を入れる用途に使われます |
グループエントリ
属性名 | 意味・用途(説明) | |
---|---|---|
cn (Common Name) | 共通名。エントリ(オブジェクト)の名前を表す属性。グループ名を入れます | |
objectClass | オブジェクトクラス。エントリの種別(スキーマ)を指定する属性で、複数持つ場合があります | |
member | メンバー。グループエントリに属するメンバーのDNを登録する属性です。複数人を所属させたい場合は、member属性を繰り返し追加して登録します | |
description | 説明。エントリの説明や備考を自由記述するための属性。任意フィールドで、メモ書きや追加情報を入れる用途に使われます |
分かりにくい項目の補足
objectClass
各エントリには少なくとも1つ以上の objectClass
を指定する必要があります。これはそのエントリが「どういう種類のものか(=スキーマ)」を表す情報です。たとえば新規ユーザーを inetOrgPerson
として登録する場合、エントリには通常以下のようなクラスを指定します。
ユーザエントリの場合:
- objectClass: top
- objectClass: person
- objectClass: organizationalPerson
- objectClass: inetOrgPerson
グループエントリの場合:
- objectClass: top
- objectClass: groupOfNames
※ 重複を防ぎたい場合は groupOfUniqueNames を使用
今回は扱いませんが、LDAPには ユーザーやグループ以外にも多数のobjectClass が存在します。
posixAccount
:Unix/Linuxアカウント情報(uidNumber、homeDirectory など)shadowAccount
:パスワード期限などの管理属性device
:ハードウェアやネットワーク機器organizationalUnit
:部門・チームの管理単位applicationProcess
:プロセスやサービスの管理用groupOfUniqueNames
:memberと似た用途で、uniqueMemberを使うグループ用クラス
LDAPの設計では、このobjectClassの選定によって「どんな情報を持てるか」が決まります。ユーザーやグループだけでなく、環境に合わせたobjectClassを選んで、エントリ構造を組み立てていく必要があります。
member
この属性は「グループエントリ」側に設定します。対象のユーザーエントリの完全なDNを値として指定します(例:uid=taro,ou=Users,dc=example,dc=com
)。1つのグループに複数のユーザーを所属させるには、以下のように member
属性を繰り返し追加します。
member: uid=taro,ou=Users,dc=example,dc=com
member: uid=hanako,ou=Users,dc=example,dc=com
memberOf
OpenLDAPでは memberOf
オーバーレイ(モジュール)を有効にすると、グループエントリの member
属性にユーザーが追加されたタイミングで、自動的に memberOf
がユーザー側に追記されます。
memberOf: cn=dev-team,ou=Groups,dc=example,dc=com
ユーザーが複数のグループに所属している場合、memberOf
属性も繰り返し追加されます。
userPassword
この属性は、ユーザーがLDAPに対して認証(ログイン)する際のパスワード情報を保持する属性です。
ただし、平文では保存せず、必ずハッシュ化して記録します。
OpenLDAPでは、以下のようなハッシュ付きの文字列を使います。
(例:SSHA):
userPassword: {SSHA}N4bD+G9T8P1+Xnbzq6vX2J9U8m8=
まとめ
本記事では、OpenLDAPのユーザーエントリとグループエントリで使われる主要な属性を一覧で紹介し、それぞれの意味や用途について補足しました。
- 主なLDAP属性の一覧
objectClass
の階層構造(person
,organizationalPerson
,inetOrgPerson
など)- グループエントリで使われる
member
- ユーザー側に自動追加される
memberOf
userPassword
のハッシュ保存とそのセキュリティ注意点
実際にLDAPでエントリを作成する際に「この項目って何だっけ?」と困ったとき、ぜひこの記事を見返してもらえたらと思います。
コメント