Làm cách nào để định cấu hình Bảo trì thành viên nhóm ngược trên máy chủ openldap? (thành viên của)


18

Tôi hiện đang làm việc để tích hợp xác thực LDAP vào một hệ thống và tôi muốn hạn chế quyền truy cập dựa trên nhóm LDAP. Cách duy nhất để làm điều này là thông qua bộ lọc tìm kiếm và do đó tôi tin rằng tùy chọn duy nhất của tôi là sử dụng thuộc tính "MemberOf" trong bộ lọc tìm kiếm của tôi. Theo hiểu biết của tôi, thuộc tính "MemberOf" là thuộc tính hoạt động có thể được tạo bởi máy chủ cho tôi bất cứ khi nào một thuộc tính "thành viên" mới được tạo cho bất kỳ mục nhập "groupOfNames" nào trên máy chủ. Mục tiêu chính của tôi là có thể thêm thuộc tính "thành viên" vào mục nhập "groupOfNames" hiện có và có thuộc tính "thành viên" phù hợp được thêm vào DN tôi cung cấp.

Những gì tôi đã quản lý để đạt được cho đến nay:

Tôi vẫn còn khá mới đối với quản trị LDAP nhưng dựa trên những gì tôi tìm thấy trong hướng dẫn của quản trị viên openldap , có vẻ như Duy trì thành viên nhóm ngược hay còn gọi là "lớp phủ thành viên" sẽ đạt được chính xác hiệu quả mà tôi đang tìm kiếm.

Máy chủ của tôi hiện đang chạy cài đặt gói (slapd trên ubfox) của openldap 2.4.15, sử dụng cấu hình thời gian chạy kiểu "cn = config". Hầu hết các ví dụ tôi tìm thấy vẫn tham chiếu phương thức cấu hình tĩnh "slapd.conf" cũ hơn và tôi đã cố gắng hết sức để điều chỉnh các cấu hình cho mô hình dựa trên thư mục mới.

Tôi đã thêm các mục sau để kích hoạt mô-đun lớp phủ thành viên:

Kích hoạt mô-đun với olcModuleLoad

cn=config/cn\=module\{0\}.ldif

dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z

Đã bật lớp phủ cho cơ sở dữ liệu và cho phép nó sử dụng các cài đặt mặc định của nó (groupOfNames, thành viên, thành viên, v.v.)

cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof

dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z

Kết quả hiện tại của tôi:

Bằng cách sử dụng cấu hình trên, tôi có thể thêm "groupOfNames" MỚI với bất kỳ số lượng mục "thành viên" nào và có tất cả các DN liên quan được cập nhật với thuộc tính "MemberOf". Đây là một phần của hành vi tôi mong đợi. Mặc dù tôi tin rằng những điều sau đáng lẽ phải được hoàn thành với lớp phủ thành viên, tôi vẫn không biết cách thực hiện như sau và tôi sẵn sàng hoan nghênh mọi lời khuyên:

  1. Thêm thuộc tính "thành viên" vào "nhómOfNames" EXISTING và có thuộc tính "thành viên" tương ứng được tạo tự động.
  2. Xóa thuộc tính "thành viên" và có thuộc tính "thành viên" tương ứng được xóa tự động.

Câu trả lời:


10

Tôi đã vật lộn với điều tương tự, tài liệu openldap là tối giản và hầu như không hữu ích chút nào. Khi họ chuyển sang cơ sở dữ liệu cấu hình (về nguyên tắc không phải là ý tưởng tồi), tất cả các tùy chọn đã thay đổi, vì vậy khi mọi người đưa ra ví dụ từ /etc/ldap/slapd.conf thì vô dụng với cấu hình slapd hiện đại (như Ubuntu).

Cuối cùng tôi đã làm việc này. Đây là tóm tắt ... tệp LDIF đầu tiên:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

Tệp LDIF thứ hai:

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Thêm chúng vào cơ sở dữ liệu cấu hình bằng ldapadd (giống như công cụ cấu hình bình thường).

không tự động cập nhật dữ liệu hiện có trong cơ sở dữ liệu, vì vậy tôi cần sử dụng slapcat để sao chép mọi thứ vào một tệp tạm thời và truy cập từng nhóm, xóa nhóm và thêm lại nhóm đó (buộc các thuộc tính thành viên phải cập nhật chính xác). Nếu bạn đang bắt đầu với một cơ sở dữ liệu trống, thì nó sẽ cập nhật chính xác các thuộc tính khi các đối tượng được thêm vào.

Ngoài ra, lưu ý rằng "olcDatabase = {1} hdb" là rất điển hình, nhưng không được đảm bảo để phù hợp với thiết lập của bạn. Hãy chắc chắn để kiểm tra cái đó.


1
Không phải slapadd(vào cơ sở dữ liệu đã dừng) đúng cách để làm điều đó sao?
mad_vs

11

Tôi đã viết về điều này gần đây trên blog của tôi, www.jordaneunson.com Tôi đã sao chép và dán các phần có liên quan vào.

Những gì tôi phải làm là dừng dịch vụ "slapd" trên máy chủ LDAP của tôi và chỉnh sửa tệp slapd.conf của tôi và thêm hai dòng sau.

moduleload memberof.la
overlay memberof

Tôi đã có một nhómOfNames được gọi là vpn vì vậy sau đó tôi phải tạo một tệp LDIF với nội dung sau:

dn: cn=vpn,ou=Groups,dc=shop,dc=lan
objectclass: groupofnames
cn: vpn
description: Users allowed to connect on VPN
member: uid=jordan,ou=People,dc=shop,dc=lan

Và thêm nó vào cơ sở dữ liệu ldap của tôi

slapadd -f file.ldif

Sau đó, tôi đã khởi động máy chủ ldap trong gỡ lỗi để kiểm tra lỗi

slapd -d 99 -f /etc/ldap/slapd.conf 

và đã kiểm tra để đảm bảo rằng tư cách thành viên nhóm của tôi về vpn đã được liệt kê trong mục nhập người dùng của tôi.

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

và bam! sự thành công!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan

Vì vậy, tôi đã sa thải dịch vụ slapd trở lại và gặt hái được nhiều thành công kể từ đó. Đối với một công cụ quản lý GUI mới, tôi đang sử dụng phpLDAPAdmin và không gặp vấn đề gì với thuộc tính MemberOf được gán và không được gán cho người dùng của tôi.

Một điều cuối cùng cần lưu ý là thuộc tính "MemberOf" không phải là một phần của lược đồ LDAP v3 cơ bản và do đó, việc thực hiện ldapsearch sẽ không tiết lộ thuộc tính này trừ khi được truy vấn cụ thể. Đó là lý do tại sao trong ví dụ trên của tôi, nó được khai báo ở cuối các tham số ldapsearch.

Hi vọng điêu nay co ich.

Chỉnh sửa: Tôi vừa kiểm tra vấn đề của bạn với Apache Directory Studio: miễn là tôi nhập toàn bộ giá trị thành viên như đã đề cập ở trên, nó hoạt động A-OK. Tuy nhiên, thuộc tính MemberOf không hiển thị trong mục nhập của người dùng. Điều này là do thuộc tính MemberOf không phải là một phần của lược đồ LDAPv3. Để xác minh rằng nó có sử dụng công cụ dòng lệnh ldapsearch:

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

1
Tải mô-đun và thêm lớp phủ là chính xác những gì tôi đã làm không may. Như tôi đã nói, vấn đề không phải là các thuộc tính "MemberOf" không được thêm vào các mục nhập nhómOfNames mới, mà chúng không được thêm vào khi tôi chỉ cần thêm thuộc tính "thành viên" vào một nhóm hiện có. Tôi hiện đang sử dụng Apache Directory Studio để duyệt và định cấu hình LDAP của mình để nó hiển thị các mục thành viên khi tôi duyệt. Đó không phải là vấn đề của chúng được giấu kín.
emills

1
Làm thế nào bạn tạo thuộc tính thành viên trong groupOfNames? Có phải nó sử dụng toàn bộ DN? như: "uid = user, ou = People, dc = corp, dc = org" hoặc bạn chỉ cần điền tên người dùng của họ? Để ánh xạ ngược hoạt động, bạn cần sử dụng toàn bộ DN để thành viên biết vị trí đặt bản đồ ngược.
Jordan Eunson

1
Chỉnh sửa: Tôi vừa kiểm tra vấn đề của bạn với Apache Directory Studio, miễn là tôi nhập toàn bộ giá trị thành viên như đã đề cập ở trên, nó hoạt động A-OK. Tuy nhiên, thuộc tính MemberOf không hiển thị trong mục nhập của người dùng. Điều này là do thuộc tính MemberOf không phải là một phần của lược đồ LDAPv3. Để xác minh nó, hãy sử dụng công cụ dòng lệnh ldapsearch. <code> ldapsearch -h ldap -x -b "dc = shop, dc = lan" '(uid = jordan)' thành viênOf </ code>
Jordan Eunson

1
Tôi đang sử dụng DN trong mục nhập thành viên. Đó không phải là vấn đề không nhìn thấy, như tôi đã nói, họ chỉ được thêm (và do đó hiển thị) với một nhómOfNames mới được thêm vào, không phải khi tôi thêm thuộc tính thành viên vào nhóm hiện tại.
emills

1
<quote> họ chỉ được thêm (và do đó hiển thị) </ quote> Tôi xin lỗi nhưng tuyên bố này không chính xác. Thuộc tính MemberOf không hiển thị trừ khi bạn truy vấn cụ thể về nó. Bạn có thể vui lòng gửi đầu ra của lệnh ldapsearch được liệt kê ở trên? Thay đổi người dùng thành một người nên có thuộc tính MemberOf nhưng không.
Jordan Eunson
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.