Pregunta

Estoy trabajando en el script de Perl que usa Espere para iniciar sesión a través de telnet en máquinas remotas (don No preguntes, tengo que usar telnet). También realizo operaciones de inicio de sesión de p4 según sea necesario y uso para canalizar las contraseñas correctas. Por ahora acabo de leer las contraseñas de la variable de entorno de texto sin cifrar, es decir, export PASSWORD = password , que sé que no es una buena medida de seguridad.

¿Cuál es la mejor manera de almacenar contraseñas para scripts como estos que necesitan muchas contraseñas para múltiples sistemas? ¿Encriptado en un archivo de texto de alguna manera? ¿O algo más?

Tenga en cuenta que no puedo cambiar fácilmente los sistemas existentes, como, por ejemplo, realmente no puedo instalar SSH o algo así.

¿Fue útil?

Solución

Probablemente, su mejor manera es colocar las contraseñas en un archivo separado y bloquear la seguridad de ese archivo para que solo usted tenga acceso de lectura. Desafortunadamente, si almacena una contraseña cifrada en su script, también tendrá que almacenar el método de descifrado, para que un atacante pueda ejecutar el descifrado y recuperar su contraseña.

Otros consejos

Anteriormente hubo una pregunta muy similar, consulte mi respuesta a ello.

En resumen, un humano tiene que iniciar la cadena de confianza. Todo lo demás es ofuscación.

¿Por qué preocuparse por las contraseñas en el script si está usando telnet? A un presunto atacante le resultará más fácil o más fácil capturar los datos desde el cable que desde la máquina remota, y en todo caso, no hay nada que pueda hacer al respecto.

Esto parece un caso de tratar de poner barras en la ventana y dejar la puerta abierta.

Como ya está utilizando expectativa, debería considerar la posibilidad de redirigir un gpg -d en un archivo cifrado que contiene sus contraseñas. Almacenar contraseñas en una variable de entorno del sistema es simplemente un error. La contraseña que se usaría para descifrar el archivo gpg se ingresaría al inicio, luego cargaría todas las contraseñas del archivo y ejecutaría tus cosas. Luego, listo, las contraseñas solo existen en texto sin formato mientras la aplicación se está ejecutando.

Editar solo como una nota al margen, poner cualquier contraseña en un script es una maldad; recuerde que el script es solo un archivo de texto simple que hace que ver la contraseña sea tan fácil como cualquier otra cosa. Del mismo modo, incluso las aplicaciones que compila se pueden revertir con " cadenas " que puede buscar cadenas que están contenidas en el código (generalmente contraseñas).

En la posibilidad remota de que estés usando Mac OS X, encontré esta ingeniosa forma de obtener nombres de usuario y contraseñas de su Llavero .

Actualización : el enlace parece haberse roto a partir del 22 de julio de 2013. El siguiente fragmento de código de bash muestra cómo utilizo la técnica (para descargar datos de ventas de iTunes):

domain="itunesconnect.apple.com"
user="user@example.com"
pass=$(security find-internet-password -ws $domain -a $user)

Me gusta la solución mencionada ya de poner las contraseñas en un archivo separado. Además, podría codificar las contraseñas reales, de manera muy similar a lo que se hace en / etc / passwd. Aunque podría usar la misma clave de hash para todos ellos, dependiendo de cómo se aplique su aplicación. Obviamente, el inconveniente de esto es que alguien tiene que ingresar la clave hash para ejecutar su script y eso no va a funcionar en un entorno por lotes.

Un lugar para comenzar a aprender algo sobre el hash es de este stackoverflow pregunta

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top