![为什么安全 ACL 不自动刷新?](https://linux22.com/image/593593/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AE%89%E5%85%A8%20ACL%20%E4%B8%8D%E8%87%AA%E5%8A%A8%E5%88%B7%E6%96%B0%EF%BC%9F.png)
我有一台 Windows Server 2003 机器作为文件服务器。它托管着许多具有各种权限的共享文件夹。2003 机器不是域控制器/Active Directory 主机;Active Directory 在我们无法控制的服务器上运行,但我们认为它是 Server 2008 R2。
我发现通过远程桌面协议 (RDP) 登录到 Windows Server 2003 会导致 Windows 资源管理器中的安全权限过时,就像服务器正在缓存以前的权限一样。
重现步骤:
在 Windows 资源管理器中转到托管共享驱动器的磁盘,例如 Z:
选择共享的文件夹,右键单击并转到“属性”,然后单击“安全”选项卡。
观察那里的权限。
注销您的 RDP 会话,然后重新连接。
重复步骤 2 - 3。
注意权限不匹配。
我 100% 确信没有其他用户或管理员正在修改权限。共享文件夹的权限仅由登录到此框的一名管理员修改。在 Windows 资源管理器中按“F5”(刷新)不会刷新权限。这导致管理员认为文件夹上的权限与客户端看到的实际有效权限不同。
最令人困惑的是,连接到共享文件夹的客户端(最终用户)可以看到实际的权限。例如,如果用户实际上被拒绝访问某个文件夹,则允许他们访问的缓存权限可能会显示在服务器上,但客户端将无法访问该文件夹。但是,权限的更改不会显示在服务器上,直到管理员注销并重新登录。
有没有办法强制系统自动更新权限而不是缓存它们,或者手动执行此操作?这是服务包解决的错误,还是“设计使然”的功能?
如果用户被“缓存”,并且似乎被添加到文件夹的自定义权限列表中,则行为最奇怪:您可以更改用户的权限,例如从完全控制更改为拒绝所有权限并返回,而操作系统不会报告任何错误。但是进行这些更改并单击“应用”将没有明显效果到客户端,当您注销后重新登录服务器时,该用户根本不会出现在具有自定义权限的用户列表中!
答案1
嗯。假设,就像佐尔达什指出,您正在谈论 NTFS 文件系统 DAC 列表,那么问题几乎肯定与您的域控制器无关。
当您在文件系统上设置权限时,服务器会使用您授予权限的安全主体的 SID 标记文件系统对象。如果您使用的是本地用户帐户/本地组,则 SID 将特定于服务器。但是,在域模型中,您可能引用域全局组或域本地组,在这种情况下,基于域的安全主体的 SID 将标记到文件系统对象上。
另外,最佳实践仍然要求您应在文件系统上使用本地组,并在这些本地组中使用域全局/域本地组。理论上,这可以减少服务器到 DC/GC 的 SID 查找。
一旦应用了 SID 标签,即使 DC/GC 处于离线或无法访问状态,它仍将存在;您只会看到一个未解析的 SID。
因此,建议:
- 对磁盘执行 CHKDSK,以确保 NTFS 主文件表 (MFT) 正常
- 使用 ICACLS.EXE(不是 CACLS.EXE 或 XCACLS.EXE)检查权限 - 这三个都是 Microsoft 工具。再次进行测试,即:检查权限、获取 ICACLS 输出、设置权限、获取输出、注销、登录、检查权限并获取输出。在此处发布输出。
- 如果还没有,请考虑使用本地组模型。
我(我们?)等待更多信息...