EC-CUBE / EC-CUBE/ec-cube2

umask を改善する

Open
#841 4 comments 0 reactions 0 assignees View on GitHub
bug:Low discussion enhancement
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.