Linux

如何將環境變數傳遞給 sudo su

  • December 13, 2021

我基本上需要這樣做:

DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'

這行不通。如何將環境變數 $DUMMY 傳遞給 su?-p 不適用於 -l。

您可以在不呼叫登錄 shell 的情況下執行此操作:

sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'

或者:

sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'

-p命令選項su保留環境變數。

專業提示:從來沒有真正好的理由去跑步sudo su。要以其他使用者身份執行命令,請使用sudo -u username command. 如果你想要一個 root shell,執行sudo -isudo -l. 如果你已經啟動了root賬戶,你也可以su單獨執行,但sudo su只是沒有用。是的,我知道你到處都能看到它。

也就是說,sudo具有-E將保留使用者會話環境的開關:

-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.

因此,您首先需要導出變數,然後執行sudo -E

$ export DUMMY=dummy
$ sudo -Eu bob bash -c 'echo $DUMMY'
dummy

bash -c不需要。但是,如果我執行sudo -Eu bob echo "$DUMMY",該變數會在根 shell 啟動之前展開,因此它不能證明該命令確實有效:

$ 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

引用自:https://unix.stackexchange.com/questions/202383