GNU/Linux >> LINUX-Kenntnisse >  >> Linux

wie man die Umgebungsvariable an sudo su übergibt

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.


Linux
  1. Wie führen wir einen in einer Variablen gespeicherten Befehl aus?

  2. Wie lässt sich ein Skript rückwirkend als Root ausführen?

  3. Wie führt man Wireshark unter Ubuntu 17.10 aus?

  4. Wie führe ich das Terminal als Root aus?

  5. Wie ändere ich die Sprache meines Git?

So setzen/löschen Sie Umgebungsvariablen in Linux

So führen Sie Sudo-Befehle ohne Passwort aus

So setzen Sie die Umgebungsvariable in Bash

So führen Sie einen Alias ​​mit Sudo in Linux aus

So führen Sie sudo-Befehle ohne Passwort aus

So führen Sie mit Lynis ein Sicherheitsaudit auf AlmaLinux durch