Come autenticare gli utenti nei gruppi nidificati in Apache LDAP?


21

Sto lavorando l'autenticazione LDAP con la seguente configurazione

 AuthName            "whatever"
 AuthType            Basic
 AuthBasicProvider   ldap
 AuthLDAPUrl         "ldap://server/OU=SBSUsers,OU=Users,OU=MyBusiness,DC=company,DC=local?sAMAccountName?sub?(objectClass=*)"
 Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local

Funziona, tuttavia devo mettere tutti gli utenti in cui voglio autenticarmi MySpecificGroup. Ma sul server LDAP ho configurato che MySpecificGroupcontiene anche il gruppo MyOtherGroupcon un altro elenco di utenti.

Ma quegli utenti MyOtherGroupnon sono autenticati, devo aggiungerli manualmente tutti MySpecificGroupe sostanzialmente non posso usare il raggruppamento nidificato. Sto usando Windows SBS 2003.

C'è un modo per configurare Apache LDAP per farlo? O c'è un problema con una possibile ricorsione infinita e quindi non consentita?

Risposte:


19

Devi impostare AuthLDAPSubGroupDepthper farlo funzionare. Il numero intero fornito qui specifica la profondità massima di annidamento del sottogruppo che verrà valutata prima che la ricerca dell'utente venga interrotta.

Aggiungi questo alla tua configurazione:

AuthLDAPSubGroupDepth 1

Ulteriori informazioni: qui e qui .


Sto eseguendo apache 2.2, è mod_authnz_ldap non ha direttiva AuthLDAPSubGroupDepth
Selivanov Pavel

Quindi, perché non aggiornare?
Bart De Vos,

2
Sto eseguendo Debian Squeeze e preferisco usare pacchetti dalla distribuzione stabile: aggiornamenti di sicurezza ben collaudati e regolari. Apache 2.3 è ancora beta, apparirà presto in backport stabili o stabili. Ho risolto questo problema usando AuthnProviderAliasper ora. Se nessuno offrirà la soluzione per Apache 2.2, la taglia è tua :)
Selivanov Pavel,

date le nuove informazioni dei gruppi che si trovano su server diversi, non credo che questo metodo funzionerà ancora.
Jeff Strunk,

3
AuthLDAPSubGroupDepth non esiste in Apache HTTPd 2.4. AuthLDAPMaxSubGroupDepth è la direttiva corretta da usare.
Chris Harris,

33

Inoltre AuthLDAPSubGroupDepth, questo è disponibile solo in Apache 2.4, è possibile, quando si utilizza LDAP Microsoft AD, eseguire l'autorizzazione utilizzando i gruppi nidificati utilizzando la regola di corrispondenza LDAP_MATCHING_RULE_IN_CHAIN. Questo è molto più veloce della ricerca di sottogruppi sul client, perché viene eseguito sul server DC con meno query sulla rete.

Require ldap-filter memberof:1.2.840.113556.1.4.1941:=CN=Access to Apache,OU=My Organization Unit,DC=company,DC=com

La stringa 1.2.840.113556.1.4.1941è un OID chiamato LDAP_MATCHING_RULE_IN_CHAIN. Questo OID è assegnato da Microsoft per essere utilizzato con la sua implementazione LDAP (parte di Active Directory). Non puoi usarlo con altri server LDAP. Il formato ridimensionabile umano è:iso(1).member_body(2).us(840).microsoft(113556).ad(1).as_schema(4).LDAP_MATCHING_RULE_IN_CHAIN(1941)

Dalla documentazione Microsoft:

Questa regola è limitata ai filtri che si applicano al DN. Questo è uno speciale operatore di corrispondenza "esteso" che porta la catena degli antenati negli oggetti fino alla radice fino a quando non trova una corrispondenza.

Guarda anche:


Voterei questo 10x se potessi. Per le persone che eseguono RHEL 5, questa è un'ottima soluzione. Compilare la fonte del fornitore per ottenere le ultime funzionalità non è sempre una soluzione desiderabile!
Aaron Copley,

Sono contento che abbia aiutato. Penso che questo sia stato il primo utilizzo documentato di LDAP_MATCHING_RULE_IN_CHAIN ​​in apache.
Mircea Vutcovici,

C'è un modo per usare LDAP_MATCHING_RULE_IN_CHAINper recuperare l'appartenenza al gruppo ricorsivo e passarlo come intestazione a un server back-end (usando Apache come proxy inverso) ??
Gershon Papi,

mod_authnz_ldapnon fornisce questo. Tuttavia, puoi utilizzare il LDAP_MATCHING_RULE_IN_CHAINfiltro LDAP nella tua applicazione. Vedi: stackoverflow.com/a/34075052/290087
Mircea Vutcovici

6

Sembra che la tua unica opzione in Apache 2.2 sia quella di elencare tutti i gruppi inclusi nel tuo principale gruppo autorizzato.

Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local
Require ldap-group  CN=MyOtherGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local

Questo dovrebbe essere ragionevole se i tuoi gruppi nidificati non sono troppo complicati.


Attraversamento di domini AD (utilizzando due server LDAP)

È possibile configurare OpenLDAP con l' overlay slapd_meta in esecuzione sul server Web per eseguire il proxy dell'autenticazione.

/etc/ldap/slapd.conf dovrebbe essere simile a:

database meta
suffix   "DC=company,DC=local"
uri      "ldap://a.foo.com/OU=MyBusiness,DC=company,DC=local"
uri      "ldap://b.foo.com/OU=otherdomainsuffix,DC=company,DC=local"

Quindi, la tua stanza mod_authnz_ldap sarebbe simile a:

AuthName            "whatever"
AuthType            Basic
AuthBasicProvider   ldap
AuthLDAPUrl         "ldapi:///DC=company,DC=local?sAMAccountName?sub?(objectClass=*)"
Require ldap-group  CN=MySpecificGroup,OU=Security Groups,OU=MyBusiness,DC=company,DC=local
Require ldap-group  CN=MyOtherGroup,OU=Security Groups,OU=otherdomainsuffix,DC=company,DC=local

Ciò richiederà qualche massaggio per farlo funzionare, ma penso che questa sia l'idea generale.


1
Purtroppo questo non funziona quando i gruppi si trovano in domini AD diversi (Domain1_DomainLocal_Group include Domain2_Global_Group). È stata la prima cosa che ho provato :)
Selivanov Pavel

Ciò significa che uno dei gruppi si trova su un server diverso? Se questo è vero, sospetto che AuthLDAPSubGroupDepth non funzionerà neanche per te.
Jeff Strunk,

Sì, due server, due domini. Ho pensato di integrare Linux box in AD e di usare l'autenticazione PAM, ma mod-auth-pam non è supportato poiché apache 2.0, mod-authnz-external + pwauth non supporta i gruppi. Questo è purtroppo :(
Selivanov Pavel,

1
Oh, non ho notato che hai aggiornato la risposta. L'uso di OpenLDAP slapd_meta può essere una soluzione, ma uccide il punto principale di questa configurazione: ottenere i diritti utente gestiti in un singolo punto (Active Directory) aggiungendo / eliminando utenti da gruppi e includendo gruppi l'uno nell'altro. Ecco la mia soluzione analogica con AuthnProviderAlias ​​senza servizio OpenLDAP aggiuntivo: <AuthnProviderAlias ​​ldap first-ldap> AuthLDAPURL ... </AuthnProviderAlias> <AuthnProviderAlias ​​ldap second-ldap> AuthLDAPURL ... </AuthnProviderAliasapic -ldap
Selivanov Pavel

1
Ho deciso di dare la grazia a Bart De Vos: questa non è una mia domanda; per una domanda originale (senza il mio specifico) la sua soluzione è semplice e funzionerà
Selivanov Pavel

4

Mentre la soluzione fornita da @Mircea_Vutcovici ha funzionato per me, la mia unica critica è che le persone possono diventare schizzinose quando vedono operatori bit a bit in uso.

Ad esempio, consegnerò un'installazione di Apache Bloodhound, che utilizza Apache HTTPd come front-end con l'autenticazione del gruppo AD, a un gruppo di colleghi sviluppatori. Avranno problemi con gli operatori bit a bit. Gli amministratori non saranno così schizzinosi ovviamente ... spero.

Detto questo, ho una soluzione che non utilizza l'operatore bit a bit e che non utilizza più definizioni di gruppo LDAP.

La seguente configurazione funziona per me:

<Location /protected>
    # Using this to bind
    AuthLDAPURL "ldap://<MY_SERVER>:3268/<MY_SEARCH_BASE>?sAMAccountName?sub?(objectClass=user)"
    AuthLDAPBindDN "<MY_BIND_DN>"
    AuthLDAPBindPassword "<MY_PASSWORD>"
    LDAPReferrals Off

    AuthType Basic
    AuthName "USE YOUR AD ACCOUNT"
    AuthBasicProvider ldap
    Require ldap-group <MY_PARENT_GROUP>
    AuthLDAPMaxSubGroupDepth 1
    AuthLDAPSubgroupAttribute member
    AuthLDAPSubGroupClass group
    AuthLDAPGroupAttribute member
    AuthLDAPGroupAttributeIsDN on
</Location>

La parte critica era la seguente configurazione:

AuthLDAPSubGroupClass group

AuthLDAPMaxSubGroupDepth non funziona da solo, né se associato a AuthLDAPSubgroupAttribute. Fu solo quando ho usato AuthLDAPSubGroupClass che auth contro i sottogruppi ha iniziato a funzionare ... almeno per me e la mia situazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.