2011/01/12

sudo and environment variable

http://archive.linux.or.jp/JM/html/sudo/man8/sudo.8.html

sudo は外部のコマンドをできるだけ安全に実行しようとする。
環境変数を扱うにあたって、二つの異なる行き方がある。デフォルトでは、 sudoers の env_reset
オプションが有効になっている。 この場合は、最小限の環境でコマンドが実行されることになるが、
その環境とは、
TERM
, PATH
, HOME
, SHELL
, LOGNAME
, USER
, USERNAME
、それに sudo という 呼び出し側のプロセスから来た変数で、sudoers の env_check や env_keep
オプションによって許可されたものである。言わば、 環境変数のホワイトリストが存在することに
なるわけだ。

要するに sudo ではデフォルトでsudoを実行するユーザの環境変数は引き継がれないということだ。これは環境変数が重要な環境 (例:Python の virtualenv にworkonした状態) で sudoすると思った結果が得られないことに繋がる。

たとえば以下のような状態では pip-requirement.txt の内容は virtualenv 内にはインストールされず、システムグローバルな環境に入ってしまう。workon した時点で山のように設定された環境変数を見てインストール先が決まるのだが、sudoした時点でそれらは引き継がれないからである。

$ workon somevm
(somevm)$ sudo pip install -r pip-requirement.txt

Ubuntu みたく「何かするときには sudo」みたいな環境も増えてきたけど、こういうこともある。

0 件のコメント: