¿Por qué el permiso de archivo para / etc / shadow está establecido en 600?

25

Los permisos de /etc/shadowson 600, lo que significa que no es legible para nadie excepto para root.

Sin embargo, como todas las contraseñas que contiene no se almacenan en texto claro sino como hash (lo que significa que es imposible calcular la contraseña original del hash), ¿por qué no todos pueden leerla?

Shubhanshu Vishwakarma
fuente
¿Estás seguro de que los permisos /etc/shadowson 600?
edwinksl
44
Si una contraseña de su cuenta de Stackoverflow está en hash, ¿está dispuesto a mostrar su contraseña en hash a otros?
Jeon
55
@ByteCommander. A veces quiero una manera de votar las ediciones.
TRiG

Respuestas:

60

Para evitar ataques de fuerza bruta fuera de línea.

Aunque no puede revertir un hash, aún puede intentar descifrar todas las contraseñas posibles hasta que encuentre una coincidencia, y puede hacer millones de intentos por segundo con un buen hardware y acceso local al archivo.

Si el archivo tuviera 644permisos, cualquiera que haya iniciado sesión en su sistema, incluso en una sesión de invitado, podría copiar este archivo de su computadora (ya sea a una memoria USB o remotamente scp) e intentar un ataque de fuerza bruta fuera de línea , sin dejar ninguna evidencia de esto en su computadora .


Tenga en cuenta que los permisos en Ubuntu son en realidad 640, no 600:

$ ls -l /etc/shadow
-rw-r----- 1 root shadow 1239 Jun 25 04:35 /etc/shadow

Sin embargo, esto no importa mucho, ya que todavía no hay permisos para otros y, por defecto, nadie está en el shadowgrupo.


Originalmente, los hash se almacenaban /etc/passwd(por eso se llama passwd), ya que cuando se creó Linux, descifrar un hash, incluso los tipos débiles utilizados en ese momento, era prácticamente imposible. Sin embargo, con el tiempo, la potencia de procesamiento avanzó hasta el punto en que fue posible descifrar un hash, al menos de una contraseña relativamente débil.

El cambio de los permisos de /etc/passwdque 640o 600no funcionaría, ya que hay muchas razones legítimas para ser capaz de leer /etc/passwdcomo un usuario normal (la conversión de los UID de nombres de usuario, obtener el nombre, número de teléfono completo de un usuario, etc), por lo que los hashes fueron trasladados a /etc/shadow, que recibió 640permisos. Un xlugar en lugar del campo hash de contraseña para un usuario /etc/passwdse utiliza para indicar que el hash para ese usuario se almacena en su /etc/shadowlugar.

insert_name_here
fuente
1
¡Buena llamada para copiar el archivo!
Rinzwind
1
y no necesito el representante ;-) editar: hmm lo configuró en el mío: P lo siento: D edit2 y ahora está de vuelta otra vez. eh: D
Rinzwind
66
La última vez que verifiqué que podría volver a poner la contraseña cifrada en / etc / passwd y eliminar la línea de / etc / shadow y esperar poder iniciar sesión. / Etc / shadow existe para que se pueda establecer en 600 por la razón dada en esta respuesta
Joshua
8
Vale la pena señalar que los permisos para / etc / passwd son 644. Creo que históricamente, los hashes de contraseñas solían almacenarse aquí. Sin embargo, cambiar este archivo a 640 habría causado todo tipo de problemas de compatibilidad, por lo que, en cambio, los hashes de contraseña se movieron a la sombra y se eliminaron de passwd; esto permite que la otra información en passwd permanezca legible en todo el mundo mientras los hashes de contraseña se mantienen en secreto en un archivo diferente
Rodney
44
@Rodney como alguien que creció en BSD 4.3, tienes razón. Los hashes se almacenaron en / etc / passwd. Cuando el Vax 11/780 era de vanguardia, un ataque de fuerza bruta contra las contraseñas en el archivo se consideraba imposible. Quizás lo más importante es que Internet [Arpanet] era un pequeño y somnoliento remanso, y esas cosas apenas se consideraban; no había ssh- solo rlogin / telnet. Mantener el archivo de contraseña 644 significa que las utilidades tales como lsno necesitan ser setuid root para traducir de uid a name.
Mike S
13

En realidad, / etc / shadow se creó para permitir alejarse de una lista pública de nombres de usuario y contraseñas.

Espera, esta será una pequeña lección de historia, antes de llegar a la respuesta real. Si no te importa la historia, solo desplázate un poco hacia abajo.

En los viejos tiempos, los sistemas operativos tipo Unix, incluido Linux, generalmente mantenían las contraseñas en / etc / passwd. Ese archivo era legible en todo el mundo, y todavía lo es, porque contiene información que permite la asignación, por ejemplo, entre ID de usuario numéricos y nombres de usuario. Esa información es muy útil incluso para usuarios comunes con fines perfectamente legítimos, por lo que tener el mundo legible en el archivo fue de gran beneficio para la usabilidad.

Incluso en aquel entonces, las personas se dieron cuenta de que tener las contraseñas en texto plano en un archivo en una ubicación conocida que cualquiera que pudiera iniciar sesión podía leer libremente era una mala idea. Así que las contraseñas fueron hash, en cierto sentido Ese es el antiguo mecanismo de cifrado de contraseñas "cripta", que casi nunca se usa en los sistemas modernos, pero a menudo es compatible con fines heredados.

Eche un vistazo a / etc / passwd en su sistema. ¿Ves ese segundo campo, que dice en xtodas partes? Solía ​​contener la contraseña hash para la cuenta en cuestión.

El problema era que la gente podía descargar / etc / passwd, o incluso no descargarlo, y trabajar en descifrar las contraseñas. Esto no fue un gran problema, mientras que las computadoras no eran particularmente poderosas (Clifford Stoll, en The Cuckoo's Egg , da, según recuerdo, el tiempo para descifrar una contraseña en un sistema de clase de PC IBM a mediados de la década de 1980 como aproximadamente un segundo ), pero se convirtió en un problema a medida que aumentaba la potencia de procesamiento. En algún momento, con una lista de palabras decente, descifrar esas contraseñas se volvió demasiado fácil. Por razones técnicas, este esquema tampoco podía admitir contraseñas de más de ocho bytes.

Se hicieron dos cosas para resolver esto:

  • Pasar a funciones hash más fuertes. La antigua cripta () había sobrevivido a su vida útil, y se diseñaron esquemas más modernos que estaban preparados para el futuro y eran computacionalmente más fuertes.
  • Mueva las contraseñas hash a un archivo que no sea legible por cualquiera. De esta forma, incluso si una función de hash de contraseña resultó ser más débil de lo esperado, o si alguien tenía una contraseña débil para empezar, había otro obstáculo para que un atacante obtuviera acceso a los valores de hash para comenzar. Ya no era gratis para todos.

Ese archivo es / etc / shadow.

El software que funciona con / etc / shadow es generalmente muy pequeño, altamente enfocado y tiende a recibir un escrutinio adicional en las revisiones debido a la posibilidad de problemas. También se ejecuta con permisos especiales, lo que le permite leer y modificar / etc / shadow, mientras mantiene a los usuarios normales incapaces de mirar ese archivo.

Así que ahí lo tiene: los permisos en / etc / shadow son restrictivos (aunque, como ya se señaló, no tan restrictivos como usted dice) porque el propósito de ese archivo es restringir el acceso a datos confidenciales.

Se supone que un hash de contraseña es fuerte, pero si su contraseña está en las 500 principales contraseñas en las listas de Internet , cualquiera que tenga acceso al hash aún podrá encontrar la contraseña rápidamente. Proteger el hash evita ese ataque simple y eleva el listón para un ataque exitoso, desde una simple ojeada hasta requerir que uno sea administrador del sistema en el host o pasar primero por un ataque de escalada de privilegios. Especialmente en un sistema multiusuario administrado correctamente, ambos son significativamente más difíciles que solo mirar un archivo legible en todo el mundo.

un CVn
fuente
realmente me gusta la forma en que describe cada cosa :) (y)
Shubhanshu Vishwakarma
Terminología / etimología: /etc/shadowno contiene "contraseñas ocultas" (porque eso no es una cosa). Todo el archivo es una sombra de /etc/passwd. Vea cómo se usa la terminología en el Linux Shadow Password COMO : ¿Por qué sombrear su archivo passwd? . A diferencia de algunos otros usos del término "sombra" en el cómputo, no es una sombra copia , aunque (como sombras código de la BIOS en la memoria RAM en lugar de correr desde la ROM). El campo en / etc / passwd es un marcador de posición, que contiene un carácter especial que significa "el hash de contraseña real está en / etc / shadow".
Peter Cordes
Buena historia pero 1 seg. cada contraseña apenas limitaba incluso en la década de 1980, no cuando las contraseñas principales fueron utilizadas por más del 1% de las personas cada una.
Warren Dew
1
@WarrenDew No estoy seguro si está haciendo una declaración de hechos u opinión. crypt () tiene una salida de sal de 12 bits y 12 + 64 bits para una contraseña de ocho bytes (luego comúnmente codificada en base64). Para las contraseñas comunes, sí, probablemente podría atacarlos por la fuerza bruta, pero no pasó mucho de que gran parte de una contraseña para realizar el agrietamiento por la fuerza bruta no factible si cada comprobación de la contraseña tomó un segundo. La precomputación de una mesa salada incluso para una sola contraseña tomaría el orden de una hora a una velocidad de un cifrado por segundo, además de que tenía que lidiar con un almacenamiento limitado (40-80 MB era mucho en esos días).
un CVn
@PeterCordes Buen punto. Estoy borrando ese pasaje porque realmente no es particularmente relevante para responder la pregunta del OP.
un CVn
10

¿Por qué el permiso para el archivo / etc / shadow está configurado en 600?

¿Quién te dijo eso?

$ls -l /etc/shadow
-rw-r----- 1 root shadow 1407 mei 18 10:05 /etc/shadow
  • es 640.

Respuesta simple: los permisos en Linux se toman en serio. No hay razón para que "otros" hagan algo con ellos /etc/shadow. Y no hay razón para que el grupo "shadow" le escriba. Y la ejecución está fuera de orden.

Sin embargo, como todas las contraseñas que contiene no se almacenan en texto claro sino como hash (lo que significa que es imposible calcular la contraseña original del hash), ¿por qué no todos pueden leerla?

Porque no hay una sola razón para hacerlo.

Los hashes son unidireccionales. Darle a alguien acceso de lectura le permite usar un script para abusar de esta manera: simplemente enumere cualquier palabra que pueda imaginar y cree el hash. En algún momento puede coincidir con la contraseña. Aunque podría tomar un tiempo también.

Esta respuesta es interesante y tiene algunas estimaciones sobre el forzamiento bruto.

Rinzwind
fuente
640 es para usuario normal? ¿El usuario del grupo puede leer el archivo de sombra?
Shubhanshu Vishwakarma
¿Lo siento? El archivo es 640. Entonces lea, escriba para el usuario "root" y lea para el grupo "shadow". "shadow" es un grupo privilegiado creado por el sistema para este propósito específico.
Rinzwind
2

Antecedentes importantes: /etc/shadowexiste únicamente con el propósito de mantener ocultos los hashes de contraseñas. En los primeros días de Unix, se almacenaban hashes de contraseñas /etc/passwd. A medida que las computadoras se volvieron más potentes, las conexiones de red más persistentes y las explotaciones de seguridad más sofisticadas, la gente se dio cuenta de que mantener los hash de contraseña legibles por palabras era un problema. (No detallaré las hazañas; ya hay suficientes buenas respuestas al respecto).

Pero /etc/passwdno podía protegerse contra la lectura: es utilizado por todo tipo de programas para asignar identificadores numéricos de usuario a nombres de usuario y para buscar directorios de inicio, shells predeterminados, el nombre completo del usuario (y el número de la oficina, etc. man finger). . Entonces, la parte sensible, los hashes de la contraseña, se movieron a /etc/shadow, y el resto permaneció como estaba. Es por eso que /etc/passwd, a pesar del nombre, contiene todo excepto la contraseña (hash).

alexis
fuente
gracias por su respuesta a mi pregunta, ahora tengo una idea completa de / etc / passwd y / etc / shadow file.
Shubhanshu Vishwakarma