La directory chroot e chdir di PHP-FPM


10

Sto configurando php-fpm con il chrooting abilitato. Ora vedo che ci sono due opzioni e voglio sapere qual è la differenza esatta.

L'installazione ha:

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/

Perché ci sono due posizioni diverse qui e a quale percorso è consentito php. Può accedere al sito Web php /var/www/domains/domain.tld/o può accedere solo ai file all'interno della docrootdirectory.

===

Forse c'è qualche consiglio concreto per me. Voglio avere una configurazione come questa:

posizione webroot: /var/www/

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

Ora qui le impostazioni di php-fpm sarebbero:

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

Ora la domanda principale qui è, l'applicazione che si trova nel wwwsottodominio sarà in grado di accedere ai file in devo app. O anche i file che si trovano nella sessione, che è il percorso di salvataggio della sessione, o le altre cartelle come SSL e Log.

Risposte:


12
  • Chroot imposta la directory 'root' - non puoi navigare sopra la directory root.
  • Chdir cambia semplicemente la directory di partenza - è ancora possibile navigare in altre directory (comprese quelle sopra questa).
    • Se non si specifica un percorso chroot, si applica la radice "reale" e si specifica un chdir assoluto.
    • Se si specifica un percorso chroot, si specifica un percorso relativo al percorso chroot (che ridefinisce la directory principale).

Le impostazioni che hai proposto sembrano abbastanza buone.

  • Il percorso iniziale sarebbe il percorso chroot + il percorso chdir
  • L'app sarà in grado di accedere a tutti i file nel percorso chroot (a meno che non siano presenti altre restrizioni, ad esempio php_openbasedir, permessi, ecc.).

Come nota a margine - la tua applicazione php avrà anche accesso a nginx.conf e php-fpm.conf in base alla struttura del documento che hai mostrato - che sembra qualcosa che potresti voler cambiare (almeno facendo leggere i file- solo per quell'utente).


Mi assicurerò che quei file siano al sicuro. A proposito, c'è una differenza tra questo metodo di chrooting e solo l'impostazione di php_openbasedir?
Saif Bechan,

1
Sì - chroot si applica a livello di sistema operativo ed è molto più difficile da bypassare. open_basedir è specifico di PHP e deve essere verificato in ogni funzione, quindi gli exploit sono più comuni (ad es. eseguendo script esterni con shell_exec). C'è una nota di sicurezza interessante sul sito di PHP su questo argomento. Ciò non significa che open_basedir sia inutile se si utilizza chroot - in qualsiasi circostanza in cui si verifica qualcosa al di fuori dello script, può essere utile definire un open_basedir diverso dal percorso chroot. Chroot può anche offrire prestazioni migliori.
cyberx86,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.