Instalando LDAP en Centos 5.4
Instalación de LDAP y configuración básica;
Primero instalamos LDAP con yum:
[root@nikita ~]# yum install openldap-servers openldap-clients nss_ldap
….
Copiamos DB_CONFIG.example al direcotrio de ldap
[root@nikita ~]# cd /etc/openldap/
[root@nikita ~]# cp DB_CONFIG.example /var/lib/ldap/DB_CONFIG
Creamos un password para el LDAP de la siguiente manera;
[root@nikita openldap]# slappasswd
New password:
Re-enter new password:
{SSHA}V7IS3vYe8P0/IcOvJmfEdjY1LXuWPV3U
Copiamos la salida de ese comando y editamos el archivo;
/etc/openldap/slapd.conf ==> Lo único que modificamos es:
database bdb
suffix «dc=segvfault,dc=com,dc=ar»
rootdn «cn=Manager,dc=segvfault,dc=com,dc=ar»
# 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
Y ya podemos arranca el LDAP de la siguiente manera;
[root@nikita openldap]# service ldap start
Checking configuration files for slapd: config file testing succeeded [ OK ]
Starting slapd: [ OK ]
Creamos un archivo para inicializar la base de LDAP;
En mi caso lo llame ldap-init.ldif y contiene:
[root@nikita openldap]# cat ldap-init.ldif
dn: dc=segvfault,dc=com,dc=ar
objectclass: dcObject
objectclass: organization
o: Segvfault LDAP server
dc: segvfault
dn: cn=Manager,dc=segvfault,dc=com,dc=ar
objectclass: organizationalRole
cn: Manager
Inicializamos la base con el siguiente comando;
[root@nikita openldap]# /usr/bin/ldapadd -a -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f ldap-init.ldif
Enter LDAP Password:
adding new entry «dc=segvfault,dc=com,dc=ar»
adding new entry «cn=Manager,dc=segvfault,dc=com,dc=ar»
Ahora podemos ver el contenido de la base con el siguiente comando;
[root@nikita openldap]# ldapsearch -h 127.0.0.1 -x -b «dc=segvfault,dc=com,dc=ar»
# extended LDIF
#
# LDAPv3
# base <dc=segvfault,dc=com,dc=ar> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# segvfault.com.ar
dn: dc=segvfault,dc=com,dc=ar
objectClass: dcObject
objectClass: organization
o: Segvfault LDAP server
dc: segvfault
# Manager, segvfault.com.ar
dn: cn=Manager,dc=segvfault,dc=com,dc=ar
objectClass: organizationalRole
cn: Manager
# search result
search: 2
result: 0 Success
# numResponses: 3
# numEntries: 2
Usamos el comando authconfig-tui que nos va a configurar
el archivo /etc/nsswitch.conf, /etc/ldap.conf, pam y otros
Eso lo ejecutamos en cosola nos abre un menú y lo configuramos
para que soporte autentificaciones LDAP y completamos los
datos que nos piden(ldap server y dnbase)
Bien, ahora podemos crear un usuario en el
directorio LDAP. Yo uso un archivo ldif y lo
edito con los datos correspondientes, ejemplo;
usuario, password, home, shell, etc:
[root@nikita openldap]# cat user.ldif
dn: uid=section,dc=segvfault,dc=com,dc=ar
uid: section
cn: section
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/section1
gecos: section
La password la generé con el siguiente comando;
[root@nikita openldap]# openssl passwd -1 -salt TEDFGNB345RTErea
Password:
$1$TEDFGNB3$m24Mo06Q06EXMop7INKrC/
la -1 es de MD5 y el salt son caracteres lo mas random posible
Lo agregamos al directorio ldap de la siguiente manera:
[root@nikita openldap]# ldapadd -a -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f user.ldif
ya podemos probar si el usuario esta basicamente andando con id:
[root@nikita openldap]# id section
uid=10000(section) gid=10000 groups=10000
Bien ahora vamos a agregar un grupo para agrupar los usuarios.
Yo use el siguiente group.ldiff
[root@nikita openldap]# cat group.ldiff
dn: cn=users,dc=segvfault,dc=com,dc=ar
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: section
description: Users group
Y lo agrega al ldap de la siguiente manera;
[root@nikita openldap]# ldapadd -a -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f group.ldiff
y ahora si probamos de vuelta id:
[root@nikita openldap]# id section
uid=10000(section) gid=10000(users) groups=10000(users)
Vemos que el usuario esta en el grupo “users”.
Ahora creamos home del user y copiamos los archivos de skel.
[root@nikita openldap]# mkdir /home/section
[root@nikita openldap]# rsync -a /etc/skel/ /home/section
[root@nikita openldap]# chown -R section.users /home/section
[root@nikita openldap]# chmod 700 /home/section
[root@nikita openldap]# ls -la /home/section
total 20
drwx—— 2 section users 4096 Feb 11 19:09 .
drwxr-xr-x 4 root root 4096 Feb 11 21:19 ..
-rw-r–r– 1 section users 33 Jan 21 2009 .bash_logout
-rw-r–r– 1 section users 176 Jan 21 2009 .bash_profile
-rw-r–r– 1 section users 124 Jan 21 2009 .bashrc
Bien, ya esta todo listo para que el usuario se pueda loguear
con la clave que le generaron, desde otra maquina probamos ssh:
$ ssh -l section 192.168.1.10
section@192.168.1.10’s password:
Last login: Thu Feb 11 21:24:50 2010 from 192.168.1.2
[section@nikita ~]$ id
uid=10000(section) gid=10000(users) grupos=10000(users)
[section@nikita ~]$ pwd
/home/section
Listo ya tenemos el usuario logueado. Lo bueno de usar
LDAP es que puedes centralizar toda la información, usuarios,
etc en un servidor(o pueden ser varios si creas slaves).
Lo mismos con los «home’s» de los usuarios, puedes crear un
fileserver y exportar el directorio “/home” a los demás
servidores y tener todo la información centralizada.
Ahora por ejemplo creamos otro usuario editando el file user.ldif
ami me quedo de la siguiente manera. Editen bien el archivo con
mucho cuidado igual si se equivocan en algo, se puede modificar:
[root@nikita openldap]# cat user.ldif
dn: uid=section2,dc=segvfault,dc=com,dc=ar
uid: section2
cn: section2
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/section2
gecos: section2
Lo agregamos a la base de LDAP como ya saben:
[root@nikita openldap]# ldapadd -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f user.ldif
Enter LDAP Password:
adding new entry «uid=section2,dc=segvfault,dc=com,dc=ar»
y creamos el home y compiamos los files de skel, cambiamos permisos
como lo hicimos anteriormente…
Y ahora agregamos este usuario a el grupo “users”
# cat group.ldiff
dn: cn=users,dc=segvfault,dc=com,dc=ar
objectClass: posixGroup
gidNumber: 10000
cn: users
memberUid: section
memberUid: section2
description: Users group
y lo mejor de todo, es la forma más fácil que podemos editar registros en LDAP
con ldapmodify, en este caso el grupo “users” de la siguiente manera;
[root@nikita openldap]# ldapmodify -x -D ‘cn=Manager,dc=segvfault,dc=com,dc=ar’ -W -f group.ldiff
Enter LDAP Password:
modifying entry «cn=users,dc=segvfault,dc=com,dc=ar»
Listo, comprobamos los datos con ldapsearch:
[root@nikita openldap]# ldapsearch -h 127.0.0.1 -x -b «dc=segvfault,dc=com,dc=ar»
……
……
Tienen que ver el nuevo usuario y en el grupo users el user agregado.
Probamos con id como siempre:
[root@nikita openldap]# id section2
uid=10001(section2) gid=10000(users) groups=10000(users)
Perfecto nos logueamos desde una maquina remota:
$ ssh -l section2 192.168.1.10
section2@192.168.1.10’s password:
Last login: Thu Feb 11 21:38:54 2010 from 192.168.1.2
id: cannot find name for group ID 10001
[section2@nikita ~]$ id
uid=10001(section2) gid=10000(users) grupos=10000(users)
Bien, ahora un mínimo de seguridad, agregar estas ACLs para
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)
access to attrs=userPassword
by dn=»cn=Manager,dc=segvfault,dc=com,dc=ar» write
by self write
by anonymous auth
by * none
access to dn.base=»» by * read
access to *
by dn=»cn=Manager,dc=segvfault,dc=com,dc=ar» write
by * read
Lo agregamos al archivo sldap.conf y reiniciamos el servicio ldap
[root@nikita openldap]# service ldap restart
Va salir un error como el siguiente, pero no es importante
slapd.conf: line 125: rootdn is always granted unlimited privileges.
Ahora, si hacemos un:
ldapsearch -h 127.0.0.1 -x -b «dc=segvfault,dc=com,dc=ar»
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=segvfault,dc=com,dc=ar» -D «uid=section2,dc=segvfault,dc=com,dc=ar» -W
———-cut ——————-
# section, segvfault.com.ar
dn: uid=section,dc=segvfault,dc=com,dc=ar
uid: section
cn: section
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
shadowLastChange: 14335
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 10000
gidNumber: 10000
homeDirectory: /home/section
gecos: section
# section2, segvfault.com.ar
dn: uid=section2,dc=segvfault,dc=com,dc=ar
uid: section2
cn: section2
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/section2
gecos: section2
Bueno, eso es una pequeña parte de lo que se puede hacer con
LDAP con más tiempo pondré artículos como usar SAMBA con
LDAP de BACKENED para un controlador de dominios.
septiembre 25, 2010 a 1:52 am
cuando agrego al usuario y pongo el comando ‘id user’ no me muestra nada a que se puede deber?
marzo 3, 2011 a 12:22 am
Fijate si el user esta en la base del LDAP con el comando ldapsearch… si lo ves al usuario.. te falto configurar con authconfig-tui soporte para autentificaciones LDAP
enero 15, 2011 a 11:43 pm
Gracias x la explicacion sobre ldap, pero tengo una pregunta en esa parte que dices q debemos conectarnos desde una maquina remota con el comando
ssh -l section2 192.168.1.10
Pero esto no se supone q estamos ingresando x ssh no mas y no tiene nada q ver con la configuracion q hicimos de ldap….
O sea la pregunta es como pruebo si funciona ldap desde una maquina remota y si es posible hacerlo…..
marzo 3, 2011 a 12:16 am
con ese comando nos estamos logueando al serivor usando un usuario que esta en la base de datos LDAP. Si vos querees hacer un ldap backend para tus clientes, tenes que configurar en cada cliente que como autentificacion uso el server ldap…esto lo podes hacer con el comando authconfig o authconfig-tui. Saludos.
enero 15, 2011 a 11:44 pm
Por favor si hay alguna ayudita les agradeceria…
marzo 3, 2011 a 12:17 am
Perdon por la tardanza seguro ya descubristes como hacerlo.. 😀