
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は現在開発中というステータスで、製品版においてはこの問題は影響しない。
このバグはリリース前のテスト中のものです (スコア:5, 参考になる)
RHEL 6.7はまだリリースされていません。
この変更点はbug 1102343 [redhat.com]での変更点によって影響を受けていると推測されますが、両方とも ON_QA となっていますし、バグの報告者もレッドハットのエンジニアです。
社内でのQA中に発見されたバグが、公開のbugzillaに登録されている状態です。
このバグを含むコードはリリースされていません。
こちらも参照ください。
http://togetter.com/li/799136 [slashdot.jp]
Re:このバグはリリース前のテスト中のものです (スコア:4, 参考になる)
最後リンク間違えました。 http://togetter.com/li/799136 [togetter.com] が正解です。
Re: (スコア:0)
とはいえ、Target Milestone: rcだからなあ。リリース候補で埋め込まれるバグとしてはなかなかデカいと思いますよ。
Re:このバグはリリース前のテスト中のものです (スコア:1)
典型的なヒヤリハット事例だよね。再発防止策を取らないといけないケース。
Togetterで「オープンに開発をしている証拠ですね!」とか擁護がされていたのがなんか…いや、なんでもない。
Re: (スコア:0)
リリース前にバグを出すことを再発防止するの?
Re: (スコア:0)
ヒヤリハットと認識している人すら少ない模様ですよ
unix誕生から40年もたっているのに、いまだにこんな単純なミスが起きること自体が信じがたいが
Re: (スコア:0)
時間が経つだけで解決するなら、世の中の事故の大半はとっくになくなってる。
Re:このバグはリリース前のテスト中のものです (スコア:1)
件の行はC言語なら、どこで代入されたかもわからないポインタをチェックなしで参照するようなものです
今日日どんなに怠惰なプログラマでもアサートくらいは入れるのが普通ですが、シェルスクリプトとなるとこの体たらく
レッドハットのエンジニアはバカでも素人でもないでしょうから、なにかunixには人を(少なくとも安全面で)バカにしてしまう作用があるのか、そうでないらシェルスクリプト自体が非常に軽視されているのかというところでしょうか
Re: (スコア:0)
Target milestone は「そのリリースまでに修正」なので、rc以前のバグです。
Re: (スコア:0)
リリース前とはいえ
よりにもよって
rm -rf /*
って
タイトル読んだ瞬間にコーヒー吹く被害は相当出てるんじゃないか?
Re:このバグはリリース前のテスト中のものです (スコア:1)
どうでしょう?
スラドに書いてある事を復習する方がいらっしゃるかも…(^^;
Re: (スコア:0)
あれか、systemd vs initで結論出せなくて平行開発てことか。
Re:このバグはリリース前のテスト中のものです (スコア:1)
RHELが新しいメジャーバージョン(7)を出した後に古いメジャーバージョン(5, 6)のマイナーアップデート版を出すのはいつも通りです。
Wikipedia [wikipedia.org]を見ると視覚的によくわかります。
Re:このバグはリリース前のテスト中のものです (スコア:1)
Red Hat Enterprise Linux のライフサイクル [redhat.com]とかRed Hat Enterprise Linux のリリース日と収録カーネルの一覧 [redhat.com]とかも置いておくか
Re: (スコア:0)
誰が仕込んだの?
rm には /etc/rm.deny がいると思うんだ (スコア:3)
rm.deny がある場合は rm.deny に書かれている
ファイルとディレクトリを消さないようにしたら
いいんじゃないかと思うんだ。
chattr コマンドを使いましょう (スコア:3, 参考になる)
もっと確実な方法が,すでに実装されています.
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なら標準で対応しています.
ソースとともにあらんことを (スコア:3)
rmstarがrootを攻撃したという事態にはSourceを使って再構築するのだと、OS/1 Kenobi師もおっしゃっております。
このタイプのバグを未然に防ぐには (スコア:1)
cd $SQUID_PIDFILE_DIR && rm -rf ./* && rmdir $SQUID_PIDFILE_DIR
Re:このタイプのバグを未然に防ぐには (スコア:1)
別コメントでも指摘されていますが,
> cd $SQUID_PIDFILE_DIR && rm -rf ./* && rmdir $SQUID_PIDFILE_DIR
は,正しく機能しないので,真似しないように.
Re:このタイプのバグを未然に防ぐには (スコア:1)
Re: (スコア:0)
というか、こういう原始的なスクリプトが普通なの?
Re:このタイプのバグを未然に防ぐには (スコア:2)
デーモンの起動は、普通は全部この手のシェルスクリプトでラップしてますよ。
実行バイナリをダイレクトに起動するのもできなくはないでしょうけど、そもそもメリットが無いですよね。
Re:このタイプのバグを未然に防ぐには (スコア:3, おもしろおかしい)
>>デーモンの起動は、普通は全部この手のシェルスクリプトでラップしてますよ。
systemd 「ぐふふふふふ・・・」
Re:このタイプのバグを未然に防ぐには (スコア:2)
うるさい!おまえ(systemd)なんて普通じゃねぇ!
# もうね、面倒で面倒で。
Re: (スコア:0)
プログラム言語については関数型がどうとかカプセル化でこうとか
やたら工夫してるのに、こんなガバガバな足回りじゃ本当意味ないよなぁ。
Re: (スコア:0)
変数の中身が想定どおりなのを確認してからrmすればいいのに
なぜ中身を確認せずにcdして&& rm?
その変数に"/"が入ってたらダメじゃん。
Re: (スコア:0)
$SQUID_PIDFILE_DIRが空の場合は、実行者のhomeディレクトリ以下が丸ごと消えますね
Re: (スコア:0)
いやルートディレクトリ以下丸ごと
rm -rf /*
Re: (スコア:0)
お恥ずかしい。勘違い。
Re: (スコア:0)
作法として正しいとかは置いといて、自分が中にいるじゃんかよ
Re: (スコア:0)
根本的に、rm の機能を制限するわけにはいかないのかい?
Re: (スコア:0)
-rfはオプションですので…
Re: (スコア:0)
いくつかのディレクトリは -rff にしないと消えないようにするとかかね。
Re: (スコア:0)
GNUのrmではある程度ガードかかってますよ
chrootとかしながら遊んでみては?
Re: (スコア:0)
消さないって選択肢もありまして、
先日10年ぐらい前に書いたスクリプトを久しぶりにメンテしたら、一時フォルダの中に作ったファイルをディレクトリ毎消す部分をコメントアウトしてた
/tmpの下だったし、年2~3回の再起動で消される設定だったから、それでいいと思ったんだろうな。
気持ちはわかる
Re:このタイプのバグを未然に防ぐには (スコア:2, 興味深い)
/tmpといえば、腹立つことを思い出す、/tmp下に、起動スクリプトを置いてる設計っておかしいですよね?
10日以上、連続運転(または10日電源OFF)で再起動させてたら、起動スクリプトが消され起動しなくなった。
(在庫の商品がほぼ全滅した)
これって、故意に時限爆弾しこんでるよな?
こんなところに、起動スクリプトを置いてる設計を指摘してるのに、まともに話を聞かず
これをlinuxの仕様ですっていいきって修正しなかった会社あるからな。
Re: (スコア:0)
/tmp (/var/tmp) は再起動で消えるのをあてにするとか、find -ctime で古いのから消すとかは見たことある。
Re: (スコア:0)
それだと値が/だと駄目では?
いま試せないのですが。。
Re: (スコア:0)
set -u
ってbshのオプションつけてる。
rmdir?Linuxはカレントディレクトリ消せちゃうの? (スコア:0)
うわ、絶対パスだと消せる!rmdir . だと消せないのに。これでいいのか?
もう/*は使えなくしてしまえ (スコア:1)
やらかすほうが悪いんですが、ちょくちょくみるんで、ルートディレクトリにワイルドカードのときだけ10分以内の時刻入力とかにしちゃえばいいんじゃね。
(てきとう)
情報古いよ (スコア:0)
こっちを見ましょう
http://togetter.com/li/799136 [togetter.com]
これはひどい (スコア:0)
なに、この追記。
rmにもゴミ箱が付いていればいいのに (スコア:0)
色々工夫して似たような効果を持つ環境を構築している人はいるようだが、素のrmにそういう機能があれば
悲劇の幾分かが防げるように思う。
Re: (スコア:0)
削除したものを仮置き場に溜めておくという機能が追加されても、それがデフォルトになるとは限らないし、
rm -rf --direct-remove /
みたいなオプションが追加されて、それがシェルスクリプトに散らばるだけになるかと。
Re: (スコア:0)
Windows上でも大きなファイルを削除する時は、ゴミ箱が溢れて削除できなくなるので
「ゴミ箱にファイルを移動しないで、削除と同時にファイルを消去する」オプションをONにしてる
いずれにせよゴミ箱に入れた直後に削除するだけだしな。
でじゃぶ (スコア:0)
どっかで見た話だなーと思ったら関連リンクにあるSteamの話と全く同じこと?
手元のシステムでも結構入ってそうな記述だなあ。
事実としては (スコア:0)
> 事実としては、RHEL6.5の時代に一般の方からBZに報告された問題の修正パッチ案がまずくて、
まずいパッチであることを判断できずに修正として入れてしまったということですね。
>RHのQAチームがそのパッチを当てた「開発中のRHEL6.7」のテスト中に問題を発見して、
>そのパッチを却下したという事のようです
QAチームが機能しているということですね。
久しぶりにSquidの名前を見た (スコア:0)
当時、大学のネットワークが遅く感じて、大学が学生に貸与しているノートに(勝手に入れたLinuxの上に)入れていた記憶があります。
Windowsに導入して、アクセスを捌いた記憶もあるような。
(Windowsだと、野良バイナリ落としてきて導入しました。ログローテートのスクリプトを書く必要があったりして、Windowsでは導入の手間が増えるのだったか。)
しばらくはメイン機にも入れていたのですが、OS入れ替え時に設定ファイルの引き継ぎ時間(30秒)が無駄だと思ってやめました。
メイン機は光回線の有線接続ですし。
そのうちまた使ってみようかな。