Répertoire chroot et chdir de PHP-FPM

10

Je configure php-fpm avec le chrootage activé. Maintenant, je vois qu'il y a deux options, et je veux savoir quelle est la différence exacte.

La configuration a:

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/

Pourquoi y a-t-il deux emplacements différents ici, et quel chemin php est autorisé à accéder. Le site Web php /var/www/domains/domain.tld/peut-il accéder ou ne peut-il accéder qu'aux fichiers du docrootrépertoire.

===

Peut-être qu'il y a des conseils concrets pour moi. Je veux avoir une configuration comme celle-ci:

emplacement webroot: /var/www/

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

Maintenant, voici les paramètres php-fpm:

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

Maintenant, la principale question est de savoir si l'application située dans le wwwsous - domaine pourra accéder aux fichiers dans devou app. Ou même les fichiers situés dans la session, qui est le chemin d'enregistrement de la session, ou les autres dossiers tels que ssl et logs.

Saif Bechan
la source

Réponses:

12
  • Chroot définit le répertoire «racine» - vous ne pouvez pas naviguer au-dessus du répertoire racine.
  • Chdir change simplement le répertoire de départ - il est toujours possible de naviguer vers d'autres répertoires (y compris ceux ci-dessus).
    • Si vous ne spécifiez pas de chemin chroot, alors la racine «réelle» s'applique - et vous spécifiez un chdir absolu.
    • Si vous spécifiez un chemin chroot, vous spécifiez un chemin relatif au chemin chroot (qui redéfinit le répertoire racine).

Les paramètres que vous avez proposés semblent assez bien.

  • Le chemin de départ serait le chemin chroot + le chemin chdir
  • L'application pourra accéder à tous les fichiers sous le chemin chroot (sauf s'il existe d'autres restrictions - par exemple php_openbasedir, autorisations, etc.) en place.

En guise de remarque - votre application php aura également accès à vos fichiers nginx.conf et php-fpm.conf en fonction de la structure du document que vous avez montrée - ce qui semble être quelque chose que vous voudrez peut-être changer (au moins en faisant lire les fichiers- uniquement à cet utilisateur).

cyberx86
la source
Je vais m'assurer que ces fichiers sont sûrs. Soit dit en passant, y a-t-il une différence entre cette méthode de chrootage et la simple définition de php_openbasedir?
Saif Bechan
1
Oui - chroot s'applique au niveau du système d'exploitation et est beaucoup plus difficile à contourner. open_basedir est spécifique à PHP, et doit être vérifié dans chaque fonction pour que les exploits soient plus courants (par exemple en exécutant des scripts externes avec shell_exec). Il y a une note de sécurité intéressante sur le site de PHP à ce sujet. Cela ne veut pas dire que open_basedir est inutile si vous utilisez chroot - en toute circonstance où quelque chose se produit en dehors de votre script, il peut être utile de définir un open_basedir différent de votre chemin chroot. Chroot peut également offrir de meilleures performances.
cyberx86