Dipende fortemente da come si chiama il programma con sudo
o su
.
Ad esempio sul sistema in cui mi trovo in questo momento:
.bashrc
COMMAND $HOME $USER Env. $PATH
1. sudo -i (root) root root [1]
2. sudo -s (USER) root USER /home/${USER}/bin:[1]
3. sudo /bin/bash (USER) root USER /home/${USER}/bin:[1]
4. sudo su (root) root USER [1]:/usr/games:/usr/local/games
5. sudo su - (root) root root [1]
Dove [1] = / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin
Env = Le variabili di ambiente vengono ripristinate per 1 e 5, prese da $ USER in 2,3,4.
Quindi uno script o un programma che viene lanciato con una diversa opzione può vedere diverso $PATH
, $HOME
, il suo guscio in grado di leggere diversi .bashrc
, .profile
e le variabili d'ambiente. Legge il file relativo a $HOME
. Ogni utente può modificare il proprio ambiente in modo diverso (variabili $PATH
,, .bashrc, .profile, .bash_profile, alias ...). In particolare un utente può avere un diverso ordine delle directory nella sua $PATH
e, di conseguenza, uno script può eseguire un comando, ad es. /home/$USER/bin
Invece di quello nel percorso previsto da root.
Puoi eseguire il programma sudo -i
come se fossi loggato come root su -
, ma puoi avere un comportamento diverso se lo esegui con sudo MyCommand
o con su -c MyCommand
.
Da man su
:
Nella parte descrittiva:
l'ambiente corrente viene passato alla nuova shell . Il valore di $ PATH viene reimpostato su / bin: / usr / bin per gli utenti normali o / sbin: / bin: / usr / sbin: / usr / bin per il superutente
...
Nella parte opzioni:
- , -l , --login
Fornisce un ambiente simile a quello che l'utente si aspetterebbe se l'utente avesse effettuato l' accesso direttamente .
Dall'uomo sudo
-i , --login
Esegue la shell specificata dalla voce del database delle password dell'utente di destinazione come shell di accesso. 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 tramite l'opzione -c della shell. Se non viene specificato alcun comando, viene eseguita una shell interattiva. sudo
tenta di passare alla home directory dell'utente prima di eseguire la shell. Il comando viene eseguito con un ambiente simile a quello che un utente riceverebbe al momento dell'accesso . La sezione Ambiente di comando nel manuale sudoers (5) documenta in che modo l'opzione -i influisce sull'ambiente in cui viene eseguito un comando quando viene utilizzata la politica sudoers.