PHP-FPMのchrootおよびchdirディレクトリ


10

私はphp-fpmをchrootingを有効にして設定しています。これで2つのオプションがあることがわかりました。正確な違いを知りたいのですが。

セットアップには以下があります。

chroot = /var/www/domains/domain.tld/
; Chdir to this directory at the start. This value must be an absolute path.
; Default Value: current directory or / when chroot
chdir = /docroot/

ここに2つの異なる場所がある理由と、phpがアクセスを許可されているパスはどれですか。/var/www/domains/domain.tld/PHP Webサイトにアクセスできますか、それともdocrootディレクトリ内のファイルにのみアクセスできます。

===

多分私にいくつかの具体的なアドバイスがあります。このような設定をしたい:

ウェブルートの場所: /var/www/

domain.com/
 |---conf/
 |    |--nginx.conf
 |    |--php-fpm.conf
 |
 |---ssl/
 |---logs/
 |---session/
 |---domains/
       |---www/
       |---app/
       |---dev/

これで、php-fpm設定は次のようになります。

chroot = /var/www/domain.com/
chdir  = /domains/www

今ここでの主な問題は、アプリケーションに位置し、あるwwwサブドメインは、内のファイルにアクセスすることができdevたりapp。または、セッションの保存パスであるセッション内にあるファイル、またはsslやログなどの他のフォルダーです。

回答:


12
  • Chrootは「ルート」ディレクトリを設定します-ルートディレクトリの上に移動することはできません。
  • Chdirは単に開始ディレクトリを変更します-他のディレクトリ(これより上のディレクトリを含む)に移動することも可能です。
    • chrootパスを指定しない場合、「実際の」ルートが適用され、絶対chdirを指定します。
    • chrootパスを指定する場合は、chrootされたパス(ルートディレクトリを再定義する)からの相対パスを指定します。

あなたが提案した設定はかなり良いようです。

  • 開始パスは、chrootパス+ chdirパスです。
  • アプリは、chrootパスの下にあるすべてのファイルにアクセスできます(他に制限がある場合を除きます-php_openbasedir、権限など)。

ちなみに、php-applicationは、表示したドキュメント構造に基づいてnginx.confおよびphp-fpm.confにもアクセスできます。そのユーザーにのみ)。


それらのファイルが安全であることを確認します。ちなみに、このchrootの方法とphp_openbasedirを設定するだけの違いはありますか?
Saif Bechan

1
はい-chrootはオペレーティングシステムレベルで適用され、バイパスするのがはるかに困難です。open_basedirはPHPに固有であり、エクスプロイトがより一般的になるようにすべての関数でチェックする必要があります(たとえば、shell_execで外部スクリプトを実行することにより)。この問題については、PHPのサイトに興味深いセキュリティノートがあります。これは、chrootを使用している場合にopen_basedirが役に立たないという意味ではありません。スクリプトの外部で何かが発生する状況では、chrootパスとは異なるopen_basedirを定義すると便利です。Chrootは、より優れたパフォーマンスを提供する場合もあります。
cyberx86
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.