From: siena@... (Siena. / SHINAGAWA, Norihide) Date: 2003-04-03T10:50:54+09:00 Subject: [ruby-list:37496] Re: Tmpfile.new がデフォルトで/tmpを利用すること Siena. です。 》勝手に / にファイルを作るというのは、かなり行儀が悪い行為と 》いう印象があります。 というのは強く同意できるのですが、異常終了時などに 一時ファイルがあちこちのサブディレクトリに残されたままに なってしまうというのもあまり行儀が良いとは思えません。 ディスク管理をする立場では、想定できる場所が ある程度限定されている方が嬉しいと思っています。 自分のホームディレクトリでもごみの始末に無頓着なユーザはいますし、 単なるアプリケーションユーザであればなおさら、他人の書いたソフトが 作った一時ファイルになんて気を配らないのではないでしょうか。 /tmp => / => . という検索順序は上記を意図して仮に決めたわけです。 その上で、/ に同意できないならば / への書き込みを避けるために、 (可能なら) / を書き込みに禁止するとか、/tmp を作っておくとかできます。 逆に、. を先にすると . への一時ファイル作成を回避する手段がありません。 いずれの場合も、($SAFE == 0 なら) {TMPDIR,TMP,TEMP} を 適切に設定しておけば良いわけですが。 また、$SAFE > 0 であれば、そもそもスクリプト側で適切な tmpdir を与えておくべきなのかもしれないとも思います (*)。 スクリプトの初期の環境変数が比較的信頼できるうちに、例えば $tmpdir = ( ENV[ "TMPDIR" ] || ENV[ "TMP" ] || ENV[ "TEMP" ] ).untaint とでも取得しておいてこれを使うとか、独自の設定ファイルから読み込むとか。 # できれば、cgi.rb も tmpdir を指定できた方が嬉しいかも (*) 暗黙で決められる場所、他のプロセスと干渉するかもしれない 場所にアクセスするのは安全のために避けておきたいと申しましょうか。 良く分かってないので、多分に気分的な問題に過ぎないかもしれません。 》DOSISHな世界では . に一時ファイルを作るのは結構一般的なこと 》であり、"." = 「作業ディレクトリ」という考え方はそれなりに認 》知されていると思うのですが、/(だけに限らず作業ディレクトリよ 》り外の領域)というのは個別のプログラムの管轄範囲外であると思 》うのです。 DOSISH な世界という事であれば、/ に作業ディレクトリを作って そこに一時ファイルを置くというソフトも決して少なくないように思います。 # 勝手に作る作業ディレクトリも一時ファイルの一種とみなしてます もっとも、この場合は単に . == / なだけかもしれません。 ソフトによっては、ドライブも固定で含めて、 C:/ に作業ディレクトリを作るものもあるようです。 うちの常用環境では事実上 C: が存在しないも同然なのですが、 そういうソフトに当たって立往生した事があります ^^; もう忘れてしまいましたが、何かのインストーラだったような気がします。 --- Siena.