プロのヒント:sudo su
を実行する正当な理由はありません。 .別のユーザーとしてコマンドを実行するには、sudo -u username command
を使用します .ルート シェルが必要な場合は、sudo -i
を実行します。 または sudo -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"
を実行すると 、ルートシェルが起動される前に変数が展開されるため、コマンドが実際に機能することを示していません:
$ 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
ログイン シェルを呼び出さずに実行できます:
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
または:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
-p
su
のオプション コマンドは環境変数を保存します。
-E は私のために仕事をします.From man sudo
-
-E
, --preserve-env
ユーザーが既存の環境変数を保持することをセキュリティ ポリシーに示します。ユーザーが環境を維持する権限を持っていない場合、セキュリティポリシーはエラーを返すことがあります。