Quale ambiente ottengo con sudo?


15

Quando eseguo sudo, cosa succede esattamente al mio ambiente?

Quando corro sudo command, non sembra vedere l'ambiente mio o root. Ad esempio, il mio percorso per entrambi include /usr/local/bin, ma se provo a eseguire uno dei programmi senza il percorso completo, non riesce.

Pensavo che sudo funzionasse come root, e quindi ottenesse l'ambiente di root. Esiste un modo diverso che bash esegue su sudo rispetto a root o al mio normale utente?

MODIFICARE:

Ho usato di sudo -irecente, ma recentemente ha causato problemi perché la mia directory di lavoro corrente è impostata su /root. Questo è come previsto (sorta), ma ancora non capisco perché sudo non stia riconoscendo i miei eseguibili /usr/local/bin.

MODIFICARE:

Sto eseguendo Fedora 15.


Quale sistema operativo stai usando (se Linux, quale distribuzione)? Esistono (anche) molti modi per configurare PATH, e talvolta non è facile trovare chi lo sovrascrive per ultimo. Potrebbe essere un'impostazione di sistema (ad esempio in PAM), sudo stesso o uno script di profilo successivo.
Gilles 'SO- smetti di essere malvagio' il

@ Gilles- Buon punto. Ho aggiunto il mio sistema operativo. L'ho notato davvero solo su Fedora (usavo Ubuntu), ma pensavo che fosse perché non aggiungevano molta comodità.
beatgammit,

Risposte:


6

Non conosco i valori predefiniti su Fedora, ma sui sudovalori predefiniti di Debian l'uso secure_pathdell'opzione con un valore predefinito di /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin.

Ciò significa che il percorso viene modificato in quel valore ogni volta che lo usi sudo; ma quando lo usi sudo -i, il percorso viene successivamente modificato dai file RC dell'utente root.


Non sapevo secure_pathdell'opzione. L'impostazione predefinita non includeva /usr/local/binsulla mia installazione. Grazie, questo ha davvero aiutato a chiarire le cose!
Beatgammit,

4

Puoi verificarlo abbastanza facilmente con cose come

Confronta l'output di

sudo env 
env

E cose del genere

sudo whoami 
whoami

In questo modo puoi provare a scoprire cosa manca nella tua configurazione.


Fantastico, non lo sapevo. Comunque, /usr/local/binnon è nel mio sudo env, ma è nel mio root env e user env. Perchè è questo?
Beatgammit,

sudo whoami ritorna root, come previsto. Cosa potrebbe causare la differenza tra il mio sudo env e il mio env root?
beatgammit,

Non lo so, ma ci deve essere qualche installazione mancante da qualche parte, / usr / local / bin è generalmente incluso. Forse hai cancellato per errore $ PATH in un file di configurazione?
Johan

Sudo genera /root/.bashrc? È qui che aggiungo /usr/local/binal percorso di root (purtroppo dovevo farlo manualmente)?
beatgammit,

Penso che dovresti modificare la configurazione globale delle tue shell e vedere cosa succede. Se stai eseguendo bash sarebbe qualcosa come /etc/bash.bashrc
Johan

2

Il sudo -icomando simula il login iniziale. Sul mio sistema Debian, afferma anche che:

Ciò significa che i file di risorse specifici per l'accesso come .profile o .login verranno letti dalla shell. Se viene specificato un comando, viene passato alla shell per l'esecuzione. Altrimenti, viene eseguita una shell interattiva. sudo tenta di passare alla home directory dell'utente prima di eseguire la shell. Inizializza anche l'ambiente, lasciando DISPLAY e TERM invariati, impostando HOME, MAIL, SHELL, USER, LOGNAME e PATH, nonché i contenuti di / etc / environment su sistemi Linux e AIX. Tutte le altre variabili di ambiente vengono rimosse.


0

È possibile regolare sudoil env_keepparametro per includerlo PATH, anche se è necessario tenere presente le implicazioni di sicurezza nel farlo.

visudo

... avvierà il tuo $EDITOR, quindi puoi apportare modifiche a Defaults env_keep =... come appropriato.

Inoltre, puoi aggiungere / usr / local / bin al percorso del sistema aggiungendo file a /etc/profile.d.

per esempio:

cat <<EOF > /etc/profile.d/tjameson.sh
export PATH=$PATH:/usr/local/bin
EOF

sudoha una gestione speciale di PATHquindi non dovresti farlo.
Arrowmaster,
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.