はじめに
昔の自分がやらかした過ちをここらへんで懺悔しておきます。
願わくば同じ失敗をしてしまう人が少しでも減りますように。
「いやこんなコマンド打たんだろ…」と思いますよね。なんか流れでやっちゃう時があるんです。ホントに。
【第1章】不穏な依頼・/直下の作業パス
もう何年前になるでしょう。IT業界に就職して数年、とあるUNIX系OSで管理系機能はそれなりに理解し、開発にも操作にもすっかり慣れてきて、ちょっとした自信もついてきた頃のことでした。
先輩:「わたし君、明日お客さんセンターに搬送するマシンで最後にちょっとしたテストしたいんだ。やっといてくれないかな。オレ今日はもう用事があって。」
わたし君:「あ、いっすよ。どこに置きました?」
先輩:「作業ディレクトリ消しちゃった後だから、/直下にtest.tmpって作ってftpで入れてあるから実行権限付けて動かしてみて。じゃあ、お先~」
わたし君:「(ええ、/test.tmpってw・・・まあいいか)」
【第2章】破滅への第一歩・rootを使用
状況を確認。
# こんな出力でしたーというイメージです
#
[watashi@host1 test.tmp]$ ls -lR
.:
合計 0
-rw-------. 1 ftpusr ftpusr 0 12月 20 23:40 test_main.sh
drwxrwxrwx. 2 ftpusr ftpusr 48 12月 20 23:41 test_sub1
drwxrwxrwx. 2 ftpusr ftpusr 48 12月 20 23:41 test_sub2
drwxrwxrwx. 2 ftpusr ftpusr 48 12月 20 23:42 test_sub3
:
:
./test_sub1:
合計 0
-rw-------. 1 ftpusr ftpusr 0 12月 20 23:41 test_sub1.sh
./test_sub2:
合計 0
-rw-------. 1 ftpusr ftpusr 0 12月 20 23:41 test_sub2.sh
:
:
わたし君:「あー、ftpusr:ftpusrで600か。実行するならファイルのownerもwatashiにしたいし、rootでオーナー変更して実行権限も付けるか」
[watashi@host1 test.tmp]$ su -
パスワード:
[root@host1 ~]#
[root@host1 ~]# cd /test.tmp
[root@host1 test.tmp]#
【第3章】破滅への第二歩・再帰処理
わたし君:「サブディレクトリあるから-R付けなきゃ」
[root@host1 test.tmp]# chmod -R a+x *.sh
[root@host1 test.tmp]# chown watashi:watashi -R *
わたし君:「よし実行っと」
[root@host1 test.tmp]# ./test_main.sh
エラー:設定ファイル .test_main.ini を読めません
[root@host1 test.tmp]# ll .test_main.ini
-rw-------. 1 ftpusr ftpusr 0 12月 20 23:41 .test_main.ini
[root@host1 test.tmp]#
わたし君:「は? ".test_main.ini" とか何で設定ファイルを隠しにしてんだよ。*でヒットしないからftpusrのままじゃん。
もう面倒だからこれで全設定ファイル直そ。」
# 非常に危険な処理です!ダメ!絶対!
#
[root@host1 test.tmp]# chown watashi:watashi -R .*
そして流れるように出力される大量のエラー。しかもやたら時間がかかってる。なにこれ怖い。
もう一個ログインセッションがあるから覗いてみるか。
【終章】そしてすべてが私になった
# こんな出力でしたーというイメージです
#
[watashi@host1 ~]$ ls -l /
合計 28
drwxrwxrwx. 3 watashi watashi 18 12月 6 16:35 adm
lrwxrwxrwx. 1 watashi watashi 7 6月 21 2021 bin -> usr/bin
dr-xr-xr-x. 5 watashi watashi 4096 10月 16 16:52 boot
drwxr-xr-x. 20 watashi watashi 3180 12月 20 23:31 dev
drwxr-xr-x. 144 watashi watashi 8192 12月 20 23:39 etc
drwxr-xr-x. 14 watashi watashi 185 12月 20 23:39 home
lrwxrwxrwx. 1 watashi watashi 7 6月 21 2021 lib -> usr/lib
lrwxrwxrwx. 1 watashi watashi 9 6月 21 2021 lib64 -> usr/lib64
drwxr-xr-x. 2 watashi watashi 6 6月 21 2021 media
drwxr-xr-x. 4 watashi watashi 28 10月 27 13:32 opt
:
:
わたし君:「ちょ、え、何これ?全部のファイルのオーナーがwatashiになってる?なんで?…」
賢い諸氏はお分かりでしょうが解説します。
わたし君は作業ディレクトリ下のドットファイルをヒットさせる為に、よく考えずに次のワイルドカードを使った。
.*
確かにドットファイルはヒットする。しかし、当然ながら次のパスがヒットする。
..
親ディレクトリ………そしていま作業している /test.tmp の親ディレクトリは /
つまりrootで以下のコマンドを打ったのと同じ結果となる。
[root@host1 test.tmp]# chown watashi:watashi -R /
/ 以下を再帰処理で全ファイルの所有者を一般ユーザwatashiに変更…
そして、すべてのファイルが私(watashi)のものになった…
その後
その後、システムは丸っと動かなくなりました。セッションは暫くして切れ、もうログインも出来ません。ローカルターミナルもダメ。再起動してももう正常には起動しません。
そこから、OSのシステムファイルをインストールメディアから上書きインストール。デプロイした各種ファイルやミドルウェアのオーナー設計を設計書から確認して手で復旧。そして、全ファイルシステムに渡る私(watashi)探しの旅を終えて、OS、ミドルウェア、アプリの全正常起動を確認した時には、もう明け方でした。
教訓
root使ってるときはコマンド打つ前に一拍考えろ