ps -efH
コマンドを実行してすべてのプロセスを一覧表示すると、Apacheがroot
として実行されていることがわかり、サブプロセスがwww-data
として実行されているようです。ここに抜粋があります:
root 30117 1 0 09:10 ? 00:00:00 /usr/sbin/Apache2 -k start
www-data 30119 30117 0 09:10 ? 00:00:00 /usr/sbin/Apache2 -k start
www-data 30120 30117 0 09:10 ? 00:00:00 /usr/sbin/Apache2 -k start
www-data 30121 30117 0 09:10 ? 00:00:00 /usr/sbin/Apache2 -k start
Apacheとすべてのサブプロセスを異なるユーザーApache2d:Apache2d
として実行できますか?もしそうなら?これの設定は/etc/Apache2/httpd.conf
にあるとどこかで読みましたが、そのファイルは空のようですか?これは、/etc/init.d/Apache2
スクリプトの所有者とグループを変更し、それにsetuidフラグを設定することで実現できますか?
Apacheは、ポート80にバインドするために、最初はルートとして実行する必要があります。最初にルートとして実行しないと、ポート80にバインドできません。1024を超えるポートにバインドしたい場合は、そうできます。それ以外の場合は、ルートについて心配する必要はありません。これは親Apacheプロセスであり、リクエストを処理しません。子プロセスを生成し、リクエストを処理するための権限を削除します。
Apacheユーザーを変更するには、Apache構成でUser
およびGroup
パラメーターを設定します。
@bahamatはかなりよく説明していますが、もう少し詳しく説明します。
通常の操作の過程で、ルートが所有するApacheプロセスは、ポート80でリッスンし、着信接続をその(安全な非特権、_www-data
_ユーザーとして)子に転送する以外は、実際の操作を実行しません。
マスター構成ファイルの場所は、コンパイル時のオプションに依存し、ディストリビューションごとに異なりますが、_/etc/Apache2/Apache2.conf
_が出発点として適切です。
また、マルチユーザーウェブホスティングシステムを設定している場合は、 SuExec and fcgid を調べて、個々のウェブホスティングユーザーのApacheプロセスが上記のユーザーとして実行されるようにすることもできます。彼らのセキュリティを怠って、他のユーザーは影響を受けません。
Ubuntuでは少なくとも、この設定は/etc/Apache2/envvars
。それらを微調整し、Apacheを再起動すれば、電源を切って実行できます。
また、 Apache2 ITK MPM も確認してください。
uid
/gid
が割り当てられたApacheスレッドをフォークします。これにより、mod_php
を使い続けることができます。もうchmod
/chown
など.
Mac OSX:
私のために働いたのは、Apacheの設定ファイルです。
/etc/Apache2/httpd.conf
このファイルでserまたはGroupを検索しました
そしてぶつかった:
User _www
Group _www
これを、必要なユーザー/グループに変更しました(私の場合は、表示できるWebアプリファイルの所有者であるユーザー/グループに変更しました。これは、単純な 'ls -l'を使用して確認できます。コマンド)