rubyインストールしてあるのにsudoすると「/usr/bin/env: ruby: そのようなファイルやディレクトリはありません」と言われる


とある、gemをインストールしようとしたところ以下のようになります。

$ sudo gem install my_gem-0.0.1.gem
/usr/bin/env: ruby: そのようなファイルやディレクトリはありません

my_gem-0.0.1.gem は自作した gem でありファイルは存在します。


一般ユーザで「/usr/bin/env ruby -v」 はいける

$ /usr/bin/env ruby -v
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]

rootユーザでも「/usr/bin/env ruby -v」 はいける

# /usr/bin/env ruby -v
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]

なんと、一般ユーザの sudo だと駄目なのことが判明

$ sudo /usr/bin/env ruby -v
/usr/bin/env: ruby: そのようなファイルやディレクトリはありません

ちなみに、rubyのインストール場所は以下

$ which ruby
/usr/local/bin/ruby

/etc/sudoers には以下のように書いてある。

%wheel  ALL=(ALL)       ALL

つまり、wheelグループに所属しているユーザのコマンドはすべて使えるはずである。今回 sudo を実行したいユーザ hoge はちゃんとwheelグループにいる。

$ cat /etc/group | grep hoge
wheel:x:10:root,hoge
hoge:x:500:

sudoはセキュリティ上PATHを引き継がないらしい・・・

ということがわかったので、一般ユーザ hoge の ~/.bashrc に以下の行を追加します。

export PATH=/usr/local/bin:$PATH
alias sudo="sudo env PATH=$PATH"

再読み込み

$ source .bashrc

実行してみる

$ sudo /usr/bin/env ruby -v
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux]


できました・・・。でも、CentOS 5.1や5.2を利用しているときは、そんなことなかったのになぁ・・・。CentOS5.3になってから急にできなくなった・・・。なぜだ・・・。

pacoのインストールでpaco自身をインストール( sudo make logme )するときにエラーになったのも同じ原因でした。

環境

$ cat /etc/redhat-release
CentOS release 5.3 (Final)
$ ruby -v
ruby 1.8.6 (2009-03-31 patchlevel 368) [i686-linux

追記

上記のままだと以下の問題が起こります。

$ sudo -u mysql ls
env: -u: そのようなファイルやディレクトリはありません

-u を認識しなくて、userを変更してコマンドが実行できません。

そのような時は、 ~/.bashrc の記述を以下のようにしてください。

export PATH=/usr/local/bin:$PATH
alias sudo="sudo PATH=$PATH"

env をなくしています。これで、userを変更して実行できます。

$ sudo -u mysql ls
ls: .: 許可がありません