web-dev-qa-db-ja.com

別のユーザーとしてのApacheの実行

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フラグを設定することで実現できますか?

10

Apacheは、ポート80にバインドするために、最初はルートとして実行する必要があります。最初にルートとして実行しないと、ポート80にバインドできません。1024を超えるポートにバインドしたい場合は、そうできます。それ以外の場合は、ルートについて心配する必要はありません。これは親Apacheプロセスであり、リクエストを処理しません。子プロセスを生成し、リクエストを処理するための権限を削除します。

Apacheユーザーを変更するには、Apache構成でUserおよびGroupパラメーターを設定します。

21
bahamat

@bahamatはかなりよく説明していますが、もう少し詳しく説明します。

通常の操作の過程で、ルートが所有するApacheプロセスは、ポート80でリッスンし、着信接続をその(安全な非特権、_www-data_ユーザーとして)子に転送する以外は、実際の操作を実行しません。

マスター構成ファイルの場所は、コンパイル時のオプションに依存し、ディストリビューションごとに異なりますが、_/etc/Apache2/Apache2.conf_が出発点として適切です。

また、マルチユーザーウェブホスティングシステムを設定している場合は、 SuExec and fcgid を調べて、個々のウェブホスティングユーザーのApacheプロセスが上記のユーザーとして実行されるようにすることもできます。彼らのセキュリティを怠って、他のユーザーは影響を受けません。

4
Shadur

Ubuntuでは少なくとも、この設定は/etc/Apache2/envvars。それらを微調整し、Apacheを再起動すれば、電源を切って実行できます。

3
mlissner

また、 Apache2 ITK MPM も確認してください。

uid/gidが割り当てられたApacheスレッドをフォークします。これにより、mod_phpを使い続けることができます。もうchmod/chownなど.

2
Olli

Mac OSX:

私のために働いたのは、Apacheの設定ファイルです。

/etc/Apache2/httpd.conf

このファイルでserまたはGroupを検索しました

そしてぶつかった:

User _www
Group _www

これを、必要なユーザー/グループに変更しました(私の場合は、表示できるWebアプリファイルの所有者であるユーザー/グループに変更しました。これは、単純な 'ls -l'を使用して確認できます。コマンド)

0
Mercury