passwd es un comando que se utiliza en Unix , Plan 9 , Inferno y la mayoría de los sistemas operativos similares a Unix 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 en hash de la nueva contraseña, que se guarda. Solo se almacena la versión en 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 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 una 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 ser autenticado.
El comando passwd se puede utilizar para cambiar contraseñas de cuentas locales y, en la mayoría de los sistemas, también se puede utilizar para cambiar contraseñas administradas en un mecanismo de autenticación distribuido como NIS , Kerberos o LDAP .
El /etc/passwd
archivo es una base de datos basada en 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 sólo uno de los muchos back-ends posibles 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ñas sensibles a la seguridad suele almacenarse en un archivo diferente mediante contraseñas ocultas u otras implementaciones de bases de datos.
El /etc/passwd
archivo normalmente tiene permisos de sistema de archivos que permiten que sea legible por todos los usuarios del sistema ( legible por todo el mundo ), aunque solo puede ser modificado por el superusuario o mediante el uso de algunos comandos privilegiados de propósito especial.
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 ejemplo de registro podría ser:
jsmith : x : 1001 : 1000 : Joe Smith, Sala 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 el 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ñas ocultas, con la convención adicional de que si se configura en "x", significa que la contraseña real se encuentra en el archivo de contraseñas ocultas, algo que ocurre con frecuencia en los sistemas modernos. [2]1001
: número de identificación del 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 al 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 del usuario y sus datos de contacto. [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, 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 al restringir el acceso a los datos de contraseñas cifradas a todos los usuarios, excepto a los altamente privilegiados. Normalmente, esos datos se guardan en archivos propiedad del superusuario y a los que solo puede acceder este .
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 passwd
base de datos en sí misma sea legible solo 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 rompería muchas utilidades y disposiciones existentes. Una solución es un archivo de contraseñas "shadow" para mantener los hashes de contraseña separados de los otros datos en el archivo passwd legible por todo el mundo . Para los archivos locales, esto suele ocurrir /etc/shadow
en sistemas Linux/etc/master.passwd
y Unix, o en sistemas BSD ; cada uno es legible solo por root . (El acceso root a los datos se considera aceptable ya que en sistemas con el modelo de seguridad tradicional de "raíz todopoderosa", el usuario root podría obtener la información de otras formas en cualquier caso). Prácticamente todos los sistemas operativos recientes similares a Unix utilizan contraseñas cifradas.
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 funcionan transmitiendo la contraseña cifrada a través de la red (a veces en texto sin formato , 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 contraseñas cifradas de forma ilícita. 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 shadowing de contraseñas está en efecto en un sistema determinado, el archivo passwd es legible por todos los usuarios 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), mientras que solo el usuario root puede escribir en él. Sin el shadowing 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 usar para montar un ataque de fuerza bruta fuera de línea, probando posibles contraseñas contra las contraseñas hash con relativa rapidez sin alertar a los mecanismos de seguridad del sistema diseñados para detectar una cantidad anormal de intentos de inicio de sesión fallidos . Especialmente cuando el hash no está salado, también es posible buscar estas contraseñas hash en tablas arco iris , bases de datos especialmente creadas para devolver una contraseña para un hash único.
Cuando se utiliza un esquema de contraseña con sombra, el /etc/passwd
archivo generalmente muestra un carácter como ' *
' o ' x
' en el campo de contraseña para cada usuario en lugar de la contraseña en hash, y /etc/shadow
generalmente contiene la siguiente información del usuario:
$id$salt$hashed
, la forma imprimible de un hash de contraseña producido por crypt (C) , donde $id
es el algoritmo utilizado. Otros sistemas similares a Unix pueden tener valores diferentes, como NetBSD. La ampliación de claves se utiliza para aumentar la dificultad de descifrado de contraseñas , utilizando por defecto 1000 rondas de MD5 modificado, [5] 64 rondas de Blowfish, 5000 rondas de SHA-256 o SHA-512. [6] 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 identificadores del algoritmo y el número de rondas. Los valores de identificador comunes incluyen: [7]$1$
– MD5$2$
, $2a$
, $2b$
– bcrypt$5$
– SHA-256$6$
– SHA-512$y$
– sí encriptaEl formato del archivo shadow es simple y básicamente idéntico al del archivo de contraseñas, es decir, una línea por usuario, campos ordenados en cada línea y campos separados por dos puntos. Muchos sistemas [ quantify ] 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.
Antes del shadowing de contraseñas, la contraseña en 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 descrito anteriormente).
El shadowing de contraseñas apareció por primera vez en los sistemas Unix con el desarrollo de SunOS a mediados de los años 1980, [10] System V Release 3.2 en 1988 y BSD 4.3 Reno en 1990. Pero los proveedores que habían realizado puertos desde versiones anteriores de UNIX no siempre incluyeron las nuevas características de shadowing 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 organizar el almacenamiento de contraseñas en bases de datos distribuidas como NIS y LDAP , en lugar de en archivos de 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 gestionan los mecanismos de seguridad del repositorio de datos subyacente.
En 1987, la autora de la Shadow Password Suite original , Julie Haugh, sufrió un robo informático y escribió la versión inicial de la Shadow Suite que contenía los comandos login
, passwd
y su
. La versión original, escrita para el sistema operativo SCO Xenix , se adaptó rápidamente a otras plataformas. La 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 sigue incluyéndose en muchas de las distribuciones Linux actuales .
En el pasado, era necesario tener diferentes comandos para cambiar las 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 al tanto de los diferentes métodos para cambiar las contraseñas para diferentes sistemas, y también resultó en una duplicación inútil de código en los diversos programas que realizaban las mismas funciones con diferentes back-ends . En la mayoría de las implementaciones, ahora hay un solo 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 está determinado por 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 hashes más fuertes como blowfish , SHA256 y SHA512 .