Solaris for ISPs は Sun Directory Services を使用して、Sun Internet Administrator と各種サービスが使用するコンポーネントソフトウェア情報とログイン情報を保存します。この情報には、標準オブジェクトクラスと、Solaris for ISPs の諸機能をサポートするために新たに定義されたオブジェクトが含まれます。
この章では、Solaris for ISPs の情報ツリー構造、コマンド行からのツリーエントリの作成方法、および必要なアクセス制御について説明します。ディレクトリサービスのスキーマ拡張については、第 6 章「Solaris for ISPs のディレクトリサービスのスキーマ」を参照してください。
Sun Directory Services は、ディレクトリの使用と管理のために次のツールを提供します。
Deja ツール。Java ベースのディレクトリエディタであり、ディレクトリへのエントリの追加、変更、削除を行います。
Sun Directory Services 管理コンソール。サーバーのローカル管理と遠隔管理を行います。
Web ゲートウェイ。任意のブラウザからのアクセスを可能にします。
フルセットのコマンド行プログラム。
Sun Directory Services 関連のマニュアルとして、『Sun Directory Services 3.1 管理ガイド』と『Sun Directory Services 3.1 ユーザーズガイド』が提供されており、上記の各ツールの使用方法について詳しく説明しています。インストール用 CD-ROM には、これらのマニュアルが AnswerBook2 形式で格納されています。コマンド行プログラムに関するドキュメントは、マニュアルページのセクション 1 (/opt/SUNWconn/man) に入っています。
Solaris for ISPs は特別な構造のディレクトリ情報ツリー (DIT) を必要とします。このディレクトリ構造は、Solaris for ISPs をインストールして構成するときに作成されます。Solaris for ISPs のディレクトリ構造は、2 つの命名コンテキスト、つまり OSI (Open Systems Interconnection) ツリーと DC (Domain Component) ツリーで構成されます。各ツリーの構成要素は並列に存在しています。この並列構造により、DNS 要求におけるドメイン名を DC ツリーを介して OSI ツリー内の実コンテンツエントリに簡単にマップできます。
OSI ツリーには Solaris for ISPs の実エントリ、つまり、コンポーネントサービス、各サービスの管理者、および各サービスの加入者のエントリが入っています。OSI ツリーの構造を図 5-1 に示します。
OSI ツリーでは、sun.com というドメインのエントリが、o=sun、c=us という識別名で示されています。このエントリをルートドメインといい、Solaris for ISPs ユーザーの組織全体を表します。ルートドメイン名はディレクトリサービスのインストール時に指定します。
ルートドメインの下には、次の 4 つの organizationalUnit エントリがあります。この 4 つのエントリは必須エントリです。
Administrators には、Sun Internet Administrator の管理者エントリが入ります。管理者エントリは、GUI を使用して管理者を登録するときに作成されます。
People には、各 ISP サービスの加入者エントリが含まれます。顧客に関するエントリは、コマンド行から、または Deja ツールで作成します。
Groups には、アクセス制御のために加入者エントリをグループ化するエントリが含まれます。グループエントリは必要に応じてコマンド行から、または Deja ツールで作成します。
Services には、Solaris for ISPs の各種サービスに対するエントリが入ります。ここにエントリを作成するのは、新しいサービスを統合するときと、Sun Internet FTP Server 専用の仮想ホスト構成を行うときだけにしてください。詳細は、Sun Internet FTP Server と Sun Internet Administrator のオンラインヘルプを参照してください。
People、Groups、Services の 3 つのノードは、ユーザーが定義する各ドメインエントリの下にも必ず存在します。Administrators ノードは、ルートドメインの下にだけ存在します。
各組織ユニットエントリの下に作成される一連のエントリ例を図 5-2 に示します。
図 5-2 における organizationalUnit エントリの eng は、ドメインエントリです。ドメインエントリは、この ISP の法人顧客です。あるいは、この ISP で仮想ドメインホストサービスを提供する顧客の場合もあります。各ドメインには必ず 2 つのエントリがあります。1 つはこの OSI ツリーのドメインエントリで、もう 1 つはドメイン名マップのための DC ツリーのエントリです。これらのエントリを作成する方法については、「ドメインエントリの作成」を参照してください。
ルートドメインと同様に、各ドメインにも必須の organizationalUnit エントリがあります。ルートの下に作成された各ドメインには、図 5-3 に示すように People、Groups、Services の 3 種類のエントリが必要です。
OSI ツリーにドメインエントリを作成するときは、その下に People、Groups、Services の 3 種類のエントリを作成する必要があります。このドメインのサービスを構成するときは、ou=Services の下にサービスエントリを作成します。このドメインの加入者情報は、ou=People の下に ispSubscriber エントリとして作成します。
現バージョンの Solaris for ISPs では、管理者エントリはルートドメインの下にだけ作成されます。管理者エントリは、GUI から管理者を指定したときに Sun Internet Administrator によって作成されます。
DC (ドメインコンポーネント) ツリーは、sun.com のようなドメイン名形式を OSI ツリー内の対応する識別名にマップします。一般に DC ツリーは、図 5-4 に示すように、OSI ツリーより単純で平面的な構造になります。
図 5-4 では、dc=sun、dc=com というエントリが、OSI ツリー内の o=sun、c=us というエントリに対応します。また、eng ドメインは、eng.sun.com という DNS 形式に対応付けられます。
これら 2 つのツリーにドメインエントリを作成する方法については、「ドメインエントリの作成」を参照してください。
一般的なディレクトリサービスのエントリ作成方法については、『Sun Directory Services 3.1 管理ガイド』の第 5 章「ディレクトリ情報の読み込みと保守」を参照してください。この節では、Solaris for ISPs が必要とする特別なエントリの作成方法について説明します。
Deja ツールを使用してディレクトリエントリを作成する方法については、Sun Internet Administrator のオンラインヘルプを参照してください。
Sun Directory Services には、ディレクトリエントリの作成と変更のために次のコマンド行ユーティリティが用意されています。
ldapadd
ldapmodify
ldapdelete
上記のコマンド行ユーティリティを使用するには、スーパーユーザーのアクセス権が必要です。詳細は、リファレンスマニュアルページ (セクション 1) を参照してください。
ldapadd と ldapmodify への入力には、コマンド行またはテキストファイルを使用します。エントリ情報は複雑で長いものが多いので、以降の項に示す手順ではテキストファイルから入力する方法について説明します。
どの場合でも、次の手順に従ってエントリ情報を作成します。
ディレクトリに作成する 1 つまたは複数のエントリを記述したファイルを作成します。ファイル形式の詳細は、ldif(4) のマニュアルページを参照してください。
スーパーユーザーのアクセス権を取得し、エントリ情報が入ったファイルを指定して ldapadd を実行し、エントリを作成します。
ldapadd コマンドの実行形式を次に示します。
# ldapadd -D "BindDN" -w password -f file |
BindDN はディレクトリにバインドする識別名 (DN) で、ディレクトリツリーの当該部分への書き込み権を持っている必要があります。password はバインドのためのパスワードです。また、file オプションでは、作成した ldif ファイル名を指定します。
コマンド行からエントリを追加するには、エントリ情報が入った ldif 形式のファイルを作成します。ldif 形式のファイルは、各ディレクトリエントリを空白行で区切った単純テキスト形式のファイルです。各ディレクトリエントリは、次の例のような構造を持ちます。
次の例では必須属性だけを示します。ほとんどのオブジェクトクラスには、この他にさまざまなオプション属性があります。オプション属性は、必要に応じて使用してください。
dn: ou=wcgate1,ou=eng,o=sun,c=US ou: wcgate1 associateddomain: wcgate1.eng.sun.com objectclass: organizationalUnit objectclass: domainRelatedObject
各属性の意味は次のとおりです。
作成するエントリの識別名を指定します。
作成するエントリの名前属性です。よく使用する名前属性としては、commonName、organizationalUnit (ou)、domainComponent (dc) があります。
DC ツリー内の対応するエントリのドメイン名をドット区切り形式で指定します。OSI ツリーと DC ツリーの関係については、「Solaris for ISPs のディレクトリ構造」、ドメインのクロスリファレンスエントリを作成する方法については、「ドメインエントリの作成」を参照してください。
この場所には、属性:値のペアを一行ごとに必要な数だけ指定できます。
エントリのオブジェクトクラス (種類) を指定します。objectClass は多数存在しますが、この例では 2 つだけ示します。
使用できるオブジェクトクラスと属性の詳細は、このマニュアルの第 6 章「Solaris for ISPs のディレクトリサービスのスキーマ」、および『Sun Directory Services 3.1 管理ガイド』の第 8 章「ディレクトリスキーマの構成」を参照してください。
ディレクトリにドメインを作成するには、OSI ツリーと DC ツリーの両方にドメインエントリを 1 つずつ作成する必要があります。その後で、OSI ツリー内のドメインエントリの下に必要な organizationalUnit エントリを作成します。
eng.sun.com の下に wcgate1 というドメインを作成する手順を次に示します。
OSI ツリー に作成するエントリのデータをテキストファイル (たとえば、domain.ldif) に入力します。
dn: ou=wcgate1,ou=eng,o=sun,c=US ou: wcgate1 associateddomain: wcgate1.eng.sun.com objectclass: organizationalUnit objectclass: domainRelatedObject
associatedDomain 属性に、DC ツリー内のエントリ名をドット区切り形式 (DNS 形式) で指定していることに注意してください。
domain.ldif ファイルに、DC ツリーのエントリ情報を追加します。
dn: dc=wcgate1,dc=eng,dc=sun,dc=com dc: wcgate1 associatedname: ou=wcgate1,ou=eng,o=sun,c=US description: DNS-to-DN Mapping for wcgate1.eng.sun.com labeleduri: ldap:///ou=wcgate1,ou=eng,o=sun,c=US??sub objectclass: domain objectclass: labeledURIObject
associatedDomain 属性に、OSI ツリー内のエントリ識別名を指定していることに注意してください。また、RFC2255 に従って labeledURI 属性にも同じ情報を指定していることに注意してください。
domain.ldif ファイルに、必須の組織ユニットエントリである Services の情報を追加します。
dn: ou=Services,ou=wcgate1,ou=eng,o=sun,c=US ou: Services objectclass: organizationalUnit
domain.ldif ファイルに、必須の組織ユニットエントリである People の情報を追加します。
dn: ou=People,ou=wcgate1,ou=eng,o=sun,c=US ou: People objectclass: organizationalUnit
domain.ldif ファイルに、必須の組織ユニットエントリである Groups の情報を追加します。
dn: ou=Groups,ou=wcgate1,ou=eng,o=sun,c=US ou: Groups objectclass: organizationalUnit
domain.ldif ファイルを保存します。
スーパーユーザーのアクセス権を取得し、次のコマンドを実行してディレクトリに各エントリを追加します。バインドの識別名とパスワードは、それぞれ適切な値に置き換えてください。
# ldapadd -D "cn=admin,o=sun,c=US" -w password -f domain.ldif |
ldapadd 実行後のディレクトリ構造は図 5-5 のようになります。
Solaris for ISPs の加入者には次の種類があります。
一般の加入者 (基本加入者)
仮想ホストの FTP サービスまたは Web サービスを使用する加入者
RADIUS サーバーを介してサービスにアクセスする加入者
上記の 2 つを利用し、ディレクトリエントリに RADIUS 情報と FTP 情報の両方を必要とする加入者
以降の項では、単純なエントリを作成しそれに必要な情報を追加することで、複雑な加入者エントリを構築する手順を示します。
加入者エントリを作成するには、ドメインと People の組織ユニットエントリが存在していなければなりません。これらのエントリが存在していれば、テキストファイル (たとえば、people.ldif) を編集して、加入者エントリ情報を作成できます。基本加入者エントリは、ispSubscriber という 1 つのオブジェクトクラスと、小数の必須属性を持ちます。基本加入者を追加するためのテキストファイルは次のようになります。
dn: cn=Jane Doe (jldoe),ou=People,ou=wcgate1,ou=eng,o=sun,c=US commonname: Jane Doe (jldoe) sn: Doe uid: jldoe userpassword: hidden objectclass: ispSubscriber
各属性の意味は次のとおりです。
加入者エントリの識別名を指定します。
加入者エントリ (ispSubscriber オブジェクトクラス) の名前属性です。Solaris for ISPs の加入者と管理者の commonName 属性は、Firstname Lastname (userid) の形式で指定します。
加入者の姓です。
加入者のログイン名です。
パスワードです。パスワード情報を UNIX アカウントと共有する場合は、8 文字以内の文字列でなければなりません。パスワードは、ディレクトリサービス管理コンソールで指定した方法で暗号化されます。
この加入者エントリのオブジェクトクラスの種類を指定します。
people.ldif ファイルには、属性値の異なるこのようなデータブロックを追加することにより、加入者エントリを必要なだけ作成できます。データ入力が終わったら、people.ldif を保存します。スーパーユーザーのアクセス権を取得し、次のコマンドを実行してディレクトリに加入者エントリを追加します。バインドの識別名とパスワードは、それぞれ適切な値に置き換えてください。
# ldapadd -D "cn=admin,o=sun,c=US" -w password -f people.ldif |
Sun Internet FTP Server と Sun WebServer (SWS) で使用する仮想ホストを構成するには、次の 3 種類の属性を追加する必要があります。
gidnumber: 60001 uidnumber: 60001 ispcontentdirectory: jldoe
各属性の意味は次のとおりです。
FTP サービスと Web サービス用の仮想ホストドメインにおいて、このユーザーに指定する UNIX のグループ ID です。
FTP サービスと Web サービス用の仮想ホストドメインにおいて、このユーザーに指定する UNIX のユーザー ID です。
コンテンツのパス (関連ドメインのドキュメントルートからの相対パスで指定される) で、ここにこの加入者のコンテンツファイルが存在します。
uidNumber と gidNumber の 2 つの属性値を指定するには、仮想 FTP ドメインに共有アクセスできるように正しく設定された UNIX アカウントが必要です。仮想ホストの構成については、Sun Internet FTP Server のオンラインヘルプを参照してください。
people.ldif ファイルには、このようなデータブロックを追加することにより、加入者エントリを必要なだけ作成できます。データ入力が終わったら、 people.ldif を保存します。スーパーユーザーのアクセス権を取得し、次のコマンドを実行してディレクトリに加入者エントリを追加します。バインドの識別名とパスワードは、それぞれ適切な値に置き換えてください。
# ldapadd -D "cn=admin,o=sun,c=US" -w password -f people.ldif |
既存エントリの属性を変更する場合は、ldapmodify を実行します。ldapmodify の実行方法については、ldapmodify(1) のマニュアルページを参照してください。
RADIUS サーバーを介して ISP サービスにアクセスする加入者エントリを作成するには、エントリ情報に remoteUser というオブジェクトクラスといくつかの属性を追加する必要があります。
Solaris for ISPs のデフォルト構成では、ルートドメインが RADIUS 加入者エントリの検索ベースになっています。ルートドメイン以外を検索ベースにしたいときは、ディレクトリサービス管理コンソールを使用して RADIUS を構成し、検索ベースを変更してください。
ldif ファイルに次の行を追加します。
objectclass: remoteUser authsuffixname: @ispxpress grpcheckinfo: authSuffixName grpcheckinfo: userPassword authserviceprotocol: Framed-User framedrouting: None framedprotocol: PPP grpreplyinfo: authServiceProtocol grpreplyinfo: framedProtocol grpreplyinfo: framedRouting
各属性の意味は次のとおりです。
RADIUS サーバーを使用してサービスにアクセスする加入者に必要なオブジェクトクラスです。
加入者のユーザー名に付加される接尾辞です。RADIUS サーバーは、他のドメイン内の同じ uid を持つエントリをこの接尾辞で区別します。ユーザーエントリごとに適切な接尾辞を入力します。
RADIUS サーバーが認証するエントリを選択する前に authSuffixName 属性を確認するようにします。
RADIUS サーバーが認証するエントリを選択する前に userPassword 属性を確認するようにします。
デフォルトの RADIUS 構成を使用する場合は、この属性値をそのまま入力します。ネットワークアクセスサーバーの構成により正確な値が決まります。
デフォルトの RADIUS 構成を使用する場合は、この属性値をそのまま入力します。ネットワークアクセスサーバーの構成により正確な値が決まります。
デフォルトの RADIUS 構成を使用する場合は、この属性値をそのまま入力します。ネットワークアクセスサーバーの構成により正確な値が決まります。
応答メッセージに authServiceProtocol 属性値を含めるように、RADIUS サーバーに指示します。
応答メッセージに framedProtocol 属性値を含めるように、RADIUS サーバーに指示します。
応答メッセージに frameRouting 属性値を含めるように、RADIUS サーバーに指示します。
people.ldif ファイルには、このようなデータブロックを追加することにより、加入者エントリを必要なだけ作成できます。データ入力が終わったら、 people.ldif を保存します。スーパーユーザーのアクセス権を取得し、次のコマンドを実行してディレクトリに加入者エントリを追加します。バインドの識別名とパスワードは、それぞれ適切な値に置き換えてください。
# ldapadd -D "cn=admin,o=sun,c=US" -w password -f people.ldif |
既存エントリの属性を変更する場合は、ldapmodify を実行します。ldapmodify の実行方法については、ldapmodify(1) のマニュアルページを参照してください。
複雑な加入者情報を含む ldif ファイルは次のようになります。
dn: cn=Jane Doe (jldoe),ou=People,ou=wcgate1,ou=eng,o=sun,c=US commonname: Jane Doe (jldoe) sn: Doe uid: jldoe userpassword: hidden gidnumber: 60001 uidnumber: 60001 objectclass: ispSubscriber objectclass: remoteUser ispcontentdirectory: /home/users/jldoe authsuffixname: @ispxpress grpcheckinfo: authSuffixName grpcheckinfo: userPassword authserviceprotocol: Framed-User framedrouting: None framedprotocol: PPP grpreplyinfo: authServiceProtocol grpreplyinfo: framedProtocol grpreplyinfo: framedRouting
グループエントリを作成する前に、次のエントリが作成されていなければなりません。
2 種類のドメインエントリ (OSI ツリーと DC ツリー)
組織ユニットエントリである Group
このグループのメンバーとなる加入者エントリ (People ノードの下に作成されていること)
これらのエントリが存在していれば、テキストファイル (たとえば、groups.ldif) を編集して、グループ情報を作成できます。グループエントリを追加するためのテキストファイルは次のようになります。
dn: cn=isp-gp1,ou=Groups,ou=wcgate1,ou=eng,o=sun,c=US cn: isp-grp1 objectclass: groupOfNames member: cn=Ed Anchor (anchor),ou=People,ou=wcgate1,ou=eng,o=sun,c=US member: cn=April Shower (showers),ou=People,ou=wcgate1,ou=eng,o=sun,c=US member: cn=Chili Jones (relleno),ou=People,ou=wcgate1,ou=eng,o=sun,c=US
各属性の意味は次のとおりです。
作成するグループの識別名を指定します。
グループエントリの関連識別名です。
groupOfNames というオブジェクトクラスが、このエントリの種類を示します。
既存の加入者エントリの識別名を member 属性で指定します。
groups.ldif ファイルには、このようなデータブロックを追加することにより、グループエントリを必要なだけ作成できます。データ入力が終わったら、 groups.ldif を保存します。スーパーユーザーのアクセス権を取得し、次のコマンドを実行してディレクトリにグループを追加します。バインドの識別名とパスワードは、それぞれ適切な値に置き換えてください。
# ldapadd -D "cn=admin,o=sun,c=US" -w password -f groups.ldif |
Solaris for ISPs ではディレクトリサービスに対するアクセス制御を設定して、特定のソフトウェアに必要なアクセスを許可すると同時に不要なアクセスを拒否してセキュリティを強化します。アクセス制御の基本方針は、全構成要素に対して読み込み権を与え、書き込み権を制限することです。現在のアクセス制御設定を変更しないでください。変更した場合には、セキュリティリスクが発生したり、Solaris for ISPs が異常終了したりする可能性があります。
アクセス制御規則では順序が重要なことに注意してください。Sun Directory Services がアクセス権をチェックするときは、要求に対して最初に当てはまる規則が適用され、残りの規則は無視されます。そのため、ファイル内の規則の順序は変更しないでください。新しい規則を作成する場合は、誤って既存の Solaris for ISPs 情報に適用されたり、既存のアクセス制御規則を無効にすることがないように注意してください。
ディレクトリに管理者としてバインドすると、アクセス制御チェックは行われません。
通常、Solaris for ISPs に固有の情報は、Solaris for ISPs のスキーマ拡張で定義されたオブジェクトクラスをサポートするエントリに入っています。このようなオブジェクトクラスは、名前が「isp」で始まります。アクセス構成ファイル内の規則のうち、このようなオブジェクトクラス (または属性) を含むものは Solaris for ISPs の規則であり、変更するとその影響を受けます。アクセス制御規則は、 /etc/opt/SUNWconn/ldap/current/dsserv.acl.conf で定義されています。
Sun Directory Services のアクセス制御については、『Sun Directory Services 3.1 管理ガイド』の第 1 章「ディレクトリの概念」と第 4 章「ディレクトリサーバーの構成」を参照してください。
以降の項では、Solaris for ISPs のアクセス制御により保証されている通常の動作について説明します。「アクセス権を持つ」ということは、エントリの識別名とパスワードでディレクトリにバインドすることにより必要なアクセス権が取得できることを意味します。
Sun Internet Administrator が正しく機能するためには、次のアクセス権が必要です。
管理者の作成と削除を行うために、組織ユニットエントリの Administrators で定義された DIT の一部に対する書き込み権を持ちます。
特定の管理者属性 (特に、userPassword 属性と ispAuthorizedServices 属性) を変更するためのアクセス権が必要です。
管理するサービスのエントリ (ispManagedService) 作成を制御するために、トップレベルエントリ SUNWixamc の下の特定部分 (たとえば、ispVersion=1.0,ou-SUNWixamc,ou-Services,o=sun,c=us) の所有権が必要です。
サービスを登録して管理するために、トップレベルのサービスエントリを作成する権限が必要です。Sun Internet Administrator は、DIT の特定部分 (たとえば、 ou-Services,o=sun,c=us) への書き込みを行うためのアクセス権と情報を持ちます。
ispServices エントリに対して、保護されている ispPrivateData 属性値を設定する権限が必要です。Sun Internet Administrator は、既存サービスエントリの ispPrivateData 属性に対する読み取り権と書き込み権を持ちます (ispServices 属性に対して何らかのアクセス権を持つのは、Sun Internet Administrator だけです)。
Solaris for ISPs の各種サービスは、各サービスエントリに保存されている構成情報 (サブドメインと仮想ドメイン内の Services ノードの下にある情報) に対する読み取り権と書き込み権を必要とします。そのため、DIT の特定部分 (サービスエントリ自体も含む) にエントリを作成または変更するための書き込み権と情報を持ちます。
ユーザー (加入者と管理者) は各自のパスワード属性に対する書き込み権を持ちますが、パスワード以外の部分は変更できません。Sun Internet Administrator に対して管理アクセス権を持つ管理者はグローバルアクセス権を持つため、あらゆるデータを変更する権限を持ちます。