p { margin-bottom: 0.21cm; }a:link { }
Instalación de LDAP en un computador corriendo Red Hat, Fedora,
CentOS o cualquier distribución basada en el instalador de paquetes
“yum”.
En caso de utilizar distribuciones basadas en otro
instalador deberemos instalar los mismos paquetes pero con el instalador correspondiente (aptitude para distros basadas en Debian)
1) instalamos LDAP (como super usuario)
[root@kike ~]# yum install openldap-servers openldap-clients
nss_ldap
….
2) Copiamos DB_CONFIG.example al direcotrio de ldap
[root@kike ~]# cd /etc/openldap/
[root@kike ~]# cp
DB_CONFIG.example /var/lib/ldap/DB_CONFIG
3) Creamos un password para el LDAP
[root@kike openldap]# slappasswd
New password:
Re-enter new
password:
{SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U
Copiamos la salida de este comando (la password SSHA) para
añadirla a sldap.conf:
/etc/openldap/slapd.conf
En principio lo único que modificamos ens lo que aparece en
negrita:
database bdb
suffix “dc=ldap-kike,dc=com,dc=uy”
rootdn
“cn=Manager,dc=ldap-kike,dc=com,dc=uy”
# Cleartext passwords, especially for the rootdn, should
# be
avoided. See slappasswd(8) and slapd.conf(5) for details.
# Use of
strong authentication encouraged.
# rootpw secret
# rootpw
{crypt}ijFYNcSNctBYg
rootpw {SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U
Notas: en el tag “database” seleccionamos bdb que corresponde
al formato de almacenamiento de datos por defecto de OpenLDAP (se
puede elegir Mysql, Postgresql u otros formatos de bases de datos
http://www.openldap.org/doc/admin24/backends.html
pese a no ser recomendados en el sitio oficial del proyecto openldap.
En suffix se “arma” el dominio al que va a atender LDAP (en
este caso ldap-kike.com.uy)
Rootdn corresponde el nombre con que se autentica el administrador
de openLDAP (en este caso Manager pero puede ser modificado por el
que se considere conveniente)
Rootpw es la password del usuario administrador (Manager en el
ejemplo)
4) Estamos listos para arrancar el servidor:
[root@kike openldap]# service ldap start
Checking configuration
files for slapd: config file testing succeeded [ OK ]
Starting
slapd: [ OK ]
5) Toda la información a cargar se introduce en archivos con
formato ldif.
http://en.wikipedia.org/wiki/LDAP_Data_Interchange_Format
6) Creamos un archivo para inicializar la base de LDAP
En este caso lo llamé ldap-init.ldif y contiene:
[root@kike openldap]# cat ldap-init.ldif
dn: dc=ldap-kike,dc=com,dc=uy
objectclass:
dcObject
objectclass: organization
o: Servidor LDAP ldap-kike
dc: ldap-kike
dn: cn=Manager,dc=ldap-kike,dc=com,dc=uy
objectclass:
organizationalRole
cn: Manager
7) Inicializamos la base con el siguiente comando
[root@kike openldap]# /usr/bin/ldapadd -a -x -D
‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f ldap-init.ldif
Enter LDAP Password: (ingresar la password del
administrador)
adding new entry “dc=ldap-kike,dc=com,dc=uy”
adding new entry “cn=Manager,dc=ldap-kike,dc=com,dc=uy”
8) Visualizar el contenido de la base
[root@kike openldap]# ldapsearch -h 127.0.0.1 -x -b
“dc=ldap-kike,dc=com,dc=uy”
Devolverá algo similar a esto:
# extended LDIF
#
# LDAPv3
# base
with scope subtree
# filter:
(objectclass=*)
# requesting: ALL
#
# ldap-kike.com.uy
dn: dc=ldap-kike,dc=com,dc=uy
objectClass:
dcObject
objectClass: organization
o: Servidor LDAP
ldap-kike
dc: ldap-kike
# Manager, ldap-kike.com.uy
dn:
cn=Manager,dc=ldap-kike,dc=com,dc=uy
objectClass:
organizationalRole
cn: Manager
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
9) El comando authconfig-tui
Nos va a configurar el archivo
/etc/nsswitch.conf,
/etc/ldap.conf, pam y otros. Esto lo ejecutamos en
cosola nos abre un menú de texto donde lo
configuramos para que soporte autentificaciones LDAP
y completamos los datos que nos pide (por omisión están
seleccionadas con * las opciones a elegir)
10) Crear un usuario en el directorio LDAP.
También
utilizamos un archivo con formato ldif
[root@kike openldap]# cat user.ldif
dn:
uid=usuario1,dc=ldap-kike,dc=com,dc=uy
uid: usuario1
cn:
usuario1
objectClass: account
objectClass:
posixAccount
objectClass: top
objectClass:
shadowAccount
userPassword:
{crypt}$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
shadowLastChange:
14335
shadowMax: 99999
shadowWarning: 7
loginShell:
/bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory:
/home/usuario1
gecos: usuario1
En este caso el userPassword se generó de esta forma:
[root@kike openldap]# openssl passwd -1 -salt
TEDFGNB345RTErea
Password:
$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
El parámetro -1 es de MD5 y el -salt son caracteres aleatorios.
11) Lo agregamos al directorio ldap también con el comando
ldapadd
[root@kike openldap]# ldapadd -a -x -D
‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f user.ldif
Verificamos que el usuario está andando con el comando id
[root@kike openldap]# id usuario1
uid=10000(usuario1) gid=10000
groups=10000
12) Para agregar un grupo usamos tambien un archivo con formato
ldif
(en este caso group.ldif)
[root@kike openldap]# cat group.ldif
dn:
cn=users,dc=ldap-kike,dc=com,dc=uy
objectClass:
posixGroup
gidNumber: 10000
cn: users
memberUid:
usuario1
description: Grupo Users
13 ) Lo añadimos a LDAP también con ldapadd de la siguiente
forma:
[root@kike openldap]# ldapadd -a -x -D
‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f group.ldif
Para probar si se agregó con éxito:
[root@kike openldap]# id
usuario1
uid=10000(usuario1) gid=10000(users) groups=10000(users)
Vemos que el usuario esta en el grupo “users”.
14) Ahora creamos home del user y copiamos los archivos de
skel.
[root@kike openldap]# mkdir /home/usuario1
[root@kike
openldap]# rsync -a /etc/skel/ /home/usuario1
[root@kike
openldap]# chown -R usuario1.users /home/usuario1
[root@kike
openldap]# chmod 700 /home/usuario1
[root@kike openldap]# ls -la
/home/usuario1
total 20
drwx—— 2 users 4096 Jan 15 15:37
.
drwxr-xr-x 4 root root 4096 Jan 15 15:37 ..
-rw-r–r– 1
usuario1 users 33 Dec 29 2010 .bash_logout
-rw-r–r– 1
usuario1 users 176 Dec 29 2010 .bash_profile
-rw-r–r– 1
usuario1 users 124 Dec 29 2010 .bashrc
15) Loguear un usuario
Una vez finalizado vamos a probar si todo funciona bien. En el
ejemplo el servidor openLDAP corre en un equipo con dirección IP
192.168.150.24 e intentamos una conexión a dicho equipo desde otro
con el comando ssh (corroborar que el demonio sshd esté corriendo en
el servidor donde instalamos openLDAP)
$ ssh -l usuario1 192.168.150.24
[email protected]′s
password:
Last login: Sat Jan 15 21:24:50 2010 from
192.168.150.207
[usuario1@kike ~]$ id
uid=10000(usuario1)
gid=10000(users) grupos=10000(users)
[usuario1@kike ~]$
pwd
/home/usuario1
El usuario se encuentra logueado en el servidor autenticado por el
servidor openLDAP.
16) En caso de necesitar agregar otro usuario editaremos CON
CUIDADO el archivo user.ldif utilizado anteriormente.
[root@kike openldap]# cat user.ldif
dn:
uid=usuario2,dc=ldap-kike,dc=com,dc=uy
uid: usuario2
cn:
usuario2
objectClass: account
objectClass:
posixAccount
objectClass: top
objectClass:
shadowAccount
userPassword:
{crypt}$1$TEDFGNB3$ogOvJKTt/CviC47q/dBon1
shadowLastChange:
14335
shadowMax: 99999
shadowWarning: 7
loginShell:
/bin/bash
uidNumber: 10001
gidNumber: 10000
homeDirectory:
/home/usuario2
gecos: usuario2
Lo agregamos a la base de LDAP:
[root@kike openldap]# ldapadd -x -D
‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f user.ldif
Enter
LDAP Password:
adding new entry
“uid=usuario2,dc=ldap-kike,dc=com,dc=uy”
Luego creamos el home y compiamos los files de skel, cambiamos
permisos como lo hicimos con el otro usuario.
17)Para agregarlo al grupo users:
# cat group.ldif
dn:
cn=users,dc=ldap-kike,dc=com,dc=uy
objectClass:
posixGroup
gidNumber: 10000
cn: users
memberUid:
usuario1
memberUid: usuario2
description: Grupo Users
18) Para actualizar la base de datos LDAP utilizamos el comando
ldapmodify
[root@kike openldap]# ldapmodify -x -D
‘cn=Manager,dc=ldap-kike,dc=com,dc=uy’ -W -f group.ldif
Enter
LDAP Password:
modifying entry
“cn=users,dc=ldap-kike,dc=com,dc=uy”
Listo, comprobamos los datos con ldapsearch:
[root@kike openldap]# ldapsearch -h 127.0.0.1 -x -b
“dc=ldap-kike,dc=com,dc=uy”
……
……
Verificamos que todo esté funcionando correctamente:
[root@kike openldap]# id usuario2
uid=10001(usuario2)
gid=10000(users) groups=10000(users)
19) Seguridad básica LDAP
Mediante ACLs agregaremos mínimos controles de
seguridad como restringir el acceso a la base
de datos de LDAP más que nada,que no puedan ver los
passwords de los demás usuarios (al estilo shadow)
Agregamos al archivo sldap.conf
access to attrs=userPassword
by
dn=”cn=Manager,dc=ldap-kike,dc=com,dc=uy” write
by self
write
by anonymous auth
by * none
access to dn.base=”» by * read
access to *
by dn=”cn=Manager,dc=ldap-kike,dc=com,dc=uy”
write
by * read
Reiniciamos el servicio ldap
[root@kike openldap]# service ldap restart
Ahora, si hacemos un:
ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy”
NO van a poder observar todos los password de los usuarios, sólo
el de ustedes, si se autentifican al LDAP.
ldapsearch -h 127.0.0.1 -x -b “dc=ldap-kike,dc=com,dc=uy” -D
“uid=usuario2,dc=ldap-kike,dc=com,dc=uy” -W
# usuario1,
ldap-kike.com.uy
dn: uid=usuario1,dc=ldap-kike,dc=com,dc=uy
uid:
usuario1
cn: usuario1
objectClass: account
objectClass:
posixAccount
objectClass: top
objectClass:
shadowAccount
shadowLastChange: 14335
shadowMax:
99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber:
10000
gidNumber: 10000
homeDirectory: /home/usuario1
gecos:
usuario1
# usuario2, ldap-kike.com.uy
dn:
uid=usuario2,dc=ldap-kike,dc=com,dc=uy
uid: usuario2
cn:
usuario2
objectClass: account
objectClass:
posixAccount
objectClass: top
objectClass:
shadowAccount
userPassword::
e2NyeXB0fSQxJFRFREZHTkIzJG9nT3ZKS1R0L0N2aUM0N3EvZEJvbjE=
shadowLastChange:
14335
shadowMax: 99999
shadowWarning: 7
loginShell:
/bin/bash
uidNumber: 10001
gidNumber: 10001
homeDirectory:
/home/usuario2
gecos: usuario2
TAREAS POR REALIZAR:
Sería interesante poder utilizar un servidor de réplica de LDAP
para que pueda atender a los usuario en caso de caída del demonio o
el equipo donde corre.