¿Para qué sirven los archivos / etc / shadow y shadow cache en el sistema operativo Linux?

9

¿Cuál es el propósito del archivo / etc / shadow en el sistema operativo Linux? Además, ¿es lo mismo para los clientes de SUSE? Hay un archivo de caché de sombra que se mantiene ¿cuál es el propósito de eso?

Ashitosh
fuente

Respuestas:

16

Desde el principio, los sistemas operativos estilo Unix y Unix (incluido Linux) siempre han almacenado contraseñas como hashes criptográficos (1). Estos hashes se almacenaron originalmente /etc/passwd, pero este archivo debía ser legible en todo el mundo para que la información estuviera disponible para otros fines, incluso una simple ls -lnecesidad de lectura /etc/passwdpara convertir la identificación numérica de usuario del propietario de cada archivo a su nombre de usuario para mostrar. Sin embargo, tener las contraseñas hash en un archivo legible en todo el mundo permitió a los usuarios malintencionados obtener fácilmente esos hash e intentar generar contraseñas utilizables (2) para las cuentas de otros usuarios.

Para evitar esto, las contraseñas hash finalmente se movieron a un archivo legible solo por root (y ocasionalmente un grupo privilegiado de administradores) /etc/shadow. Esto oculta los hash de los usuarios normales del sistema mientras los mantiene disponibles para fines de autenticación de usuarios.

Notas :

  1. Pedantic, lo sé, pero las contraseñas almacenadas no están encriptadas. Se procesan utilizando un algoritmo de cifrado seguro criptográficamente (al menos en el momento en que se escribió). Las principales distinciones 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 reversible (el texto cifrado puede descifrarse; el texto cifrado no puede).

  2. Debido a que los hashes son de 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 de trabajo 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.

Dave Sherohman
fuente
Creo que en el último párrafo debes decir "finito", no "infinito".
phunehehe
44
@phunehehe No, el conjunto de entrada (todas las contraseñas posibles) es infinito, pero la salida (todos los valores hash posibles) es finita.
phihag
@phihag Ah ya veo. Pero, de todos modos, un hash sería mucho más largo que cualquier contraseña que se pueda recordar por humanos :)
phunehehe,
1
El número de entradas que conducen a una colisión dada no es infinito, porque la longitud de las cadenas que puede ser procesada por cualquier algoritmo es finita . Ver por ejemplo stackoverflow.com/questions/17388177/…
MariusMatutiae el
1
@MariusMatutiae Suponga una implementación de hash realmente mala que se trunca en 3 caracteres. La contraseña correcta es "abc". Las entradas "abcd", "abcde", "abcdef", etc. también producirán el mismo hash de salida y, por lo tanto, también serán aceptadas. Hay un número infinito de cadenas que comienzan con "abc" y colisionarán trivialmente. (Tenga en cuenta que básicamente estamos en desacuerdo sobre si "la entrada" significa antes o después de aplicar el truncamiento)
Dave Sherohman,
6

El /etc/shadowarchivo se creó por razones de seguridad y contiene la contraseña cifrada de cada usuario.

Originalmente, la contraseña cifrada se almacenaba en /etc/passwd. /etc/passwdtenía que ser legible en todo el mundo para que el sistema pudiera asignar los ID de usuario a los nombres de los usuarios, y para que los usuarios pudieran encontrar información sobre los demás, por ejemplo, el directorio de inicio del otro usuario o su número de teléfono, que tradicionalmente se almacenaba en el campo "gecos" y se muestra con la utilidad "dedo".

Pero luego la gente se dio cuenta de que se trataba de un problema de seguridad. Cualquier persona con tiempo suficiente 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 telneto ssh, el sistema no podría saber que estaba siendo atacado.

Por lo tanto, la contraseña cifrada se movió a la recién creada /etc/shadow, que solo puede leer la raíz.

También contiene otra información que el /etc/passwdarchivo no admitía en relación con la cuenta y la contraseña del usuario, por ejemplo, cuándo se cambió la contraseña por última vez y cuándo caducará.

Consulte man 5 shadow( versión web ) para obtener detalles completos del formato de archivo.


No puedo decir si es lo mismo para SUSE, sin saber con qué versión de SUSE está tratando. Por ejemplo, su sistema SUSE puede usar Blowfish en lugar de MD5.

También dio a entender que estaba mezclando su /etc/shadowarchivo con un sistema que ejecuta una distribución de Linux diferente, pero no dijo cuál era la otra distribución.

Consulte Problemas al migrar archivos de sombra de SuSE 9.3 a Ubuntu Server x86_64, por ejemplo.

Para tratar de resolverlo, abra /etc/shadowy vea si el campo de contraseña cifrada comienza con $1$o $2$. Si contiene $1$, es MD5 y es compatible con la mayoría de las otras distribuciones. Si contiene $2$, entonces probablemente sea Blowfish según los archivos de sombra 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.

Mikel
fuente
3

Los usuarios se enumeran en el /etc/passwd archivo. Este archivo contiene mucha información utilizada por el sistema, 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 archivo es el inicio de sesión, seguido de la contraseña correspondiente.

Las contraseñas cifradas solían almacenarse en este campo. Sin embargo, el /etc/passwdarchivo debe ser legible por todos en el sistema, por lo que el cifrado no evita los ataques de fuerza bruta, como lo ha dicho @Mikel. La solución fue mover estas contraseñas cifradas en un archivo legible solo para root:/etc/shadow .

Por lo tanto, /etc/shadowcontiene las contraseñas cifradas de los usuarios del sistema. El sistema sabe que tiene que verificar las contraseñas en este archivo cuando los campos de contraseña /etc/passwdcontienen solo una x (que significa " cruzar a / etc / shadow")

jopasserat
fuente
1
Tenga en cuenta que las contraseñas almacenadas en /etc/passwdwas / are hash todavía de la misma manera que lo estarían si estuvieran /etc/shadow. En realidad, no dice que las contraseñas /etc/passwdsean texto sin formato, pero sería fácil para alguien que no esté familiarizado con el manejo de contraseñas * nix malinterpretar su respuesta como si implicara eso.
Dave Sherohman
Gracias por tu comentario que me ayudó a mejorar mi respuesta.
No creo que xrealmente signifique nada. Está ahí solo como un hash no válido (uno que no coincide con ninguna contraseña). Algunos sistemas usan !.
user1686
3

Veamos si puedo obtener todos los votos positivos en el mundo, ya que escribí lo que se convirtió en Linux Shadow Password Suite en el '87;)

El /etc/passwdarchivo original contenía un hash modificado basado en DES de la contraseña de texto sin cifrar. En el momento en crypt()que se creó la función, se creía (y esto fue establecido por los creadores del sistema operativo UNIX) que los ataques contra el hash de contraseña no serían factibles, debido a la cantidad de contraseñas posibles y al uso de un sistema de 12 bits. (4.096 valores posibles) "sal". Cada posible contraseña de texto sin cifrar tenía 4.096 posibles valores hash, y con un resultado hash de 64 bits, eso dio un total de 2 ^ 72 posibles hashes de contraseña.

Como se mencionó en otro póster, /etc/passwdvarias utilidades también lo utilizaron para mapear entre los nombres de usuario y los valores de UID (el /etc/grouparchivo proporciona la función análoga para grupos) y eso requería que fuera legible en todo el mundo.

En la década de 1980, se hizo evidente que los ataques de diccionario contra el hash de contraseña almacenado en el /etc/passwdarchivo se estaban volviendo factibles y /etc/shadowse introdujo en AT&T UNIX en una versión anterior del Sistema V. Documenté qué páginas de manual usé para escribir la biblioteca Shadow original, y yo ' Lo he olvidado, pero definitivamente fue un lanzamiento temprano de System V, probablemente SVR3.2.

Lo que hizo AT&T, y lo que implementé para SCO Xenix (el SCO Xenix original, no el malvado SCO Xenix posterior) en el '87 que finalmente entró en uso en Linux, fue simplemente mover la contraseña hash /etc/shadow. Esto evitó el ataque drive-by, donde un usuario no privilegiado adquirió una copia /etc/passwdy realizó un ataque contra él. Si está familiarizado con por qué escribí Shadow en primer lugar, tuve un usuario que descargó mi /etc/passwdarchivo a través de UUCP en los días en que todavía usábamos UUCP para casi todo.

Para cuando se creó Linux y entró en uso generalizado, había una gran cantidad de herramientas para atacar hashes de contraseñas. Las reimplementaciones de alto rendimiento de crypt()eran una vía, y los ataques basados ​​en diccionarios a través de herramientas como Crack y libcrack eran otros. El puerto inicial fue realizado por Nate Holloway y Floria La Roche (les di crédito, no sé si alguien hizo el trabajo antes que ellos).

Finalmente, el uso de crypt()hashes basados ​​en archivos, incluso en un archivo protegido, ya no era seguro y se realizaron los MD5cambios de hash originales . MD5finalmente se consideró que era demasiado débil y se usaron hashes más nuevos.

En teoría, se podría almacenar un hash lo suficientemente fuerte /etc/passwd. La mala seguridad operativa significa que muchos sistemas tienen sus /etc/shadowarchivos disponibles a través de varios vectores de ataque: "Robé los archivos de respaldo" es probablemente la más fácil.

Julie en Austin
fuente