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