El Name Service Switch (NSS) es un componente fundamental en sistemas operativos basados en Unix, diseñado para centralizar la configuración de fuentes de datos para la resolución de nombres y servicios. Permite al sistema consultar múltiples orígenes, como archivos locales, DNS, NIS o LDAP, para obtener información sobre usuarios, grupos, hosts y otros recursos.
El archivo /etc/nsswitch.conf define el orden y las fuentes que el sistema debe seguir al buscar información específica. Este archivo es esencial para personalizar el comportamiento de la resolución de nombres y manejar situaciones donde múltiples proveedores de datos pueden estar disponibles.
Estructura del archivo nsswitch.conf
La configuración en nsswitch.conf sigue un formato donde cada línea especifica un tipo de información, seguido por una o más fuentes con accoines opcionales. La sintaxis general es:
tipo_información: fuente [acción] [fuente [acción] ...]
Por ejemplo:
passwd: archivos sss
grupos: archivos dns
hosts: archivos dns myhostname
En este caso, el sistema buscará primero en archivos locales para información de contraseñas, y luego en el servicio SSS. Para hosts, se priorizan archivos locales, seguido de DNS y el hostname local.
Tipos de información gestionados
NSS controla la búsqueda de diversos tipos de datos. Algunos ejemplos comunes incluyen:
- passwd: Información de cuentas de usuario, típicamente en
/etc/passwd. - shadow: Datos de contraseñas seguras, almacenados en
/etc/shadow. - group: Información de grupos, proveniente de
/etc/group. - hosts: Resolución de nombres de host a direcciones IP, usando
/etc/hostso DNS.
Otros tipos incluyen automount, bootparams, ethers, networks, protocols, rpc, services, y aliases, cada uno con fuentes de datos específicas.
Fuentes de datos y métodos
Las fuentes o métodos disponibles en nsswitch.conf determinan dónde buscar la información. Las fuentes comunes son:
- archivos: Consulta archivos locales como
/etc/passwdo/etc/hosts. - nis: Usa el servicio Network Information System (NIS), también conocido como yp.
- dns: Realiza consultas al Sistema de Nombres de Dominio, aplicable principalmente para hosts.
- compat: Permite compatibilidad con sintaxis especial en archivos locales, como el uso de '+' y '-' para integrar datos de NIS.
El sistema evalúa las fuentes en el orden de izquierda a derecha, deteniéndose cuando una fuente proporciona una respuesta válida.
Orden de búsqueda y acciones
El orden de las fuentes es crucial cuando hay superposición de datos. Por ejemplo, si tanto archivos como NIS contienen información sobre un usuario, la fuente listada primero tiene prioridad. Esto se puede manipular con acciones condicionales.
Las acciones se definen entre corchetes y responden al estado devuelto por una fuente. Los estados comunes son:
- ÉXITO: La fuente encontró la información; acción predeterminada: retorno (return).
- NO_ENCONTRADO: La fuente no encontró la información; acción predeterminada: continuar (continue).
- NO_DISPONIBLE: La fuente no está disponible de forma permanente; acción predeterminada: continuar.
- INTENTAR_DE_NUEVO: La fuente no está disponible temporalemnte; acción predeterminada: continuar.
Por ejemplo, la configuración:
hosts dns [!NO_DISPONIBLE=return] archivos
hace que si DNS no está NO_DISPONIBLE (es decir, está disponible o tiene otros estados), el sistema retorne el resultado sin buscar en archivos. Solo si DNS no está disponible, se procede a archivos locales.
El método compat y la integración con NIS
El método compat permite mezclar datos de archivos locales con NIS usando símbolos especiales. En archivos como /etc/passwd, una línea que comience con '+' indica que se deben agregar entradas de NIS, mientras que '-' indica exclusión. Esto es útil para migraciones o configuraciones híbridas.
Sin embargo, es más eficiente usar explícitamente múltiples fuentes en nsswitch.conf, como:
passwd: archivos nis
en lugar de modificar los archivos locales con símbolos '+'.
El comando getent para consultas de base de datos
El comando getent permite consultar bases de datos gestionadas por NSS, incluso si están en fuentes remotas como LDAP o NIS. Soporta bases de datos como passwd, group, hosts, y más.
Ejemplos de uso:
getent passwd usuario1 # Obtiene información del usuario usuario1 de la base de datos passwd
getent hosts ejemplo.com # Resuelve el nombre de host ejemplo.com a una dirección IP
Este comando es útil para depurar y verificar la configuración de NSS en el sistema.