基本的にこれを行う必要があります:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
これは機能しません。env変数$ DUMMYをsuに渡すにはどうすればよいですか?-pは-lと一緒には機能しません。
基本的にこれを行う必要があります:
DUMMY=dummy
sudo su - ec2-user -c 'echo $DUMMY'
これは機能しません。env変数$ DUMMYをsuに渡すにはどうすればよいですか?-pは-lと一緒には機能しません。
回答:
ログインシェルを呼び出さずに実行できます。
sudo DUMMY=dummy su ec2-user -c 'echo "$DUMMY"'
または:
sudo DUMMY=dummy su -p - ec2-user -c 'echo "$DUMMY"'
コマンドの-p
オプションはsu
環境変数を保持します。
-p
のオプションでありsu
ません、sudo
この場合には
プロのヒント:実行する正当な理由はありませんsudo su
。別のユーザーとしてコマンドを実行するには、を使用しますsudo -u username command
。ルートシェルが必要な場合は、sudo -i
またはを実行しsudo -l
ます。ルートアカウントをアクティブにした場合は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
env_keep
の中でsudoers
。おそらく次のようになりますDefaults env_keep += "DUMMY"
。
sudo
。また、単一の変数の場合は面倒です。これは、常にエクスポートする必要がある場合にのみ役立ちます。
LD_PRELOAD
し、オーバー運んでLESSCHARDEF
。ここでは、便利さを勝ち取った議論とは思わない
以下は、セキュリティポリシーを変更する必要のないソリューションです。
su
の--user
オプションを使用できるため、この部分は無視しますsudo
。
をcommand
介して実行に環境変数を渡しますsudo
。ただしsudo
、環境変数をコマンドに渡すことはできません(これには有効なセキュリティ上の理由があり、一部の変数は危険な場合があります)。シェルを使用して環境変数を設定sudo
し、スクリプトを渡してシェルを実行できます。したがってsudo
、環境変数を設定するスクリプトを実行するように伝えてください。
var_a=someThing
var_b=someOtherThing
sudo bash -c "
export var_a=\"${var_a}\"
export var_b=\"${var_b}\"
the_command some_args
"
sudo -iu ec2-user echo $DUMMY
どうですか?