Direktori chroot dan chdir PHP-FPM

10

Saya mengatur php-fpm dengan chroot diaktifkan. Sekarang saya melihat bahwa ada dua opsi, dan saya ingin tahu apa perbedaan sebenarnya.

Setup memiliki:

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/

Mengapa ada dua lokasi berbeda di sini, dan jalur mana yang diizinkan untuk diakses oleh php. Dapatkah situs web php mengakses /var/www/domains/domain.tld/, atau hanya dapat mengakses file dengan docrootdirektori.

===

Mungkin ada beberapa saran nyata bagi saya. Saya ingin memiliki pengaturan seperti ini:

lokasi webroot: /var/www/

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

Sekarang di sini pengaturan php-fpm adalah:

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

Sekarang pertanyaan utama di sini adalah, apakah aplikasi yang terletak di wwwsubdomain dapat mengakses file dalam devatau app. Atau bahkan file yang terletak di sesi, yang merupakan jalur simpan sesi, atau folder lain seperti ssl dan log.

Saif Bechan
sumber

Jawaban:

12
  • Chroot menetapkan direktori 'root' - Anda tidak dapat menavigasi di atas direktori root.
  • Chdir hanya mengubah direktori awal - masih memungkinkan untuk menavigasi ke direktori lain (termasuk yang di atas ini).
    • Jika Anda tidak menentukan jalur chroot, maka akar 'asli' berlaku - dan Anda menentukan chdir absolut.
    • Jika Anda menentukan path chroot, maka Anda menentukan path relatif ke path chroot (yang mendefinisikan ulang direktori root).

Pengaturan yang Anda usulkan tampak cukup baik.

  • Jalur awal adalah jalur chroot + jalur chdir
  • Aplikasi ini akan dapat mengakses semua file di bawah jalur chroot (kecuali ada batasan lain - misalnya php_openbasedir, izin, dll).

Sebagai catatan tambahan - aplikasi php Anda juga akan memiliki akses ke nginx.conf dan php-fpm.conf Anda berdasarkan pada struktur dokumen yang telah Anda perlihatkan - yang sepertinya adalah sesuatu yang mungkin ingin Anda ubah (setidaknya membuat file-file tersebut dibaca - hanya untuk pengguna itu).

cyberx86
sumber
Saya akan memastikan file-file itu aman. Omong-omong, apakah ada perbedaan antara metode chroot ini dan hanya menyetel php_openbasedir?
Saif Bechan
1
Ya - chroot berlaku pada level sistem operasi dan jauh lebih sulit untuk dilewati. open_basedir khusus untuk PHP, dan perlu diperiksa di setiap fungsi agar eksploit lebih umum (misalnya dengan menjalankan skrip eksternal dengan shell_exec). Ada catatan keamanan yang menarik di situs PHP tentang masalah ini. Itu bukan untuk mengatakan bahwa open_basedir tidak berguna jika Anda menggunakan chroot - dalam keadaan apa pun di mana sesuatu terjadi di luar skrip Anda, mungkin berguna untuk mendefinisikan open_basedir yang berbeda dari jalur chroot Anda. Chroot juga dapat menawarkan kinerja yang lebih baik.
cyberx86