(Este artículo se ha habilitado temporalmente para referencia, pero probablemente se elimine ya que existe otro similar)
Para un administrador de red suele ser engorroso tener que administrar diferentes servicios, cada uno con su propio listado de usuarios. Adicionalmente, hay quienes prefieren evitar crear usuarios reales en un servidor, si no han de a trabajar en éste.
Una manera de solucionar ambos problemas consiste en preparar una base centralizada de usuarios, y luego configurar los servicios para que utilicen esta base. Se pueden utilizar varias bases: mySQL, PostgreSQL, LDAP, etc.
En este tutorial utilizaremos OpenLDAP, pues es eficiente, liviano y muchas aplicaciones soportan la integración con el. Para ejemplificarlo, mostraremos cómo configurar Postfix, el popular agente de transporte de correos, a fin de crear un servidor smtp
relativamente seguro, que requiera que para poder enviar mensajes, los usuarios necesiten autenticarse y que las contraseñas no se transmitan por la red de manera insegura.
midominio.cu
192.168.0.2
root
para el proceso de instalación y configuración
Primeramente, modificaremos el archivo /etc/hosts
para incluir algunas entradas. 1)
editor /etc/hosts
Añadiremos a dicho archivo el siguiente contenido:
192.168.0.2 ldap.midominio.cu ldap 192.168.0.2 correo.midominio.cu correo
Esto creará dos direcciones virtuales que resultarán más intuitivas durante la configuración del acceso a cada uno de los servicios.
Ahora, instalaremos algunos programas básicos para efectuar diagnósticos:
aptitude install ssh nmap telnet
La instalación del resto de las aplicaciones se puede hacer de una vez o en dos partes; para facilitar la comprensión, dividiremos la instalación de OpenLDAP y Postfix.
Procedemos a instalar el servicio slapd y las utilidades para gestionarlo, así como algunas aplicaciones relacionadas con el proceso de autenticación:
aptitude install slapd ldap-utils libnss-ldap libpam-ldap unscd
Durante el proceso de instalación, el asistente nos debe solicitar la contraseña de administración de OpenLDAP, que será necesaria posteriormente para cualquier modificación del servicio, de manera que la que utilicemos, debemos recordarla o guadarla de una manera segura.2)
Una vez finalizada la instalación, mediante el comando nmap
podemos comprobar que el servicio esté funcionando:
nmap -p 389 localhost
Si obtenemos un resultado como el siguiente, significa que el servicio se está ejecutando:
Starting Nmap 5.00 ( http://nmap.org ) at 2011-05-25 10:04 UTC Interesting ports on localhost (127.0.0.1): PORT STATE SERVICE 389/tcp open ldap Nmap done: 1 IP address (1 host up) scanned in 0.18 seconds
Ahora editamos el archivo de configuración de OpenLDAP:
editor /etc/ldap/ldap.conf
Modificamos estas entradas, o las agregamos si no existen:
BASE dc=midominio,dc.cu URI ldap://ldap.midominio.cu/ ldapi://ldap.midominio.cu/ ldaps://ldap.midominio.cu/
A diferencia de versiones anteriores, en Debian Squeeze la manera recomendada de configurar OpenLDAP es mediante archivos LDIF, lo cual permite que cualquier cambio realizado sea efectivo inmediatamente, incluso mientras el servicio se ejecuta.
Comenzaremos creando un directorio temporal y dentro de este un archivo LDIF para modificar la configuración por defecto de la base de datos:
mkdir -p /var/tmp/ldap editor /var/tmp/ldap/00_olc-config.ldif
Como contenido de dicho archivo, colocaremos esto:
# 1. dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats # 2.1. dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: uid eq - # 2.2. add: olcDbIndex olcDbIndex: cn eq - # 2.3. add: olcDbIndex olcDbIndex: ou eq - # 2.4. add: olcDbIndex olcDbIndex: dc eq
Esto básicamente establece un nivel de trazas más detallado para syslog
, y crea índices para acelerar las futuras consultas a la base de datos. 3)
Una vez creado el archivo, procedemos a importarlo a LDAP, para lo cual ejecutamos este comando:
ldapmodify -QY EXTERNAL -H ldapi:/// -f /var/tmp/ldap/00_olc-config.ldif
A continuación detallaremos los parámetros que se han utilizado en este comando:
Parámetro | Propósito |
---|---|
Q | Habilitar SASL en modo silencioso. |
Y | Especificar el mecanismo SASL para utilizar en la autenticación (en este caso, EXTERNAL). |
H | Especificar la URI al servidor de ldap. |
f | Especificar el archivo que contiene la información (de lo contrario se utiliza la entrada estándar). |
Para comprobar que se efectuaron los cambios, ejecutamos el siguiente comando:
ldapsearch -LLLQY EXTERNAL -H ldapi:/// -b cn=config "(|(cn=config)(olcDatabase={1}hdb))"
En este caso se añade el parámetro L: la primera L hace que los resultados se muestren en formato LDIF, la segunda L deshabilita los comentarios, y la tercera L hace que no se muestre la versión de LDIF.
Ahora crearemos un archivo LDIF para las unidades organizativas:
editor /var/tmp/ldap/01_ou.ldif
En este caso utilizaremos dos unidades organizativas, una para las cuentas de usuarios, y otra para los grupos de cuentas. El contenido del archivo quedaría así:
dn: ou=usuarios,dc=midominio,dc=cu ou: usuarios objectClass: organizationalUnit dn: ou=grupos,dc=midominio,dc=cu ou: grupos objectClass: organizationalUnit
Una vez terminado, procedemos a aplicarlo:
ldapadd -cxWD cn=admin,dc=midominio,dc=cu -f /var/tmp/ldap/01_ou.ldif
A continuación detallaremos los parámetros que se han utilizado en este comando:
Parámetro | Propósito |
---|---|
c | Continuar si se encuentran errores. |
x | Utilizar la autenticación simple (por defecto se utiliza SASL). |
W | Solicitar la contraseña al usuario. |
D | Establecer el DN (nombre distinguido) con el cual enlazar al servidor OpenLDAP. |
f | Especificar el archivo que contiene la información (de lo contrario se utiliza la entrada estándar). |
A continuación crearemos el archivo para los grupos de cuentas:
editor /var/tmp/ldap/02_grupos.ldif
Para ejemplificar, solamente crearemos dos grupos, uno para los informáticos y otro para el resto de los empleados de la empresa, de modo que como contenido de este archivo, colocaremos algo como esto:
# grupo 1: cn=informaticos,ou=grupos,dc=midominio,dc=cu dn: cn=informaticos,ou=grupos,dc=midominio,dc=cu cn: informaticos description: Cuentas de informáticos gidnumber: 1100 objectclass: posixGroup # grupo 2: cn=empleados,ou=grupos,dc=midominio,dc=cu dn: cn=empleados,ou=grupos,dc=midominio,dc=cu cn: empleados description: Cuentas de empleados gidnumber: 1200 objectclass: posixGroup
Ahora procederemos a importar el archivo en OpenLDAP:
ldapadd -cxWD cn=admin,dc=midominio,dc=cu -f /var/tmp/ldap/02_grupos.ldif
Una vez creados los grupos, necesitamos poblarlos, y para esto crearemos otro archivo:
editor /var/tmp/ldap/03_usuarios.ldif
Como contenido de dicho archivo colocaremos los detalles de cada usuario. En este tutorial crearemos solamente un informático y un contador, y para esto utilizaremos la clase de LDAP inetOrgPerson, pues ofrece muchos campos útiles que nos evitarán tener que agregar más clases. Aquí solamente llenaremos algunos de estos campos, aunque posteriormente pueden agregarse muchos más, los cual puede resultar más cómodo mediante herramientas como phpLDAPadmin, por ejemplo.
dn: uid=sysadmin,ou=usuarios,dc=midominio,dc=cu uid: sysadmin cn: sysadmin givenName: System sn: Administrator displayName: System Administrator title: Especialista en informática description: Administrador del sistema mail: sysadmin@midominio.cu gidNumber: 1200 uidNumber: 1201 homeDirectory: /home/sysadmin loginShell: /bin/bash objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount dn: uid=juanperez,ou=usuarios,dc=midominio,dc=cu uid: juanperez cn: juanperez givenName: Juan sn: Pérez González displayName: Juan Pérez González title: Lic. en contabilidad description: Contador principal mail: juanperez@midominio.cu gidNumber: 1200 uidNumber: 1202 homeDirectory: /home/juanperez loginShell: /usr/sbin/nologin objectClass: inetOrgPerson objectClass: posixAccount objectClass: shadowAccount
Nótese que el contador podrá utilizar los diferentes servicios que le sean habilitados porque posee una cuenta en el sistema, pero por motivos de seguridad, no podrá iniciar sesión en el propio servidor a causa del parámetro loginShell: /usr/sbin/nologin
.
Una vez más, para aplicar estos cambios, importaremos el archivo LDIF:
ldapadd -cxWD cn=admin,dc=midominio,dc=cu -f /var/tmp/ldap/03_usuarios.ldif
Ahora procederemos a instalar Postfix junto con algunas utilidades y librerías, y posteriormente editamos el archivo de configuración principal de postfix.
aptitude install postfix postfix-{doc,ldap,pcre} mailutils libsasl2-modules nano /etc/postfix/main.cf
Modificamos estas entradas, o las agregamos si no existen:
# Parámetros principales mail_owner = postfix default_privs = nobody mydomain = midominio.cu myorigin = $mydomain myhostname = correo.$mydomain inet_interfaces = $myhostname, localhost mydestination = $myhostname, $mydomain, localhost mynetworks = 192.168.0.0/24, 127.0.0.0/8 smtpd_banner = $myhostname ESMTP # Establecer el mapeo de aliases tanto desde archivos como desde LDAP alias_database = hash:/etc/postfix/aliases alias_maps = hash:/etc/postfix/aliases, ldap:/etc/postfix/ldap-aliases.cf # Habilitar la verificación de cabeceras header_checks = regexp:/etc/postfix/header_checks # Establecer el tamaño máximo del mensaje en 2 MiB message_size_limit = 2097152 # Establecer el directorio para la cola de Postfix queue_directory = /var/spool/postfix # Algunas opciones de seguridad strict_rfc821_envelopes = yes smtpd_sender_restrictions = reject_unlisted_sender, reject_non_fqdn_sender smtpd_recipient_restrictions = reject_unlisted_recipient, reject_non_fqdn_recipient, reject_unauth_destination smtpd_client_restrictions = permit_mynetworks, reject_unknown_client_hostname smtpd_reject_footer = Consulte al administrador de la red. # Parámetros TLS smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_security_level = encrypt smtpd_tls_mandatory_protocols = TLSv1 smtpd_tls_mandatory_ciphers = high smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtpd_tls_session_cache_timeout = 7200s smtp_tls_note_starttls_offer = yes smtp_tls_loglevel = 1
Para que toda la configuración relacionada con Postfix esté junta, movemos los alias al directorio de configuración de Postfix, y posteriormente generamos la base de datos de los alias:
mv /etc/aliases /etc/postfix/aliases postalias /etc/postfix/aliases
Para que Postfix utilice las cuentas que se creen virtualmente mediante OpenLDAP, crearemos un archivo para colocar la información de los alias:
editor /etc/postfix/ldap-aliases.cf
Como contenido de este archivo utilizaremos esto:
server_host = ldap.midominio.cu search_base = dc=midominio,dc=cu start_tls = yes version = 3
Finalmente, refrescamos la base de datos de los alias:
newaliases