这是我现在的整个testingldap数据库:
# extended LDIF # # LDAPv3 # base <dc=ldap,dc=example,dc=com> (default) with scope subtree # filter: (objectclass=*) # requesting: ALL # # ldap.example.com dn: dc=ldap,dc=example,dc=com dc: ldap description: Root for Test LDAP server objectClass: top objectClass: dcObject objectClass: organization o: Test # People, ldap.example.com dn: ou=People,dc=ldap,dc=example,dc=com ou: People objectClass: top objectClass: organizationalUnit description: All people in Test # Group, ldap.example.com dn: ou=Group,dc=ldap,dc=example,dc=com ou: Group objectClass: top objectClass: organizationalUnit description: All groups in Test # Hosts, ldap.example.com dn: ou=Hosts,dc=ldap,dc=example,dc=com ou: Hosts objectClass: top objectClass: organizationalUnit description: All hosts in Test # HostGroups, ldap.example.com dn: ou=HostGroups,dc=ldap,dc=example,dc=com ou: HostGroups objectClass: top objectClass: organizationalUnit description: All host groups in Test # client1, Hosts, ldap.example.com dn: cn=client1,ou=Hosts,dc=ldap,dc=example,dc=com objectClass: hostGroup objectClass: ipHost objectClass: top cn: client1 ipHostNumber: 192.168.56.21 # client2, Hosts, ldap.example.com dn: cn=client2,ou=Hosts,dc=ldap,dc=example,dc=com objectClass: hostGroup objectClass: ipHost objectClass: top cn: client2 ipHostNumber: 192.168.56.22 # client3, Hosts, ldap.example.com dn: cn=client3,ou=Hosts,dc=ldap,dc=example,dc=com objectClass: hostGroup objectClass: ipHost objectClass: top cn: client3 ipHostNumber: 192.168.56.23 # group1, HostGroups, ldap.example.com dn: cn=group1,ou=HostGroups,dc=ldap,dc=example,dc=com objectClass: hostGroup objectClass: authorizedServiceObject objectClass: top authorizedService: sshd hostmemberIP: 192.168.56.21 hostmemberIP: 192.168.56.23 cn: group1 # group2, HostGroups, ldap.example.com dn: cn=group2,ou=HostGroups,dc=ldap,dc=example,dc=com objectClass: hostGroup objectClass: authorizedServiceObject objectClass: top authorizedService: sshd hostmemberIP: 192.168.56.22 cn: group2 # users, Group, ldap.example.com dn: cn=users,ou=Group,dc=ldap,dc=example,dc=com cn: users objectClass: posixGroup objectClass: top gidNumber: 701 memberUid: abhinav memberUid: akumar # admins, Group, ldap.example.com dn: cn=admins,ou=Group,dc=ldap,dc=example,dc=com objectClass: posixGroup objectClass: top gidNumber: 702 cn: admins memberUid: abhinavk # abhinav, People, ldap.example.com dn: uid=abhinav,ou=People,dc=ldap,dc=example,dc=com uid: abhinav cn: abhinav objectClass: account objectClass: posixAccount objectClass: top uidNumber: 1000 gidNumber: 701 homeDirectory: /home/abhinav loginShell: /bin/bash gecos: abhinav userPassword:: e1NTSEF9NitwODhYZHZnSjliZnJKcElHamdteXhsdUJDSlorNmI= # akumar, People, ldap.example.com dn: uid=akumar,ou=People,dc=ldap,dc=example,dc=com uid: akumar cn: akumar objectClass: account objectClass: posixAccount objectClass: top uidNumber: 1001 gidNumber: 701 homeDirectory: /home/akumar loginShell: /bin/bash gecos: akumar userPassword:: e1NTSEF9NVdJdS9yTkIrUlRWelJJMWxHY2UvVzJXNGxmUjYwZ04= # abhinavk, People, ldap.example.com dn: uid=abhinavk,ou=People,dc=ldap,dc=example,dc=com uid: abhinavk cn: abhinavk objectClass: account objectClass: posixAccount objectClass: top uidNumber: 1002 gidNumber: 702 homeDirectory: /home/abhinavk loginShell: /bin/bash gecos: abhinavk userPassword:: e1NTSEF9NVdJdS9yTkIrUlRWelJJMWxHY2UvVzJXNGxmUjYwZ04= # search result search: 2 result: 0 Success # numResponses: 16 # numEntries: 15
可以有n个主机组和m个用户组。
那么是否有可能允许特定的用户组只访问特定的主机组?
例如:
cn=admins,ou=Group,dc=ldap,dc=example,dc=com应该可以访问hostgroup下的所有主机cn=group1,ou=HostGroups,dc=ldap,dc=example,dc=com和“CN =组2,OU = HostGroups,DC = LDAP,DC =例如,DC = COM”
cn=users,ou=Group,dc=ldap,dc=example,dc=com应该只能访问hostgroup下的主机cn=group1,ou=HostGroups,dc=ldap,dc=example,dc=com 。
我尝试在网上寻求帮助。 找不到任何有用的东西。
上面的LDAP结构是基于我对这篇文章的理解。
ldap服务器和客户端操作系统是CentOS 6.x和ldap服务器版本是openldap-servers-2.4.39-8.el6.x86_64
自星期五以来一直困在这里。 我猜测需要在ldap服务器和ldap客户端中的基本searchURL中使用ACL来完成。 真的不确定究竟需要做什么。
更新到这个
在这里阅读这篇文章 ,给了我一个想法,完全放弃主机组,而是使用正常的组为每个主机types。 从头开始(但是与上面的结构非常相似)我创build了一个对象groupOfMembers(基本上是带有成员字段的posixGroup),并开始让组和用户成为它的一部分。
例如:
# gt1, Group, ldap.example.com dn: cn=gt1,ou=Group,dc=ldap,dc=example,dc=com objectClass: posixGroup objectClass: groupOfMembers objectClass: top gidNumber: 703 cn: gt1 member: cn=admins,ou=Group,dc=ldap,dc=example,dc=com member: cn=user1,ou=People,dc=ldap,dc=example,dc=com member: cn=users,ou=Group,dc=ldap,dc=example,dc=com
pipe理员和用户是另一个组的成员,user1是一个用户帐户。 我也将其添加到客户端的/etc/pam_ldap.conf文件中:
pam_groupdn cn=gt1,ou=Group,dc=ldap,dc=example,dc=com pam_member_attribute member
现在当我用用户user1login,我能够。 但是当我与其他用户pipe理员(pipe理员组的一部分)和appuser(用户组的一部分)尝试这个,我得到这个错误信息:
您必须是cn = gt1,ou = Group,dc = ldap,dc = example,dc = com的成员才能login。
有什么办法可以使用另一个组的成员字段中的DN,并使pam_ldap工作?
hostgroup机制是tcpwrapper结构的一部分。 也就是说,tcpwrapper不知道用户login,只能处理IP主机对和那里的访问权限。
虽然sshd可以使用tcpwrapper进行基于主机的访问控制,但tcpwrapper的这些限制当然是inheritance的。
我已经做了一个简单的从LDAP生成configuration文件片段的经验,有时是一个很好的解决scheme。 还有其他方法可以解决这个问题,也就是说,你可以在服务器上使用nslcd(对于libpam-ldapd)使用只允许它们加载相关组的用户的LDAPassembly器。