J'ai essentiellement besoin de faire ceci:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
Ça ne marche pas. Comment passer la variable env $ DUMMY à su? -p ne fonctionne pas avec -l.
J'ai essentiellement besoin de faire ceci:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
Ça ne marche pas. Comment passer la variable env $ DUMMY à su? -p ne fonctionne pas avec -l.
sudo -iu ec2-user echo $DUMMY
?Réponses:
Vous pouvez le faire sans appeler le shell de connexion:
ou:
L'
-p
option desu
commande conserve les variables d'environnement.la source
-p
est l'option desu
, passudo
dans ce cas-m
préserve la variable, d'autres disent-c
quelle est la différence? Et l'un des commentaires de cette réponse jours-E
stackoverflow.com/questions/10488758/…Conseil de pro: il n'y a jamais vraiment de bonne raison de courir
sudo su
. Pour exécuter une commande en tant qu'utilisateur différent, utilisezsudo -u username command
. Si vous voulez un shell racine, exécutezsudo -i
ousudo -l
. Si vous avez activé le compte root, vous pouvez également exécutersu
seul, maissudo su
n'est tout simplement pas utile. Et oui, je sais que tu le vois partout.Cela dit,
sudo
a le-E
commutateur qui préservera l'environnement de la session de l'utilisateur:Ainsi, vous devrez d'abord exporter votre variable, puis exécuter
sudo -E
:Ce
bash -c
n'est pas nécessaire. Cependant, si je lancesudo -Eu bob echo "$DUMMY"
, la variable est développée avant le lancement du shell racine, de sorte qu'elle ne démontre pas que la commande fonctionne réellement:la source
env_keep
insudoers
. Peut-être comme:Defaults env_keep += "DUMMY"
.sudo
. Elle est également plus lourde pour une seule variable. Cela n'est utile que pour quelque chose qui doit toujours être exporté.LD_PRELOAD
et le reportLESSCHARDEF
. Je ne pense pas que la commodité devrait être l'argument gagnant ici ...-E fait le travail pour moi. De l'homme
sudo
-la source
Ce qui suit est une solution qui n'en a pas besoin pour changer la politique de sécurité.
J'ignorerai la
su
partie, car nous pouvons utiliser l'--user
option desudo
.Nous voulons passer des variables d'environnement à un
command
run viasudo
. Cependantsudo
, les variables d'environnement ne seront pas transmises à une commande (il existe des raisons de sécurité valables pour cela, certaines variables peuvent être dangereuses). Un shell peut être utilisé pour définir des variables d'environnement etsudo
peut exécuter un shell avec un script qui lui est transmis. Par conséquent, ditessudo
d'exécuter un script qui définit les variables d'environnement.la source