4.3 ACL

4.3.1 eDirectoryの検索および読み込みの改善

eDirectory内のLDAP検索は、ユーザに返される属性の数に応じて結果を返します(inetOrgPerson)。

eDirectory内でオブジェクトが作成されると、デフォルトのACLがオブジェクトに追加されることがあります。これは、オブジェクトが属するobjectClassのための、スキーマ定義内のACLテンプレートによって決まります。たとえば、inetOrgPersonのデフォルト設定では、ユーザオブジェクトにACLを6つまで追加することができます。すべての属性と共にユーザオブジェクトを返すようにLDAP検索リクエストがなされた場合、ACL属性を含まずにユーザオブジェクトを返す場合よりも、クライアントにオブジェクトが返されるまでに少し長い時間がかかります。

デフォルトのACLはオフにすることができますが、ACLはより適切なアクセス制御のために必要なので、管理者はオフにしたくないと考えることがあります。しかし、それらをリクエストしないか読み込みフィルタ済み属性としてマーク付けすることにより、検索のパフォーマンスを向上することができます。ほとんどのアプリケーションは有効な特権を使用しており、特定のACLに依存していないので、こうした変更が何らかのアプリケーションを壊してしまうことはありません。

ACLをリクエストしない アプリケーションによってはACL属性を必要としないので、それらのアプリケーションは関係のある特定の属性をリクエストするように変更できます。これによりLDAP検索のパフォーマンスが改善されます。

ACLを読み込みフィルタ済みとしてマーク付けする アプリケーションの変更ができない場合、管理者はarf_acl.ldifを使用してACL属性を読み込みフィルタ済み属性としてマーク付けすることができます。ACLが読み込みフィルタ済み属性としてマーク付けされている場合、すべての属性がリクエストされても、サーバはエントリのこの属性を返しません。とはいえ、もし運用属性を返すようにLDAP検索がなされるか、リクエストがACL属性を明示的に要求する場合、マーク付けされたこの属性は返されます。ACL属性への読み込みフィルタ済みフラグは、rrf_acl.ldifを使用することでオフにすることができます。これらのLDIFはスキーマ上のACL属性に影響するので、ツリールートに対してスーパバイザ権を持っているユーザだけが拡張できます。

デフォルトでは、ACLは読み込みフィルタ済みとしてマーク付けされていないので、すべての属性を返すリクエストに対するパフォーマンスの効果は見られません。

次の表は、異なるプラットフォーム上でのarf_acl.ldifおよびrrf_acl.ldifファイルの位置を示しています。

プラットフォーム

ディレクトリ

Linux

  • /opt/novell/eDirectory/lib/nds-schema/

Windows

  • <unzipped_location>\nt\I386\NDSonNT\ndsnt\nds

4.3.2 ACLテンプレートを無効にする

バルクロードのパフォーマンスを向上させるために、ACL(アクセス制御リスト)テンプレートを無効にすることができます。これによりいくつかのACLが見つからなくなりますが、必要なACLをLDIFファイルに追加するか、それらのACLを後から適用することで、この問題は解決できます。

  1. 次のコマンドを実行します。

    ldapsearch -D cn_of_admin -w password -b cn=schema -s base objectclasses=inetorgperson 
    

    このコマンドの出力は次のようになります。

    dn: cn=schema
    
    objectClasses: (2.16.840.1.113730.3.2.2 NAME ’inetOrgPerson’ SUP
    organizationalPerson STRUCTURAL MAY (groupMembership $ ndsHomeDirectory
    $ loginAllowedTimeMap $ loginDisabled $ loginExpirationTime $
    loginGraceLimit $ loginGraceRemaining $ loginIntruderAddress $
    loginIntruderAttempts $ loginIntruderResetTime $
    loginMaximumSimultaneous $ loginScript $ loginTime $
    networkAddressRestriction $ networkAddress $ passwordsUsed $
    passwordAllowChange $ passwordExpirationInterval $
    passwordExpirationTime $ passwordMinimumLength $ passwordRequired $
    passwordUniqueRequired $ printJobConfiguration $ privateKey $ Profile $ 
    publicKey $ securityEquals $ accountBalance $ allowUnlimitedCredit $
    minimumAccountBalance $ messageServer $ Language $ UID $
    lockedByIntruder $ serverHolds $ lastLoginTime $ typeCreatorMap $
    higherPrivileges $ printerControl $ securityFlags $ profileMembership $
    Timezone $ sASServiceDN $ sASSecretStore $ sASSecretStoreKey $
    sASSecretStoreData $ sASPKIStoreKeys $ userCertificate
    $ nDSPKIUserCertificateInfo $ nDSPKIKeystore $ rADIUSActiveConnections $
    rADIUSAttributeLists $ rADIUSConcurrentLimit $ rADIUSConnectionHistory
    $ rADIUSDefaultProfile $ rADIUSDialAccessGroup $ rADIUSEnableDialAccess
    $ rADIUSPassword $ rADIUSServiceList $ audio $ businessCategory $
    carLicense $ departmentNumber $ employeeNumber $ employeeType $
    givenName $ homePhone $ homePostalAddress  $ initials $ jpegPhoto $
    labeledUri $ mail $ manager $ mobile $ pager $ ldapPhoto $
    preferredLanguage $ roomNumber $ secretary $ uid $ userSMIMECertificate
    $ x500UniqueIdentifier $ displayName $ userPKCS12) X-NDS_NAME ’User’ X
    -NDS_NOT_CONTAINER ’1’ X-NDS_NONREMOVABLE ’1’ X-NDS_ACL_TEMPLATES (’2#subtree#[Self]#[All Attributes Rights]’ ’6#entry#[Self]#loginScript’ ’1#subtree#[Root Template]#[Entry Rights]’ ’2#entry#[Public]#messageServer’ ’2#entry#[Root Template]#groupMembership’ ’6#entry#[Self]#printJobConfiguration’ ’2#entry#[Root  Template]#networkAddress’))
    
  2. この出力から、太字で示されている情報を削除します。

  3. 変更を加えた出力をLDIFファイルとして保存します。

  4. 新しく保存したLDIFファイルに次の情報を追加します。

    dn: cn=schema
    
    changetype: modify
    
    delete: objectclasses
    
    objectclasses: (2.16.840.1.113730.3.2.2)
    
    -
    
    add:objectclasses
    

    これにより、新しいLDIFは次のようになります。

    dn: cn=schema
    
    changetype: modify
    
    delete: objectclasses
    
    objectclasses: (2.16.840.1.113730.3.2.2)
    
    -
    
    add:objectclasses
    
    objectClasses: (2.16.840.1.113730.3.2.2 NAME ’inetOrgPerson’ SUP
    organizationalPerson STRUCTURAL MAY (groupMembership $ ndsHomeDirectory
    $ loginAllowedTimeMap $ loginDisabled $ loginExpirationTime $
    loginGraceLimit $ loginGraceRemaining $ loginIntruderAddress $
    loginIntruderAttempts $ loginIntruderResetTime $
    loginMaximumSimultaneous $ loginScript $ loginTime $
    networkAddressRestriction $ networkAddress $ passwordsUsed $
    passwordAllowChange $ passwordExpirationInterval $
    passwordExpirationTime $ passwordMinimumLength $ passwordRequired
    $ passwordUniqueRequired $ printJobConfiguration $ privateKey $ Profile $ 
    publicKey $ securityEquals $ accountBalance $ allowUnlimitedCredit $
    minimumAccountBalance $ messageServer $ Language $ UID $
    lockedByIntruder $ serverHolds $ lastLoginTime $ typeCreatorMap $
    higherPrivileges $ printerControl $ securityFlags $ profileMembership $
    Timezone $ sASServiceDN $ sASSecretStore $ sASSecretStoreKey $
    sASSecretStoreData $ sASPKIStoreKeys $ userCertificate $
    nDSPKIUserCertificateInfo $ nDSPKIKeystore $ rADIUSActiveConnections $
    rADIUSAttributeLists $ rADIUSConcurrentLimit $ rADIUSConnectionHistory $
    rADIUSDefaultProfile $ rADIUSDialAccessGroup $ rADIUSEnableDialAccess
    $ rADIUSPassword $ rADIUSServiceList $ audio $ businessCategory $
    carLicense $ departmentNumber $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress  $ initials $ jpegPhoto $ labeledUri $ mail
    $ manager $ mobile $ pager $ ldapPhoto $ preferredLanguage $ roomNumber
    $ secretary $ uid $ userSMIMECertificate $ x500UniqueIdentifier $
    displayName $ userPKCS12) X-NDS_NAME ’User’ X-ND S_NOT_CONTAINER ’1’ X
    -NDS_NONREMOVABLE ’1’)
    
  5. 次のコマンドを入力します。

    ldapmodify -D cn_of_admin -w password -f LDIF_file_name