半角スペースの有無だけでサーバーをぶっ壊しそうになった話


本記事は「本番環境でやらかしちゃった人 Advent Calendar 2021」24日目となります。

前提事項

事故を起こしたのは確か6年くらい前
サーバーのOSは確かCentOS6
諸事情でワンオペだった
当時の記憶を元にした再現であり多少盛ってるので細かいツッコミは勘弁してください

何をしてたか

~~~本番環境作業中~~~

(手順書ナガメー)

よし、次はファイルの移動か
mvコマンド入力してカチャカチャカチャ…ッターン

mv: cannot move /bin/ac to '/home/user/work_dir': Permission denied
mv: cannot move /bin/aconnet to '/home/user/work_dir': Permission denied
mv: cannot move /bin/addr2line to '/home/user/work_dir': Permission denied
mv: cannot move /bin/alias to '/home/user/work_dir': Permission denied
mv: cannot move /bin/alsaloop to '/home/user/work_dir': Permission denied
mv: cannot move /bin/alsamixer to '/home/user/work_dir': Permission denied
mv: cannot move /bin/amidi to '/home/user/work_dir': Permission denied
mv: cannot move /bin/amixer to '/home/user/work_dir': Permission denied
mv: cannot move /bin/amuFormat.sh to '/home/user/work_dir': Permission denied
mv: cannot move /bin/analog to '/home/user/work_dir': Permission denied
mv: cannot move /bin/aplay to '/home/user/work_dir': Permission denied
mv: cannot move /bin/aplaymidi to '/home/user/work_dir': Permission denied
mv: cannot move /bin/appstream-compose to '/home/user/work_dir': Permission denied

...以下省略

!!!!!!!!?????????????????????????

えっえっ何これやべぇ止めなきゃ!Ctrl+C ポチー

何が起きたのか

// 実行したかったコマンド
# mv /tmp/logfile.zip /home/user/work_dir

// 実際に実行したコマンド
# mv / tmp/logfile.zip /home/user/work_dir

何が違うかおわかりでしょうか

実行したかったのは単純なファイル移動コマンドでしたが
ファイルの先頭の /tmp/logfile.zip の間に半角スペースが混ざっていました

これにより本来なら/tmp/logfile.zip/home/user/work_dirに移動するはずが
/配下全てとカレントのtmp/logfile.zip/home/user/work_dirに移動するという
rm -rf /*に匹敵する即死コマンドに変貌したわけです

その後どうした

まずは移動先となった/home/user/work_dirの中を確認
不幸中の幸いとしてrootで作業しておらずsudoも付けず、すぐ処理を止めたことにより
移動されてしまったファイルは無かった(確か)ので首の皮は繋がっていました

一応作業ログを見返しやばそうな出力は無かったので
ワンオペだったのをいいことに事実を隠蔽し、何事も無かったように作業を再開しました
その後不具合は起きなかったので多分大丈夫だったでしょう!!!!

ヨシ!じゃないが

なぜ惨劇は起きかけたか

いうまでもなくワンオペでクロスチェックも何もあったものじゃなかった環境ですよね
ただし当時は人がいなくてペアとなる人員を用意できなかったプロジェクトだったのお察しでしょう

二度と惨劇を起こさないためにどうしたのか

正直このタイプの凡ミスはどうしたって無くならないような気もするんですが
今回は手順書を横目で見ながら長いコマンドを手打ちしていたことがミスを誘発した一因と思っています

これに限らず、当時の手順書は実行するコマンドが多く長いものもあったので
実行するPC内に手順書を置く許可を貰い、コピー&ペーストでコマンドを実行させてもらえるように交渉しました
(サーバーへ接続するのは専用のPCからのみだったため)

最後に

筆者はこの事故の影響でmvコマンドがトラウマになりました
今でも可能ならcpしてからrmするという手間を挟んでファイル移動を行っています

(追記)
何も変わってないやんという感じですが
cpというクッションを挟むことによって慎重に確認を行うための個人的な儀式です
さすがに何年も経った今はこんなこと起こさないはずだけどミスると一発アウトはどうしても怖い