305.4 NFS

Introducción

NFSv4 es la versión moderna del protocolo NFS (Network File System) que incluye soporte nativo para autenticación Kerberos, mapeo de identidades y ACLs. En entornos mixtos con FreeIPA, NFS se integra con la infraestructura de identidades centralizada para proporcionar acceso seguro a los sistemas de archivos compartidos.

NFSv4 con Kerberos

Niveles de seguridad

NFSv4 soporta varios niveles de seguridad con Kerberos a través del parámetro sec=:

NivelDescripción
sysAutenticación basada en UID/GID (sin Kerberos, inseguro)
krb5Autenticación Kerberos (verifica identidad)
krb5iKerberos + integridad (verifica que datos no se alteraron)
krb5pKerberos + privacidad (cifra todos los datos)
sys < krb5 < krb5i < krb5p
     (seguridad creciente →)

Para el examen: sec=sys usa UID/GID del sistema (susceptible a suplantación). krb5 autentica, krb5i añade integridad y krb5p añade cifrado. krb5p es el más seguro pero con mayor overhead.

Configuración del servidor NFS con Kerberos

/etc/exports

# Exportación con Kerberos
/srv/nfs/datos  *.empresa.local(sec=krb5:krb5i:krb5p,rw,sync,no_subtree_check)
 
# Solo Kerberos con cifrado
/srv/nfs/confidencial  *.empresa.local(sec=krb5p,rw,sync,root_squash)
 
# Múltiples opciones de seguridad
/srv/nfs/publico  *.empresa.local(sec=sys:krb5,ro,sync)

Formato de la opción sec=:

  • sec=krb5 permite solo autenticación Kerberos
  • sec=krb5:krb5i:krb5p permite cualquiera de los tres niveles
  • sec=sys:krb5 permite tanto sys como Kerberos
Opción exportsDescripción
sec=Mecanismo(s) de seguridad permitidos
rwLectura y escritura
roSolo lectura
syncEscritura síncrona (recomendado)
root_squashMapear root a nobody (por defecto)
no_root_squashPermitir acceso como root
all_squashMapear todos los usuarios a nobody
no_subtree_checkNo verificar subdirectorios (rendimiento)

Para el examen: En /etc/exports, la opción sec= especifica qué mecanismos de seguridad acepta la exportación. Se pueden listar múltiples separados por :. El cliente debe usar uno de los mecanismos permitidos.

Keytab del servidor NFS

El servidor NFS necesita un keytab con el principal nfs/hostname@REALM:

# En FreeIPA: crear servicio NFS
ipa service-add nfs/nfsserver.empresa.local
 
# Obtener keytab
ipa-getkeytab -s ipa.empresa.local \
  -p nfs/nfsserver.empresa.local \
  -k /etc/krb5.keytab
 
# Verificar keytab
klist -kt /etc/krb5.keytab

Configuración del cliente NFS con Kerberos

# Montaje con Kerberos (autenticación)
mount -t nfs4 -o sec=krb5 nfsserver:/srv/nfs/datos /mnt/datos
 
# Montaje con Kerberos + cifrado
mount -t nfs4 -o sec=krb5p nfsserver:/srv/nfs/confidencial /mnt/confidencial
 
# En /etc/fstab
nfsserver:/srv/nfs/datos  /mnt/datos  nfs4  sec=krb5,_netdev  0  0

gssproxy y rpc.gssd

gssproxy

gssproxy es el servicio moderno que gestiona las credenciales GSS-API (Kerberos) para servicios NFS:

# /etc/gssproxy/gssproxy.conf
 
[gssproxy]
 
[service/nfs-server]
  mechs = krb5
  cred_store = keytab:/etc/krb5.keytab
  cred_store = ccache:FILE:/var/lib/gssproxy/clients/krb5cc_%U
  allowed_client_uids = 0
  euid = 0
 
[service/nfs-client]
  mechs = krb5
  cred_store = keytab:/etc/krb5.keytab
  cred_store = client_keytab:/etc/krb5.keytab
  cred_store = ccache:FILE:/var/lib/gssproxy/clients/krb5cc_%U
  allow_any_uid = yes
  euid = 0
# Habilitar e iniciar gssproxy
systemctl enable gssproxy
systemctl start gssproxy

rpc.gssd

rpc.gssd es el daemon que gestiona las credenciales Kerberos para el cliente NFS (enfoque legacy):

# Habilitar rpc.gssd
systemctl enable rpc-gssd
systemctl start rpc-gssd
ServicioRol
gssproxyGestión de credenciales GSS-API (moderno, recomendado)
rpc.gssdCliente: negocia autenticación Kerberos (legacy)
rpc.svcgssdServidor: valida credenciales Kerberos (obsoleto)

Para el examen: gssproxy es la alternativa moderna a rpc.gssd y rpc.svcgssd. Gestiona las credenciales GSS-API tanto en el servidor como en el cliente NFS.

NFS en entornos FreeIPA

Configuración automatizada

FreeIPA simplifica la configuración de NFS con Kerberos:

# En el servidor IPA: crear servicio NFS
ipa service-add nfs/nfsserver.empresa.local
 
# En el servidor NFS: obtener keytab
ipa-getkeytab -s ipa.empresa.local \
  -p nfs/nfsserver.empresa.local \
  -k /etc/krb5.keytab
 
# Configurar exports
echo '/srv/nfs/datos *.empresa.local(sec=krb5:krb5i:krb5p,rw,sync)' >> /etc/exports
exportfs -arv
 
# Iniciar servicios
systemctl enable --now nfs-server gssproxy

En los clientes inscritos en FreeIPA:

# El keytab del host ya existe tras ipa-client-install
# Solo necesita gssproxy o rpc-gssd
systemctl enable --now gssproxy
 
# Montar
mount -t nfs4 -o sec=krb5 nfsserver.empresa.local:/srv/nfs/datos /mnt/datos

Mapas de automount en LDAP

Concepto

FreeIPA permite almacenar mapas de automount en LDAP, centralizando la configuración:

# Crear ubicación de automount
ipa automountlocation-add default
 
# Crear mapa de automount
ipa automountmap-add default auto.datos
 
# Añadir clave (punto de montaje)
ipa automountkey-add default auto.datos \
  --key=datos \
  --info="-fstype=nfs4,sec=krb5 nfsserver.empresa.local:/srv/nfs/datos"
 
# Añadir mapa directo a auto.master
ipa automountkey-add default auto.master \
  --key=/mnt \
  --info=auto.datos

Estructura de automount en FreeIPA

Ubicación: default
└── auto.master
    └── /mnt → auto.datos
        └── datos → nfsserver:/srv/nfs/datos (sec=krb5)

Configurar cliente para automount LDAP

# En sssd.conf
[domain/empresa.local]
ipa_automount_location = default
 
# Habilitar autofs con SSSD
authselect enable-feature with-autofs
 
# En /etc/nsswitch.conf
automount: sss files
 
# Reiniciar autofs
systemctl restart autofs

Para el examen: FreeIPA almacena mapas de automount en LDAP. Los clientes consultan estos mapas a través de SSSD (automount: sss en nsswitch.conf). Esto elimina la necesidad de mantener archivos auto.master/auto.* en cada cliente.

idmapd.conf para NFSv4

Mapeo de identidades

NFSv4 usa nombres de usuario con formato usuario@dominio en lugar de UIDs numéricos. idmapd traduce entre ambos formatos:

# /etc/idmapd.conf
[General]
Verbosity = 0
Domain = empresa.local
 
[Mapping]
Nobody-User = nobody
Nobody-Group = nobody
 
[Translation]
Method = nsswitch
ParámetroDescripción
DomainDominio NFSv4 (debe coincidir en servidor y clientes)
Nobody-UserUsuario para mapeos fallidos
Nobody-GroupGrupo para mapeos fallidos
MethodMétodo de traducción (nsswitch, umich_ldap)

Para el examen: El parámetro Domain en idmapd.conf DEBE ser idéntico en el servidor y todos los clientes NFSv4. Si no coincide, todos los archivos aparecerán como propiedad de nobody:nobody.

Problemas comunes de mapeo

# Síntoma: todos los archivos aparecen como nobody:nobody
# Causa: Domain no coincide entre servidor y cliente
 
# Verificar Domain en servidor
cat /etc/idmapd.conf | grep Domain
 
# Verificar Domain en cliente
cat /etc/idmapd.conf | grep Domain
 
# Limpiar caché de idmap
nfsidmap -c
 
# Reiniciar el servicio
systemctl restart nfs-idmapd

Ejemplo completo: NFS con Kerberos en FreeIPA

En el servidor FreeIPA (ipa.empresa.local)

# Crear servicio NFS
ipa service-add nfs/nfsserver.empresa.local
 
# Crear mapas automount
ipa automountlocation-add default
ipa automountmap-add default auto.nfs
ipa automountkey-add default auto.master --key=/nfs --info=auto.nfs
ipa automountkey-add default auto.nfs --key=datos \
  --info="-fstype=nfs4,sec=krb5 nfsserver.empresa.local:/export/datos"

En el servidor NFS (nfsserver.empresa.local)

# Inscribir como cliente FreeIPA
ipa-client-install --mkhomedir
 
# Obtener keytab NFS
ipa-getkeytab -s ipa.empresa.local \
  -p nfs/nfsserver.empresa.local \
  -k /etc/krb5.keytab
 
# Configurar exports
cat > /etc/exports << 'EOF'
/export/datos *.empresa.local(sec=krb5:krb5i:krb5p,rw,sync,no_subtree_check)
EOF
 
# Configurar idmapd
sed -i 's/#Domain = .*/Domain = empresa.local/' /etc/idmapd.conf
 
# Iniciar servicios
systemctl enable --now nfs-server gssproxy
exportfs -arv

En los clientes (cliente.empresa.local)

# Ya inscritos en FreeIPA
# Configurar idmapd
sed -i 's/#Domain = .*/Domain = empresa.local/' /etc/idmapd.conf
 
# Habilitar servicios
systemctl enable --now gssproxy autofs
 
# Configurar SSSD para automount
# (Automático si se usó ipa-client-install)
 
# Verificar automount
ls /nfs/datos

Diagnóstico

# Verificar exports
exportfs -v
showmount -e nfsserver
 
# Verificar montajes NFS
mount | grep nfs
nfsstat -m
 
# Verificar Kerberos
klist -kt /etc/krb5.keytab
klist
 
# Verificar idmap
nfsidmap -l
nfsidmap -c    # Limpiar caché
 
# Logs
journalctl -u nfs-server
journalctl -u gssproxy
rpcdebug -m nfs -s all    # Activar debug NFS

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • sec=sys vs sec=krb5 vs sec=krb5i vs sec=krb5psys usa UID/GID del sistema (susceptible a suplantacion, inseguro). krb5 solo autentica. krb5i autentica + verifica integridad. krb5p autentica + cifra datos. Las preguntas piden identificar el nivel de seguridad correcto y su overhead.
  • Domain en idmapd.conf DEBE coincidir en servidor y clientes — Si el parametro Domain no es identico en todos los nodos NFSv4, todos los archivos aparecen como nobody:nobody. Es el error mas comun y mas preguntado en NFSv4. nfsidmap -c limpia la cache de mapeo.
  • gssproxy (moderno) vs rpc.gssd (legacy)gssproxy es la alternativa moderna que gestiona credenciales GSS-API tanto en servidor como cliente. rpc.gssd es legacy para clientes. rpc.svcgssd es obsoleto (reemplazado por gssproxy en el servidor). Las preguntas piden identificar el servicio correcto.
  • Keytab NFS: principal nfs/hostname@REALM — El servidor NFS necesita un keytab con el principal nfs/servidor.dominio@REALM. Sin este keytab, la autenticacion Kerberos falla. ipa-getkeytab obtiene el keytab desde FreeIPA. klist -kt verifica el contenido.
  • root_squash es el valor por defecto en /etc/exportsroot_squash mapea el acceso de root remoto a nobody (seguridad). no_root_squash permite acceso como root (inseguro, solo para casos especificos). all_squash mapea TODOS los usuarios a nobody. Confundir los tres es error frecuente.
  • Automount en LDAP via FreeIPA — FreeIPA almacena mapas de automount en LDAP (ipa automountkey-add). Los clientes consultan via SSSD (automount: sss en nsswitch.conf). Esto centraliza la configuracion y elimina la necesidad de mantener archivos auto.* en cada cliente.
  • exportfs -arv para aplicar cambios en /etc/exports — Despues de modificar /etc/exports, ejecutar exportfs -arv para reexportar. showmount -e servidor muestra las exportaciones activas desde el punto de vista del cliente. Las preguntas presentan cambios en exports que no se aplican.
  • Multiples niveles de seguridad separados por : — En /etc/exports, sec=krb5:krb5i:krb5p permite que el cliente elija cualquiera de los tres. El cliente debe usar uno de los mecanismos permitidos. Si el cliente solicita un nivel no listado, el acceso se deniega.
  • NFSv4 usa nombres usuario@dominio, no UIDs — A diferencia de NFSv3, NFSv4 transmite nombres de usuario con formato usuario@dominio y idmapd los traduce a UIDs locales. Si el mapeo falla, el archivo aparece como nobody. nfsidmap -l lista los mapeos activos.