Instalación y configuración inicial de OpenLDAP
Realiza la instalación y configuración básica de OpenLDAP en alfa,utilizando como base el nombre DNS asignado. Deberás crear un usuario llamado prueba y configurar una máquina cliente basada en Debian y Rocky para que pueda validarse en el servidor ldap configurado anteriormente con el usuario prueba.
Instalación de OpenLDAP
Para instalar OpenLDAP en alfa, ejecutamos el siguiente comando:
sudo apt update
sudo apt install slapd
Al instalarlo pedirá una contraseña para el administrador de la base de datos:
Después de instalarlo, comprobamos en que puerto está escuchando:
sudo netstat -tulpn | grep slapd
Una vez comprobado que se está ejecutando, podemos buscar sobre el directorio LDAP con el comando ldapsearch
para verificar que la conexión (con el servidor LDAP) está permitida:
- Búsqueda de todos los registros:
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
- Búsqueda de un registro en concreto como puede ser mi propio usuario:
ldapsearch -x -b "dc=nazareth,dc=gonzalonazareno,dc=org"
Donde -x indica que se va a utilizar el modo simple de autenticación, -b indica la base de búsqueda y dc= indica el dominio de búsqueda (en este caso nazareth.gonzalonazareno.org).
Configuración inicial de OpenLDAP
Para organizar la estructura de nuestro directorio LDAP, vamos a crear un fichero llamado base.ldif
donde meteremos la configuración y la estructura de nuestro directorio:
dn: ou=Personas,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou: Personas
dn: ou=Grupos,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou: Grupos
dn
es el nombre del objeto, es decir, el nombre del contenedor.objectClass
es el tipo de objeto que vamos a crear.ou
es el nombre del contenedor.
En este caso, vamos a crear dos contenedores, uno para las personas y otro para los grupos.
Una vez creado el fichero, lo ejecutamos con el siguiente comando:
ldapadd -x -D "cn=admin,dc=nazareth,dc=gonzalonazareno,dc=org" -f base.ldif -W
*Nota: El parámetro -W indica que se va a solicitar la contraseña del usuario administrador.
Y comprobamos que se ha creado correctamente:
ldapsearch -x -b "dc=nazareth,dc=gonzalonazareno,dc=org"
Si queremos borrarlos podemos ejecutar el siguiente comando:
ldapdelete -x -D "cn=admin,dc=nazareth,dc=gonzalonazareno,dc=org" -W "ou=Personas,dc=nazareth,dc=gonzalonazareno,dc=org"
ldapdelete -x -D "cn=admin,dc=nazareth,dc=gonzalonazareno,dc=org" -W "ou=Grupos,dc=nazareth,dc=gonzalonazareno,dc=org"
Creación de usuarios y grupos
Para crear usuarios y grupos, vamos a crear dos ficheros, uno para los usuarios y otro para los grupos.
Para crear los grupos, creamos un fichero llamado grupos.ldif
con el siguiente contenido:
dn: cn=profesores,ou=Grupos,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: posixGroup
gidNumber: 10000
cn: profesores
Y lo ejecutamos con el siguiente comando:
ldapadd -x -D "cn=admin,dc=nazareth,dc=gonzalonazareno,dc=org" -f grupos.ldif -W
Volveremos a comprobar que se ha creado correctamente:
ldapsearch -x -b "dc=nazareth,dc=gonzalonazareno,dc=org"
Para crear un usuario es necesario darle una contraseña cifrada en SHA-1 (cifrada), para ello, podemos utilizar la herramienta slappasswd
:
root@alfa:~# slappasswd
New password:
Re-enter new password:
{SSHA}k7x2PexggWdDPHL7JWJ7KrPXendF44+F
root@alfa:~#
Una vez cifrada la contraseña, creamos un fichero llamado usuarios.ldif
con el siguiente contenido:
dn: uid=prueba,ou=Personas,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: person
cn: prueba
uid: prueba
uidNumber: 2000
gidNumber: 10000
homeDirectory: /home/prueba
loginShell: /bin/bash
userPassword: {SSHA}k7x2PexggWdDPHL7JWJ7KrPXendF44+F
sn: prueba
mail: prueba@gmail.com
givenName: prueba
Y lo ejecutamos con el siguiente comando:
ldapadd -x -D "cn=admin,dc=nazareth,dc=gonzalonazareno,dc=org" -f usuarios.ldif -W
Volveremos a comprobar que se ha creado correctamente:
ldapsearch -x -b "dc=nazareth,dc=gonzalonazareno,dc=org"
Configuración de clientes LDAP
NFS
Ahora que ya sabemos como configurar nuestro directorio LDAP, vamos a configurar el servidor NFS para que los usuarios puedan acceder a sus carpetas personales desde cualquier máquina de la red.
Instalamos nfs-kernel-server
:
sudo apt install nfs-kernel-server -y
Creamos el directorio /nfs/prueba
y le damos permiso al usuario prueba
para que pueda acceder a él:
mkdir /nfs/prueba
chown 2000:10000 /nfs/prueba
Editamos el fichero /etc/exports
y añadimos la siguiente línea:
/nfs *(rw,sync,no_root_squash)
Con esto, estamos indicando que el directorio /nfs
se va a compartir con todos los equipos de la red que se conecten al servidor NFS dentro de la red local.
- rw: indica que se va a compartir en modo lectura y escritura.
- sync: indica que se va a sincronizar el servidor NFS con el cliente.
- no_root_squash: indica que el usuario root del cliente tendrá los mismos privilegios que el usuario root del servidor.
Reiniciamos el servicio:
systemctl restart nfs-server
Vamos a modificar el fichero de configuración de los usuarios creado anteriormente para que el usuario prueba
tenga su carpeta personal en el servidor NFS:
Resolución de nombres
Para que el servidor LDAP pueda resolver nombres y que puedan consultar información de los usuarios, vamos a instalar:
sudo apt install libpam-ldapd nscd libnss-ldapd -y
- libpam-ldapd: librería para que el servidor LDAP pueda resolver nombres.
- nscd: servicio para cachear las consultas DNS.
- libnss-ldapd: librería para que el servidor LDAP pueda resolver nombres.
Durante la instalación, nos pedirá que introduzcamos la URI del servidor LDAP, el DN de búsqueda y la versión del protocolo LDAP, dejaremos todos por defecto excepto el DN de búsqueda, que lo cambiaremos por dc=nazareth,dc=gonzalonazareno,dc=org
, en la siguiente nos pedira la cuenta para peticiones nss con privilegios de administrador, introduciremos cn=admin,dc=nazareth,dc=gonzalonazareno,dc=org
:
Tal y como nos indica al final de la instalación, debemos modificar el fichero /etc/nsswitch.conf
para que obtenga la información de los usuarios de LDAP:
passwd: files ldap
group: files ldap
shadow: files ldap
gshadow: files ldap
hosts: files dns mymachines
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
Reiniciamos el servicio:
systemctl restart nscd
Para comprobar que funciona correctamente vamos a ver si podemos obtener información del usuario prueba
:
id prueba
E iniciamos sesión con el usuario prueba
en el servidor NFS:
login prueba
*Nota: la contraseña es la que le metimos en el fichero usuarios.ldif
.
Cliente Rocky Linux
Para configurar el cliente LDAP en Rocky Linux, vamos a instalar los siguientes paquetes:
sudo dnf install openldap-clients sssd sssd-ldap oddjob-mkhomedir sssd-tools -y
- openldap-clients: librería para que el servidor LDAP pueda resolver nombres.
- sssd: librería para que el servidor LDAP pueda resolver nombres.
- sssd-ldap: librería para que el servidor LDAP pueda resolver nombres.
- oddjob-mkhomedir: librería para que el servidor LDAP pueda resolver nombres.
- sssd-tools: librería para que el servidor LDAP pueda resolver nombres.
Editamos el fichero de configuración PAM /etc/pam.d/system-auth
y añadimos la siguiente línea:
...
auth sufficient pam_ldap.so
- sufficient: indica que si la autenticación es correcta, no se comprueban más módulos.
- pam_ldap.so: módulo para que el servidor LDAP pueda resolver nombres.
Modificamos el fichero /etc/openldap/ldap.conf
y añadimos la siguiente línea:
...
BASE dc=nazareth,dc=gonzalonazareno,dc=org
URI ldap://alfa.nazareth.gonzalonazareno.org
- BASE: indica el DN de búsqueda.
- URI: indica la URI del servidor LDAP.
Para que el usuario prueba
pueda conectarse al servidor hay que editar el fichero /etc/pam.d/system-auth
y añadir la siguiente línea:
...
session sufficient pam_mkhomedir.so umask=0022 skel=/etc/skel
Comprobamos que podemos obtener información del usuario prueba
:
ldapsearch -x -b "dc=nazareth,dc=gonzalonazareno,dc=org"
[root@bravo ~]# ldapsearch -x -b "dc=nazareth,dc=gonzalonazareno,dc=org"
# extended LDIF
#
# LDAPv3
# base <dc=nazareth,dc=gonzalonazareno,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# nazareth.gonzalonazareno.org
dn: dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: nazareth.gonzalonazareno.org
dc: nazareth
# Personas, nazareth.gonzalonazareno.org
dn: ou=Personas,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou:: UGVyc29uYXMg
# Grupos, nazareth.gonzalonazareno.org
dn: ou=Grupos,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: organizationalUnit
ou: Grupos
# profesores, Grupos, nazareth.gonzalonazareno.org
dn: cn=profesores,ou=Grupos,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: posixGroup
gidNumber: 10000
cn: profesores
# prueba, Personas, nazareth.gonzalonazareno.org
dn: uid=prueba,ou=Personas,dc=nazareth,dc=gonzalonazareno,dc=org
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: person
cn: prueba
uid: prueba
uidNumber: 2000
gidNumber: 10000
homeDirectory: /nfs/prueba
loginShell: /bin/bash
sn: prueba
mail: prueba@gmail.com
givenName: prueba
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5
Incluso podemos ejecutar whoami con ldap para ver que uid tiene el usuario y como se ha conectado correctamente:
ldapwhoami -x -D 'uid=prueba,ou=Personas,dc=nazareth,dc=gonzalonazareno,dc=org' -W
*Nota: la contraseña es la de prueba ya que es con el usuario que nos queremos conectar.
Para poder loguearnos con el usuario prueba
, instalamos ssd y sssd-ldap, como indicamos al principio de la práctica, y editamos el fichero /etc/sssd/sssd.conf
:
[domain/default]
id_provider = ldap
autofs_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://alfa.nazareth.gonzalonazareno.org
ldap_search_base = dc=nazareth,dc=gonzalonazareno,dc=org
ldap_id_use_start_tls = True
ldap_tls_cacertdir = /etc/openldap/cacerts
cache_credentials = True
ldap_tls_reqcert = allow
[sssd]
services = nss, pam, autofs
domains = default
[nss]
homedir_substring = /nfs/
Cambiamos los permisos del fichero:
chmod 600 /etc/sssd/sssd.conf
Reiniciamos y habilitamos el servicio:
systemctl restart sssd
systemctl enable sssd
Creamos el directorio /nfs/prueba
y le cambiamos los permisos:
mkdir /nfs/prueba
chown 2000:10000 /nfs/prueba
Lo montamos:
nano /etc/systemd/system/nfs.mount
[Unit]
Description=Mount NFS share
Requires=NetworkManager.service
After=NetworkManager.service
[Mount]
What=172.16.0.1:/nfs
Where=/nfs
Options=_netdev,auto
Type=nfs
[Install]
WantedBy=multi-user.target
Reiniciamos el daemon y habilitamos el servicio:
systemctl daemon-reload
systemctl start nfs.mount
systemctl enable nfs.mount
Ahora si creamos cualquier cosa dentro de /nfs/prueba se va a poder ver tanto desde alfa como desde bravo