第4章

ACLベース権限の使用

この章では、exteNd DirectorのACL (アクセス制御リスト)の使用方法について説明します。この章は、次の節から構成されています。

 
Top of page

Securityサブシステムについて

Securityサブシステムの目的は、「権限」です。権限は、アプリケーションリソースへのアクセスを制限するプロセスです。Securityサブシステムは、標準のJ2EEセキュリティAPIに基づいて作成されています。

Securityサブシステムは、認証を行うためにDirectoryサブシステムに依存しています。つまり、Securityサブシステムでは、保護されたアプリケーションリソースへの要求は、認証されたユーザのみが行うことができると想定しています。

権限は、要求された操作を実行するための十分な許可がユーザまたはグループ(「プリンシパル」で表されます)にあることを確認してから実行されます。プリンシパルは、アクセス制御リスト(ACL)を使用して定義するか、またはセキュリティ役割を使用するリソースにマップすることができます。

For more information    役割ベースのセキュリティの詳細については、を参照してください。

 
Top of page

exteNd DirectorのACL

ACLベースの権限は、ポートレット、ドキュメント、フォルダ、グループページ、ユーザページ、プロファイルなど、複数の展開にわたり持続するサブシステム管理機能およびアプリケーションリソースオブジェクトを保護します。

次の用語は、ACLベースの権限に対するexteNd Directorのサポートを定義しています。

用語

定義

ACL

アクセス制御リスト。特定の「要素」または「要素タイプ」へのアクセスを制限するエントリのリスト。各ACLエントリで、「プリンシパル」に「権限」のセットを関連付けます。

ACLに、ACLが属する「要素」または「要素タイプ」が関連付けられていない場合、アクセスは制限されません。

要素

exteNd Directorサブシステムによって管理される、一意に識別される持続性リソース生成物。たとえば、Content Managementサブシステムのドキュメントおよびフォルダは要素です。exteNd Directorアプリケーションでは、セキュリティ保護が可能な要素に対して許可を設定および取得することができます。

要素は、アプリケーションサーバが有効な限り持続します。つまり、要素は、exteNd Directorプロジェクトの再展開による影響を受けません。

要素タイプ

機能または動作が同様のオブジェクトのグループを定義するときに使用される文字列(EbiFolder、EbiDocumentなどのフレームワーク要素)。ACLは、要素タイプ、および個々の要素に適用できます。

Securityサブシステムは、別のサブシステムに対する組み込み要素タイプのセットを備えています。各要素タイプには、その要素がサポートする許可のリストがあります。

プリンシパル

認証されたユーザ、グループ、またはコンテナ。exteNd Directorでは、プリンシパルは、Java 2標準インタフェースであるjava.security.Principalを継承するクラスとして実装されています。

許可

要素」exteNd Directorへのアクセスのタイプには、次の組み込み許可のセットがあります。CREATE、DELETE、EXECUTE、LIST、PROTECT、PUBLISH、READ、SELECT、UPDATE、およびWRITEです。

組み込み許可は、ハードコードされているので、Security APIを使用して変更することはできません。

注記:   負の許可は、exteNd Directorではサポートされていません。

各ACLサブシステムは、これらの組み込み許可のサブセットを使用します。各許可は、サブシステムごとに異なる意味を持つ場合があります。

For more information    Portalサブシステムの許可の詳細については、『ポータルガイド』のユーザおよびグループへのページの割り当てに関する節を参照してください。

For more information    Content Managementサブシステムの許可についての詳細は、『コンテンツ管理ガイド』のコンテンツの保護に関する章を参照してください。

 
Top of section

プリンシパルへのアクセス

exteNd Directorでは、プリンシパルは、Java 2標準インタフェースjava.security.Principalを継承するクラスとして実装されています。「プリンシパル」を使用して、個人、会社、およびログインIDなどの任意をエンティティを表すことができます。

exteNd Directorでは、次の3つのタイプのプリンシパルが定義されています。

プリンシパルは、Directory APIでは、com.sssw.fw.directory.apiパッケージのインタフェースとして表されます。

  public interface EbiRealmUser extends Principal
  public interface EbiRealmGroup extends Group
  public interface EbiRealmContainer extends Principal

プリンシパルインタフェースのインスタンスをコードで直接生成するか、または次に示すAPIメソッドの1つを使用することができます。

プリンシパルのタイプ

アクセス方法

ユーザ

1つのプリンシパルにアクセスするには、com.sssw.fw.directory.clientパッケージの次のメソッドを使用します。

  EboDirectoryHelper.getEbiRealmUser()

グループのプリンシパルのコレクションを取得するには、次のメソッドを使用します。

  EbiRealmGroup.getUserMembers()

グループ

EbiRealmGroupのメソッドを使用します。例は次のとおりです。

このEbiRealmGroupにJavaプリンシパルを取得するには、次のメソッドを使用します。

  EbiRealmGroup.getGroup()

グループプリンシパルのコレクションを取得するには、次に示すEbiRealmGroupのメソッドの1つを使用します。

  EbiRealmGroup.getChildGroups()

コンテナ

EbiRealmContainerのメソッドを使用します。例は次のとおりです。

このEbiContainerのペアレントコンテナを取得するには、次のメソッドを使用します。

  EbiContainer.getParentContainer()

このコンテナの子孫のコレクションを取得するには、次のメソッドを使用します。

  EbiContainer.getDescendants()

 
Top of section

ACLの処理動作

ユーザが要素にアクセスするたびに、Securityサブシステムは、指定されたアクションを実行する許可がそのユーザにあるかどうかをチェックします。要素にACLがある場合、exteNd Directorは、指定した許可がユーザに与えられているかどうかをチェックします。

状況   発生する可能性がある状況は次のとおりです。

状況

アクセスの結果

オブジェクトにACLがない。

アクションは続行される

オブジェクトにACLはあるが、ユーザが名前またはグループで含まれていない。

アクセスは拒否される- EboSecurityException

ユーザが、特定のタイプのアクセスに対する許可を持つLocksmithユーザまたはサブシステム管理グループのACLに記述されている(管理グループの許可により、個々の要素に対する許可は上書きされます)。

For more information    詳細については、ACLサブシステム管理者を参照してください。

アクションは続行される

オブジェクトに、(IDまたはグループによって)ユーザが含まれるACLがあり、ユーザは特定のタイプのアクセスに対する許可を持っている

アクションは続行される

オブジェクトに、(IDまたはグループによって)ユーザが含まれるACLがあり、ユーザは特定のタイプのアクセスを拒否されている

アクセスは拒否される- EboSecurityException

プロセス   Securityサブシステムは、次の3つの手順で、要素にアクセスする許可がユーザにあるかどうかを判断します。

  1. 要素にACLがあるか

  2. 要素のACLでユーザが許可を持っているか

  3. ユーザが、このサブシステム要素に対して適切な許可を持つLocksmithユーザまたはサブシステム管理者であるか

 
Top of page

ACLサブシステム管理者

exteNd Directorには、ACLを使用して各サブシステムへの管理アクセスを定義する組み込みグループのセットがあります。Director Administration Consoleを使用して、各許可に対してユーザを追加および削除できます(を参照してください)。

各サブシステム管理者グループのアクセス権の一般的な説明は、次のとおりです。

管理要素タイプ

許可

ユーザに許可される操作

ContentAdmin

READ

Content Managementサブシステムのサブシステム要素(フォルダ、カテゴリ、ドキュメント)を取得する。

WRITE

Content Managementサブシステムにサブシステム要素を追加する。

PROTECT

ContentAdminタイプのACLを設定する。

GeneralAdmin

PROTECT

任意のexteNd Directorサブシステムに適用できる汎用Adminタイプ。

(カスタムサブシステム実装用に予約されています。)

LocksmithElementType

PROTECT

付与されている権限に関係なく、すべてのexteNd DirectorアプリケーションおよびACLサブシステムオブジェクトにアクセスする。

Locksmithユーザが認証されると、exteNd Director Securityサブシステムは、このユーザを各ACLサブシステムの管理ACLに追加します。これにより、Locksmithユーザは、個々のユーザを各サブシステムACLに追加できるようになります。

初めてプロジェクトを設定するときは、LocksmithユーザはデフォルトでAnonymousに設定されます。これにより、すべてのユーザが安全なサーバにアクセスしてプロジェクトを再展開することができ、開発環境において便利です。

重要:   運用展開では、Locksmithユーザを認証レルムに存在する既存のユーザに変更する必要があります。

PortalAdmin

PROTECT

DACおよびポータル関連機能にアクセスする。

注記:   この許可自体には、DACのユーザ、ディレクトリ、およびセキュリティ機能へのアクセスは含まれていません。

SearchAdmin

READ

既存の検索可能リポジトリを取得する。

WRITE

検索可能リポジトリを追加、削除、クリア、再初期化、およびリセットする。

PROTECT

SearchAdminタイプのACLを設定する。

SecurityAdmin

PROTECT

Locksmith以外の任意の管理タイプのACLを設定する。

UserAdmin

CREATE

ユーザ、グループ、およびグループプロファイルを追加する。

READ

プロファイルユーザについての情報を表示する。

DELETE

プロファイルユーザを削除する。

UPDATE

プロファイルユーザレコードを更新する。

PROTECT

UserAdminタイプのACLを設定する。

 
Top of section

APIを使用したアクセスの管理者への制限

EbiSecurityManager.setRestrictedAccess()メソッドを使用して、ポータルおよびコンテンツ管理要素へのアクセスを制限することができます。たとえば、WRITE許可に対してドキュメントフォルダへのアクセスを制限した場合、ContentAdminグループのメンバーだけが要素へのWRITEアクセスを持ちます。

注記:   制限付きアクセス権は、制限された要素に関連付けられている他のACLよりも優先されます。

EbiSecurityManagerインタフェースの関連するメソッドは次のとおりです。

メソッド

返される値

説明

setRestrictedAccess()

成功の場合、ブール

要素に対する指定されたアクセスをシステム管理者に制限します。

checkRestrictedAccess()

ブール

要素でアクセスが制限されているかどうかをチェックします。

 
Top of page

ユーザおよびグループのACLへのアクセス

この節では、exteNd DirectorのDirectory APIおよびSecurity APIを使用する方法をいくつか示します。ACLセキュリティオブジェクトにアクセスするための主要なポイントは、次の委任インタフェースです。

セキュリティ委任

アクセスの提供先

EbiSecurityAclDelegate

セキュリティACL

EbiSecurityMetaDelegate

ACLベースセキュリティメタデータ

EbiSecurityDelegate

ランタイムACLベースセキュリティまたは役割ベースセキュリティ

EbiRealmContainerDelegate

コンテナプリンシパル

EbiDirectoryDelegate

ユーザおよびグループのプリンシパル

For more information    委任の基礎的な情報については、『exteNd Directorアプリケーションの開発』のサブシステムサービスへのアクセスに関する節を参照してください。

DACを使用したACLへのアクセス   DAC (Director Administration Console)を使用してACLにアクセスすることもできます。

For more information    詳細については、を参照してください。

 
Top of section

Security API委任の取得

次の例は、以降に説明するSecurity APIの例で使用される委任オブジェクトを取得する方法を示しています。

  import com.sssw.fw.security.api.*;
  
  // Getting delegate objects from a factory -- 
  // must be done within a try block.
  try {
  // Get a metadata delegate.
  EbiSecurityMetaDelegate smd = com.sssw.fw.security.client.EboFactory.getSecurityMetaDelegate();
  // Get an ACL delegate.
  EbiSecurityAclDelegate ad = com.sssw.fw.security.client.EboFactory.getSecurityAclDelegate();
  // Use the delegate objects.
  } 
  catch (EboFactoryException e) {
        sb.append( e.getMessage() );
  }

 
Top of section

要素タイプおよびIDの取得

次の例は、要素タイプおよびUUIDを取得する方法を示しています。これは、他の例で使用されます。

  // Get delegates. Security API委任の取得を参照してください。
  // Get the element type metadata from the EbiSecurityMetaDelegate.
  EbiElementTypeMeta typeMeta = smd.getElementTypeMeta(context);
  // This example uses the PortalAdmin element.
  String portalSubSystem = EbiSecurityConstants.SUBSYSTEM_PORTAL_SERVICE;
  String adminType = typeMeta.getAdminType(portalSubSystem);
  String adminID = typeMeta.getAdminID(portalSubSystem);

注記:   要素タイプ名は、EbiFrameworkElementのサブインターフェイスの定数として定義されます。たとえば、Content Managementサブシステムのドキュメントは、com.sssw.cm.api.EbiDocument.EL_DOCUMENTで定義されています。

 
Top of section

要素に関連付けられている許可のリストの取得

この例は、要素に付与できる許可のリストを取得する方法を示します。

  // Get delegates. Security API委任の取得を参照してください。
  // Get the element type. 要素タイプおよびIDの取得を参照してください。
  // Get the EbiAccessRightMeta object for the element type.
  EbiAccessRightMeta meta = smd.getAccessRightMeta(context,adminType);
  // Retrieve the list of permissions.
  String[] rights = meta.getPermissionNames();
  for (int i = 0; i < rights.length; i++) {
     sb.append( rights[i] );

 
Top of section

要素に対する許可を持つプリンシパルのリストの取得

次の例は、要素に対して特定の許可を持つプリンシパルのリストを取得する方法を示しています。この例では、PortalAdmin要素のPROTECT許可に割り当てられたプリンシパルのリストを取得します。

  import java.security.*;
  
  // Get delegates. Security API委任の取得を参照してください。
  // Get the element type. 要素タイプおよびIDの取得を参照してください。
  // Get the principals for a specific permission type.
  Principal [] prins = null;
  prins = ad.getPrincipalsFromAcl(context, adminID, adminType, EbiPermission.PROTECT);
  for (int i = 0; i < prins.length; i++) {
     sb.append( prins[i].toString() );

 
Top of section

要素に対する許可を持つプリンシパルのリストの取得

セッションコンテキストのプリンシパルにアクセスできる特定のタイプのアクセス可能リソース(要素)をすべて列挙するには、次のメソッドを使用します(EbiSecurityManagerから使用できます)。

  /**
     * Returns a Collection of elements accessible to the userwhose context is passed in. 
     * @param context context
     * @param elType framework element type, tells the method which    * element type to determine accessibility for 
     * @param rights a list of access right permissions to be    * checked, e.g. EbiPermission.READ, EbiPermission.WRITE,
     * EbiPermission.EXECUTE, etc.; note that if multiple    * rights are specified, the method will treat the list 
     * as a Boolean OR and will attempt to find elements that    * have either READ or WRITE or EXECUTE etc. for the user 
     * @return a Collection of accessible framework elements of the    * specified type; the Collection is empty if no accessible 
     * elements of the type are found
     */
  
  public Collection getAccessibleElements(EbiContext context, String elType, String[] rights)
  throws EboUnrecoverableSystemException

 
Top of section

ACLの内容の取得

次のコードは、ACLの文字列表現を取得する方法を示しています。

  import java.security.*;
  
  // Get delegates. Security API委任の取得を参照してください。
  // Get the element type; 
  // 要素タイプおよびIDの取得を参照してください。
  // Get the contents of the ACL in the form of a string.
  Acl adacl = ad.getAcl(context, adminID, adminType);
  String adaclcontent = adacl.toString();
  sb.append( adaclcontent );

 
Top of section

ACLへのプリンシパルの割り当て

次のコードは、Admin要素のACLにプリンシパルを追加する方法を示しています。

  import com.sssw.fw.directory.api.*;
  import java.security.*;
  
  // Get delegates.Security API委任の取得を参照してください。
  // Get the element type.要素タイプおよびIDの取得を参照してください。
  // Get a Directory delegate.
  EbiDirectoryDelegate dd = com.sssw.fw.directory.client.EboFactory.getDirectoryDelegate();
  // Get a principal.Must be a valid realm user.
  Principal user = dd.getUser(context,"SomeUser");
  // Add the principal to the ACL.
  Principal [] prins = new Principal[1];
  prins[0] = user;
  ad.addPrincipalsToAcl(context, adminID, adminType,      EbiPermission.PROTECT,
     prins);
  sb.append( "Added " + user.toString() + " PROTECT");

注記:   次の例では、EboFactoryExceptionの他に次の例外もコードで処理する必要があります。

  catch (EboSecurityException e) {
        sb.append( e.getMessage() );
  }
  catch (EboException e) {
        sb.append( e.getMessage() );
  }	 	 

 
Top of page

コンテナのACLへのアクセス

プリンシパルタイプの「コンテナ」は、LDAPツリー内の組織単位を表します。コンテナプリンシパルを使用すると、LDAPディレクトリコンテナ(または、同じツリーディレクトリ構造)にACLを設定して、指定したツリー階層のすべてのユーザにACLを適用できます。この機能は、「セキュリティ継承」と呼ばれます。exteNd Directorでは、セキュリティ継承は、Novell eDirectoryのような階層型LDAPレルムに対して設定されているアプリケーションで使用できます。

ディレクトリを使用すると、次の操作を実行できます。

com.sssw.fw.directory.apiパッケージでは、次のインタフェースが提供されています。

  public interface EbiTreeRealm
  public interface EbiRealmContainerDelegate

注記:   コンテナをexteNd DirectorからLDAPレルムに追加することはできません。追加したい場合は、ネイティブLADPツールを使用します。

 
Top of section

ACLへのコンテナプリンシパルの割り当て

次のコードは、前の例(ACLへのプリンシパルの割り当て)に基づいています。このコードは、管理要素のACLにコンテナプリンシパルを追加する方法を示しています。

  import com.sssw.fw.directory.api.*;
  import java.security.*;
  
  // Get delegates.Security API委任の取得を参照してください。
  // Get the element type; 
  // 要素タイプおよびIDの取得を参照してください。
  // Get a new Container delegate.
  EbiRealmContainerDelegate rcd = new EbiRealmContainerDelegate();
  
  // Get Container principal.Must be a valid realm container.
  Principal container = 
     rcd.getEbiRealmContainer(context,"cn=sample,o=users");
  // Add the principal to the ACL.
  Principal [] prins = new Principal[1];
  prins[0] = container;
  ad.addPrincipalsToAcl(context, adminID, adminType, 
        EbiPermission.PROTECT,
     prins);

注記:   コンテナプリンシパルオブジェクトは、APIでアクセスすることも、Portalの共有およびグループページを制御するDAC (Director Administration Console)のセクションからアクセスすることもできます。ただし、DACを使用して、コンテナプリンシパルに管理アクセスやコンテンツ管理要素アクセスを割り当てることはできません。

 
Top of page

ACLベース権限のカスタマイズ

 
Top of section

Securityサービスのカスタマイズ

ACLセキュリティをカスタマイズする方法は、3つあります。

 
Top of section

新しいサブシステムへのACLベースセキュリティの追加

新しいサブシステムの追加は、exteNd Directorとサードパーティセキュリティサービスを統合するときに必要になる場合があります。

注記:   このトピックは、このガイドの範囲外のトピックなので、ここでは手順の概要だけを示します。詳細については、Novellテクニカルサポートまでお問い合わせください。

 
Top of section

カスタム許可

exteNd Directorでは、Security APIを使用して、独自のカスタム許可を定義できます。JavadocのEbiPermissionMetaを参照してください。

カスタム許可は、任意の詳細レベルのACLベース権限をアプリケーションで使用する方法を提供します。たとえば、カスタム許可のセットを作成して、各許可でアプリケーションコードの特定のメソッドにアクセスを許可することができます。

カスタム許可は、アプリケーションデータベースにXMLファイルとして保存されます。これらのXMLファイルを直接編集しないでください。変更する場合は、Security APIを使用してください。



Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved.  more ...