Thư mục chroot và chdir của PHP-FPM


10

Tôi đang thiết lập php-fpm với kích hoạt chroot. Bây giờ tôi thấy rằng có hai lựa chọn, và tôi muốn biết sự khác biệt chính xác là gì.

Các thiết lập có:

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/

Tại sao có hai vị trí khác nhau ở đây và đường dẫn nào php được phép truy cập. Trang web php có thể truy cập được không /var/www/domains/domain.tld/, hoặc chỉ có thể truy cập các tệp trong docrootthư mục.

===

Có lẽ có một số lời khuyên cụ thể cho tôi. Tôi muốn có một thiết lập như thế này:

vị trí webroot: /var/www/

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

Bây giờ ở đây cài đặt php-fpm sẽ là:

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

Bây giờ câu hỏi chính ở đây là, ứng dụng nằm trong wwwtên miền phụ có thể truy cập các tệp trong devhoặc app. Hoặc thậm chí các tệp nằm trong phiên, đó là đường dẫn lưu phiên hoặc các thư mục khác như ssl và log.

Câu trả lời:


12
  • Chroot đặt thư mục 'root' - bạn không thể điều hướng phía trên thư mục gốc.
  • Chdir chỉ đơn giản là thay đổi thư mục bắt đầu - vẫn có thể điều hướng đến các thư mục khác (bao gồm cả những thư mục trên này).
    • Nếu bạn không chỉ định đường dẫn chroot, thì gốc 'thực' sẽ được áp dụng - và bạn chỉ định một đường dẫn tuyệt đối.
    • Nếu bạn chỉ định một đường dẫn chroot, thì bạn chỉ định một đường dẫn liên quan đến đường dẫn chroot'd (xác định lại thư mục gốc).

Các thiết lập bạn đã đề xuất có vẻ khá tốt.

  • Đường dẫn bắt đầu sẽ là đường dẫn chroot + đường dẫn chdir
  • Ứng dụng sẽ có thể truy cập tất cả các tệp theo đường dẫn chroot (trừ khi có các hạn chế khác - ví dụ: php_openbasingir, quyền, v.v.) tại chỗ.

Như một lưu ý phụ - ứng dụng php của bạn cũng sẽ có quyền truy cập vào nginx.conf và php-fpm.conf dựa trên cấu trúc tài liệu bạn đã hiển thị - có vẻ như là thứ gì đó bạn có thể muốn thay đổi (ít nhất là làm cho các tệp được đọc- chỉ cho người dùng đó).


Tôi sẽ đảm bảo những tập tin đó là an toàn. Nhân tiện, có một sự khác biệt giữa phương pháp chroot này và chỉ thiết lập php_openbasingir?
Saif Bechan

1
Có - chroot áp dụng ở cấp hệ điều hành và khó vượt qua hơn nhiều. open_basingir dành riêng cho PHP và cần được kiểm tra trong mọi hàm để khai thác phổ biến hơn (ví dụ: bằng cách chạy các tập lệnh bên ngoài với shell_exec). Có một lưu ý bảo mật thú vị trên trang web của PHP về vấn đề này. Điều đó không có nghĩa là open_basingir là vô dụng nếu bạn đang sử dụng chroot - trong bất kỳ trường hợp nào xảy ra bên ngoài tập lệnh của bạn, có thể hữu ích để xác định open_basingir khác với đường dẫn chroot của bạn. Chroot cũng có thể cung cấp hiệu suất tốt hơn.
cyberx86
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.