1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

druby: DRb::DRbConnError connection closed のエラーについて

Posted at

はじめに

 drubyとrailsを使用してCentOS内のファイル作成やディレクトリ作成などを行うプログラムを作成していた際に、表題のエラーがでてきて原因が全くつかめなかったためメモを残します。
 

現象

  • rails app => druby 経由 => ファイル作成
  • railsで作成したアプリのフォームから受け取ったパラメータに基づいてファイルの作成をした際にエラーが発生
  • druby: DRb::DRbConnError connection closed
  • FileUtilsやFileクラスのメソッドを使用した際に発生

原因

  • drubyのstart_serviceメソッドに:safe_level => 1 を設定した際に発生
  • railsからもらったパラメータを利用して、作成するディレクトリ等のパスを生成した際にもらったパラメータをいれた変数が汚染されていたため、Fileクラス系の操作を行うことができなかった。

参照:セキュリティモデル(ruby-lang.org)
http://docs.ruby-lang.org/ja/2.1.0/doc/spec=2fsafelevel.html

まったく、こちらに思い当たらず見当違いのところを調べまくっていたためえらくハマってしまいました。一緒に調べてくださった先輩に感謝です。

対策

  • :safe_level => 0 にする
    • こちらはとりあえず選択しませんでした
  • エラーが出る元になった変数について、悪意ある内容に書き換えられないようにフィルターするなどして、対象の変数をObject.untaintし汚染を取り除く
    • まだ実装途中ですが、こちらを選択する予定です。

さいごに

エラーの情報がコネクションが切れていることしか見つけられなかったため、エラーの出所をつきとめるのが難しく時間を取られました。
また、Object.taintについて意識をする機会がなかったため楽しいrubyの項目を読み返そうと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?