web-dev-qa-db-ja.com

sudoに表示されないシステム環境変数

/ etc/environmentファイルに次の行があります。

BROKER_URL=tcp://xxx.30.8.163:61616

私はこれを実行して取得します:

$ set|grep BROKER_URL
BROKER_URL=tcp://xxx.30.8.163:61616

次に、実行します。

$ Sudo bash
# set|grep BROKER_URL
# 

これは、システム全体の環境変数であると想定されています。なぜSudoシェルに表示されないのですか?

5
Thom

/etc/environmentはファイル PAMで使用 、つまりSudo bashが実行しないログインによって処理され、(man sudoersから):

コマンド環境

環境変数はプログラムの動作に影響を与える可能性があるため、sudoersは、ユーザーの環境から実行するコマンドによって継承される変数を制限する手段を提供します。 sudoersが環境変数を処理する方法は2つあります。

デフォルトでは、env_resetオプションが有効になっています。これにより、コマンドは新しい最小限の環境で実行されます。 AIX(およびLinuxシステムなしPAM)では、環境は/の内容で初期化されます。 etc/environmentファイル。

ほとんどのGNU/LinuxシステムはPAMを使用することに注意してください。ログインシェルを使用するには、Sudo -iを使用してこれを回避することができます。ただし、「ログインシェル」はbashがそれ自体を呼び出す方法を指し、ソーシング/etc/environmentが含まれておらず、実際にはPAM経由でログインしていないため、これはまだ機能しない可能性があります。

あなたの最善の策はおそらく Sudoを設定する あなたがやりたいことをすることです。

5
goldilocks