CentOS7系で「rm -rf /」を実行してもOSは破壊されなかった。

スポンサーリンク
Linux

滅びのコマンドとかバルスコマンドとか言われるコマンド「rm -rf /」 をCentOS7系で試してみました。

結果として、このコマンドでOSが破壊されることはなかったので、OSの破壊方法を色々試してみました。

テストに使った環境

自分のWindows上のVirtualBox内にCentOS7.4を入れたVMを作成。

VMはVagrantでBox化し、OSは何回壊れてもOKな環境としました。

テストとして使用したOSは以下のCentOS7.4となります。

[root@cent74 ~]# uname -a
Linux cent74 3.10.0-693.el7.x86_64 #1 SMP Thu Jul 18 21:39:49 JST 2019 x86_64 x86_64 x86_64 GNU/Linux

「rm -rf /」を実行

それではさっそく「rm -rf /」を実行してみます。

[root@cent74 ~]# rm -rf /
rm: `/' に関して再帰的に操作することは危険です
rm: このフェイルセーフを上書きするには --no-preserve-root を使用してください

あれ、削除されない。安全対策されてる。
マニュアル見てみよう。

[root@cent74 ~]# man rm

OPTIONS
       Remove (unlink) the FILE(s).
       
       --no-preserve-root
              do not treat '/' specially

‘/’ の扱いは特別でした。

cronで「rm -rf /」を仕掛けてみる

cronに仕掛けておき、時がきた時にOSを破壊するやつですね。

テストしてみます。まずはcron登録

[root@cent74 ~]# date
2019年  7月 18日 木曜日 21:04:34 JST
[root@cent74 ~]# crontab -l
05 21 * * * rm -rf /

cronの設定が終わったので少し待って様子を見ます。

[root@cent74 ~]# date
2019年  7月 18日 木曜日 21:06:16 JST
新しいメールが /var/spool/mail/root にあります

壊れない。

[root@cent74 ~]# less /var/spool/mail/root
From root@cent74.localdomain  Thu Jul 18 21:06:02 2019
Return-Path: <root@cent74.localdomain>
X-Original-To: root
Delivered-To: root@cent74.localdomain
Received: by cent74.localdomain (Postfix, from userid 0)
        id E7E812F7; Thu, 18 Jul 2019 21:06:01 +0900 (JST)
From: "(Cron Daemon)" <root@cent74.localdomain>
To: root@cent74.localdomain
Subject: Cron <root@cent74> rm -rf /
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=7>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=ja_JP.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20190718030601.E7E812F7@cent74.localdomain>
Date: Thu, 18 Jul 2019 21:06:01 +0900 (JST)

rm: `/' に関して再帰的に操作することは危険です
rm: このフェイルセーフを上書きするには --no-preserve-root を使用してください

普通に実行した時と同じように、 –no-preserve-root オプションを付けないと消せなかったです。

atコマンドで挑戦

atコマンドは指定した時間にコマンドを実行するコマンドです。

これもcron同様、時がきた時にOSを破壊するやつですね。

結果は見えてますが、テストしてみます。

とりあえずadtを起動して、atコマンドを仕掛けます。

[root@cent74 ~]# systemctl start atd
[root@cent74 ~]# date
2019年  7月 18日 木曜日 21:53:05 JST
[root@cent74 ~]# at 21:55
at> rm -rf /
at> <EOT>
job 2 at Thu Jul 18 21:55:00 2019
[root@cent74 ~]#

少し待って様子を見ます。

[root@cent74 ~]# date
2019年  7月 18日 木曜日 21:55:05 JST
新しいメールが /var/spool/mail/root にあります

[root@cent74 ~]# less /var/spool/mail/root
Subject: Output from your job        2
To: root@cent74.localdomain
Message-Id: <20190718025501.3EFFF2EC@cent74.localdomain>
Date: Thu, 18 Jul 2019 21:55:01 +0900 (JST)
From: root@cent74.localdomain (root)

rm: `/' に関して再帰的に操作することは危険です
rm: このフェイルセーフを上書きするには --no-preserve-root を使用してください

はり壊れませんでした。–no-preserve-root オプションが必要。

「rm -rf /*」 コマンドで試してみる

rmコマンドは ‘/’ の扱いが特別で削除できなかったので、 ‘/*’ で実行してみます。

[root@cent74 ~]# rm -rf /*
rm: `/boot' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/dev/mqueue' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/dev/hugepages' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/dev/pts/0' を削除できません: 許可されていない操作です
rm: `/dev/pts/ptmx' を削除できません: 許可されていない操作です
rm: `/dev/shm' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/home' を削除できません: デバイスもしくはリソースがビジー状態です
~中略~
rm: `/sys/module/nf_conntrack_ipv6/holders' を削除できません: 許可されていない操作です
rm: `/sys/hypervisor' を削除できません: 許可されていない操作です
[root@cent74 ~]#

おー消えてる消えてる。
あれ、でプロンプトが戻ってきた。
テキトーにコマンド実行してみます。

[root@cent74 ~]# ls -l
-bash: ls: command not found
[root@cent74 ~]# ps -ef
-bash: ps: command not found

/bin ディレクトリ毎消えたので、コマンドが見つからない状態です。

そして新規ログインもできなくなり、無事(?)OS破壊できました。

「rm -rf –no-preserve-root /」を試してみる。

最後に、 –no-preserve-root オプションを付与して実行してみます。

[root@cent74 ~]# rm -rf --no-preserve-root /
rm: `/boot' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/dev/mqueue' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/dev/hugepages' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/dev/pts/0' を削除できません: 許可されていない操作です
rm: `/dev/pts/ptmx' を削除できません: 許可されていない操作です
rm: `/dev/shm' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/proc/fb' を削除できません: 許可されていない操作です
~中略~
rm: `/root' を削除できません: デバイスもしくはリソースがビジー状態です
rm: `/home' を削除できません: デバイスもしくはリソースがビジー状態です
[root@cent74 ~]#

[root@cent74 ~]# ls -l
-bash: ls: command not found
[root@cent74 ~]# ps -ef
-bash: ps: command not found

こちらも /bin ディレクトリ毎消えたので、コマンドが見つからない状態になりました。

新規ログインもできなくなり、無事(?)OS破壊できてます。

結論

CentOS7系で「rm -rf /」を実行してもセーフです。

ただし、恐ろしいコマンドに変わりはありませんので、実行しないことをオススメします。

間違って打っても冷や汗かくんだろうなぁ。。

rootでのコマンド実行は計画的に。