我已经编写了一个在 Windows(XP、7、2008 等)上运行的 Web 应用程序,而不是使用 MS 工具(python/django/nginx,尽管这无关紧要)。为了运行该应用程序,我创建了一个可以正常安装和运行的 Windows 服务。
但是,该应用程序将在安全性很重要的环境中运行。默认情况下,该服务会自行安装在该Local System
帐户下运行,据我所知,该帐户可以完全控制计算机。听起来不是个好主意。
我也看到过Network Service
使用,但描述倾向于谈论域等。此应用程序使用网络并在 Windows 上运行,但即使根本不谈论“Windows”也不会太多。它是独立的,并将其数据保存在又名“通用应用程序数据文件夹”...\All Users\Application Data
中。
我应该使用Network Service
吗?我应该创建自己的帐户吗?在 unix 上我会,但不确定 Windows 上的“陷阱”。使用现有帐户会更容易。
由于您来自 Unix 背景,因此您应该习惯于在非特权上下文中运行。许多 Windows 开发人员没有那种背景,因此,我们在 Windows 生态系统中有很多服务需要过多的特权。我很高兴听到您质疑是否需要以“LocalSystem”运行。
作为一个注重安全的 Windows 系统管理员,我更希望我的所有服务都在非特权用户帐户下运行,或者在运行该服务的服务器计算机本地,或者如果该服务绝对需要通过 Microsoft 网络访问其他计算机上的资源,则域帐户。
我个人不喜欢任何“本地服务”、“网络服务”等上下文,因为它们不是我可以专门控制其参数的用户帐户。值得注意的是,“本地服务”总是使用空会话(匿名凭证)访问远程机器,并且普通用户帐户无法复制这种行为。尽管如此,与“本地服务”相比,我更喜欢明确指定的非特权用户,但“本地服务”也是一个非常合理的选择。如果您将代码编写为作为“本地服务”工作,它也应该作为非特权用户正常工作,除非您在“本地服务”上写入一些明确的依赖项。