互いに分離する必要のある複数のサイトでホスティング環境をセットアップする際に、Apacheユーザーとしてではなく、各Webサイトに関連付けられたユーザーとして実行されるようにPHPを構成するという明らかな手順を実行しました。 、しかし、あるサイトが他の言語(Pythonなど)で書かれたスクリプトをApacheユーザーとして実行できる方法がないことを確認する方法はありますか? .htaccessルールとシンボリックリンクを使用してApacheをだまして他のWebサイトからのPHPファイルをプレーンテキストとして提供するシンボリックリンク攻撃のような巧妙な攻撃を見てきました(これは質問とは関係ありません。単なる例です) 、PHP以外のサーバーサイド言語の設定に慣れていないため、スクリプトが他の言語で記述されていることを確認するために、Apacheconfファイルなどを介して何をチェックおよび/または禁止するかがわかりませんでした。 Apacheユーザーとして実行することはできません。
たとえば、PHPがWebサイトのユーザーとして実行されるように設定されていても、Webサイトがハッキングされた場合、ハッカーは.abcファイルをPerlスクリプトとして実行するように設定する.htaccessファイルを作成できます。サーバー上で適切に構成されている場合、それらはApacheユーザーとして実行されますか?
これにアプローチするための最良の方法は何ですか?
読んでから http://httpd.Apache.org/docs/2.4/misc/security_tips.html suexecが適切に使用されている場合、Apacheユーザーとして実行されているCGIスクリプトは代わりに、suexecディレクティブで定義されたユーザーの下で実行されるため、懸念があります。
したがって、あなたの主な懸念は、侵害された1つのアカウントが他のアカウントに悪いことをすることはできないということです。
PHPとファイルのパーミッション
PHPがドメインごとに異なるユーザーとして実行されるように構成されている場合、ディレクトリは、独自のドメイン外のものへの書き込みアクセス権を持たないように設定する必要があります。次に、PHP(またはPHPを介して呼び出されるその他のコマンド)を使用しても、サーバーの他の部分に害を及ぼすことはありません。
ベストプラクティスは、スクリプトをuser1が所有することですが、PHPはuser2で実行します。カスタマーアクセスの場合、FTPはuser1用に構成する必要があります。 User2には、本当に必要な特定のディレクトリ(キャッシュディレクトリ、サムネイルの生成、PHP経由のファイルアップロード)への書き込みアクセス権のみを付与する必要があります。
しかし、多くの人がWordpressやその他のCMSをインストールし始め、何をすべきかわからず、すべてに書き込みアクセスを許可します(そうすると、不適切に記述されたCMSプラグインがそのドメインのすべてのphpスクリプトを危険にさらす可能性があります)。 Wordpressおよびその他のCMSは、最近、PHPプロセスの書き込み権限がなくてもインストール/アップグレードをサポートしています(FTPログインを要求し、自動的に使用します)。
もう1つのベストプラクティスは、user2が書き込みアクセス権を持つディレクトリへの直接Webアクセスをブロックすることです。ファイルのアップロードはスクリプトで確認し、有効な場合にのみ、外部からアクセス可能なディレクトリに移動する必要があります(そうしないと、誰かがJPG画像の代わりにPHPスクリプトをアップロードして、Webサーバーをだまして実行する可能性があります)。
Apache
ApacheのAllowOverride None
ディレクティブを使用して.htaccess
ファイルの使用を無効にし、攻撃が他のCGIスクリプトの実行を構成できないようにします。 Apacheには、提供されたファイルへの読み取りアクセスのみが必要です(パスワードを含むPHP構成ファイルには、Apacheの読み取り権限は必要ありません)。 .htaccess
を無効にすると、ユーザーはApache構成を変更することができなくなります。
Options -FollowSymLinks
(または-SymLinksIfOwnerMatch
)を使用して、シンボリックリンクの「攻撃」を防ぎます。
mod_security
をインストールして、疑わしいアクティビティを監視し、SQLインジェクションなどのハッキングの試みをブロックします。
[〜#〜] edit [〜#〜]:.htaccess
が必要な場合は、ホスティングがサポートするオプションを決定し、それらのみを有効にする必要があります。安全で一般的に使用されるオプションの例は次のとおりです(AllowOverride
にリストしてください):
Deny from all
ディレクティブによって使用されます)FollowSymLinks
が必要であると記載されていますが、これでも機能するようです); mod_rewriteの使用に加えて、Apacheは、宛先ファイル/ディレクトリがシンボリックリンク自体と同じユーザーによって所有されている場合にのみシンボリックリンクをたどります。