事の発端
うちのサイトは共用のレンタルサーバーで運用されている。当然、同じサーバー内すなわち同じグループ内には沢山の他人が同居している。そんな状況なのでグループには権限を与えないように運用している。しかし、ファイルのアップロード等でグループに権限が付いてしまっている時がある。今回もいくつかのファイルのグループに権限が付いているのを見つけ「纏めて削除だ」と「chmod -R a-g *」を実行。
何か変??
実行後にファイルの一覧を見てみると左側の方がなんかやけにスッキリしてる。はい、chmodは「誰に」「権限」の順番で指定ですね。「chmod -R a-g *」だと「全員」から「g」を削除です。で、権限のgって何?man見ると「The group permission bits in the original mode of the file.」となっている(うちFreeBSDです)。でも「g」なんて権限、漁っても情報がない。とりあえず逆に「chmod -R a+g *」やれば戻るか?と思い実行するもエラー。エラーの内容は昔過ぎて忘れたよ。「ls -l」取ると「ls: ファイル名: Permission denied」となる。おい、lsも取れないのかよ。しかたないので「chmod -R 705 *」で権限を付けにいくとこれもエラー。どうもディレクトリに対して権限がないらしい。WordPressのディレクトリを「rm」で消してバックアップから戻そうとしてもやはり権限がないということで消す事すらできない。
リカバリー
どうしようかと途方に暮れていたらディレクトリに対して「chmod 705 ディレクトリ」だと通ることを発見。「chmod -R o+r *」でエラーを出させながら「chmod 705 ディレクトリ」で地道に対応。エラーを一つ解消すると関係ないパスまでエラーが解消されていたような気もするがそこを確認する気力もなく。WordPressはこの作業だけで復活したものが一つ、WordPressの設定画面から再インストールも追加で行って復活したものが一つ、最後の一つはバックアップから復元したもののなかなか表示されなかったのだが原因はテーマが壊れていたらしい(設定画面でのメッセージ)。テーマ含めて更新をかけたのだが。
ということでほぼ1日がかりで復旧を完了。ちゃんと調べればコマンド一発で直せたかもしれないが。全体から権限を削除する前に1ファイルだけ試したけどちゃんと見れてなかったなぁ…