Каталог chroot та chdir PHP-FPM


10

Я встановлюю 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 та logs.

Відповіді:


12
  • Chroot встановлює каталог «root» - ви не можете переміщатися над кореневою каталогом.
  • Chdir просто змінює стартовий каталог - все одно можна переходити до інших каталогів (у тому числі до цих вище).
    • Якщо ви не вказали шлях chroot, застосовується «справжній» корінь - і ви вказуєте абсолютний chdir.
    • Якщо ви вказуєте шлях chroot, то ви вказуєте шлях відносно шляху chroot'd (який визначає кореневу директорію).

Запропоновані вами налаштування здаються цілком чудовими.

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

Як бічна примітка - ваш php-додаток також матиме доступ до вашого nginx.conf та php-fpm.conf на основі показаної вами структури документа - що здається щось, що ви можете змінити (принаймні, зробивши файли читати- лише тому користувачеві).


Я переконаюсь, що ці файли в безпеці. До речі, чи є різниця між цим методом хротування та просто встановленням php_openbasedir?
Сайф Бечан

1
Так - chroot застосовується на рівні операційної системи і його набагато складніше обійти. open_basedir характерний для PHP, і його потрібно перевіряти в кожній функції, щоб подробиці були більш поширеними (наприклад, за допомогою зовнішніх скриптів з shell_exec). На сайті PHP з цього приводу є цікава примітка щодо безпеки . Це не означає, що open_basedir марний, якщо ви використовуєте chroot - за будь-яких обставин, коли щось відбувається поза вашим сценарієм, може бути зручно визначити інший open_basedir, ніж ваш шлях chroot. Chroot також може запропонувати кращі показники.
cyberx86
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.