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


10

ps -efHコマンドを実行してすべてのプロセスを一覧表示するrootと、Apacheがとして実行されていることがわかり、サブプロセスがとして実行されているように見え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フラグを設定することで実現できますか?

回答:


21

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

Apacheユーザーを変更するには、Apache設定UserGroupパラメータとパラメータを設定します。


まあ、申し訳ありませんが、haproxyはhaproxyとして(rootとしてではなく)実行でき、tcp 80ポートをバインドできることに気づきました。これはどのように実現しますか?悟りはありますか?
kiiwii 14

1
そうではありません。プロセスは、スーパーユーザー権限がある場合にのみ、1024未満のポートにバインドできます。したがって、haproxyはrootとして開始して特権を(おそらく)ドロップするか、またはsetuid root(可能性は低い)をドロップします。
バハマート2014

ルートとして実行する必要はありません。「apache」ユーザーに制限されたポート(1024未満のポート)へのアクセスを許可するだけです。:この答えは、あなたがそれを行うに「authbind」を使用する方法について説明しsuperuser.com/questions/710253/...
Animal451

4

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

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

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

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


3

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


ありがとう、これは私を助けました!私はubuntuバグラントボックスをセットアップしていますが、何らかの理由で/etc/apache2/httpd.confがユーザーとグループのロードに使用されていませんでした。envarsがトリックを行うようです!
グレッグ

2

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

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


賛成投票はmpm_itksuexec / fcgidに比べて大幅な改善です
Shadur

0

Mac OSX:

私のために働いたのはApacheの設定ファイルに入っています:

/etc/apache2/httpd.conf

このファイルで、ユーザーまたはグループを検索しました

そしてぶつかった:

User _www
Group _www

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.