はじめに
本記事は、実行してはいけないLinuxコマンドについての特集です。
なお、本記事執筆の環境はCentOSになります。Ubuntuの場合は出力されるメッセージが違います。
rm -rf /
結論から言うと今どきのLinuxの場合、実行できません。
実行する場合は以下のようにオプションが必要です。
- rm -rf / --no-preserve-rootの実行例
[root@localhost ~]# rm -rf / --no-preserve-root
上記コマンドにより/boot/grub2配下のブートローダに関するファイルが削除されると、正常起動ができなくなります。
ちなみにrm -rf の場合、以下のように警告が表示されるだけで実行はされません。
- rm -rf / の実行例
[root@localhost ~]# rm -rf /
rm: `/' に関して再帰的に操作することは危険です
rm: このフェイルセーフを上書きするには --no-preserve-root を使用してください
fork爆弾
fork爆弾とはひたすら、プロセスをforkする処理を行うことで、新しいプロセスの生成を困難にさせたりして、システムを正常に利用できない状況にします。実行すると急激にサーバ負荷が発生し、コンソールでの一切の操作がきかなくなります。
fork爆弾の実行例
[root@localhost ~]# :(){ :|:& };:
[1] 2063
fork爆弾実行後、以下の様なメッセージが出力される。forkをひたすら繰り返し、これ以上forkができないことを意味している。
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
fork爆弾の実行時のvmstatの様子。CPU及びメモリが急激に上昇し、一気に高負荷状態になる。
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 275420 876 129820 0 0 0 0 38 61 0 0 100 0 0
0 0 0 275420 876 129820 0 0 0 0 26 50 0 1 99 0 0
1 0 0 275420 876 129828 0 0 0 0 45 64 0 0 100 0 0
0 0 0 275420 876 129828 0 0 0 0 30 52 0 0 100 0 0
0 0 0 275420 876 129828 0 0 0 0 42 62 0 0 100 0 0
1 0 0 275420 876 129820 0 0 0 0 56 64 0 1 99 0 0
204 0 0 235252 876 137256 0 0 0 0 289 382 4 24 72 0 0
651 0 0 137356 876 157748 0 0 0 0 717 505 10 90 0 0 0
1004 0 0 59356 876 175824 0 0 0 0 609 399 11 89 0 0 0
1267 0 0 4716 876 181460 0 0 0 0 532 289 10 90 0 0 0
211 1298 1104 4660 0 115148 32 36268 18824 36340 1835 28627 6 94 0 0 0
1520 1661 75092 5900 0 127460 248 38852 6292 38852 2477 60139 3 97 0 0 0
43 1833 85876 9332 0 128604 748 10940 4628 10940 1457 86747 1 99 0 0 0
24 1853 91012 10388 0 127756 68 5184 1564 5186 935 50949 0 100 0 0 0
98 1911 97872 4916 0 129368 1128 6952 1192 6952 1638 70752 2 98 0 0 0
114 1623 251996 155388 0 135796 588188 358116 691149 358159 58132 551952 1 93 0 5 0
207 1224 244004 49152 0 136032 25156 1112 30136 1232 67122 585645 1 79 0 20 0
66 1232 240756 34620 0 134448 8204 408 8444 408 2866 16373 4 96 0 0 0
154 1043 233940 9144 0 135904 9900 552 11464 552 2595 12320 6 94 0 0 0
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
198 1315 232284 10024 0 137320 2924 524 4348 884 1889 25220 2 98 0 0 0
1691 1734 231520 11500 0 137580 3088 736 3088 736 1252 16318 1 99 0 0 0
2028 1879 232012 12872 0 138816 5376 1744 5704 1744 3022 13647 0 100 0 0 0
143 1956 231952 10304 0 138176 4552 820 11328 820 1463 53474 1 99 0 0 0
49 2039 231748 5624 0 140080 1456 816 1456 816 1401 54492 1 99 0 0 0
48 2031 232760 7040 0 138852 1528 5308 8180 5308 1656 34979 0 100 0 0 0
2080 2076 238196 15220 0 138748 888 8528 11000 8532 2091 91483 1 99 0 0 0
2083 2046 256724 22772 0 145816 2352 12464 15176 12464 2490 22772 0 100 0 0 0
72 2031 261412 25544 0 145748 1740 5352 2136 5376 1204 18799 0 100 0 0 0
527 2019 265736 19900 0 143416 3092 4896 3092 4896 1210 17281 0 100 0 0 0
131 2125 278464 23964 0 143976 6208 20036 11400 20036 3658 59955 1 99 0 0 0
114 2225 287880 12692 0 148656 3928 5004 6020 5004 1989 17866 1 99 0 0 0
87 2206 294004 14740 0 148444 1468 6296 1468 6296 1130 70327 0 100 0 0 0
47 2241 298996 18812 0 149968 1492 5624 7084 5644 1326 22892 1 99 0 0 0
78 2227 301280 16884 0 153700 692 2468 6872 2468 1196 18101 0 100 0 0 0
84 2240 304520 20756 0 154208 444 3420 1136 3420 1109 18148 0 100 0 0 0
74 2254 308756 22508 0 153660 1920 4516 2756 4536 1107 18298 0 100 0 0 0
118 2243 313164 27644 0 152420 3084 5064 3084 5064 1417 26230 1 99 0 0 0
88 2260 318648 28328 0 152660 2000 6108 2000 6108 1035 32149 0 100 0 0 0
fork爆弾の実行例2
[root@localhost ~]# f(){ f|f& };while :;do f;done
[1] 2065
[2] 2067
[3] 2069
[4] 2071
[5] 2073
[6] 2075
[7] 2077
[8] 2079
[9] 2081
[10] 2083
[11] 2085
[12] 2087
[13] 2089
[14] 2091
[15] 2093
[16] 2095
[17] 2097
[18] 2099
[19] 2173
[20] 2175
[21] 2177
[22] 2179
[23] 2181
[24] 2183
[25] 2185
[26] 2187
[27] 2189
[28] 2191
[29] 2193
[30] 2195
[31] 2389
[32] 2391
[33] 2393
[34] 2395
[35] 2397
[36] 2399
[37] 2807
[38] 2809
[39] 2811
[40] 2813
[41] 2815
[42] 2817
[43] 2819
[44] 3667
[45] 3669
[46] 3671
[47] 3673
[48] 3675
[49] 3677
[50] 3679
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
先ほどと同様に実行すると一気に高負荷状態になり、しばらくすると終了する。
-bash: fork: リソースが一時的に利用できません
-bash: fork: retry: リソースが一時的に利用できません
-bash: fork: リソースが一時的に利用できません
-bash: fork: retry: 子プロセスがありません
-bash: fork: リソースが一時的に利用できません
-bash: fork: リソースが一時的に利用できません
-bash: fork: リソースが一時的に利用できません
-bash: fork: リソースが一時的に利用できません
-bash: fork: retry: 子プロセスがありません
-bash: fork: retry: 子プロセスがありません
[45] Terminated f | f
[46] Terminated f | f
[48] Terminated f | f
[50]- 終了 f | f
[51]+ Terminated f | f
おわりに
ワンライナーでいとも簡単にサーバを危険に陥れることができるため、サーバへの侵入をさせないことが第一である。