Home > LDAP, OpenDJ, Uncategorized > OpenDJ – Controllare l’accesso

OpenDJ – Controllare l’accesso

OpenDJ nella configurazione di default prevede che chiunque possa collegarsi anonimamente per effettuare ricerche e leggere le informazioni registrate.

Nel nostro esempio modificheremo questa impostazione in modo che, ad esclusione di “Directory Manager”, solo gli utenti autenticati possano accedere al server e comunque per le sole informazioni riguardanti il loro profilo.

In OpenDJ l’accesso ai dati è gestito con le ACI (Access Control Instruction).

Usando le ACI è possibile controllare l’accesso a tutta la directory, parte o anche ad alcune entry specifiche. A solo uno specifico insieme di attributi o ai valori che questi attributi potrebbero avere. È possibile anche impostare autorizzazioni per un utente particolare, per tutti gli utenti che appartengono a un gruppo specifico o un ruolo, o per tutti gli utenti della directory. Infine, è possibile definire l’accesso solo per un client specifico, ad esempio identificato dal suo indirizzo IP o dal hostname.

E’ importante però verificare bene l’insieme delle ACI definite nel vostro server.

Questo perché le risorse necessarie all’elaborazione potrebbero essere tali e tante da compromettere le prestazioni del vostro server. In altre parole per ogni richiesta che il server riceve, viene effettuato un controllo per stabilire le ACI presenti possano consentire o negare l’accesso alle informazioni all’account fornito in fase di bind.

Il seguente comando mostra la lista delle ACI globali configurate in OpenDJ:

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password get-access-control-handler-prop --property global-aci -n

Ve lo sconsiglio, comunque se volete cliccando su “show source” potrete visualizzare l’output prodotto da questo comando.

Property   : Value(s)
-----------:-------------------------------------------------------------------
global-aci : (extop="1.3.6.1.4.1.26027.1.6.1 || 1.3.6.1.4.1.26027.1.6.3 ||
: 1.3.6.1.4.1.4203.1.11.1 || 1.3.6.1.4.1.1466.20037 ||
: 1.3.6.1.4.1.4203.1.11.3") (version 3.0; acl "Anonymous extended
: operation access"; allow(read) userdn="ldap:///anyone";),

: "(target="ldap:///")(targetscope="base")(targetattr="objectClass||
: namingContexts||supportedAuthPasswordSchemes||supportedControl||su
: pportedExtension||supportedFeatures||supportedLDAPVersion||support
: edSASLMechanisms||vendorName||vendorVersion")(version 3.0; acl
: "User-Visible Root DSE Operational Attributes"; allow
: (read,search,compare) userdn="ldap:///anyone";)",

: "(target="ldap:///cn=schema")(targetscope="base")(targetattr="obje
: ctClass||attributeTypes||dITContentRules||dITStructureRules||ldapS
: yntaxes||matchingRules||matchingRuleUse||nameForms||objectClasses"
: )(version 3.0; acl "User-Visible Schema Operational Attributes";
: allow (read,search,compare) userdn="ldap:///anyone";)",

: (target="ldap:///dc=replicationchanges")(targetattr="*")(version
: 3.0; acl "Replication backend access"; deny (all)
: userdn="ldap:///anyone";),

: "(targetattr!="userPassword||authPassword||changes||changeNumber||
: changeType||changeTime||targetDN||newRDN||newSuperior||deleteOldRD
: N||targetEntryUUID||targetUniqueID||changeInitiatorsName||changeLo
: gCookie")(version 3.0; acl "Anonymous read access"; allow
: (read,search,compare) userdn="ldap:///anyone";)",

: (targetattr="audio||authPassword||description||displayName||givenN
: ame||homePhone||homePostalAddress||initials||jpegPhoto||labeledURI
: ||mobile||pager||postalAddress||postalCode||preferredLanguage||tel
: ephoneNumber||userPassword")(version 3.0; acl "Self entry
: modification"; allow (write) userdn="ldap:///self";),

: "(targetattr="createTimestamp||creatorsName||modifiersName||modify
: Timestamp||entryDN||entryUUID||subschemaSubentry")(version 3.0;
: acl "User-Visible Operational Attributes"; allow
: (read,search,compare) userdn="ldap:///anyone";)",

: "(targetattr="userPassword||authPassword")(version 3.0; acl "Self
: entry read"; allow (read,search,compare) userdn="ldap:///self";)",

: (targetcontrol="1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2
: || 1.2.840.113556.1.4.319 || 1.2.826.0.1.3344810.2.3 ||
: 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 ||
: 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9") (version
: 3.0; acl "Authenticated users control access"; allow(read)
: userdn="ldap:///all";),

: (targetcontrol="2.16.840.1.113730.3.4.2 ||
: 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 ||
: 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 ||
: 2.16.840.1.113730.3.4.16") (version 3.0; acl "Anonymous control
: access"; allow(read) userdn="ldap:///anyone";)

Sebbene le ACI siano difficili da leggere la loro struttura è abbastanza semplice.

targets ( version 3.0; acl “name”; permissions subjects; )

  • targets specifica le entry, gli attributi, i controlli e le extended operations alla quale la ACI si applica; per includere target multipli, ogni singolo target deve essere delimitato da parentesi (). Quando sono specificati target multipli, tutti i target devono essere verificati per rendere la ACI valida e applicabile (AND).
  • name specifica la descrizione dell’ACI in forma leggibile (human-readable)
  • permissions specifica quale azione permettere o negare. permissions è accoppiata con subjects
  • subjects specifica appunto i clients ai quali la ACI si applica in funzione di chi e’ connesso, e quando, dove o come è connesso. subjects viene accoppiata con permissions.

Coppie di definizioni permissions/subjects sono separate da ;
Quando vengono specificate coppie multiple di permissions/subjects almeno una deve essere veficata perché l’ACI venga applicata (OR).

Detto questo, per quanto mi riguarda, rimangono di difficile interpretazione (figuriamoci ai profani).
Ma fortunatamente le ACI hanno un campo che ne definisce il nome.
Ed ecco quelle che dovremo disabilitare:

  • “Anonymous read access”
  • “Anonymous extended operation access”
  • “Anonymous control access”
  • “User-Visible Root DSE Operational Attributes”
  • “User-Visible Schema Operational Attributes”
  • “User-Visible Operational Attributes”
  • “Authenticated users control access”
  • “Self entry modification”

Questi i comandi necessari alla rimozione delle ACI elencate:

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(targetattr!="userPassword||authPassword||changes||changeNumber||changeType||changeTime||targetDN||newRDN||newSuperior||deleteOldRDN||targetEntryUUID||targetUniqueID||changeInitiatorsName||changeLogCookie")(version 3.0; acl "Anonymous read access"; allow (read,search,compare) userdn="ldap:///anyone";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(extop="1.3.6.1.4.1.26027.1.6.1 || 1.3.6.1.4.1.26027.1.6.3 || 1.3.6.1.4.1.4203.1.11.1 || 1.3.6.1.4.1.1466.20037 || 1.3.6.1.4.1.4203.1.11.3") (version 3.0; acl "Anonymous extended operation access"; allow(read) userdn="ldap:///anyone";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(target="ldap:///cn=schema")(targetscope="base")(targetattr="objectClass||attributeTypes||dITContentRules||dITStructureRules||ldapSyntaxes||matchingRules||matchingRuleUse||nameForms||objectClasses")(version 3.0; acl "User-Visible Schema Operational Attributes"; allow (read,search,compare) userdn="ldap:///anyone";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(target="ldap:///")(targetscope="base")(targetattr="objectClass||namingContexts||supportedAuthPasswordSchemes||supportedControl||supportedExtension||supportedFeatures||supportedLDAPVersion||supportedSASLMechanisms||vendorName||vendorVersion")(version 3.0; acl "User-Visible Root DSE Operational Attributes"; allow (read,search,compare) userdn="ldap:///anyone";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(targetcontrol="2.16.840.1.113730.3.4.2 || 2.16.840.1.113730.3.4.17 || 2.16.840.1.113730.3.4.19 || 1.3.6.1.4.1.4203.1.10.2 || 1.3.6.1.4.1.42.2.27.8.5.1 || 2.16.840.1.113730.3.4.16") (version 3.0; acl "Anonymous control access"; allow(read) userdn="ldap:///anyone";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(targetattr="createTimestamp||creatorsName||modifiersName||modifyTimestamp||entryDN||entryUUID||subschemaSubentry")(version 3.0; acl "User-Visible Operational Attributes"; allow (read,search,compare) userdn="ldap:///anyone";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(targetcontrol="1.3.6.1.1.12 || 1.3.6.1.1.13.1 || 1.3.6.1.1.13.2 || 1.2.840.113556.1.4.319 || 1.2.826.0.1.3344810.2.3 || 2.16.840.1.113730.3.4.18 || 2.16.840.1.113730.3.4.9 || 1.2.840.113556.1.4.473 || 1.3.6.1.4.1.42.2.27.9.5.9") (version 3.0; acl "Authenticated users control access"; allow(read) userdn="ldap:///all";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --remove 'global-aci:(targetattr="audio||authPassword||description||displayName||givenName||homePhone||homePostalAddress||initials||jpegPhoto||labeledURI||mobile||pager||postalAddress||postalCode||preferredLanguage||telephoneNumber||userPassword")(version 3.0; acl "Self entry modification"; allow (write) userdn="ldap:///self";)' -n

resta quindi definita solo le seguente ACI:

  • “Replication backend access” – configurata per default

Ad esclusione di “Directory Manager” (che può tutto :), ora per creare una configurazione sicura, possiamo creare delle utenze privilegiate che hanno il diritto di aggiungere e rimuovere entry da ou=people,dc=example,dc=com (quindi utenti).
Creeremo quindi:

  • “uid=registration,ou=applications,dc=example,dc=com” – al solo scopo di aggiungere entry in people
  • “uid=delete,ou=applications,dc=example,dc=com” – al solo scopo di rimuovere entry in people

E di conseguenza dovremo definire le relative ACI:

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --add 'global-aci:(target="ldap:///ou=people,dc=example,dc=com")(version 3.0;acl "Portal Registration can create"; allow(add) userdn = "ldap:///uid=registration,ou=applications,dc=example,dc=com";)' -n

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --add 'global-aci:(target="ldap:///ou=people,dc=example,dc=com")(version 3.0;acl "Portal Delete can search remove"; allow(search,delete) userdn = "ldap:///uid=delete,ou=applications,dc=example,dc=com";)' -n

Poi dobbiamo permettere solo agli utenti conosciuti di accedere e di poter leggere o modificare solo la loro entry. Quindi definiamo:

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password set-access-control-handler-prop --add 'global-aci:(targetattr="*")(version 3.0; acl "Self entry read,search,compare,write"; allow (read,search,compare,write) userdn="ldap:///self";)' -n

Questa configurazione è ancora troppo permissiva, perché è stato definito targetattr=”*”. Qui sarebbe possibile affinare la regola definendo la lista degli attributi accessibili in lettura/scrittura e search.

Quindi di nuovo il comando che mostra la lista delle ACI globali configurate in OpenDJ:

dsconfig --trustAll -h localhost -p 4444 -D cn="Directory Manager" -w password get-access-control-handler-prop --property global-aci -n

Ed ecco l’output prodotto con la nuova configurazione:

Property   : Value(s)
-----------:-------------------------------------------------------------------
global-aci : (target="ldap:///dc=replicationchanges")(targetattr="*")(version
           : 3.0; acl "Replication backend access"; deny (all)
           : userdn="ldap:///anyone";),
           : "(target="ldap:///ou=people,dc=example,dc=com")(version 3.0;acl
           : "Portal Delete can remove"; allow(delete) userdn =
           : "ldap:///uid=delete,ou=applications,dc=example,dc=com";)",
           : "(target="ldap:///ou=people,dc=example,dc=com")(version 3.0;acl
           : "Portal Registration can create"; allow(add) userdn =
           : "ldap:///uid=registration,ou=applications,dc=example,dc=com";)",
           : "(targetattr="*")(version 3.0; acl "Self entry
           : read,search,compare,write"; allow (read,search,compare,write)
           : userdn="ldap:///self";)"
Categorie:LDAP, OpenDJ, Uncategorized
  1. Non c'è ancora nessun commento.
  1. No trackbacks yet.

Lascia un commento

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: