【发布时间】:2018-01-20 08:46:36
【问题描述】:
我有一个 Windows 服务,它代表使用单独的前端 UI 配置服务的登录用户执行一些与网络相关的操作。 UI 和 Windows 服务使用套接字接口进行通信,即 UI 向服务发送命令,服务向 UI 发送数据进行处理/显示。这种设置已经为我们工作了多年。
最近,安全策略要求我们的 Windows 服务不能再以LocalSystem 运行,而必须以LocalService 运行。在大多数情况下,这是一个平淡无奇的变化。不过……
Windows 服务功能的一部分是在用户指定的位置创建一个日志文件并将数据写入该日志文件,直到用户告诉它停止。如果用户在 C:\ 级别指定目录(例如,C:\MyLogs),则 Windows 服务可以正常工作。但是,如果用户在她的 MyDocuments 文件夹中指定了一个目录(例如,C:\Users\<username>\Documents\MyLogs),Windows 服务将失败并显示 System.UnauthorizedAccessException 表示
对
的访问被拒绝。
我花了一段时间,但我终于明白,作为 LocalService 运行的 Windows 服务无权访问已登录用户的配置文件文件夹,例如 MyDocuments、AppData 等。
有解决办法吗?
我想到了几个选项,但由于我不精通 Windows 安全性,我的 Google 忍者技能非常薄弱,因为我不确定要搜索什么。这是我的几个具体问题。我将不胜感激社区可以提供的任何指导。
- Windows 服务有没有办法模拟登录的用户帐户,以便它可以创建目录和文件,就好像用户直接进行操作一样?
- 是否可以向用户的配置文件文件夹添加权限,以便 LocalService 帐户可以在那里创建目录和文件?
【问题讨论】:
标签: c# .net windows security windows-services