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. Isso 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 Usuário. Quando a solicitação de pesquisa de LDAP é feita de maneira a exibir esse objeto Usuário com todos os atributos, demora um pouco mais para exibir esse objeto ao cliente do que exibir o objeto 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 mudanças não impactam os aplicativos, pois a maioria deles usa privilégios efetivos e não conta com ACLs específicos.

Não solicitação de ACLs: Um atributo ACL não é necessário para muitos aplicativos, por isso eles podem ser modificados para solicitar os atributos específicos pelos quais se interessam. Isso 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 (lista de controles de acesso) para aumentar o desempenho em massa. A implicação disso é que alguns dos ACLs faltarão. Contudo, você pode resolver isso 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, apague 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