Acesso SSH a grupos de hosts com base em grupos de usuários usando LDAP

3

Este é todo o meu banco de dados de teste do ldap por enquanto:

# 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

Pode haver n número de grupos de hosts e m número de grupos de usuários.

Então, é possível permitir que grupos de usuários específicos acessem apenas grupos de host específicos? **

Por exemplo:

  • o grupo cn=admins,ou=Group,dc=ldap,dc=example,dc=com deve conseguir acessar todos os hosts em hostgroup cn=group1,ou=HostGroups,dc=ldap,dc=example,dc=com e "cn = group2, ou = HostGroups, dc = ldap, dc = exemplo, dc = com"

  • o grupo cn=users,ou=Group,dc=ldap,dc=example,dc=com só deve poder acessar os hosts em hostgroup cn=group1,ou=HostGroups,dc=ldap,dc=example,dc=com .

Eu tentei pesquisar on-line por ajuda. não encontrei nada de útil.

A estrutura LDAP acima baseia-se no meu entendimento de este post aqui .

O servidor ldap e o SO cliente são o CentOS 6.xe a versão do servidor ldap é openldap-servers-2.4.39-8.el6.x86_64

Ficam presos desde sexta-feira. Eu estou supondo que algo precisa ser feito com ACLs no servidor ldap e url de pesquisa de base em clientes ldap. Realmente não tenho certeza sobre o que exatamente precisa ser feito.

Atualize para isso

Ler este post aqui , deu-me uma ideia para abandonar o anfitrião grupos inteiramente e, em vez disso, use grupos normais para cada tipo de host. comecei do zero (mas muito parecido com a estrutura que está acima) Eu criei um objeto groupOfMembers (basicamente posixGroup com um campo de membro nele), e comecei a fazer grupos e usuários parte dele.

Por exemplo:

# 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

administradores e usuários são outros grupos com membros e usuário1 é uma conta de usuário. Eu também adicionei isso ao arquivo /etc/pam_ldap.conf no lado do cliente:

pam_groupdn cn=gt1,ou=Group,dc=ldap,dc=example,dc=com
pam_member_attribute member

agora, quando faço o login com o usuário user1, posso. mas quando eu tento isso com outro usuário admin (parte do grupo admins) e appuser (parte do grupo de usuários), eu recebo esta mensagem de erro:

Você deve ser um membro de cn = gt1, ou = Grupo, dc = ldap, dc = exemplo, dc = com para efetuar login.

Existe alguma maneira de usar o DN de outro grupo no campo de membro de um grupo e fazer o pam_ldap funcionar?

    
por AbhinavK 12.11.2014 / 00:30

1 resposta

0

O mecanismo hostgroup faz parte da estrutura tcpwrapper. Dito isso, o tcpwrapper não sabe sobre logins de usuários e apenas lida com pares de hosts IP e seus direitos de acesso.

Enquanto o sshd pode usar o tcpwrapper para controle de acesso baseado em host, estas limitações do tcpwrapper são naturalmente herdadas.

Eu fiz a experiência que simplesmente gerar trechos de arquivo de configuração do LDAP com um script às vezes é uma boa solução. Há também outras maneiras de resolver isso, ou seja, você poderia fazer nslcd (para libpam-ldapd) nos servidores usar adaptadores LDAP que só permitem carregar usuários de um grupo relacionado.

    
por 12.11.2014 / 15:09

Tags