Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

jueves, 19 de agosto de 2010

Instalar un servidor OpenLDAP en Ubuntu

OpenLDAP es una implementación libre y de código abierto del protocolo Lightweight Directory Access Protocol (LDAP) desarrollada por el proyecto OpenLDAP. Está liberada bajo su propia licencia OpenLDAP Public LicenseLDAP es un protocolo de comunicación independiente de la plataforma. Muchas distribuciones GNU/Linux incluyen el software OpenLDAP para el soporte LDAP. Este software también corre en plataformas BSD, AIX, HP-UX, Mac OS X, Solaris, Microsoft Windows (NT y derivados, incluyendo 2000, XP, Vista), y z/OS.



Básicamente, OpenLDAP posee tres componentes principales:
  • slapd - Dominio de servidor y herramientas
  • Bibliotecas que implementan el protocolo LDAP
  • Programas cliente: ldapsearch, ldapadd, ldapdelete, entre otros
Adicionalmente, el proyecto OpenLDAP es anfitrión de los subproyectos:
  • JLDAP - biblioteca de clases LDAP para Java
  • JDBC-LDAP - controlador Java JDBC - LDAP
  • ldapc++ - biblioteca de clases LDAP para C++


(Fuente Wikipedia)



Instalarlo es sumamente sencillo. Simplemente tendremos que hacer lo siguiente:

sudo apt-get install slapd ldap-utils



Si usamos el archivo slapd.conf (en la versión 2.4.21 es opcional pero en breve dejará de usarse) podremos modificar los datos de administrador y asignarle una contraseña:


Después podemos crear la contraseña del usuario root:

slappasswd
New password:
Re-enter new password:
{SSHA}cWB1VzxDXZLf6F4pwvyNvApBQ8G/DltW


y aplicarla al archivo /etc/ldap/slapd.conf


database bdb
suffix "dc=admineithel,dc=es"
rootdn "cn=Manager,dc=admineithel,dc=es"
rootpw {SSHA}cWB1VzxDXZLf6F4pwvyNvApBQ8G/DltW


En versiones nuevas (2.4.21 o superiores) el archivo slapd.conf no existe a menos de que vengamos de una migración. Tampoco hay una contraseña por defecto de inicio (en la instalación no nos pide ninguna contraseña tampoco), así que deberemos introducirle esta información basándonos en la linea de comandos.Yo en estos casos aconsejaria ejecutar el siguiente script que facilitará la administración (este script incluye la instalación de los paquetes).

===========cortar por aqui=========================


#!/bin/bash
 
fqdn="dc=dominio,dc=es"
organisation="MI_ORGANIZACION"
admin_pass_plain="mipass_plano"
uri="ldapi://%2fvar%2frun%2fslapd%2fldapi/"
 
# ----------------------------------------------------------------
 
mkdir -p tmp
chmod 750 tmp
 
echo;echo "Installing packages"
aptitude -y install slapd ldap-utils ldapscripts
 
admin_pass=`slappasswd -s $admin_pass_plain`
 
echo;echo "Base schemas"
 
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif
 
echo;echo "Backend"
 
cat > tmp/backend.ldif << EOF
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb
 
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: $fqdn
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,$fqdn
olcRootPW: $admin_pass
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
 
olcAccess: to attrs=userPassword by dn="cn=admin,$fqdn" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,$fqdn" write by * read
EOF
 
ldapadd -Y EXTERNAL -H ldapi:/// -f tmp/backend.ldif
 
echo;echo "Frontend"
 
cat > tmp/frontend.ldif << EOF
dn: $fqdn
objectClass: top
objectClass: dcObject
objectclass: organization
o: $organisation
dc: $organisation
description: $organisation
 
dn: cn=admin,$fqdn
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: $admin_pass
 
dn: ou=people,$fqdn
objectClass: organizationalUnit
ou: people
 
dn: ou=groups,$fqdn
objectClass: organizationalUnit
ou: groups
 
dn: ou=machines,$fqdn
objectClass: organizationalUnit
ou: machines
EOF
 
ldapadd -x -D cn=admin,$fqdn -w $admin_pass_plain -f tmp/frontend.ldif
 
echo;echo "Indexes"
 
cat > tmp/indexes.ldif << EOF
dn: olcDatabase={1}hdb,cn=config
add: olcDbIndex
olcDbIndex: uid eq,pres,sub
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: memberUid eq
olcDbIndex: uniqueMember eq
EOF
 
ldapmodify -Y EXTERNAL -H ldapi:/// -f tmp/indexes.ldif
 
/etc/init.d/slapd restart
 
echo;echo "Authentication"
 
cat > /etc/ldap.conf << EOF
base $fqdn
uri $uri
ldap_version 3
#binddn
#bindpw
rootbinddn cn=admin,$fqdn
timelimit 5
bind_timelimit 5
pam_password md5
EOF
 
ln -fs ../ldap.conf /etc/ldap/ldap.conf
 
cat > /etc/ldapscripts/ldapscripts.conf << EOF
SERVER="$uri"
BINDDN="cn=admin,$fqdn"
#BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd"
BINDPWDFILE="/etc/ldap.secret"
 
SUFFIX="$fqdn"
GSUFFIX="ou=groups"
USUFFIX="ou=people"
MSUFFIX="ou=machines"
 
GIDSTART="10000"
UIDSTART="10000"
MIDSTART="20000"
 
CREATEHOMES="no"
 
PASSWORDGEN=""
 
RECORDPASSWORDS="no"
PASSWORDFILE="/var/log/ldapscripts_passwd.log"
 
LOGFILE="/var/log/ldapscripts.log"
 
TMPDIR="/tmp"
 
LDAPSEARCHBIN="/usr/bin/ldapsearch"
LDAPADDBIN="/usr/bin/ldapadd"
LDAPDELETEBIN="/usr/bin/ldapdelete"
LDAPMODIFYBIN="/usr/bin/ldapmodify"
LDAPMODRDNBIN="/usr/bin/ldapmodrdn"
LDAPPASSWDBIN="/usr/bin/ldappasswd"
 
GETENTPWCMD="getent passwd"
GETENTGRCMD="getent group"
 
GTEMPLATE=""
UTEMPLATE=""
MTEMPLATE=""
EOF
 
rm /etc/ldapscripts/ldapscripts.passwd
 
aptitude -y install libnss-ldap
 
echo -n $admin_pass_plain > /etc/ldap.secret
chmod 400 /etc/ldap.secret
 
auth-client-config -t nss -p lac_ldap
 
pam-auth-update
 
echo "session required pam_mkhomedir.so" > /etc/pam.d/common-session.new
cat /etc/pam.d/common-session >> /etc/pam.d/common-session.new
mv /etc/pam.d/common-session.new /etc/pam.d/common-session
 
#rm -rf tmp


===========cortar por aqui=========================








4 comentarios:

  1. Hola, de antemano, gracias por tu post. pero tengo una consulta.
    La cuestion es que cuando intento ingresar desde alguna aplicacion para administrar el LDAP, no me permite ingresar, el password que inegreso es: "mipass_plano" (sin las comillas), pero no me permite ingresar, que problema crees que pueda ser?

    ResponderEliminar
  2. ¡Hola Ericklopez76!
    Para ingresar el password de administrador en las nuevas versiones de OpenLDAP se hace mediante el método de cn=config, que es diferente al tradicional basado en el archivo de configuración slapd.conf. Díme que distribución y versión usas a ver si podemos solventar ese problema.

    Saludos!

    ResponderEliminar
  3. Muy buen aporte.
    Este script lo cargo del lado del servidor con mis parámetros y desde una máquina cliente o terminal ubuntu 10.04 cuál sería la configuración?

    ResponderEliminar
  4. hola mucho gusto me llamo ivan aun no logro configurar el server de ldap y me preguntaba si pudiesen hecharme una mano

    ResponderEliminar


That u don't know what you've got 'til it's gone