经典案例 - 将便携式 USB HDD 移至新的 Win10 机器。其上的所有文件夹都标记为“归前一个用户所有”,因此它向我发出“您需要权限才能访问。单击继续以获得永久访问权限”的提示。是的,即使以管理员身份登录也是如此。
每次我移动装有该硬盘的机器时,这真的很烦人。修改安全权限是可行的(因为它授予访问权限),但每次修改都非常慢。
对硬盘的读/写访问由 Windows 的内核/文件系统强制执行。Linux 或任何其他操作系统都不会强制执行该操作,无论当前登录的帐户是什么,都会授予完全访问权限。因此,有没有办法在 Windows 中禁用此读/写强制执行,以便管理员(且只有管理员)可以忽略所有权并自由读取/修改任何用户/帐户/所有者的文件?这也将有助于修复所有权信息以任何方式损坏的文件。
答案1
Windows 确实有一个“安全绕过”特权(SeBackupPrivilege 又名“备份文件或文件夹”,用于不受限制的读取访问,SeRestorePrivilege 用于不受限制的写入),所有管理员实际上都默认情况下,但进程仍需要手动激活它;通常它是“按需”存在的。(例如,PowerShell 会在您要求它激活时使用 SeRestorePrivilege删除您无权访问某些内容。
读取/修改权限不是由文件所有权决定的,而是由文件 ACL(访问控制列表)决定的。虽然只有一个用户(或组)可以拥有一个文件,但您可以向文件的 ACL 添加任意数量的具有“完全控制”访问权限的用户(或组)。对于外部硬盘,最简单的方法是Everyone
向 ACL 添加单个条目,这样所有权实际上就无关紧要了。
(所有权主要是为了配额核算和紧急 ACL 重置访问;后者实际上是为什么“取得所有权”是重新获得访问权限的第一步——但这只是第一的步骤;第二步是使用所有者权限设置新的 ACL。)
将磁盘上所有内容的所有权分配给“管理员”组。(这不是必需的,但可以使事情变得更容易,因为该组在全部Windows 机器。
takeown /f Y:\ /s/A
将所有 ACL 重置为默认的“从父级继承”模式。
icacls Y:\ /重置/t
添加对 ACL 具有完全访问权限的“Everyone”。(与内置管理员或用户组一样,特殊的“Everyone”标识符在所有 Windows 系统上也具有相同的 SID。)
icacls Y:\ /grant "所有人:(OI)(CI)(F)"
指定
(OI)(CI)
将把条目设置为“可继承”,因此它将自动传播到其下的所有文件和子文件夹Y:\
。可选地,指定
:r
in/grant:r
将删除所有其他显式条目(将整个 ACL 替换为“Everyone”)。通常/grant
仅添加到列表中。删除其他现在多余的 ACL 条目(管理员、系统等)。
新创建的文件将再次拥有当前用户作为其所有者,但这不是问题 - 文件将继承授予Everyone
完全访问权限的 ACL。