web-dev-qa-db-ja.com

sudoを介してPATHを渡す

要するに:Sudoが毎回PATHをフラッシュしないようにする方法?

RailsでRuby on Rails。たとえば、いくつかの変更を加えた後)。

すべてのサイトはVCS(gitですが、重要ではありません)でチェックされ、所有者とグループが私のユーザーに設定されていますが、Mongrelは、その権利が厳しく制限されているmongrelユーザーの下で実行されます。したがって、Mongrelはroot(UIDを自動的に変更できます)またはmongrelで開始する必要があります。

Mongrelを管理するには、mongrel_cluster gemを使用します。これは、1つのコマンドで任意の数のMongrelサーバーを起動または停止できるためです。ただし、ディレクトリ/var/lib/gems/1.8/binがPATHにある必要があります:絶対パスで開始するにはこれでは不十分です

ルート.bashrcのPATHを変更しても何も変更されず、Sudoのenv_resetとenv_keepも調整されませんでした。

質問:PATHにディレクトリを追加する方法、またはユーザーのPATHをsudoに保持する方法は?

更新:いくつかの例

$ env | grep PATH
PATH=/usr/local/bin:/usr/bin:/bin:/usr/games:/var/lib/gems/1.8/bin
$ Sudo cat /etc/sudoers | egrep -v '^$|^#'
Defaults    env_keep = "PATH"
root    ALL=(ALL) ALL
%Sudo ALL=NOPASSWD: ALL
$ Sudo env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

また、Debian安定版(lenny)でもこのように機能すると言えます。

13
whitequark

同じ問題に数時間苦労しました。 Debian lennyでは、追加することで修正できます

Defaults        exempt_group=<your group> 

sudoersファイルに。

これは、コンパイル済みの--secure-pathオプションを回避する唯一の方法です(私の知る限り)。

特に、これはalsoユーザーがSudoを実行するときにパスワードを入力する必要がないようにします。

12
Rob

secure_path/etc/sudoersに設定している場合は、env_reset/env_keepで好きなだけプレイでき、パスに影響はありません。このようなものを見つけたら、コメントアウトしてください。

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
3
Draemon

man Sudo のenv_resetオプションとenv_keepオプションを調べてください。しかし、すでにそれを行っているようです(誤ってenv_keep "keepenv"を誤って呼び出しただけです)。 env_resetオプション(デフォルトは有効)を無効にすると、any環境変数。しかし、これは安全性が低くなります。

Sudoにはsecure_pathオプションもあります。これはデフォルトで有効になっていると思います。無効にしてみてください。

上記のオプションは、/ etc/sudoersファイルで設定されます。 Sudoには-iコマンドラインオプションもあります。これにより、Sudoは/root/.profileまたは/root/.loginを実行します。そこに希望のパスを設定できます。

0
dubiousjim