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


41

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

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

デフォルト設定の調査では、次のことを行いました。

ファイル構造

ときに私cd /とやるls -alのコンテンツのリストを、私が見ます/var

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

私がcd興味varを持っているなら、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の実行者は誰ですか?おそらく最初のプロセスはas 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ボックス上の複数のアプリケーションおよび/または複数のユーザーにセキュリティホールが導入されると考えています。システムにインストールされた1つのアプリケーションに、未検証のユーザー入力を許可するセキュリティ上の脆弱性があり、それがPHPによって実行された場合、リモートの攻撃者はWebシステム上の他のすべてのファイルを閲覧できます。同様に、ボックスに複数のユーザーがいて、ユーザーが別のユーザーのWebファイルのパスを知っていた場合、そのユーザーはファイルの内容を読み取ることができます(データベース接続文字列などの機密事項を参照できます)。

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

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

質問に戻る

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

回答:


17
  1. ルートではない
  2. ルートではない
  3. SuEXEC
  4. 依存します。ファイルの644とフォルダーの755は安全なデフォルトです。

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

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

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

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

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

apache / phpの書き込みを許可するパスを最小限に制限します-アプリケーションが書き込む必要があるtmp dirがある場合- そのフォルダーのみに書き込みを許可します -可能な場合は書き込み可能な場所に対して、それが外部にあることを確認しますルートを文書化するか、この書き込み可能なパスがWebでアクセスできないようにする手順を実行します。

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


10

したがって、物事を正しく理解している場合、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を実行しているユーザーを変更する理由はないと思います。


2
ありがとうございました。それは悪い解決策ではありませんが、あるユーザーが別のユーザーのファイルへのパスを知っている場合、ファイルの内容を読み取るスクリプトを作成し、それをWebブラウザーにロードして、Apacheとして実行します-効果的に読み取ります他のユーザーのディレクトリからのファイル。それは理にかなっていますか?そのため、フォルダのアクセス許可を750に設定しても、潜在的なセキュリティの脆弱性が存在します。
cwd

@cwdこれを理解することになりましたか?
リッキーボイス

@cwdこれは私が持っていた正確な質問でした。私はこれを尋ねた理由です:serverfault.com/questions/807723/...
Nandakumar Edamana
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.