Liệt kê các thành viên nhóm sử dụng ldapsearch


12

Thư mục LDAP của công ty chúng tôi được đặt trong thiết lập Thư mục mở của Máy chủ Snow Leopard. Tôi đang cố gắng sử dụng ldapsearchcông cụ để xuất tệp .ldif để nhập vào máy chủ LDAP bên ngoài khác để xác thực với bên ngoài; về cơ bản cố gắng để có thể sử dụng cùng một thông tin bên trong và bên ngoài.

Tôi đã ldapsearchlàm việc và cung cấp cho tôi nội dung và thuộc tính của mọi thứ trong OU "Người dùng" và thậm chí chỉ lọc các thuộc tính tôi cần:

ldapsearch -xLLL -H ldap://server.domain.net / 
 -b "cn=users,dc=server,dc=domain,dc=net" objectClass / 
 uid uidNumber cn userPassword > directorycontents.ldif

Điều đó cho tôi một danh sách người dùng và các thuộc tính mà tôi có thể nhập vào máy chủ OpenLDAP từ xa của mình.

dn: uid=username1,cn=users,dc=server,dc=domain,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: organizationalPerson
uidNumber: 1000
uid: username1
userPassword:: (hashedpassword)
cn: username1

Tuy nhiên, khi tôi thử cùng một truy vấn trên một "nhóm" OD thay vì "thùng chứa", kết quả sẽ như thế này:

dn: cn=groupname,cn=groups,dc=server,dc=domain,dc=net
objectClass: posixGroup
objectClass: apple-group
objectClass: extensibleObject
objectClass: top
gidNumber: 1032
cn: groupname
memberUid: username1
memberUid: username2
memberUid: username3

Điều tôi thực sự muốn là một danh sách người dùng từ ví dụ hàng đầu được lọc dựa trên tư cách thành viên nhóm của họ, nhưng có vẻ như tư cách thành viên được đặt từ phía Nhóm, thay vì phía tài khoản người dùng. Phải có một cách để lọc cái này xuống và chỉ xuất những gì tôi cần, phải không?

Câu trả lời:


4

Tôi làm việc với LDAP, nhưng không phải là thương hiệu máy chủ cụ thể.

Điều đầu tiên tôi thử là tìm kiếm người dùng kéo tất cả các thuộc tính của họ thay vì hạn chế nó theo cách mà ví dụ của bạn làm.

ldapsearch -xLLL -H ldap://server.domain.net \
    -b "cn=users,dc=server,dc=domain,dc=net" uid=username1 \* +

Thường có một thuộc tính "thành viên" trên người dùng liệt kê tên nhóm hoặc nhóm DN cho các nhóm mà người dùng đang ở, được giữ đồng bộ với thông tin trong nhóm. Nếu đó là cách dễ nhất để làm những gì bạn muốn.

Các *sẽ lấy tất cả thuộc tính người dùng (hành vi mặc định) và +sẽ lấy tất cả các thuộc tính hoạt động (thuộc tính đặc biệt).


Đây là một luồng cũ nhưng cần được đề cập rằng trong OpenLDAP (cơ sở của Thư mục mở) memberOflà một thuộc tính hoạt động và cần phải được yêu cầu rõ ràng. Một thứ ldapsearchgiống như được đề xuất ở đây sẽ không trở lại memberOf, ngay cả khi nó tồn tại. Cũng cần đề cập rằng memberOflớp phủ thường không được bật theo mặc định, mặc dù tôi không biết cách xử lý này trong OS X và Thư mục mở.
daff

@daff Tôi tin rằng một + nên có được tất cả các thuộc tính hoạt động ...
freiheit

À, thực sự. Cập nhật của bạn ldapsearchhoạt động như quảng cáo.
daff

0

Bạn đang nhắm đến việc đại diện cho các nhóm bằng cách đặt các đối tượng người dùng trong các thùng chứa khác nhau? Giống:

dn: uid=username1,cn=users,cn=accounting,dc=server,dc=domain,dc=net
...
dn: uid=username2,cn=users,cn=engineering,dc=server,dc=domain,dc=net
...

Nếu vậy, tôi hy vọng bạn sẽ phải viết một kịch bản để xoa bóp LDIF. Hãy thử các mô-đun Python-LDAP tuyệt vời .

Tôi sẽ hỏi tại sao bạn muốn làm điều đó mặc dù. Nó khiến cho người dùng thuộc nhiều nhóm trở nên lộn xộn và trái với quy ước của Open Directory. Bạn không thể sao chép tất cả các đối tượng người dùng và nhóm vào máy chủ OpenLDAP của bạn và truy vấn nó dựa trên tư cách thành viên nhóm chứ không phải là đối tượng người dùng tồn tại trong đó?


0
ldapsearch -x \
-b "cn=<your group name>,ou=group,dc=<your org>,dc=com" \
-H ldaps://<ldap server>:<port>

Điều này hoạt động rất tốt.

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.