管理文件系统中的权限
特权 是操作系统用来控制特定操作的机制。 如果满足以下两个条件,则每个特权都有与之关联的特定操作,该操作的调用方可以执行这些操作:
- 权限必须由调用方持有。
- 还必须启用特权。
这些要求的原则称为 最低特权。 最低特权要求在使用特权之前启用特权,而不是假定权限。 此要求将用户无意中执行他们不打算执行的操作的可能性降到最低。 例如, 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。