Ordinamento della variabile di ambiente PATH

6

Qui localmente su Ubuntu 14.04, il mio $PATH assomiglia a qualcosa del tipo:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Quando definisco manualmente il percorso per i lavori cron o nella configurazione di provisioning di Puppet / Ansible, solitamente capovolgo la variabile di ambiente PATH in questo modo:

PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"

Esiste una best practice sulla sicurezza per ordinare le voci nella variabile di ambiente PATH ? Suppongo che sarebbe meglio preferire le voci in una directory sbin sulle voci in una directory bin . Ho notato che su determinate caselle RHEL, PATH omette /sbin per impostazione predefinita.

Detto questo, quale sarebbe la migliore prassi di sicurezza per la variabile di ambiente PATH per:

  1. Account Unix utente
  2. Account Unix amministratore.
  3. Processi cron / processi di gestione della configurazione.
posta Naftuli Kay 15.03.2016 - 21:38
fonte

1 risposta

6

Se esiste una directory nel percorso di ricerca in cui qualcuno di cui non ti fidi potrebbe scrivere file, la directory non dovrebbe trovarsi nel percorso, punto.

L'ordine conta solo se un comando è presente in più di una voce nell'elenco. Quindi, l'unico caso da considerare è quando qualcuno in modo fidato ha organizzato una voce che ne oscura un altro, deliberatamente o meno.

Se è stato deliberato, l'ordine dovrebbe essere quello di cercare le directory in ordine di gestione locale: in genere ciò significa prima ~/bin o equivalente se in esecuzione con un account che ha tale directory (non applicabile alla maggior parte degli account di sistema) , quindi /usr/local/bin , quindi le directory gestite dal gestore pacchetti /usr/bin/ e /bin .

In linea di principio, non dovrebbe esserci ombra tra le directory sbin e bin . sbin delle directory sono per i comandi che sono utili solo per un amministratore di sistema (questo è il motivo per cui queste directory normalmente non si trovano nel percorso di utenti diversi da root). In linea di principio potrebbe esserci un nome di comando per il quale si desidera eseguire un eseguibile diverso come root, quindi sbin directory dovrebbe essere avanti rispetto alla corrispondente directory bin - altrimenti …/sbin/foo non verrebbe mai eseguito poiché sarebbe ombreggiato da …/bin/foo per tutti.

L'unico caso in cui vi è un'ambiguità è che potrebbe esserci stato uno shadowing accidentale. In quel caso non c'è una risposta ovvia. Generalmente, non ha molto senso inserire /usr/local/bin dopo /usr/bin : se non vuoi la scelta dei comandi dell'amministratore locale, non mettere affatto /usr/local/bin nel percorso di ricerca (e rimuovere /usr/local/lib dal percorso di ricerca della libreria, ecc.).

Tra /usr/bin e /bin , in linea di principio, si potrebbe voler ombreggiare un eseguibile da /bin (versione piccola solo per il tempo di avvio) con uno da /usr/bin (versione grande da un% co_de montato separatamente % partizione), ma piccole partizioni root con un /usr separato sono una pratica molto rara al giorno d'oggi. Era una pratica più comune nei giorni in cui i sistemi operativi utilizzavano spazio su disco significativo, ma anche in questo caso l'ombreggiamento delle utilità in /usr con le versioni da /bin era raro. L'altro ordine, ponendo prima /usr/bin , ha un leggero vantaggio in termini di prestazioni ( /bin di solito è molto più piccolo). Sulla maggior parte dei sistemi non c'è una strong ragione per preferire un ordine all'altro. (Su alcuni sistemi /bin e /bin sono la stessa directory, ma non dovresti dare per scontato che a meno che tu non lavori solo su versioni recenti di una delle distribuzioni che fanno ciò.)

/usr/bin (o PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ) è in genere l'impostazione giusta per i lavori eseguiti come root e PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin per i lavori non eseguiti come root. Non vedo alcuna buona ragione per deviare da quella (tranne per PATH=/usr/local/bin:/usr/bin:/bin rispetto a /usr inversione) eccetto per far fronte a variazioni locali (es. Una directory specifica del sito su * BSD distinta dai pacchetti installati in / ). Per quanto riguarda la sicurezza, non importa, ma in termini di funzionalità, mettendo /usr/local davanti a /usr/local e /usr è indifferente o necessario.

    
risposta data 15.03.2016 - 23:29
fonte

Leggi altre domande sui tag