sudoを介してPATHを渡す


13

要するに、毎回PATHをフラッシュしないようにsudoを作る方法は?

Ruby on Railsで書かれたいくつかのWebサイトをサーバーに展開しています(Debianテスト)。Mongrel + Nginxを使用してそれらをホストしますが、Mongrelを再起動する必要がある場合(たとえば、変更を加えた後)に1つの問題があります。

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

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

ルート.bashrcのPATHを変更しても何も変わりませんでした。sudoのenv_resetとenv_keepの調整も変更しませんでした。

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

更新:いくつかの例

$ 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)でもまったく同じように機能すると言えます。


回答:


12

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

Defaults        exempt_group=<your group> 

sudoersファイルに。

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

注目すべきは、これがしますまた、彼らはsudoをするときにパスワードを入力する必要からユーザーを免除します。


3

あなたがいる場合secure_pathに設定され/etc/sudoers、あなたがプレイすることができますenv_reset/ env_keepすべてのあなたのような、それがパスに任意の違いをすることはありません。このようなものが表示された場合は、コメント化します。

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

いいえ、もちろん設定されていません。
ホワイトクォーク

0

man sudoの env_resetおよびenv_keepオプションを調べてください。しかし、あなたはすでにそれをやったように聞こえます(誤ってenv_keepを "keepenv"と呼んでいます)。env_resetオプションを無効にすると(デフォルトは有効になります)、env変数を消去することは想定されていません。しかし、これはあまり安全ではありません。

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

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


1
いいえ、env_resetをオフにしても、PATHは変更されます(消去されません)。おそらくこれは/ * / sbin dirsを追加するために行われます。いいえ、-iオプションは対話型シェルを起動するため適切ではなく、コマンドを実行するだけで済みます。
ホワイトクォーク

さて、この問題はDebian(LVMに移行したため)とRubyGemsを再インストールした後に消えました。あなたの答えは何よりも有用だったので、すぐに受け入れられます。
ホワイトクォーク

-1

まあ、あなたは何か間違ったことをしている。また、/ etc / sudoersファイルで何をしたかを指定しませんでした。これがあなたがすべきことです-これはCentOSシステムです、ところで:

最初に、これは正しいenv_keep設定を使用しています(PATHがそこにあることに注意してください)

sudo grep -5 PATH / etc / sudoersデフォルトenv_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LCLCNUMERIC_LCLC_NUMS_LCLC_NUMS_LCLC_NUMS_LCLC_NUMS_LCLC_NUMS_LCLC_NUMS_LCLC_NUMS

Defaults   timestamp_timeout = 15 

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple

-> export PATH=$PATH:hithere
-> sudo sh -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/bin:hithere

いいね。env_keep設定を削除して、再試行してみましょう。

-> sudo visudo
-> sudo grep -5 PATH /etc/sudoers
                    LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                    LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                    LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                    LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
                    _XKB_CHARSET XAUTHORITY"
 #_XKB_CHARSET XAUTHORITY PATH"

なんて悲しいパス:

 -> sudo sh -c 'echo $PATH'
 /usr/bin:/bin

1
私はそれを2回以上チェックしました!ポストでアップデートを確認してください。
ホワイトクォーク

私は同じ問題を抱えています、私はあなたが言及した正しい設​​定を間違いなく持っています
ドラモン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.