Conseil de pro :Il n'y a jamais vraiment de bonne raison d'exécuter sudo su
. Pour exécuter une commande en tant qu'utilisateur différent, utilisez sudo -u username command
. Si vous voulez un shell root, exécutez sudo -i
ou sudo -l
. Si vous avez activé le compte root, vous pouvez également exécuter su
seul, mais sudo su
n'est tout simplement pas utile. Et oui, je sais que vous le voyez partout.
Cela dit, sudo
a le -E
commutateur qui préservera l'environnement de la session de l'utilisateur :
-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.
Donc, vous devrez d'abord exporter votre variable, puis exécuter sudo -E
:
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
Le bash -c
n'est pas nécessaire. Cependant, si j'exécute sudo -Eu bob echo "$DUMMY"
, la variable est développée avant le lancement du shell racine afin de ne pas démontrer que la commande fonctionne réellement :
$ 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
Vous pouvez le faire sans appeler le shell de connexion :
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
ou :
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
Le -p
possibilité de su
la commande conserve les variables d'environnement.
-E fait le travail pour moi.De l'homme sudo
-
-E
,--preserve-env
Indique à la politique de sécurité que l'utilisateur souhaite conserver ses variables d'environnement existantes. La politique de sécurité peut renvoyer une erreur si l'utilisateur n'a pas l'autorisation de préserver l'environnement.