「滅びのコマンド」や「バルスコマンド」と呼ばれるコマンド「rm -rf /」 をCentOS7系で試してみました。
結果として、このコマンドでOSが破壊されることはなかったので、しっかりOSを破壊できる方法を色々試してみました。
テストに使った環境
自身のWindows上のVirtualBox内にCentOS7を入れたVMを作成。
VMはVagrantでBox化し、OSは何回壊れてもOKな環境としました。
テストとして使用したOSは以下のCentOS7となります。
[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 /」を実行
それではrootユーザでさっそく「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
‘/’ の扱いは特別で、–no-preserve-root オプションを付けないと破壊できないみたいです。
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を破壊するやつですね。
結果は見えてますが、テストしてみます。
とりあえずatdを起動して、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でのコマンド実行は計画的に。