¿Cómo hacer que las contraseñas de los usuarios se muestren como texto claro en Linux?

28

Sabemos que las contraseñas de los usuarios se guardan /etc/passwd, pero de forma encriptada, por lo que incluso la raíz no puede verlas:

jane:x:501:501::/home/jane:/bin/bash
fred:x:502:502::/home/fred:/bin/bash

Como se muestra arriba, :x:representa la contraseña.

¿Hay alguna forma (posible configuración) de guardar la contraseña en /etc/passwdtexto sin cifrar y que la raíz pueda verla?

usuario78050
fuente
10
No. Y esa es una característica. Tampoco hay una razón real para ello, ya que la cuenta raíz no necesita la contraseña de un usuario para acceder a sus archivos. ¿Bajo qué circunstancia quieres esto?
HalosGhost
1
Tengo curiosidad por esto, ¿por qué el administrador (la raíz) del sistema no puede ver las contraseñas de otros usuarios?
user78050
55
@ user78050 porque el usuario root no tiene ninguna razón para conocer las contraseñas de otros usuarios, y sería un gran riesgo de seguridad permitirles que lo hagan.
David Z
16
Porque viola el principio de seguridad más simple en el negocio: "nunca almacene contraseñas en texto plano". Cuando la seguridad se hace bien, solo el usuario debe conocer su contraseña, nadie más. Además, no hay absolutamente ninguna razón para hacer esto. No puedo pensar en una sola situación administrativa en la que ayudaría a un usuario root a conocer la contraseña de otro usuario.
HalosGhost
3
Use el "método de cifrado" MD5 y luego descifre las contraseñas usando tablas de arco iris .
Cristian Ciupitu

Respuestas:

58

Las otras dos respuestas le han dicho, ¡correctamente! - que esta es una Mala Idea ™ . Pero también te han dicho que es difícil de hacer, que requieren cambiar un montón de programas.

Eso no es cierto. Es muy fácil. Solo necesita cambiar uno o dos archivos de configuración. Creo que es importante señalar esto, porque debe tenerlo en cuenta al iniciar sesión en sistemas que no controla. En realidad, no pondrán una contraseña de texto sin formato /etc/passwdo /etc/shadowirán a un archivo diferente. Tenga en cuenta que no los he probado, ya que prefiero no tener mi contraseña en texto sin formato.

  1. Edite /etc/pam.d/common-password(para detectar el cambio de contraseña) o /etc/pam.d/common-auth(para detectar el inicio de sesión) y agregue… pam_exec expose_authtok log=/root/passwords /bin/cat

  2. Edite ambos y cambie de pam_unix a pam_userdb con crypt=none. Alternativamente, puede ponerlo solo en la contraseña común (dejando también pam_unix) para registrar las contraseñas cuando se cambian.

  3. Puede eliminar la shadowopción (así como cualquier opción de hash fuerte) de pam_unix para deshabilitar el archivo de sombra y volver a las contraseñas de criptas tradicionales. No es texto simple, pero John the Ripper lo arreglará por usted.

Para más detalles, consulte la Guía de administración del sistema PAM .

También puede editar el código fuente de PAM o escribir su propio módulo. Solo necesitaría compilar PAM (o su módulo), nada más.

derobert
fuente
1
Supongo que se escriben las contraseñas de texto sin formato /root/passwords.
Faheem Mitha
Por cierto. Es muy bueno saber qué tan fácil es y dónde tengo que mirar si tengo miedo de un sistema comprometido.
erik
8
@erik Es prerrogativa del autor de la pregunta elegir la respuesta que encuentre más útil como respuesta aceptada. Probablemente sea algo bueno que OP descubriera "¡no hagas eso!" lo más útil ... Además, para ser claros, esta no es la única forma de robar contraseñas en un sistema comprometido o administrado de manera malintencionada. Por lo tanto, no puede simplemente mirar la configuración de PAM para determinar que está a salvo.
derobert
3
Esto es más bien asumiendo que la distribución está usando PAM, de ninguna manera todos lo hacen.
Vality el
1
@msw respondí porque aparentemente es una creencia común que ejecutar un cuadro de Linux con contraseñas de texto claro es difícil (Bobby, para su crédito, arregló su respuesta; Anthon todavía lo hace parecer difícil). Esa es una creencia peligrosa, ya que fomenta la reutilización de contraseñas. Si hubiera publicado una respuesta "en realidad, es fácil, editas uno o dos archivos, pero no te lo diré", entonces nadie lo hubiera creído. ¿Por qué escucharme sobre (en ese momento) respuestas mucho más votadas y más exhaustivas? Hacer el punto requiere decir cómo hacerlo. (Sin embargo, no son ejemplos de copiar y pegar. Aún se necesita usar.)
derobert
34

Oh querido, bien, comencemos desde el principio ...

Sabemos que las contraseñas de los usuarios se guardan en / etc / passwd, pero de forma encriptada

No, ellos han sido almacenados en /etc/passwd, y eso fue hace bastante tiempo. Hoy las contraseñas se almacenan en un llamado archivo shadow , la mayoría de las veces /etc/shadow.

pero de forma encriptada, por lo que incluso la raíz no puede verlos:

Sé que a veces se usa indistintamente, pero el hash no es cifrado . El cifrado es, por definición, reversible, lo que significa que puede traducir lo cifrado nuevamente a su formato de texto sin cifrar. Hashing está diseñado para no ser reversible de ninguna manera (excepto la fuerza bruta). No se supone que la forma original de texto en claro de algo que está en hash sea recuperable.

Las contraseñas en el archivo de sombra se almacenan como hashes.

como se muestra arriba: x: representa la contraseña

En xeste caso, solo es un marcador de posición para el campo de contraseña heredado. Esto xsignifica que la contraseña se puede encontrar en el archivo de sombra.

¿Hay alguna forma (posible configuración) de guardar la contraseña en / etc / passwd en texto claro y de modo que la raíz pueda verlas?

Sí, esto es posible, pero no es una buena idea por algunas razones. La respuesta de Derobert explica una forma bastante simple de hacerlo .

Pero, ¿por qué no es una buena idea? Bueno, por una razón simple pero muy importante: seguridad. Sugiero leer estas preguntas:

Pero para resumir, suponga lo siguiente: hay un servidor en una empresa, todas las cuentas de usuario están protegidas por sus contraseñas y los datos en estas cuentas de usuario están encriptados con la misma contraseña. Un cracker externo obtiene acceso al servidor, pero no puede acceder a ninguno de los datos importantes porque todavía está encriptado en las cuentas de usuario.

Ahora suponga que las contraseñas se almacenarían en texto sin formato. El cracker de repente tendría acceso a todo , porque las contraseñas se pueden leer. Pero si se almacenan como valores hash, son casi inútiles para cualquier persona, excepto las personas con muchos recursos para hacer un ataque de fuerza bruta.

Poli
fuente
2
En defensa de OP con respecto al cifrado y el hash, la página de manual de la cripta de glibc dice: «Si salt es una cadena de caracteres que comienza con los caracteres "$id$"seguidos de una cadena terminada por "$": $id$salt$encrypted entonces, en lugar de utilizar la máquina DES, ididentifica el método de cifrado utilizado y esto luego determina cómo se interpreta el resto de la cadena ».
Cristian Ciupitu
1
Interesante, pero no responde la pregunta principal, como lo hace la respuesta de derobert.
erik
66
@erik A veces la respuesta correcta a una pregunta es "no lo hagas", incluso cuando la cosa es técnicamente posible. Éste es uno de esos momentos.
Gilles 'SO- deja de ser malvado'
1
Sugiero cambiar esta línea: "No, no hay una forma, excepto cambiar muchas aplicaciones y la forma en que funcionan". Eso deja la impresión de que no es fácil (o al menos fácil de hacer algo funcionalmente equivalente).
derobert
2
@Bobby Esta es una excelente respuesta, pero no una excelente respuesta. Para que sea una respuesta excelente, debe cambiar la parte de que "no es fácilmente posible", porque claramente lo es, como se muestra en la respuesta de derobert.
Michael Dorst
10

En primer lugar, las contraseñas cifradas no están en /etc/passwd, pero están en /etc/shadow. Una de las razones de esto es que /etc/passwdes públicamente legible (por lo que puede encontrar, por ejemplo, la información de campo GECOS para otro usuario) y, especialmente con esquemas de cifrado más antiguos, podría permitir ataques de fuerza bruta contra la contraseña cifrada.

Simplemente almacenar las contraseñas en texto plano, no es necesario y requeriría actualizaciones para el programa de contraseñas y las bibliotecas que leen la /etc/shadowinformación para buscar contraseñas válidas. Y luego debe esperar que todas las utilidades utilicen bibliotecas compartidas para acceder a esa información en lugar de estar vinculadas estáticamente con algo que no comprende el almacenamiento de contraseñas de texto sin formato.

Si esta fuera una opción en la configuración de una configuración, siempre habría personas estúpidas que la encenderían de manera inapropiada. Y mientras todavía están trabajando en pantallas CRT y transmiten esto de una manera que se puede recoger fácilmente desde el exterior de su edificio, mientras están mirando la información.

Aparte de eso, las personas tienden a usar la misma contraseña o una similar en varios sistemas, por lo que no es una buena idea que las contraseñas sean legibles por humanos. Como algunos administradores de sistemas pueden volver a intentarlo en otros sistemas, sabe que el usuario tiene una cuenta.

Debe haber cosas más interesantes, el funcionamiento de se puede investigar en su sistema.

Anthon
fuente
3
/etc/shadowno almacena contraseñas cifradas, almacena hashes de contraseñas. Sí, se llama a la función crypt, y la página del manual dice "encriptado", pero si llamas bicicleta a un pez, eso no le da ruedas. Tenga en cuenta que sería posible hacer/etc/shadow las contraseñas de la tienda en un formato diferente sin compilar ningún programa (al menos en Linux y Solaris): los métodos de autenticación siempre están vinculados dinámicamente. Almacenar contraseñas como texto sin formato sería una idea terrible, pero es posible con un poco de trabajo .
Gilles 'SO- deja de ser malvado'
@gilles Acabo de reutilizar la terminología de OP, pero tienes razón en que hash es un término más apropiado.
Anthon
3

La razón básica (de por qué es una mala idea) es que ningún usuario (root, administrador u otro) debería tener acceso a la contraseña de otro usuario.

Simplemente porque la contraseña es un medio de autenticación. Si conozco la contraseña de otro usuario, conozco sus credenciales (nombre de usuario + contraseña), por lo que puedo iniciar sesión como ese usuario , suplantando a él (o ella o él).

Cualquier acción que realice cuando inicie sesión como ese usuario, el otro usuario será responsable. Y no es así como debería funcionar la autenticación.

Las acciones pueden ser desastrosas, como eliminar un montón de archivos importantes, borrar discos duros, borrar copias de seguridad, cerrar planes de energía nuclear, etc.

O simplemente ilegal. Imagine una institución bancaria donde yo (el administrador) tenga acceso a todas las contraseñas. Usando la contraseña del cajero, puedo ordenar un traslado de un millón de dólares de la cuenta bancaria del presidente a la cuenta bancaria del limpiador de ventanas. Luego use la contraseña superior del cajero para aprobar la transacción. Luego, apruebo un cheque de la cuenta del limpiador de ventanas a mi propia cuenta bancaria off-shore.

Luego me voy de vacaciones en las Bahamas ...


En esa vista, el hash de las contraseñas y el uso de archivos shadow separados se pueden ver como un medio para hacer cumplir esta regla (ningún usuario debe ser capaz de hacerse pasar por otro).

Y como comentó @ Miral * , existe la excepción de suque, si bien permite la suplantación (y los tipos de rechazos del argumento anterior), también mantiene un registro de su uso (por lo que cambia las reglas a "solo los administradores pueden hacerse pasar por otros, pero un se mantiene el registro ").

* El ejemplo del banco probablemente no fue el mejor. En cualquier entorno donde la seguridad es crucial, generalmente se requieren más medios de autenticación y autorización que una sola contraseña.

ypercubeᵀᴹ
fuente
Una falla con este argumento es que el usuario root puede suplantar a cualquier otro usuario en el sistema de todos modos, sin tener que conocer su contraseña. Tan fácil como su otheruser.
Miral
@Miral tienes razón, no consideré esto. Y aunque el uso de suestá registrado, su no mantiene un registro de lo que realmente se hace mientras un usuario se hace pasar por otro. Y una raíz maliciosa siempre puede alterar los registros para ocultar las acciones de futuros investigadores.
ypercubeᵀᴹ