Spe*_*cer 9 command-line windows-server file-permissions
我想讲一个故事,所以如果你想了解问题的实质,请跳到水平线。
原标题:来自死域的僵尸不会给我我的文件!
我在恢复一些旧存档磁带时遇到了问题,其中文件和文件夹由不再存在的域中不再存在的用户拥有。
这些磁带包含在 Windows 2000、2003、2008、2012 R2(甚至可能有一些 NT4)中从本地 NTFS 卷和 CIFS NAS 存储阵列备份的文件,我正在 Windows Server 2022 中恢复它们。
在过去,保留文件所有权很有用,因为这是许多类型文件的唯一作者记录。
但在 2000 年代初的一段时期内,离开公司的员工的 Active Directory 帐户似乎被删除而不是被禁用。当然,他们拥有这些磁带上的文件和文件夹。
很久以后,域进行了重命名,由于用户已被删除,因此无法将其 SID 添加到 SID 历史记录中,无论如何,其范围都是未知的。
不管怎样,今天我正在从这些旧磁带中恢复文件,Windows 正在恢复去年的旧 DACL 和所有者。大错误:我不仅无法以管理员身份访问这些文件和文件夹,而且无法强制继承这些文件和文件夹的权限,甚至无法使用 icacls 和提升的命令提示符重置所有者。
icacls <folder> /setowner Administrators /t /c
icacls <folder> /reset /t /c
Run Code Online (Sandbox Code Playgroud)
我还有一个使用 xcacls.vbs 的脚本,可以让我重置文件夹的所有者。
这对于不属于僵尸的文件有效,但 Windows 拒绝访问很多很多文件。
但是,我能够在文件资源管理器 GUI 中重置所有者,并将新所有者推送到下面的所有内容。“替换所有子对象权限等..”然后替换权限。然后我就可以删除整个内容。
现在,我可以重新开始,而无需恢复 DACL 或所有者 - 但随后,原始的非僵尸作者将不得不被遗忘。(备份软件与此无关)。
icacls
并且xcacls
不会清理所有者和 DACL,即使有高程也是如此。但我可以在文件资源管理器中集体完成它!有没有办法使用命令提示符更有选择性地执行此操作?
更新:好的,所以 @u1686_grawity 的答案让我走上了正确的道路。我能够使用 takeown 删除文件并重新开始。
问题是,takeown /r
它是一个生硬的工具,并且只拥有所有文件和文件夹的所有权。我可以直接从磁带恢复文件,而无需恢复其原始 ACL 和所有者。目标是通过重置 ACL 保留原始文件所有权(尽可能)。
对于更具选择性的内容,我将输出重定向icacls /reset /t /c /q
到文本文件,然后使用文本编辑器将每个access denied
错误消息转换为takeown /F
命令并将其保存为.bat
文件。运行批处理文件并重复icacls /reset
给我下一个级别的一组新文件。重复 10 次后,修复了 267,678 个文件中的约 40,000 个文件。这留下了 41 个文件拒绝收回其所有权。36 个位于 2 个目录中,必须手动获取其所有权。
最后 5 个文件的名称中包含非 ASCII 字符。仅当我将其保存为 DOS 编码时,批处理文件才会运行,UTF8 不起作用。
我能够手动获取最后 5 个文件的所有权。
一盘磁带花了大约 12 个小时。我不确定果汁是否值得榨。
use*_*686 13
使用的问题icacls /setowner
是,获得所有权并不隐式授予您除“Write ACL”\xe2\x80\x93 之外的任何其他权利,特别是它实际上并不授予您列出目录内容的权利,甚至不授予您读取其目录的权限。前交叉韧带。您需要取得顶级目录的所有权,然后重置其 DACL,然后取得第一级子目录的所有权,重置其 DACL,依此类推。
用于takeown /a /r /d y
执行此操作;每次发现无法列出的目录时,它都会自动重置 DACL。
或者,从 PSGallery 安装“PSPrivilege”PowerShell 模块并使用它来激活SeBackupPrivilege
和SeRestorePrivilege
。这些广泛地允许您绕过大多数 DACL 限制,包括能够编写 DACL(实际上 icacls 和 Explorer 使用它来能够设置任意所有者),但默认情况下它们对管理员处于“保留但不活动”状态。一旦这两个权限处于活动状态,icacls 应该会更有效。
归档时间: |
|
查看次数: |
1745 次 |
最近记录: |