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

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

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

例 25.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

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

例 25.3 slapd.conf:pidfileとargsfile

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

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

例 25.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!

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

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

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

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

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

    タグ

    スコープ

    *

    例外なくすべてのユーザ

    anonymous

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

    users

    認証済みユーザ

    self

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

    dn.regex=<regex>

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

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

    表 25.3 アクセスのタイプ

    タグ

    アクセスのスコープ

    none

    アクセス不可

    auth

    サーバへの連絡用

    compare

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

    search

    検索フィルタ設定用

    read

    読み込みアクセス

    write

    書き込みアクセス

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

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

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

access to  dn.regex="ou=([^,]+),dc=suse,dc=de" 
by dn.regex="cn=administrator,ou=$1,dc=suse,dc=de" 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を参照してください。

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

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

database bdb 
checkpoint      1024    5
cachesize       10000
suffix "dc=suse,dc=de" 
rootdn "cn=admin,dc=suse,dc=de" 
# Cleartext passwords, especially for the rootdn, should 
# be avoided.  See slappasswd(8) and slapd.conf(5) for details. 
# Use of strong authentication encouraged.
rootpw secret 
# The database directory MUST exist prior to running slapd AND 
# should only be accessible by the slapd/tools. Mode 700 recommended. 
directory /var/lib/ldap 
# Indices to maintain 
index   objectClass     eq

データベースのタイプ、この場合は、Berkeleyデータベースは、このセクションで最初に判別されます(例 25.6. 「slapd.conf:データベース固有のディレクティブ」を参照)。チェックポイントは、実際のデータベースに書き込まれる前にトランザクションログに維持されるデータの量(キロバイト)to2つの処理の間の時間(分)を判別します。キャッシュサイズは、データベースのキャッしに維持されるオブジェクトの数を設定します。接尾辞は、このサーバが取り扱うLDAPツリーの部分を判別します。.次のrootdnは、このサーバに対して、管理者権限を持つユーザを指定します。ここで宣言されるユーザは、LDAPエントリが必要ではなく、通常ユーザとして存在する必要もありません。管理者パスワードは、rootpwで設定します。ここでsecretを使用する代わりに、slappasswdによって作成した管理者パスワードのハッシュを入力することもできます。directoryディレクティブは、サーバ上でデータベースディレクトリが格納されている(ファイルシステム内の)ディレクトリを示します。最後のディレクティブindex objectClass eqは、すべてのオブジェクトクラスのインデックスを管理します。経験的に、ユーザが最も頻繁に検索しそうな属性をここに追加できます。データベースに対してここで定義されたカスタムのAccess規則は、グローバルAccess規則に代わって使用されます。

25.3.3 サーバの起動と停止

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

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