Recientemente he estado estudiando para obtener la certificación RHCE (Red Hat Certified Engineer), y como parte de los objetivos, publicitados por RedHat en su página (https://www.redhat.com/es/services/training/ex300-red-hat-certified-engineer-rhce-exam) está el uso de Kerberos para la autenticación y para el control de acceso a NFS…
La configuración del servidor de Kerberos, afortunadamente, queda fuera de los objetivos del examen, pero la configuración del cliente para la autenticación y para su uso con NFS, si entra, y ha sido una de las partes mas frustrantes de mi preparación para el examen, debido a que la documentación, aunque abundante, es poco clara, y a que los errores que Kerberos da en los logs son, optimistamente, muy opacos.
La configuración del cliente para la autenticación es muy sencilla, al igual que hacemos para configurar el sistema de autenticación contra un LDAP, podemos usar el authconfig-tui, que viene dentro del paquete authconfig-gtk, lo único que debemos hacer es instalar el modulo pam_krb5, seleccionar kerberos dentro del tui, y configurar los pocos datos que se solicitan (servidor KRB y REALM, básicamente).
Sin embargo, para el NFS, la cosa se complica bastante, principalmente debido a que la explicación que encontramos en los libros de preparación de la certificación que he consultado, viene mal o pobremente explicado, la forma mas sencilla de configurarlo que he encontrado y probado es la siguiente:
- Instalar el cliente de kerberos krb5-workstation
- Copiar la configuración de kerberos del servidor a los clientes: /etc/krb5.conf, en la misma ubicación
- En el servidor, ejecutar el kadmin.local para acceder a la configuración, y añadir tantos principals como sea necesario, uno por cada host y otro por cada cliente y servidor NFS:
- kadprinc -randkey host/server1.example.tld
- kadprinc -randkey nfs/server1.example.tld
- kadprinc -randkey host/client1.example.tld
- kadprinc -randkey nfs/client1.example.tld
- Una vez tenemos todos los host y nfs añadidos, exportamos el fichero de principals, uno por cada servidor:
- ktadd -k /tmp/server1.keytab nfs/server1.example.tld
- ktadd -k /tmp/host1.keytab nfs/host1.example.tld
- Copiamos el fichero keytab correspondiente a cada host y lo colocamos en /etc/krb5.keytab
- scp /tmp/server1.keytab root@server1.example.com:/etc/krb5.keytab
- scp /tmp/host1.keytab root@host1.example.com:/etc/krb5.keytab
- Configuramos el NFS para que use sec=krb5p tanto en el export como en el fstab
- Magia! Funciona!
Si seguimos estos pasos al pie de la letra, sobre una RHEL 7, podemos encontrarnos con que el nfs-secure o el propio kerberos nos muestre un error en los logs bastante poco claro:
kinit: Included profile directory could not be read while initializing Kerberos 5 library
Este error significa que en el fichero /etc/krb5.conf tenemos un includeDir y que el directorio que estamos incluyendo no existe… recordemos que hemos copiado el fichero de configuración desde el servidor, donde si se creó como parte del proceso de instalación del servidor de kerberos, pero en los clientes no se crea, por lo que debemos crear el directorio vacío o eliminar/comentar la referencia en la configuración, y con eso ya funcionará perfectamente.
includedir /etc/krb5.include.d/
Espero que os haya sido de utilidad y gracias por visitarme!
Málaga, Julio de 2017