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: .: 許可がありません