数年前、私は PHP を実行している Apache のセキュリティが不十分であると不満を述べていました。1 つのサイトがダウンすると、サーバー上の他のサイトも影響を受けることになります。当時、これは IIS に比べて非常に悪いと感じました。IIS では、各サイトで使用するアカウントが異なる限り、サイトやディレクトリにアクセスするときに使用する匿名アカウントを設定できるからです。 、サイト間のセキュリティは相互に影響しません。 Apache では、特定のユーザーとしてサイトを実行する方法を詳細に制御することはできませんが、PHP を設定して各サイトの独立した動作を実現することもできます。少なくとも、サーバー全体がダウンしている状況があり、再度実行することはできません。
この制御は、PHP の open_basedir を構成することで実現できます。この構成は IIS でも役立ちますが、ここでは Apache での構成についてのみ説明します。
open_basedir は、ファイルにアクセスするユーザーのアクティビティ範囲を指定された領域 (通常はホーム ディレクトリのパス) に制限できます。記号「.」を使用して現在のディレクトリを表すこともできます。 open_basedir は、Windows ではセミコロンを使用してディレクトリを区切り、他のシステムでは
コロンを使用して、複数のディレクトリを同時に設定することもできます。 Apache モジュールに適用すると、親ディレクトリの open_basedir パスが自動的に継承されます。以下では、例として Linux システムでの構成を取り上げます
open_basedir = .:/tmp/ を設定する
php_admin_value open_basedir .:/tmp/ を設定します
php_admin_value open_basedir .:/tmp/ を設定します
a. 方法 2 は方法 1 よりも優先度が高く、方法 2 は方法 1 よりも優先度が高く、方法 3 は方法 1 をオーバーライドします。 . 2;
b. 「/tmp/」は、PHP のデフォルトの一時ファイル (アップロードされたファイル、セッションなど) がこのディレクトリに配置されるため、通常はこのディレクトリを追加する必要があります。そうしないと、一部の機能が使用できなくなります。
c. 設定ディレクトリに追加されるのは、php ファイルが実行される現在のディレクトリです。これにより、サイトがファイルを 1 つずつ設定する必要がなくなります。サイト ディレクトリの外では、対応する VirtualHost ディレクトリに個別に設定する必要があります。
セットアップが完了したら、操作する PHP Web ホース (phpspy など) を忘れずに見つけて、問題がないかどうかをテストしてください。権限は十分に制御されているはずです。 PHP セキュリティ構成の経験がある場合は、それを共有してください。