Profi-Tipp:Es gibt nie wirklich einen guten Grund, sudo su
auszuführen . Um einen Befehl als ein anderer Benutzer auszuführen, verwenden Sie sudo -u username command
. Wenn Sie eine Root-Shell wünschen, führen Sie sudo -i
aus oder sudo -l
. Wenn Sie das Root-Konto aktiviert haben, können Sie auch su
ausführen allein, aber sudo su
ist einfach nicht sinnvoll. Und ja, ich weiß, dass du es überall siehst.
Das heißt, sudo
hat den -E
Schalter, der die Umgebung der Sitzung des Benutzers bewahrt:
-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.
Sie müssen also zuerst Ihre Variable exportieren und dann sudo -E
ausführen :
$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy
Die bash -c
wird nicht benötigt. Wenn ich jedoch sudo -Eu bob echo "$DUMMY"
ausführe , wird die Variable erweitert, bevor die Root-Shell gestartet wird, sodass nicht gezeigt wird, dass der Befehl tatsächlich funktioniert:
$ 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
Sie können dies tun, ohne die Login-Shell aufzurufen:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
oder:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
Die -p
Option von su
Befehl Umgebungsvariablen beibehalten.
-E erledigt die Arbeit für mich. Von Mann sudo
-
-E
, --preserve-env
Gibt der Sicherheitsrichtlinie an, dass der Benutzer seine vorhandenen Umgebungsvariablen beibehalten möchte. Die Sicherheitsrichtlinie kann einen Fehler zurückgeben, wenn der Benutzer keine Berechtigung zum Schutz der Umgebung hat.