Ich muss das im Grunde tun:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
Das geht nicht. Wie kann ich die Umgebungsvariable $ DUMMY an su übergeben? -p funktioniert nicht mit -l.
linux
sudo
environment-variables
su
Umang
quelle
quelle
sudo -iu ec2-user echo $DUMMY
?Antworten:
Sie können dies tun, ohne die Login-Shell aufzurufen:
oder:
Mit
-p
dersu
Befehlsoption werden Umgebungsvariablen beibehalten.quelle
-p
ist Optionsu
,sudo
in diesem Fall nicht-m
die Variable erhalten bleibt, andere besagen,-c
was ist der Unterschied? Und einer der Kommentare in dieser Antwort Tage-E
stackoverflow.com/questions/10488758/…Profi-Tipp: Es gibt nie wirklich einen guten Grund zum Laufen
sudo su
. Um einen Befehl als anderer Benutzer auszuführen, verwenden Siesudo -u username command
. Wenn Sie eine Root-Shell möchten, führen Siesudo -i
oder aussudo -l
. Wenn Sie das Root-Konto aktiviert haben, können Sie es auchsu
alleine ausführen , dies ist jedochsudo su
nicht sinnvoll. Und ja, ich weiß, dass Sie es überall sehen.Das heißt,
sudo
hat den-E
Schalter, der die Umgebung der Benutzersitzung bewahrt:Sie müssen also zuerst Ihre Variable exportieren und dann ausführen
sudo -E
:Das
bash -c
wird nicht benötigt. Wenn ich es jedoch ausführesudo -Eu bob echo "$DUMMY"
, wird die Variable erweitert, bevor die Root-Shell gestartet wird, sodass nicht gezeigt wird, dass der Befehl tatsächlich funktioniert:quelle
env_keep
in hinzuzufügensudoers
. Vielleicht so:Defaults env_keep += "DUMMY"
.sudo
. Es ist auch umständlicher für eine einzelne Variable. Das ist nur für etwas sinnvoll, das immer exportiert werden soll.LD_PRELOAD
und ÜbertragenLESSCHARDEF
. Ich denke nicht, dass Bequemlichkeit hier das entscheidende Argument sein sollte ...-E macht den Job für mich. Vom Menschen
sudo
-quelle
Es folgt eine Lösung, bei der die Sicherheitsrichtlinie nicht geändert werden muss.
Ich werde den
su
Teil ignorieren , da wir die--user
Option von verwenden könnensudo
.Wir wollen Umgebungsvariablen über an einen
command
Lauf übergebensudo
. Diesudo
Übergabe von Umgebungsvariablen an einen Befehl ist jedoch nicht zulässig (es gibt gültige Sicherheitsgründe, einige Variablen können gefährlich sein). Mit einer Shell können Umgebungsvariablen festgelegt undsudo
eine Shell mit einem übergebenen Skript ausgeführt werden. Weisen Sie dahersudo
an, ein Skript auszuführen, das die Umgebungsvariablen festlegt.quelle