Apache LDAP'de iç içe geçmiş gruplartaki kullanıcılar nasıl doğrulanır?


21

Aşağıdaki kurulumla LDAP kimlik doğrulaması kullanıyorum

 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

Bu işe yarar, ancak kimlik doğrulamak istediğim tüm kullanıcıları girdim MySpecificGroup. Ancak LDAP sunucusunda , başka bir kullanıcı listesine sahip MySpecificGroupgrubu da içerecek şekilde yapılandırdım MyOtherGroup.

Ancak bu kullanıcıların MyOtherGroupkimliği doğrulanmadı, hepsini manuel olarak ekledim MySpecificGroupve temelde iç içe gruplandırmayı kullanamıyorum. Windows SBS 2003 kullanıyorum.

Bunu yapmak için Apache LDAP'yi yapılandırmanın bir yolu var mı? Yoksa olası sonsuz özyinelemeyle ilgili bir sorun mu var ve bu nedenle buna izin verilmiyor mu?

Yanıtlar:


19

AuthLDAPSubGroupDepthBu işe yaraması için ayarlamanız gerekir . Burada sağladığınız tam sayı, kullanıcı arama kesilmeden önce değerlendirilecek olan maksimum alt grup yuvalama derinliğini belirtir.

Bunu configinize ekleyin:

AuthLDAPSubGroupDepth 1

Daha fazla bilgi: burada ve burada .


Apache 2.2 kullanıyorum, mod_authnz_ldap henüz AuthLDAPSubGroupDepth yönergesine sahip değil: httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html
Selivanov Pavel

Peki, neden güncelleme değil?
Bart De Vos

2
Debian Squeeze kullanıyorum ve kararlı dağıtımdan paketleri kullanmayı tercih ediyorum: iyi denenmiş, düzenli güvenlik güncellemeleri. Apache 2.3 hala beta sürümünde, kısa sürede kararlı veya kararlı desteklerle görünecek. AuthnProviderAliasŞimdilik bu sorunu kullanarak çözdüm . Eğer kimse Apache 2.2 için bir çözüm sunmuyorsa, ödül sizindir :)
Selivanov Pavel 16:11

farklı sunucularda bulunan grupların yeni bilgileri göz önüne alındığında, bu yöntemin hala işe yarayacağını sanmıyorum.
Jeff Strunk

3
AuthLDAPSubGroupDepth, Apache HTTPd 2.4'te mevcut değil. AuthLDAPMaxSubGroupDepth, kullanılacak doğru yönergedir.
Chris Harris

33

Ayrıca AuthLDAPSubGroupDepth, bu yalnızca Apache 2.4'te mevcuttur, Microsoft AD LDAP kullanırken, iç içe geçmiş grupları kullanarak LDAP_MATCHING_RULE_IN_CHAIN ​​eşleştirme kuralını kullanarak yetkilendirme yapmak mümkündür. Bu, istemcide alt grupları aramaktan çok daha hızlıdır, çünkü DC sunucusunda ağ üzerinden daha az sorgu ile yapılır.

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

Dize adı verilen 1.2.840.113556.1.4.1941bir OID'dirLDAP_MATCHING_RULE_IN_CHAIN . Bu OID, LDAP uygulaması (Active Directory'nin bir parçası) ile birlikte kullanılmak üzere Microsoft tarafından atanmıştır. Diğer LDAP sunucuları ile kullanamazsınız. İnsan tarafından değiştirilebilir format:iso(1).member_body(2).us(840).microsoft(113556).ad(1).as_schema(4).LDAP_MATCHING_RULE_IN_CHAIN(1941)

Microsoft belgelerinden:

Bu kural DN için geçerli olan filtrelerle sınırlıdır. Bu, nesnelerdeki soy zincirini bir eşleşme bulana kadar kökten dolaştıran özel bir "genişletilmiş" eşleme işlecidir.

Ayrıca bakınız:


Yapabilseydim, bu 10x 'i ben oyla RHEL 5 kullananlar için bu harika bir çözüm. En son özellikleri elde etmek için satıcı kaynağını derlemek her zaman istenen bir çözüm değildir!
Aaron Copley

Yardım ettiğine sevindim. LDAP_MATCHING_RULE_IN_CHAIN'in apache'de ilk belgelenmiş kullanımı olduğunu düşünüyorum.
Mircea Vutcovici

LDAP_MATCHING_RULE_IN_CHAINÖzyinelemeli grup üyeliğini almak ve bunu bir arka uç sunucusuna başlık olarak geçirmek için kullanmanın bir yolu var mı (Apache'yi ters proxy olarak kullanmak)?
Gershon Papi

mod_authnz_ldapbunu sağlamaz. Ancak LDAP_MATCHING_RULE_IN_CHAINuygulamanızda LDAP filtresini kullanabilirsiniz . Bakınız: stackoverflow.com/a/34075052/290087
Mircea Vutcovici

6

Apache 2.2'deki tek seçeneğiniz, ana yetkili grubunuzun içerdiği her grubu listelemektir.

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

Bu, iç içe geçmiş gruplarınız çok karmaşık değilse makul olmalıdır.


AD Etki Alanlarını Geçme (iki LDAP sunucusu kullanarak)

Kimlik doğrulama işleminizi proxy yapmak için web sunucunuzda çalışan slapd_meta kaplamasıyla OpenLDAP ayarlayabilirsiniz .

/etc/ldap/slapd.conf şöyle bir şeye benzemelidir:

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"

O zaman, mod_authnz_ldap stanza'nız şöyle gözükecektir:

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

Bu işe yaraması için biraz masaj gerektirecek, ama bence bu genel bir fikir.


1
Maalesef bu gruplar farklı AD alan adlarındayken çalışmaz (Domain1_DomainLocal_Group, Domain2_Global_Group öğesini içerir). İlk denediğim şey buydu :)
Selivanov Pavel

Bu, gruplardan birinin farklı bir sunucuda olduğu anlamına mı geliyor? Bu doğruysa, AuthLDAPSubGroupDepth’in de sizin için çalışmayacağından şüpheleniyorum.
Jeff Strunk 17:11

Evet, iki sunucu, iki alan. Linux kutusunu AD'ye entegre etmeyi ve PAM kimlik doğrulamasını kullanmayı düşündüm, ancak apache 2.0, mod-authnz-external + pwauth grupları desteklemediğinden mod-auth-pam desteklenmiyor. Bunların hepsi ne yazık ki :(
Selivanov Pavel

1
Yanıtını güncellediğini fark etmedim. OpenLDAP kullanmak slapd_meta çözüm olabilir, ancak bu konfigürasyonun ana noktasını öldürür: kullanıcılara gruplardan kullanıcıları ekleyerek / silerek ve grupları birbirine ekleyerek tek bir noktada (Active Directory) yönetme. Ek OpenLDAP servisi olmayan AuthnProviderAlias ​​ile olan analog çözümüm: <AuthnProviderAlias ​​ldap first-ldap> AuthLDAPURL ... </AuthnProviderAlias> <AuthnProviderAlias ​​ldap ikinci-ldap> AuthLDURUR ... -ldap
Selivanov Pavel

1
Bart De Vos'a ödül vermeye karar verdim: bu benim sorum değil; Özgün bir soru için (benim
özelim

4

@Mircea_Vutcovici tarafından sağlanan çözüm benim için çalışırken, benim tek eleştirim, insanların kullanımda bitsel operatörleri gördüklerinde geveze olmalarıdır.

Örneğin, AD grup auth ile ön uç olarak Apache HTTPd kullanan bir Apache Bloodhound kurulumunu bir grup geliştiriciye teslim edeceğim. Bitsel operatörlerle uğraşmak için sorunları olacak. Yöneticiler elbette gevrek olmayacak ... Umarım.

Söylendiği gibi, bitsel operatörü kullanmayan ve çoklu ldap grubu tanımları kullanmayan bir çözümüm var.

Aşağıdaki yapılandırma benim için çalışıyor:

<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>

Kritik kısım şu yapılandırmaydı:

AuthLDAPSubGroupClass group

AuthLDAPMaxSubGroupDepth tek başına ya da AuthLDAPSubgroupAttribute ile eşleştiğinde çalışmaz. Sadece AuthLDAPSubGroupClass kullandığımda, alt gruplara karşı kimlik doğrulama çalışmaya başladı ... en azından benim ve durumum için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.