isp*_*iro 5 .net c# windows-services appdata
我想从Windows服务写入一些文件,并能够从其他应用程序读取它们。但我不希望其他应用程序能够写入此文件夹。
是否有一个标准的文件夹(例如有App Data用于存储不必从其他应用程序读取的数据)?
重要的是要考虑到 Windows 根据用户(或其所属组)和文件系统中的 ACL 条目来设置读写文件的权限。因此,“阻止其他应用程序写入此文件夹”实际上是“在普通用户下启动的其他应用程序”。
您可以将该服务放置在以下目录中
C:\Program Files,
例如
C:\Program Files\CompanyName\ServiceInstallDir
如果服务在本地 SYSTEM 帐户下运行,则它具有写入此文件夹的权限。而普通用户只有读取权限。
但请注意,这并不是万无一失的,您永远不知道具有管理员权限的人是否会在安装后更改您的文件夹的权限。
只有当我能够控制系统和其他应用程序时(例如,在具有 Active Directory 的企业基础设施和域中的所有计算机中),我才会这样做。
另请注意,“其他应用程序”也可能是在 SYSTEM 下运行的 Windows 服务或具有本地管理员权限的其他用户,因此它们也可以写入您的文件夹。
另一种解决方案是在专用用户帐户(本地或 Active Directory)下运行该服务,并设置文件夹的权限,以便只有该用户具有修改权限。
请注意,您必须授予此用户帐户“作为服务登录”的权限(通过本地安全策略或 AD GPO)。
但即使在这种情况下:如果其他某个(管理员)用户具有恢复权限,他也可以绕过 ACL。
另一个重要注意事项:
在SYSTEM下运行该服务意味着该服务具有很高的特权,这可能存在安全风险。
eryksun 的重要说明(请参阅评论)谢谢!
另请参阅https://blogs.technet.microsoft.com/voy/2007/03/22/per-service-sid/
这样您就可以阻止其他服务写入您的文件。