Desde el principio, los sistemas operativos Unix y de estilo Unix (incluido Linux) siempre han almacenado las contraseñas como hashes criptográficos (1). Estos hash se almacenaron originalmente en /etc/passwd
, pero este archivo tenía que ser legible en todo el mundo para que la información estuviera disponible para otros fines, incluso un simple ls -l
necesita leer /etc/passwd
para convertir la identificación de usuario numérica de cada propietario de archivo en su nombre de usuario para su visualización. Sin embargo, tener las contraseñas cifradas en un archivo de lectura mundial permitió a los usuarios maliciosos obtener fácilmente esos valores cifrados e intentar generar contraseñas utilizables(2) para las cuentas de otros usuarios.
Para evitar esto, las contraseñas codificadas finalmente se movieron a un archivo que solo podía leer el root (y ocasionalmente un grupo privilegiado de administradores), /etc/shadow
. Esto oculta los hashes de los usuarios normales del sistema y los mantiene disponibles para fines de autenticación de usuarios.
Notas :
-
Pedante, lo sé, pero las contraseñas almacenadas no encriptado. Se codifican utilizando un algoritmo de cifrado criptográficamente seguro (al menos en el momento en que se escribió). Las distinciones principales relevantes aquí son que los hashes son de longitud fija (la longitud del texto cifrado varía según la longitud del texto cifrado) y no reversibles (el texto cifrado se puede descifrar; el texto cifrado no).
-
Debido a que los valores hash tienen una longitud fija, hay un número infinito de entradas que coincidirán con cualquier representación hash dada. Por lo tanto, un atacante podría encontrar una contraseña que funcione y que no sea necesariamente la misma que la contraseña del usuario propietario, aunque esto es muy poco probable dado el tamaño de los hashes criptográficos modernos.
El /etc/shadow
El archivo se creó por motivos de seguridad y contiene la contraseña cifrada de cada usuario.
Originalmente, la contraseña cifrada se almacenaba en /etc/passwd
. /etc/passwd
tenía que ser legible en todo el mundo para que el sistema pudiera asignar ID de usuario a nombres de usuario, y para que los usuarios pudieran encontrar información sobre los demás, p. el directorio de inicio del otro usuario, o su número de teléfono, que tradicionalmente se almacenaba en el campo "gecos" y se mostraba con la utilidad "finger".
Pero luego la gente se dio cuenta de que se trataba de un problema de seguridad. Cualquiera con suficiente tiempo podría hacer lo que se llama un ataque de fuerza bruta, mediante la generación programática de contraseñas cifradas para cada contraseña posible. Si el atacante hizo eso sin intentar iniciar sesión a través de telnet
o ssh
, el sistema no podía saber que estaba siendo atacado.
Entonces, la contraseña cifrada se movió al /etc/shadow
recién creado , que solo es legible por root.
También contiene otra información que el /etc/passwd
archivo no compatible relacionado con la cuenta y la contraseña del usuario, p. cuándo se cambió la contraseña por última vez y cuándo caducará.
Ver man 5 shadow
(versión web) para obtener detalles completos sobre el formato del archivo.
No puedo decir si es lo mismo para SUSE, sin saber con qué versión de SUSE estás tratando. Por ejemplo, su sistema SUSE puede usar Blowfish en lugar de MD5.
También insinuaste que estabas mezclando tu /etc/shadow
archivo con un sistema que ejecuta una distribución diferente de Linux, pero no dijo cuál era la otra distribución.
Consulte Problemas al migrar el archivo shadow de SuSE 9.3 a Ubuntu Server x86_64, por ejemplo.
Para intentar resolverlo, abre /etc/shadow
y ver si el campo de contraseña encriptada comienza con $1$
o $2$
. Si contiene $1$
, entonces es MD5 y compatible con la mayoría de las demás distribuciones. Si contiene $2$
, entonces probablemente sea Blowfish según los archivos shadow de Blowfish en Debian.
Si está utilizando Ubuntu, el primer resultado de búsqueda de Google para Ubuntu blowfish podría ser un buen punto de partida.
Los usuarios se enumeran en el /etc/passwd
expediente. Este archivo contiene mucha información utilizada por systemm no solo para permitir que los usuarios inicien sesión.
Cada línea corresponde a una entrada de usuario y los diferentes campos están separados por dos puntos. El primer campo es el inicio de sesión, seguido de la contraseña correspondiente.
Las contraseñas encriptadas solían almacenarse en este campo. Sin embargo, el /etc/passwd
El archivo debe ser legible por todos en el sistema, por lo que el cifrado no evita los ataques de fuerza bruta, como ha dicho @Mikel. La solución fue mover estas contraseñas encriptadas en un archivo legible solo para root:/etc/shadow
.
Por lo tanto, /etc/shadow
contiene las contraseñas encriptadas de los usuarios del sistema. El sistema sabe que tiene que buscar contraseñas en este archivo cuando la contraseña se encuentra en /etc/passwd
contener una x sola (que significa "cruz a /etc/shadow")