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?
fuente
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 esesh
proceso será visible enps
:fuente
e
modificador aps
. También solo permite ver el entorno de los procesos que posee el usuario.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.