Eri*_*ikE 5 iis authentication network-share delegation impersonation
问题:用户连接到机器上的服务,例如 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 获取驱动器。映射驱动器是针对当前用户的,我不知道以它的身份登录并创建映射的 IUSR 帐户密码。
将本地资源移动到 Web 服务器/数据库
有时我已经这样做了,尤其是使用 Access 数据库。数据库是否必须存在于文件共享中?有时,将数据库移动到 Web 服务器或 SQL 数据库服务器是最简单的(这样链接的服务器就可以工作)。但我也不认为这是一个很好的全方位解决方案。当资源是服务而不是文件时,它将不起作用。
将服务移动到最终的 Web 服务器/数据库
我想我可以在我的 SQL Server 数据库上运行一个 Web 服务器,这样网站就可以使用模拟连接到它并让我开心。但是我们真的想要在我们的数据库服务器上随机添加额外的 Web 服务器,这样才有可能吗?不。
IIS 中的虚拟目录
我知道虚拟目录可以帮助使远程资源看起来好像它们是本地的,并且这支持为每个虚拟目录使用自定义凭据。我还没有想出这将如何解决系统调用的问题。用户可以直接访问文件共享,但这对经典 ASP 代码访问资源没有帮助。我可以使用 URL 而不是文件路径来读取网页中的远程数据文件,但这不会帮助我连接到 Access 数据库、SQL 服务器数据库或任何其他使用连接的资源库,而不仅仅是读取所有字节并使用它们。
我希望可以创建某种“服务隧道”。想一想 VPN 如何让远程资源看起来像是本地的。有了更丰富的别名机制,也许是基于代码的,为什么在定义的安全上下文下甚至不能发生数据库连接?为什么不用一个特殊的 Windows 组件,让您可以为每个用户指定哪些资源可用以及哪些备用凭据用于连接?文件共享、数据库、网站,应有尽有。我想我几乎是在谈论一个专门的本地代理服务器。
无论如何,这就是我的清单。如果我想到更多,我可能会更新它。有人对我有什么想法吗?
我今天当前的问题是,我再次需要一个网站来连接到文件共享上的 Access 数据库。又来了...
归档时间: |
|
查看次数: |
2787 次 |
最近记录: |