Instalación de MIT Kerberos
En el artículo anterior aprendimos sobre qué es kerberos, y para qué sirve. Es hora de ver cómo instalar un servidor para este servicio.
Este artículo forma parte del proyecto Autenticación y administración centralizada de usuarios en GNU/Linux (Autenticación y administración centralizada de usuarios en GNU/Linux).

Si bien existen varias implementaciones del protocolo, elegí MIT kerberos por estar desarrollado por MIT, autores del protocolo original, ser muy completa, muy soportada por librerías y la más utilizada. Otras implementaciones bastante utilizadas son Heimdal y GNU Shishi.

Antes de comenzar a instalar kerberos, es muy importante que los relojes de los hosts participantes estén sincronizados. Como se explicó, kerberos es muy dependiente del tiempo, una desincronización conlleva problemas de acceso.
También es importante tener un servidor de nombres de dominio con los registros correspondientes a cada host, incluidos los registros PTR, dado que kerberos utiliza los nombres de dominio para validar el hosts desde donde se piden los tickets.

A continuación se describe la instalación de kerberos en debian y derivados, pero en otras distribuciones es muy similar. Por su parte, la configuración del sistema es igual para todas las distribuciones.
En debian y derivados, instalar el servicio kerberos (con kdc incluido) es tan simple como ejecutar:
  # apt-get install krb5-admin-server
La interfaz debconf de este paquete pregunta por parámetros básicos para el funcionamiento de kerberos:
  • configurar realm con el nombre del dominio, por ejemplo: demasiadovivo.org
  • escribir la dirección del servidor kerberos (es decir, la dirección del servidor donde estamos instalando kerberos, en este caso): kdc01.demasiadovivo.org
  • En este paso, obviamente necesitarán tener registrado el nombre kdc01 en el servidor de nombres. Lo mejor es tener un servidor de nombres propio para la red interna. Instalar y configurar bind es simple, por lo cual no debería implicar mayores problemas.
  • escribir el nombre del servidor administrativo de kerberos (cambio de contraseñas). Al igual que en el punto anterior, dado que estamos instalando el servidor kerberos, el nombre será el del mismo servidor actual: kdc01.demasiadovivo.org. El servidor administrativo es el que permite al administrador conectarse remotamente (herramienta kadmin) y trabajar sobre la base de datos de kerberos.
Al terminar la configuración inicial, tanto kadmind como kdc intentarán iniciar pero fallarán, dado que todavía no configuramos ningún realm.
Toda esta configuración inicial se puede realizar a mano, editando el archivo /etc/krb5.conf.

Para la creación de realms, poseemos la herramienta krb5_newrealm. Al ejecutar este comando, se creará la base de datos de kerberos para nuestro realm, y nos solicitará un password (master key del KDC) que se utiliza para generar la clave a almacenar en el stash (/etc/krb5kdc/stash), la cual sirve para encriptar la base de datos. Como se imaginan, este password es MUY importante y debe ser lo más fuerte posible. Aquel que posea el password, será capaz de desencriptar la base de datos y obtener todas las claves de los usuarios.

Una vez generado el realm, hace falta editar /etc/krb5.conf para agregar nuestro dominio default. Cuando abran este archivo se encontrarán que la sección [realms] cuenta con muchos realms famosos (varios del MIT, GNU.ORG, stanford.edu, etc). Si quieren tener una configuración limpia, lo mejor es eliminar todos estos realms; lo mismo para la sección [domain_realm]. Ahora, para agregar el dominio default, editen la definición del realm para que quede como lo siguiente:
[realms]
  DEMASIADOVIVO.ORG = {
    kdc = kdc01.demasiadovivo.org
    admin_server = kdc01.demasiadovivo.org
    default_domain = demasiadovivo.org
  }
y agreguen el dominio a la definición de dominios:
[domain_realm]
  .demasiadovivo.org = DEMASIADOVIVO.ORG
  demasiadovivo.org = DEMASIADOVIVO.ORG
se colocan tanto el nombre de dominio como el nombre de dominio iniciando con punto ".", para indicar que se aplica a todos los subdominios del mismo.
Por defecto, kerberos loggea en syslog, pero si quieren tener los logs separados, pueden agregar la sección [logging] con una definición como la siguiente:
[logging]
  kdc = FILE:/var/log/kerberos/kdc.log
  admin_server = FILE:/var/log/kerberos/kadmin.log
  default = FILE:/var/log/kerberos/krblib.log
Si utilizan el path propuesto anteriormente, deberán crear el correspondiente directorio en /var/log
  # mkdir /var/log/kerberos
Para que los cambios surtan efecto, reiniciar tanto kadmin como el kdc
  /etc/init.d/krb5-admin-server restart
  /etc/init.d/krb5-kdc restart
Una vez instalado y configurado el servicio, podemos testear como va todo. Para esto, usamos la herramienta kadmin.local, la cual es como kadmin, pero destinada a utilizarse localmente, y por ello el usuario debe estar logueado en el servidor con una cuenta de usuario lo suficientemente privilegiada para poder abrir la base de datos de kerberos (por ej. root). A diferencia de kadmin que requiere un usuario de kerberos válido para acceder, kadmin.local no requiere password dado que el usuario que la utiliza es un administrador del servidor.
Usemos entonces kadmin.local de la siguiente forma:
  # kadmin.local
  Authenticating as principal root/admin@DEMASIADOVIVO.ORG with password.
  kadmin.local: listprinc
  K/M@DEMASIADOVIVO.ORG
  kadmin/admin@DEMASIADOVIVO.ORG
  kadmin/changepw@DEMASIADOVIVO.ORG
  kadmin/dvpem01.demasiadovivo.org@DEMASIADOVIVO.ORG
  kadmin/history@DEMASIADOVIVO.ORG
  krbtgt/DEMASIADOVIVO.ORG@DEMASIADOVIVO.ORG
  kadmin.local: quit
Lo que hicimos es entrar al modo administración de kerberos y listar los principals existentes con listprinc.

Los permisos para administrar kerberos se configuran en /etc/krb5kdc/kadm5.acl. Como vimos, kerberos permite utilizar roles, y en este archivo podemos utilizarlos. Por defecto vemos que figura el acl "*/admin *", el cual está deshabilitado, como comentario. Este acl permite acceso de administración full a todos los usuarios cuyo principal tenga el rol admin. Si descomentamos esta línea, podemos utilizar el rol admin en los principals para indicar qué usuarios pueden administrar kerberos.
Agregando el principal root/admin, podremos acceder con el usuario root a través de kadmin:
# kadmin.local
Authenticating as principal root/admin@DEMASIADOVIVO.ORG with password.
kadmin.local: addprinc root/admin
WARNING: no policy specified for root/admin@DEMASIADOVIVO.ORG; defaulting to no policy
Enter password for principal "root/admin@DEMASIADOVIVO.ORG":
Re-enter password for principal "root/admin@DEMASIADOVIVO.ORG":
Principal "root/admin@DEMASIADOVIVO.ORG" created.
Y podemos probar utilizando el comando:
  # kadmin
  Authenticating as principal root/admin@DEMASIADOVIVO.ORG with password.
  Password for root/admin@DEMASIADOVIVO.ORG:
  kadmin:
Si vemos el prompt de kadmin, es que todo fue bien.


Referencias

- The Kerberos protocol and its implementations
- Kerberos V5 System Administrator's Guide
- Kerberos FAQ, v2.0
- MIT Kerberos installation on Debian
- Kerberos Infrastructure HOWTO

0 comentarios:

Publicar un comentario