はじめに
Shellには決して使ってはいけない禁呪文と呼ばれるものが存在する。もし社用サーバに対しこれを故意に使えばアズカバン送りは免れ得ないであろう恐ろしい闇の魔術である。(果たしてそれだけで済むのか・・・?)
しかし、無知故に、意図せずこのような闇の魔術を発動させてしまうことはインフラエンジニアにとっては、ごく稀にある出来事と言える。無知ゆえに事故を起こさないためにも、🔰初心者🔰にこそ読んでほしい。
今回は、闇の魔術の発動原理と、そのような闇の魔術に対する防衛術を伝授したい。
‼️注意‼️
ここにある記事の闇の魔術を実行したことによる責任は”一切”取れませんのでご注意ください。
また、禁忌呪文は魔法省から使用が禁じられているので、具体的な抜け方などが未検証なコマンドもいくつか存在します。(は?)詳しい情報をお持ちの偉大なる魔法使いの方は情報提供の方をぜひお願いいたします。
参考サイト、及びコマンドの引用はこちらから:
- 【試さないで】危険シェル芸【違法(脱法)シェル芸を勧められたり、 身近な人が持っていたりしませんか?】
- 10 Most Dangerous Commands – You Should Never Execute on Linux
- 新・5大Linux破壊の呪文
死の呪文
取り返しのつかない系の呪文、つまり死の呪文☠️をまとめる。
# rm -rf /
言わずと知れた、単純にして最強の死の呪文。いわゆるアバダ・ケダブラの類いなのだが、これが誤発動してしまう事例を稀に観測している。
仕組み
-
rm
コマンドはファイルやフォルダを削除するコマンド -
-r
オプションはファイルを再帰的に無限に削除するオプション -
-f
オプションは強制的に削除するオプション -
/
はrootディレクトリなので、データの全てを表す
これらをroot権限で発動するときに爆死する。もちろんそれ通常ユーザは被害が少ない(けれども結局後述の/etc/passwdも消えるので注意)
類例
-
rm -rf /*
.抜けなどで起こる突然の死 -
rm -rf ~
間違えて途中でEnterを押すなどによる死 -
rm -rf ~/* .json
うっかりスペースを入れると別フォルダ扱いなので死 -
rm -rf ./tmp /* tmpファイルを削除 */
shのコメントは/* */
では無いので、死 -
mv / /dev/null
rootフォルダがブラックホールに飲み込まれて死ぬ
うっかりでは済まないので、気をつけよう。
防衛術
- そもそも**-fオプションを使わない**。
-
alias rm='rm -i'
を~/.bashrc
に仕込んでおく。 - 迂闊に
sudo
でrm
しない - ノブレスオブリージュ
などなど...
alias rm='rm -i'
については逐一聞いてくるオプションで、これを設定しておけば安心?
... yes | sudo rm -rf ~/
とかしないように。グリフィンドール10点減点。
# echo "" > /etc/passwd
意外に知られていないが、これも死の呪文の一つといえる。 /etc/passwdはログインの際に必ず必要なファイルであり、ド初心者が何かここにアカウントなりを追加しようとして誤発動し、死ぬ場合がある。(そもそもpasswdにパスワードが記載されていないので、これだけでアカウント追加は出来ないのだが。)
これを行うと、誰もログインが出来なくなり、文鎮と化す。 死の宣告である。☠️
仕組み
-
echo
文字列を出力 -
>
パイプ。右のファイルを上書き -
/etc/passwd
アカウントを管理しているファイル。 - そもそも
/etc/passwd
はログイン時にユーザが読むファイルで、誰でも読める状態になっている。 - つまり、
/etc/passwd
を読めなくするだけでも死ぬ
類例
-
chmod 600 /etc/passwd
読めなくなりログイン不能->死亡 -
> /etc/passwd
これも空ファイルで上書きされ、無事死亡 rm /etc/passwd
mv /etc/passwd ~
防衛術
- そもそも
/etc/passwd
は初心者が弄っていい場所ではない。🙄 - これを読んで、
/etc/passwd
では必ずread-onlyを心掛けよう。 - うっかり発動してしまった場合、死ぬまでにはまだ時間はあるので、別デバイスにバックアップや
scp
を駆使し、なんとかしよう。
# mkfs.ext4 /dev/sda1
指定した記録デバイスを真っ白な状態にする呪文。 /dev/sda1
にメインシステムが積んであれば、rm -rf /
と同様の効果を得ることが可能。 つまり、**死の呪文である。**☠️
仕組み
-
mkfs.ext4
ext4形式のパラメータで指定デバイスをフォーマットする。未確認だが、確か発動すると自動で動くはず。 -
/dev/sda1
デバイスファイル。SSDやHDDを物理的に接続した後、mount
コマンドでシステムに論理的に接続した際に作られる。基本的に最初にsdaが割り当てられ、ドライブを論理的にパーティションで分けていないのときにsda1で登録される。(ちなみに第2ディスクは/dev/sdb
となる。→このページからの情報)
類例
> /dev/sda1
mv /dev/sda1 /dev/null
防衛術
- 一度発動したらもう止められないので、
mount
やmkfs.ext4
する際は要注意。 - もしかしたらmkfsについてはストッパーがある可能性が高いので(未検証)すでにシステム側でブロックされている可能性はある。(ubuntuだと固定で/dev/sda1/はシステムを司るデバイスになるので。)
- いずれにせよノブレスオブリージュを心がけたい。
# chmod -R 000 /
簡単な原理ですが、一発でrootフォルダがロックされることとなる。 つまり、死への直行便
仕組み
- フォルダへのパーミッションは基本的に
chmod xxx
で変更出来る。 -
chmod 000
はroot権限でもアクセスできないファイルとして全ロックをかけることになる
防衛術
- rootのパーミッションをいじるなんて言語道断。絶対にしないこと。
- そもそも
chmod 000
なんてパラメータが設定できるの大分オカシイのでは・・・? 絶対使わないようにしよう - 不正アクセスなどで似たことをされるかもしれない。普段からのセキュリティをしっかり管理しよう。
# rsync -a --delete-excluded ~ /
これをするとrootフォルダがさっぱり。**どうでしょう?この開放感???**💣💣💣
仕組み
-
rsync
ファイル同期のためのコマンド。参考サイトはこちら -
-a
オプションは他のオプションの総まとめ。再帰的に同期といった設定を行う。 -
--delete-excluded
「同期から除外したファイルも削除する」ということで、~/以外のデータは消えることとなる。
類例
sudo rm -rf /
防衛術
-
/
をうっかり同期先に向かわせないようにすることが大切。 -
--delete-excluded
っている??使わないならやめておくべきかと。
# ^typo_command^fixed_command
これは意外に知らない方も多いのでは? ^typo_command^fixed_command
と打つと、過去のコマンド入力履歴から、該当するtypo_command
をfixed_command
に置き換え、実行してくれます。参考サイト
例えば、sl -l
と間違えて打ったとして、続けて^sl^ls
と打てばls -l
を実行してくれる便利機能。
ただし、履歴を遡れるだけ遡っていくので、ヒヤリハットの温床になっている。 正直何が起こるかわからない。特に注意すべきは、rm -rf
に変換してしまう例。注意しないと、死へ一直線となりうる。
防衛術
- 横着しない。
- 大体からしてsudo権限でそんな危ういことをしない。(通常ユーザでも十分怖い)
- sudo付けてなくてミスったのなら、
sudo !!
コマンドを使おう。
死にはしないが止まる系呪文
なんとかなるかもしれない、そういった魔法省コンプラギリギリの呪文をまとめる。
$ echo "source ~/.bashrc" >> ~/.bashrc
ログイン時に固まる呪文。酔っ払った状態などでvimで編集した際に似たことをやってしまい、酔いが醒めるといった事態になってしまった例を観測している。
仕組み
-
~/.bashrc
はbash起動時に発動するshell script -
source ~/.bashrc
は~/.bashrc
を発動してshellに適応させるコマンド - つまり再帰的に永遠とぐるぐる処理が続くことになる。
類例
echo "bash" >> ~/.bashrc
防衛術
- 何かおかしいぞ・・・?って思ったらすぐ
Ctrl+C
で抜けてみましょう。もしかしたらなんとかなる。 - 結局メモリ展開だけなので、最悪電源OFFで元に戻る。
- と、思いきや再ログイン時に再度発動するので、速攻
Ctrl+C
で抜けよう。なんとかなるかも。(ならないかもしれない・・・情報求む)
$ :(){:|: &};:
怪文書に近いが、これも立派にshell scriptだったり。
仕組み
-
:()
を定義 -
:|: &
をすると:
を定義します。 -
;
で一度区切ります。ここで定義は完了 - 最後に
:
を発動することで、起爆💥
いわゆるfork爆弾と言われているもので、簡単にコンピュータがハングします。
防衛術
- 他人や無知な参加者からこの爆弾を投げ込まれることが多々存在するらしい。
- 即再起動し、即刻退場させるべき。
- ちなみに、fork爆弾に対する防衛術は、専門ページが詳しいので、そちらを参考にして欲しい。
# iptables -I INPUT -j DROP
パケットはじきコマンド。 sshなどで接続している場合にこれをやると即連絡がつかなくなる模様(未検証) 再起動するまで治らないため、データセンターなどでこれをやると、死ぬ
参考サイト
仕組み
- 後ほど解説します。(というか、詳しい人がいたらちょっと教えて欲しいです。)
防衛術
- 再起動のみ。
攻撃呪文
今まで自爆特攻系💣中心でしたが、嫌がらせっぽいものを紹介
$ yes | wall
画面に垂れ流し形攻撃。幼少期のフォイフォイはこのコマンドで人のことをいじめていたとか。🤥
仕組み
-
yes
コマンドは永遠と"y"を垂れ流すコマンド。対話形式系でy/nが多すぎてうざい時に使う。 -
wall
コマンドは、ログインしている全員の端末上にメッセージが届くコマンド - つまり、発動者から永遠と"y"が送りつけられる異常事態が発生する。
防衛術
-
mesg n
これで止められます。 参考サイト
$ alias emacs='vim'
宗 教 戦 争 勃 発 🔥
精神攻撃系呪文
ミス・グレンジャー。あなたの使っているエディタは何? あなたもVim?
そうですか☺️グリフィンドールに15点与えます☺️
仕組み
-
alias
コマンドはオリジナルコマンドを登録するといった形で使用される。 -
emacs
コマンドを入力するとbash側でvim
と入力され、vimが起動。
防衛術
- 精神攻撃系なので、攻撃を受けているのはあなた自身であることに気づこう。
-
alias emacs='vim'
目には目を。🔥
まとめ
まだ載せきれていない闇の魔術も多く存在する。(というか魔法省よりも怖い人たち🚓🚨がきちゃうのと普通にQiita利用規約違反にあたるのでとても紹介できない呪文もある)
以上のような危険シェル芸は、仕事場でやると本当にシャレにならないので絶対にしないように。