En esta entrada podemos ver como introducir usuarios desde un fichero JSON a LDAP para utilizarlos para autenticación con clave publica para poder acceder por ssh a nuestra maquina, con creación automática del directorio home del usuario.
Scripts: (https://github.com/Tedezed/LDAP/tree/master/Poblar%20LDAP%20con%20JSON)
- Poblar_LDAP.py Para añadir los usuarios del fichero humans.js.
- Eliminar_LDAP.py Para eliminar los usuarios del fichero humans.js.
- humans.js Usuarios que vamos a añadir a nuestro LDAP.
- public_key.sh Script para consultar la clave publica del usuario.
Comenzamos añadiendo el esquema openssh-lpk, para poder incluir claves públicas ssh en un directorio LDAP:
nano openssh-lpk.ldif
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 )
)
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f openssh-lpk.ldif
Creamos un virtualenv:
cd .virtualenv
virtualenv ldap
cd ldap
Activamos el virtualenv anterior:
source bin/activate
Instalamos python-ldap:
pip install python-ldap
Una vez echo esto podemos ejecutar Poblar_LDAP.py para introducir los usuarios del fichero humans.js.
Instalamos libnss-ldapd para la autenticación de usuario en LDAP:
apt-get install libnss-ldapd ldap-utils
Configuración durante la instalación:
Conexión:
ldap://localhost:389/
Base de nuestro árbol:
dc=example,dc=org
Configuración de NSS con LDAP:
passwd
group
Configuramos /etc/pam.d/common-session
session [success=ok default=ignore] pam_ldap.so minimum_uid=2000
Configuramos mkhomedir en pam-configs:
nano /usr/share/pam-configs/mkhomedir
Name: Create home directory during login
Default: yes
Priority: 900
Session-Type: Additional
Session:
required pam_mkhomedir.so umask=0022 skel=/etc/skel
Actualizamos pam con:
sudo pam-auth-update
Creamos nuestro script para obtener la clave publica del usuario del ldap:
nano /usr/bin/public_key.sh
#!/bin/sh
ip_ldap="localhost"
port=389
base="dc=example,dc=org"
ldapsearch -x -h $ip_ldap -p $port -b $base -s sub "(&(objectClass=posixAccount) (objectClass=ldapPublicKey) (cn=$1))" | \
sed -n '/^ /{H;d};/sshPublicKey:/x;$g;s/\n *//g;s/sshPublicKey: //gp'
Comprobamos su funcionamiento de script:
(ldap)root@debian:/home/debian/ldap/python# sh /usr/bin/public_key.sh morrigan.rigan
ssh-rsa ssh-rsa Clave_RSA_Publica
Editamos y especificamos la ruta del script:
nano /etc/ssh/sshd_config
# LDAP SSH
AuthorizedKeysCommand /usr/bin/public_key.sh
AuthorizedKeysCommandUser root
Reiniciamos:
service sshd restart