È sicuro aggiungere. al mio PERCORSO? Come mai?


49

Ho visto la gente menzionare in altre risposte che è una cattiva idea includere l'attuale directory di lavoro (' .') nella $PATHvariabile di ambiente, ma non sono stato in grado di trovare una domanda che affronti specificamente il problema.

Quindi, perché non dovrei aggiungere .al mio percorso? E se, nonostante tutti gli avvisi, lo faccio comunque, a cosa devo fare attenzione? È più sicuro aggiungerlo alla fine piuttosto che all'inizio?


Risposte:


39

Se sei l'unico utente della macchina, va bene, purché tu sappia cosa stai facendo. La preoccupazione generale è che avendo la tua directory corrente dentro PATH, non puoi vedere i comandi come un elenco costante. Se devi eseguire uno script / programma dalla tua directory corrente, puoi sempre eseguirlo esplicitamente anteponendone ./il nome (dicendo al sistema "Voglio eseguire questo file dalla mia directory corrente").

Dì, ora hai tutti questi piccoli script in tutto il tuo filesystem; un giorno eseguirai sicuramente quello sbagliato. Quindi, avere il tuo PATHcome elenco predefinito di percorsi statici è tutto sull'ordine e salvarsi da un potenziale problema.

Tuttavia, se hai intenzione di aggiungere .al tuo PATH, ti suggerisco di aggiungerlo alla fine dell'elenco ( export PATH=$PATH:.). Almeno non sovrascriverete i binari dell'intero sistema in questo modo.

Se sei un root sul sistema e hai il sistema esposto agli account di altri utenti, avere .in PATHè un enorme rischio per la sicurezza: puoi cdalla directory di alcuni utenti ed eseguire involontariamente uno script dannoso lì solo perché hai sbagliato a scrivere qualcosa o uno script che ha lo stesso nome di un binario a livello di sistema.


1
+ Accetta per la teoria di base e per menzionare che i problemi possono ancora esistere anche quando sei l'unico utente sul sistema. Entrambe le risposte sollevano punti eccellenti. Aggiungerò che ogni volta che condividi directory con un altro utente, aumenta il rischio, che tu sia root o no.
Jander,

6
anche come unico utente sulla macchina: ogni volta che si estrae un tar non attendibile, può inserirlo lsnella directory corrente. poi corri lsper ispezionare i file estratti e hai già eseguito il codice dannoso.
lesmana,

35

Il rischio è che qualcuno inserisca un eseguibile dannoso nella directory che risulta essere quello corrente.

Il caso peggiore si verifica quando:

  • sei registrato come root poiché il comando malevolo ha un potere di danno illimitato
  • .è all'inizio del PERCORSO poiché i comandi standard possono essere sovrascritti senza che te ne accorga (in genere uno lsche potrebbe nascondersi dall'elenco).

Il rischio è molto più basso se si è registrati come utente normale e si ha .la fine del PERCORSO ma esiste ancora:

  • qualcuno potrebbe scoprire di aver sbagliato a digitare un comando e installarne uno corrispondente
  • qualcuno potrebbe installare un comando falso con il nome di uno che non è installato.

Si noti che in ogni caso, il rischio è ancora presente anche se si è l'unico utente della macchina. Un software dannoso verrebbe installato se, ad esempio, vi capita di estrarre un archivio scaricato da un sito compromesso.


15
Installa slper vedere con che frequenza si verifica il punto 3.
Giordania,

oppure alias l=`ls`.
Anko,

non deve essere dannoso. Mi aspetto lsdi ottenere un elenco di directory, ma alcuni progetti scaricati potrebbero contenere uno lsscript nella cartella del progetto principale come collegamento a qualcos'altro. lsè probabilmente un cattivo esempio ma posso certamente immaginare edi modificarlo, ddi debug, mdi make, bdi build. Ne ho alcuni me stesso a livello globale. Se scrivo mmi aspetto che make venga lanciato (il mio collegamento), non alcuni script locali chiamati mper l'esecuzione.
Gman,

@gman Right. Un comando non dannoso potrebbe involontariamente avere effetti negativi. Si noti che i comandi / alias a lettera singola sono stati disapprovati sin dall'inizio di Unix a causa dell'elevato rischio di errori di digitazione. Quelli rari standard sono we [.
jlliagre,

3

Anche se stai sempre molto attento a ciò che scrivi, metterlo .al tuo PATH, anche alla fine, è ancora insicuro perché alcuni programmi cambiano la directory corrente in /tmp(che è scrivibile dal mondo) e potrebbero anche provare a eseguire utility che non sono effettivamente installate, così inadempiendo a ciò che è dentro /tmp. In questo caso, questo è un vettore di attacco.

Nota anche che non c'è molto inconveniente di evitare .in PATH, perché ./è facile da digitare (in particolare su tastiere come QWERTY, dove questi caratteri sono su tasti consecutivi e non hanno bisogno di Maiusc) e l'utilizzo ./aiuterà anche il completamento, risparmiando potenzialmente i tasti alla fine.

Se vuoi davvero essere in grado di digitare i comandi dalla directory corrente, allora le shell moderne (come zsh, con il suo command_not_found_handler) possono fornire funzionalità per farlo in modo sicuro, cioè permettendoti di aggiungere tutti i controlli di sicurezza che vuoi nel gestore, prima che il il comando viene eseguito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.