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

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

Slackwareでを使用すると、sbopkg人々はソースコードからパッケージを構築できます。 ReposはDebianほど大きくはありませんが、まだ非常に良いです。

一部のソフトウェアは環境変数を使用できます(たとえば、VICE c64エミュレータでこの変数が FFMPEGに設定されているyes場合はffmpeg、ロギングエミュレータが有効になります)。

使ってみよう

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

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

代わりに私は使用しなければならなかった

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

これはうまくいきます。

環境変数はどのように使用しますかsudo

答え1

sudoのオプションが利用可能です-E

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

マニュアルから:

-E, --preserve-env

ユーザーが既存の環境変数を保持したいセキュリティポリシーを表します。ユーザーが環境を保護する権限を持っていない場合、セキュリティポリシーはエラーを返す可能性があります。

この輸出に注意してくださいみんな既存の環境変数。次の構文を使用して必要な環境変数のみをエクスポートする方が安全です。:

sudo FMPEG=yes sbopkg -B -i vice

答え2

sudo指定されたコマンドを呼び出す前に環境の変数をクリーンアップします。コマンドが正しく機能するには、環境で変数を保存するように要求する必要があります。

さらに、()を使用する前に変数に値を割り当てるかexport、()を呼び出すときと同じ手順で変数に値を割り当てるか、()を使用する必要があります。FMPEGsudoexport 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

答え3

注:括弧(export a=b; command)に注意してください。a=b command

その後、変数をに適用せずにsudo直接適用すると、次のようになります sbopkgFFMPEG=yes sudo sbopkg -B -i vicesudo FFMPEG=yes sbopkg -B -i vice

セキュリティ警察がこのような事態を防ぐのに役立ちます。 sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(使用しないでください-E。予期しないすべての変数が漏洩する可能性があるため、安全ではありません。)

関連情報