我想从Windows服务中编写一些文件,并能够从其他应用程序中读取它们。但我不希望其他应用能够写入此文件夹。
是否有标准文件夹(就像App Data一样,用于存储不必从其他应用程序读取的数据)?
答案 0 :(得分:2)
重要的是要考虑Windows根据用户(或他是其成员的组)和文件系统中的ACL条目设置读取和写入文件的权限。所以"阻止其他应用写入此文件夹"真的是"其他应用程序是在普通用户下启动的。
您可以将服务放在
下的目录中 C:\Program Files
,
e.g。
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/
因此,您可以阻止其他服务写入您的文件。