`passwd` es un comando presente en Unix , Plan 9 , Inferno y la mayoría de los sistemas operativos tipo Unix , que se utiliza para cambiar la contraseña de un usuario . La contraseña ingresada se procesa mediante una función de derivación de clave para generar una versión cifrada de la nueva contraseña, la cual se guarda. Solo se almacena la versión cifrada; la contraseña original no se guarda por motivos de seguridad.
Cuando el usuario inicia sesión, la contraseña introducida durante el proceso se procesa mediante la misma función de derivación de clave y la versión hash resultante se compara con la versión guardada. Si los hashes coinciden, la contraseña introducida se considera correcta y el usuario se autentica. En teoría, es posible que dos contraseñas diferentes produzcan el mismo hash . Sin embargo, las funciones hash criptográficas están diseñadas de tal manera que encontrar cualquier contraseña que produzca el mismo hash es muy difícil y prácticamente inviable; por lo tanto, si el hash producido coincide con el almacenado, el usuario puede autenticarse. [ 1 ]
El comando passwd se puede utilizar para cambiar las contraseñas de las cuentas locales y, en la mayoría de los sistemas, también se puede utilizar para cambiar las contraseñas gestionadas en un mecanismo de autenticación distribuido como NIS , Kerberos o LDAP .
Archivo de contraseña
El /etc/passwdarchivo es una base de datos en formato de texto que contiene información sobre los usuarios que pueden iniciar sesión en el sistema u otras identidades de usuario del sistema operativo que poseen procesos en ejecución.
En muchos sistemas operativos, este archivo es solo uno de los muchos posibles backends para el servicio de nombres passwd más general .
El nombre del archivo proviene de una de sus funciones iniciales, ya que contenía los datos utilizados para verificar las contraseñas de las cuentas de usuario. Sin embargo, en los sistemas Unix modernos , la información confidencial de las contraseñas suele almacenarse en un archivo diferente mediante contraseñas ocultas u otras implementaciones de bases de datos.
El /etc/passwdarchivo normalmente tiene permisos del sistema de archivos que permiten que todos los usuarios del sistema puedan leerlo ( lectura mundial ), aunque solo puede ser modificado por el superusuario o mediante el uso de algunos comandos privilegiados de propósito especial.
El /etc/passwdarchivo es un archivo de texto con un registro por línea , cada uno de los cuales describe una cuenta de usuario . Cada registro consta de siete campos separados por dos puntos . El orden de los registros dentro del archivo generalmente no es importante.
Un ejemplo de registro podría ser:
jdoe : x : 1001 : 1000 : John Doe,Habitación 1007,(234)555-8910,(234)555-0044,correo electrónico : /home/jdoe : /bin/shLos campos, en orden de izquierda a derecha, son: [ 2 ]
jdoe: Nombre de usuario: la cadena que un usuario escribiría al iniciar sesión en el sistema operativo; el nombre de registro . Debe ser único entre los usuarios que aparecen en el archivo.x: Información utilizada para validar la contraseña de un usuario . El formato es el mismo que el del campo análogo en el archivo de contraseñas de sombra , con la convención adicional de que establecerlo en "x" significa que la contraseña real se encuentra en el archivo de sombra, algo común en los sistemas modernos. [ 3 ]1001: número de identificación de usuario , utilizado por el sistema operativo para fines internos. Debe ser único, ya que identifica a los usuarios de forma unívoca.1000: número de identificador de grupo , que identifica el grupo principal del usuario; todos los archivos que cree este usuario pueden ser inicialmente accesibles para este grupo.John Doe,Room 1007...: Campo Gecos , comentario que describe a la persona o cuenta. Normalmente, se trata de un conjunto de valores separados por comas que incluyen el nombre completo del usuario y sus datos de contacto. [ 4 ]/home/jdoe: Ruta al directorio principal del usuario ./bin/sh: Programa que se inicia cada vez que el usuario inicia sesión en el sistema. Para un usuario interactivo, suele ser uno de los intérpretes de línea de comandos del sistema ( shells ).
Archivo de sombra
/etc/shadowSe utiliza para aumentar el nivel de seguridad de las contraseñas restringiendo el acceso a los datos de contraseñas cifradas a todos los usuarios excepto a aquellos con privilegios muy elevados. Normalmente, esos datos se guardan en archivos propiedad del superusuario y accesibles únicamente por él . [ 5 ]
Los administradores de sistemas pueden reducir la probabilidad de ataques de fuerza bruta haciendo que la lista de contraseñas cifradas sea ilegible para usuarios sin privilegios. La forma obvia de hacerlo es hacer que la passwdbase de datos solo sea legible por el usuario root. Sin embargo, esto restringiría el acceso a otros datos en el archivo, como las asignaciones de nombre de usuario a ID de usuario, lo que inutilizaría muchas utilidades y provisiones existentes. Una solución es un archivo de contraseñas "oculto" para almacenar los hashes de las contraseñas por separado del resto de los datos en el archivo passwd legible para todos . Para archivos locales, esto suele ser /etc/shadowen sistemas Linux y Unix, o /etc/master.passwden sistemas BSD ; cada uno es legible solo por root . (El acceso de root a los datos se considera aceptable ya que en sistemas con el modelo de seguridad tradicional de "root todopoderoso", el usuario root podría obtener la información de otras maneras en cualquier caso). Prácticamente todos los sistemas operativos tipo Unix recientes utilizan contraseñas ocultas.
El archivo de contraseñas ocultas no resuelve por completo el problema del acceso de los atacantes a las contraseñas cifradas, ya que algunos esquemas de autenticación de red operan transmitiendo la contraseña cifrada a través de la red (a veces en texto plano , por ejemplo, Telnet [ 6 ] ), lo que la hace vulnerable a la interceptación. Las copias de datos del sistema, como las copias de seguridad grabadas en cinta o medios ópticos, también pueden convertirse en un medio para obtener ilícitamente contraseñas cifradas. Además, las funciones utilizadas por los programas legítimos de verificación de contraseñas deben estar escritas de tal manera que los programas maliciosos no puedan realizar comprobaciones de autenticación rápidas.
Independientemente de si el enmascaramiento de contraseñas está activado en un sistema determinado, el archivo passwd es legible para todos los usuarios, lo que permite que diversas utilidades del sistema (por ejemplo, grep ) funcionen (por ejemplo, para garantizar que los nombres de usuario existentes en el sistema se encuentren en el archivo), mientras que solo el usuario root puede escribir en él. Sin enmascaramiento de contraseñas, esto significa que un atacante con acceso no privilegiado al sistema puede obtener la forma hash de la contraseña de cada usuario. Estos valores pueden utilizarse para realizar un ataque de fuerza bruta sin conexión, probando posibles contraseñas con las contraseñas hash con relativa rapidez sin alertar a los sistemas de seguridad diseñados para detectar un número anormal de intentos de inicio de sesión fallidos . Especialmente cuando el hash no tiene sal, también es posible buscar estas contraseñas hash en tablas arcoíris , bases de datos creadas específicamente para devolver una contraseña a partir de un hash único.
Cuando se utiliza un esquema de contraseña enmascarada, el /etc/passwdarchivo normalmente muestra un carácter como ' *' o ' x' en el campo de contraseña para cada usuario en lugar de la contraseña cifrada, y /etc/shadowgeneralmente contiene la siguiente información del usuario:
- nombre de usuario
- Sal y contraseña cifrada O un valor de excepción de estado, por ejemplo:
$id$salt$hashed, la forma imprimible de un hash de contraseña como producido por crypt (C) , donde$ides el algoritmo utilizado. Otros sistemas tipo Unix pueden tener valores diferentes, como NetBSD . El estiramiento de clave se utiliza para aumentar la dificultad de descifrado de contraseñas , utilizando por defecto 1000 rondas de MD5 modificado, [ 7 ] 64 rondas de Blowfish, 5000 rondas de SHA-256 o SHA-512. [ 8 ] El número de rondas puede variar para Blowfish , o para SHA-256 y SHA-512 utilizando$A$rounds=X$, donde "A" y "X" son los ID del algoritmo y el número de rondas. Los valores de ID comunes incluyen: [ 9 ]- Cadena vacía : Sin contraseña, la cuenta no tiene contraseña (informado por passwd en Solaris con "NP"). [ 10 ]
- "!", "*" – la cuenta está bloqueada con contraseña, el usuario no podrá iniciar sesión mediante autenticación por contraseña, pero otros métodos (por ejemplo, clave ssh, inicio de sesión como root) aún pueden estar permitidos.
- "*LK*" – la cuenta está bloqueada, el usuario no podrá iniciar sesión.
- "*NP*", "!!" – la contraseña nunca se ha establecido [ 11 ]
- Días transcurridos desde el último cambio de contraseña
- Días hasta que se permita el cambio
- Días antes de que se requiera el cambio
- Días de aviso para la expiración
- Días después de que no se haya iniciado sesión, la cuenta se bloqueará.
- Días transcurridos desde la época en que caduca la cuenta
- Reservado y sin usar
El formato del archivo shadow es sencillo y prácticamente idéntico al del archivo de contraseñas: una línea por usuario, campos ordenados en cada línea y campos separados por dos puntos. Muchos sistemas requieren que el orden de las líneas de usuario en el archivo shadow sea idéntico al orden de los usuarios correspondientes en el archivo de contraseñas.
Historia
Antes de la implementación del cifrado de contraseñas, la contraseña cifrada de un usuario de Unix se almacenaba en el segundo campo de su registro en el /etc/passwdarchivo (dentro del formato de siete campos descrito anteriormente).
El enmascaramiento de contraseñas apareció por primera vez en sistemas Unix con el desarrollo de SunOS a mediados de la década de 1980, [ 12 ] System V Release 3.2 en 1988 y BSD 4.3 Reno en 1990. Pero los proveedores que habían realizado portos de versiones anteriores de UNIX no siempre incluyeron las nuevas características de enmascaramiento de contraseñas en sus versiones, dejando a los usuarios de esos sistemas expuestos a ataques de archivos de contraseñas.
Los administradores de sistemas también pueden configurar el almacenamiento de contraseñas en bases de datos distribuidas como NIS y LDAP , en lugar de en archivos en cada sistema conectado. En el caso de NIS, el mecanismo de contraseña encubierta se sigue utilizando con frecuencia en los servidores NIS; en otros mecanismos distribuidos, el problema del acceso a los distintos componentes de autenticación de usuarios se gestiona mediante los mecanismos de seguridad del repositorio de datos subyacente.
En 1987, Julie Haugh, autora del Shadow Password Suite original , sufrió un ataque informático y escribió la versión inicial del Shadow Suite, que incluía los logincomandos passwdy su. Esta versión original, escrita para el sistema operativo SCO Xenix , se adaptó rápidamente a otras plataformas. El Shadow Suite se adaptó a Linux en 1992, un año después del anuncio original del proyecto Linux, y se incluyó en muchas de las primeras distribuciones, y continúa incluyéndose en muchas distribuciones Linux actuales.
En el pasado, era necesario tener diferentes comandos para cambiar contraseñas en distintos esquemas de autenticación. Por ejemplo, el comando para cambiar una contraseña de NIS era `yppasswd` . Esto obligaba a los usuarios a conocer los diferentes métodos para cambiar contraseñas en distintos sistemas, y también resultaba en una duplicación innecesaria de código en los diversos programas que realizaban las mismas funciones con diferentes backends . En la mayoría de las implementaciones, ahora existe un único comando `passwd`, y el control de dónde se cambia la contraseña se gestiona de forma transparente para el usuario mediante módulos de autenticación conectables (PAM). Por ejemplo, el tipo de hash utilizado viene determinado por la configuración del pam_unix.somódulo. Por defecto, se ha utilizado el hash MD5 , mientras que los módulos actuales también son capaces de utilizar hashes más robustos como `blowfish` , `SHA256` y `SHA512` .
Véase también
- chsh
- Crypt (C) (la función de biblioteca) y Crypt (Unix) (la utilidad)
- obtener
- Administrador de cuentas de seguridad (el equivalente en Microsoft Windows al archivo de contraseñas)
- Seguridad de Unix
- VIPW
Referencias
- ↑ "passwd(1) — Página del manual de Linux" . Consultado el 26 de febrero de 2025 .
- ↑ Comprensión
/etc/passwddel formato de archivo - ↑ "passwd(5) - Página del manual de Linux" . Man7.org . Consultado el 25 de agosto de 2014 .
- ↑ Adams, David. "Cómo ver y comprender el archivo /etc/passwd en Linux" .
- ↑ "shadow(5) — Página del manual de Linux" . Consultado el 26 de febrero de 2025 .
- ↑ RFC 2877: 5250 Mejoras de Telnet
- ↑ "Hash de contraseñas con MD5-crypt en relación con MD5 – Blog de Vidar" . 9 de agosto de 2011.
- ↑ "Implementación de SHA512-crypt frente a MD5-crypt – Blog de Vidar" . 16 de agosto de 2011.
- ↑ "Formato de criptografía modular" . Archivado del original el 7 de enero de 2022. Consultado el 29 de enero de 2022 .
- ↑ "solaris - passwd (1)" . cs.bgu.ac.il . Archivado del original el 17-12-2013.
- ↑ "6.3. Información específica de Red Hat Enterprise Linux" . Access.redhat.com . Consultado el 25 de agosto de 2014 .
- ↑ "passwd.adjunct(5)" . Páginas del manual de FreeBSD . 14 de diciembre de 1987. Archivado del original el 7 de octubre de 2025. Consultado el 7 de octubre de 2025 .
Enlaces externos
- Página del manual de Unix First Edition que describe /etc/passwd
- Actualizar los tokens de autenticación de un usuario – Manual de comandos generales de FreeBSD
- – Manual del programador de Plan 9 , Volumen 1
- – Manual de comandos generales de Inferno
- authconfig , una herramienta de línea de comandos para controlar el uso de contraseñas ocultas.
- Archivos de configuración
- autenticación de contraseña
- Bases de datos de seguridad
- Software relacionado con la autenticación de Unix
- Utilidades relacionadas con la gestión y el soporte de usuarios de Unix
- Órdenes del Plan 9
- Comandos de Inferno (sistema operativo)