Sun Directory Services 3.1 管理ガイド

第 5 章 ディレクトリ情報の読み込みと保守

この章では、Sun Directory Services のコマンド行ユーティリティを使って情報データベースの作成と保守をどのように行うかを説明します。データベースを初期化するには、次の方法があります。

ルートエントリの作成

データ格納にエントリを追加するためには、そのデータ格納のルートエントリがあらかじめ作成されていなければなりません。ルートエントリは、データ格納に格納されているツリーのトップエントリで、このデータ格納を識別するものです。Sun Directory Services では、実際には、データ格納を識別するルートエントリを 4 つまで作成できます。これは、管理コンソールで宣言できる 4 つのデータ格納接尾辞に対応します。

ルートエントリを作成するには、そのエントリ情報を簡単な LDIF ファイルに作成し、ldapadd コマンドでデータベースに追加します。この手順の例を 「XYZ Corporation のルートエントリを作成するには」で説明します。

さらに、ルートエントリを Deja を使って手作業で作成することもできます。Deja でエントリを追加する手順については、『Sun Directory Services 3.1 ユーザーズガイド』を参照してください。


注 -

dsimport コマンドを使ってディレクトリにエントリを初めて読み込む際にルートエントリがない場合は、自動的に作成されます。


XYZ Corporation のルートエントリを作成するには

  1. 次のような root-file と呼ぶ LDIF ファイルを作成します。


    dn: o=XYZ, c=US  
    objectClass: organization

    LDIF ファイルの書式については、ldif(4) のマニュアルページを参照してください。

  2. ldapadd(1) でこのファイルを追加します。


    prompt% ldapadd -c -D "cn=admin-cn, o= XYZ, c=US" -w admin-pw -f root-file
    
    • -c は、エラーがあっても処理を続けることを指定します。

    • -D は、データ格納管理者の識別名を指定します。識別名には空白が含まれている場合があるので、全体を引用符で囲みます。

    • -w は、管理者のパスワードを指定します。

    • -f は、データベースに追加する情報が入っているファイルを指定します。

    パスワードをコマンド行に表示したくなければ、-w オプションを省略します。その場合は、ldapadd コマンドがパスワードのプロンプトを出します。

    これでルートエントリが作成されました。

ディレクトリの生成

ディレクトリエントリを手作業で作成したくない場合は、dsimport 一括読み込みユーティリティでディレクトリを生成できます。このユーティリティは、1 行が 1 つのディレクトリエントリに対応するテキストファイルからディレクトリエントリを作成します。この場合には、マッピングファイルを作成して、入力ファイルの各行の情報に対する意味を指定する必要があります。さらに、ディレクトリに格納する情報の種類に特有な LDAP オブジェクトクラスと属性を作成する必要がある場合もあります。

マッピングファイルの構造と内容については、「マッピングの構文と意味」を参照してください。マッピングファイルの作成と dsimport の使い方を示す例については、「例: dsimport の使用方法」を参照してください。

dsimport のオプションの詳細は、dsimport(1M) のマニュアルページを参照してください。

dsimport は、NIS サービスの初期化において、NIS ファイルに格納されているすべての情報を LDAP ディレクトリにインポートするときにも使用します。dsypinstall スクリプトを実行して Sun Directory Services を NIS サーバーとして構成すると、dsimport の呼び出しによって、サーバーにある NIS 情報がディレクトリデータベースに自動的に追加されます。NIS ファイルから LDAP オブジェクトクラスと属性へのマッピングは、ディレクトリ /etc/opt/SUNWconn/ldap/current/mappingnis.mapping ファイルに記述されています。NIS 情報をディレクトリにインポートする方法の詳細は、「Sun Directory Services の NIS サービスの初期設定」を参照してください。


注 -

ディレクトリ /etc/opt/SUNWconn/ldap/current/mappingradius.mapping ファイルに記述されている情報マッピングは、RADIUS 情報のインポートではなく、LDAP ディレクトリの RADIUS 検索を行うときに使用します。


マッピングの構文と意味

マッピングの構文と意味は最大限の柔軟性を備えているため、次の操作を簡単に実行できます。

これにより、必要な属性を持つようにオブジェクトクラスを変更または作成しなければならない場合は、「スキーマの変更」を参照してください。

マッピングファイルは、次のパターンを持つ多数のセクションからなります。


Front-end name
	Common
	Table
		Common
		Dynamic
		Export
			Extract
			Condense
			Build
		Import
			Extract
			Condense
			Build
	Table
		Common
		Dynamic
		Export
			Extract
			Condense
			Build
		Import
			Extract
			Condense
			Build
...

各セクションの内容と意味については、「マッピングの意味」で説明します。各セクションの構文規則については、「マッピングの構文」で説明します。

マッピングの意味

「Front-end name」はサービス名を示します。この名前に続くすべての情報は、サービス固有の情報から LDAP のオブジェクトクラスと属性へのマッピングを記述するためのものです。

Front-end name の名前のすぐ後に続く最初の「Common」セクションは、その Front-end name またはサービスに適用される構成情報です。このセクションには、変換プロセスで必要な必須の構成変数と、便宜的に同じファイルに格納されている任意の構成変数が入っています。nis.mappingradius.mapping ファイルの場合、このセクションは管理コンソールで変更できます。

「Table」セクションは、特定の種類の情報に対するマッピング情報を定義します。このテーブル定義を使って作成するすべてのエントリのオブジェクトクラスは、このマッピング情報で決まります。それぞれのテーブル定義は、次のセクションからなります。

必須のセクションは「Dynamic」だけです。このセクションがないと、インポート操作もエクスポート操作もできません。他のセクションは必要なければ省略できます。たとえば、ディレクトリの情報をエクスポートしない場合は、「Export」セクションを作成する必要はありません。

各セクションには、インポートやエクスポート処理で使うキーワードと定義を指定します。表 5-1 は、一連のキーワード、それらを指定するセクション、およびそれらの目的を表しています。

どのセクションでも、変数または「トークン」(つまり、専用の定義) を次の書式で作成できます。

tokenT=token definition

専用定義には、「Condense」で説明する構文と機能を使用できます。

表 5-1 マッピングファイルキーワードの要約

セクション 

キーワード 

必須または省略可能 

目的 

Common 

BASE_DN 

必須。ただし、「Dynamic」セクションに指定できる 

名前付きコンテキストを指定する。「BASE_DN 」を参照

MAP_NAME 

NIS テーブル定義には必須 

テーブル定義に対応する NIS テーブル名を示す。「MAP_NAME 」を参照

PRIVATE_OBJECTCLASSES 

オブジェクトクラスが固有にならない場合は必須 

いくつかのテーブル定義から作成されるエントリの更新に使用する。「PRIVATE_OBJECTCLASSES 」を参照

Dynamic 

ALL_FILTER 

必須 

テーブル定義から作成されるすべてのエントリを指定するためのフィルタを定義する。「ALL_FILTER」を参照

DC_NAMING 

省略可能 

ドメイン名を LDAP の dc 名前構造体に変換するための機構を定義する。「DC_NAMING」を参照

LINE 

必須 

入力情報の分解を定義する。「LINE」を参照

MATCH_FILTER 

必須 

テーブル定義から作成される特定のエントリを指定するためのフィルタを定義する。「MATCH_FILTER」を参照

Export/Build 

LINE 

「Export」セクションがある場合は必須 

エクスポートファイルで、LDAP 属性からなる行の書式を定義する。「Export セクション」を参照

NIS_KEY 

NIS には必須 

エクスポートファイルにある NIS キーを指定する 

NIS_VALUE 

NIS には必須 

エクスポートファイルにある NIS 値を指定する 

Import/Extract 

LINE 

「Import」セクションがある場合は必須 

入力情報の分解を定義する。「Import セクション」を参照

Common セクション

「Common」セクションには、テーブル定義を使って作成するすべてのエントリに適用するための変数の定義を指定します。この変数の定義は、サービスやフロントエンド全体には適用されません。たとえば、「Common」セクションには、通常、作成するエントリが入る名前付きコンテキストを指定します。名前付きコンテキストは、BASE_DN キーワードで指定します。

BASE_DN

BASE_DN キーワードには、作成するエントリが入る名前付きコンテキストを指定します。dsimport ユーティリティは、このパラメータを次の順にいくつかの場所から探します。

  1. dsimport コマンド行の -V オプション

  2. 「Dynamic」セクション

  3. 「Table」の「Common」セクション

  4. 「Front-End」の「Common」セクション (マッピングファイルの先頭)

MAP_NAME

MAP_NAME キーワードには、このテーブル定義に対応する NIS マップ名を指定します。このキーワードは、NIS サービス用の管理エントリを作成するために使用します。ディレクトリサーバーは、これらのエントリを自動的に保守します。

このキーワードは、総称マッピング定義を使って作成する NIS エントリの名前付きコンテキストを作成するときにも使用します。

MAP_NAME キーワードは NIS サービス固有のものです。

PRIVATE_OBJECTCLASSES

PRIVATE_OBJECTCLASSES キーワードには、テーブル定義から得られるオブジェクトクラスと属性では完全なエントリを作成できないときに、オブジェクトクラスを指定します。このキーワードは、いくつかのテーブル定義から作成されるディレクトリエントリを保守するために必要です。たとえば、いくつかのテーブル定義がそれぞれ補助オブジェクトクラスとそれに関連する属性を作成する場合などです。

たとえば、NIS 環境では、ネットワークホストが少なくとも 3 つのファイル (/etc/bootparams/etc/ethers/etc/hosts) にエントリを持っている場合があります。しかし、各ホストは LDAP ディレクトリに、3 つの補助オブジェクトクラス bootableDevice、ieee802Device、ipHost からなる 1 つのエントリしか持っていません。このホストのエントリを上記のいずれかのファイルから削除する場合は、LDAP ディレクトリの対応するエントリを削除するのではなく、該当する補助オブジェクトクラスとそのオブジェクトクラス固有の属性を削除する必要があります。

Dynamic セクション

「Dynamic」セクションには、必要な情報を見つけるためのフィルタを動的に作成できる等号式を指定します。

LINE

LINE キーワードは、入力情報を動的にどのように分解するかを定義するときに必要です。分解の結果は、MATCH_FILTER 定義や ALL_FILTER 定義の要素として使用されます。

LINE キーワードの構文については、「Extract」を参照してください。

MATCH_FILTER

MATCH_FILTER キーワードには、dsimport ユーティリティが使用するフィルタを指定します。このユーティリティは、エントリを作成する前にそれがデータベースにすでにあるかどうかをこのフィルタを使って検査します。エントリがすでにある場合は、変更する必要かあるかどうかを検査します。

MATCH_FILTER キーワードは、ディレクトリサーバーが ypmatch などのコマンドに応答するときにも使用されます。

ALL_FILTER

ALL_FILTER キーワードには、dsexport コマンドが使用するフィルタを指定します。このコマンドは、このフィルタを使ってディレクトリエントリから元のファイルを再生成します。ディレクトリの情報をエクスポートしてその情報のソースファイルを再生成しない場合でも、このフィルタは必要です。

ALL_FILTER キーワードは、ディレクトリサーバーが、ある NIS テーブルに属するすべてのエントリをディレクトリから取り出すときにも使用されます。これは、ディレクトリサーバーが最新の NIS テーブルのコピーを常に保守しているからです。

さらに、ALL_FILTER キーワードは、ディレクトリサーバーが ypcat などのコマンドに応答するときにも使用されます。

DC_NAMING

DC_NAMING キーワードは、xyz.com 書式のドメイン名を LDAP のデータ格納接尾辞や dc=xyz, dc=com 書式の名前付きコンテキストに変換するときに使用する機構を定義します。このキーワードは、ディレクトリで使用しているネーミング構造がドメイン構成要素 (dc) 構造になっている場合に便利です。

Export セクション

「Export」セクションには、LDAP ディレクトリエントリからソースファイルを再生成する方法を定義します。このセクションは省略可能ですが、指定する場合は LINE キーワードが必要です。「Export」セクションの LINE キーワードは、元のソースファイルの行書式を表していなければなりません。

「Export」セクションには、次のサブセクションがあります。

nis.mapping ファイルには、「Build」サブセクションで NIS キーと NIS 値のペアを作成するための規則を定義します。さらに、このサブセクションには、LDAP ディレクトリのエントリに対応する NIS ファイルの行を生成するための規則を定義します。

Import セクション

「Import」セクションには、入力ファイルの行を LDAP ディレクトリのエントリに変換する方法を定義します。このセクションには必ず LINE キーワードが必要です。このキーワードでは、入力ファイルの行をどのように分解すれば、LDAP 属性で記述できる要素になるかを定義します。さらに、このセクションには、入力ファイルの行から作成する LDAP 属性のリストも指定する必要があります。

「Import」セクションには、次のサブセクションがあります。

nis.mapping ファイルには、「Extract」サブセクションの LINE 定義で、NIS ソースファイルの行を分析して NIS トークンと呼ぶ小さな情報単位に分解するための規則を定義します。

マッピングの構文

ここでは、テーブル定義の各セクションに作成する変数やトークンの構文について説明します。

マッピングの構文は、nis.mapping ファイルの例を使って説明します。

Common

「Common」セクションに定義する変数の構文は、表 5-1 にあるキーワードを除き、次のようになります。

variable-name=value

「Common」セクションに定義する変数の値は静的構成情報です。

Dynamic

「Dynamic」セクションに定義する変数の構文は、表 5-1 にあるキーワードを除き、「Common」セクションに定義する変数の構文と同じです。しかし、それらの値は、実行時にマッピングファイルを使用するユーティリティ (dsimportdsexport など) への入力で使用されます。

Extract

「Extract」セクションに定義する変数には、入力情報をトークンと呼ぶ小さな単位の情報に分解するための規則を定義します。これらの情報は、LDAP 属性に直接マップできるか、簡単な処理で LDAP 属性にマップできます。

トークンへの分解を定義する変数の構文は、次のとおりです。

VARIABLE => $element1 separator $element2 [separator $elementn...|| ...]

トークンとトークンの間の区切り文字は、入力情報で使われている区切り文字です。これには、空白文字、コンマ、コロンなど任意の文字が使用できます。ただし、行定義の 1 つの空白は、実際の入力情報の複数の空白やタブと等しくなります。分解に対しいくつかの代替規則を指定できます。その場合には、2 つのパイプ記号 (||) でそれぞれの代替規則を区切ります。

変換処理では、規則が指定された順に調べられ、入力として与えられた情報と最初に一致する規則が適用されます。

たとえば、nis.mapping では、次の定義によって、bootparams ファイルの行からトークンが抽出されます。

LINE =>$ipHostNameT $parametersT

hosts ファイルの場合は、これより少し複雑な例となります。

LINE =>$dummy $ipHostNumberT $ipHostNameT $allIpHostAliasesT*#$descriptionT*||¥
	        $dummy $ipHostNumberT $ipHostNameT $allIpHostAliasesT||¥
	        $dummy $ipHostNumberT $ipHostNameT

これらの例では、トークン parametersT と allIpHostAliasesT をさらに処理しないと、LDAP 属性にマップできません。必要な処理は「Condense」セクションで定義します。

Condense

「Condense」セクションには、「Extract」セクションから得られるトークンの操作を定義する変数や、テーブル定義で前に定義した変数を指定します。

このセクションは、「Build」セクションで行う属性値の定義を単純化します。

「Condense」セクションで定義する変数には、次のものがあります。

「Condense」セクションの変数には複数の代替規則を指定できます。変換処理では、入力情報と一致する最初の規則が使用されます。それらの規則は、2 つのパイプ記号で区切ります、また、それらの規則は同じ式の一部でなければなりません。たとえば、次の規則は有効です。

fifi=$parameter1 - $parameter2 || $parameter1 || juju

しかし、次の規則は有効ではありません。

fifi=$parameter1 - $parameter2
fifi=$parameter1
fifi=juju

「Condense」セクションには、変数をいくつでも指定できます。変数の間に従属関係がある場合は、指定する順序に意味があります。たとえば、次のように指定できます。

fifi=$parameter1 - $parameter2 || $parameter1 || juju
riri=$fifi - $parameterA
loulou=$fifi - $parameterB

split 関数

split 関数の構文は次のとおりです。

variableA=split(what, "separator", "add_prefix", "add_suffix", order)

variableA は変数名です。

what は、この操作を適用する情報単位 (変数またはパラメータ) です。

separator は、情報をどこで分割するかを示します。この値には空白が含まれることがあるため、全体を引用符で囲みます。

add_prefix は、分割によって得られる各項目に付ける接頭辞です。この値には空白が含まれることがあるため、全体を引用符で囲みます。

add_suffix は、分割によって得られる各項目に付ける接尾辞です。この値には空白が含まれることがあるため、全体を引用符で囲みます。

order は、分割によって得られる項目を使用する順序です。使用できる値は left2right か right2left です。

たとえば、nis.mapping ファイルでは、次の変数定義を使って、NIS ドメイン名を LDAP ドメインの一連の構成要素属性に分割します。

DC_NAMING=split($DOMAIN_NAME, ".", "dc=", ",", left2right)

ドメイン名に eng.europe.xyz.com が指定されている場合は、結果は次のようになります。

dc=eng, dc=europe, dc=xyz, dc=com

string2instances 関数

string2instances 関数は、指定された文字列をインスタンスに分解します。この操作の構文は次のとおりです。

variableA=string2instances("string", "separator")

variableA は変数名です。

string は、この操作を適用する情報単位 (変数またはパラメータ) です。この値には空白が含まれることがあるため、全体を引用符で囲みます。

separator は、情報をどこでインスタンスに分割するかを示します。この値には空白が含まれることがあるため、全体を引用符で囲みます。

たとえば、nis.mapping は、bootparams ファイルの「Condense」セクションにある次の定義を使って、一連のパラメータを個別のインスタンスに分解します。

bootParameterT=string2instances($parametersT," ")

さらに、string2instances 関数は、オブジェクトクラスの継承ツリーを指定するときにも使用します。たとえば、特定のマッピング定義を使って作成したエントリのオブジェクトクラスが organizationalPerson なら、マッピング定義の「Condense」セクションには次の行が必要です。

objectClassT=string2instances("top person organizationalPerson", " ")

instances2string 関数

instances2string 関数は、いくつかのインスタンスを結合して 1 つの文字列にします。この操作の構文は次のとおりです。

variableA=instances2string(what, "separator")

variableA は変数名です。

what は、いくつかのインスタンスを持つ変数です。

separator は、文字列の各要素を区切る値です。この値は空白の場合があるため、全体を引用符で囲みます。

たとえば、あるマシン名と別名のリストを見つけるには、次の変数を使用します。

NameList=instances2string($cn, " ")

cn 属性の値が camembert、Cam、Bertie の場合は、結果は次のようになります。

camembert Cam Bertie

trim 関数

trim 関数は、パラメータを囲む不要な空白を取り除きます。trim 操作の構文は次のとおりです。

variableA=trim(parameter)

variableA は変数名です。

parameter は、空白を取り除きたい項目です。

たとえば、別名リストを構成メンバーに分解する場合は、次の変数を指定できます。


aliasMember=string2instances($aliasList, ",")
trimAliasMember=trim($aliasMember)

string2instances 操作によって得られる各 aliasMember パラメータが処理され、空白が取り除かれます。

getrdn 関数

getrdn 関数は、エントリの名前付き属性を返します。これは、エントリの相対識別名で使われる属性です。getrdn 操作の構文は次のとおりです。

variableA=getrdn()

注 -

getrdn 関数は、「Condense」セクションの変数でしか使用できません。


たとえば、あるマシンの cn 属性の値は camembert、Cam、Bertie で、相対識別名で使用されるそのマシンの実際のシステム名は camembert である場合は、次の変数を作成できます。

HostName=getrdn()

getrdn 関数は、camembert という名前を返します。


注 -

getrdn 関数では、大文字と小文字を区別します。


exclude 関数

exclude 関数は、文字列のリストから値を取り除きます。この操作の構文は次のとおりです。

variableA=exclude(string, exclude-value, "separator")

variableA は変数名です。

string には、リストまたは文字列を指定します。

exclude-value は、除外する値です。

separator は、リストまたは文字列の各要素を区切る値です。この値は空白の場合があるため、全体を引用符で囲みます。

たとえば、あるマシンの別名のリストを得るには、名前のリストから標準名を除外する必要があります。次のような変数を指定できます。

NameList=instances2string($cn, " ")
HostName=getrdn()
HostAliases=exclude(NameList, HostName, " ")

nis.mapping では、hosts マッピング定義の「Condense」セクションに次の指定があります。

ipHostAliasesLineT=exclude($allIpHostAliasesT,$ipHostNameT, " ")

この定義によって、このホストの別名のリストから ipHostName が除外されます。

Build

「Build」サブセクションには、一連の LDAP 属性と、それらの値の定義を指定します。このサブセクションには、少なくとも、オブジェクトクラスのすべての必須属性と、識別名が必要です。「Build」セクションに識別名の定義がないと、エントリはディレクトリに作成されません。


注 -

radius.mapping ファイルは、ディレクトリにエントリをインポートするときに使用されないため、このファイルの「Build」セクションに識別名の定義を指定する必要はありません。


属性値の定義には次の要素を使用できます。

「Build」セクションにおける LDAP 属性とその関連する値の定義の構文は、次のとおりです。

LDAPattribute=attributeValueDefinition

たとえば、メール別名のエントリを作成するとします。LDAP 属性 rfc822mailMember を使って別名メンバーの名前を格納する場合は、マッピングに次の定義を指定します。


Condense:
 	aliasMember=string2instances($aliasList, ",")
 	trimAliasMember=trim($aliasMember)
 ...
 Build:
 	rfc822mailMember=$trimAliasMember
 ...

例: dsimport の使用方法

この例では、マッピングファイルを作成し、dsimport を使ってテキストファイルから情報の一括読み込みを行います。

入力ファイル

LDAP ディレクトリにインポートするファイルは、社員の基本的情報を持つ会社のオンラインディレクトリサービスから抽出したファイルです。

このファイルの内容を例 5-1 に示します


例 5-1 入力ファイルの例

Rob Green, rgreen@london.XYZ.com, phone x 44 1234, marketing communications
manager
Jean White, jwhite@london.XYZ.com, phone x44 1123, documentation manager
Susan Brown, sbrown@london, phone (44) 123 45 67 00, technical writer
Karen Gray, kgray@london, tel (44) 123 45 67 01, engineering project manager
Steve Black, sblack@eng, x44 1122, software development engineer
Felipe Diaz Gonzalez, fdgonzalez@eng, x41 2233, software development
engineer
Anne Marie de la Victoire, amvictoire@paris.xyz.com, x33 3344, software
support engineer
DURAND Pierre, pdurand@paris, tel 33 1133, software support engineer

このファイルでは、1 人の社員が 1 行に定義されています。各行の情報は次の順になっています。

情報のレベルは社員ごとに必ずしも一定ではありません。たとえば、電子メールアドレスが完全に指定されていないものや、電話番号が内線番号だけのものがあります。また、姓が名前より前にある場合もあります。

LDAP ディレクトリに作成するエントリの情報レベルを一定にしたい場合は、必要に応じてソースファイルの訂正を行うか、インポート後に Deja ツールで訂正を行う必要があります。

マッピングファイル

ディレクトリ管理者は、名前付きコンテキスト ou=People, o=XYZ, c=US にすべての社員のエントリを作成するものとします。マッピングファイルでエントリを指定するトークンは、「Common」セクションの BASE_DN トークンです。

情報は一度だけインポートします。したがって、マッピングファイルに「Export」セクションを定義する必要はありません。「Dynamic」セクションは必須です。「Condense」セクションのオブジェクトクラスの定義も必須です。

ディレクトリ管理者が作成したマッピングファイルの例を表 5-2 に示します。

表 5-2 マッピングファイルの例
# This example file for dsimport contains employee entries
# to be created as inetOrgPerson objects,in the LDAP directory.

Front-End: EXAMPLE

Table: People

	Common:
		BASE_DN=ou=People, o=XYZ, c=US

	Dynamic:
		LINE => $cn, $rest
		MATCH_FILTER=(&(objectClass=inetOrgPerson)(cn=$cn))
		ALL_FILTER=(&(objectClass=inetOrgPerson)(cn=*))

	Import:
		Extract:
			LINE => $fn $ln, $mail, $telephoneNumber, $description
		Condense:
			cn=$fn $ln
			snT=$ln
			objectClassT=string2instances("top person
organizationalPerson inetOrgPerson", " ")
		Build:
			dn=cn=$cn, $BASE_DN
			sn=$snT
			mail=$mail
			telephoneNumber=$telephoneNumber
			description=$description
			objectClass=$objectClassT

「Condense」セクションには、inetOrgPerson オブジェクトクラスの継承ツリーが指定されています。

「Build」セクションには、inetOrgPerson オブジェクトクラス固有の必須属性や、このオブジェクトクラスによって継承される必須属性がすべて指定されています。その他、このセクションには、ディレクトリ管理者が必要と判断したこのオブジェククラス固有の任意属性が指定されています。

dsimport の実行

「入力ファイル」で定義したマッピングファイルを使って、「マッピングファイル」で用意したファイルをインポートするには、次の引き数で dsimport を実行します。


# dsimport -h hostname -D cn=admin,o=xyz,c=us -w secret -m mapping.file 
-f EXAMPLE -t People input.file

管理者の識別名とパスワードは、コマンド行に必ず指定する必要はありません。これらのパラメータを省略すると、dsimport がこの情報を dsserv.conf ファイルから読み取ります。この利点は、管理者の識別名とパスワードが ps コマンドによって表示されないことです。

このコマンドを実行すると、次のメッセージが表示されます。

Lines read: 9, processed: 8  Entries: added 10, modified 0, deleted 0, errors 0

行カウントには空白行も含みます。作成されるエントリ数は、ファイルの行数よりも多くなります。これは、dsimport コマンドがルートエントリ (この例では、o=xyz, c=us) を自動的に作成するためです。

データの管理

ディレクトリサービスを実行するのに必要な情報をデータベースに読み込んだら、エントリの追加や変更、削除を行なってこのディレクトリ情報を保守する必要があります。この節では、ディレクトリ情報を保守するためのコマンド行ユーティリティについて説明します。

グラフィカルユーザーインタフェースからデータ管理を行う場合は、『Sun Directory Services 3.1 ユーザーズガイド』を参照してください。

エントリの追加

ディレクトリには ldapadd(1) を使用してエントリを追加できます。コマンド行に 1 つのエントリを指定したり、ファイルに 1 つまたは複数のエントリを指定したりできます。ldapadd の使用方法は、ldapmodify(1) のマニュアルページを参照してください (ldapaddldapmodify の特定の構成です)。

dsimport-n オプションを指定すると、ldapadd で使用するのに適した LDAP Data Interchange Format (LDIF) のファイルを作成できます。さらに、独自の LDIF ファイルを手作業で作成して、ldifcheck(1M) コマンドで検査することもできます。LDIF ファイルの書式については、ldif(4) のマニュアルページを参照してください。

エントリの変更

ディレクトリのエントリは、ldapmodify または ldapmodrdn コマンドで変更できます。

ldapmodify(1) は、次の場合に使用します。

ldapmodify の使い方については、ldapmodify(1) のマニュアルページを参照してください。dsimport-n オプションを指定すると、ldapmodify に適した LDIF ファイルを作成できます。

ldapmodrdn(1) は、エントリの名前付き属性を変更するときに使用します。名前付き属性を変更すると、エントリの識別名が変わります。詳細は、ldapmodrdn(1) のマニュアルページを参照してください。

エントリの削除

ディレクトリのエントリを削除するには、ldapdelete(1) を使用します。詳細は、ldapdelete(1) のマニュアルページを参照してください。

ディレクトリの保守

この節では、定期的に行うことによって、領域を節約し、Sun Directory Services の性能を維持できるようにする作業を説明します。

索引の再生成

dsidxgen コマンドを使用すれば、サーバーにある特定のデータ格納やすべてのデータ格納の索引データベースを再生成できます。索引ファイルは自動的に更新されますが、索引データベースを再生成するとディスク領域が解放されます。さらに索引を再生成すると、検索操作での性能が向上します。

詳細は、dsidxgen(1M) のマニュアルページを参照してください。

データベースの再生成

ディレクトリデータベースの変更を繰り返し行うと、ディスク領域の使用効率が悪くなります。バックアップ後に復元を行なってデータベースを再生成すれば、ディスク領域の使用効率が向上します。

ディレクトリデータベースをテキスト形式でバックアップするには、ldbmcat コマンドを使用します。このコマンドは、LDBM データベースを LDIF (ldif(1M) のマニュアルページを参照) に変換します。

バックアップで作成した LDIF ファイルからディレクトリデータベースを復元するには、ldif2ldbm コマンドを使用します。詳細は、ldif2ldbm(1M) のマニュアルページを参照してください。

たとえば、ディレクトリデータベースを再生成するには、ディレクトリサーバーを停止してから、次のコマンドを実行します。

# ldbmcat id2entry.dbb > /usr/tmp/filename
# rm /var/SUNWconn/ldap/dbm/*
# ldif2ldbm -j 10 -i /usr/tmp/filename

注 -

ディレクトリデータベースを再生成する場合は、ディレクトリサーバーを停止しなければなりません。


ディレクトリサーバーが NIS サーバーでもある場合は、dsypinstall(1M) スクリプトを使って NIS マップを再作成する必要があります。その後ディレクトリサーバーを再起動できます。

ログファイルの検査

ログディレクトリ (デフォルトでは、/var/opt/SUNWconn/ldap/log) には、 8 つのログファイル (dsserv.logdsradius.logdsweb.logdsnmpserv.logdsnmprad.logdsserv_admin.logdspush.logdspull.log) があります。ログファイルが最大のサイズ (デフォルトでは 500K バイト) に達すると、.1 の接尾辞で別のログファイルが作成されます。次にこのログファイルが最大サイズに達すると、.2 の接尾辞で新しいログファイルが作成されます。以下、.9 まで同様に作成されます。つまり、500K バイトのログファイルを最大 40 個まで作成できます。

このログファイルの仕組みでは大量のディスク容量が使われることがあるため、不要になったログファイルは削除してください。

dejasync の使用

NIS サービスや RADIUS サービスの構成、またはこれらのサービスのマッピングファイル (/etc/opt/SUNWconn/ldap/current にある nis.mappingradius.mapping) を変更したら、dejasync コマンドを実行する必要があります。それによって、これらの変更が Deja ツールに認識されます。dejasync コマンドを実行すると、Deja.properties ファイルが変更されます。

さらに、NIS サービスを初期化したときにも dejasync コマンドを実行する必要があります。それによって、Deja で NIS エントリを管理できるようになります。