16 votos

¿Hay una forma segura de almacenar las contraseñas utilizadas por ssh mediante una secuencia de comandos?

Así que lo primero, yo sé, yo debería utilizar la tecla auth con SSH. No hay necesidad de explicar a mí.

La cuestión aquí es que tengo una (gran) grupo de servidores, y necesito tener una secuencia de comandos de ser capaz de conectarse a cada uno de estos.

Yo uso una clave de autenticación cada vez que puedo, sin embargo no es posible en todos los servidores (no tengo control sobre esto). Para SSH con el inicio de sesión, o a veces telnet.

Así que para algunos yo sólo almacena las contraseñas en una base de datos, y mi script ir a tomar cuando sea necesario. Problema es que no se ve muy segura de hacerlo de esa manera. Hay una manera de hacer que sea un poco más seguro?

Como algunos específicos de la forma de almacenamiento?

24voto

goncalopp Puntos 655

Si la secuencia de comandos se puede conectar a cualquiera de los servidores, cualquier persona con acceso a la secuencia de comandos (o el acceso privilegiado a la máquina, ejecute la secuencia de comandos) se puede conectar a cualquiera de los servidores.

Si la secuencia de comandos debe ejecutarse de forma autónoma, todas las apuestas están apagadas. La respuesta a esta pregunta es no, no hay absolutamente forma segura de almacenar las contraseñas en un entorno. No hay absolutamente seguro y la manera práctica de hacer cualquier cosa.

En lugar de tratando de evitar lo inevitable, usted debe centrarse en la defensa en profundidad.

Fristly, por supuesto, usted debe proteger las contraseñas de manera adecuada. Esto generalmente significa que guardarlos en un archivo independiente de la secuencia de comandos y la configuración restrictiva permisos del sistema de ficheros. Eso es todo lo que puedes hacer en este frente, desde una perspectiva de seguridad.

Otras medidas que se pueden agregar a la oscuridad para el proceso. El cifrado de las contraseñas hará que el atacante necesita buscar la clave de descifrado. El uso de algún tipo de sistema operativo de almacenamiento protegido en general, protege contra otros usuarios el acceso a su clave (por lo que no ofrece ninguna ventaja sobre el sistema de ficheros permisos, aparte de ser complejo de ataque y uso). Estas medidas se demora un ataque, pero ciertamente no prevenir contra un atacante determinado.


Ahora, vamos a tratar las contraseñas como público por un momento. ¿Qué se puede hacer para mitigar el daño?

Una vieja y probada solución es restringir lo que esas credenciales puede hacer. En un sistema UNIX, una buena manera de hacer esto es para la instalación de un usuario independiente para el guión y el límite de las capacidades del usuario, tanto en el acceso y el acceso a los servidores. Usted puede limitar las capacidades de los usuarios en el SSH nivel, en la shell de nivel o, posiblemente, el uso de un Control de Acceso Obligatorio como mecanismo de SELinux.

Algo que puede que también desee considerar es mover lógica de secuencias de comandos en los servidores. De esa manera, se obtiene una pequeña interfaz que es más fácil de controlar, y especialmente a...

Monitor. Siempre supervise el acceso a los servidores. Preferentemente, el registro y autenticación de los comandos que se ejecutan a un anexar sólo registro. No te olvides de supervisar el archivo de script de cambios de uso auditd, por ejemplo.


Por supuesto, muchos de estos mecanismos no son útiles si usted no tiene ningún control sobre los servidores, como tu pregunta parece implicar. Si ese es el caso, yo le aconsejo ponerse en contacto con la gente de la administración de los servidores y hacerles saber acerca de su guión y el potencial para la seguridad peligros.

14voto

Jenny D Puntos 14396

La respuesta corta es: No.

La respuesta larga es: No, no hay forma completamente segura. (Esto incluye las variables de entorno, que puede ser accedida por otros en el servidor.) Lo más cerca que se puede obtener es almacenarlos en algún formato cifrado - keepass, un GPG-archivo cifrado, o algo más a lo largo de esas líneas. Pero en algún momento usted necesita para descifrar la contraseña, de modo que la secuencia de comandos puede utilizar, y en ese momento va a ser vulnerables.

En otras palabras, usted necesita tomar un largo y duro mirar en profundidad de la seguridad, tanto en el servidor desde el que se ejecuta el script, en la red y en los servidores de destino.

0voto

Jens Timmerman Puntos 498

Usted podría cifrar las contraseñas en tu db con una segunda contraseña y guardar esta contraseña en un aparte (3º) de la máquina y tener un sistema en el lugar en donde la secuencia de comandos que necesita para contraseñas de la base de datos se conecta por primera vez este 3 de la máquina para obtener la contraseña de descifrado, descifra la contraseña en la base de datos con la contraseña que recibió de la 3ª de la máquina y no es el trabajo.

Por supuesto, esto no añade ningún extra de seguridad, un atacante con privilegios suficientes, podría simplemente solicitar la contraseña a partir de las 3 de la máquina.

Pero el punto es que una 3ra parte podría controlar el 3 de máquina, por ejemplo, tu jefe o responsable de seguridad, o de la 3ª parte en el control de los servidores que no controlas.

De esta manera usted puede decirles que, si alguna vez tiene un problema, si renuncia a su trabajo y que no confía en el hombre sustitución de usted, o que sólo quieren que sus scripts para que deje de tener acceso a sus máquinas, se puede tirar del enchufe en la 3ª de la máquina, y los scripts ya no tiene acceso a las contraseñas.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: