Administración de privilegios en un sistema de archivos
Privilege es un mecanismo que el sistema operativo usa para controlar operaciones específicas. Cada privilegio tiene operaciones concretas asociadas a ella que el autor de la llamada de la operación puede realizar si se cumplen las dos condiciones siguientes:
- El autor de la llamada debe mantener el privilegio.
- El privilegio también debe estar habilitado.
El principio de estos requisitos se conoce como privilegios mínimos. El privilegio mínimo requiere que se habiliten los privilegios antes de usarlos, en lugar de asumirse. Este requisito minimiza la posibilidad de que un usuario pueda realizar accidentalmente una operación que no tenía intención. Por ejemplo, SeRestorePrivilege normalmente permitiría al autor de la llamada omitir las comprobaciones habituales de acceso de escritura a un archivo. Por ejemplo, es posible que un administrador no quiera invalidar realmente las comprobaciones de seguridad normales al copiar un archivo; sin embargo, es posible que deseen hacerlo al restaurar ese mismo archivo mediante una utilidad de copia de seguridad o restauración.
En el caso de los sistemas de archivos, hay muchos privilegios que a menudo se usan para modificar el comportamiento normal (en particular, comprobaciones de seguridad) para el sistema. Estos privilegios son:
SeBackupPrivilege permite la recuperación del contenido del archivo, incluso si es posible que el descriptor de seguridad del archivo no conceda ese acceso. Un autor de llamada con SeBackupPrivilege habilitado obvia la necesidad de realizar cualquier comprobación de seguridad basada en ACL.
SeRestorePrivilege permite la modificación del contenido del archivo, incluso si es posible que el descriptor de seguridad del archivo no conceda este acceso. Esta función también se puede usar para cambiar el propietario y la protección.
SeChangeNotifyPrivilege permite atravesar la derecha. Este privilegio es una optimización importante en Windows porque quita el costo de realizar una comprobación de seguridad en cada directorio único de una ruta de acceso.
SeManageVolumePrivilege permite operaciones de administración de nivel de volumen específicas, como el volumen de bloqueo, la desfragmentación, el desmontaje del volumen y la configuración de la longitud de datos válida en Windows XP y versiones posteriores. Un controlador del sistema de archivos aplica explícitamente este privilegio en particular basado principalmente en las operaciones FSCTL. En este caso, el sistema de archivos toma una decisión de directiva para aplicar este privilegio. La determinación de si este privilegio lo mantiene el autor de la llamada se realiza mediante el monitor de referencia de seguridad como parte de la comprobación de privilegios normal.
Aunque hay muchos otros privilegios, normalmente son opacos para los sistemas de archivos y solo el Monitor de referencia de seguridad (SRM) los interpreta.
Las rutinas clave de Windows para administrar privilegios dentro de un sistema de archivos son:
SePrivilegeCheck realiza una comprobación de un conjunto específico de privilegios necesarios.
SeSinglePrivilegeCheck realiza una comprobación de un único privilegio específico; es una versión optimizada de SePrivilegeCheck.
SeAccessCheck realiza la comprobación de acceso normal en un objeto (normalmente un objeto de archivo para un sistema de archivos).
SeFreePrivileges libera el bloque de privilegios devuelto por una llamada anterior a SeAccessCheck.
SeAppendPrivileges agrega privilegios habilitados a una estructura de ACCESS_STATE. Normalmente, un sistema de archivos usaría el ACCESS_STATE pasado a él durante IRP_MJ_CREATE procesamiento.