Arquitectura de la tecnología ACL
El espacio de nombres System.Security.AccessControl proporciona acceso a las listas de control de acceso (ACL) a través de clases convenientes que eliminan gran parte de la complejidad del sistema de seguridad Windows ACL. Además, el espacio de nombres System.Security.AccessControl contiene varias clases que proporcionan un acceso avanzado al sistema de seguridad Windows ACL.
.NET Framework proporciona acceso a las listas ACL para los recursos siguientes:
Claves criptográficas
Directorios
Identificadores de espera de evento
Archivos
Mutexes
Claves del Registro
Semáforos
Cada uno de estos recursos tiene varias clases que se pueden utilizar para crear y modificar listas ACL.
Jerarquía de las clases ACL
Para la mayoría de los escenarios, puede utilizar las clases abstractas de nivel superior en lugar de clases avanzadas para crear y modificar listas ACL. Para cada recurso, las clases de nivel superior adoptan la forma siguiente:
Una clase que encapsula la lista de control de acceso discrecional (DACL) y la lista de control de acceso al sistema (SACL). Esta clase toma el nombre <Nombre de recurso>Security. Por ejemplo, las clases FileSecurity y DirectorySecurity encapsulan las listas DACL y SACL para archivos y carpetas.
Una clase que encapsula una entrada del control de acceso (ACE). Esta clase toma el nombre <Nombre de recurso>AccessRule.
Una clase que encapsula un ACE de auditoría. Esta clase toma el nombre <Nombre de recurso>AuditRule.
Varias enumeraciones que le permiten crear un acceso concreto y reglas de auditoría.
Para obtener una lista completa de todas las clases ACL de alto nivel, vea Resumen de tecnologías para listas ACL.
Agregar entradas ACE a listas ACL
Después de crear una entrada ACE usando una de las clases de reglas de acceso o de reglas de auditoría, puede agregar la regla al recurso o utilizarlo para quitar una regla existente de un recurso. Por ejemplo, podría crear una regla mediante la clase FileSystemAccessRule que especifica que sólo los administradores pueden abrir un archivo. Podría agregar a continuación esa regla a un objeto FileSecurity o quitar una regla similar de un objeto FileSecurity.
Al agregar una entrada ACE que concede el acceso no garantiza que una entidad de seguridad recibirá el acceso porque una regla de denegación siempre reemplaza a una regla de permiso. Por ejemplo, si agrega a un archivo una regla de acceso de permiso para una cuenta del sistema, esto no significa que el usuario tendrá acceso porque también otra regla puede denegar el acceso al archivo.
Cada objeto <Nombre de recurso>Security asociado a un recurso proporciona los métodos siguientes para agregar o quitar reglas de acceso y reglas de auditoría.
Método |
Descripción |
---|---|
AddAccessRule - y - AddAuditRule |
Busca un acceso o regla de auditoría que se puede combinar con la nueva regla. Si no se encuentra ninguna, agrega la nueva regla. |
SetAccessRule |
Quita todas las reglas del control de acceso con el mismo usuario y valor AccessControlType (Allow o Deny) que la regla especificada y, a continuación, agrega la regla especificada. |
SetAuditRule |
Quita todas las reglas de auditoría con el mismo usuario que la regla especificada, sin tener en cuenta el valor AuditFlags, y, a continuación, agrega la regla especificada. |
ResetAccessRule |
Quita todas las reglas de control de acceso con el mismo usuario que la regla especificada, sin tener en cuenta el valor AccessControlType, y, a continuación, agrega la regla especificada. |
RemoveAccessRule |
Busca la regla de control de acceso con el mismo usuario y valor AccessControlType (Allow o Deny) que el archivo especificado, y con los marcadores de propagación y herencia compatibles. Si se encuentra, los derechos contenidos en la regla de acceso especificada se quitan de la regla. |
RemoveAuditRule |
Busca una regla de control de auditoría con el mismo usuario que la regla especificada y con herencia e marcadores de propagación compatibles. Si se encuentra, los derechos contenidos en la regla especificada se quitan de la regla. |
RemoveAccessRuleAll |
Busca todas las reglas de acceso con el mismo usuario y valor AccessControlType (Allow o Deny) que la regla especificada y, si las encuentra, las quita. |
RemoveAuditRuleAll |
Busca todas las reglas de auditoría con el mismo usuario que la regla especificada y, si las encuentra, las quita. |
RemoveAccessRuleSpecific - y - RemoveAuditRuleSpecific |
Busca una regla de acceso o de auditoría que coincida exactamente con la regla especificada y, si la encuentra, quita la regla. |
AddAccessRule - y - AddAuditRule |
Busca un acceso o regla de auditoría que se puede combinar con la nueva regla. Si no se encuentra ninguna, agrega la nueva regla. |
Obtener y establecer listas ACL
Cada recurso protegido tiene métodos que obtienen y establecen el objeto <Nombre de recurso>Security asociado a un recurso. Para recuperar las listas ACL existentes para un recurso concreto, utilice uno de los métodos GetAccessControl asociados al recurso. Para volver a propagar los cambios a un recurso, utilice uno de los métodos SetAccesscontrol asociados al recurso. Tenga en cuenta que los cambios no se vuelven a propagar a un recurso hasta se vuelvan a aplicar explícitamente con uno de los métodos fijos.
Para obtener una lista completa de todos métodos get y set para cada recurso protegido, vea Resumen de tecnologías para listas ACL.