特权 是操作系统用来控制特定操作的机制。 如果满足以下两个条件,则每个特权都有特定操作,调用者可以执行这些操作:
- 权限必须由调用方持有。
- 此特权也必须启用。
这些要求的原则称为 最低特权。 最低权限原则要求在使用之前激活权限,而非假设已经激活。 此要求将用户不小心或无意中执行他们未打算进行的操作的可能性降到最低。 例如, SeRestorePrivilege 通常允许调用方绕过对文件的写入访问权限的常规检查。 例如,管理员可能不希望在复制文件时实际替代正常的安全检查。 但是,他们可能希望在使用备份/还原实用工具还原同一文件时执行此作。
对于文件系统,有许多特权通常用于修改系统的正常行为(尤其是安全检查)。 这些特权包括:
SeBackupPrivilege 允许文件内容检索,即使文件的安全描述符可能未授予此类访问权限。 启用了 SeBackupPrivilege 的调用方会掩盖对任何基于 ACL 的安全检查的需求。
SeRestorePrivilege 允许文件内容修改,即使文件的安全描述符可能未授予此类访问权限。 此函数还可用于更改所有者和保护。
SeChangeNotifyPrivilege 允许向右遍历。 此特权是 Windows 中的重要优化,因为它消除了对路径中每个目录执行安全检查的成本。
SeManageVolumePrivilege 允许特定的卷级管理操作,例如锁定卷、碎片整理、卷卸载,以及在 Windows XP 及其后版本上设置有效数据长度。 文件系统驱动程序主要基于 FSCTL 操作显式地强制执行此特定权限。 在这种情况下,文件系统会做出策略决策以强制实施此特权。 确定调用方是否持有此特权由安全参考监视器在正常特权检查中进行。
虽然存在许多其他特权,但它们通常对文件系统不透明,并且只有 安全参考监视器 (SRM)解释它们。
用于管理文件系统中特权的关键 Windows 例程包括:
SePrivilegeCheck 对特定一组必要的特权执行检查。
SeSinglePrivilegeCheck 对单个特定特权执行检查;它是 SePrivilegeCheck 的优化版本。
SeAccessCheck 对对象执行正常访问检查(通常是文件系统的文件对象)。
SeFreePrivileges 释放以前调用 SeAccessCheck 返回的特权块。
SeAppendPrivileges 向ACCESS_STATE结构添加了启用的权限。 通常,文件系统会在 IRP_MJ_CREATE 处理期间使用传递给它的 ACCESS_STATE。