shell
シェル芸

【危険シェル芸】禁じられた闇の魔術とその防衛術💥

はじめに

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に仕込んでおく。
  • 迂闊にsudormしない
  • ノブレスオブリージュ

などなど...
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

防衛術

  • 一度発動したらもう止められないので、mountmkfs.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_commandfixed_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"が送りつけられる異常事態が発生する。

防衛術

$ alias emacs='vim'

宗 教 戦 争 勃 発 🔥
精神攻撃系呪文

ミス・グレンジャー。あなたの使っているエディタは何? あなたもVim? 
そうですか☺️グリフィンドールに15点与えます☺️

仕組み

  • aliasコマンドはオリジナルコマンドを登録するといった形で使用される。
  • emacsコマンドを入力するとbash側でvimと入力され、vimが起動。

防衛術

  • 精神攻撃系なので、攻撃を受けているのはあなた自身であることに気づこう。
  • alias emacs='vim' 目には目を。🔥

まとめ

まだ載せきれていない闇の魔術も多く存在する。(というか魔法省よりも怖い人たち🚓🚨がきちゃうのと普通にQiita利用規約違反にあたるのでとても紹介できない呪文もある)
以上のような危険シェル芸は、仕事場でやると本当にシャレにならないので絶対にしないように。