This is an old revision of the document!
Table of Contents
SSH contra LDAP
Antecedentes
Objetivo: iniciar una sesion SSH con un usuario almacenado en un servidor LDAP (OpenLDAP en este caso) externo en lugar de en un archivo /etc/passwd local
Nota 1: la configuracion es 100% local, no hay que tocar el servidor LDAP
Nota 2: mejor usar /bin/bash como consola (editar ese campo en el servidor LDAP). Tiene autocompletion, colores, etc…
En este ejemplo:
* Servidor OpenLDAP v3
* El servidor requiere un usuario bind (no permite busquedas anonimas)
* Requiere TLS, pero el certificado esta autofirmado, por lo que el error debe ser ignorado por el cliente
* Detalle de los usuarios y grupos que usaremos en el ejemplo:
Usuarios
dn: ou=people,dc=example,dc=com objectclass: organizationalUnit ou: people dn: cn=user1,ou=people,dc=example,dc=com cn: user1 gidnumber: 500 givenname: Name homedirectory: /home/user1 loginshell: /bin/bash objectclass: inetOrgPerson objectclass: posixAccount objectclass: top sn: Surename uid: user1 uidnumber: 1001 userpassword: {MD5}MD5hashedpassword
Grupos
dn: ou=groups,dc=example,dc=com objectclass: organizationalUnit objectclass: top ou: groups dn: cn=user1,ou=groups,dc=example,dc=com cn: user1 gidnumber: 500 memberuid: user1 objectclass: posixGroup objectclass: top
Procedimiento
1. Instalar paquetes:
sudo aptitude update; sudo aptitude install libnss-ldapd
2. Pulsar “enter” en todas las preguntas, y si podemos elegir siempre “no”. Luego refinamos la configuracion
3. Detener el demonio que cachea los valores:
sudo /etc/init.d/nscd stop
4. Editar:
sudo cp /etc/nsswitch.conf /etc/nsswitch.conf.bak sudo vim /etc/nsswitch.conf
Y dejar las siguientes lineas asi:
passwd: compat ldap group: compat ldap shadow: compat ldap
5. Editar:
sudo rm -fr /etc/nslcd.conf; sudo vim /etc/nslcd.conf
Y anyadir el siguiente contenido:
# /etc/nslcd.conf # nslcd configuration file. See nslcd.conf(5) # for details. # The user and group nslcd should run as. uid nslcd gid nslcd # The location at which the LDAP server(s) should be reachable. uri ldaps://ldap.local.example.org:636 # The search base that will be used for all queries. base ou=people,dc=example,dc=com base ou=groups,dc=example,dc=com # The LDAP protocol version to use. ldap_version 3 # The DN to bind with for normal lookups. binddn cn=readonly,dc=example,dc=com bindpw secretpassword # SSL options tls_reqcert allow
5. Reiniciar el servicio:
sudo /etc/init.d/nslcd restart
6. Probamos:
ssh -l user1 servidor1.example.com
sudo como grupo LDAP
Seguimos el ejemplo anterior, y ahora queremos:
* Crear un grupo en LDAP que se llame por ejemplo “ldapsudo”
* Que ese grupo sea el que determine que un usuario pertenece al selecto grupo de los “sudoers”
1. (Necesario en Ubuntu) Asignar una contrasenya al usuario “root”:
sudo passwd
2. Instalar paquetes:
sudo aptitude install sudo-ldap
Nota 1: instala como dependencia “nscd”, que al cachear usuarios es mejor detener para hacer pruebas
Nota 2: modifica el archivo /etc/nsswitch.conf y le anyade la siguiente linea:
sudoers: files ldap
3. Convertirse en root:
su -
4. Editar archivo sudoers:
visudo
5. Dejar la linea asi:
%ldapsudo ALL=(ALL:ALL) ALL
6. (Comprobar) Creo que es necesario cerrar todas las sesiones abiertas y ya se puede comprobar
Crear directorio /home al hacer primer login
https://wiki.debian.org/LDAP/PAM
Requisito: tener instalado el paquete libpam-ldapd
1. Editar:
sudo cp /etc/pam.d/common-session /etc/pam.d/common-session.bak sudo vim /etc/pam.d/common-session
Con la siguiente linea:
session required pam_mkhomedir.so skel=/etc/skel umask=0022
SSH solo a los miembros de un grupo
https://wiki.debian.org/LDAP/PAM
TODO: hacer que funcione con grupos LDAP de tipo “posixGroup” en lugar de “nisNetgroup”
NOTA: mientras estamos haciendo pruebas nos aseguramos de que el demonio 'nscd' esta parado
0. (Servidor SSH) Instalar libpam-modules (seguramente ya instalados):
sudo aptitude update; sudo aptitude install libpam-modules
1. (Servidor LDAP) crear un grupo de tipo “nisNetgroup”:
dn: cn=ldapssh,ou=groups,dc=example,dc=com cn: ldapssh description: Users allowed to login via SSH nisnetgrouptriple: (,user1,) objectclass: nisNetgroup objectclass: top
El usuario 'user1' es un usuario LDAP de tipo 'posixAccount'
2. (Servidor SSH) Editamos:
sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.bak sudo vim /etc/pam.d/common-auth
Y dejamos la linea asi:
auth required pam_access.so
3. (Servidor SSH) Nos aseguramos que los netgroups de esta maquina se van a consultar tambien del servidor LDAP. Editamos:
sudo cp /etc/nsswitch.conf /etc/nsswitch.conf.bak sudo vim /etc/nsswitch.conf
Y dejamos la linea asi:
netgroup: nis ldap
4. (Servidor SSH) Comprobamos que los netgroup tambien los toma del servidor LDAP:
sudo getent netgroup ldaptest
Salida esperada:
ldapssh ( ,user1,)
5. (Servidor SSH) Especificamos quien puede acceder y quien no. En este caso damos acceso al usuario local 'localuser' y a los miembros del netgroup (ojo, ni 'posixGroup' de LDAP ni grupos locales) llamado 'ldapssh':
sudo cp /etc/security/access.conf /etc/security/access.conf.bak sudo vim /etc/security/access.conf
Con el siguiente contenido:
+ : @ldaptest localuser : ALL - : ALL : ALL