私はUbuntu 11.10ボックスをスピンアップし、apt-get install Apache2 php5
を実行してApache2をインストールし、PHP 5をボックスにインストールしました。これで「Webサーバー」として機能し、「それは機能します!」ページです。今、セキュリティを強化しようとしていますが、Linux Webサーバーについて次の質問があります。
www-data
として実行されている状態でWebに提供されるファイルとフォルダーのデフォルトのアクセス許可は何ですか?ユーザーとして実行されている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の権限があるということです。
ルートとして/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
)、そしてチェーン全体のすべての親ディレクトリにも設定する必要があります(www
、var
)。また、Apacheがファイルから読み取れるようにするには、o+r
ビットを設定する必要があります。
残念ながら、これは同じLinuxボックス上の複数のアプリケーションや複数のユーザーにセキュリティホールをもたらすと思います。すべてのWebファイルは誰でも読み取り可能である必要があるため、システム上の他のアプリケーションや他のユーザーもアクセスできます。システムにインストールされた1つのアプリケーションに未加工の未検証のユーザー入力を許可するセキュリティの脆弱性があり、それがPHPによって実行された場合、リモートの攻撃者がWebシステム上の他のすべてのファイルを閲覧できる可能性があります。同様に、ボックスに複数のユーザーがいて、ユーザーが別のユーザーのWebファイルのパスを知っている場合、ユーザーはファイルの内容を読み取ることができます(データベース接続文字列などの機密情報を見ることができます)。
共有システムでユーザーのファイルを「そのまま」提供できるようにするsuphp
とphpsuexec
の2つのパッケージを聞いたことがあります。これの優れた点の1つは、Webアプリケーション(Wordpressなど)がファイルを作成および変更できることです。これは、テーマ、プラグインの追加、およびソフトウェアのアップグレードに非常に役立ちます。もちろん、おそらくこれらを手動で行う方が安全ですが、おそらく上記のパッケージのいずれかで妥協することができますか?または、おそらくchown
を使用してwordpressディレクトリグループをwww-data
に属させ、グループ(g+s
)にスティッキービットを設定しますか?
私はこれらをWebホスティング会社のエンドユーザーとしてのみ使用したので、それらの詳細についてはわかりません。小規模なシステムにインストールするのが妥当か、それとも他にも代わりに使用するべきセキュリティ対策ですが、私の懸念のいくつかに対処する1つの可能な方法のように思われるので、ここでそれらを言及したいと思いました。
www-data
として実行されている状態でWebに提供されるファイルとフォルダーのデフォルトのアクセス許可は何ですか?ユーザーとして実行されているApache/phpの場合?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アクセスを許可することは、他のセキュリティの失効の指標(パスワードのログインを許可しないなど)ですが、それ自体が非常に多くの質問です。
だから私が物事を正しく理解している場合、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を実行しているユーザーを変更する理由はないようです。