linux - usuario - ¿Cómo podemos almacenar contraseñas que no sean texto sin formato?
listar usuarios en linux (8)
He encontrado numerosas publicaciones en stackoverflow sobre cómo almacenar las contraseñas de los usuarios. Sin embargo, necesito saber cuál es la mejor manera de almacenar una contraseña que mi aplicación necesita para comunicarse con otra aplicación a través de la web. Actualmente, nuestra aplicación web necesita transmitir datos a un sitio web remoto. Para cargar los datos, nuestra aplicación web lee la contraseña de un archivo de texto y crea el encabezado con cargas útiles y envía a través de https.
Esta contraseña en texto plano en el sistema de archivos es el problema. ¿Hay alguna manera de almacenar la contraseña de forma más segura?
Este es un sistema operativo de Linux y la aplicación está escrita en Python y no está compilada.
¡Gracias!
Aclaración adicional: No hay usuarios involucrados en este proceso en absoluto. La otra aplicación web utiliza la contraseña almacenada en el sistema de archivos para autenticar la aplicación web que realiza la solicitud. Para ponerlo en las palabras de un comentarista a continuación: "En este caso, la aplicación es el cliente para otra aplicación remota". (Gracias Joe por ayudarme a aclarar).
¿Su aplicación web está alojada en una granja? Si no es así, una tecnología como DPAPI le permitirá cifrar la contraseña para que solo se pueda descifrar en la máquina en la que se cifró.
Sin embargo, desde la memoria puede haber problemas con su uso en una granja de servidores web, ya que debe ir y volver a cifrar el valor de cada servidor.
Si se trata de una granja de servidores web, es probable que desee utilizar algún tipo de cifrado RSA, como se ha sugerido en otras respuestas.
EDIT: DPAPI solo es bueno si está alojando en Windows por supuesto ...
Como mínimo, debe usar permisos (si está en un sistema de archivos que los admite) para asegurarse de que es el único capaz de leer el archivo.
Además, si su aplicación está compilada, no sería demasiado difícil cifrar la contraseña con una frase de contraseña codificada. Si el código no se compila, este método no sería realmente útil, ya que un posible atacante podría simplemente leer la fuente y determinar el cifrado.
De la pregunta, parece que necesita almacenar la contraseña de tal manera que pueda leerse y usarse en una transacción automatizada con otro sitio. Puede cifrar la contraseña y almacenarla cifrada en el archivo, luego descifrarla utilizando una clave almacenada en otro lugar de su sistema antes de usarla. Esto dificulta que alguien que obtiene acceso al archivo use la contraseña, ya que ahora tienen que encontrar la clave y el algoritmo de cifrado que se utiliza para descifrarlo.
Como defensa, más defensa menor siempre es mejor que una defensa fuerte que falla cuando se la rompe. Además, también aseguraría el archivo que contiene la contraseña, en lugar de la propia contraseña. Configure su servidor web para deshabilitar la posibilidad de servir el archivo que contiene la contraseña e intente configurar el proceso que necesita para que el archivo se ejecute en una cuenta separada, de modo que pueda restringir el acceso al archivo a la cuenta que ejecuta el proceso y las cuentas de administrador solamente.
No creo que encuentres una manera infalible de hacer esto. Sugeriría una combinación de cosas para lograr ''seguridad por oscuridad'':
- almacene el archivo de contraseña en una computadora diferente a la que usará
- almacene la ruta del archivo en un archivo de configuración separado en la aplicación nachine
- use permisos para limitar el acceso a los archivos de configuración y contraseña a su proceso solamente
- Audite el acceso a los archivos si su sistema lo permite (mantenga un registro de quién tocó los archivos)
- dar a las carpetas y archivos nombres inocuos (/usr/joe/kittens.txt?)
- bloquear el acceso físico a la (s) computadora (s) (alojamiento externo, armario cerrado o algo)
No creo que estés entendiendo las respuestas proporcionadas. Nunca almacena una contraseña de texto sin formato en ningún lugar, ni la transmite a otro dispositivo.
Usted escribió: Lo sentimos, pero el problema es el almacenamiento de una contraseña en el sistema de archivos ... Esta contraseña es necesaria para la autenticación por parte de la otra aplicación web.
No puede contar con las protecciones del sistema de archivos para mantener la seguridad del texto sin formato, por eso otros han respondido que necesita SHA o similar. Si cree que una contraseña con hash no puede ser suficiente para la autenticación, no entiende el algoritmo relevante:
- obtener la contraseña P del usuario
- almacenar contraseña encriptada (p. ej. hash salado) contraseña Q en un lugar relativamente seguro
- olvida P (incluso limpia el búfer que usaste para leerlo)
- enviar Q al host remoto H
- H obtiene la contraseña P ''del usuario cuando es necesario
- H calcula Q ''desde P'', compara Q ''con Q para igualdad
Puede almacenarlo como resultado del algoritmo hash, este es un algoritmo de una manera (por ejemplo, MD5 o SHA). En la autenticación, se calcula el MD5 de la contraseña escrita por el usuario y se verifica la igualdad con el hash de contraseña MD5 almacenado para este usuario. Si es igual la contraseña está bien.
Para obtener más información sobre los algoritmos de hasing puede visitar:
Puede usar un algoritmo de cifrado de clave bidireccional como RSA. La contraseña se almacena cifrada (mediante una clave, que se almacena en el cerebro del usuario) en el sistema de archivos, pero para descodificar la contraseña, el usuario debe ingresar la clave.
Protegiendo la contraseña de inicio de sesión automático
Las aplicaciones de servidor pueden utilizar la función LsaStorePrivateData para almacenar las contraseñas de los equipos y las máquinas.
Solo Windows