2007年11月 6日

Debian(sarge)でsudo gem〜ってしたいんだけど、動かない(未解決)

気がついたら2時間粘ってる。sudoには詳しくなれたが解決はしていない。 Blogなどを参考にRubyGemsをインストールするときに発行するコマンドが
$ sudo gem install rails
ってな感じになるんですが、Debian(Sarge)だと
sudo: gem: command not found
って動かないんですよ。gemをフルパスで指定すると
$ sudo /opt/local/bin/gem install rails
/opt/local/bin/gem:9:in `require': no such file to load -- rubygems (LoadError)
from /opt/local/bin/gem:9
今度は環境変数GEM_HOMEも参照できない模様。しょうがないので、suしてgemしてたんですが、いい加減、気にくわないので、ちゃんと調べてみた。でも、解決しなかった! 問題点は2つありまして
  • 環境変数PATHが使えない
  • 環境変数GEM_HOMEが使えない
どっちも環境変数だし、同じ原因だろうと思っていたんですが、後者は解決できたんですが、前者は特例扱いらしく未だにダメです。 原因はsudoコマンドのセキュリティ強化のようです。 CVE - CVE-2005-4158 (under review)
Sudo before 1.6.8 p12, when the Perl taint flag is off, does not clear the (1) PERLLIB, (2) PERL5LIB, and (3) PERL5OPT environment variables, which allows limited local users to cause a Perl script to include and execute arbitrary library files that have the same name as library files that are included by the script.
ブラックリスト方式からホワイトリスト方式なったと。同時にリストを操作する方法も追加されたので、変更してみました。スーパーユーザでvisudoを実行すると/etc/sudoersがエディタで開かれるので以下の行を追加。
Defaults env_keep+="PATH GEM_HOME RUBYLIB"
env_keepという変数に+=で値を追加しています。PATHとGEM_HOMEとRUBYLIB。詳しくはsudoers(5)を参照してください。 これで後者は解決しました。gemをフルパスで指定すると無事に起動しました。しかし、PATHについては利用してくれない・・・。 いろいろを見てみたところ、
$ echo $PATH
/opt/local/rubygems/bin:/opt/local/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
$ printenv PATH
/opt/local/rubygems/bin:/opt/local/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
$ sudo echo $PATH
/opt/local/rubygems/bin:/opt/local/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin
$ sudo printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
変数には設定されているけど、環境変数には設定されていない・・・?sudoが強制的に初期化している気がします。初期値がどこに入っているのかを探したのですが、見つからず。そろそろソースコード見なきゃいけない領域に入ってしまったので、後日に回します。 しかし、まぁ
$ sudo `which gem` install rails
で実行できるようになったのは、小さいながらも成果だと思いたい。

Trackback on "Debian(sarge)でsudo gem〜ってしたいんだけど、動かない(未解決)"

以下1件のトラックバックはこのページのエントリー"Debian(sarge)でsudo gem〜ってしたいんだけど、動かない(未解決)"を参照しています。

このエントリーのトラックバックURL: 

Comment on "Debian(sarge)でsudo gem〜ってしたいんだけど、動かない(未解決)"

"Debian(sarge)でsudo gem〜ってしたいんだけど、動かない(未解決)"へのコメントはまだありません。

Post a Comment

コメントする
(書式を変更するような一部のHTMLタグを使うことができます)
ブラウザに投稿者情報を登録しますか?(Cookieを使用します。次回書き込み時に便利です。)
  •  
  •