24 votos

Es seguro para almacenar crítica contraseñas en el servidor de variables de entorno?

Tengo un clúster de servidores, cada uno con los archivos de configuración que contienen contraseñas de texto sin formato para los sensibles, los sistemas de misión crítica (colas de mensajes, almacenes de datos, y otros servicios).

Algunas personas mover crítica de las contraseñas de los archivos de configuración en una variable de entorno de las cuentas de usuario en virtud de la cual el servidor de procesos de ejecución. De esta manera, los archivos de configuración pueden ser comprometidos para el control de la versión, y el administrador del sistema sólo necesita crear un entorno adecuado a la variable cuando el servidor está configurado. Naturalmente, el acceso a las cuentas que ejecutar estos servicios es muy limitada.

Es esta realmente la mejor manera para evitar las contraseñas en texto sin formato de los archivos de configuración, o hay una mejor manera?

11voto

Robert Vabo Puntos 158

Si estás en un sistema Linux, mira en /proc/*/environ y decidir si las variables de entorno son un buen lugar para almacenar la información sensible o no. /proc/self es el proceso actual:

$ tr '\0' '\n' < /proc/self/environ
USER=me
LOGNAME=me
HOME=/home/me
PATH=/usr/bin:/bin:/usr/sbin:/sbin
MAIL=/var/mail/me
SHELL=/usr/bin/sh
SSH_CLIENT=1.2.3.4 58195 22
SSH_CONNECTION=1.2.3.4 58195 7.8.9.0 22
SSH_TTY=/dev/pts/1
TERM=xterm

No importa que la cosa de la configuración de la variable de entorno es, probablemente, la lectura de un archivo en algún lugar.

La cosa a recordar es que el uso de una contraseña-la contraseña está disponible para el programa. Si esta contraseña no es proporcionado por un usuario escribe en cada vez que un programa de necesidades, que la contraseña debe ser accesible basado en sólo el programa de acceso. Usted puede cifrar la contraseña a nivel local y el programa de descifrar por medio de una clave, pero todo lo que hace es ocultar la contraseña en contra de la divulgación accidental; alguien que tiene el mismo acceso que el programa puede hacer las mismas cosas que puede hacer el programa, que incluye la lectura de la clave de cifrado.

La manera correcta de hacer esto es hacer que la aplicación se ejecute como una cuenta restringida, y guarde la contraseña en un archivo protegido con el sistema de archivos a nivel de permisos. Esperemos que se puede "incluir" un archivo o similar con el fin de mantener la contraseña de un sistema de control de versiones (suponiendo que el VCS no tiene controles de seguridad). Para proteger contra la divulgación involuntaria, de ocultar la contraseña que usted desee - codificar en base64, el uso de pgp para cifrar, lo que tiene sentido en el servidor del programa conjunto de opciones. Si usted está escribiendo un programa para hacer esto, de lo mejor que puede hacer es pedir a un usuario para que la contraseña sólo cuando sea necesario y, a continuación, purgar la contraseña de la memoria tan pronto como se usa.

8voto

allquixotic Puntos 24238

En última instancia, si usted tiene los datos que necesita para que se lea así como por escrito, usted va a proteger algo con una contraseña (o si eres muy paranoico, con un hardware físico de la tarjeta inteligente y un PIN), no importa cómo muchas capas de cifrado que tiene.

Esto se reduce a la cuestión básica de la seguridad del sistema frente conveniencia. Usted puede agregar la "defensa en profundidad" por tener montones y montones de capas de controles de seguridad que un actor malicioso tendría que el incumplimiento con el fin de llegar a los "bienes", pero luego, cuando un actor legítimo quiere leer o cambiar algunos datos, que tienen que ir a través de un montón de aros. La alternativa es el texto de contraseñas en archivos de texto.

Lo que yo haría si yo realmente quería proteger cierta información en un sistema de misión crítica:

  1. El uso de Cifrado de Disco Completo, por lo que el contenido de todo el almacenamiento persistente está cifrada.

  2. Restringir el acceso físico a las máquinas. Bloqueo de la máquina del chasis con un seguro mecanismo de cierre y control de acceso físico a las teclas. Alquiler de músculo (guardias armados) para ser guardianes para el acceso.

  3. Aplicar de grano fino de Control de Acceso Obligatorio (MAC) en el sistema operativo del dispositivo. Usted puede comenzar con algo como SELinux en GNU/Linux y la puso a la aplicación y, a continuación, adaptar la política a las necesidades exactas de la producción de software, permitiendo a las cuentas exactamente (y sólo) los permisos que necesitan para los archivos que necesitan.

  4. Si usted va a tener el sistema de contraseñas, y el control de versión de los archivos de configuración, usted realmente desea evitar el posible error de tener un texto de contraseña, equivocadamente, comprometidos con el control de versión, ya que puede ser difícil de desprender un filtrado contraseña de un VCS caché. Las variables de entorno son una de varias opciones viables para que. El otro es un indicador de solicitud de contraseña cuando se inicia el programa, pero, a continuación, reiniciar el equipo y restaurar el estado de funcionamiento es un esfuerzo manual y no se puede hacer de forma autónoma, por lo que hay que comodidad vs seguridad de nuevo.

  5. Asegúrese de tener los especialistas de redes en la mano para tomar el cuidado de los permisos del firewall, para minimizar su exposición a un ataque a través de la red. De auditoría (pruebas de penetración, así como whitebox probar el código) cualquier software que interactúa con sistemas externos, especialmente de la Internet pública. "Interfaces" no sólo incluye conexiones de red directas, sino también la lectura o la escritura de "no confianza" de los datos (datos cuya bytes se originó desde fuera de la RAM/disco/CPU del servidor seguro).

Esta no es una lista completa, pero sobre todo el punto 4 es probablemente relevantes para usted, aunque si no se realizan, al menos, los pasos 1 a 3, la consideración de que el punto 4 y en el punto 5 no va a ayudar mucho, porque su sistema no es seguro en una bastante nivel fundamental.

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: