環境変数がsudoでは機能しないようです。

環境変数がsudoでは機能しないようです。

私はファイアウォールの背後でaptを使用しているので、http_proxy環境変数にプロキシを割り当てます。

私がしたことは、rootユーザーの合計に次の行を追加することでした.profile(良い測定のため)。.bashrc

export http_proxy=http://proxyserver:8080

次の操作を行うと、エージェント値が正しく印刷されます。

sudo echo $http_proxy

ところでを呼び出すと、その変数がルートとして表示さsudo apt-get updateれないようです。http_proxy

プロキシを通過することは私がrootとしてsuするときにのみ期待どおりに機能するので、apt-get明らかに変数を見ることができます。

私の質問は、上記のように、なぜsudo apt-get変数を見ることができないのですか?です。

修正するただ呼び出すと、sudo echo現在のユーザープロファイルに設定されている変数の値が反映されていることがわかりました。しかし、それにもかかわらず、対応するsudo apt-get変数値を使用するとどうなりますか?

答え1

sudo apt-getこの場合は「動作しないようです」ではなく動作しているようですあなたがこれをするときsudo echo $http_proxy

シェルコマンドを入力すると、すべての変数とエイリアスがグローバル化され、拡張されます。今後実行されます。

これにより、より柔らかくsudo echo $http_proxyなりますsudo echo http://proxyserver:8080

$http_proxy表示されない理由は、apt-getディレクティブsudoで明示的に許可された環境変数を除くすべての環境変数が消去されるためです。/etc/sudoersenv_keep

環境変数の処理方法を操作する方法sudo(または一般に環境変数の処理方法)の詳細については、いいえ)はで見つけることができますman sudoers

答え2

これが私が決めたものなので、この場合のより良い解決策は、/etc/apt/apt.confプロキシの行を追加するように修正することです。

Acquire::http::Proxy "http://yourproxyaddress:proxyport";

システムはほぼ永久にプロキシの背後にあるので、http_proxy環境変数を使用するよりも長期的に優れたソリューションです。

答え3

ああ、私はこのページで何かを見ました:

https://help.ubuntu.com/community/AptGet/Howto#Setting_up_apt-get_to_use_a_http-proxy

通常、sudoでapt-getを実行している場合は、/ etc / sudoersに次の明示的な設定を追加しない限り、最初にrootとしてログインする必要があります。

Defaults env_keep = "http_proxy https_proxy ftp_proxy"

これが必要なのは、sudoすべての環境変数が意図的に消去されるためです。木礼したがって、基本的なセキュリティ対策としてホワイトリストに追加してください。

答え4

私の考えでは、sudoの「-E」オプションのみを使用する必要があると思います。

sudo -E echo $http_proxy

関連情報