Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
por Tali Smith
Introducción
Hay varias maneras de establecer listas de control de acceso (ACL), incluidas las herramientas de línea de comandos, como Icacls.exe. Los hosters de PHP suelen usar la línea de comandos. Sin embargo, también es posible establecer ACL en el archivo Manifest.xml; estos son los mecanismos que se aplican al instalar una aplicación a través de la Herramienta de implementación web (WDT).
De forma predeterminada, WDT instala todos los archivos y directorios sin cambiar ninguno de los permisos existentes. En la mayoría de los casos, esto significa que la aplicación solo tiene acceso de lectura a los archivos y directorios instalados. Si la aplicación necesita poder escribir en cualquier archivo o directorio, puede especificar qué archivos o directorios tienen una directiva setAcl en el archivo Manifest.xml. El elemento setAclResourceType define si la ruta de acceso representa un archivo o un directorio.
<setAcl
path="application/sites/default/settings.php"
setAclResourceType="File"
setAclAccess="Modify"
setAclUser="anonymousAuthenticationUser" />
Para asegurarse de que la ACL se aplica al directorio adecuado, también debe proporcionar un parámetro oculto para asegurarse de que la ACL se aplica al directorio con nombre en relación con AppPath donde está instalado.
<!-- This is the parameter that is used to set ACLs, it's set to the application path filled in by the user -->
<parameter
name="SetAclParameter1"
defaultValue="{AppPath}/sites/default/settings.php"
tags="Hidden">
<parameterEntry
type="ProviderPath" scope="setAcl"
match="Application/sites/default/settings.php" />
</parameter>
Si no se establece ninguna ACL en un archivo o directorio, es más probable que la ACL permita el acceso de lectura al archivo o directorio. Las ACL son específicas, por lo que conceder acceso de escritura no concede necesariamente acceso de lectura. Si debe escribir en un archivo o directorio, debe agregar "lectura, escritura". Si necesita poder enumerar los archivos en un directorio, debe agregar "ListDirectory". Tenga en cuenta que el acceso de escritura no concede acceso de modificación. Si necesita cambiar los archivos una vez que se escriben en el disco, debe establecer explícitamente modificar el acceso. Hay algunos permisos que son combinaciones de otros permisos; por ejemplo, "Modificar" incluye "Leer", "Escribir", "Ejecutar" y "Eliminar".
Para otorgar permisos de lectura, ejecución y escritura al directorio del sistema de archivos MyApp para el usuario Test, añada la siguiente línea a su archivo Manifest.xml:
<setAcl path="MyApp" setAclAccess="ReadAndExecute, Write" setAclUser="Test" />
Para establecer la ACL en la ruta MyApp/Upload para permitir que los usuarios anónimos suban contenidos, añada la siguiente línea a su archivo Manifest.xml:
<setAcl path="MyApp/Upload" setAclAccess="Write" setAclUser="anonymousAuthenticationUser" />
Tenga en cuenta que anonymousAuthenticationUser es un token especial que resuelve su identidad de autenticación anónima configurada.
Para conceder acceso de lectura a la carpeta MyApp\Data para la identidad del grupo de aplicaciones, añada la siguiente línea al archivo Manifest.xml:
<setAcl path="MyApp/Data" setAclAccess="Read" />
Tenga en cuenta que el setAclUser no se usa aquí. El valor predeterminado para esto es Identidad del grupo de aplicaciones, por lo que es posible omitir esa línea.
Tenga en cuenta que se considera una práctica de seguridad arriesgada conceder acceso de "Escritura" o " Modificar" a todo el árbol de la aplicación aplicando una ACL en la raíz de la aplicación. Las ACL deben ser lo más limitadas y granulares posible sin restringir la funcionalidad de las aplicaciones.
Si está familiarizado con los permisos de UNIX o Linux, los privilegios descritos son equivalentes a los permisos de "Propietario". Aunque los privilegios de grupo y mundo se pueden establecer a través de varias ACL fuera del WDT, aquí solo se establecen los permisos de clase "Propietario". En la tabla siguiente se muestran los equivalentes del sistema operativo Windows® de varios permisos enmascarados por bits de Linux:
Linux | Windows | Linux | Windows |
---|---|---|---|
0 | No equivalente a None | 4 | Leer |
1 | Ejecutar | 5 | ReadAndExecute |
2 | Escribir | 6 | Lectura, escritura |
3 | Escritura, ejecutar | 7 | Modify |
Consulte la lista completa de los distintos derechos de usuario y sus descripciones. Además, existen algunas guías ACL específicas para Internet Information Services (IIS).
El token anonymousAuthenticationUser se compara automáticamente con el identificador que el sitio web ha configurado y que se usará para la autenticación anónima. Dado que el administrador del sitio web configura este identificador, es mejor usar anonymousAuthenticationUser para aplicaciones PHP y no usar setAclUser para aplicaciones de Microsoft® ASP.NET (a menos que la aplicación tenga una necesidad específica de que un usuario controle la propiedad de los archivos).
Normalmente, las aplicaciones PHP se ejecutan como usuario anónimo porque la configuración de FastCGI suele establecer la suplantación como True (ejecutar como usuario anónimo). Las aplicaciones ASP.NET suelen ejecutarse como la identidad del proceso trabajador (identidad del grupo de aplicaciones). Si no se especifica setAclUseris, setAcldirective usa la identidad del grupo de aplicaciones de la aplicación como identificador para la autorización.