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_file
que 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.