¿Se ingresan las variables de entorno * directamente * antes de que un comando sea visible para otros usuarios?

3

ACTUALIZACIÓN: Sé que las variables de entorno son generalmente seguras y estoy familiarizado con esta pregunta . Mi pregunta es si otros usuarios pueden verlos si se ingresan como parte de un comando (la misma línea, sin punto y coma), ya que las opciones de la línea de comandos no son seguras. Normalmente env vars se introducen como un comando distinto, en su propia línea.

Puede ingresar variables de entorno justo antes de un comando como este:

# FOO=bar some-command

(es decir, todo en una línea, sin ; , no en comandos separados)

¿

es FOO=bar visible para otros usuarios (en sistemas Unixy)?

    
pregunta Neil McGuigan 28.09.2016 - 00:17
fuente

3 respuestas

2

Estoy totalmente de acuerdo con @AndreBorie, tiene el historial de shell donde se registrará el comando junto con las variables. por ejemplo

$ FOO=bar echo 3
3
$ history 2
  674  FOO=bar echo 3
  675  history 2

Puedes deshabilitar eso con set +o history para bash o la forma POSIX con set -o posix; set -o nolog (que no funciona en bash o zsh según mis pruebas).

En Linux tienes dos archivos más de interés: /proc/<PID>/environ y /proc/<PID>/cmdline . El archivo de entorno está a salvo de otros usuarios:

$ ls -l /proc/self/environ 
-r-------- 1 grochmal users 0 Sep 28 00:51 /proc/self/environ

Pero el archivo de línea de comandos, no del todo:

$ ls -l /proc/self/cmdline 
-r--r--r-- 1 grochmal users 0 Sep 28 00:51 /proc/self/cmdline

Afortunadamente, la gente de Linux ha estado allí y el archivo cmdline no registra las variables de entorno aprobadas:

$ cat -v /proc/self/cmdline 
cat^@-v^@/proc/self/cmdline^@

$ FOO=bar cat -v /proc/self/cmdline 
cat^@-v^@/proc/self/cmdline^@

Lo importante acerca de /proc/<PID>/cmdline es que es desde aquí que ps toma su información sobre las líneas de comando de los procesos. Por lo tanto, estas variables no se verán en algo como ps aux o ps -afe .

    
respondido por el grochmal 28.09.2016 - 02:05
fuente
1

El comando puede terminar en el historial de tu shell. Dependiendo de los permisos del archivo histórico, puede presentar un riesgo de seguridad. También se escribirá en el disco, lo que puede suponer un riesgo para los datos secretos transitorios que no se supone que existan en cualquier lugar una vez que se utilicen (piense en las claves de secreto hacia delante perfectas de TLS).

Puedes inhibir este comportamiento configurando tu shell para deshabilitar el historial o añadiendo el comando con un espacio.

    
respondido por el André Borie 28.09.2016 - 01:10
fuente
0

No. Las variables en un entorno de programa deben exportarse explícitamente para incorporarse a un entorno de procesos hijo, y cada proceso solo puede leer su propio entorno. Una excepción a esto es cuando el sistema operativo expone el entorno como es el caso en el sistema de archivos pseudo de linux. Aquí, el entorno de un proceso se puede leer como un archivo, asumiendo que los permisos lo permiten, sin embargo, por defecto, los archivos son 0600, es decir, solo son recargables por el uid del proceso al que pertenece el archivo.

El procesamiento de la declaración es manejado por el propio shell y no crea intrínsecamente un nuevo proceso legible usando (por ejemplo) ps ; si la variable fuera asignada por un nuevo proceso, su valor se perdería cuando el programa saliera y su entorno fuera destruido.

    
respondido por el symcbean 28.09.2016 - 00:42
fuente

Lea otras preguntas en las etiquetas