ホームページ >バックエンド開発 >PHPチュートリアル >nginx+php(fpm-php fastcgi)open_basedir セキュリティ設定

nginx+php(fpm-php fastcgi)open_basedir セキュリティ設定

WBOY
WBOYオリジナル
2016-06-23 13:16:271287ブラウズ

実験の目的

「open_basedir リストディレクトリをバイパスする PHP の研究」の記事に従って、この記事の basedir をバイパスする方法が効果的であるかどうかを、さまざまな構成をテストすることで検証し、それによって PHP の open_basedir を安全に設定することができます。記事はすべてwindwosです Linuxでは、総当たりの推測が必要なため、テストは行われません
「DirectoryIterator + Glob」メソッドがopen_basedirをバイパスできるかどうかをテストします

Webシェルツール「Chopper」がバイパスできるかどうかをテストします。 open_basedir をバイパスします

実験環境
nginx + PHP 5.6.7 fastcgi モード、centos7 linux

現在、open_basedir php-fpm.conf、nginx fastcgi_param、php.ini を設定する場所は 3 か所あります

以下で 1 つずつテストします
テストの詳細
でのみphp-fpm .conf の設定

php_admin_value[open_basedir]=/home/wwwroot/:/proc/:/tmp/

結果

Open_basedir はディレクトリ外で読み書きできないが、DirectoryIterator + Glob はすべてのファイルを正常にリストできる

open_basedir : /home/wwwroot/:/proc/:/tmp/ -- DirectoryIterator + Glob --. .. .autorelabel bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr vagrant var

包丁は basedir から出られない

fastcgi_param でのみ設定nginx

# set php open_basedir fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/";

ここで、「$document_root」は nginx の変数であり、nginx の各サーバーのルート ディレクトリです

たとえば、サーバー www.iamle.com に設定されたルート ディレクトリは /home/wwwroot/www.iamle です。 com


PHP マニュアルをよく読んでください 次の段落があります

PHP の設定値は php_value または php_flag を通じて設定され、以前の値が上書きされます。

php.ini で定義された disable_functions または disable_classes の値は上書きされませんが、新しい設定が元の値に追加されることに注意してください。 php_admin_value または php_admin_flag を使用して定義された値は、PHP コードの ini_set() によってオーバーライドできません。 5.3.3 以降、PHP 設定は Web サーバー経由でも設定できるようになりました。つまり、php を設定するための niignx の fastcgi_param の設定は、on、off、1、0、true、false、yes、no などのブール値を具体的に設定するために使用され、php_value はすべてのタイプの値を設定するために使用されます。結果は上記と同じです open_basedir のディレクトリ 読み取りも書き込みもできませんが、DirectoryIterator + Glob ですべてのファイルを正常に一覧表示できます
包丁は basedir から抜け出すことができません

php.ini でのみ設定されています

これは、HOST=www.iamle.com のときに open_basedir を設定し、PATH =/home/wwwroot/www.iamle.com/

に open_basedir を設定することを意味します。テストしたところ、2 つの設定のいずれも有効でした

結果は同上

Open_basedirはディレクトリ外では読み書きできないが、DirectoryIterator + GlobでPHPサーバー上のすべてのファイルを一覧表示できる

basedirを包丁が横切ることはできない

個人的な結論

DirectoryIterator + Globですべてを一覧表示できるPHP サーバー上のファイルは無害に見えますが、実際には長期的な APT には間違いなく役立ちます

open_basedir は想像されているほど安全ではありません、おそらく他の誰かが open_basedir を読み書きできる 0day を持っているでしょう

個人的には。 nginx + php (fastcgi fpm-php) (lnmp) open_basedir の設定

最初に fpm を設定します - php のプール内の open_basedir の合計は、トップレベル設計と呼ばれます。たとえば、一般的な制限があります。 /home/wwwroot/ などの Web ディレクトリに制限し、fastcgi_param PHP_ADMIN_VALUE を介して nginx の単一サーバーに設定し、それを php.ini[HOST=XXX] [PATH=XXX] に設定します

3 つのアプローチを使用、母はもう私の php open_basedir について心配する必要はありません (そう願っています)

非常に冗長ですが、もっと安心ではないでしょうか

簡単に言うと、結果は以下の通りです、私は次のような面倒な設定です

[HOST=www.iamle.com]open_basedir=/home/wwwroot/www.iamle.com/:/proc/:/tmp/[PATH=/home/wwwroot/www.iamle.com/]open_basedir=/home/wwwroot/www.iamle.com/:/proc/:/tmp/



テスト中に、これら 3 つの場所の設定の優先順位は次のとおりであることも判明しました

"php.ini" > "nginx fastcgi fastcgi_param" > "php-fpm.conf"

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。