User Tools

Site Tools


informatica:linux:ssh_contra_ldap

This is an old revision of the document!


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
informatica/linux/ssh_contra_ldap.1378389644.txt.gz · Last modified: 2015/04/13 20:19 (external edit)