gpt4 book ai didi

windows - Windows 在哪里存储 ACL,ACL 是否会跟随一个文件从一台机器到另一台机器?

转载 作者:可可西里 更新时间:2023-11-01 13:03:52 27 4
gpt4 key购买 nike

我们的应用程序使用一个组件,该组件需要我们的可执行文件所在目录中的许可证文件,它恰好是一个 .NET WinForms 应用程序,但我认为这对这个问题无关紧要。当安装在一些 XP Pro 机器上时(目前只有几百台机器中的三台),该组件会抛出许可证异常。所以我重新生成了许可证文件并将其发送给组件供应商 (EMC Captiva),供应商声称错误是由于“用户”组对该文件没有读取权限。遇到错误的用户恰好是本地管理员,但这不是重点,因为我仍然对更一般的问题感到好奇。

所以我的问题是,ACL 是否存储在一个文件中,以便它们在文件的整个生命周期中都遵循该文件,尤其是当许可证文件是在我的开发机器(机器 1)上生成,存储在 Subversion(机器 2)中, check out 时TeamCity(机器 3)的源代码控制,由 InstallShield(机器 4)打包到安装程序中,最后部署到管理员安装的客户机器(机器 5)?在我的开发机器(机器 1)上生成文件,通过他们的支持站点(机器 2)将其上传到组件供应商,然后支持人员将其下载到他们的机器(机器 3)进行检查之后呢?

我不确定(这就是我在这里问的原因),但我假设每台 Windows 机器都将 ACL 存储在由 NTFS 管理的某个中央目录/列表/表中,而不是存储在文件中。当原始文件从一台机器复制到另一台机器、存储在 Subversion 中、打包成 MSI 等时,原始文件的 ACL 会发生什么变化?有人可以给我一些好的引用资料吗?

最佳答案

ACL 存储在执行所有后台管道的 NTFS 分区的一部分 - MFT(主文件表)中。

ACL 不跟随文件,因为它不是文件的一部分(就像文件名一样是元数据)。文件可以跨越分区类型边界 (NTFS->FAT),ACL 不能。

现在,如果您在一个 NTFS 分区内移动一个文件,您可能会觉得 ACL 实际上跟随该文件移动。这是因为在移动过程中,实际上只更改了 MFT 中的文件名。其他一切都保持不变。

如果你复制一个文件或将它移动到另一个分区或计算机(实际上是复制+删除操作),复制的文件将默认继承它的新容器的权限(准确地说只是可继承的) .

但是,有些工具能够在复制操作后保留文件的 ACL(只需在复制操作后在目标文件上重新创建它),甚至可以跨越分区或计算机边界。 xcopy 可以做到这一点,等等。

但由于 ACL 可以包含“域拥有”的 SID,因此 ACL 条目对于不属于同一域的目标计算机可能实际上没有意义(例如,当将 NTFS 格式的 USB 驱动器带回家时) .在这种情况下,ACL 条目将无效。

其他 SID 是“众所周知的”,例如“SYSTEM”SID。这些实际上将被跨域识别。

关于windows - Windows 在哪里存储 ACL,ACL 是否会跟随一个文件从一台机器到另一台机器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/839625/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com