小编Eri*_*ikE的帖子

访问受保护网络资源的 IIS 策略

问题:用户连接到机器上的服务,例如 IIS 网站或 SQL Server 数据库。站点或数据库需要访问网络资源,例如文件共享(最常见)或不同服务器上的数据库。权限被拒绝。

这是因为运行该服务的用户首先没有网络权限,或者如果有,则它无权访问远程资源。

我一遍又一遍地遇到这个问题,并且厌倦了没有一个真正可靠的方法来处理它。

以下是我所知道的一些解决方法:

  • 以被授予高权限的自定义域用户身份运行 IIS

    如果一次只授予一个文件共享权限,那么每次我想从新共享中读取时,我都必须要求网络管理员为我添加它。最终,随着许多网站从许多共享中读取,它会变得非常复杂。如果只是为用户打开了访问我们域中的任何文件共享的权限,那么这似乎是一个不必要的安全表面区域。

    这也适用于在 IIS 上运行的所有站点,而不仅仅是需要访问的选定站点或虚拟目录,这是进一步的表面积问题。

  • 做同样的事情,但使用应用程序池或单独设置凭据

    不必以特定用户身份运行整个 IIS 实例:可以将每个站点、应用程序和文件夹设置为在特定应用程序池或手动选择的一组凭据下运行。这解决了表面积问题的一小部分,但并没有真正解决有关管理权限粒度和跨许多资源这样做的其他问题。

  • 仍然使用 IUSR 帐户但给它网络权限并在远程资源上设置相同的用户名(不是域用户,本地用户)

    这也有它的问题。例如,我正在使用一个文件共享,我拥有共享的完全权限,但我无法登录计算机。所以我必须找到合适的管理员并让他为我做这件事。任何时候必须更改,这是对管理员的另一个请求。

  • 允许 IIS 用户以匿名方式连接,但将用于匿名访问的帐户设置为高权限帐户

    这甚至比给予 IIS IUSR 完全权限更糟糕,因为这意味着我的网站首先不能使用任何类型的安全性。

  • 使用 Kerberos 连接,然后委托

    这在原则上听起来不错,但有各种各样的问题。首先,如果您使用的虚拟网站的域名不是基本机器名称(我们经常这样做),那么您必须使用 Microsoft 的 Web 服务器上的服务主体名称SetSPN 实用程序。它很复杂,而且显然容易出错。此外,您必须要求您的网络/域管理员更改 Web 服务器和域帐户的安全策略,以便他们“受信任进行委派”。如果您没有完全正确地完成所有事情,那么突然之间您想要的 Kerberos 身份验证是 NTLM,并且您只能模拟而不是委托,因此无法以用户身份通过​​网络进行访问。还,

  • 创建获取网站资源的服务或 COM+ 应用程序

    服务和 COM+ 包使用它们自己的一组凭据运行。作为高权限用户运行是可以的,因为他们可以确保自己的安全并拒绝不合法的请求,将控制权交给应用程序开发人员而不是网络管理员。问题: 我正在使用一个 COM+ 程序包,它在 Windows Server 2000 上正是这样做的,以将高度敏感的图像传送到安全的 Web 应用程序。我尝试将网站移至 Windows Server 2003,但突然被拒绝实例化 COM+ 对象的权限,很可能是注册表权限。我摸索了很多,并没有解决问题,部分原因是我不愿意给 IUSR 帐户完整的注册表权限。这似乎与仅以高权限用户身份运行 IIS 一样糟糕。

    注意:这实际上非常简单。在您选择的编程语言中,您创建一个带有函数的类,该函数返回您想要的对象的实例(例如 ADODB.Connection),并构建一个 dll,您将其注册为 COM+ 对象。在您的 Web 服务器端代码中,您创建类的实例并使用该函数,并且由于它在不同的安全上下文下运行,因此对网络资源的调用有效。

  • 将驱动器号映射到共享

    这理论上可行,但在我看来,这并不是一个好的长期策略。尽管可以使用特定凭据创建映射,并且这可以由网络管理员以外的其他人完成,但这也意味着共享驱动器过多(小粒度)或对整个文件授予过多权限服务器(大粒度)。另外,我还没有弄清楚如何映射驱动器以便 IUSR …

iis authentication network-share delegation impersonation

5
推荐指数
1
解决办法
2787
查看次数