web-dev-qa-db-ja.com

LD_LIBRARY_PATH環境変数を常に保持するようにsudoerを構成するにはどうすればよいですか?

何を試しても、Sudoでコマンドを実行した後、LD_LIBRARY_PATH環境変数が保持されないようです。コマンドラインから呼び出す場合は、コマンドラインからSudoコマンドの前に_LD_LIBRARY_PATH=/the/path_を付けるだけですが、毎回これを実行する必要はありません。

Env_keepオプションはこの変数を無視しているようで、exempt_groupオプションも無視しています。

私の%groupは現在、sudoersでのアクセスとしてALL=(ALL) NOPASSWD:ALLを持っています。この特定の環境変数を、実行するすべてのコマンドで保持してほしい。

これどうやってするの?

私のサーバーはRed Hat Enterprise Linux 5.7を実行しています。

4
Yanick Girouard

あなたはこれを使ってこれを行うことができると期待するかもしれません

Defaults env_keep += "LD_LIBRARY_PATH FRED" 

しかし、CentOS 6.2を使用したSudo version 1.7.4p5の簡単なテストでは、LD_LIBRARY_PATHは渡されませんが、FREDは渡されます。 sudoersのmanページには次のように書かれています

ほとんどのオペレーティングシステムのダイナミックリンカーは、
 Sudoを含むsetuid実行可能ファイルの環境から
動的リンクを制御できる変数を削除することに注意してください。オペレーティングシステムによっては、これには_RLD、DYLD_、LD _、
 LDR_、LIBPATH、SHLIB_PATHなどが含まれる場合があります。これらのタイプの変数は、Sudoが実行を開始する前に
環境から削除されるため、
 Sudoがそれらを保持することはできません

したがって、Sudoが認識する前に、システムが環境からLD_LIBRARY_PATHを削除しているように見えます。

14
user9517

これを機能させるために、私はこれをしなければなりませんでした:

  1. 追加 Defaults env_keep += "LD_LIBRARY_PATH"からsudoers
  2. このエイリアスを.bashrcファイルに追加します:alias Sudo='Sudo LD_LIBRARY_PATH=/mypath'

これで、Sudoで呼び出すコマンドには、変数が設定されます。

4
Yanick Girouard

これは、LD_LIBRARY_PATHだけでなく、ビルド環境で調整される可能性のある他のいくつかの環境変数でも発生しています。私の場合、Sudoは次のようになりました。

Sudo -HE env PATH=${PATH} LD_LIBRARY_PATH=${LD_LIBRARY_PATH} PYTHONPATH=${PYTHONPATH} my_command
0
kvz