passwd - passwd

passwd
Captura de pantalla de Passwd.png
Autor (es) original (es) Laboratorios AT&T Bell
Desarrollador (es) Varios desarrolladores comerciales y de código abierto
Sistema operativo Unix , similar a Unix , Plan 9 , Inferno
Plataforma Multiplataforma
Escribe Mando

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. Solo 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 está autenticado. En teoría, es posible que dos contraseñas diferentes produzcan el mismo hash . Sin embargo, las funciones de 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 ser autenticado.

El comando passwd se puede usar para cambiar las contraseñas de las cuentas locales y, en la mayoría de los sistemas, también se puede usar para cambiar las contraseñas administradas en un mecanismo de autenticación distribuido como NIS , Kerberos o LDAP .

Archivo de contraseña

El /etc/passwdarchivo 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 solo uno de los muchos back-end posibles para el servicio de nombres passwd más general .

El nombre del archivo se origina en una de sus funciones iniciales, ya que contenía los datos utilizados para verificar las contraseñas de las cuentas de los usuarios. Sin embargo, en los sistemas Unix modernos , la información de contraseña sensible a la seguridad se almacena a menudo en un archivo diferente utilizando contraseñas ocultas u otras implementaciones de bases de datos.

Por lo /etc/passwdgeneral, el archivo tiene permisos del sistema de archivos que permiten que todos los usuarios del sistema lo puedan leer (legible en todo el mundo ), aunque solo puede ser modificado por el superusuario o mediante el uso de algunos comandos con privilegios especiales.

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 puede ser:

jsmith:x:1001:1000:Joe Smith,Room 1007,(234)555-8910,(234)555-0044,email:/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.
  2. 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 establecerlo en "x" significa que la contraseña real se encuentra en el archivo oculto, una ocurrencia común en los sistemas modernos.
  3. 1001: número de identificación de usuario , utilizado por el sistema operativo para fines internos. No tiene por qué ser único.
  4. 1000: número de identificación de grupo , que identifica al grupo principal del usuario; todos los archivos creados por este usuario pueden ser inicialmente accesibles para este grupo.
  5. 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 los datos de contacto.
  6. /home/jsmith: Ruta al directorio de inicio del usuario .
  7. /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 ).

Archivo de sombra

/etc/shadowse utiliza para aumentar el nivel de seguridad de las contraseñas al restringir el acceso de todos los usuarios, excepto los que tienen muchos privilegios, a los datos de contraseñas con hash. Por lo general, esos datos se guardan en archivos que son propiedad del superusuario y solo son accesibles para él .

Los administradores de sistemas pueden reducir la probabilidad de ataques de fuerza bruta haciendo que los usuarios sin privilegios no puedan leer la lista de contraseñas con hash. La forma obvia de hacer esto es hacer que la passwdbase de datos en sí 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 "sombra" para mantener los hashes de contraseñas separan de los otros datos en la lectura de todos passwd archivo. En el caso de 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 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 formas en cualquier caso). Prácticamente todos los sistemas operativos recientes similares a Unix utilizan contraseñas ocultas.

El archivo de contraseñas ocultas no resuelve por completo el problema del acceso de los atacantes 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 ), haciéndola vulnerable a la interceptación. Las copias de los 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 hash de forma ilícita. 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 una gran cantidad de verificaciones de autenticación a altas velocidades.

Independientemente de si el ocultamiento de contraseñas está en efecto en un sistema dado, 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 file), mientras que solo el usuario root puede escribir en él. Sin el 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 usar para montar un ataque de fuerza bruta fuera de línea, probando las posibles contraseñas con las contraseñas hash relativamente rápido sin alertar a los arreglos de seguridad del sistema diseñados para detectar un número anormal de intentos fallidos de inicio de sesión . Especialmente cuando el hash no está salado, también es posible buscar estas contraseñas hash en tablas de arco iris , bases de datos especialmente creadas para devolver una contraseña para un hash único.

Con un esquema de contraseña oculto en uso, 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 hash, y /etc/shadowgeneralmente contiene la siguiente información de usuario:

  • Nombre de inicio de sesión de usuario
  • Salt y contraseña hash O un valor de excepción de estado, por ejemplo:
    • $id$salt$hashed, la forma imprimible de un hash de contraseña producido por crypt (C) , donde $ides el algoritmo utilizado. Otros sistemas similares a Unix pueden tener valores diferentes, como NetBSD . El estiramiento de claves se utiliza para aumentar la dificultad para descifrar contraseñas , utilizando por defecto 1000 rondas de MD5 modificado, 64 rondas de Blowfish, 5000 rondas de SHA-256 o SHA-512. 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.
      • $1$ - MD5
      • $2a$ - Pez globo
      • $2y$ - Eksblowfish
      • $5$ - SHA-256
      • $6$ - SHA-512
    • Cadena vacía: sin contraseña, la cuenta no tiene contraseña (informada por passwd en Solaris con "NP").
    • ¡!
    • "* LK *": la cuenta en sí está bloqueada, el usuario no podrá iniciar sesión.
    • "* NP *", "!!" - la contraseña nunca se ha establecido
  • Días desde la época del último cambio de contraseña
  • Días hasta que se permita el cambio
  • Días antes del cambio requerido
  • Días de advertencia por vencimiento
  • Días después de que no haya inicios de sesión antes de que se bloquee la cuenta
  • Días desde la época en que expira la cuenta
  • Reservado y no utilizado

El formato del archivo de 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 requieren que el orden de las líneas de usuario en el archivo de sombra sea idéntico al orden de los usuarios correspondientes en el archivo de contraseñas.

Historia

Antes de la ocultación de contraseñas, la contraseña hash de un usuario de Unix se almacenaba en el segundo campo de su registro en el /etc/passwdarchivo (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, System V Release 3.2 en 1988 y BSD 4.3 Reno en 1990. Pero, los proveedores que habían realizado puertos de versiones anteriores de UNIX no siempre incluían el nuevo sombreado de contraseñas. características en sus versiones, dejando a los usuarios de esos sistemas expuestos a ataques de archivos de contraseñas.

Los administradores del sistema también pueden organizar 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 a menudo se sigue utilizando en los servidores NIS; en otros mecanismos distribuidos, el problema del acceso a los diversos componentes de autenticación de usuarios se maneja mediante los mecanismos de seguridad del repositorio de datos subyacente.

En 1987, la autora de Shadow Password Suite original , Julie Haugh, experimentó una intrusión en la computadora y escribió la versión inicial de Shadow Suite que contiene los comandos login, passwdy su. La versión original, escrita para el sistema operativo SCO Xenix , se trasladó rápidamente a otras plataformas. Shadow Suite se trasladó 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 actuales de Linux .

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 fue yppasswd . Esto requería que los usuarios conocieran 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 backends . 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 manera 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.somódulo. De forma predeterminada, se ha utilizado el hash MD5 , mientras que los módulos actuales también son capaces de realizar hashes más fuertes, como blowfish , SHA256 y SHA512 .

Ver también

Referencias

enlaces externos