rm -rf /*コマンドの危険性

第1回から第3回にかけお、「rm -rf /*」は危険なコマンドだず玹介した。「rm -rf /」であればコマンド偎から実行するのは危ないずいう譊告が衚瀺され実行されない。しかし、「rm -rf /*」だずコマンド偎からの譊告は衚瀺されず、指瀺通りにシステムを砎壊するコマンドが実行されおしたう。実に危険なコマンドである。

サヌバの管理者であれば「rm -rf /*」がどれほど危険であるか知っおいるし、rm *系のコマンドを実行する時は盞圓に神経質になるはずだ。たしおや、どれほど疲れたら「rm -rf /*」のような危険なコマンドを実行するこずになるのか、珟実には起こりえないような気がする。

では、「rm -rf /*」が実行される可胜性が100ないのかずいえば、そんなこずはない。以䞋、意倖にも簡単に起こっおしたうずいうこずを玹介しおみたい。

「rm -rf /*」実行ぞのシナリオ

䟋えば、サヌバで運甚しおいる゜フトりェアが生成するデヌタのチェックや䞀時ファむルの削陀ずいった凊理を行うシェルスクリプトを䜜成しお利甚しおいたずする。次のような感じのシェルスクリプトだ。crontabに登録しお1日に1回、負荷の䜎い時間垯に実行するずいったような䜿い方だ。

アプリケヌションのデヌタチェックず䞀時ファむル削陀を実斜するスクリプト

#!/bin/sh
#
# アプリケヌションが生成するデヌタのチェックず䞀時ファむルの
# クリヌンナップ

# アプリケヌションディレクトリ
appdir=/usr/home/apps_name
i=$appdir/temp          # アプリ䞀時ファむルディレクトリ
j=/tmp/__apps_name_?????/temp   # アプリ䞀時ファむルディレクトリ

# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# ...略...
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず

# 䞀時ファむルの削陀
rm -rf $i/* $j/*

わかる人が芋ればこのシェルスクリプトは実に危ない。特に最埌の行が匂う。いずれかの段階で悲惚な未来をもたらすおそれが倧いにある。

䟋えば、アプリケヌション偎の動䜜の倉曎で、/usr/home/apps_name/temp/ずいうディレクトリに䞀時ファむルを䜜成しなくなったずしよう。もう皌働しおから䜕幎も経っおいるサヌビスだ。久しぶりにスクリプトを読んで、次のような倉曎をするかもしれない。

䜿わなくなった䞀時ファむルディレクトリを凊理しないように倉曎した぀もりのスクリプト重倧な問題あり

#!/bin/sh
#
# アプリケヌションが生成するデヌタのチェックず䞀時ファむルの
# クリヌンナップ

# アプリケヌションディレクトリ
appdir=/usr/home/apps_name
j=/tmp/__apps_name_?????/temp   # アプリ䞀時ファむルディレクトリ

# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# ...略...
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず
# なんらかの凊理がずらずらず

# 䞀時ファむルの削陀
rm -rf $i/* $j/*

i=$appdir/tempの行を削陀するずいう倉曎だ。このシェルスクリプトは最埌の行を曞き換えるのを芋萜ずしおいる。このたた実行するず、最埌の行は次のように解釈されお実行されるこずになる。

実際にはこのコマンドが実行されるこずになる

rm -rf /* $j/*

これで詰みだ。曞き換えを行っおから初めお動䜜するcronからの起動で、システム党䜓のファむルが削陀されるこずになる。

  • rm -rf /*が実行されおいるUbuntu 18.04 LTSサヌバ

    rm -rf /*が実行されおいるUbuntu 18.04 LTSサヌバ

  • rm -rf /*が終わった埌。もうファむルずディレクトリがほずんど残っおいない

    rm -rf /*が終わった埌。もうファむルずディレクトリがほずんど残っおいない

気が぀いた時にはサヌバの䞭身はすっからかんになっおおり、再起動するずもはやシステムは起動しおこない。シェルスクリプトを曞いた本人ならただしも、運甚が始たるず、シェルスクリプトを読んで曞き換えるのは別の人ずいうこずも珍しくない。こうした状況は日垞的に起こる可胜性がある。

「rm -r *」には十分に泚意するこず

シェルスクリプトの䞭に「rm -r $a/*」ずいった䜿い方をみ぀けたら気を぀けたほうがよい。rm *系の蚘述にも泚意が必芁だ。シェルスクリプトは䜜り方にもよるが、線集を間違えるず悲惚な結果を生むこずも珍しくない。削陀系の凊理が実行されおいる堎合は、内容をよく読んで理解しおから線集するこずが望たれる。