パスワードを忘れた? アカウント作成
11976037 story
バグ

RHEL6でsquidを再起動するとrm -rf /*が実行されるバグが発見される 67

ストーリー by hylom
これはひどい 部門より
insiderman 曰く、

RHEL 6.7で、「service squid restart」コマンドを実行してsquidを再起動すると、ルートディレクトリ以下が削除されるというバグが発見されたという(Red HatのBugzilla)。

原因などは不明だが、仮想マシン上で再現できたというコメントもある。Hacker Newsでは、起動スクリプト内に「rm -rf $SQUID_PIDFILE_DIR/*」という行があり、ここで$SQUID_PIDFILE_DIRが定義されていない、もしくは空の文字列だった場合に「rm -rf /*」が実行されてしまうことが原因ではないかと推測されている。

(追記@20:10)コメントで指摘されているとおり、RHEL 6.7は現在開発中というステータスで、製品版においてはこの問題は影響しない。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • RHEL 6.7はまだリリースされていません。
    この変更点はbug 1102343 [redhat.com]での変更点によって影響を受けていると推測されますが、両方とも ON_QA となっていますし、バグの報告者もレッドハットのエンジニアです。

    社内でのQA中に発見されたバグが、公開のbugzillaに登録されている状態です。
    このバグを含むコードはリリースされていません。

    こちらも参照ください。
    http://togetter.com/li/799136 [slashdot.jp]

  • rm.deny がある場合は rm.deny に書かれている
    ファイルとディレクトリを消さないようにしたら
    いいんじゃないかと思うんだ。

    • by annoymouse coward (11178) on 2015年03月25日 1時25分 (#2784125) 日記

      もっと確実な方法が,すでに実装されています.

      chattr コマンドで,ファイルにimmutable属性を付けると,そのファイルは root権限でも rm できなくなります

      説明が面倒なので,実行例だけ書きます.
      詳細は man chattr でも見て下さい

      $ sudo touch hoge
      $ sudo chattr +i hoge
      $ sudo rm -f hoge
      rm: cannot remove ‘hoge’: Operation not permitted
      $ sudo chattr -i hoge
      $ sudo rm -f hoge

      ファイルシステムによっては chattr に対応していない場合もありますが,ext2,3,4なら標準で対応しています.

      親コメント
  • rmstarがrootを攻撃したという事態にはSourceを使って再構築するのだと、OS/1 Kenobi師もおっしゃっております。

  • by Anonymous Coward on 2015年03月24日 19時11分 (#2783898)

    cd $SQUID_PIDFILE_DIR && rm -rf ./* && rmdir $SQUID_PIDFILE_DIR

    • 別コメントでも指摘されていますが,
      > cd $SQUID_PIDFILE_DIR && rm -rf ./* && rmdir $SQUID_PIDFILE_DIR
      は,正しく機能しないので,真似しないように.

      親コメント
    • by Anonymous Coward

      というか、こういう原始的なスクリプトが普通なの?

    • by Anonymous Coward

      変数の中身が想定どおりなのを確認してからrmすればいいのに
      なぜ中身を確認せずにcdして&& rm?
      その変数に"/"が入ってたらダメじゃん。

    • by Anonymous Coward

      $SQUID_PIDFILE_DIRが空の場合は、実行者のhomeディレクトリ以下が丸ごと消えますね

      • by Anonymous Coward

        いやルートディレクトリ以下丸ごと
        rm -rf /*

        • by Anonymous Coward

          お恥ずかしい。勘違い。

    • by Anonymous Coward

      作法として正しいとかは置いといて、自分が中にいるじゃんかよ

    • by Anonymous Coward

      根本的に、rm の機能を制限するわけにはいかないのかい?

      • by Anonymous Coward

        -rfはオプションですので…

        • by Anonymous Coward

          いくつかのディレクトリは -rff にしないと消えないようにするとかかね。

      • by Anonymous Coward

        GNUのrmではある程度ガードかかってますよ
        chrootとかしながら遊んでみては?

    • by Anonymous Coward

      消さないって選択肢もありまして、
      先日10年ぐらい前に書いたスクリプトを久しぶりにメンテしたら、一時フォルダの中に作ったファイルをディレクトリ毎消す部分をコメントアウトしてた
      /tmpの下だったし、年2~3回の再起動で消される設定だったから、それでいいと思ったんだろうな。
      気持ちはわかる

      • by Anonymous Coward on 2015年03月25日 10時48分 (#2784289)

        /tmpといえば、腹立つことを思い出す、/tmp下に、起動スクリプトを置いてる設計っておかしいですよね?
        10日以上、連続運転(または10日電源OFF)で再起動させてたら、起動スクリプトが消され起動しなくなった。
        (在庫の商品がほぼ全滅した)
        これって、故意に時限爆弾しこんでるよな?
        こんなところに、起動スクリプトを置いてる設計を指摘してるのに、まともに話を聞かず
        これをlinuxの仕様ですっていいきって修正しなかった会社あるからな。

        親コメント
      • by Anonymous Coward

        /tmp (/var/tmp) は再起動で消えるのをあてにするとか、find -ctime で古いのから消すとかは見たことある。

    • by Anonymous Coward

      それだと値が/だと駄目では?
      いま試せないのですが。。

    • by Anonymous Coward

      set -u
      ってbshのオプションつけてる。

    • うわ、絶対パスだと消せる!rmdir . だと消せないのに。これでいいのか?

  • by Anonymous Coward on 2015年03月24日 22時55分 (#2784058)

    やらかすほうが悪いんですが、ちょくちょくみるんで、ルートディレクトリにワイルドカードのときだけ10分以内の時刻入力とかにしちゃえばいいんじゃね。
    (てきとう)

  • by Anonymous Coward on 2015年03月24日 19時36分 (#2783919)

    こっちを見ましょう
    http://togetter.com/li/799136 [togetter.com]

  • by Anonymous Coward on 2015年03月24日 20時27分 (#2783954)

    なに、この追記。

  • by Anonymous Coward on 2015年03月24日 20時27分 (#2783955)

    色々工夫して似たような効果を持つ環境を構築している人はいるようだが、素のrmにそういう機能があれば
    悲劇の幾分かが防げるように思う。

    • by Anonymous Coward

      削除したものを仮置き場に溜めておくという機能が追加されても、それがデフォルトになるとは限らないし、
      rm -rf --direct-remove /
      みたいなオプションが追加されて、それがシェルスクリプトに散らばるだけになるかと。

      • by Anonymous Coward

        Windows上でも大きなファイルを削除する時は、ゴミ箱が溢れて削除できなくなるので
        「ゴミ箱にファイルを移動しないで、削除と同時にファイルを消去する」オプションをONにしてる

        いずれにせよゴミ箱に入れた直後に削除するだけだしな。

  • by Anonymous Coward on 2015年03月24日 20時39分 (#2783960)

    どっかで見た話だなーと思ったら関連リンクにあるSteamの話と全く同じこと?
    手元のシステムでも結構入ってそうな記述だなあ。

  • by Anonymous Coward on 2015年03月24日 21時42分 (#2784010)

    > 事実としては、RHEL6.5の時代に一般の方からBZに報告された問題の修正パッチ案がまずくて、

    まずいパッチであることを判断できずに修正として入れてしまったということですね。

    >RHのQAチームがそのパッチを当てた「開発中のRHEL6.7」のテスト中に問題を発見して、
    >そのパッチを却下したという事のようです
    QAチームが機能しているということですね。

  • by Anonymous Coward on 2015年03月24日 23時18分 (#2784070)

    当時、大学のネットワークが遅く感じて、大学が学生に貸与しているノートに(勝手に入れたLinuxの上に)入れていた記憶があります。
    Windowsに導入して、アクセスを捌いた記憶もあるような。
    (Windowsだと、野良バイナリ落としてきて導入しました。ログローテートのスクリプトを書く必要があったりして、Windowsでは導入の手間が増えるのだったか。)

    しばらくはメイン機にも入れていたのですが、OS入れ替え時に設定ファイルの引き継ぎ時間(30秒)が無駄だと思ってやめました。
    メイン機は光回線の有線接続ですし。
    そのうちまた使ってみようかな。

typodupeerror

Stableって古いって意味だっけ? -- Debian初級

読み込み中...