¿Las variables de entorno son visibles para los usuarios sin privilegios en Linux?

12

Estoy tratando de determinar si, en Linux, las variables de entorno para un proceso son observables por otros usuarios (no root).

El caso de uso inmediato es poner secretos en las variables de entorno. Esto se discute en muchos lugares de la web como inseguro, pero no he podido concentrarme en el punto exacto de exposición en Linux.

Nótese que estoy no hablando de poner secretos en archivos de texto en claro. También en cuenta que estoy no hablando de la exposición a la cuenta de root (I Ver intentar secretos esconderse de un adversario con la raíz como un imposible).

Esta pregunta parece abordar la mía, con comentarios que clasifican las variables de entorno como completamente sin seguridad, o simplemente ofuscadas, pero ¿cómo se accede a ellas?

En mis pruebas, un usuario no privilegiado no puede observar variables de entorno para otro usuario a través de la tabla de proceso ('ps auxwwe'). Los comandos que establecen las variables de entorno (por ejemplo, exportar) son componentes integrados de shell que no llegan a la tabla de proceso y, por extensión, no están en / proc / $ pid / cmdline. / proc / $ pid / environment solo es legible por el UID del propietario del proceso.

Quizás la confusión es entre diferentes sistemas operativos o versiones. Varias fuentes (recientes) en la web denuncian la inseguridad de las variables de entorno, pero mi comprobación de diferentes versiones de Linux parece indicar que esto no es posible al menos hasta 2007 (probablemente más, pero no tengo cuadros en mano para probar).

En Linux, ¿cómo puede un usuario no privilegiado observar variables de entorno para los procesos de otro?

Joshua Miller
fuente

Respuestas:

7

Como Gilles explicó en una respuesta muy completa a una pregunta similar en security.stackexchange.com, los entornos de proceso solo son accesibles para el usuario que posee el proceso (y la raíz, por supuesto).

revs guntbert
fuente
¿Algún enlace a la publicación que mencionaste?
cyc115
@ cyc115 haga clic en la palabra "respuesta" :)
guntbert
6

Las variables de entorno son bastante seguras. La pregunta a la que se vinculó es que si el sistema se ve comprometido, el único beneficio de seguridad del uso de variables de entorno sobre un archivo de configuración es la oscuridad. Lo que significa que si alguien ha obtenido acceso de root, puede acceder a ambos.
También es discutible si el uso de variables de entorno para datos secretos se considera 'oscuro'. Esta es una práctica muy común y, por lo tanto, no lo consideraría así.

Solo puede acceder a los datos almacenados en una variable de entorno en 2 lugares:

1. El entorno de ejecución del proceso.

Cuando el proceso se está ejecutando, se puede acceder a las variables de entorno de ese proceso /proc/$PID/environ. Sin embargo, solo el usuario propietario del proceso, o root, puede acceder a ese archivo.

2. La fuente de las variables de entorno.

Si está utilizando un guión de inicio, y las variables se almacenan en ese guión de inicio, las variables pueden obtenerse, por supuesto, leyendo ese guión.

O si las variables de entorno provienen de otro lugar, donde sea que esté.

3. Salida 'ps'

Sí, sé que dije 2, y en cualquier sistema decente, será 2. Sin embargo, si el administrador no sabe lo que está haciendo, es posible abrir una tercera avenida.

Si el proceso se inicia a través de algo como sh -c 'cd /foo/bar; POP=tart /my/executable', entonces ese shproceso será visible en ps:

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10
Patricio
fuente
1
También debe mencionar el emodificador a ps. También solo permite ver el entorno de los procesos que posee el usuario.
Barmar
1
Otra ubicación posible: si la variable de entorno se configuró a través del shell (por ejemplo export FOO=bar), también puede aparecer en el archivo de historial (por ejemplo ~/.bash_history) si el usuario no tomó precauciones para evitar que se guarde o elimine.
tavnab