Làm cách nào để xác thực người dùng trong các nhóm lồng nhau trong LDAP Apache?


21

Tôi đã làm việc xác thực LDAP với thiết lập sau

 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

Điều này hoạt động, tuy nhiên tôi đã đưa tất cả người dùng mà tôi muốn xác thực vào MySpecificGroup. Nhưng trên máy chủ LDAP tôi đã cấu hình MySpecificGroupcũng chứa nhóm MyOtherGroupvới một danh sách người dùng khác.

Nhưng những người dùng MyOtherGroupđó không được xác thực, tôi đã tự thêm tất cả họ vào MySpecificGroupvà về cơ bản không thể sử dụng nhóm lồng nhau. Tôi đang sử dụng Windows SBS 2003.

Có cách nào để cấu hình LDAP Apache để làm việc này không? Hoặc có một vấn đề với đệ quy vô hạn có thể và do đó không được phép?

Câu trả lời:


19

Bạn cần phải thiết lập AuthLDAPSubGroupDepthđể làm cho công việc này. Số nguyên bạn cung cấp ở đây chỉ định độ sâu lồng nhóm tối đa sẽ được đánh giá trước khi ngừng tìm kiếm người dùng.

Thêm phần này vào cấu hình của bạn:

AuthLDAPSubGroupDepth 1

Thông tin thêm: ở đâyở đây .


Tôi đang chạy apache 2.2, đó là mod_authnz_ldap chưa có chỉ thị AuthLDAPSubgroupDepth
Selivanov Pavel

Vậy, tại sao không cập nhật?
Bart De Vos

2
Tôi đang chạy Debian Squeeze và tôi thích sử dụng các gói từ phân phối ổn định: các bản cập nhật bảo mật thường xuyên, được kiểm tra tốt. Apache 2.3 vẫn là bản beta, nó sẽ xuất hiện trong các bản sao lưu ổn định hoặc ổn định không sớm. Tôi đã giải quyết vấn đề này bằng cách sử dụng AuthnProviderAliasngay bây giờ. Nếu không ai cung cấp giải pháp cho Apache 2.2, tiền thưởng là của bạn :)
Selivanov Pavel

đưa ra thông tin mới của các nhóm trên các máy chủ khác nhau, tôi không nghĩ phương pháp này sẽ vẫn hoạt động.
Jeff Strunk

3
AuthLDAPSubgroupDepth không tồn tại trong Apache HTTPd 2.4. AuthLDAPMaxSubgroupDepth là chỉ thị chính xác để sử dụng.
Chris Harris

33

Ngoài ra AuthLDAPSubGroupDepth, điều đó chỉ khả dụng trong apache 2.4, có thể, khi sử dụng Microsoft AD LDAP, để thực hiện ủy quyền bằng cách sử dụng các nhóm lồng nhau bằng cách sử dụng quy tắc khớp LDAP_MATCHING_RULE_IN_CHAIN. Điều này nhanh hơn nhiều so với tìm kiếm các nhóm con trên máy khách, bởi vì nó được thực hiện trên máy chủ DC với ít truy vấn hơn qua mạng.

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

Chuỗi 1.2.840.113556.1.4.1941là một OID được gọi LDAP_MATCHING_RULE_IN_CHAIN. OID này được Microsoft chỉ định sẽ được sử dụng để triển khai LDAP (một phần của Active Directory). Bạn không thể sử dụng nó với các máy chủ LDAP khác. Định dạng có thể thay đổi của con người là:iso(1).member_body(2).us(840).microsoft(113556).ad(1).as_schema(4).LDAP_MATCHING_RULE_IN_CHAIN(1941)

Từ tài liệu của Microsoft:

Quy tắc này được giới hạn cho các bộ lọc áp dụng cho DN. Đây là một toán tử so khớp "mở rộng" đặc biệt, đi theo chuỗi tổ tiên trong các vật thể đến tận gốc cho đến khi tìm thấy khớp.

Xem thêm:


Tôi sẽ nâng cấp gấp 10 lần nếu có thể. Đối với những người đang chạy RHEL 5, đây là một giải pháp tuyệt vời. Biên dịch nguồn nhà cung cấp để có được các tính năng mới nhất không phải lúc nào cũng là một giải pháp mong muốn!
Aaron Copley

Tôi vui vì nó đã giúp. Tôi nghĩ rằng đây là lần sử dụng tài liệu đầu tiên của LDAP_MATCHING_RULE_IN_CHAIN ​​trong apache.
Mircea Vutcovici

Có cách nào để sử dụng LDAP_MATCHING_RULE_IN_CHAINđể truy xuất thành viên nhóm đệ quy và chuyển nó làm tiêu đề cho máy chủ phụ trợ (sử dụng Apache làm proxy ngược) ??
Gershon Papi

mod_authnz_ldapkhông cung cấp điều này. Tuy nhiên, bạn có thể sử dụng LDAP_MATCHING_RULE_IN_CHAINbộ lọc LDAP trong ứng dụng của mình. Xem: stackoverflow.com/a/34075052/290087
Mircea Vutcovici

6

Có vẻ như tùy chọn duy nhất của bạn trong Apache 2.2 là liệt kê mọi nhóm được bao gồm bởi nhóm được ủy quyền chính của bạn.

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

Điều này sẽ hợp lý nếu các nhóm lồng nhau của bạn không quá phức tạp.


Băng qua miền AD (sử dụng hai máy chủ LDAP)

Bạn có thể thiết lập OpenLDAP với lớp phủ slapd_meta đang chạy trên máy chủ web của bạn để ủy quyền xác thực của bạn.

/etc/ldap/slapd.conf sẽ trông giống như:

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"

Sau đó, mod_authnz_ldap stanza của bạn sẽ trông giống như:

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

Điều này sẽ yêu cầu một số xoa bóp để làm cho nó hoạt động, nhưng tôi nghĩ đây là ý tưởng chung.


1
Thật không may, điều này không hoạt động khi các nhóm thuộc các miền AD khác nhau (Domain1_DomainLocal_group bao gồm Domain2_Global_group). Đó là điều đầu tiên tôi thử :)
Selivanov Pavel

Điều đó có nghĩa là một trong các nhóm nằm trên một máy chủ khác phải không? Nếu đó là sự thật, tôi nghi ngờ AuthLDAPSubgroupDepth sẽ không hoạt động cho bạn.
Jeff Strunk

Vâng, hai máy chủ, hai miền. Tôi đã xem xét về việc tích hợp hộp Linux trong AD và sử dụng xác thực PAM, nhưng mod-auth-pam không được hỗ trợ vì apache 2.0, mod-authnz-bên ngoài + pwauth không hỗ trợ các nhóm. Tất cả điều này thật đáng buồn :(
Selivanov Pavel

1
Oh, tôi đã không nhận thấy rằng bạn cập nhật câu trả lời. Sử dụng OpenLDAP slapd_meta có thể là giải pháp, nhưng nó giết chết điểm chính của cấu hình này: quản lý quyền người dùng trong một điểm duy nhất (Active Directory) bằng cách thêm / xóa người dùng khỏi các nhóm và bao gồm các nhóm trong nhau. Đây là giải pháp tương tự của tôi với AuthnProviderAlias ​​mà không cần thêm dịch vụ OpenLDAP: <AuthnProviderAlias ​​ldap First-ldap> AuthLDAPURL ... </ AuthnProviderAlias> <AuthnProviderAlias ​​ldap second-ldap -ldap
Selivanov Pavel

1
Tôi đã quyết định đưa tiền thưởng cho Bart De Vos: đây không phải là câu hỏi của tôi; đối với câu hỏi ban đầu (không có thông tin cụ thể của riêng tôi), giải pháp của anh ấy rất đơn giản và sẽ hiệu quả
Selivanov Pavel

4

Mặc dù giải pháp được cung cấp bởi @Mircea_Vutcovici có hiệu quả với tôi, nhưng lời chỉ trích duy nhất của tôi là mọi người có thể bị lúng túng khi thấy các nhà khai thác bitwise đang sử dụng.

Chẳng hạn, tôi sẽ bàn giao bản cài đặt Apache Bloodhound, sử dụng Apache HTTPd làm mặt trước với auth nhóm AD, cho một nhóm các nhà phát triển đồng nghiệp. Họ sẽ gặp vấn đề với các nhà khai thác bitwise. Tất nhiên, quản trị viên sẽ không bị lúng túng ... Tôi hy vọng.

Điều đó đang được nói, tôi có một giải pháp không sử dụng toán tử bitwise và không sử dụng nhiều định nghĩa nhóm ldap.

Cấu hình sau đây hoạt động với tôi:

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

Phần quan trọng là cấu hình sau:

AuthLDAPSubGroupClass group

AuthLDAPMaxSubgroupDepth không hoạt động, cũng như khi được kết hợp với AuthLDAPSubgroupAttribution. Chỉ đến khi tôi sử dụng AuthLDAPSubgroupClass thì auth chống lại các nhóm phụ bắt đầu hoạt động ... ít nhất là đối với tôi và tình huống của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.