4.3 ACLs

4.3.1 Melhorando pesquisas e leituras do eDirectory

Uma pesquisa LDAP no eDirectory exibe resultados dependendo do número de atributos exibidos para um usuário (inetOrgPerson).

Quando um objeto é criado no eDirectory, os ACLS padrão podem ser adicionados ao objeto. Isto depende dos modelos de ACL na definição do esquema para o objectClass à qual o objeto pertence. Por exemplo, na configuração padrão do inetOrgPerson, podem existir até seis ACLs adicionados ao objeto do usuário. Quando a solicitação de pesquisa de LDAP é feita de maneira a exibir este objeto do usuário com todos os atributos, demora um pouco mais para exibir este objeto ao cliente do que exibir o objeto do usuário sem os atributos ACL.

Embora os ACLs padrão possam ser desativados, os administradores podem não querem fazê-lo, pois eles são necessários para um melhor controle de acesso. Contudo, é possível melhorar o desempenho de pesquisas ao não solicitá-los ou torná-los atributos filtrados como leitura. Essas alterações não impactam qualquer aplicativo, pois a maioria das aplicações usa privilégios efetivos e não conta com ACLs específicos.

Não solicitação de ACLs: Um atributo de ACL não é necessário para muitas aplicações, por isso elas podem ser modificadas para solicitar os atributos específicos nos quais o aplicativo se interessa. Isto resulta em um melhor desempenho nas pesquisas LDAP.

Marcar um ACL como filtrado para leitura: Se um aplicativo não pode ser modificado, o arf_acl.ldif pode ser usado pelo administrador para marcar o atributo ACL como atributo filtrado para leitura. Quando o ACL é marcado como atributo filtrado para leitura, o servidor não o exibe na entrada se todos os atributos forem solicitados. Contudo, se a pesquisa LDAP for realizada para exibir os atributos operacionais ou se a solicitação especificamente demandar atributos ACL, o atributo marcado será exibido. É possível usar rrf_acl.ldif para desabilitar a flag de filtrado para leitura em um atributo ACL. Esses LDIFs (LDAP Directory Interchange Format) afetam o atributo ACL no esquema, de maneira que apenas um usuário com privilégios de Supervisor na raiz da árvore poderá estendê-los.

Por padrão, um ACL não é marcado como filtrado para leitura, por isso não é visto o benefício, no desempenho, de as solicitações exibirem todos os atributos.

A tabela a seguir exibe o local dos arquivos arf_acl.ldif e rrf_acl.ldif em diferentes plataformas.

Plataforma

Local

Linux

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

Windows

  • <local_de_descompactação>\nt\I386\NDSonNT\ndsnt\nds

4.3.2 Desativando modelos ACL

Você pode desabilitar os modelos de ACL para aumentar o desempenho em massa. A implicação disto é que alguns dos ACLs faltarão. Contudo, você pode resolver isto ao adicionar os ACLs necessários ao arquivo LDIF ou aplicando-os posteriormente.

  1. Execute o seguinte comando:

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

    A saída do comando seria:

    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. Na saída observada na etapa anterior, exclua as informações marcadas em negrito.

  3. Salve a saída revisada como um arquivo LDIF.

  4. Acrescente as seguintes informações ao arquivo LDIF recém-salvo:

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

    Por isso, seu LDIF deverá agora ser semelhante a este:

    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. Digite o seguinte comando:

    ldapmodify -D cn_of_admin -w password -f LDIF_file_name