Le variabili di ambiente sono immesse * direttamente * prima di un comando visibile ad altri utenti?

3

AGGIORNAMENTO: so che le variabili di ambiente sono generalmente sicure e conosco questa domanda . La mia domanda può essere vista dagli altri utenti se vengono inseriti come parte di un comando (stessa riga, senza punto e virgola), visto che le opzioni da riga di comando non sono sicure. Normalmente le vv env vengono immesse come un comando distinto, sulla propria linea.

Puoi inserire le variabili d'ambiente subito prima di un comando come questo:

# FOO=bar some-command

(cioè, tutto in una riga, no ; , non in comandi separati)

è FOO=bar visibile ad altri utenti (nei sistemi Unixici)?

    
posta Neil McGuigan 28.09.2016 - 00:17
fonte

3 risposte

2

Sono pienamente d'accordo con @AndreBorie, tu hai la cronologia della shell in cui il comando verrà registrato insieme alle variabili. per es.

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

Puoi disabilitarlo con set +o history per bash o il modo POSIX con set -o posix; set -o nolog (che non funziona in bash o in zsh in base ai miei test).

Su Linux hai altri due file di interesse: /proc/<PID>/environ e /proc/<PID>/cmdline . Il file di ambiente è sicuro da altri utenti:

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

Ma il file della riga di comando, non proprio:

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

Fortunatamente gli utenti di Linux ci sono stati e il file cmdline non registra le variabili di ambiente passate:

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

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

La cosa importante su /proc/<PID>/cmdline è che è da qui che ps prende le sue informazioni sulle linee di comando dei processi. Pertanto queste variabili non saranno visibili in qualcosa come ps aux o ps -afe .

    
risposta data 28.09.2016 - 02:05
fonte
1

Il comando potrebbe finire nella cronologia della shell. A seconda delle autorizzazioni del file di cronologia, potrebbe presentare un rischio per la sicurezza. Sarà anche scritto sul disco che potrebbe rappresentare un rischio per i dati segreti transitori che non dovrebbero esistere ovunque una volta usato (si pensi alle chiavi di sicurezza forward perfette di TLS).

Puoi inibire questo comportamento configurando la tua shell per disabilitare la cronologia o anteponendo il comando con uno spazio.

    
risposta data 28.09.2016 - 01:10
fonte
0

No. Le variabili in un ambiente di programma devono essere esportate in modo esplicito per essere incorporate in un ambiente di processi figlio e ogni processo può solo leggere il proprio ambiente. Un'eccezione a questo è dove il sistema operativo espone l'ambiente come nel caso del file system pseudo proc di linux. Qui un ambiente di processi può essere letto come un file, supponendo che le autorizzazioni lo consentano, tuttavia i file predefiniti sono i 0600 e possono essere recuperati solo dall'URL del processo a cui appartiene il file.

L'elaborazione della dichiarazione viene gestita dalla shell stessa e non crea intrinsecamente un nuovo processo leggibile utilizzando (ad esempio) ps ; se la variabile fosse assegnata da un nuovo processo, il suo valore andrebbe perso quando quel programma usciva e il suo ambiente distrutto.

    
risposta data 28.09.2016 - 00:42
fonte

Leggi altre domande sui tag