web-dev-qa-db-ja.com

ApacheとPHPはどのユーザーとして実行する必要がありますか?/ var / wwwファイルにはどのようなアクセス許可が必要ですか?

私はUbuntu 11.10ボックスをスピンアップし、apt-get install Apache2 php5を実行してApache2をインストールし、PHP 5をボックスにインストールしました。これで「Webサーバー」として機能し、「それは機能します!」ページです。今、セキュリティを強化しようとしていますが、Linux Webサーバーについて次の質問があります。

  1. Apacheは誰として実行する必要がありますか?
  2. このユーザーはどのグループに属すべきですか?
  3. PHP(およびApache?)をファイルの所有者として実行できるのはどのパッケージですか(共有Webホストの場合など)これらのパッケージを使用する必要がありますか?保守が容易/実現可能ですか?小さなシステムでは?
  4. Apacheがwww-dataとして実行されている状態でWebに提供されるファイルとフォルダーのデフォルトのアクセス許可は何ですか?ユーザーとして実行されているApache/phpの場合?

デフォルトの設定を調べるために、次のことを行いました。

ファイル構造

cd /を実行してコンテンツのls -alリストを作成すると、/varが表示されます。

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

cdvarに入れてls -alを実行すると、次のようになります。

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

最後に、/var/wwwの中には、

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

私の重要なポイントは、これまでのところ、これらのファイルはすべてroot:rootに属しており、ファイルには644の権限があり、ディレクトリには755の権限があるということです。

Apacheの権限

ルートとして/var/www/test.phpにコンテンツを含むファイルを作成すると、次のようになります。

<?php echo Shell_exec('whoami');

そのファイルをブラウザにロードすると、www-dataと表示されます。これは/etc/Apache2/envvarsファイルと同じです。

export Apache_RUN_USER=www-data
export Apache_RUN_GROUP=www-data

ps aux | grep -i Apacheを実行すると、次のようになります。

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/Apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/Apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/Apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/Apache2 -k start

では、Apacheは誰として実行されていますか?おそらく、最初のプロセスはrootのようで、システムの起動時に/etc/init.d/Apacheスクリプトからのもので、他のプロセスはwww-dataとして最初のプロセスから生成されたようです。あれは正しいですか?

次に、groups www-dataと入力すると、www-data : www-dataが表示されるので、www-dataグループのみにあるように見えます。これも標準的な方法だと思います。

共有ホスティングとセキュリティ

したがって、Apacheがwww-dataとして実行されていて、Apacheがディレクトリを読み取れるようにしたい場合、状況を正しく理解している場合、xビットをワールド(その他の)グループ(o+x)、そしてチェーン全体のすべての親ディレクトリにも設定する必要があります(wwwvar)。また、Apacheがファイルから読み取れるようにするには、o+rビットを設定する必要があります。

残念ながら、これは同じLinuxボックス上の複数のアプリケーションや複数のユーザーにセキュリティホールをもたらすと思います。すべてのWebファイルは誰でも読み取り可能である必要があるため、システム上の他のアプリケーションや他のユーザーもアクセスできます。システムにインストールされた1つのアプリケーションに未加工の未検証のユーザー入力を許可するセキュリティの脆弱性があり、それがPHPによって実行された場合、リモートの攻撃者がWebシステム上の他のすべてのファイルを閲覧できる可能性があります。同様に、ボックスに複数のユーザーがいて、ユーザーが別のユーザーのWebファイルのパスを知っている場合、ユーザーはファイルの内容を読み取ることができます(データベース接続文字列などの機密情報を見ることができます)。

共有システムでユーザーのファイルを「そのまま」提供できるようにするsuphpphpsuexecの2つのパッケージを聞いたことがあります。これの優れた点の1つは、Webアプリケーション(Wordpressなど)がファイルを作成および変更できることです。これは、テーマ、プラグインの追加、およびソフトウェアのアップグレードに非常に役立ちます。もちろん、おそらくこれらを手動で行う方が安全ですが、おそらく上記のパッケージのいずれかで妥協することができますか?または、おそらくchownを使用してwordpressディレクトリグループをwww-dataに属させ、グループ(g+s)にスティッキービットを設定しますか?

私はこれらをWebホスティング会社のエンドユーザーとしてのみ使用したので、それらの詳細についてはわかりません。小規模なシステムにインストールするのが妥当か、それとも他にも代わりに使用するべきセキュリティ対策ですが、私の懸念のいくつかに対処する1つの可能な方法のように思われるので、ここでそれらを言及したいと思いました。

質問に戻る

  1. Apacheは誰として実行する必要がありますか?
  2. このユーザーはどのグループに属すべきですか?
  3. PHP(およびApache?)をファイルの所有者として実行できるのはどのパッケージですか(共有Webホストの場合など)これらのパッケージを使用する必要がありますか?保守が容易/実現可能ですか?小さなシステムでは?
  4. Apacheがwww-dataとして実行されている状態でWebに提供されるファイルとフォルダーのデフォルトのアクセス許可は何ですか?ユーザーとして実行されているApache/phpの場合?
41
cwd
  1. ルートではない
  2. ルートではない
  3. SuEXEC
  4. 依存します。ファイルの場合は644、フォルダの場合は755が安全なデフォルトです。

phpがそのファイル/フォルダーの内容を編集できるようにしたい場合を除いて、何の所有権もwww-dataに変更しないでください

他に何をするかに関係なく、ユーザーがファイルを検索するには、フォルダーに読み取りと実行のアクセス許可が必要です。ユーザーがファイルを読み取るには、ファイルに読み取り権限が必要です。変更の際に権限エラーが発生した場合-これらの基本的に必要な権限を削除できました。

PHPアプリケーションを介してファイルを作成していない場合は、your:youが所有するファイルを残すことができます。この状況では、世界の許可(xx4/5)が適用されます。

ファイルをあなたが所有しているままにしておく場合:644(ファイル)のファイル権限を持つあなたは、のみウェブサイトファイルを編集できることを意味します-www-dataはありませんあなた-したがって、ファイルを編集できません。

Apache +へのアクセスを制限し、他のすべてのアクセスをブロックしたい場合chown -R you:www-data *。編集できるファイル権限が640、フォルダー権限が750の場合、www-dataは読み取ることができます。Apacheがグループ権限(x4/5x)を読み取るためです。

Apache/phpに書き込みを許可するパスを最小限に制限します-アプリケーションが書き込む必要のあるtmpディレクトリがある場合-そのフォルダーのみに書き込みを許可しますそのフォルダーのみ-および可能であれば、書き込み可能な場所は、それがドキュメントルートの外側であることを確認するか、この書き込み可能なパスがWebからアクセスできないことを確認してください。

「あなた」はルートではないことに注意してください。 rootとしての直接sshアクセスを許可することは、他のセキュリティの失効の指標(パスワードのログインを許可しないなど)ですが、それ自体が非常に多くの質問です。

17
AD7six

だから私が物事を正しく理解している場合、Apacheがwww-dataとして実行されていて、Apacheがディレクトリを読み取れるようにしたい場合は、xビットをワールド(その他)グループ(o + x)に設定する必要があります。チェーン全体のすべての親ディレクトリ(www、var)に設定する必要があります。また、Apacheがファイルから読み取れるようにするには、o + rビットを設定する必要があります。

これは真実ではありません。「その他」にrwxを設定する必要はありません。保護しようとしている特定のフォルダ/ファイルの所有者やグループを変更する必要があります。例えば。:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

グループのメンバーのみwww-data 読める /var/www/cwd.com。そして、あなた(cwd)だけがそれに書き込むことができます。アプリケーションが(Apacheを介して)そのディレクトリにあるファイルを書き込み/変更できるようにしたい場合は、770にchmodします。

これはすべての問題をカバーしていると思います。Apacheを実行しているユーザーを変更する理由はないようです。

10
Rob Wouters