2010-11-09 17 views
5

Solo me pregunto si hay alguna manera de asegurar las variables de entorno en un sistema * nix de modo que no se puedan leer desde ningún archivo de texto plano, sino que esté disponible en el entorno.Linux - variables de entorno de seguridad

Sé que siempre podemos usar los permisos de nivel de sistema de archivos para .bashrc/.bash_profile, pero ¿qué pasa si ciertas variables (como las contraseñas de db) deben ocultarse por completo?

Una forma de hacerlo sería escribir algún tipo de script de programa/perl para:

  1. entradas reciben desde un archivo de texto plano y cifrar/hash de los contenidos (y luego deshacerse del archivo de texto plano)
  2. uso de la misma para descifrar el tiempo de ejecución de archivos y exportar los valores de la salida descifrado (sé que este programa puede ser utilizado para volcar los valores desencriptados en alguna parte, pero no estoy preocupado por eso en este momento)

¿Hay alguna otra b etter y forma más obvia de lograr esto?

Gracias!

-Gaurav

+3

Tal vez sería mejor que le preguntara por el error del servidor. – rook

Respuesta

2

quién estás asegurando de ellos?

La respuesta corta es "No". El usuario puede ver sus propias variables de entorno a menos que las embotelle de forma tan completa que nunca puedan acceder al shell. Pero, ¿qué editor les dejas usar? ¿Dijiste 'vim'? Oh, tienen acceso al caparazón, después de todo.

5

De ninguna manera. Incluso si lo oculta desde el archivo de texto, todavía está disponible en /proc/<pid>/environ (linux) o ps e (otro Unix).

+1

Esto no es estrictamente cierto: el archivo 'environ' no es visible para otros usuarios no root en las versiones modernas del kernel. –

+0

El punto es que es seguro para el usuario que definió las variables de entorno. Solo root y el propietario del proceso que definió las variables de entorno tienen acceso a '/ proc/$ pid/environ'. Sin embargo, también puede haber casos en los que lo desee del usuario mismo: un almacén de claves podría elegir transmitir la contraseña/inicio de sesión a otra aplicación sobre variables de entorno. El usuario podría descubrir contraseñas a través de este método. Tengo una pregunta similar aquí: http://unix.stackexchange.com/a/206219/117221 – YoYo

+0

¿Puedes simplemente desarmar la variable una vez que hayas terminado de usarla? ¿Seguirá apareciendo en '/ proc//environ'? – richizy

0

Es posible, pero muy indirecto. Debería guardar los datos confidenciales en un archivo legible solo por el proceso que inicia el proceso que lo necesita en una variable de entorno. /proc/###/environ solo es legible por el usuario, ya que el proceso se está ejecutando, por lo que los datos están a salvo allí.

Pero, más directamente, el método adecuado para ocultar cosas como las contraseñas de la base de datos es guardarlas en un archivo legible solo por el usuario y/o grupo que ejecuta el programa que los lee. No se moleste en pasarlos en una variable de entorno (a menos que realmente lo necesite por algún motivo), simplemente haga que el proceso los lea desde el archivo.

Por ejemplo, si está ejecutando un sitio web y las secuencias de comandos CGI/binarios se inician por Apache, que se ejecuta como usuario: Grupo apache:apache, guardar la contraseña de la base de que el CGI necesita en un fichero de su propiedad apache:apache con permisos como rw-r----- (640). De esta forma, para que alguien lea el archivo, debe ser root, miembro del grupo apache o ejecutar el programa de lectura con un usuario o grupo efectivo de apache.

El único beneficio de usar variables de entorno es que puede eliminarlas del entorno antes de iniciar un subproceso, mientras que si el subproceso debe ser propiedad del mismo usuario, puede leer el archivo protegido.

Cuestiones relacionadas