Propagación automática de ASE heredables
Las funciones SetNamedSecurityInfo y SetSecurityInfo admiten la propagación automática de entradas de control de acceso (ACE) herederas. Por ejemplo, si usa estas funciones para agregar una ACE heredera a un directorio de NTFS, el sistema aplica la ACE según corresponda a las listas de control de acceso (ACL) de cualquier subdirectorio o archivo existente.
Los ASE aplicados directamente tienen prioridad sobre los ASE heredados. El sistema implementa esta precedencia mediante la colocación de ASE aplicados directamente antes de las ACE heredadas en una lista de control de acceso discrecional (DACL). Cuando se llama a las funciones SetNamedSecurityInfo y SetSecurityInfo para establecer la información de seguridad de un objeto, el sistema impone el modelo de herencia actual en las ACL de todos los objetos de la jerarquía debajo del objeto de destino. En el caso de los objetos que se han convertido en el modelo de herencia actual, los bits de SE_DACL_AUTO_INHERITED y SE_SACL_AUTO_INHERITED se establecen en el campo de control del descriptor de seguridad del objeto.
Al crear un nuevo descriptor de seguridad que refleje el modelo de herencia actual, se debe tener cuidado de no cambiar la semántica del descriptor de seguridad. Por lo tanto, los ASE permitidos y denegados nunca se mueven entre sí. Si se necesita este movimiento (por ejemplo, para colocar todos los AEC no inicialmente en la parte delantera de una ACL), la ACL se marca como protegida para evitar el cambio semántico.
El sistema usa las siguientes reglas al propagar los ASE heredados a objetos secundarios:
- Si un objeto secundario sin DACL hereda una ACE, el resultado es un objeto secundario con una DACL que contiene solo la ACE heredada.
- Si un objeto secundario con una DACL vacía hereda una ACE, el resultado es un objeto secundario con una DACL que contiene solo la ACE heredada.
- Si quita una ACE heredera de un objeto primario, la herencia automática quita las copias de la ACE heredadas por objetos secundarios.
- Si la herencia automática da como resultado la eliminación de todas las ACA de la DACL de un objeto secundario, el objeto secundario tiene una DACL vacía en lugar de ninguna DACL.
Estas reglas pueden tener el resultado inesperado de convertir un objeto sin DACL en un objeto con una DACL vacía. Un objeto sin DACL permite el acceso total, pero un objeto con una DACL vacía no permite acceso. Como ejemplo de cómo estas reglas pueden crear una DACL vacía, supongamos que agrega una ACE heredera al objeto raíz de un árbol de objetos. La herencia automática propaga la ACE heredera a todos los objetos del árbol. Los objetos secundarios que comenzaron sin DACL ahora tienen una DACL con la ACE heredada. Si quita la ACE heredera del objeto raíz, el sistema propaga automáticamente el cambio a los objetos secundarios. Los objetos secundarios que se iniciaron sin DACL (lo que permite el acceso completo) ahora tienen una DACL vacía (que no permite el acceso).
Para asegurarse de que un objeto secundario sin DACL no se vea afectado por los ACE heredables, establezca la marca SE_DACL_PROTECTED en el descriptor de seguridad del objeto.
Para obtener información sobre cómo crear correctamente una DACL, consulte Creación de una DACL.