slapd.confを使用したサーバの設定

インストールされたシステムでは、/etc/openldap/slapd.confにLDAPサーバの完全な設定ファイルが用意されています。ここでは1つのエントリについて簡単に説明し、必要な調整について説明します。ハッシュ(#)で始まるエントリは無効です。エントリを有効にするには、このコメント文字を削除します。

slapd.conf内のグローバルエントリ

例 36.2. slapd.conf:スキーム用ディレクティブの取り込み

include         /etc/openldap/schema/core.schema
include         /etc/openldap/schema/cosine.schema
include         /etc/openldap/schema/inetorgperson.schema
include         /etc/openldap/schema/rfc2307bis.schema
include         /etc/openldap/schema/yast.schema

に示すように、slapd.confにある最初のディレクティブは、LDAPディレクトリを編成するスキーマを指定します。例 36.2. 「slapd.conf:スキーム用ディレクティブの取り込み」core.schemaエントリは必須です。付加的に必要とされるスキーマは、このディレクティブの後に追加します。詳細は、付属のOpenLDAPマニュアルを参照してください。

例 36.3. slapd.conf:pidfileとargsfile

pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args

この2つのファイルには、PID (プロセスID)とslapdプロセスの起動時に使用される引数が含まれています。これらを変更する必要はありません。

例 36.4. slapd.conf:アクセス制御

# Sample Access Control
#       Allow read access of root DSE
# Allow self write access
#       Allow authenticated users read access
#       Allow anonymous users to authenticate
# access to dn="" by * read
  access to * by self write
              by users read
              by anonymous auth
#
# if no access controls are present, the default is:
#       Allow read by all
#
# rootdn can always write!

例 36.4. 「slapd.conf:アクセス制御」は、サーバ上のLDAPディレクトリへのアクセス許可を制御するslapd.confの一部です。slapd.confのグローバルセクションで行われている設定は、データベース固有のセクションで、カスタムのアクセス規則が宣言されていない限り有効です。これらはグローバル宣言を上書きするためです。ここで示すように、すべてのユーザはディレクトリの読み込みアクセスができますが、ディレクトリに書き込めるのは管理者(rootdn)のみです。LDAPのアクセス制御の管理は、非常に複雑なプロセスです。次のヒントが役立ちます。

  • すべてのアクセス規則は、次の構造に従います。

    access to <what> by <who> <access>
  • whatには、アクセスを付与するオブジェクトまたは属性を指定します。個々のディレクトリブランチを、別の規則で明示的に保護することもできます。正規表現を使って、ディレクトリツリー中の特定の領域を1つの規則で処理することもできます。slapdは、設定ファイル中に記述されている順番で、すべての規則を評価します。一般的な規則は、特定的な規則の後に指定する必要があります。slapdが有効だと考える最初の規則が評価され、それ以降のエントリは無視されます。

  • whoには、whatで指定された領域へのアクセスを付与されるユーザを指定します。ここでもslapdは、最初に一致するwhoを見つけた後、評価を行わないため、特定の規則は、一般的な規則より前に指定する必要があります。表 36.2. 「ユーザグループと付与されるアクセス許可」に有効なエントリを示します。

    表 36.2. ユーザグループと付与されるアクセス許可

    タグ

    スコープ

    *

    例外なくすべてのユーザ

    anonymous

    認証されていない(「匿名」)ユーザ

    ユーザ

    認証済みユーザ

    self

    ターゲットオブジェクトに接続されているユーザ

    dn.regex=<regex>

    正規表現に一致するすべてのユーザ


  • accessは、アクセスタイプを指定します。に示すオプションを使用してください。表 36.3. 「アクセスのタイプ」

    表 36.3. アクセスのタイプ

    タグ

    アクセスのスコープ

    none

    アクセスs可

    auth

    サーバへの連絡用

    compare

    比較アクセス用のオブジェクト

    検索

    検索フィルタ設定用

    読む

    読み込みアクセス

    write

    書き込みアクセス


    slapdはクライアントが要求するアクセス権をslapd.confで付与されたアクセス権と比較します。要求された権限と比較して、同等または上位の権限が規則によって与えられている場合は、クライアントに対して、アクセスが許可されます。規則に宣言された権限を越える権限をクライアントが要求した場合、アクセスが拒否されます。

例 36.5. 「slapd.conf:アクセス制御の例」に、簡単なアクセス制御の例を示します。このように正規表現を用いて自由にアクセス制御できます。

例 36.5. slapd.conf:アクセス制御の例

access to  dn.regex="ou=([^,]+),dc=example,dc=com" 
by dn.regex="cn=Administrator,ou=$1,dc=example,dc=com" write  
by user read 
by * none

この規則は、担当の管理者のみが個別のouエントリに書き込みアクセスできることを宣言します。他のすべての認証済みユーザは読み込みアクセスができ、その他のユーザはアクセスできません。

[Tip]アクセス規則の設定

access to規則または一致するbyディレクティブが存在しない場合、アクセスが拒否されます。付与されるのは、明示的に宣言されたアクセス権だけです。規則がまったく宣言されていない場合、デフォルトの原則として、管理者は書き込みアクセスができ、残りのユーザ全員は読み込みアクセスができます。

詳細な説明およびLDAPのアクセス権の設定例については、インストールしたopenldap2パッケージのオンラインマニュアルを参照してください。

アクセス許可を一元的なサーバ設定ファイル(slapd.conf)で管理する方法以外に、ACI (アクセス制御情報)を使用する方法があります。ACIは、個々のオブジェクトのアクセス情報をLDAPツリーに格納します。アクセス制御のタイプには共通のものがなく、開発者の間では未だ実験的だと考えられています。詳細については、http://www.openldap.org/faq/data/cache/758.htmlを参照してください。

slapd.conf内のデータベース固有のディレクティブ

例 36.6. slapd.conf:データベース固有のディレクティブ

database bdb1
suffix "dc=example,dc=com"2 
checkpoint      1024    53
cachesize       100004
rootdn "cn=Administrator,dc=example,dc=com"5 
# Cleartext passwords, especially for the rootdn, should 
# be avoided.  See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged.
rootpw secret6 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap7 
# Indices to maintain 
index   objectClass     eq8
overlay ppolicy9
ppolicy_default "cn=Default Password Policy,dc=example,dc=com"
ppolicy_hash_cleartext
ppolicy_use_lockout

1

この種類のデータベース(この場合Berkeleyデータベース)は、このセクションの先頭行に設定されます(例 36.6. 「slapd.conf:データベース固有のディレクティブ」を参照)。

2

suffixには、このサーバが担当するLDAPツリー中の部分を指定します。

3

checkpointには、実際にデータベースに書き込むまでトランザクションに保持するデータ量(KB)と、2つの書き込み処理間の時間(分)を指定します。

4

cachesizeには、データベースキャッシュ中に保持するオブジェクト数を設定します。

5

rootdnには、このサーバに対して、管理者権限を持つユーザを指定します。ここで宣言されるユーザは、LDAPエントリが必要ではなく、通常ユーザとして存在する必要もありません。

6

rootpwには、管理者パスワードを設定します。ここでsecretを使用する代わりに、slappasswdによって作成した管理者パスワードのハッシュを入力することもできます。

7

directoryディレクティブは、サーバ上でデータベースディレクトリが格納されているファイルシステム内のディレクトリを示します。

8

最後のディレクティブindex objectClass eqは、すべてのオブジェクトクラスのインデックスを管理します。経験的に、ユーザが最も頻繁に検索しそうな属性をここに追加できます。

9

overlay ppolicyは、パスワード制御機構のレイヤを追加します。ppolicy_defaultには、ユーザのエントリにポリシーが設定されていない場合に使用する、pwdPolicy objectのDNを指定します。 エントリに対するポリシーがなく、デフォルト値も設定されていない場合は、ポリシーは利用されません。ppolicy_hash_cleartextは、平文パスワードが存在し、データベースに格納される前に変更要求がハッシュされることを示します。 このオプションを使用する場合、ppolicy_hash_cleartextはX.500/LDAP情報モデルに違反しているため、すべてのディレクトリユーザに対してuserPassword属性への比較、検索、および読み込みアクセスを禁止することをお勧めします。クライアントからロックされたアカウントへの接続が試みられた場合、ppolicy_use_lockoutは特定のエラーコードを送信します。サイトのセキュリティを強化するには、このオプションを無効にしてください。エラーコードは、不正侵入者に対して有益な情報を与えてしまいます。

データベースに対してここで定義されたカスタムのAccess規則は、グローバルAccess規則に代わって使用されます。

サーバの起動と停止

LDAPサーバが完全に設定され、36.4項 「LDAPディレクトリのデータ処理」で説明するパターンに従ってすべてのエントリが作成されたら、rootユーザで「rcldap start」を入力し、LDAPサーバを起動します。実行されているかどうかわからない場合は、rcldap stopコマンドを実行します。実行しているLDAPサーバのステータスは、rcldapstatusコマンドを実行して要求します。

YaSTランレベルエディタ(20.2.3項 「YaSTでのシステムサービス(ランレベル)の設定」を参照)を使用して、システムのブートまたは停止時に、サーバを自動的に起動および停止することができます。またコマンドプロンプトでinsservコマンドを実行して、起動および停止スクリプトそれぞれへのリンクを作成することもできます。詳細については、20.2.2項 「initスクリプト」を参照してください。