Como Instalar un server OpenLDAP en Redhat 7

Consideraciones:

Este artículo instalaremos un servidor de autenticación OpenLDAP en Redhat 7

Escenario:

El escenario utilizado es el siguiente:
- Server OpenLDAP (ldapsrv1.danielcastillo.tech, 192.168.20.41)
- Cliente OpenLDAP (ldapclt.danielcastillo.tech,192.168.20.43)

Server Pre-requisitos:

1. Crear las respectivas entradas de los host en el archivo /etc/hosts

[root@ldapsrv1 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.20.41   ldapsrv1.danielcastillo.tech ldapsrv1
192.168.20.43   ldapclt.danielcastillo.tech ldapclt
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

2. Actualizar el sistema:

[root@ldapsrv1 ~]# yum -y update
Procedimiento:
1. Instalar los paquetes necesarios:
[root@ldapsrv1 ~]# yum -y install openldap* migrationtools
2. Iniciar y habilitar el servicio:
[root@ldapsrv1 ~]# systemctl start slapd.service
[root@ldapsrv1 ~]# systemctl enable slapd.service
3. Crear una contraseña cifrada (en este caso "redhat") para el usuario administrador del server usando slappasswd:
[root@ldapsrv1 ~]# slappasswd -s redhat -n > /etc/openldap/passwd

3.1 Tengamos en cuenta la salida anterior la vamos a usar en un paso posterior.

4. Para este ejemplo vamos a usar el dominio danielcastillo.tech, obviamente puedes usar el que consideres. 

4.1. Creamos un archivo LDIF con los atributos que queremos agregar, recuerda asignar la contraseña de administracion que generamos en el paso anterior, modificar el sufijo del dominio y el root DN:

[root@ldapsrv1 ~]# cat /root/ldapdomain.ldif
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=danielcastillo,dc=tech

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=danielcastillo,dc=tech

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: PASSWORD

dn: cn=config
changetype: modify
replace: olcLogLevel
olcLogLevel: -1

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read by dn.base="cn=Manager,dc=danielcastillo,dc=tech" read by * none

4.2. Agregamos la entrada anterior usando ldapmodify  

[root@ldapsrv1 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/ldapdomain.ldif
5. Creamos los certificados SSL necesarios para habilitar TLS en las conexiones
[root@ldapsrv1 ~]# openssl req -new -x509 -nodes -out /etc/openldap/certs/danielcastilloldap.pem -keyout /etc/openldap/certs/danielcastilloldapkey.pem -days 365
5.0.1. Aseguramos el contenido del directorio /etc/openldap/certs
[root@ldapsrv1 ~]# cd /etc/openldap/certs
[root@ldapsrv1 ~]# chown ldap:ldap *
[root@ldapsrv1 ~]# chmod 600 danielcastilloldapkey.pem
5.1. Creamos un archivo LDIF con los atributos TLS que queremos agregar:
[root@ldapsrv1 ~]# cat /root/addtls.ldif
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/danielcastilloldap.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/danielcastilloldapkey.pem
5.2. Agregamos la entrada anterior usando ldapmodify
[root@ldapsrv1 ~]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /root/addtls.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
6. Copiamos la base de datos de ejemplo:
[root@ldapsrv1 ~]# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

6.1. Cambiamos permisos:

[root@ldapsrv1 ~]# chown -R ldap:ldap /var/lib/ldap/*
7. Reiniciamos servicios y corroboramos que todo vaya bien:
[root@ldapsrv1 ~]# systemctl restart slapd
[root@ldapsrv1 ~]#
[root@ldapsrv1 ~]# slaptest -u
config file testing succeeded
[root@ldapsrv1 ]# ss -lt | grep ldap
LISTEN     0      128        *:ldap                     *:*
LISTEN     0      128     [::]:ldap                  [::]:*
8. Agregamos los esquemas necesarios al server:
[root@ldapsrv1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

[root@ldapsrv1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=co
[root@ldapsrv1 ~]# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

9. Creamos los objetos base en OpenLDAP vamos a utilizar las herramientas de migración, para ello vamos modificar algunos valores predefinidos:

[root@ldapsrv1 ~]# cd /usr/share/migrationtools/
[root@ldapsrv1 migrationtools]#
[root@ldapsrv1 migrationtools]# vim migrate_common.ph

En la linea 71 cambiamos el nombre de dominio:

$DEFAULT_MAIL_DOMAIN = "danielcastillo.tech";
En la linea 74 cambiamos el nombre base que esta por default:
$DEFAULT_BASE = "dc=danielcastillo,dc=tech";
En la linea 90 activamos el esquema extendido cambiando "0" por "1":
$EXTENDED_SCHEMA = 1;

Guardamos y salimos del fichero:

10. Creamos un fichero base de configuración para nuestro dominio:

[root@ldapsrv1 ~]# cat /root/base.ldif
dn: dc=danielcastillo,dc=tech
dc: danielcastillo
objectClass: top
objectClass: domain

dn: ou=People,dc=danielcastillo,dc=tech
ou: People
objectClass: top
objectClass: organizationalUnit

dn: ou=Group,dc=danielcastillo,dc=tech
ou: Group
objectClass: top
objectClass: organizationalUnit

10.1. Agregamos la entrada anterior usando ldapmodify

[root@ldapsrv1 ~]# ldapadd -x -w redhat -D cn=Manager,dc=danielcastillo,dc=tech -f /root/base.ldif

11. Creamos 2 usuarios y grupos de prueba, primero local y luego los migramos a formato ldif:

[root@ldapsrv1 migrationtools]# useradd ldapuser1
[root@ldapsrv1 migrationtools]# useradd ldapuser2
[root@ldapsrv1 migrationtools]# echo "redhat" | passwd --stdin ldapuser1
[root@ldapsrv1 migrationtools]# echo "redhat" | passwd --stdin ldapuser2
[root@ldapsrv1 migrationtools]# grep ":10[0-9][1-9]:" /etc/passwd > /root/passwd
[root@ldapsrv1 migrationtools]# grep ":10[0-9][1-9]:" /etc/group > /root/group
[root@ldapsrv1 migrationtools]# ./migrate_passwd.pl /root/passwd /root/users.ldif
[root@ldapsrv1 migrationtools]# ./migrate_group.pl /root/group /root/groups.ldif

11.1 Agregamos los grupos y los usuarios a nuestro servidor OpenLDAP:

[root@ldapsrv1 migrationtools]# ldapadd -x -w redhat -D cn=Manager,dc=danielcastillo,dc=tech -f /root/groups.ldif
[root@ldapsrv1 migrationtools]# ldapadd -x -w redhat -D cn=Manager,dc=danielcastillo,dc=tech -f /root/users.ldif

12. Probamos la configuracion con un la utilidad ldapsearch:

[root@ldapsrv1 migrationtools]# ldapsearch -x cn=ldapuser1 -b dc=danielcastillo,dc=tech

13. Configuración de Firewall:

Agregamos el nuevo servicio a las reglas del firewall:

[root@ldapsrv1 ~]# firewall-cmd --permanent --add-service=ldap
success
[root@ldapsrv1 ~]# firewall-cmd --reload
success
14. Configuracion de rsyslog:
Edita el archivo /etc/rsyslog.conf y añade a siguiente linea:
local4.* /var/log/ldap.log
14.1. Reinicia el servicio rsyslog:
[root@ldapsrv1 ~]# systemctl restart rsyslog
Bonus Track
Compartir los home-directory con el cliente de OpenLDAP via NFS:
Server Pre-requisitos:
1. Abrir las reglas necesarias en el firewall:
[root@ldapsrv1 ~]# firewall-cmd --permanent --add-service=nfs
[root@ldapsrv1 ~]# firewall-cmd --reload
2. Instalar los paquetes e iniciar los servicios necesarios para compartir los directorios via NFS:
[root@ldapsrv1 ~]# yum -y install rpcbind nfs-utils
[root@ldapsrv1 ~]# systemctl enable rpcbind
[root@ldapsrv1 ~]# systemctl enable nfs-server
[root@ldapsrv1 ~]# systemctl start rpcbind
[root@ldapsrv1 ~]# systemctl start nfs-server
3. Definir y exportar el directorio que se va a compartir:
[root@ldapsrv1 ~]# cat /etc/exports
/home *(rw,sync,no_root_squash)
En el cliente (para compartir home directory):
1. Actualizar el sistema:
[root@ldapclt ~]# yum -y update
2. Instalar los paquetes necesarios:
[root@ldapclt ~]# yum install -y nfs-utils autofs openldap-clients nss-pam-ldapd
3. Editar el archivo maestro de configuración del servicio autofs:
[root@ldapclt ~]# cat /etc/auto.master
/home /etc/home.map
4. Creamos el archivo autofs map:
[root@ldapclt ~]# cat /etc/home.map
*  -fstype=nfs,rw,nosuid,soft  ldapsrv1.danielcastillo.tech:/home/&
5. Habilitamos e iniciamos los servicios necesarios:
[root@ldapclt ~]# systemctl enable rpcbind
[root@ldapclt ~]# systemctl start rpcbind
[root@ldapclt ~]# systemctl enable autofs
[root@ldapclt ~]# systemctl start autofs
En el cliente (para habilitar la autenticacion OpenLDAP):
6. Configuramos la autenticación usando la utilidad authconfig-tui:
[root@ldapclt ~]# authconfig-tui
7. Probamos con el usuario ldapuser1 que la autenticacion esta funcionando:
[root@ldapclt ~]# getent passwd ldapuser1
ldapuser1:x:1001:1001:ldapuser1:/home/ldapuser1:/bin/bash