El directorio chroot y chdir de PHP-FPM


10

Estoy configurando php-fpm con chrooting habilitado. Ahora veo que hay dos opciones, y quiero saber cuál es la diferencia exacta.

La configuración tiene:

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/

¿Por qué hay dos ubicaciones diferentes aquí, y a qué ruta se le permite acceder a PHP? ¿Puede el sitio web php acceder /var/www/domains/domain.tld/o solo puede acceder a archivos dentro del docrootdirectorio?

===

Quizás haya algún consejo concreto para mí. Quiero tener una configuración como esta:

ubicación de raíz web: /var/www/

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

Ahora aquí la configuración de php-fpm sería:

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

Ahora la pregunta principal aquí es si la aplicación ubicada en el wwwsubdominio podrá acceder a los archivos en devo app. O incluso los archivos ubicados en la sesión, que es la ruta de guardado de la sesión, o las otras carpetas como ssl y logs.

Respuestas:


12
  • Chroot establece el directorio 'raíz': no ​​puede navegar por encima del directorio raíz.
  • Chdir simplemente cambia el directorio de inicio; aún es posible navegar a otros directorios (incluidos los que están arriba).
    • Si no especifica una ruta chroot, se aplica la raíz 'real', y usted especifica un chdir absoluto.
    • Si especifica una ruta chroot, entonces especifica una ruta relativa a la ruta chroot'd (que redefine el directorio raíz).

La configuración que ha propuesto parece bastante buena.

  • La ruta de inicio sería la ruta chroot + la ruta chdir
  • La aplicación podrá acceder a todos los archivos bajo la ruta chroot (a menos que haya otras restricciones, por ejemplo, php_openbasedir, permisos, etc.) en su lugar.

Como nota al margen: su aplicación php también tendrá acceso a su nginx.conf y php-fpm.conf en función de la estructura del documento que ha mostrado, lo que parece algo que puede querer cambiar (al menos hacer que los archivos se lean) solo para ese usuario).


Me aseguraré de que esos archivos estén seguros. Por cierto, ¿hay alguna diferencia entre este método de chrooting y solo configurar php_openbasedir?
Saif Bechan

1
Sí, chroot se aplica a nivel del sistema operativo y es mucho más difícil de omitir. open_basedir es específico de PHP y debe verificarse en cada función para que los exploits sean más comunes (por ejemplo, ejecutando scripts externos con shell_exec). Hay una nota de seguridad interesante en el sitio de PHP sobre este asunto. Eso no quiere decir que open_basedir sea inútil si está usando chroot; en cualquier circunstancia en que algo ocurra fuera de su script, puede ser útil definir un open_basedir diferente a su ruta chroot. Chroot también puede ofrecer un mejor rendimiento.
cyberx86
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.