先日webサイト開発環境を構築しているときに不思議な現象が起きたので質問させていただきます。

不思議な現象とは、要約すると

  * **ファイル・ディレクトリのパーミッションが777でも403 Forbidden or No Permission to Accessになる現象が起きた**

ということです。

状況をどのようにお伝えしていいかが難しかったので行った作業をなるべく時系列で書いていきたいと思います。長くなりますがご容赦ください。

以下のような環境で仮想マシンを作りました

* * *

## 環境

■ホストマシンは以下です

  * Debian GNU/LINUX 8.0

■VirtualBox 4.3.30 仮想マシンの構成は以下です

  * **ゲストOS**
    * CentOS6.6(i386)minimal 
  * **メモリ**
    * 512Mbyte 
  * **ストレージ**
    * 8.0Gbyte 
  * **ネットワークアダプタ**
    * ホストオンリーアダプタ（ホストとの通信用）->eth1 192.168.57.11 
    * NAT（インターネットに出る用) 

## 開発環境の構築

■開発環境としてはWordPressが必要なので仮想マシンに以下を追加インストールしました

  * **追加インストール**   
mysql-server  
PHP5.3  
php-mysql  
php-mbstring  
httpd  
wget

■また以下のような設定を行いました

  * **一般**   
作業ユーザの追加  
作業ユーザのパスワード設定  
作業ユーザをwheelグループに追加 （sudoの実行が可能に）

  * **sshd**   
rootログイン禁止  
パスワード認証無効  
RSA有効  
公開錠認証有効  
rhost認証無効  
公開鍵・秘密鍵の生成および使用できるように配置

  * **mysql**   
`mysql_secure_installation`での初期設定  
wordpress用のデータベース作成  
wordpress用データベースのユーザ作成  
ユーザの権限設定  
自動起動設定

  * **PHP**   
`mysql.ini`に`mysql.so`のパスを追加  
`php.ini`にてエラー表示を有効

  * **httpd**   
インデックスファイルの種類に`index.php`を追加  
自動起動設定  
`/var/www/http/`の所有者を作業ユーザに変更

  * **iptables**   
80ポートを開放

この時点で **ssh、httpd、mysqlなどは正常でhttpdによるphpファイルの実行も確認** しています。

* * *

## wordpressのインストール

仮想マシンの最低限の設定が終わったので、wordpressをインストールする作業をはじめました。

  * **作業ユーザのディレクトリ（/home/作業ユーザ/）にてwordpressファイルをダウンロード**

$ wget <http://ja.wordpress.org/wordpress-4.2.4-ja.tar.gz>

  * **そのまま解凍**

$ tar zxvf wordpress-4.2.4-ja.tar.gz

  * **解凍後ドキュメントルート`/var/www/html/`にwordpressのファイルをコピー**

$ cp -R ~/wordpress/* /var/www/html/

  * **コピー後、`/var/www/html/`に`cd`して、`wp-sample-config.php`を編集。`wp-config.php`として保存**

wordpressではこのあとwp-adminディレクトリ（`/var/www/html/wp-
admin/`）にある`install.php`にブラウザからアクセスすることによって、最終的な設定を行います。

* * *

## 403の発現

しかし**`install.php`へのアクセスは403**になりました。

この時点ではパーミッション、所有者：所有グループは以下のようになっていました。

### 初期状態

  * `/var/www/html/`   
755 作業ユーザ：作業ユーザ

  * `/var/www/html/wp-admin/`  
755 作業ユーザ：作業ユーザ

  * `/var/www/html/wp-admin/install.php`  
755 作業ユーザ：作業ユーザ

この状態であれば少なくとも、 **弾かれる（403になる）ことはないという認識** でしたが、現実に弾かれているので、以下の作業を行いました。

### 対応１

  * **一旦上記のディレクトリ・ファイルのパーミッションを777に設定してみました。(また念のためパーミッションを変更した場合、OS再起動を行っています。以下の作業でも同様です）**

    * 403になる

777にしても403になるため、何らかの設定がおかしいものとして、まずPHPが`/var/www/html/`の中で実行できるかを確認しました。

  * **コマンドラインで`install.php`を実行してみる**

    * エラーなく実行できる 
  * **`/var/www/http/`に`phpinfo()`を表示させるファイルを作ってブラウザからアクセス**

    * 正常に表示される 
  * **`/var/www/html/wp-admin/`に`phpinfo()`を表示させるファイルを作ってブラウザからアクセス**

    * 403になる

この確認でどうやらwp-adminディレクトリに何らかの不具合があるとみて、以下の確認を行ってみました。

### 対応２

  * / **`var/www/html/wp-admin/`を一旦リネームして(.wp-adminにして)退避させ、新しくwp-adminディレクトリを作成。`phpinfo()`を表示させるファイルを作ってブラウザからアクセス**

    * 正常に表示される
  * **新しく作ったwp-adminディレクトリに退避させておいた.wp-adminディレクトリの中身を`cp`して、`install.php`にブラウザからアクセス**

    * 403になる

この時点で、もともと作業ユーザのディレクトリから`/var/www/html/`に`cp`した時に何らかの不具合があったのかと思い、以下の作業を行いました。

### 対応３

  * **`/var/www/html/`の中身を`rm`。新たにダウンロード解凍したファイルを配置し直し、`install.php`にブラウザからアクセス**

    * 403になる 

### 対応４

だんだん手がなくなってきましたが、ファイルの所有者：所有グループが原因かと思い以下の作業を行いました。

  * **`/var/www/html/`とそれ以下のディレクトリ・ファイルの所有者：所有グループをroot:rootにした**

    * 403になる
  * **`/var/www/html/`とそれ以下のディレクトリ・ファイルの所有者：所有グループをapache:apacheにした**

    * 403になる

所有者の問題でもなさそうでなので一旦所有者：所有グループを作業ユーザ:作業ユーザにもどしました。

* * *

## 偶然の問題解決

この時点で万策尽きて、やけくそに`/var/www/html`内を`rm`して、`/var/www/html/`  
のパーミッションを777にして、再度ファイルを配置してみました。すると`install.php`に正常にアクセスできるようになりました。

問題が起きていた際`/var/www/html`のパーミッションは755なので、解決した後と比較すると変わったところは結局、

  * **`/var/www/html/`の所有グループ・その他の書き込み権限があるかないか**

ということになるかと思います。

**私の理解ではPHPの実行に関しては実行権限があれば実行できるものと思っていました。**

`rwxr-xr-x`であればその他、つまりブラウザからのアクセスはパーミッションで弾かれないのではないでしょうか？

変わったところといえば、実行権限ではなく、書き込み権限であり、それで解決したのも全く解せません。

さらに確認のため作った`phpinfo()`を表示させるファイルは実行できたということです。

もし`/var/www/html/`に何らかの不具合があれば、そもそも`phpinfo()`を表示させるファイルは実行できないのではないかと思います。

ちなみに`/var/www/html/`を777にして`install.php`にアクセスできたことを確認したあとに、`/var/www/html/`を755に戻しても、`install.php`にはアクセスが出来ました。

問題解決したあとにもう一度不具合再現しようと思い最初から作業をやり直しましたが、再現はできませんでした。

また仮想マシンを新しく作り、OS インストールからやり直してみましたがこちらも問題は再現されませんでした。

一応それからは不具合と思われる現象は発現していませんが、なぜこのようなことが起こったのか、疑問が全く晴れずもんもんとしています。

おそらくは私の作業手順に何らかの原因があるのだと思いますが、上記のようなパーミッションや所有者権限の挙動に対して、情報をお持ちの方にお答えいただけると幸いです。
CC BY-SA 3.0
2015-11-21T02:20:39.610
19107
2016-04-19T05:02:12.717
13295
question
linux centos wordpress
403 Forbidden or No Permission to Accessについて
レスポンスコードの403
Forbiddenは、アプリケーション内でユーザ認証できていないか、ないしはWebサーバで認証済みでないから弾かれておりますので、推察するに

  * MySQLにて初期設定したユーザ情報と、編集したwp-config.phpのMySQL接続情報が異なっている

くらいではないかと思います。

違っていたら申し訳ありません。
CC BY-SA 3.0
2015-11-21T03:48:38.057
19112
2015-11-21T03:48:38.057
5778
19107
answer