Solaris 5.10ではsudo 1.7.4p4、RHEL4 u6ではsudo 1.6.7p5を使用していますが、環境変数、例えば$PYTHONPATHを保存する方法がわかりません。sudoersにこの行を追加してみましたが、何の違いもありません
Defaults !env_reset
私は何か間違ったことをしているのでしょうか、それとも単に sudo のインストールが env_reset フラグを尊重していないだけなのでしょうか?
編集: 少なくともSolarisでは、この問題はシェルに依存していることがわかりました。標準の root シェルは Bourne で、一方で sudo (sudo bash
) で bash を実行すると、 !env_preset は環境 (PATH と LD_LIBRARY_PATH を含む) を保持します。これはかなり紛らわしい挙動だと言わざるを得ません
48 aknuds1 2011-01-12
sudoや変数にはセキュリティ上の問題があるので注意して使ってください
man sudoers
から、使った方がいいことがわかりました
Defaults env_reset Defaults env_keep += "PYTHONPATH OTHERVARIABLE YETANOTHER"
Ubuntuでは、sudo
はいくつかの変数を保持します。sudo -i
は root でログインしてコマンドを実行するようなものです。どちらも不便かもしれませんが、前者のsudo nano myfile
はルート所有のファイルをホーム内に残し、後者のsudo -i nano myfile
は/root/myfileを開こうとします
Run
sudo printenv PATH
何を与えてくれるのか見てみましょう。ここでは、それが与える
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
のようにしてください。では、sudo visudo
を実行して行を追加します
Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
を先ほど見つけたものに置き換えてください。必要に応じて新しいパスを追加してください
About libraries:
sudo LD_LIBRARY_PATH=/usr/lib/path/to/a/safe/library your command
Linux ディストリビューションでは PATH
に注意を払っているので、遊ぶ前には本当に注意が必要です。.
や/home/username
のようなパスの追加には特に注意が必要です
パスを追加することの危険性の一つは、これらのパス上のファイルがroot
によって実行される可能性があり、悪意のあるソフトウェアによって悪用される可能性のあるシステムセキュリティの窓を開くことです。他にも危険があるかもしれません。自分が何をしているのかを確認してください。sudo
セキュリティ対策をバイパスすることで、Solaris が Windows XP と同じように安全になるかもしれません
45 user39559 2011-01-12
sudoers
をいじることは、他の人が言っているように、注意して行う必要があります
保存したい特定の環境変数がある場合のよりシンプルなアプローチは、sudo を通して直接環境変数を渡すことです (これは sudo cmdline のヘルプでは [VAR=value]
と表示されています)
この小さな例では、私も複数の変数のためにそれを実証しています
$ export MY_V1=1
$ export MY_V2=2
$ printenv | grep MY_V
MY_V2=2
MY_V1=1
$ sudo MY_V1=$MY_V1 MY_V2=$MY_V2 printenv | grep MY_V
MY_V2=2
MY_V1=1
問題の元になっているPYTHONPATH
の例であれば、以下のようにすればいいだけです
$ sudo PYTHONPATH=$PYTHONPATH python some_script.py
<script_output_here>
この手のエイリアスを作っておくと便利です。こんな感じで
$ alias sudopy='sudo PYTHONPATH=$PYTHONPATH python'
8 Russ 2012-05-10
Defaults !env_reset
は、-E
オプションをつけて sudo を呼んでいなければ問題ないように見えます
そのエントリーを完全に削除してみてはいかがでしょうか
正しいsudoersファイルを編集しているか確認しましたか?インストールの仕方によっては/etc/sudoers
か/usr/local/etc/sudoers
になっているのではないでしょうか?visudo
で編集しましたか?
sudoをどのように実行していますか?sudo python
, sudo su
, sudo su -
, sudo -s
, 他に何か?sudo python
とsudo su
だけで環境が保たれます
env | grep PYTHONPATH
は何と言っているのでしょうか?何もなければ、export PYTHONPATH
を実行してPYTHONPATHがエクスポートされていることを確認して、もう一度やってみてください
sudo env | grep PYTHONPATH
は何と言っているのでしょうか?期待された値を表示しているのであれば、他の何かが PYTHONPATH の値を上書きしていることになります。ルートの .bashrc や .bash_profile、システム全体の設定ファイルなどが考えられます
3 Mikel 2011-01-12
LD_LIBRARY_PATHのUbuntuドキュメントによると、以下のようになっています
設定ファイルは/etc/ld.so.conf.d/*.confを使用する必要があります
Then:
ld.so
の設定ファイルを/etc/ld.so.conf.d/
にLD_LIBRARY_PATH
のパスで追加しますでキャッシュを更新します
sudo ldconfig -v
-1 OlPo 2016-06-02