Katalog chroot i chdir PHP-FPM


10

Konfiguruję php-fpm z włączonym chrootingiem. Teraz widzę, że są dwie opcje i chcę wiedzieć, jaka jest dokładna różnica.

Konfiguracja ma:

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/

Dlaczego są tutaj dwie różne lokalizacje i do której ścieżki ma dostęp php. Może uzyskać dostęp do witryny php /var/www/domains/domain.tld/lub tylko do plików z tego docrootkatalogu.

===

Może jest dla mnie konkretna rada. Chcę mieć taką konfigurację:

lokalizacja webroot: /var/www/

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

Tutaj ustawienia php-fpm byłyby następujące:

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

Teraz głównym pytaniem jest, czy aplikacja znajdująca się w wwwsubdomenie będzie mogła uzyskać dostęp do plików w devlub app. Lub nawet pliki znajdujące się w sesji, która jest ścieżką zapisu sesji, lub inne foldery, takie jak ssl i logi.

Odpowiedzi:


12
  • Chroot ustawia katalog „root” - nie można nawigować powyżej katalogu głównego.
  • Chdir po prostu zmienia katalog początkowy - nadal można przechodzić do innych katalogów (w tym również powyżej).
    • Jeśli nie określisz ścieżki chroot, zastosowanie będzie miał „prawdziwy” katalog główny - i podasz absolutny chdir.
    • Jeśli podasz ścieżkę chroot, określ ścieżkę względną do ścieżki chroot (która redefiniuje katalog główny).

Zaproponowane ustawienia wydają się całkiem w porządku.

  • Ścieżką początkową będzie ścieżka chroot + ścieżka chdir
  • Aplikacja będzie mogła uzyskać dostęp do wszystkich plików w ścieżce chroot (chyba że istnieją inne ograniczenia - np. Php_openbasedir, uprawnienia itp.).

Na marginesie - twoja aplikacja php będzie miała również dostęp do twoich nginx.conf i php-fpm.conf na podstawie pokazanej struktury dokumentu - co wydaje się być czymś, co możesz chcieć zmienić (przynajmniej sprawiając, że pliki będą czytane - tylko do tego użytkownika).


Upewnię się, że te pliki są bezpieczne. Nawiasem mówiąc, czy istnieje różnica między tą metodą chrootowania a ustawieniem php_openbasedir?
Saif Bechan

1
Tak - chroot ma zastosowanie na poziomie systemu operacyjnego i jest o wiele trudniejszy do ominięcia. open_basedir jest specyficzny dla PHP i musi być sprawdzany w każdej funkcji, aby exploity były bardziej powszechne (np. przez uruchamianie zewnętrznych skryptów za pomocą shell_exec). W tej sprawie na stronie PHP znajduje się interesująca informacja bezpieczeństwa . Nie oznacza to, że open_basedir jest bezużyteczny, jeśli używasz chroot - w każdych okolicznościach, w których coś dzieje się poza twoim skryptem, może być przydatne zdefiniowanie innego open_basedir niż ścieżka chroot. Chroot może również oferować lepszą wydajność.
cyberx86
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.