¿La mejor manera de almacenar contraseñas para una herramienta LAN?

0

Estoy creando una aplicación en Python para Linux como una interfaz para el enrutador (para automatizar algunas tareas).

Pero necesito iniciar sesión en el enrutador antes de poder realizar ninguna operación en él y, como utiliza http-auth, necesito enviarle la contraseña de texto sin cifrar y, por lo tanto, la contraseña de texto sin cifrar debe estar almacenada en el sistema .

¿Cuál es la mejor manera de hacer esto? Quiero decir, si simplemente codifico la contraseña, cualquiera puede simplemente mirar el código fuente para obtenerlos. ¿Debo almacenarlo en una base de datos? ¿O debería cifrarlo y luego usar una contraseña maestra para desbloquearlo (no preferido)?

    
pregunta Grim Reaper 26.12.2013 - 13:49
fuente

3 respuestas

1

Depende de quién quieres proteger esa contraseña. Dado que va a transmitir eso en texto claro a través de la red, está otorgando confianza a los administradores de locatl.

Si eso es correcto, puede colocar esa contraseña en un archivo de datos que está restringido a los usuarios de la raíz local a través de la ACL del sistema operativo. De esa manera, cualquier persona que acceda a ella podrá acceder a la contraseña de todos modos.

    
respondido por el Stephane 26.12.2013 - 14:03
fuente
1
  

¿Cuál es la mejor manera de hacer esto?

Como siempre, depende. La forma más segura de hacer esto es utilizar una herramienta especializada que maneje el cifrado de la contraseña, la almacene en una bóveda de contraseñas y que también permita que esta contraseña se cambie automáticamente en un horario mediante la bóveda de contraseñas independientemente de su script. . Si no tiene una herramienta de bóveda de contraseñas disponible, este puede ser un proyecto más grande del que necesita ahora. El mecanismo real utilizado por estas herramientas para realizar el cifrado y manejar la clave es utilizar una clave aleatoria e incorporar cierta información de hardware en la clave. Además, la bóveda generalmente también permite un bloqueo por dirección IP, de modo que solo el servidor puede recuperar la contraseña.

  

Quiero decir, si simplemente codifico la contraseña, cualquiera puede simplemente mirar el código fuente para obtenerlos.

Sí, y hay otros problemas con este enfoque también. ¿Se confirmará este script en un repositorio de código fuente? Si es así, entonces la contraseña está ahí también. También puede ser una molestia actualizar este script cada vez que se necesita cambiar la contraseña.

  

¿Debo almacenarlo en una base de datos?

Esto no es mucho mejor que mantenerlo en el script, excepto que ahora al menos no irá al repositorio de código fuente. Podría confiar en el cifrado a nivel de la base de datos para evitar preocuparse por las claves de cifrado, pero los DBA aún tendrían acceso.

  

¿O debería cifrarlo y luego usar una contraseña maestra para desbloquearlo (no preferido)?

Esto no es diferente a solo pedir la contraseña real en tiempo de ejecución, excepto que sería mucho menos trabajo.

    
respondido por el jamiescott 26.12.2013 - 15:06
fuente
1

Hay ocasiones en que no es factible no codificar las contraseñas de texto sin formato, especialmente si el proyecto es pequeño y no tiene acceso a una bóveda de contraseñas. Cuando se enfrenta a una situación como esta, es mejor abordar el problema desde la perspectiva de limitar la exposición.

Uno de los enfoques que puede usar es el permiso, asumiendo que confía en las personas que usan el script. Ya que está en Linux, puede cambiar el archivo a 700, lo que significa que solo ese usuario en particular puede leer, escribir o ejecutar el archivo (asumiendo que otros usuarios no tienen permisos de root, por supuesto).

Sin embargo, este enfoque puede volverse complicado si el administrador se torna deshonesto, o si alguien encuentra una manera de aumentar sus privilegios. En tales casos, es mejor aumentar la dificultad de encontrar dicha contraseña. Una buena forma de hacerlo podría ser usar Python Freeze o Pyinstaller para crear un binario a partir de su script. Alguien que invierta la secuencia de comandos aún puede sacar la contraseña, pero es un esfuerzo mucho más difícil y, con suerte, desalienta a alguien que está buscando la fruta que cuelga (y posiblemente lo protege de administradores deshonestos). Me gustaría poder entrar en detalles sobre cómo se podría hacer esto, pero solo he visto a personas hacerlo; Nunca he usado estas herramientas. Pero esto le da la oportunidad de crear un binario distribuible que puede usar, por lo que no tiene que lidiar con la entrega de una credencial en todo el lugar.

    
respondido por el Karthik Rangarajan 27.12.2013 - 05:26
fuente

Lea otras preguntas en las etiquetas