Qué es el archivo /etc/passwd y cómo funciona en Linux

Última actualización: octubre 10, 2025
  • El fichero /etc/passwd define cuentas locales con 7 campos y permisos 644.
  • Las contraseñas y su política residen en /etc/shadow con acceso restringido.
  • El binario passwd usa SETUID para actualizar /etc/shadow de forma segura.
  • /etc/group y /etc/gshadow gestionan pertenencias y administradores de grupo.

Archivo /etc/passwd en Linux

El fichero /etc/passwd es el corazón del inventario de cuentas locales en sistemas tipo Unix y GNU/Linux. Es un archivo de texto plano que el sistema consulta constantemente para traducir identificadores numéricos en nombres y para saber qué directorio personal y qué shell usar en cada sesión. Aunque su nombre histórico apunta a contraseñas, hoy en día esas credenciales viven en otro lugar más seguro.

Comprender qué guarda /etc/passwd, cómo se relaciona con /etc/shadow y /etc/group, qué permisos deben tener y qué comandos los manipulan, es clave tanto para la administración diaria como para la seguridad. Vamos a desgranarlo paso a paso con ejemplos, advertencias y buenas prácticas que suelen preguntarse en exámenes y entrevistas.

Qué es /etc/passwd y por qué sigue siendo imprescindible

Información de usuarios en /etc/passwd

/etc/passwd almacena información esencial de cada cuenta local: nombre de usuario, identificadores, comentario, directorio personal y shell. Es un fichero ASCII de texto plano, con una línea por usuario y siete campos separados por dos puntos. A pesar de su nombre, no contiene contraseñas cifradas en sistemas modernos; en su lugar verás una letra x que remite a /etc/shadow.

La lectura global de /etc/passwd es necesaria porque multitud de utilidades del sistema y de usuario lo consultan para resolver IDs, mostrar nombres legibles o inicializar entornos. Por eso, de forma predeterminada, sus permisos suelen ser -rw-r–r– (modo 644), propiedad de root, lo que implica escritura exclusiva del administrador y lectura para el resto.

Históricamente, /etc/passwd sí incluía hashes de contraseñas. En aquella época el hardware hacía muy difícil descifrarlas, pero ese diseño es inseguro hoy. De ahí que las contraseñas pasaran a /etc/shadow, un archivo con acceso restringido que solo root o el grupo shadow puede leer.

Un vistazo rápido a una línea típica del fichero ayuda a entender la estructura. Por ejemplo: root:x:0:0:root:/root:/bin/bash. Ahí se aprecia el nombre de cuenta, la x que remite a shadow, los identificadores 0 para usuario y grupo, el comentario, la ruta del home y la shell por defecto.

Formato y campos de /etc/passwd

Formato de los campos en /etc/passwd

Cada línea de /etc/passwd contiene siete campos separados por : y describe una cuenta. El orden es fijo y los valores tienen significado operativo directo en el login y en múltiples servicios.

Campos y significado habituales que verás en todos los sistemas:

  • Nombre de usuario: identificador de login; suele tener entre 1 y 32 caracteres.
  • Contraseña: verás una x cuando la contraseña cifrada está en /etc/shadow; nunca coloques aquí un hash en sistemas con contraseñas ocultas.
  • UID: identificador numérico de usuario. El 0 corresponde a root; 1–99 suelen ser cuentas del sistema; 100–999 para servicios o cuentas administrativas. En algunas distribuciones antiguas se consideraba 500 como frontera para cuentas humanas.
  • GID: identificador del grupo primario, que se define en /etc/group.
  • GECOS o comentario: campo libre para nombre completo, contacto u otros detalles; lo consulta, por ejemplo, el comando finger.
  • Directorio personal: ruta absoluta del home; si no existe, el sistema suele situar al usuario en /.
  • Shell: ruta al intérprete por defecto, como /bin/bash. No tiene por qué ser una shell interactiva; por ejemplo, /sbin/nologin impide iniciar sesión.

Ejemplos útiles que suelen aparecer en prácticas y que conviene saber interpretar:

  • root:x:0:0:root:/root:/bin/bash — Cuenta de administración con UID y GID 0; shell interactiva.
  • henry:x:1000:1000:User Henry:/home/henry:/bin/bash — Usuario normal con home propio y bash.

Operaciones básicas que realizan muchas tareas de administración: para listar usuarios locales se usa cat /etc/passwd, y para buscar una cuenta concreta, grep nombre /etc/passwd. Aunque es tentador, no edites manualmente salvo emergencia y con copias de seguridad; usa herramientas como useradd, usermod y userdel.

Reglas de seguridad de base que no conviene olvidar: solo la cuenta con UID 0 es root, sea cual sea su nombre. Por tanto, un atacante podría crear una cuenta distinta llamada pepito con UID 0. Revisar periódicamente las entradas con UID 0 y GID 0 ayuda a detectar rootkits y puertas traseras.

Permisos, propiedad y el modelo con contraseñas ocultas

Permisos y seguridad de /etc/passwd y /etc/shadow

Los permisos por defecto de /etc/passwd suelen ser 644 (-rw-r–r–) y propiedad root:root. Esto garantiza lectura global y modifica solo el administrador. /etc/group comparte normalmente esta política para que los programas puedan mapear GIDs a nombres.

/etc/shadow, en cambio, está endurecido: típicamente 640 (-rw-r—–) o incluso 600, propiedad de root y grupo shadow. Así, solo root y los procesos con privilegios adecuados pueden leer los hashes y la información de caducidad de contraseñas. /etc/gshadow sigue una estrategia similar para los secretos de grupos.

El comando passwd es el ejemplo clásico de bit SETUID. Si ejecutas ls -l /usr/bin/passwd verás algo como -rwsr-xr-x indicado por la letra s en el campo de ejecución del propietario. Ese bit permite que un usuario normal cambie su propia contraseña porque el binario se ejecuta con privilegios del dueño (root), actualizando de forma segura /etc/shadow.

Qué significa que un archivo está sombreado o shadowed en preguntas de examen: de la terna /etc/passwd, /etc/group, /etc/shadow y /etc/gshadow, los ficheros shadow y gshadow son los que guardan información sensible con acceso restringido; passwd y group son legibles por todos.

Bloqueos concurrentes al editar cuentas: verás archivos .lock como /etc/shadow.lock o /etc/group.lock. Las utilidades de la suite shadow (useradd, usermod, groupmod, etc.) crean esos bloqueos de forma estándar para evitar corrupciones cuando se alteran estos ficheros.

/etc/shadow: campos, caducidad y algoritmos de hash

/etc/shadow almacena el hash de la contraseña y la política de caducidad por usuario. Conserva el esquema de campos separados por dos puntos. A diferencia de /etc/passwd, aquí el primer campo es el nombre de usuario y el segundo es el hash.

Campos típicos en /etc/shadow y su papel en la seguridad y el ciclo de vida de contraseñas:

  • Usuario: debe coincidir con /etc/passwd.
  • Hash de la contraseña: formato idoneo $id$salt$hash. La x que aparece en /etc/passwd remite aquí.
  • Último cambio: número de días desde la época Unix (1-1-1970) en que se cambió la contraseña.
  • Días mínimos: tiempo mínimo que debe pasar para permitir un nuevo cambio de clave.
  • Días máximos: tiempo tras el cual debe cambiarse la clave; superado ese valor, la contraseña expira.
  • Aviso: días antes de la expiración para alertar al usuario.
  • Inactividad: días tras la expiración antes de deshabilitar la cuenta.
  • Expiración de cuenta: fecha absoluta en días desde la época de Unix a partir de la cual la cuenta deja de ser válida.
  • Reservado: campo para usos futuros.

Ejemplo realista de entrada de shadow que suele usarse para ejercicios: henry:$1$.AbCdEfGh123456789A1b2C3d4.:18015:20:90:5:30::. Aquí el prefijo $1 indica MD5, el cambio de contraseña ocurrió en el día 18015, hay 20 días mínimos entre cambios, 90 máximos, 5 de aviso y 30 de inactividad. El valor de expiración de cuenta está vacío.

Sobre algoritmos de hash: verás identificadores como $1 (MD5), $2a (Blowfish), $2y (Eksblowfish), $5 (SHA-256) y $6 (SHA-512). En sistemas actuales se recomienda SHA-512. En los tiempos de crypt clásico, se usaba un salt de dos caracteres y un resultado de 13 caracteres ASCII; ese esquema hoy se considera obsoleto y débil.

Comprobaciones rápidas de política: con passwd -S usuario puedes ver estatus y reglas. Si un campo de contraseña contiene ! o * se interpreta como bloqueada o sin contraseña válida, lo que impide el login. También verás 99999 como máximo de días en configuraciones que no fuerzan caducidad.

/etc/group y /etc/gshadow: pertenencia, administradores y contraseñas de grupo

/etc/group describe los grupos del sistema y la lista de miembros suplementarios. Su formato habitual por línea es nombre:contraseña:GID:miembros, siendo miembros una lista separada por comas. La contraseña de grupo no se usa en la práctica moderna.

/etc/gshadow añade control de administradores de grupo y secretos. Su sintaxis es nombre:contraseña:admins:miembros. El símbolo ! suele indicar contraseña bloqueada para el grupo. La presencia de usuarios en el campo admins les permite gestionar la membresía de ese grupo.

Ejemplo clásico para interpretar en pruebas: staff:!:dave:carol,emma. Dicho como línea de gshadow, significa que el grupo staff tiene contraseña bloqueada, dave es administrador del grupo, y carol y emma son miembros. Esta estructura no es la misma que /etc/group, donde ese tercer campo sería el GID, así que conviene distinguir bien ambos archivos.

Grupo principal vs suplementarios: el GID que ves en /etc/passwd es el grupo primario; el resto de pertenencias se gestionan en /etc/group y /etc/gshadow. El comando id usuario resume rápidamente UID, GID y grupos suplementarios.

Comandos y utilidades que tocan estos ficheros

Hay un conjunto de utilidades clave que, bajo el capó, leen y actualizan /etc/passwd, /etc/shadow, /etc/group y /etc/gshadow, aplicando bloqueos .lock para mantener la integridad.

  • passwd: cambia contraseñas; se ejecuta con SETUID para escribir en /etc/shadow.
  • useradd, userdel, usermod: alta, baja y modificación de cuentas.
  • chsh, chfn, chpasswd: cambian shell, información GECOS y contraseñas masivas.
  • su, sulogin, login: autenticación e inicio de sesión.
  • getent: consulta bases de datos del sistema como passwd y group respetando NSS.
  • pwck, pwunconv: comprobación de coherencia y conversión entre modelos con y sin shadow.

Permisos esperables con ls -l para preguntas frecuentes de seguridad: /etc/passwd y /etc/group muestran -rw-r–r– root root; /etc/shadow y /etc/gshadow, -rw-r—– root shadow (a veces 600). El archivo shadow es el verdaderamente sombreado, pues oculta los hashes a usuarios sin privilegios.

Bit especial en /usr/bin/passwd: -rwsr-xr-x con la s del propietario indica SETUID. Su propósito: permitir que usuarios normales cambien su propia contraseña de forma segura sin conceder permisos generales de escritura sobre /etc/shadow.

Preguntas tipo examen y cómo razonarlas con ejemplos

Qué shell está configurada para un usuario concreto: léela en el séptimo campo de /etc/passwd. En la línea henry:x:1000:1000:User Henry:/home/henry:/bin/bash, la shell es /bin/bash. Si un usuario figura con /sbin/nologin o /bin/false, no podrá abrir sesión interactiva.

Nombre del grupo principal de un usuario: mira el cuarto campo (GID) de /etc/passwd y resuélvelo en /etc/group para ver el nombre. Por ejemplo, un GID 1000 suele corresponder a un grupo del mismo nombre que el usuario en muchos sistemas.

Miembros y administradores de un grupo: en /etc/group verás los miembros suplementarios; en /etc/gshadow, además, los administradores en el tercer campo. Con un registro tipo staff:!:dave:carol,emma en gshadow, dave es admin y carol, emma son miembros.

Usuarios que no pueden iniciar sesión: los que tienen shell no interactiva (como /sbin/nologin) o una contraseña bloqueada en /etc/shadow (campo con ! o *). Además, cuentas de servicio suelen estar configuradas sin acceso interactivo.

Quién debe cambiar la contraseña en el próximo inicio: si el recuento de días ha superado el máximo o si la política marca caducidad, el login forzará cambio. Con passwd -S usuario puedes leer un resumen del estatus (por ejemplo, Password must be changed).

Días que deben pasar antes de permitir un cambio: lo indica el campo de días mínimos de /etc/shadow. En el ejemplo henry con 20, tendría que esperar 20 días entre cambios de contraseña.

¿Puede iniciar sesión un usuario recién creado?: depende de que tenga una shell válida y que su contraseña esté establecida. Si el alta se hace sin clave o con shell /sbin/nologin, no podrá acceder hasta que se configure con passwd y se asigne una shell interactiva.

Cómo identificar UID, GID y miembros de un grupo: el UID y GID de una cuenta están en /etc/passwd; los miembros de un grupo se listan en /etc/group y los administradores en /etc/gshadow. El comando id dave resume UID, GID y pertenencias de un vistazo.

Crear o eliminar grupos como sys_admin, web_admin o db_admin: se gestiona con groupadd y groupdel. Sus GIDs se consultan en /etc/group o con getent group nombre. Al eliminarlos, comprueba dependencias y pertenencias para no dejar referencias colgantes.

Eliminar usuarios como dave o carol: con userdel (opcionalmente -r para retirar su directorio home). Revisa cron, servicios y ficheros de propiedad de esa cuenta. Asegúrate de no borrar cuentas de servicio del sistema por error.

Buenas prácticas y errores comunes a evitar

No edites manualmente salvo emergencia. Usa siempre herramientas como useradd, usermod, gpasswd o passwd, que aplican validaciones, bloquean los ficheros, mantienen coherencia y actualizan todas las bases de datos relacionadas.

Vigila cuentas con UID 0 y GID 0. Solo debe existir root con UID 0. Cuentas con UID 0 y nombre distinto son una técnica clásica de persistencia maliciosa. Del mismo modo, no otorgues GID 0 fuera del grupo root.

No dejes el campo de contraseña vacío. En modelos sin shadow, un campo vacío permitiría acceso sin clave, lo cual es gravísimo. En modelos con shadow, usa bloqueos ! o * para deshabilitar accesos cuando proceda.

Elige contraseñas robustas. Evita palabras de diccionario, nombres, fechas y patrones predecibles. Combina mayúsculas, minúsculas, números y símbolos. Valida políticas de longitud y caducidad con PAM y configura hashing moderno como SHA-512 ($6).

No uses scripts como shell de cuentas sin control. Dar como shell un script que ejecute acciones privilegiadas abre puertas peligrosas; peor aún si la cuenta carece de clave o tiene login habilitado desde red. Usa sudo, políticas y servicios en lugar de atajos inseguros.

Cómo se reflejan los permisos en ls -l y qué significan

Salida típica que conviene poder describir en auditorías y preguntas: ls -l /etc/passwd /etc/group devuelve -rw-r–r– 1 root root …; ls -l /etc/shadow /etc/gshadow devuelve -rw-r—– 1 root shadow … o -rw——- 1 root root … según la política de la distribución.

Interpretación del bit SETUID en passwd: ls -l /usr/bin/passwd muestra -rwsr-xr-x. La s en la posición de ejecución del propietario indica que se ejecuta con los privilegios del dueño del archivo (root), permitiendo cambiar la propia contraseña sin exponer /etc/shadow a escritura global.

Notas sobre archivos de bloqueo .lock y consistencia

Ver archivos como /etc/{shadow,group,gshadow,subuid,subgid}.lock es normal mientras se modifican cuentas y grupos. Los crean utilidades como useradd y groupadd para evitar condiciones de carrera y corrupción de datos. Se usan ampliamente en distribuciones GNU/Linux a través de la suite shadow.

Si encuentras un .lock atascado, suele indicar una operación interrumpida. Antes de eliminarlo manualmente, valida que no hay procesos en curso sobre la base de cuentas para no provocar inconsistencias.

Integrar todo lo anterior te permitirá analizar una línea de /etc/passwd sin titubeos, deducir políticas de caducidad a partir de /etc/shadow, explicar por qué passwd lleva SETUID, interpretar quién administra un grupo leyendo /etc/gshadow y describir con propiedad los permisos correctos de cada archivo del conjunto.

Piensa en /etc/passwd como el índice visible de identidades locales, en /etc/shadow como la caja fuerte de credenciales y políticas, y en /etc/group y /etc/gshadow como el mapa de pertenencias y administraciones; con permisos bien puestos, utilidades adecuadas y vigilancia periódica, el sistema se mantiene coherente y a salvo de errores y accesos indebidos.

Artículo relacionado:
Directorio raíz: Definición y características