En este post vamos a ver como se pobla un servidor LDAP desde un fichero «.json» creado para añadir todos lo usuarios necesarios. Uno de los atributos que añadiremos será “Clave pública ssh” de cada usuario la cual usaremos posteriormente para configurar el servicio ssh para que obtenga las claves públicas de los usuarios del servidor LDAP.
El primer paso es crear el arbol de LDAP, proceso que realizamos en este post Configuracion sistema centralizado con LDAP una vez creado.
Añadir esquema openssh-ldk
Dicho esquema nos permite añadir el atributo clave publica.
Vamos a añadir el esquema mediante un .ldif
mediante la api de OpenLDAP
dn: cn=openssh-lpk,cn=schema,cn=config objectClass: olcSchemaConfig cn: openssh-lpk olcAttributeTypes: ( 1.3.6.1.4.1.24552.500.1.1.1.13 NAME 'sshPublicKey' DESC 'MANDATORY: OpenSSH Public key' EQUALITY octetStringMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.40 ) olcObjectClasses: ( 1.3.6.1.4.1.24552.500.1.1.2.0 NAME 'ldapPublicKey' SUP top AUXILIARY DESC 'MANDATORY: OpenSSH LPK objectclass' MAY ( sshPublicKey $ uid ) )
Una vez tengamos el fichero lo añadimos con la api de «OpenLDAP» ldapadd -H ldapi:/// -Y EXTERNAL -f openssh-lpk.ldif
:
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "cn=openssh-lpk,cn=schema,cn=config"
Una vez añadido ya podremos usar el atributo “sshPublicKey”.
Agregamos el grupo «2asir» con «gidNumber=2002», para ello creamos un fichero grupo.ldif
dn: cn=grupo1,ou=Group,dc=jlramirez,dc=gonzalonazareno,dc=org objectClass: top objectClass: posixGroup gidNumber: 2002 cn: 2asir
Y lo añadimos al árbol ldapadd -x -D "cn=admin,dc=jlramirez,dc=gonzalonazareno,dc=org" -W -f grupos.ldif
Creación de script en python para cargar fichero «.json»
Vamos a crear un script en python el cual podrás encontrar en mi Python-LDAP Juanlu Ramirez, para poblar mediante el fichero JSON creado entre todos mi árbol de LDAP, para ello instalamos el siguiente paquete apt install python-ldap
, para obtener un correcto funcionamiento del script en python:
Y ejecutamos nuestro «Poblar-LDAP.py»:
root@servidor:/home/vagrant# python Poblar-LDAP.py Contraseña del usuario admin LDAP: Usuario juanluis.ramirez insertado.
Autentificación usuarios con LDAP + PAM
Vamos a autentificar los usuarios con «LDAP + PAM» para ello vamos a proceder a instalar los siguientes paquetes apt install libnss-ldapd
:
Una vez instalados los paquetes configuramos el fichero para las autentificaciones /etc/nsswitch.conf
y añadimos lo siguiente:
# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # If you have the `glibc-doc-reference' and `info' packages installed, try: # `info libc "Name Service Switch"' for information about this file. passwd: compat ldap group: compat ldap
Y ahora vamos a configurar para que se creen la carpeta de directorio de cada usuario al vuelo para ello configuramos el fichero /etc/pam.d/common-session
y añadamos la siguiente linea:
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
Una de las directivas añadidas concretamente la primera la de creación del usuario no funcionará correctamente ya que debemos generar un fichero de configuración el cual añadirá la directiva.
Vamos a crear el fichero de configuración de PAM /usr/share/pam-configs/mkhomedir
para que cree los home al vuelo con el inicio de sesión.
Name: Create home directory during login Default: yes Priority: 900 Session-Type: Additional Session: required pam_mkhomedir.so umask=0022 skel=/etc/skel
Configurar servicio SSH para acceder con los usuarios añadidos
Para poder autentificar los usuarios que tenemos en ldap con su clave publica vamos a realizar el siguiente script autentificacion_ssh.sh
que se encuentra en mi github Python-LDAP Juanlu Ramirez:
Y añadimos las siguientes lineas a /etc/ssh/sshd_config
, para que «sshd» ejecute el script automáticamente cuando intentes conectarte al usuario:
AuthorizedKeysCommand /etc/ssh/ssh.sh AuthorizedKeysCommandUser nobody
/etc/ssh/ssh.sh
, pero el script se puede llamar diferente.
Y reiniciamos el servicio service sshd restart
:
Una vez configurado el apartado anterior, para crear al vuelo el «home» del usuario y ya desde un cliente donde tengamos la clave privada nos conectamos al servidor «barney» y observamos se crea el home y ya tenemos acceso al usuario:
juanlu@Juanlu-PC:~/.ssh$ ssh -i openstack juanluis.ramirez@172.22.200.137 Creating directory '/home/juanluis.ramirez'. juanluis.ramirez@barney:~$
Eliminar usuarios del arbol
Desde el servidor LDAP ejecutamos el script en python Eliminar-LDAP.py
que encontraras en mi github Python-LDAP Juanlu Ramirez el cual debemos hacer pequeñas modificaciones para que funcione en nuestro dominio, dado que cada uno va a tener un dominio distinto.
Vamos a modificar cn=admin,dc=barney,dc=jlramirez,dc=gonzalonazareno,dc=org
, por el nuestro, es importante que dicho script se encuentre en el mismo directorio que el fichero .json
Hola amigo, cómo estás? sabes que no puedo llevar el archivo openssh-lpk.ldif? soy nuevo en linux. Lo que hice fuer abrir un archivo de texto, copiar el codigo anterior y despues ejecturar la siguiente linea tal cual la subiste.
ldapadd -H ldapi:/// -Y EXTERNAL -f openssh-lpk.ldif: y me tira el siguiente error openssh-lpk.ldif:: No such file or directory
Lo que hice fue poner el fichero manualmente en mi carpeta usuario y ver si lo tomaba de ahi, sinceramente no se como es esa parte