1.
LDAP
2. SERVIDOR LDAP
LDAP
(Lightweight
Directory Access Protocol), Protocolo de Acceso Ligero a Directorios
es un protocolo de tipo cliente-servidor para acceder a un servicio
de directorio. Un servidor LDAP es un servidor de datos optimizado
para la realización rápida de consultas de lectura y orientado al
almacenamiento de datos de usuarios a modo de directorio.
La
principal utilidad de un directorio LDAP es como servidor de
autentificación para los distintos servicios de un sistema
informático como puedan ser: autentificación para entrar en un PC,
para entrar en una aplicación web, para acceder a un servidor ftp,
para acceder a servidores de correo entrante POP3 y saliente SMTP,
etc.
3.
SISTEMA OPERATIVO
La
presente instalación, se la hará en un Sistema Operativo Linux,
Distribución Debian, Versión 6 (Squeeze).
4.
PAQUETES INSTALADOS
slapd,
ldaputils, phpldapadmin
5. INSTALACIÓN DEL SERVIDOR LDAP
Se
comenzará instalando en el servidor con los paquetes slapd
y
ldap-utils.
Para
instalar únicamente el servidor y sus utilidades ejecutar:
#
apt-get install slapd ldap-utils
Si
hay algún inconveniente con la instalación debido a falta de
dependencias, ejecutar lo siguiente, ya que se trata de todos los
paquetes de los cuales depende en servidor ldap:
#
apt-get install slapd ldap-utils php5-ldap phpldapadmin libnss-ldapd
libpam-ldapd libsasl2-modules-ldap sasl2-bin db4.8-util
Seguido
de esto, el asistente solicitará una contraseña para el
administrador del servidor, para lo cual se introduce una contraseña
y en el siguiente paso vuelve a pedirla para verificarla.
Durante
la instalación, se presentarán algunas pantallas que permitirán
configurar una serie de parámetros, pero en el caso que no
aparecieran las pantallas de configuración y al final nos lance a la
terminal nuevamente, hay que ejecutar la configuración del servidor
LDAP de la siguiente manera:
# dpkg-reconfigure slapd
El
primer paso será seleccionar NO, para volver a configurar el
servidor
Introducir
el nombre del dominio que usará LDAP.
5.1.
INSTALACIÓN Y CONFIGURACIÓN DEL CLIENTE
apt-get
install libnss-ldapd libpam-ldapd nscd nslcd
5.2.
ADMINISTRAR OBJETOS DE DIRECTORIO (USUARIOS Y GRUPOS)
En
esta sección se explicará como administrar objetos del directorio
LDAP desde la consola de Linux Debian.
Lo
primero que se debe hacer es crear un archivo con extensión .LDIF.
Luego se creará una “Unidad Organizacional”, para lo cuál el
archivo que se haya creado, debe contener lo siguiente:
dn:
ou=Usuarios,dc=dominio,dc=com
objectclass: top
objectclass: organizationalUnit
ou: Usuarios
objectclass: top
objectclass: organizationalUnit
ou: Usuarios
Antes de proceder a agregar el objeto al directorio LDAP, se debe detener el servidor LDAP de la siguiente manera:
#
/etc/init.d/slapd stop
Ahora
si se procederá a añadir el objeto al servidor, de la siguiente
manera:
#
slapadd -v -l -c /directorio/archivo.ldif
El servidor debe responder con la siguiente salida:
added ou= Nombre_Grupo, dc=dominio,dc=com”
De
igual manera se va a crear un archivo persona.ldif,
que contendrá únicamente el nombre y apellido de un persona y los
datos de una cuenta el usuario y contraseña.
dn:
uid=User1,ou=Usuarios,dc=dominio,dc=com
uid: User1
objectclass: top
objectclass: person
objectclass: uidObject
cn: Nombre
sn: Apellido
userPassword: password
uid: User1
objectclass: top
objectclass: person
objectclass: uidObject
cn: Nombre
sn: Apellido
userPassword: password
Y
se lo agrega de la misma forma al servidor:
#
slapadd -v -l /directoro/persona.ldif
Se
pueden agregar los usuarios que sean necesarios siguiendo el mismo
esquema.
Posterior
a ello reiniciar el servidor
#
/etc/init.d/slapd start
Finalmente
para visualizar lo que se ha agregado al servidor, se lo puede hacer
con un
#
slapcat
Para
realizar un backup de una base de datos existente en otro servidor
LDAP, basta con importar a un archivo el contenido al hacer un
slapcat de la siguiente manera:
#
slapcat -v -l ../directorio_destino/respaldo.ldif
Y
para importarla a otro servidor LDAP, basta con hacer un ldapadd cómo
se explico anteriormente.
5.2.1
ADMINISTRACIÓN DEL SERVIDOR LDAP CON PHPLDAPADMIN
Para
administrar el servidor LDAP de una manera un poco más sencilla y
gráfica, se puede instalar una aplicacion web, que funciona
localmente que se llama PHPLDAPADMIN. Para instalarla, ejecutar lo
siguiente (ya que también se encuentra en los repositorios)
#
apt-get install phpldapadmin
Para comenzar a administrar los elementos del LDAP pulsar arriba a la izquierda donde indica
"Conectar",
luego se ingresa el usuario administrador en el siguiente formato
(cn=admin,dc=dominio,dc=com) y su contraseña.
Si
no permitiera el logueo al servidor y desplegara un mensaje de error
que dice: “Error
Could not start TLS. Please check your LDAP server configuration.”
,
En
las versiones más recientes de phpldapadmin viene configurado por
defecto que la conexión con el servidor ldap se haga mediante TLS, y
si el servidor de LDAP que se ha montado no está configurado para
usar TLS, al introducir el usuario y la contraseña, mostrará dicho
error, y para solucionarlo, o bien hay que configurar el servidor
ldap con soporte TLS o desactivar el uso de tls en el archivo de
configuración de phpldapadmin.
Para
desactivar tls en phpldapadmin, ediar el archivo de configuración:
#
nano /etc/phpldapadmin/config.php
Y modificar la línea que dice:
$ldapservers->SetValue($i,'server','tls',true);
Por:
$ldapservers->SetValue($i,'server','tls',false);
Otro
problema que puede darse al momento de administrar el servidor LDAP
es que no se despliegue el árbol del directorio, y envés de ello,
aparezca un mensaje de adverencia que dice: “This
base entry does not exist. Create it?”;
Esto se debe a que en el archivo de configuración de phpLDAPadmin
hay un parámetro que define el dominio del servidor LDAP, el mismo
que al momento de la instalación y configuración no quearon
registrados los cambios (y no se entiende porque razón). Para lo
cual, hay que editar nuevamente dicho archivo:
#
nano /etc/phpldapadmin/config.php
Y buscar la línea
/*
Array of base DNs of your LDAP server. Leave this blank to have
phpLDAPadmin
auto-detect
it for you. */
$servers->setValue('server','base',array('dc=example,dc=com'));
Y obviamente en “dc=example” reempazarla con el nombre de dominio y demás componentes que tenga este.
Una
vez ingresado al phpLDAPadmin, pulsar en el signo + que hay a la
izquierda del dominio para poder desplegar las opciones.
Y
se desplegará sólo un elemento, el administrador. También se
verá un icono para permitir crear más elementos. Pulsar en crear
nuevo objeto, y se creará dos Unidades Organizativas, una para los
grupos y otra para los usuarios.
Ahora
se crearán los grupos como objeto hijo de la unidad organizativa
"Grupos". En la plantilla elegimos Grupo Posix .
Asigar un nombre para el grupo y aceptar el GID que nos sugiere. Si se desea o no hay un GID disponible, se puede espeficar uno que se desee especificar, en ese caso, si la casilla está desactivada se debe editar la plantilla.
Para lo cual, hay que editar el archivo /etc/phpldapadmin/templates/creation/posixGroup.xml y eliminar la linea que dice <readonly>1</readonly>.
Ahora
se procederá a crear los usuarios, para lo cual clickear en
ou=Usuarios y crear un hijo del tipo Generico:
Cuenta
de Usuarios.
En
el formulario que aparece, llenar todas las opciones del usuario. Con
el campo UID pasará
igual
que con el GID explicado en el punto anterior. Si se necesita
insertar un número de preferencia, editar el archivo
posixAccount.xml
en
el mismo directorio mencionado anteriormente. y eliminar la línea
<readonly>1</readonly>.
Si se desea que el “home” del usuario se cree automáticamente al iniciar la sesión por primera vez, esto lo realiza agregando la siguiente línea al archivo /etc/pam.d/common-session:
session
optional pam_mkhomedir.so skel=/etc/skel umask=0022
5.2.2
ADMINISTRACION DE USUARIOS LDAP CON LDAPSCRIPTS
La
herramienta phpLDAPadmin es muy útil a la hora de visualizar la
organización del árbol LDAP, pero no es una buena opción a la hora
de crear usuarios LDAP porque no crea los homes. Para esto existe un
conjunto de scripts que provee LDAP. Para ello, lo primero que se ha
de hacer es instalar el paquete que contiene dichos scripts:
#
apt-get install ldapscripts
Una
vez instalado, editar el archivo de configuración de ldapscripts
/etc/ldapscripts/ldapscripts.conf
para
indicarle todos los valores del servidor LDAP, como se muestra a
continuación:
SERVER=localhost
BINDDN='cn=admin,dc=nom_dom,dc=com'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=nom_dom,dc=com'
GSUFFIX='ou=Grupos' (grupo organizacional creado con phpldapadmin)
USUFFIX='ou=Usuarios'(grupo organizacional creado con phpldapadmin)
MSUFFIX='ou=Maquinas'(grupo organizacional creado con phpldapadmin)
GIDSTART=10000
UIDSTART=10000
MIDSTART=10000
# User properties
BINDDN='cn=admin,dc=nom_dom,dc=com'
BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
SUFFIX='dc=nom_dom,dc=com'
GSUFFIX='ou=Grupos' (grupo organizacional creado con phpldapadmin)
USUFFIX='ou=Usuarios'(grupo organizacional creado con phpldapadmin)
MSUFFIX='ou=Maquinas'(grupo organizacional creado con phpldapadmin)
GIDSTART=10000
UIDSTART=10000
MIDSTART=10000
# User properties
USHELL="/bin/bash"
UHOMES="/home/users/%u"
CREATEHOMES="yes"
HOMESKEL="/etc/skel"
HOMEPERMS="700"
UHOMES="/home/users/%u"
CREATEHOMES="yes"
HOMESKEL="/etc/skel"
HOMEPERMS="700"
Ahora
se ha de indicar cual es el password del administrador del servidor
LDAP, para que los scripts puedan modificar lo que sea necesario,
para ello, ejecutamos:
#
sh -c "echo -n 'secret' >
/etc/ldapscripts/ldapscripts.passwd"
# chmod 700 /etc/ldapscripts/ldapscripts.passwd
# chmod 700 /etc/ldapscripts/ldapscripts.passwd
Ahora
ya se pueden utilizar los scripts para la creación y configuración
de usuarios:
Lo
primero que se tiene que hacer es crear un grupo, ya que para crear
usuarios será imprescindible agregarlos a un grupo dentro del arbol
LDAP, para ello ejecutar la siguiente orden:
#
ldapaddgroup nombre_grupo
Y
para crear usuarios (incluido la creación del directorio home):
#
ldapadduser usuario nombre_grupo
Los
usuarios se crean sin password, para asignarle un password al usuario
creado, ejecutar:
#
ldapsetpasswd usuario
New
Password:
New
Password (verify):
Para ver el resto de scripts que ofrece ldapscripts, ejecutar:
dpkg
-L ldapscripts | grep bin
5.2.3
MODIFICACIONES ÚTILES A LOS SCRIPTS
Al
momento de la creación de un usuario con ldapscripts, este no
configura una contraseña inicial para el usuario, para lo cual se
debe ejecutar el script ldapsetpasswd
luego
de haber creado el usuario para establecer la contraseña de inicio.
Para el efecto, como se verá a continuación, basta con realizar
unas modificaciones al script /usr/sbin/ldapadduser
para
que al momento de ejecutar la orden de creación del usuario, se
establezca la contraseña de inicio:
Buscar
y eliminar las líneas
#
Generate or ask for user password
if
is_like "$PASSWORDGEN" "<ask>"
then
warn_log
"Setting password for user $_USER"
_askpassword
else
_genpassword
"$_USER"
fi
#
Add user password
if
[ -n "$_PASSWORD" ]
then
_changepassword
"$_PASSWORD" "uid=$_USER,$USUFFIX,$SUFFIX"
[
$? -eq 0 ] && echo_log "Successfully set password for
user $_USER"
else
[
-n "$PASSWORDGEN" ] && warn_log "Warning : got
invalid password for user $_USER (password not set)"
fi
Luego
agregar las siguienes líneas al final del archivo
#
Para setear contraseña
#
Find username : $1 must exist in LDAP !
_findentry
"$USUFFIX,$SUFFIX"
"(&(objectClass=posixAccount)(|(uid=$1)(uidNumber=$1)))"
[
-z "$_ENTRY" ] && end_die "User $1 not found
in LDAP"
if
[ -z "$3" ] # Have to prompt for a *clear* password
then
warn_log
"Changing password for user $_ENTRY"
#
Ask for password
_askpassword
[
-z "$_PASSWORD" ] && end_die "Invalid
password, please try again"
#
Change user's password
_changepassword
"$_PASSWORD" "$_ENTRY"
[
$? -eq 0 ] || end_die "Error setting password for user $_ENTRY"
end_ok
"Successfully set password for user $_ENTRY"
else
# Have to use the *encoded* password given on the command line
#
Use LDIF info to modify the password
_PASSWORD="$3"
_extractldif
2 | _filterldif | _utf8encode | _ldapmodify
[
$? -eq 0 ] || end_die "Error setting encoded password for user
$_ENTRY"
end_ok
"Successfully set encoded password for user $_ENTRY"
fi
También
se pensó en la necesidad de al momento de eliminar un usuario del
directorio LDAP, también sea eliminado su directorio home
y
todo su contenido, para ello se ha de agregar las siguientes líneas
al final del archivo /usr/sbin/ldapdeleteuser:
#
Borrar carpeta home del usuario con todo su contenido
if
[ "$2" = "-r" ]
then
rm
-dfr "$_HOMEDIR"/"$1"
echo
"El directorio del usuario $1 ha sido eliminado con todo su
contenido"
fi
Como
se puede observar se ha programado un segundo argumento que debe ser
“-r” para que al momento de eliminar al usuario, sea eliminado su
directorio home
con
todo su contenido.
6.
RECOMENDACIONES
Se
recomienda que al momento de crear un usuario, en el campo “login
shell”, escribir “/null”, si es que este usuario no será
utilizado para loguearse a otro servidor.
No hay comentarios:
Publicar un comentario