umask を改善する
- Dominant language
- PHP
- Stars
- 92
- Forks
- 97
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 9
Description
何箇所か ```umask(0)``` が実装されている。これは以下の目的と理解している。
- ファイル群の管理を行うOSユーザーとは別のユーザー (典型的には apache や nobody) で PHP を実行している場合に、EC-CUBE が新たに作成したファイルを、管理者が容易に変更できるため。
- バッチ処理を WEB の PHP と別のユーザー (典型的にはファイル群の管理ユーザー) で実行した際に生成されたファイルを WEB から変更できるため。
しかし、suEXEC などで、同一ユーザーで PHP 実行している環境では、そういった考慮は通常不要。
また、過去に umask が反映されていないファイルが作成されるケースを見かけた記憶がある。(現バージョンの標準実装の範囲で生じ得るかは不確か。)
### 対応案
- ファイル所有ユーザーと PHP 実行ユーザーが同一の場合、umask を実行しない。
- 基準とするファイルは、実行中のファイル自身 (__FILE__) で考えている。
- 直接実行されたファイル ($_SERVER['SCRIPT_FILENAME'] 相当) だと、EC-CUBE が作成したファイルというケースも考えられ、不適当と考える。(例: html/user_data/*.php)
- より適したファイルがあれば (直ぐに思いつかない)、そのファイル固定ということも考えられそう。
- ディレクトリを SGID しているケースでは、ファイル所有ユーザーと PHP 実行ユーザーが相違しても、umask(0) は通常不要なはず。umask(0002) が期待されるケースが多そうだが、そもそもシステム構成として対応していそうなので、EC-CUBE 側では umask を制御しないのが良いかも。しかし、書き込み先のディレクトリのSGIDに依るはずなので、書き込み先に依って umask 値を変える必要があり、この対応ではカバーしきれない。(全ファィル同一条件なら、後述の設定でカバーできそう。)
- umask の実行タイミングを早める。
- SC_Initial::requireInitialConfig() より後で間に合うならば、設定 (data/config/config.php) で umask の無効化や umask 値を強制できそう。
```php:例
define ('UMASK', 0022);
define ('UMASK', false); // 制御しない
```
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.