sudoで使用する変数をエクスポートする方法は?


24

Slackwareを使用sbopkgすると、ソースからパッケージをビルドすることが許可されます。リポジトリはDebianほど大きくはありませんが、素晴らしいです。

一部のソフトウェアでは、VICE c64エミュレーターなどで環境変数を使用できます。変数FFMPEGがに設定されている場合 、エミュレーターの記録yesが有効にffmpegなります。

使ってみた

$ export FFMPEG=yes; sudo sbopkg -B -i vice

しかしffmpeg、無効になっています。

代わりに私は使用する必要がありました

$ su -
$ export FFMPEG=yes
$ sbopkg -B -i vice

動作します。

どのように環境変数を使用するにはsudo

回答:


39

sudoの-Eオプションを使用できます。

FMPEG=yes sudo -E sbopkg -B -i vice

マニュアルから:

-E、-preserve-env

ユーザーが既存の環境変数を保持することをセキュリティポリシーに示します。ユーザーに環境を保持する権限がない場合、セキュリティポリシーはエラーを返す場合があります。

これにより、既存の環境変数がすべてエクスポートされることに注意してください。次の構文で必要な環境変数のみをエクスポートする方が安全です

sudo FMPEG=yes sbopkg -B -i vice


感謝しますが、うまくいきません(.-Eオプション)他の行は大丈夫ですので、最初の答えは正しいと選択します。
エルバルナ

11

sudo指定されたコマンドを呼び出す前に、環境内の変数をサニタイズします。コマンドを機能させるには、環境内の変数を保存するように要求する必要があります。

また、あなたがする必要があります使用する前に、変数()を、呼び出すのと同じ、外出先でそれを割り当てる()、または使用()。exportFMPEGsudoexport FMPEG=yes; sudosudoFMPEG=yes sudoenvenv FMPEG=yes sudo

環境変数を保持するには、-E(または--preserve-env)を使用します。

$ env FMPEG=yes sudo -E sbopkg -B -i vice

次のような特定の環境変数を設定することもできます。

$ sudo FMPEG=yes sbopkg -B -i vice

適切なセキュリティポリシーのためにこれが失敗する場合は、ルートシェルを起動し、そこで変数を設定します。

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit

6

以下に注意してください: (export a=b; command)はと同等a=b commandです。ブラケットに注意してください。

その後、我々はしないように、変数を適用した場合sudoだけに直接sbopkgので代わりに、FFMPEG=yes sudo sbopkg -B -i vice 私たちにできること sudo FFMPEG=yes sbopkg -B -i vice

セキュリティ警察がこれを防ぐ場合、次のようにします。 sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(を使用しない-Eでください。あらゆる種類の予期しない変数がリークするため、安全ではありません。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.