Configuración de Kerberos
C@mpus - @cademia Linux

Introducción 

Últimamente el protocolo Kerberos ha tenido mucha difusión por la gran mercadotecnia que Microsoft Windows ha tenido (hablando específicamente de su dominio Windows 200).

Kerberos permite la autenticación a servicios que lo soporten (dependiendo de las opciones de compilación de cada demonio) con la característica mas importante a la que se nombrará single-sign-on. Esta característica como su nombre lo indica permite que un usuario desde un equipo identificado acceda a los servicios que se le da privilegios con un único evento de autenticación durante un tiempo determinado.

El siguiente documento muestra el procedimiento para implementar un servidor Kerberos utilizando Heimdal.


Paquetes necesarios

  • Heimdal 0.6.2+

Nota: Es necesario instalar la versión proporcionada por LXE. El RPM publicado contiene parches que son indispensables para el correcto funcionamiento.

Nota2: La instalar el paquete Heimdal-libs es necesario realizar la acción con el parámetro --force para evitar el conflicto con el archivo /etc/krb5.conf de otro RPM de Kerberos MIT. Heimdal y MIT pueden convivir juntos y leer el mismo archivo de configuración.


Requisitos

Existen varios puntos que se deben realizar antes de poder instalar y ejecutar exitosamente Heimdal. Se enumera los siguientes:

  1. Debe existir resolución inversa de todos los servidores y equipos finales que interactúen de alguna forma con el protocolo kerberos.  Para configurar el DNS lea el artículo sobre configuración de Resolución de Nombres .
  2. El servidor donde residirá Heimdal debe ser el mismo donde se encuentra el LDAP maestro. Heimdal sólo soporta sockets de tipo unix. Este procedimiento indicará al configuración del servidor de directorio.
  3. Infraestructura PKI para el soporte para TLS.  Para la configuración de una CA lea el artículo de configuración de una Autoridad Certificadora.

Configuración

Para permitir a Heimdal trabajar correctamente con LDAP este tiene que sufrir algunas configuraciones. Entre la que sobresale la existencia de la inclusión del archivo krb5-kdc.schema en el archivo slapd.conf. Mandrake por defecto ya lo incluye.

Se tiene que ser alterados añadiendo o modificando las siguientes líneas.

/etc/openldap/slapd.conf
include /usr/share/openldap/schema/krb5-kdc.schema
include /etc/openldap/slapd.access.conf

TLSRandFile /dev/random
TLSCertificateFile /etc/ssl/tao.linuxchange.com/servercrt.pem
TLSCertificateKeyFile /etc/ssl/tao.linuxchange.com/serverkey.pem
TLSCACertificateFile /etc/ssl/tao.linuxchange.com/cacert.pem
TLSVerifyClient never # ([never]|allow|try|demand)

# SASL configuration
sasl_host tao.linuxchange.com
sasl_realm LINUXCHANGE.COM

# Mapping of SASL authentication identities to LDAP entries
authz-regexp
uid=(.+),cn=(.+),cn=.+,cn=auth
ldap:///dc=$2,dc=com??sub?(|(uid=$1)(cn=$1@$2))

authz-regexp
uid=(.+),cn=.+,cn=auth
ldap:///dc=linuxchange,dc=com??sub?
  (|(uid=$1)(krb5PrincipalName=$ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla ))

authz-regexp
uidnumber=0\\\+gidnumber=0,cn=peercred,cn=external,cn=auth
cn=root,ou=People,dc=linuxchange,dc=com

Los parámetros TLS indican a OpenLDAP dónde están los certificados para las conexiones seguras. El alcance de este documento no intenta explicar cómo construir la infraestructura PKI. OpenLDAP requiere que estos certificados de servidor estén sin cifrar además que no contengan ningún otro dato que no sea el nombre canónico del servidor.

La opción sasl_host indica el nombre canónico del servidor Kerberos. Bajo estas circunstancias deberá ser el del servidor del directorio. Si se especifica otro nombre como un alias la autenticación fallará.

También se debe especificar el nombre del realm que utilizará OpenLDAP. Este valor se especifica con sasl_realm. Recordar que este parámetro es sensible a mayúsculas y minúsculas.

Como las conexiones se realizarán utilizando sockets unix es necesario poder reasignar el dn de la conexión a un usuario. Para esto se utilizará la opción authz-regexp (antes sasl-regexp). Los valores mostrados en el ejemplo refieren al dominio de linuxchange.com y a la ou People en donde se almacenan los usuarios. Estos datos fueron definidos en la instalación del directorio.

Hasta el momento OpenLDAP tiene soporte para Kerberos. No se deberá reiniciar el servidor hasta terminar el presente procedimiento en su totalidad.


ACL 

Al igual que le archivo slapd.conf se debe configurar los suficientes accesos para que una conexión por un socket unix funcione. Para esto se deben añadir o modificar las reglas de la siguiente forma:

access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read


OpenLDAP

Hasta el momento sólo se ha previsto el soporte para las conexiones por socket unix sin embargo no se ha habilitado. Para esto se tiene que modificar la siguiente linea de la siguiente forma: 

/etc/sysconfig/ldap

# debug level for slapd
SLAPDSYSLOGLEVEL="0"
SLAPDSYSLOGLOCALUSER="LOCAL0"

# SLAPD URL list
SLAPDURLLIST="ldap:/// ldaps:/// ldapi://%2fvar%2frun%2fldap%2fldapi"

# Config file to use for slapd
#SLAPDCONF=/etc/openldap/slapd.conf

# Which user to run as
LDAPUSER=root
LDAPGROUP=ldap

# Should file permissions on database files be fixed at startup
# FIXPERMS=yes

Esta configuración es muy propia de Mandrake sin embargo en distribuciones diferentes la opción utilizada será -h. La documentación de slapd ayudará mas en este aspecto.


ldap.conf 

Aunque los archivos son idénticos, sus propósitos no son el mismo. Mientras /etc/ldap.conf sirve a PAM y NSS, /etc/openldap/ldap.conf sirve a los clientes de OpenLDAP.

Se deberá cambiar y/o modificar las siguientes líneas para permitir las conexiones por TLS:

TLS_CACERT /etc/ssl/tao.linuxchange.com/cacert.pem


Heimdal 

La configuración de Heimdal se concentra en el archivo /etc/krb5.conf de esta forma este archivo deberá tener el siguiente aspecto:

/etc/krb5.conf

[libdefaults]
 ticket_lifetime = 600
 default_realm = LINUXCHANGE.COM
 clockskew = 300
 default_etypes = des-cbc-crc
 default_etypes_des = des-cbc-crc
 default_keytab_name = FILE:/etc/krb5.keytab
 default_tkt_enctypes= des-cbc-crc
 default_tgs_enctypes= des-cbc-crc

 [realms]
 LINUXCHANGE.COM = {
   kdc = tao.linuxchange.com:88
   admin_server = tao.linuxchange.com:749
   kpasswd_server = tao.linuxchange.com:464
 }

 [domain_realm]
 .linuxchange.com = LINUXCHANGE.COM
 linuxchange.com = LINUXCHANGE.COM

 [logging]
 kdc = SYSLOG
 admin_server = SYSLOG
 default = SYSLOG

 [appdefaults]
 pam = {
   ticket_lifetime = 1d
   renew_lifetime = 1d
   forwardable = true
   proxiable = false
   retain_after_close = false
   minimum_uid = 0
   debug = false
 }

 [kdc]
 database = {
 realm = LINUXCHANGE.COM
 dbname = ldap:ou=People,dc=linuxchange,dc=com
 mkey_file = /var/heimdal/m-key
 }

 [password_quality]
 check_function = function

Debido a que kadmin busca los archivos de configuración en otro lugar, es necesario crear una liga, para esto hay que ejecutar los siguientes comandos: cd /etc/heimdal/ ; ln -s ../krb5.conf krb5.conf ; cd /var/heimdal ; ln -s /etc/krb5.conf kdc.conf


Realms 

Kerberos necesita una "llave maestra" para operar. Para crearla es necesario ejecutar el comando kstash como súper usuario. De esta forma aparecerá un texto similar al siguiente:

kstash
Master key:<teclear contraseña>
Verifying - Master key:<teclear contraseña>
kstash: writing key to `/var/heimdal/m-key'

Hasta este momento el servidor Kerberos no debe estar ejecutándose.

Posteriormente se necesita ejecutar el comando kadmin con el parámetro -l que indica que es administración local.

kadmin -l
kadmin> init LINUXCHANGE.COM
Realm max ticket life [unlimited]:
Realm max renewable ticket life [unlimited]:
kadmin>

Este comando creara distintas entradas en la rama ou=People.

Ahora es necesario asignar una contraseña al realm kadmin/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla que es por defecto el que administra. Para esto sin salirse de kadmin teclear el siguiente comando:

kadmin> cpw kadmin/admin
kadmin/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla 's Password: <teclear contraseña>
Verifying - kadmin/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla 's Password: <teclear contraseña>
kadmin>


ACL en Kerberos 

Para dar control absoluto a un administrador es necesario añadir ACL's iniciales en el archivo /var/heimdal/kadmind.acl. Para esto es necesario añadir al menos la siguiente línea:

kadmin/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla all

Una vez hecho esto se podrá iniciar el servidor con el comando: service kdc start o service heimdal start


Verificación 

Para verificar la instalación se ha realizado correctamente, es necesario verificar que Heimdal este trabajando. Para esto se ejecutará una firma de un REALM y el listado del mismo activo. Para esto ejecutar:

kinit kadmin/admin

klist

Se preguntara por la contraseña de tal forma que la rutina será la siguiente:

kinit kadmin/admin
kadmin/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla 's Password: <teclear contraseña>
kinit: NOTICE: ticket renewable lifetime is 1 hour
klist
Credentials cache: FILE:/tmp/krb5cc_500_Biki5X
Principal: kadmin/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla
Issued Expires Principal
Aug 18 16:17:47 Aug 18 16:27:46
krbtgt/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla


Exportación de principales 

También habrá que exportar los principales de los servicios que serán utilizados en el dominio de LXE como ldap, radius, imap, smtp entre otros.  Para realizar esto se ejecutarán la siguiente serie de comandos:

kinit kadmin/admin
kadmin/ Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla 's Password: <teclear contraseña>
kinit: NOTICE: ticket renewable lifetime is 1 hour
ktutil -k /etc/krb5.keytab get ldap/tao.linuxchange.com
ktutil -k /etc/krb5.keytab get radius/tao.linuxchange.com
ktutil -k /etc/krb5.keytab get imap/tao.linuxchange.com
ktutil -k /etc/krb5.keytab get mstp/tao.linuxchange.com

Este tema es tocado más a fondo en el artículo de Adición de Servicios a Kerberos.