module function FileUtils.#remove_entry_secure

remove_entry_secure(path, force = false) -> ()[permalink][rdoc][edit]

ファイル path を削除します。path がディレクトリなら再帰的に削除します。

FileUtils.#rm_r および FileUtils.#remove_entry には TOCTTOU (time-of-check to time-of-use)脆弱性が存在します。このメソッドはそれを防ぐために新設されました。 FileUtils.#rm_r および FileUtils.#remove_entry は以下の条件が満たされるときにはセキュリティホールになりえます。

  • 親ディレクトリが全ユーザから書き込み可能 (/tmp を含む)
  • path 以下のいずれかのディレクトリが全ユーザから書き込み可能
  • システムがシンボリックリンクを持つ

この脆弱性を防ぐため、remove_entry_secure は削除前に path 以下のディレクトリのオーナーとパーミッションを変更し、上記の条件を回避します。ただし remove_entry_secure は親ディレクトリが以下の条件を満たすことを仮定しています。

  • UNIX システムおよびそれに類する環境では、sticky ビットが立っていること。
  • 全ユーザが書き込み可能であるのは、直接の親ディレクトリのみであること。 例えば、/var/tmp のパーミッションが 1777 であるのは問題ありませんが、 その場合 / や /var が全ユーザから書き込み可能であってはなりません。

この条件が満たされない場合 remove_entry_secure は安全ではありません。

[PARAM] path:
削除するパス。
[PARAM] force:
真のときは削除中に発生した StandardError を無視します。