passwd es un comando en Unix , Plan 9 , Inferno y la mayoría de los sistemas operativos similares a Unix que se utilizan para cambiar la contraseña de un usuario . La contraseña ingresada por el usuario se ejecuta a través de una función de derivación de clave para crear una versión hash de la nueva contraseña, que se guarda. Sólo se almacena la versión hash; la contraseña ingresada no se guarda por razones de seguridad.
Cuando el usuario inicia sesión, la contraseña ingresada por el usuario durante el proceso de inicio de sesión se ejecuta a través de 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 son idénticos, la contraseña ingresada se considera correcta y el usuario queda autenticado. 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 que si el hash producido coincide con el almacenado, el usuario puede autenticarse.
El comando passwd se puede usar para cambiar contraseñas de cuentas locales y, en la mayoría de los sistemas, también se puede usar para cambiar contraseñas administradas en un mecanismo de autenticación distribuida como NIS , Kerberos o LDAP .
El /etc/passwd
archivo es una base de datos basada en texto con 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 sólo uno de los muchos posibles servidores 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 de contraseña sensible a la seguridad a menudo se almacena en un archivo diferente utilizando contraseñas ocultas u otras implementaciones de bases de datos.
El /etc/passwd
archivo normalmente tiene permisos del sistema de archivos que permiten que todos los usuarios del sistema lo puedan leer ( legible mundialmente ), aunque solo puede ser modificado por el superusuario o mediante el uso de algunos comandos privilegiados con fines especiales.
El /etc/passwd
archivo 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 registro de ejemplo puede ser:
jsmith : x : 1001 : 1000 : Joe Smith, habitación 1007, (234) 555-8910, (234) 555-0044, correo electrónico : /home/jsmith : /bin/sh
Los campos, en orden de izquierda a derecha, son: [1]
jsmith
: 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 enumerados 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ña oculta, con la convención adicional de que establecerlo en "x" significa que la contraseña real se encuentra en el archivo de contraseña oculta, algo común en los sistemas modernos. [2]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 única.1000
: número de identificador de grupo , que identifica el grupo principal del usuario; Todos los archivos creados por este usuario pueden ser accesibles inicialmente para este grupo.Joe Smith,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 y los datos de contacto del usuario. [3]/home/jsmith
: Ruta al directorio de inicio del usuario ./bin/sh
: Programa que se inicia cada vez que el usuario inicia sesión en el sistema. Para un usuario interactivo, este suele ser uno de los intérpretes de línea de comandos del sistema ( shells )./etc/shadow
se utiliza para aumentar el nivel de seguridad de las contraseñas restringiendo el acceso de todos los usuarios, excepto los más privilegiados, a los datos de contraseñas cifrados. Normalmente, esos datos se guardan en archivos propiedad del superusuario y a los que sólo puede acceder el superusuario .
Los administradores de sistemas pueden reducir la probabilidad de ataques de fuerza bruta haciendo que la lista de contraseñas hash sea ilegible para usuarios sin privilegios. La forma obvia de hacer esto es hacer que la passwd
base de datos sea legible solo por el usuario root. Sin embargo, esto restringiría el acceso a otros datos del archivo, como las asignaciones de nombre de usuario a ID de usuario, lo que interrumpiría muchas utilidades y disposiciones existentes. Una solución es un archivo de contraseña "sombra" para mantener los hashes de contraseña separados de los demás datos en el archivo passwd legible en todo el mundo . Para archivos locales, esto suele ser /etc/shadow
en sistemas Linux y Unix, o /etc/master.passwd
en sistemas BSD ; cada uno es legible sólo por root . (El acceso root a los datos se considera aceptable ya que en sistemas con el modelo de seguridad tradicional "root todopoderoso", el usuario root podría obtener la información de otras maneras en cualquier caso). Prácticamente todos los sistemas operativos recientes tipo Unix utilizan contraseñas ocultas.
El archivo de contraseña oculta no resuelve por completo el problema del acceso de un atacante a contraseñas hash, ya que algunos esquemas de autenticación de red operan transmitiendo la contraseña hash a través de la red (a veces en texto sin cifrar , por ejemplo, Telnet [4] ), lo que la hace vulnerable a la interceptación. Las copias de datos del sistema, como las copias de seguridad del sistema escritas en cinta o en 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 escribirse de tal manera que los programas maliciosos no puedan realizar comprobaciones rápidas de autenticación.
Independientemente de si el sombreado de contraseña está vigente en un sistema determinado, todos los usuarios pueden leer el archivo passwd para que varias utilidades del sistema (por ejemplo, grep ) puedan funcionar (por ejemplo, para garantizar que los nombres de usuario existentes en el sistema se puedan encontrar dentro del archivo). archivo), mientras que sólo el usuario root puede escribir en él. Sin ocultamiento de contraseñas, esto significa que un atacante con acceso sin privilegios al sistema puede obtener la forma hash de la contraseña de cada usuario. Esos valores se pueden utilizar para montar un ataque de fuerza bruta fuera de línea, probando posibles contraseñas con las contraseñas hash con relativa rapidez sin alertar a las disposiciones de seguridad del sistema diseñadas para detectar una cantidad anormal de intentos fallidos de inicio de sesión . Especialmente cuando el hash no tiene sal, también es posible buscar estas contraseñas con hash en tablas Rainbow , bases de datos creadas especialmente para devolver una contraseña para un hash único.
Cuando se utiliza un esquema de contraseña oculta, el /etc/passwd
archivo normalmente muestra un carácter como " *
" o " x
" en el campo de contraseña para cada usuario en lugar de la contraseña hash y /etc/shadow
normalmente contiene la siguiente información de usuario:
$id$salt$hashed
, la forma imprimible de un hash de contraseña producido por crypt (C) , donde $id
se utiliza el algoritmo. Otros sistemas tipo Unix pueden tener valores diferentes, como NetBSD. La extensión de claves se utiliza para aumentar la dificultad de descifrar contraseñas , utilizando de forma predeterminada 1000 rondas de MD5 modificado, [5] 64 rondas de Blowfish, 5000 rondas de SHA-256 o SHA-512. [6] El número de rondas se puede variar para Blowfish o para SHA-256 y SHA-512 usando $A$rounds=X$
, donde "A" y "X" son los ID del algoritmo y el número de rondas. Los valores de identificación comunes incluyen: [7]El formato del archivo sombra es simple y básicamente idéntico al del archivo de contraseña, es decir, una línea por usuario, campos ordenados en cada línea y campos separados por dos puntos. Muchos sistemas [ cuantificar ] requieren que el orden de las líneas de usuario en el archivo oculto sea idéntico al orden de los usuarios correspondientes en el archivo de contraseñas.
Antes del sombreado de contraseñas, la contraseña hash de un usuario de Unix se almacenaba en el segundo campo de su registro en el /etc/passwd
archivo (dentro del formato de siete campos como se describe anteriormente).
El sombreado de contraseñas apareció por primera vez en los sistemas Unix con el desarrollo de SunOS a mediados de la década de 1980, [10] System V Release 3.2 en 1988 y BSD 4.3 Reno en 1990. Pero los proveedores que habían realizado ports de versiones anteriores de UNIX no siempre incluían el nuevas funciones de ocultación de contraseñas en sus versiones, lo que deja a los usuarios de esos sistemas expuestos a ataques de archivos de contraseñas.
Los administradores del sistema también pueden disponer 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 oculta todavía se utiliza a menudo en los servidores NIS; en otros mecanismos distribuidos, el problema del acceso a los diversos componentes de autenticación de usuarios lo manejan los mecanismos de seguridad del depósito de datos subyacente.
En 1987, la autora del Shadow Password Suite original , Julie Haugh, experimentó un robo en su computadora y escribió la versión inicial de Shadow Suite que contenía los login
comandos passwd
y su
. La versión original, escrita para el sistema operativo SCO Xenix , rápidamente fue trasladada a otras plataformas. Shadow Suite fue portado 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 estando incluido en muchas distribuciones actuales de Linux .
En el pasado, era necesario tener diferentes comandos para cambiar contraseñas en diferentes esquemas de autenticación. Por ejemplo, el comando para cambiar una contraseña NIS era yppasswd . Esto requería que los usuarios estuvieran conscientes de los diferentes métodos para cambiar contraseñas para diferentes sistemas, y también resultaba en una duplicación inútil 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 realmente la contraseña se maneja de forma transparente para el usuario a través de módulos de autenticación conectables (PAM). Por ejemplo, el tipo de hash utilizado lo dicta la configuración del pam_unix.so
módulo. De forma predeterminada, se ha utilizado el hash MD5 , mientras que los módulos actuales también son capaces de utilizar hashes más potentes como Blowfish , SHA256 y SHA512 .