| INSTALACIÓN FÍSICA Y LÓGICA DE UNA RED CABLEADA E INALÁMBRICA EN UN AULA: | ||
|---|---|---|
| Anterior | Capítulo 24. Configuración LDAP | Siguiente |
slapd es un servidor de directorio LDAP.
Instalar los paquetes slapd y ldap-utils.
apt-get install slapd ldap-utils
Editamos el fichero de configuración /etc/ldap/slapd.conf y modificamos los siguientes aspectos.
Este es el sufijo principal de las entradas del directorio, es decir, lo que hemos denominado base o raíz del directorio.
suffix "dc=esi, dc=es". |
backend de Base de Datos
database bdb |
Directorio de la Base de Datos
/var/lib/ldap |
Cuenta del administrador del directorio. Por defecto es manager, aunque podríamos cambiarlo.
rootdn "cn=manager, dc=esi, dc=es" |
Contraseña del administrador
rootpw {crypt}contraseña_cifrada
rootpw {MD5}ISMvKXpXpadDiUoOSoAfww==
|
Con slappasswd -h {MD5} ponemos una contraseña cifrada usando el algoritmo MD5
Niveles de acceso
Esta opción permite especificar a quién se da el permiso para leer, buscar, comparar, modificar, etc., la información almacenada en el directorio. Para ello se utilizan una o múltiples reglas de control de acceso, cuya sintaxis se muestra a continuación:
access to what [by who acess_control]+
what: a qué datos del directorio se aplica la regla. A todo el directorio (*), a un subconjunto de entradas con un sufijo dn=".*,ou=profesores, dc=iescuravalera,dc=es" o un atributo en concreto dn=".*, ou=profesores, dc=esi, dc=es" attr=userPassword
who: indica a qué usuario(s) se especifica la regla. self (el propietario de la entrada), dn="..." (el usuario representado por el nombre distinguido), users (cualquier usuario acreditado), anomymous (cualquier usuarios no acreditado) y * (cualquier usuario).
access_control: indica qué operación concede la regla: none (sin acceso), auth (utilizar la entrada para validarse), compare (comparar), search (búsqueda), read (lectura), y write (modificación).
access to * by dn="cn=Manager,dc=esi,dc=es" write by * read |
Permite al administrador cambiar cualquier entrada del directorio y al resto de usuarios sólo leerlas.
access to attrs=userPassword by dn="cn=Manager,dc=esi,dc=es" write by anonymous auth by self write by * none |
Permite a cada usuario a cambiarse su propia contraseña (la contraseña es el atributo userPassword en los objetos de tipo usuario), al administrador cambiar la de cualquier usuario y al resto de usuarios sólo pueden utilizar este campo para autentificarse.
access to dn=".*,ou=profesores,dc=esi,dc=es" by dn="cn=Manger,dc=esi,dc=es" write by * read |
Al resto de los atributos de las cuentas de usuario, permite al administrador su cambio y al resto sólo su consulta (de esta forma evitamos que un usuario pueda cambiarse su UID, GID, etc.).
El formato ldif es en el que se almacenan las entradas de directorio
Los comandos para manejar dicho directorio son ldapsearch, ldapadd, ldapmodify, ldapdelete. Sus parámetros comunes son:
| -b | DN | DN base desde donde se realiza la búsqueda |
| -D | DN | DN del usuario con el que nos autenticamos |
| -h | host | host del servidor LDAP |
| -p | puerto | puerto del servidor LDAP |
| -w | clave | clave para una autenticación simple |
| -x | autenticación simple |
Editamos el fichero /var/lib/ldap/entradas.ldif y añadimos como primeras entradas el dominio principal y el administrador de dicho dominio
# esi.es Dominio principal dn: dc=esi,dc=es objectClass: top objectClass: dcObject objectClass: organization o: Ciclo Grado Medio Instituto dc: esi # Manager, esi.es. Administrador del dominio dn: cn=Manager,dc=esi,dc=es objectClass: top objectClass: organizationalRole cn: Manager |
# Añadimos como administrador al servidor LDAP el fichero entradas.ldif ldapadd -x -D "cn=Manager,dc=esi,dc=es" -W -f /var/lib/ldap/passwd.ldif -h 127.0.0.1 |
La idea es que los usuarios y grupos, que tengamos creados en la máquina que contiene el servidor LDAP, migrarlos al directorio LDAP. Vamos a crear los grupos profesores y alumnos, y les vamos a asociar usuarios. Después haremos la migración a LDAP.
Creamos los grupos:
addgroup -gid 2000 PROFESORES addgroup -gid 2001 ALUMNOS |
Creamos usuarios para esos grupos, morgado es profesor y pepe es alumno.
adduser -gid 2000 morgado adduser -gid 2001 pepe |
Nos descargamos el paquete Migration Tools, lo descomprimimos en /usr/share/MigrationTools y nos posicionamos en dicho directorio. La idea es pasar el passwd y group a formato ldif en los ficheros base.ldif, group.ldif y passwd.ldif
Editamos el fichero migrate_common.ph y hacemos los siguientes cambios:
#Default DNS domain $DEFAULT_MAIL_DOMAIN = "asi.net"; # Default base $DEFAULT_BASE = "dc=esi,dc=es"; # turn this on to support more general object clases such as person. $EXTENDED_SCHEMA = 1; |
A continuación ejecutamos, desde la shell, los scripts de migración:
#migramos el sistema base ./migrate_base.pl > /var/lib/ldap/base.ldif #migramos los grupos ./migrate_group.pl /etc/group /var/lib/ldap/group.ldif #migramos los usuarios ./migrate_passwd.pl /etc/passwd /var/lib/ldap/passwd.ldif |
Entradas significatias del base.ldif:
dn: ou=Hosts,dc=esi,dc=es ou: Hosts objectClass: top objectClass: organizationalUnit dn: ou=Rpc,dc=esi,dc=es ou: Rpc objectClass: top objectClass: organizationalUnit dn: ou=Services,dc=esi,dc=es ou: Services objectClass: top objectClass: organizationalUnit |
Entradas significatias del group.ldif:
# El grupo root
dn: cn=root,ou=Group,dc=esi,dc=es
objectClass: posixGroup
objectClass: top
cn: root
userPassword: {crypt}x
gidNumber: 0
# el grupo bin
dn: cn=bin,ou=Group,dc=esi,dc=es
objectClass: posixGroup
objectClass: top
cn: bin
userPassword: {crypt}x
gidNumber: 2
...
# el grupo profesores con gid 2000
dn: cn=profesores,ou=Group,dc=esi,dc=es
objectClass: posixGroup
objectClass: top
cn: profesores
userPassword: {crypt}x
gidNumber: 2000
# el grupo alumnos
dn: cn=alumnos, ou=Group,dc=esi,dc=es
objectClass: posixGroup
objectClass: top
cn: profesores
userPassword: {crypt}x
gidNumber: 2001
|
Entradas significatias del passwd.ldif:
#usuario root
dn: uid=root,ou=People,dc=esi,dc=es
uid: root
cn: root
sn: root
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$Rxs0Oeuw$zH9ze87mvoFuPeyjRfvJb/
shadowLastChange: 11627
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root
# usuario mysql
dn: uid=mysql,ou=People,dc=esi,dc=es
uid: mysql
cn: MySQL Server
givenName: MySQL
sn: Server
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}!
shadowLastChange: 11627
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/false
uidNumber: 107
gidNumber: 114
homeDirectory: /var/lib/mysql
gecos: MySQL Server,,,
# resto de usuarios
#usuario morgado dentro de la ou=People y perteneciente al grupo 2000 de profesores
dn: uid=morgado,ou=People,dc=esi,dc=es
uid: morgado
cn: morgado
sn: morgado
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$tN3sIQTM$00KGQCUJKfJGIEP8.o4LS/
shadowLastChange: 11627
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 2000
homeDirectory: /home/morgado
#usuario pepe dentro de la ou=People y perteneciente al grupo 2001 de alumnos
dn: uid=pepe,ou=People,dc=esi,dc=es
uid: pepe
cn: pepe
sn: pepe
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$1$tN3sIQTM$00KGQCUJKfJGIEP8.o4LS/
shadowLastChange: 11627
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 2001
homeDirectory: /home/pepe
gecos: ,,,
|
A destacar:
Dentro del dominio asi.es nos ha creado por defecto dos unidades organizativas People y Group. En People están los usuarios y en Group los grupos del sistema.
Las cuentas de usuario son objeto tipo posixAccount y las cuentas de grupo posixGroup
Añadimos las entradas de esos ficheros al directorio LDAP. Con ldapadd, añadimos como manager, el fichero base.ldif al servidor LDAP de la máquina local.
El atributo uidNumber es el identificador (uid) de usuario y el gidNumber el idetificador (gid) de grupo al que pertenece ese usuario.
# Añadimos como administrador al servidor LDAP el fichero base.ldif ldapadd -x -D "cn=Manager,dc=esi,dc=es" -W -f /var/lib/ldap/base.ldif -h 127.0.0.1 # Añadimos como administrador al servidor LDAP el fichero group.ldif ldapadd -x -D "cn=Manager,dc=esi,dc=es" -W -f /var/lib/ldap/group.ldif -h 127.0.0.1 # Añadimos como administrador al servidor LDAP el fichero passwd.ldif ldapadd -x -D "cn=Manager,dc=esi,dc=es" -W -f /var/lib/ldap/passwd.ldif -h 127.0.0.1 |
Simplemente realizamos los siguientes cambios:
HOST 192.168.4.1 BASE dc=esi, dc=es URI ldap://ldap.esi.es:666 |
El formato es ldapsearch [opciones] [filtros [atributos_a_recuperar]]
Con ldapsearch -x -b 'dc=esi,dc=es' -h 192.168.1.184 buscamos todas las entradas del directorio por debajo de nuestro dominio esi.es
Con ldapsearch -x -b 'ou=People,dc=esi,dc=es' -h 192.168.1.184 buscamos todas las entradas del directorio por debajo de nuestro dominio esi.es que pertenezcan a la unidad organizativa People
Con ldapsearch -x -b 'dc=esi,dc=es' '(uid=morgado)' -h 192.168.1.184 buscamos todas las entradas del directorio por debajo de nuestro dominio esi.es que pertenezcan a la unidad organizativa People
Con ldapsearch -x -b 'dc=esi,dc=es' '(cn=profesores)' -h 192.168.1.184 buscamos todas las entradas del directorio por debajo de nuestro dominio esi.es que pertenezcan a la unidad organizativa People
Con ldapsearch -x -b 'dc=esi,dc=es' -s sub "gidNumber=2000" -h 127.0.0.1 buscamos todas las entradas del directorio por debajo de nuestro dominio esi.es que tengan con gidNumber=2000, es decir todas las entradas que pertenezcan al grupo profesores.