¿Debo suplantar PHP a través de FastCGI?

16

Estoy instalando la última versión de PHP en IIS 7.5 a través de FastCGI, y todas las instrucciones dicen que FastCGI debe suplantar al cliente que llama configurando

 fastcgi.impersonate = 1

Si mi sitio web tendrá esta configuración

  • grupo de aplicaciones dedicado
  • identidad del grupo de aplicaciones de ApplicationPoolIdentity
  • autenticación anónima solamente (como IUSR)

¿Por qué quiero suplantar?

Vengo de un fondo ASP.NET, donde el IUSR obtiene permisos de solo lectura y la identidad del grupo de aplicaciones obtiene permisos de escritura. Dar acceso de escritura al IUSR generalmente abre la puerta a vulnerabilidades de WebDAV. Así que dudo en dejar que PHP se ejecute como IUSR.

No puedo encontrar a muchas personas haciendo esta pregunta ( 1 | 2 ), así que creo que me falta algo. ¿Podría alguien aclararme esto?

WimpyProgrammer
fuente

Respuestas:

17

13 meses después, quería revisar mi propia pregunta. En ese tiempo, transferí media docena de sitios web de IIS 6 a IIS 7.5 y los configuré con mi método preferido. Todo lo que puedo decir es que los sitios web funcionan, no han tenido ningún problema de seguridad (no es que sean sitios populares), y en mi opinión, la configuración es más segura de lo que recomienda learn.iis.net.

Para la posteridad, aquí están las configuraciones relevantes. En el PHP INI:

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0

En IIS:

  • Grupo de aplicaciones> Identidad> ApplicationPoolIdentity
  • Sitio web> Autenticación> Autenticación anónima> Usuario específico: IUSR

Los permisos NTFS y dónde aplicarlos:

  • IUSR - Grant Read, Deny Write
    • El directorio raíz del sitio web de IIS. Por ejemplo, en un proyecto de Zend Framework, este sería el directorio / public.
    • Si su aplicación carga archivos y los guarda en un directorio público, debe aplicar este permiso al directorio de carga temporal. Esto se debe a move_uploaded_fileque conservará los permisos del directorio de carga. Este es el mayor inconveniente de esta configuración de permisos que he encontrado.
  • ApplicationPoolIdentity ( IIS AppPool\<<YourApplicationPoolName>>) - Grant Read & List
    • La raíz de su aplicación PHP. Por ejemplo, en un proyecto Zend Framework este sería el proyecto completo.
    • Cualquier biblioteca externa (Zend, Doctrine, etc.) incluida por su aplicación que no esté en la carpeta de la aplicación.
  • ApplicationPoolIdentity - Grant Modify
    • Cualquier lugar en el que su aplicación va a escribir como upload_tmp_dir, session.save_path, y error_log.
    • A veces necesito agregar este permiso a la raíz de la aplicación PHP en mi entorno de desarrollo para admitir cosas como la generación automática de proxies de Doctrine .
  • ApplicationPoolIdentity - Lista de subvenciones
    • Si su aplicación está en un directorio virtual, deberá agregar este permiso a la raíz del sitio web. Esto permite que su aplicación lea su web.config principal. Por ejemplo, si la raíz de su aplicación es http://example.com/MyPHPApp , configure este permiso en el directorio web de example.com. Específicamente, solo necesita aplicar a "Esta carpeta y archivos", "solo dentro de este contenedor".

Espero que esto ayude a cualquiera que decida que las instrucciones de learn.iis.net no son ideales.

WimpyProgrammer
fuente
¡Muchas gracias por esto! Se agregó un script por lotes para automatizar. Funciona bien para mi instalación.
Sire
Debe habilitar la suplantación y establecer Autenticación> Acceso anónimo> Editar en Identidad de grupo de aplicaciones. Luego, solo configure los permisos del sistema de archivos con IIS APPPOOL \ <Application Pool Name>.
Monstieur
@ Kurian Sí, ese enfoque es más simple y según las instrucciones de learn.iis.net. ¿Ofrece algún otro beneficio? Elegí el sistema descrito anteriormente porque separa los permisos de la aplicación de los permisos del usuario web.
WimpyProgrammer
Impide que varias aplicaciones accedan a los datos de los demás. Sin ApplicationPoolIdentity, si se piratea una aplicación, se puede usar para piratear otras aplicaciones en ese servidor. En segundo lugar, le permite tratar FastCGI igual que ASP.NET en lo que respecta a los permisos.
Monstieur
Estoy de acuerdo con la primera parte ApplicationPoolIdentity es ideal para aplicaciones de sandboxing, por eso también lo uso anteriormente. Para su segundo punto, supongo que administramos nuestros sitios ASP.NET de manera diferente. Cuando configuro un sitio ASP.NET, uso IUSR para el usuario anónimo y ApplicationPoolIdentity para el grupo de aplicaciones, y los permisos son muy similares a los que describí anteriormente.
WimpyProgrammer
1

Ver: http://www.php.net/manual/en/install.windows.iis6.php

Suplantación y acceso al sistema de archivos

Se recomienda habilitar la suplantación FastCGI en PHP cuando se usa IIS. Esto está controlado por la directiva fastcgi.impersonate en el archivo php.ini. Cuando se habilita la suplantación, PHP realizará todas las operaciones del sistema de archivos en nombre de la cuenta de usuario que ha sido determinada por la autenticación IIS.

Según la documentación, simplemente permite que fastcgi actúe en nombre del cliente utilizando todos los mismos permisos (en su caso, lo que parece ser la cuenta IUSR). En otras palabras, realizar todas las acciones normalmente permitidas a las credenciales propias del cliente (o anon). Ni mas ni menos. Sin este conjunto, imagino que los pobres fastcgi quedarían paralizados.

bob-the-destructor
fuente
Siendo ese el caso en su situación, estaría accediendo en función de la cuenta de invitado o algo así.
Matt
Gracias por tus respuestas Matt y Bob! Estaba empezando a pensar que nadie tomaría una puñalada.
WimpyProgrammer
2
Cuando PHP se ejecuta sin suplantación, se ejecuta como la identidad del grupo de aplicaciones. Esto me permite otorgar derechos de solo lectura al usuario anon y otorgar acceso de escritura a la identidad de la aplicación. Entonces PHP no es inútil sin suplantación. Creé una prueba que podría aclarar. IUSR (anon): lectura otorgada, escritura denegada. identidad de la aplicación: lectura / escritura otorgada. Con la suplantación desactivada, todavía puedo escribir archivos a través del código. Con la suplantación, no puedo. Pero no quiero que el IUSR tenga acceso de escritura. Creo que haré algunas preguntas en otros foros y volveré aquí cuando sepa más.
WimpyProgrammer