PHP-FPM каталог chroot и chdir

10

Я настраиваю php-fpm с включенной chrooting. Теперь я вижу, что есть два варианта, и я хочу знать, какова точная разница.

Установка имеет:

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каталоге.

===

Может быть, есть какой-то конкретный совет для меня. Я хочу иметь такую ​​настройку:

расположение webroot: /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 и logs.

Саиф Бечан
источник

Ответы:

12
  • Chroot устанавливает корневой каталог - вы не можете перемещаться выше корневого каталога.
  • Chdir просто меняет начальный каталог - все еще возможно перейти к другим каталогам (включая те, что выше).
    • Если вы не указываете путь к chroot, то применяется «настоящий» корень - и вы указываете абсолютный chdir.
    • Если вы указываете путь к chroot, то вы указываете путь относительно пути к chroot (который переопределяет корневой каталог).

Предложенные вами настройки выглядят вполне прилично.

  • Начальным путем будет путь chroot + путь chdir
  • Приложение сможет получить доступ ко всем файлам по пути chroot (если нет других ограничений - например, php_openbasedir, разрешения и т. Д.).

В качестве примечания: ваше php-приложение также будет иметь доступ к вашим файлам nginx.conf и php-fpm.conf в зависимости от структуры документа, которую вы показали, и это похоже на то, что вы, возможно, захотите изменить (по крайней мере, сделать файлы доступными для чтения). только этому пользователю).

cyberx86
источник
Я позабочусь, чтобы эти файлы были в безопасности. Кстати, есть ли разница между этим методом хроматирования и просто установкой php_openbasedir?
Саиф Бечан
1
Да - chroot применяется на уровне операционной системы и его намного сложнее обойти. open_basedir специфичен для PHP и должен быть проверен в каждой функции, чтобы эксплойты были более распространенными (например, путем запуска внешних скриптов с shell_exec). На этом сайте PHP есть интересное замечание по безопасности . Это не означает, что open_basedir бесполезен, если вы используете chroot - при любых обстоятельствах, когда что-то происходит за пределами вашего скрипта, может быть полезно определить open_basedir, отличный от вашего пути chroot. Chroot также может предложить лучшую производительность.
cyberx86