更新:我最初发布“in”目录在 C: 上。它实际上在 E: 上。D: 和 E: 是 RAID 上的卷。我不希望这会有所作为,但如果我知道发生了什么,我就不必问这个问题了。
我遇到了必须由 Web 服务和本地用户控制的目录的 ACL 权限问题。这是我第一个涉及目录安全和 ACL 的项目,所以我担心我认为这一切都是错误的。我愿意接受提供点修复的答案,以及那些建议对我的安全模型进行彻底检查的答案。
我正在开发一个 Windows Server 2012 R2 Web 服务,该服务从多个用户(节点)捕获数据,然后对其进行处理。我有每个节点目录(例如 E:\in\node1、E:\in\node2 等)来保存传入的数据,然后我使用一个 C# 控制台应用程序作为非管理本地用户(LocalUser ) 以将文件移动到具有更深目录结构的更大卷中,该目录结构反映了控制台应用程序完成的分类。
最初,我将作为 LocalUser 为每个节点创建目录,但为了便于管理,我创建了一个 Web 服务(POST 处理程序)来创建节点目录,因为每个节点都被配置和配置。
我现在有一个文件系统,其中一些目录由 LocalUser 创建,一些由 DefaultAppPool 通过 Web 服务创建。两种类型的目录都按预期接收文件。当我以 LocalUser 身份运行控制台应用程序时,LocalUser 创建的目录一切正常,但是当我尝试将 File.Move() 从 Web 创建的节点目录转移到 Web 创建的分类目录时,我得到了 UnauthorizedAccessException。当我查看 ACL 时,我发现问题在于 Creator(以及具有完全控制权的帐户)与运行控制台应用程序的帐户不同。此外,ACL 页面说 E:\in\node2 继承自 E: ,而不是 E:\in 。
Web 配置的全部目的是使系统自动化,所以我不想触摸所有新目录来添加 LocalUser(或包含 LocalUser 的组)。我还希望系统在其他经过身份验证的用户尝试运行控制台应用程序时工作(例如,从未在任何地方创建任何目录的 LocalUser2)。
似乎我必须解决此问题的两个机会是 1)当 Web 服务创建目录时,或 2)当 LocalUser 运行脚本时。不幸的是,我担心这两个帐户(DefaultAppPool、LocalUser)都没有权限授予(在情况 1)或夺取(在情况 2)有问题的目录的完全控制权。
最终,我计划从 Web 服务运行控制台应用程序,这将使一切都作为 DefaultAppPool 运行,但在开发过程中,作为手动维护操作,我希望能够以 LocalUser 或按需运行控制台应用程序本地用户 2。我在想有可能在运行控制台应用程序时制作某种模拟 DefaultAppPool 的“垫片”,但据我所知,进行这种模拟的唯一方法是让网络服务来做。
总之,我怎样才能拥有一个系统,其中 Web 服务创建目录,然后由特定组中的用户控制?