実行してはいけないLinuxコマンド

# はじめに
本記事は、実行してはいけないLinuxコマンドについての特集です。
なお、本記事執筆の環境はCentOSになります。Ubuntuの場合は出力されるメッセージが違います。

## rm -rf /
結論から言うと今どきのLinuxの場合、実行できません。
実行する場合は以下のようにオプションが必要です。

- rm -rf / --no-preserve-rootの実行例

```console
[root@localhost ~]# rm -rf / --no-preserve-root
```

**上記コマンドにより/boot/grub2配下のブートローダに関するファイルが削除されると、正常起動ができなくなります。**

ちなみにrm -rf の場合、以下のように警告が表示されるだけで実行はされません。

- rm -rf / の実行例

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



## fork爆弾

[fork爆弾](https://ja.wikipedia.org/wiki/Fork%E7%88%86%E5%BC%BE)とはひたすら、プロセスをforkする処理を行うことで、新しいプロセスの生成を困難にさせたりして、システムを正常に利用できない状況にします。実行すると急激にサーバ負荷が発生し、コンソールでの一切の操作がきかなくなります。

### fork爆弾の実行例

```console
[root@localhost ~]# :(){ :|:& };:
[1] 2063
```

fork爆弾実行後、以下の様なメッセージが出力される。forkをひたすら繰り返し、これ以上forkができないことを意味している。

```console
-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及びメモリが急激に上昇し、一気に高負荷状態になる。

```cosole
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

```cosole
[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: 子プロセスがありません
```

先ほどと同様に実行すると一気に高負荷状態になり、しばらくすると終了する。

```console
-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
```

# おわりに
ワンライナーでいとも簡単にサーバを危険に陥れることができるため、サーバへの侵入をさせないことが第一である。