如何从 IIS 应用程序访问网络文件

文章翻译 文章翻译
文章编号: 207671 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

当您从 Internet Server API (ISAPI) 扩展、Active Server Pages (ASP) 页或“通用网关接口”(CGI) 应用程序访问的文件所在的计算机不是 Internet Information Server (IIS) 服务器时,可能会遇到一些问题,本文提供与这些问题相关的信息。本文列出涉及到的一些问题和可能的解决方法。

虽然本文主要针对访问网络共享位置上的文件而写,但相同的概念也适用于命名管道连接。命名管道通常用于 SQL Server 连接和远程过程调用 (RPC) 及“组件对象模型”(COM) 通信。尤其是,如果通过配置为使用“Microsoft Windows NT 集成安全性” 的网络连接到 SQL Server,则会因本文所述的问题而无法连接。RPC 和 COM 也可能使用其他具有类似网络身份验证方案的通信机制。因此,本文中的概念适用于可以从您的 IIS 应用程序中使用的各种网络通信机制。


身份验证和模拟类型

当 IIS 为 HTTP 请求提供服务时,IIS 将执行模拟,以便对处理请求的资源访问权限进行适当的限制。模拟的安全上下文基于为请求执行的身份验证类型。IIS 4.0 提供五种不同的身份验证类型:
身份验证类型				模拟类型
  
匿名访问(无身份验证)			网络
自动密码同步为
ON(ON 为默认值)
 
匿名访问(无身份验证)			IIS 明文
自动密码同步为 OFF         

基本身份验证				IIS 明文

NT 质询/响应身份验证			网络

客户端 SSL 证书映射			交互式
				

令牌类型

是否允许访问网络资源取决于在什么类型的模拟令牌下处理请求。
  • “不”允许网络令牌访问网络资源。(之所以将它命名为网络令牌,原因是此类令牌过去通常是当用户在整个网络中经过身份验证时由服务器创建的。允许服务器使用网络令牌充当网络客户端并访问其他服务器,这种做法称为“委派”且被视为潜在的安全漏洞。)
  • 过去,当在计算机上对本地用户进行身份验证时会使用交互式令牌。允许交互式令牌访问整个网络的资源。
  • 批处理令牌旨在为批处理作业的运行提供安全上下文。批处理令牌具有网络访问权限。
IIS 有一个明文登录的概念。之所以称其为明文登录,原因是 IIS 具有以明文方式访问用户名和密码的权限。通过置配置元数据库中的 LogonMethod 属性,您可以控制明文登录创建的令牌类型:“网络”令牌、“交互式”令牌或“批处理”令牌。默认情况下,明文登录收到“交互式”令牌,可以访问网络资源。您可以在服务器、站点、虚拟目录、目录或文件级别配置 LogonMethod

匿名访问模拟配置为请求的匿名用户的帐户。默认情况下,IIS 有一个称为 IUSR_<machinename> 的匿名用户帐户,在处理不需要身份验证的请求时模拟该帐户。默认情况下,IIS 4.0 具有一项称为“启用自动密码同步”的可配置功能,它使用安全次权限创建令牌。通过这种方式创建的令牌是网络令牌,它们“不能”访问网络中的其他计算机。如果禁用“自动密码同步”,IIS 以与前面所述的明文登录相同的方式创建令牌。“自动密码同步”只用于 IIS 所在计算机上的帐户。因此,如果将匿名帐户更改为域帐户,则无法使用“自动密码同步”,而会收到明文登录。但这种情况有一个例外,那就是在“主域控制器”上安装 IIS 时。在此情况下,域帐户位于本地计算机上。您可以在服务器、站点、虚拟目录、目录或文件级别配置匿名帐户和“自动密码同步”选项。

访问网络资源的第一步是必须具有正确的令牌类型。您还必须模拟对整个网络的资源有访问权限的帐户。默认情况下,IIS 为匿名请求创建的 IUSR_<machinename> 帐户只在本地计算机上存在。即使通过禁用“自动密码同步”获得了可以访问网络资源的“交互式”令牌,IUSR_<machinename> 帐户通常也不能访问大多数网络资源,因为其他计算机不识别该帐户。如果要用匿名请求访问网络资源,则必须将默认帐户替换为可由网络中的所有计算机识别的域帐户。如果在“域控制器”上安装 IIS,IUSR_<machinename> 帐户就是域帐户,您不需要执行额外操作,网络中的其他计算机一定识别该帐户。


避免问题

从 IIS 应用程序访问网络资源时若要避免发生问题,请尝试以下方法:
  • 将文件保留在本地计算机上。
  • 某些网络通信方法不要求安全检查。使用 Windows 套接字就是一个示例。
  • 您可以提供对计算机网络资源的直接访问,方法是将虚拟目录配置为:
    “另一计算机上的共享位置”。
    对共享网络资源的计算机的所有访问都在连接为.. 对话框下所指定用户的上下文中执行。不论为虚拟目录配置什么类型的身份验证,都会发生同样的情况。通过使用此选项,用户可以从访问 IIS 计算机的浏览器访问网络共享位置的所有文件。
  • 使用基本身份验证或匿名身份验证的同时禁用“自动密码同步”。

    默认情况下,Internet Information Server 为基本身份验证所做的模拟提供可以访问网络资源的令牌(这一点与“Windows NT 质询/响应”不同,它提供不能访问网络资源的令牌)。对于匿名身份验证,该令牌只有在禁用“自动密码同步”的情况下才能访问网络资源。第一次安装 Internet Information Server 时默认启用“自动密码同步”。在此默认配置下,匿名用户令牌不能访问网络资源。 有关 IIS 中“自动密码同步”的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    190005 用于在匿名访问时提示用户输入密码的站点设置
    259353 设置密码同步后必须手动输入密码
  • 将匿名帐户配置为域帐户。

    这样可以防止匿名请求对网络资源进行潜在访问。要防止所有匿名请求访问网络资源,您只能让匿名帐户成为专门需要访问的虚拟目录上的域帐户。
  • 将匿名帐户的用户名和密码配置为与共享网络资源的计算机上所用的用户名和密码相同,并禁用“自动密码同步”。

    如果这样做,必须确保两个密码完全一致。只有在出于某些原因而无法采用前面所述的“将匿名帐户配置为域帐户”方法时,才能使用此方法。
  • 当用网络令牌处理请求时,可使用 NullSessionShares 和 NullSessionPipes 允许对特定网络共享位置或命名管道的访问。

    如果您有一个网络令牌并且尝试与网络资源建立连接,那么操作系统尝试将该连接建立为无需身份验证的连接(称为“空会话”)。您必须在共享网络资源的计算机(而非 IIS 计算机)上进行该注册表设置。如果尝试用非网络令牌访问 NullSessionShare 或 NullSessionPipe,则会使用典型的 Microsoft Windows 身份验证,对资源的访问将基于模拟用户的帐户所具备的用户权限。
  • 您可以通过执行自己的模拟来创建具有网络访问权限的“线程”令牌。

    LogonUser 函数和 ImpersonateLoggedOnUser 函数可以用来模拟另一不同的帐户。该方法要求您为代码提供另一帐户的“明文”用户名和密码。LogonUser 还要求调用 LogonUser 的帐户在“用户管理器”中具有“作为操作系统的一部分”的特权。默认情况下,IIS 在处理 HTTP 请求时模拟的大多数用户都没有此用户权限。不过,对于“进程内应用程序”,您可以通过多种方式来使当前的安全上下文更改为 LocalSystem 帐户,该帐户具有“作为操作系统的一部分”管理凭据。对于在进程内运行的 ISAPI DLL,将 IIS 创建的安全上下文更改为 LocalSystem 帐户的最佳方式是调用 RevertToSelf 函数。如果在“进程外”运行 IIS 应用程序,该机制默认不起作用,因为进程在 IWAM_<machinename> 帐户下运行,而不在本地系统帐户下运行。默认情况下,IWAM_<machinename>“没有”“作为操作系统的一部分”管理凭据。
  • 在 Microsoft Transaction Server (MTS) 服务器包或 COM+ Server 应用程序中添加从 ASP 页调用的组件,然后指定某个用户作为包的标识。

    注意:该组件在 IIS 外部单独的 .exe 文件中运行。
  • 使用基本/明文身份验证时,建议使用 SSL 加密数据,因为该身份验证方式极易通过网络跟踪获得凭据。 有关如何安装 SSL 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    228991 如何在 Internet Information Server 4.0 中创建和安装 SSL 证书
注意:切记,如果将 LogonMethod 元数据库属性设置为“2”(表示使用网络登录创建模拟令牌),则在禁用密码同步且使用基本身份验证(明文登录)对请求进行身份验证的情况下,可以防止匿名请求进行网络访问。有了此设置,请求避免网络令牌限制的唯一方式就是连接到 NullSessionShares 或 NullSessionPipes。

不要使用已映射到网络共享位置的驱动器号。不仅只能从 26 个驱动器号中进行选择,而且如果尝试使用在另一不同的安全上下文中映射的驱动器号,也会发生问题。您必须始终使用“通用命名约定”(UNC) 名称访问资源。格式必须类似如下所示:
\\MyServer\filesharename\directoryname\filename
有关使用 UNC 的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
280383 在您使用 UNC 共享、用户名和密码凭据时的 IIS 安全建议
本文中的信息只适用于 Internet Information Server 4.0。在 Internet Information Server 5.0(随 Windows 2000 提供)中,一些新的身份验证类型和功能有了很大的更改。虽然本文中的大多数概念仍然适用于 IIS 5.0,但本文中的某些身份验证方案生成的模拟令牌类型的相关详细信息只适用于 IIS 4.0。

319067 如何在 IIS 中运行不在系统帐户上下文中的应用程序
如果无法确定您的 IIS 服务器上目前由何种类型的登录来处理请求,则可打开“登录”和“注销”的审核。执行下列步骤:
  1. 依次单击开始设置控制面板管理工具本地安全策略
  2. 打开“本地安全策略”后,在左侧的“树视图”窗格中依次单击安全设置本地策略审核策略
  3. 双击审核登录事件,然后单击成功和失败。“事件日志”条目将添加到“安全”日志下。查看“登录类型”下的事件详细信息即可确定登录类型:
2=交互式
3=网络
4=批处理
5=服务

参考

有关网络安全的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
124184 作为系统帐户运行的服务无法访问网络
180362 INFO:服务和重定向的驱动器
158229 INFO:IIS 应用程序的安全后果
319067 如何在 IIS 中运行不在系统帐户上下文中的应用程序
280383 在您使用 UNC 共享、用户名和密码凭据时的 IIS 安全建议
有关 IIS 中“自动密码同步”的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
190005 用于在匿名访问时提示用户输入密码的站点设置
259353 设置密码同步后必须手动输入密码

属性

文章编号: 207671 - 最后修改: 2006年1月23日 - 修订: 5.0
这篇文章中的信息适用于:
  • Microsoft Internet Information Server 3.0
  • Microsoft Internet Information Server 4.0
  • Microsoft Internet Server Application Programming Interface 4.0
  • Microsoft Internet Information Services 5.0
关键字:?
kbhowtomaster kbhttp KB207671
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com