操作
Bug(バグ) #2279
未完了Apacheモジュール版PHP で safe mode を有効にしている環境では cache ディレクトリ以下に作成されたファイルの一部が読み込めない
開始日:
2011-07-19
期日:
進捗率:
0%
予定工数:
3.6 で発生するか:
Yes
3.8 で発生するか:
説明
Overview (現象)¶
Apacheモジュール版PHP で safe mode を有効にしている環境では cache ディレクトリ以下に作成されたファイルの一部が読み込めない
Causes (原因)¶
Apacheモジュール版PHP で safe mode を有効にしている環境では、実行可能な権限に設定されていても、実行する web/index.php の所有者と所有者が一致したファイルしか読み込めない。
その為、ブラウザアクセスがトリガーで cache 以下に作成される所有者が apache のファイルを読み込むことが出来ないため、OpenPNE3は上記環境下では正常に動作しない。
Way to fix (修正内容)¶
修正方針¶
【案】ブラウザアクセス駆動でキャッシュディレクトリ下に作成されるディレクトリ・ファイルをインストール時などににあらかじめ作成しておく。
元のバグ報告内容¶
【補足2】CORESERVER の safe mode 下で OpenPNE を動作させるためにやったこと
- キャッシュディレクトリ下に作成されうるサブディレクトリをあらかじめ作成し、webディレクトリのPHPスクリプトファイルの所有者と一致させた
- safe_mode のファイルアクセスの制限を回避するため、キャッシュディレクトリ下に作成されうるすべてのサブディレクトリの所有者がwebディレクトリのPHPスクリプトファイルの所有者と一致している必要がある
- PHPスクリプトファイルの所有者がPHP実行ユーザーと異なる状態で動作させる場合、キャッシュディレクトリ下にあらかじめPHPスクリプトファイルの所有者がサブディレクトリを作成しておく必要がある
- 今回は招待メールの送信に必要なキャッシュディレクトリのみを事前に作成した状態で検証を行った
- ただし、この方法でOpenPNEの全機能を正常に動作させるためには、キャッシュディレクトリ下に作成されうるすべてのサブディレクトリを事前に推測する必要があり、非常に困難である
- PHPスクリプトファイルの所有者の方をPHPの実行ユーザーにする方法を取る場合
- CORESERVER においては Apache 経由でディレクトリ、ファイルの所有者を変更する必要がある(未検証)
- 初期状態の include_path が "." のみになるようにした
- CORESERVER 側の設定にあらかじめ含まれている
/usr/local/lib/php
への realpath() 関数の適用で Warning が発生したため - config/ProjectConfiguration.class.php の冒頭に以下の記述を追加した
set_include_path('.');
- CORESERVER 側の設定にあらかじめ含まれている
- セッションストレージの設定を DB に変更した(これはおそらく必須ではない)
# config/OpenPNE.yml session_storage: name: "database" options:
操作