PHP-FPM의 chroot 및 chdir 디렉토리


10

chrooting이 활성화 된 상태에서 php-fpm을 설정하고 있습니다. 이제 두 가지 옵션이 있으며 정확한 차이점이 무엇인지 알고 싶습니다.

설정에는 다음이 있습니다.

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/

여기에 두 개의 다른 위치가 있으며 PHP가 액세스 할 수있는 경로는 무엇입니까? PHP 웹 사이트에 액세스 할 수 있습니까 /var/www/domains/domain.tld/, 아니면 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는 'root'디렉토리를 설정합니다. 루트 디렉토리를 탐색 할 수 없습니다.
  • Chdir은 단순히 시작 디렉토리를 변경합니다-여전히 다른 디렉토리 (이것을 포함하여)를 탐색 할 수 있습니다.
    • chroot 경로를 지정하지 않으면 '실제'루트가 적용되고 절대 chdir을 지정합니다.
    • chroot 경로를 지정하면 chroot의 경로를 기준으로 경로를 지정합니다 (root 디렉토리를 재정의 함).

당신이 제안한 설정은 꽤 괜찮아 보입니다.

  • 시작 경로는 chroot 경로 + chdir 경로입니다.
  • 앱은 다른 루트 (예 : php_openbasedir, 권한 등)가없는 한 chroot 경로 아래의 모든 파일에 액세스 할 수 있습니다.

참고로-PHP 응용 프로그램은 표시된 문서 구조를 기반으로 nginx.conf 및 php-fpm.conf에 액세스 할 수 있습니다. 해당 사용자에게만 해당).


그 파일들이 안전한지 확인하겠습니다. 그건 그렇고,이 chrooting 방법과 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.