Suggerimento pro:non c'è mai una buona ragione per eseguire sudo su
. Per eseguire un comando come utente diverso, usa sudo -u username command
. Se vuoi una shell di root, esegui sudo -i
o sudo -l
. Se hai attivato l'account root, puoi anche eseguire su
da solo, ma sudo su
non è solo utile. E sì, so che lo vedi ovunque.
Detto questo, sudo
ha il -E
switch che conserverà l'ambiente della sessione dell'utente:
-E, --preserve-env
Indicates to the security policy that the user wishes to preserve
their existing environment variables. The security policy may
return an error if the user does not have permission to
preserve the environment.
Quindi, dovrai prima esportare la tua variabile, quindi eseguire sudo -E
:
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
Il bash -c
non è necessario. Tuttavia, se eseguo sudo -Eu bob echo "$DUMMY"
, la variabile viene espansa prima dell'avvio della root shell in modo da non dimostrare che il comando funziona effettivamente:
$ sudo -u bob echo $DUMMY ## looks like it works but doesn't
dummy
$ sudo -u bob bash -c 'echo D:$DUMMY' ## now we see it failed
D:
$ sudo -Eu bob bash -c 'echo D:$DUMMY' ## works as expected
D:dummy
Puoi farlo senza chiamare login shell:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
oppure:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
Il -p
opzione di su
comando preserva le variabili d'ambiente.
-E fa il lavoro per me. Da man sudo
-
-E
,--preserve-env
Indica alla politica di sicurezza che l'utente desidera conservare le proprie variabili di ambiente esistenti. La politica di sicurezza può restituire un errore se l'utente non dispone dell'autorizzazione per preservare l'ambiente.