Syntax Error.

[Sy] macOS アップデート後に「Permission Denied」「403 Forbidden」などの権限系エラーが発生する場合の対処

2018/02/08

macOS をアップデートしたら、 Documents(書類) ディレクトリに置いておいたローカル環境のサイトが動かなくなりました・・・。 原因はアップデート時に自動でディレクトリの権限が変更された(元に戻された)からでした。

こんな場合には

例えば今回のぼくの場合を例にあげると、

  • Documents(書類)ディレクトリ配下に nginx + PHP でローカル環境をいくつか構築していた
  • macOS を Sierra から High Sierra にアップデート
  • アップデート後、サイトの JavaScript, CSS, 画像などが軒並み「403 Forbidden」になって読み込めなかった
  • nginx のログを見ると、「Permission Denied」でエラーになっていた

という状況でした。

ぼくの場合はサイト表示に問題が出たというパターンでしたが、使い方によって他の権限に関するエラーが起きる場合が考えられます。

原因

原因は、 macOS アップデート時に、以下のホームディレクトリ配下にある特定のディレクトリの権限が自動でデフォルトに戻されていた ということでした。

$ ls -al /Users/utano320
total 632
・
・
・
drwx------@    4 utano320  staff     128  4 25  2017 Applications
drwx------@    4 utano320  staff     128  2  7 06:51 Desktop
drwx------@   24 utano320  staff     768  2  3 09:34 Documents
drwx------+  267 utano320  staff    8544  2  7 16:48 Downloads
drwx------@   51 utano320  staff    1632 10 23 21:24 Dropbox
drwx------@   78 utano320  staff    2496  2  6 11:31 Library
drwx------+    3 utano320  staff      96  4 25  2017 Movies
drwx------+    6 utano320  staff     192  5 30  2017 Music
drwx------+    7 utano320  staff     224  1 30 14:32 Pictures
drwxr-xr-x+    5 utano320  staff     160  4 25  2017 Public
drwxr-xr-x     3 utano320  staff      96  6 29  2017 Sites
・
・
・

上はアップデート後のぼくのユーザ(utano320)のホームディレクトリ直下にあるディレクトリの権限の状態です。全てのディレクトリのうち、自動で権限が変わる「特定のディレクトリ」のみ抜粋しています。

「特定のディレクトリ」というのは、macOSがデフォルトで用意してくれていたもの です。

ぼくの場合、Documents ディレクトリの下にローカル開発環境を作るようにしていて、Documents ディレクトリの権限を 700 から 755 に変更していました。

この 変更していた権限が High Sierra へのアップデート時に元の 700 に戻されていたことで、 nginx の権限で見れなくなってしまっていた ということです。

解決方法

一番簡単な解決方法は、次のように 権限をアップデート前の状態に戻してあげればOKです。

$ chmod 755 ~/Documents

ぼくは今回この対応でいいや、と思ってますが、本来であれば、次のいづれかの対応をすべきでしょう。

  • nginx ユーザ や自分の使っているユーザ、グループの設定を見直す(Documentsディレクトリの権限が 700 のままでも動作するように調整する)
  • Documents ディレクトリではなく、例えば Sites ディレクトリなどの他のユーザに権限が与えられているディレクトリ配下で環境を作る

ひとこと

Chrome のキャッシュのおかげで、「そもそも index.php さえも権限がない状態」であることに気づくのに時間がかかってしまいました・・・(nginx の設定の問題か?など違うところをしばらく調べてた)