ホームページ >バックエンド開発 >PHPチュートリアル >Nginxのセキュリティ構成の調査
0x00 テスト環境
操作系统:CentOS6.5 Web服务器:Nginx1.4.6 Php版本:Php5.4.26
0x01 Nginx の紹介
nginx 自体は PHP を処理できません。リクエストが受信されると、それが PHP リクエストの場合は PHP インタープリターに送信されます。処理が行われ、結果がクライアントに返されます。 nginx は通常、リクエストを fastcgi 管理プロセスに送信して処理します。fastcgi 管理プロセスは、cgi サブプロセスの処理結果を選択して nginx に返します。
nginx には 2 つのアカウントが必要です。1 つは nginx の実行アカウント、もう 1 つは php-fpm の実行アカウントです。静的ファイルにアクセスする場合は、nginx 実行アカウントにファイルの読み取り権限だけが必要です。php ファイルにアクセスする場合は、ファイルの読み取り後に、まず nginx 実行アカウントに読み取り権限が必要です。 php ファイルであることが判明した場合、php-fpm に転送されます。この時点で、php-fpm アカウントにはファイルに対する読み取り権限が必要です。
0x02 調査結果の結論
1. linux下,要读取一个文件,首先需要具有对文件所在文件夹的执行权限,然后需要对文件的读取权限。 2. php文件的执行不需要文件的执行权限,只需要nginx和php-fpm运行账户的读取权限。 3. 上传木马后,能不能列出一个文件夹的内容,跟php-fpm的运行账户对文件夹的读取权限有关。 4. 木马执行命令的权限跟php-fpm的账户权限有关。 5. 如果木马要执行命令,需要php-fpm的账户对相应的sh有执行权限。 6. 要读取一个文件夹内的文件,是不需要对文件夹有读取权限的,只需要对文件夹有执行权限。
0x03 Nginx サーバーに関連するセキュリティ構成
rreee1. Nginx.conf的配置 2. php-fpm.conf的配置 3. nginx和php-fpm的运行账户对磁盘的权限配置 4. Php.ini的配置
0x04 常见需要配置的操作方法
1. 禁止一个目录的访问
示例:禁止访问path目录
location ^~ /path { deny all; }
可以把path换成实际需要的目录,目录path后是否带有"/",带"/"只禁止访问目录,不带"/"禁止访问目录中的文件;注意要放在fastcgi配置之前。
2. 禁止php文件的访问及执行
示例:去掉单个目录的PHP执行权限
location ~ /attachments/.*\.(php|php5)?$ { deny all; }
示例:去掉多个目录的PHP执行权限
location ~ /(attachments|upload)/.*\.(php|php5)?$ { deny all; }
3. 禁止IP的访问rええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ
nginxの設定エラーはディレクトリトラバーサルの脆弱性を引き起こします
るるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるるe示例:禁止IP段的写法:
1. ホワイトリスト
まず第一に、これら 2 つのモジュールはホワイトリストをサポートします。つまり、検索エンジンや独自の IP など、制限する必要のない IP アドレスが存在する可能性があるため、ホワイトリストを設定する必要がある場合は、この手順をスキップできます。具体的な方法:
次の形式のコンテンツを HTTP セグメントに挿入し、ホワイトリスト IP を宣言します
deny 10.0.0.0/24;
geo ディレクティブは、デフォルト値 1 のホワイトリスト $limited 変数を定義します。クライアント IP が上記の範囲内にある場合、$limited値は 0 です。
その後、上記の内容の直後にmapコマンドを使用して、検索エンジンクライアントのIPを空の文字列にマッピングします。このようにすると、検索エンジンのiIPは表示されなくなります。制限モジュールのメモリ セッションに保存されるため、ホワイトリストに登録された IP へのアクセスは制限されません。
示例:只允许某个IP或某个IP段用户访问,其它的用户全都禁止
2. アクセス頻度制限
アクセス頻度制限は ngx_http_limit_req_module を使用し、2 か所で設定する必要があります。 まず、HTTP セクションで、このモジュールのいくつかのパラメーターを宣言します。 ホワイトリストが設定されている場合は、次のように設定します。
allow x.x.x.x; allow 10.0.0.0/24; deny all;ホワイトリストが設定されていない場合、すべての受信 IP が制限されます。設定は次のとおりです。最初のパラメーターは、制限する必要がある IP グループを表します。 2番目のz/sはこんな感じです。 最後に、Nginx
0x05 需要解决的常见问题に設定されたPHPの解析セクションは、oneという名前のゾーンの使用を指定しており、遅延が設定されていない場合、バッファキューは5になります。 3. アクセス接続制限 アクセス接続制限は ngx_http_limit_conn_module を使用します。これも 2 つの場所で設定する必要があります。ホワイトリストが設定されている場合は、このモジュールのいくつかのパラメーターを宣言します。
1. 让木马上传后不能执行
ホワイトリストが設定されていない場合、すべての訪問 IP が制限されます。設定は次のとおりです
针对上传目录,在nginx配置文件中加入配置,使此目录无法解析php。
パラメータの意味は上記と同様なので、これ以上の説明はありません。
次のステップは、特定のディレクトリなどに指定できるサーバー セグメントに設定することです
2. 让木马执行后看不到非网站目录文件
完了したら、忘れずに nginx -s reload~
取消php-fpm运行账户对于其他目录的读取权限。
3. 木马执行后命令不能执行rree を実行してください。
以上、内容の側面も含めて Nginx のセキュリティ構成に関する研究を紹介しましたが、PHP チュートリアルに興味のある友人の参考になれば幸いです。