Nov
30
wordpress 官方已经内置了 IIS7 URL Rewrite 的支持,但对于中文用户来说,官方内置的伪静态规则不能完好的支持中文tag的问题。虽然可以更改系统文件来解决,但比较麻烦,而且不方便,所以一直没介绍过。现在帖出一个自用的的规则,可以解决wordpress的中文tag的问题。
将下列代码加入到web目录下的web.config文件的<system.webServer>之后即可。
<rewrite>
<rules>
<clear />
<rule name="wordpress2.7" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
<rule name="chinese tag" stopProcessing="true">
<match url="/tag/(.*)" />
<conditions logicalGrouping="MatchAll" />
<action type="Rewrite" url="/index\.php\?tag={R:1}" />
</rule>
</rules>
</rewrite>
将下列代码加入到web目录下的web.config文件的<system.webServer>之后即可。
<rewrite>
<rules>
<clear />
<rule name="wordpress2.7" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php" />
</rule>
<rule name="chinese tag" stopProcessing="true">
<match url="/tag/(.*)" />
<conditions logicalGrouping="MatchAll" />
<action type="Rewrite" url="/index\.php\?tag={R:1}" />
</rule>
</rules>
</rewrite>
Apr
29
ASP 中,我们习惯使用 Response.Redirdect 来实现页面的跳转,但是这种跳转方式的状态是 302 的,属于临时跳转,对于搜索引擎来说,是一种不友好的重定向方式。
ASP 3.0 中,有了另一种方式,即 Response.Transfer 。关于这个,可以查询相关的信息。
我们这里要讨论的是 301 跳转,例如下面的代码:
<%@ Language="VBScript" %>
<%
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.purewhite.cn"
%>
这种方式,对于搜索引擎来说,是永久性的,跳转后的页面的内容可以被采用。由此,想到一些人问到的,如何实现同一个空间绑定多个域名。其实,只要针对输入的域名进行识别,然后结合 301 跳转来选择目标就能很好实现。假设有域名 www.yunna.net 和 www.purewhite.cn ,分别针对同一个空间中的 yunna_net 和 purewhite_cn 两个目录,那么怎么通过两个域名来自动确定访问哪个目录呢?请看下面的代码:
<%
Dim strHost = LCase(Request.ServerVariables("HTTP_HOST"))
Response.Status = "301 Moved Permanently"
Select Case strHost
Case "www.xxxx.net"
Response.AddHeader "Location",
"http://www.xxxx.net/xxxx_net/"
Case "www.xxxx.cn"
Response.AddHeader "Location",
"http://www.xxxx.cn/xxxx_cn/"
Case Else
Response.AddHeader "Location",
"http://www.xxxx.cn/xxxx_cn/"
End Select
%>
ASP 3.0 中,有了另一种方式,即 Response.Transfer 。关于这个,可以查询相关的信息。
我们这里要讨论的是 301 跳转,例如下面的代码:
<%@ Language="VBScript" %>
<%
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.purewhite.cn"
%>
这种方式,对于搜索引擎来说,是永久性的,跳转后的页面的内容可以被采用。由此,想到一些人问到的,如何实现同一个空间绑定多个域名。其实,只要针对输入的域名进行识别,然后结合 301 跳转来选择目标就能很好实现。假设有域名 www.yunna.net 和 www.purewhite.cn ,分别针对同一个空间中的 yunna_net 和 purewhite_cn 两个目录,那么怎么通过两个域名来自动确定访问哪个目录呢?请看下面的代码:
<%
Dim strHost = LCase(Request.ServerVariables("HTTP_HOST"))
Response.Status = "301 Moved Permanently"
Select Case strHost
Case "www.xxxx.net"
Response.AddHeader "Location",
"http://www.xxxx.net/xxxx_net/"
Case "www.xxxx.cn"
Response.AddHeader "Location",
"http://www.xxxx.cn/xxxx_cn/"
Case Else
Response.AddHeader "Location",
"http://www.xxxx.cn/xxxx_cn/"
End Select
%>
Mar
14
来源于:
http://www.microsoft.com/china/technet/security/sgk/sec_IIS_6_0.mspx
本页内容
简介
准备工作
减少 Web 服务器的攻击面
配置帐户
配置文件和目录的安全
保护网站和虚拟目录
在 Web 服务器上配置安全套接字层
相关信息
简介
Web 服务器通常是各种安全攻击的目标。其中一些攻击非常严重,足以对企业资产、工作效率和客户关系造成相当的破坏—所有攻击都会带来不便和麻烦。Web 服务器的安全是企业成功的关键。
本文档说明如何开始保护 Web 服务器的过程。此 Web 服务器在 Microsoft® Windows Server™ 2003 Standard Edition 操作系统上运行 Internet Information Services (IIS) 6.0。首先,本节描述影响 Web 服务器安全的一些最常见威胁。然后,本文档提供说明性指导,使您的 Web 服务器更安全地防御这些攻击。
通过对 IIS 早期版本做以下更改,IIS 6.0 以更加主动的姿态来防御恶意用户和攻击者:
• 安装 Windows Server 2003 Standard Edition 时,默认情况下没有安装 IIS 6.0。
• 初次安装 IIS 6.0 时,Web 服务器仅服务于或显示静态网页 (HTML),这降低了服务于动态网页或可执行文件、内容而带来的风险。
• 万维网发布服务(WWW 服务)是 IIS 6.0 初次安装时在默认情况下支持的唯一服务。您可以在需要时启用所需要的特定服务。
• IIS 6.0 初次安装时,默认情况下禁用 ASP 和 ASP.NET。
• 对于其他保护,IIS 6.0 中所有默认的安全配置设置都符合或超过由 IIS Lockdown Tool 提供的安全配置设置。IIS Lockdown Tool 在 IIS 的早期版本上运行,旨在通过禁用不必要的特性来减少 Web 服务器的攻击面。有关 IIS Lockdown Tool 的详细信息,请参阅 Security Guidance Kit 中的“确保 Internet 信息服务 5.0 和 5.1 的安全”。
由于 IIS 6.0 的默认设置禁用了 Web 服务通常使用的许多功能,因此,本文档说明如何在降低服务器暴露给潜在攻击者程度的同时配置 Web 服务器的其他功能。
本文档就增强 Web 服务器的安全提供以下指导:
• 减少 Web 服务器的攻击面,或者降低服务器暴露给潜在攻击者的程度。
• 配置匿名访问的用户和组帐户
• 保护文件和目录不接受未经授权的访问
• 保护网站和虚拟目录不接受未经授权的访问
• 配置 Web 服务器上安全套接字层 (SSL)
要点:本文档包括的所有逐步说明都是使用“开始”菜单形成的,此菜单在安装操作系统时默认显示。如果修改过“开始”菜单,则这些步骤可能稍有不同。
在您完成本文档中的步骤之后,Web 服务器将能够服务于以 .asp 页面形式提供的动态内容,而且仍然能够对以下类型的攻击提供强有力的保护,这些攻击有时威胁到面向 Internet 的服务器:
• 配置文件攻击,此攻击搜集网站的有关信息;可通过禁止不需要的端口和禁用不需要的协议来减少这种攻击。
• 拒绝服务攻击,此攻击使 Web 服务器充满各种请求;可通过应用安全修补程序和软件更新来最大限度地减少这种攻击。
• 没有正确权限的用户未经授权的访问;通常通过配置 Web 和 NTFS 权限来阻止这种访问。
• 恶意代码在 Web 服务器上任意执行;可通过防止对系统工具和命令的访问来最大限度地减少这种攻击。
• 特权提升,使恶意用户能够使用具有较高特权的帐户来运行程序;可通过使用最低特权的服务和用户帐户来最大限度地减少这种攻击。
• 来自病毒、蠕虫和特洛伊木马的破坏;可通过禁用不需要的功能、使用最低特权的帐户以及及时应用最新安全修补程序来遏制这种攻击。
注意:由于保护 Web 服务器是一个复杂而长期的过程,完全的安全性很难保证。
返回页首
准备工作
本节说明本文档中描述的 Web 服务器的系统要求和特征。
系统要求
本文档中用作示例的 Web 服务器有以下系统要求:
• 此服务器运行 Windows Server 2003 Standard Edition。
• 操作系统安装在 NTFS 分区上。有关 NTFS 的信息,请在 Windows Server 2003 中的帮助和支持中心搜索“NTFS”。
• Windows Server 2003 所有必需的修补程序和更新都已经应用到此服务器。为了验证 Web 服务器上是否安装了最新的安全更新,请转到位于 Microsoft 网站 http://go.microsoft.com/fwlink/?LinkId=22630 上的 Windows Update 网页,利用 Windows Update 来扫描服务器是否有可用的更新。
• Windows Server 2003 安全保护已经应用到服务器。
本文档提供介绍性信息,帮助您设置最初的几个步骤,以配置一台更安全的 Web 服务器。不过,为了使 Web 服务器尽可能安全,您必须了解服务器上运行的应用程序的操作。本文档不包括应用程序特定安全配置的有关信息。
Web 服务器特征
本文档中用作示例的 Web 服务器有以下特征要求:
• Web 服务器正在工作进程隔离模式下运行 IIS 6.0 。
• Web 服务器托管一个面向 Internet 的网站。
• Web 服务器配有防火墙,仅支持 HTTP 端口 80 和 HTTPS 端口 443 上的流量。
• 此 Web 服务器是专用 Web 服务器,这种服务器只能用作 Web 服务器而不能用于其他目的,例如文件服务器、打印服务器或运行 Microsoft SQL Server® 的数据库服务器。
• 允许匿名访问网站。
• Web 服务器服务于 HTML 和 ASP 网页。
• 没有在 Web 服务器上配置 Microsoft 的 FrontPage® 2002 Server Extensions。
• Web 服务器上的应用程序不需要数据库连接。
• Web 服务器不支持 FTP(文件上传和下载)、SMTP(电子邮件)或 NNTP(新闻组)协议。
• Web 服务器不使用 Internet Security and Acceleration Server。
• 管理员必须本地登录以管理 Web 服务器。
返回页首
减少 Web 服务器的攻击面
通过减少 Web 服务器的攻击面,或者降低服务器暴露给潜在攻击者的程度,来开始保护 Web 服务器的过程。例如,仅启用 Web 服务器正常运行所必需的组件、服务和端口。
禁用 SMB 和 NetBIOS
主机枚举攻击扫描网络,以便确定潜在目标的 IP 地址。要降低主机枚举成功攻击 Web 服务器上面向 Internet 的端口的可能性,应禁用除传输控制协议 (TCP) 以外的所有网络协议。Web 服务器中的面向 Internet 的网络适配器上不需要服务器消息块 (SMB) 和 NetBIOS。
本节提供以下逐步说明,以降低 Web 服务器的攻击面:
• 禁用面向 Internet 连接上的 SMB
• 禁用基于 TCP/IP 的 NetBIOS
注意:禁用 SMB 和 NetBIOS 之后,此服务器不能用作文件服务器或打印服务器,不可以浏览网络,而且不能远程管理此 Web 服务器。如果您的服务器是需要管理员本地登录的专用 Web 服务器,这些限制则不会影响服务器的运行。
SMB 使用下列端口:
• TCP 端口 139
• TCP 和 UDP 端口 445 (SMB Direct Host)
NetBIOS 使用下列端口:
• TCP 和 UDP 端口 137(NetBIOS 命名服务)
• TCP 和 UDP 端口 138(NetBIOS 数据报服务)
• TCP 和 UDP 端口 139(NetBIOS 会话服务)
仅禁用 NetBIOS 将不会防止 SMB 通信,因为如果标准 NetBIOS 端口不可用,SMB 则使用 TCP 端口 445(也称为 SMB Direct Host)。您必须分别禁用 NetBIOS 和 SMB。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑、系统工具和设备管理器。
• 禁用面向 Internet 连接上的 SMB
1.
单击“开始”,单击“设置”,再单击“控制面板”,然后双击“网络连接”。
2.
右键单击您的面向 Internet 的连接,然后单击“属性”。
3.
清除“Microsoft 网络客户端”复选框。
4.
清除“Microsoft 网络的文件和打印机共享”复选框,然后单击“确定”。
• 禁用基于 TCP/IP 的 NetBIOS
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“系统工具”,然后选择“设备管理器”。
3.
右键单击“设备管理器”,单击“查看”,然后单击“显示隐藏的设备”。
4.
双击“非即插即用驱动程序”。
5.
右键单击“NetBios over Tcpip”,单击“停用”,然后单击“是”。
注意:本文档中的屏幕快照反映的是测试环境,其信息可能与您的屏幕所显示的信息有所不同。
上述过程不仅禁用 TCP 端口 445 和 UDP 端口 445 上的 SMB 直接宿主侦听者,而且禁用 Nbt.sys 驱动程序,并需要重新启动系统。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证 SMB 是否已禁用
1.
单击“开始”,单击“设置”,然后单击“网络和拨号连接”。
2.
右键单击您的面向 Internet 的连接,然后单击“属性”。
3.
验证是否清除了“Microsoft 网络客户端”和“Microsoft 网络的文件和打印机共享”复选框,然后单击“确定”。
• 验证 NetBIOS 是否已禁用
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“系统工具”,然后选择“设备管理器”。
3.
右键单击“设备管理器”,单击“查看”,然后单击“显示隐藏的设备”。
4.
双击“非即插即用驱动程序”,然后单击“NetBios over Tcpip”。
上下文菜单中现在出现“启用”选择,这表示 NetBIOS over TCP/IP 目前已禁用。
5.
单击“确定”关闭“设备管理器”。
只选择基本的 IIS 组件和服务
IIS 6.0 除了包括 WWW 服务之外,还包括一些子组件和服务,例如 FTP 服务和 SMTP 服务。为了最大限度地降低针对特定服务和子组件的攻击风险,建议您只选择网站和 Web 应用程序正确运行所必需的服务和子组件。
下表显示用作本文档示例的 Web 服务器上 IIS 子组件和服务在“添加或删除程序”中的推荐设置。
IIS 子组件和服务的推荐设置
子组件或服务 默认设置 Web 服务器设置
后台智能传输服务 (BITS) 服务器扩展
禁用
不更改
公用文件
启用
不更改
FTP 服务
禁用
不更改
FrontPage 2002 Server Extensions
禁用
不更改
Internet 信息服务管理器
启用
不更改
Internet 打印
禁用
不更改
NNTP 服务
禁用
不更改
SMTP 服务
启用
禁用
万维网服务
启用
不更改
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:添加或删除程序。
• 配置 IIS 组件和服务
1.
单击“开始”,单击“控制面板”,然后单击“添加或删除程序”。
2.
单击“添加/删除 Windows 组件”。
3.
在“Windows 组件向导”页面中的“组件”下,单击“应用程序服务器”,然后单击“详细信息”。
4.
单击“Internet 信息服务 (IIS)”,然后单击“详细信息”。
5.
参考上表,然后通过选择或清除相应组件或服务的复选框,来选择或取消相应的 IIS 组件和服务。
6.
按照“Windows 组件向导”中的以下说明来完成此向导。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否选择了 IIS 组件和服务
• 单击“开始”,单击“控制面板”,然后单击“管理工具”。
在“管理工具”菜单中出现“Internet 信息服务 (IIS) 管理器”。
只启用基本的 Web 服务扩展
服务于动态内容的 Web 服务器需要 Web 服务扩展。每种动态内容都响应特定的 Web 服务扩展。由于安全原因,IIS 6.0 允许您启用和禁用单独的 Web 服务扩展,因此,只启用您的内容所需要的扩展。
警告:不要启用所有的 Web 服务扩展。尽管启用所有的 Web 服务扩展可确保最大限度地兼容现有的网站和应用程序,但却大幅增加了 Web 服务器的攻击面。您可能需要分别测试您的网站和应用程序,以确保只启用必需的 Web 服务和扩展。
假设配置 Web 服务器来服务于作为默认网页的 Default.asp 文件。尽管配置了默认网页,但您必须启用 Active Server Pages Web 服务扩展才能查看 .asp 网页。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 启用 Active Server Pages Web 服务扩展
1.
单击“开始”,单击“控制面板”,单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
双击“本地计算机”,然后单击“Web 服务扩展”。
3.
单击“Active Server Pages”,然后单击“允许”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否启用了 Active Server Pages Web 服务扩展
1.
打开“文本编辑器”,键入文本,然后将文件作为 Default.asp 保存到 C:\inetpub\wwwroot 目录。
2.
在 Internet Explorer 地址栏中,键入以下 URL,然后按 Enter 键: http://localhost。
浏览器中出现 Default.asp 文件。
返回页首
配置帐户
建议您删除未使用的帐户,因为攻击者可能发现这些帐户,然后利用这些帐户来获取您服务器上的数据和应用程序的访问权。始终使用强密码,因为弱密码增加了成功进行强力攻击或字典攻击(即攻击者竭尽全力地猜密码)的可能性。使用以最低特权运行的帐户。否则,攻击者可以通过使用以高级特权运行的帐户来获取未经授权的资源的访问权。
本节对配置帐户提供以下逐步说明:
• 禁用未使用的帐户
• 使用应用程序池来隔离应用程序
禁用未使用的帐户
未使用的帐户及其特权可以被攻击者用来获取服务器的访问权。您应该定期审核服务器上的本地帐户,并禁用未使用的任何帐户。在生产服务器上禁用这些帐户之前,先在测试服务器上禁用帐户,以确保禁用帐户不会对应用程序的操作方式带来不利影响。如果在测试服务器上禁用帐户没有出现任何问题,则在生产服务器上禁用帐户。
注意:如果您选择删除而不是禁用未使用的帐户,则一定要知道您不能恢复已删除的帐户,因而不能删除管理员帐户和来宾帐户。而且,一定要在生产服务器上删除帐户之前,先在测试服务器上删除此帐户。
本节对删除或禁用未使用的帐户提供以下逐步说明:
• 禁用来宾帐户
• 重命名管理员帐户
• 重命名 IUSR_ComputerName 帐户
禁用来宾帐户
采用匿名连接来访问 Web 服务器时,使用来宾帐户。在默认安装 Windows Server 2003 时,禁用来宾帐户。 要限制对服务器的匿名连接,请确保禁用来宾帐户。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:计算机管理
• 禁用来宾帐户
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“本地用户和组”,然后单击“用户”文件夹。来宾帐户应该以红色的 X 图标显示,以指示此帐户已禁用。如果来宾帐户未禁用,则继续步骤 3 来禁用此帐户。
3.
右键单击“Guest”(来宾)帐户,然后单击“属性”。
4.
在“常规”选项卡上,选中“帐户已停用”复选框,然后单击“确定”。
来宾帐户现在应该以红色 X 图标显示。
重命名管理员帐户
默认的本地管理员帐户因其在计算机上的更高特权而成为恶意用户的目标。要增强安全性,请重命名默认的管理员帐户并分配一个强密码。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑。
• 重命名默认的管理员帐户并分配一个强密码
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“本地用户和组”,然后单击“用户”文件夹。
3.
右键单击“Administrator”(管理员)帐户,然后单击“重命名”。
4.
在框中键入名称,然后按 Enter 键。
5.
在桌面上,按 Ctrl+Alt+Del,然后单击“更改密码”。
6.
在“用户名”框中键入管理员帐户的新名称。
7.
在“旧密码”框中键入当前密码,在“新密码”框中键入新密码,在“确认新密码”框中重新键入新密码,然后单击“确定”。
警告:不要使用上下文菜单中的“设置密码”菜单项来更改密码,除非您忘记了密码并且没有可用的密码重置磁盘。使用这种方法来更改管理员密码可能导致受此密码保护的信息永久丢失。
重命名 IUSR 帐户
默认的匿名 Internet 用户帐户 IUSR_ComputerName 是在 IIS 安装期间创建的。ComputerName 的值是安装 IIS 时服务器的 NetBIOS 名称。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑。
• 重命名 IUSR 帐户
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“本地用户和组”,然后单击“用户”文件夹。
3.
右键单击 IUSR_ComputerName 帐户,然后单击“重命名”。
4.
键入新帐户名称,然后按 Enter 键。
• 在 IIS 元数据库中更改 IUSR 帐户的值
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击“本地计算机”,然后单击“属性”。
3.
选中“允许直接编辑配置数据库”复选框,然后单击“确定”。
4.
浏览至 MetaBase.xml 文件的位置,默认情况下为 C:\Windows\system32\inetsrv。
5.
右键单击 MetaBase.xml 文件,然后单击“编辑”。
6.
搜索“AnonymousUserName”属性,然后键入 IUSR 帐户的新名称。
7.
在“文件”菜单上,单击“退出”,然后单击“是”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证帐户是否已禁用
1.
按 Ctrl+Alt+Del,然后单击“注销”以注销 Web 服务器。
2.
在“登录到 Windows”对话框中,在“用户名”框中键入已禁用帐户的名称,键入已禁用帐户的密码,然后单击“确定”。
出现以下消息:
您的帐户已被停用。请向系统管理员咨询。
• 验证帐户是否已重命名
1.
按 Ctrl+Alt+Del,然后单击“注销”以注销 Web 服务器。
2.
在“登录到 Windows”对话框中,在“用户名”框中键入已重命名帐户以前的名称,键入重命名帐户的密码,然后单击“确定”。
出现以下消息:
系统无法让您登录。请确定您的用户名及域无误,然后再次输入密码。密码的字母必须使用正确的大小写。
3.
单击“确定”,然后在“用户名”框中键入重命名帐户的新名称。
4.
键入重命名帐户的密码,然后单击“确定”。
您应该能够用重命名的帐户登录到计算机。
使用应用程序池来隔离应用程序
使用 IIS 6.0,可以将应用程序隔离到应用程序池。应用程序池是包含一个或多个 URL 的一个组,一个工作进程或者一组工作进程对应用程序池提供服务。因为每个应用程序都独立于其他应用程序运行,因此,使用应用程序池可以提高 Web 服务器的可靠性和安全性。
在 Windows 操作系统上运行进程的每个应用程序都有一个进程标识,以确定此进程如何访问系统资源。每个应用程序池也有一个进程标识,此标识是一个以应用程序需要的最低权限运行的帐户。可以使用此进程标识来允许匿名访问您的网站或应用程序。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑。
• 创建应用程序池
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
双击本地计算机,右键单击“应用程序池”,单击“新建”,然后单击“应用程序池”。
3.
在“应用程序池 ID”框中,为应用程序池键入一个新 ID(例如,ContosoAppPool)。
4.
在“应用程序池设置”下,单击“Use default settings for the new application pool”(使用新应用程序池的默认设置),然后单击“确定”。
• 将网站或应用程序分配到应用程序池
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要分配到应用程序池的网站或应用程序,然后单击“属性”。
3.
根据您选择的应用程序类型,单击“主目录”、“虚拟目录”或“目录”选项卡。
4.
如果您将目录或虚拟目录分配到应用程序池,则验证“应用程序名”框是否包含正确的网站或应用程序名称。
-或者-
如果在“应用程序名”框中没有名称,则单击“创建”,然后键入网站或应用程序的名称。
5.
在“应用程序池”列表框中,单击您想要分配网站或应用程序的应用程序池的名称,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否创建了应用程序池
1.
使用管理员帐户登录到 Web 服务器。
2.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
3.
双击本地计算机,双击“应用程序池”,然后验证是否在应用程序池节点下出现您所创建的应用程序池。
4.
右键单击您所创建的程序池,然后单击“属性”。
5.
单击“标识”选项卡,验证此应用程序池是否设置为称作“网络服务”的预定义的安全帐户,然后单击“确定”。
• 验证网站或应用程序是否分配到特定的应用程序池
1.
使用管理员帐户登录到 Web 服务器。
2.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
3.
双击本地计算机,双击“网站”,右键单击您想要验证应用程序池设置的网站,然后单击“属性”。
4.
根据您选择的应用程序类型,单击“主目录”、“虚拟目录”或“目录”选项卡。
5.
在“应用程序池”列表框中,验证是否列出您想要将网站分配到的应用程序池的名称,然后单击“取消”。
返回页首
配置文件和目录的安全
使用强访问控制来帮助保护敏感的文件和目录。在多数情况下,允许对特定帐户的访问比拒绝对特定帐户的访问更加有效。如有可能,请将访问设置在目录级。当文件添加到文件夹时,它们继承文件夹的权限,因此您不需要采取进一步的措施。
本节对配置文件和目录提供以下逐步说明:
• 重定位和设置 IIS 日志文件的权限
• 配置 IIS 元数据库权限
• 禁用 FileSystemObject 组件
重新定位和设置 IIS 日志文件的权限
为了增强 IIS 日志文件的安全,您应该将文件重新定位到非系统驱动器,此驱动器格式化为使用 NTFS 文件系统。此位置应该与网站内容的位置不同。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑和 Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 将 IIS 日志文件的位置移动到非系统分区
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至您想要重新定位 IIS 日志文件的位置。
3.
右键单击您想要重新定位 IIS 日志文件的上一级目录,单击“新建”,然后单击“文件夹”。
4.
键入文件夹的名称,例如 ContosoIISLogs,然后按 Enter 键。
5.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
6.
右键单击网站,然后单击“属性”。
7.
单击“网站”选项卡,然后单击“启用日志记录”框架中的“属性”。
8.
在“常规属性”选项卡中,单击“浏览”,然后导航到您刚才创建的文件夹以存储 IIS 日志文件。
9.
单击“确定”三次。
注意:如果您在原来的位置 Windows\System32\Logfiles 上有 IIS 日志文件,则必须将这些文件手动移动到新位置。IIS 不为您移动这些文件。
• 设置 IIS 日志文件的 ACL
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至日志文件所在的文件夹。
3.
右键单击此文件夹,单击“属性”,然后单击“安全”选项卡。
4.
在顶部窗格中,单击“Administrators”(管理员),确保底部窗格中的权限设置为“完全控制”。
5.
在顶部窗格中,单击“System”(系统),确保底部窗格中的权限设置为“完全控制”,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否移动了日志文件并设置了权限
1.
单击“开始”,单击“搜索”,然后单击“文件或文件夹”。
2.
在“要搜索的文件名”框中键入部分或完整的文件名(例如 LogFiles),在“搜索范围”框中选择一个位置,然后单击“立即搜索”。
搜索返回日志文件的新位置。
3.
按 Ctrl+Alt+Del,然后单击“注销”。
4.
使用没有日志文件访问权的帐户来登录到 Web 服务器。
5.
单击“开始”,右键单击“我的电脑”,单击“资源管理器”,然后浏览至 LogFiles 目录。
6.
右键单击 LogFiles 目录,然后单击“打开”。
出现以下消息:
• 拒绝访问。
配置 IIS 元数据库权限
IIS 元数据库是包含大部分 IIS 配置信息的 XML 文件。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑和 MetaBase.xml 文件。
• 限制 MetaBase.xml 文件的访问权
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至 Windows\System32\Inetsrv\MetaBase.xml 文件,右键单击此文件,然后单击“属性”。
3.
单击“安全”选项卡,确认只有 Administrators 组的成员和 LocalSystem 帐户拥有对元数据库的完全控制访问权,删除所有其他文件权限,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证对 MetaBase.xml 文件受限制的访问
1.
按 Ctrl+Alt+Del,然后单击“注销”。
2.
使用没有 MetaBase.xml 文件访问权的帐户来登录到 Web 服务器。
3.
单击“开始”,右键单击“我的电脑”,单击“资源管理器”,然后浏览至 MetaBase.xml 的位置。
4.
右键单击 MetaBase.xml 文件,然后单击“打开”。
出现以下消息:
• 拒绝访问。
禁用 FileSystemObject 组件
ASP、Windows 脚本主机和其他编写脚本的应用程序使用 FileSystemObject (FSO) 组件来创建、删除、获取信息以及操纵驱动器、文件夹和文件。可考虑禁用 FSO 组件,但要注意,这也将删除字典对象。另外,验证是否没有其他程序需要这个组件。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:命令提示符。
• 禁用 FileSystemObject 组件
1.
单击“开始”,单击“运行”,在“打开”框中键入 cmd,然后单击“确定”。
2.
切换到 C:\Windows\system32 目录。
3.
在命令提示符处,键入 regsvr32 scrrun.dll /u ,然后按 Enter 键。
出现以下消息:
DllUnregisterServer in scrrun.dll succeeded。
4.
单击“确定”。
5.
在命令提示符处,键入 exit 关闭命令提示窗口。
返回页首
保护网站和虚拟目录
将 Web 根目录和虚拟目录重新定位到非系统分区,以帮助防御目录遍历攻击。这些攻击允许攻击者执行操作系统程序和工具。由于这种攻击不能遍历所有驱动器,因此,将网站内容重新定位到另一个驱动器可以增强对这些攻击的防护。
本节对保护网站和虚拟目录提供以下逐步说明:
• 将网站内容移动到非系统驱动器
• 配置网站权限
将网站内容移动到非系统驱动器
不要使用默认的 \Inetpub\Wwwroot 目录作为网站内容的位置。例如,如果系统安装在 C: 驱动器,则将内容目录移动到 D: 驱动器,以减轻目录遍历攻击(这种攻击试图浏览 Web 服务器的目录结构)带来的危险。一定要验证是否所有的虚拟目录都指向新驱动器。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc) 和命令提示。
• 将网站内容移动到非系统驱动器
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要移动其内容的网站,然后单击“停止”。
3.
单击“开始”,单击“运行”,在“打开”框中键入 cmd,然后单击“确定”。
4.
在命令提示符处键入以下命令:
xcopy c:\inetpub\wwwroot\SiteName Drive:\wwwroot\SiteName /s /i /o
在上述命令中,
• SiteName 由您的网站名代替。
• Drive 由新驱动器名代替,例如 D。
5.
返回到 Internet 信息服务 (IIS) 管理器管理单元。
6.
右键单击网站,然后单击“属性”。
7.
根据您选择的应用程序类型,单击“主目录”、“虚拟目录”或“目录”选项卡,在“本地路径”框中键入新目录位置,然后单击“确定”。
-或者-
浏览至您刚才复制了文件的目录位置,然后单击“确定”。
8.
右键单击网站,然后单击“开始”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证网站内容是否已经移动到非系统驱动器
1.
单击“开始”,单击“搜索”,然后单击“文件或文件夹”。
2.
在“要搜索的文件名”框中键入部分或完整的文件名,在“搜索范围”中选择位置,然后单击“立即搜索”。
搜索结果列出您移动到新位置的文件以及原有位置的文件。
• 删除系统驱动器上的网站内容
• 导航到 C:\Inetpub\Wwwroot\SiteName 目录,然后删除移动到非系统驱动器的文件。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证网站内容是否已经从系统驱动器上删除
1.
单击“开始”,单击“搜索”,然后单击“文件或文件夹”。
2.
在“要搜索的文件名”文本框中键入部分或完整的文件名,在“搜索范围”中选择一个位置,然后单击“立即搜索”。
搜索结果只列出您移动到新位置的文件。
配置网站权限
可以为您的 Web 服务器配置特定站点、目录和文件的访问权。这些权限可以应用于所有用户,无论用户有何特定的访问权。
配置文件系统目录的权限
IIS 6.0 依靠 NTFS 权限来帮助保护单个文件和目录不会受到未经授权的访问。网站权限应用于试图访问网站的任何人,与此不同的是,您可以使用 NTFS 权限来定义哪些用户可以访问您的内容,以及如何允许这些用户操作这些内容。为了增强安全性,同时使用网站权限和 NTFS 权限。
访问控制列表 (ACL) 指示哪些用户或组有访问或修改特定文件的权限。不是在每个文件上设置 ACL,而是为每种文件类型创建新目录,在每个目录上设置 ACL,然后允许文件从它们所在的目录中继承这些权限。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑和 Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 将网站内容移动到单独的文件夹
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至包含网站内容的文件,然后单击网站内容的最上层的文件夹。
3.
在“文件”菜单中,单击“新建”,然后单击“文件夹”,以便在网站的内容目录中创建一个新文件夹。
4.
为文件夹命名,然后按 Enter 键。
5.
按 Ctrl 键,然后选择您想要保护的每个网页。
6.
右键单击这些网页,然后单击“复制”。
7.
右键单击新文件夹,然后单击“粘贴”。
注意: 如果您已经创建了到这些网页的链接,则必须更新这些链接以便反映站点内容的新位置。
• 设置 Web 内容的权限
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要配置的网站的文件夹、网站、目录、虚拟目录或文件,然后单击“属性”。
3.
根据您想要授权或拒绝访问的类型,选择或清除下列任何复选框(如果可用):
• 脚本源文件访问。用户可以访问源文件。如果选择“读”,则可以读源文件;如果选择“写”,则可以写源文件。脚本源访问包括脚本的源代码。如果“读”或“写”均未选择,则此选项不可用。
• 读(默认情况下选择)。用户可以查看目录或文件的内容和属性。
• 写。用户可以更改目录或文件的内容和属性。
• 目录浏览。用户可以查看文件列表和集合。
• 日志访问。对网站的每次访问创建日志项。
• 检索资源。允许检索服务检索此资源。这允许用户搜索资源。
4.
在“执行权限”列表框中,选择脚本执行的相应级别:
• 无。不在服务器上运行脚本和可执行文件(例如,文件类型为 .exe 的文件)。
• 仅脚本。只在服务器上运行脚本。
• 脚本和可执行文件。在服务器运行脚本和可执行文件。
5.
单击“确定”。如果目录的子节点配置了不同的网站权限,则出现“继承覆盖”框。
6.
如果出现“继承覆盖”框,在“子节点”列表中选择您想要应用目录的 Web 权限的子节点。
-或者-
单击“全选”来设置属性,以便将 Web 权限应用到所有子节点。
7.
如果您不只看到一个“继承覆盖”对话框,则从“子节点”列表中选择子节点,或者单击“全选”,然后单击“确定”,以便将此属性的 Web 权限应用到子节点。
如果一个子节点属于您已经更改了网站权限的目录,此节点还为特定选项设置了网站权限,则子节点的权限将覆盖您为目录设置的权限。如果您想要将目录级的 Web 权限应用到子节点,则必须在“继承覆盖”框中选择这些子节点。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否拒绝网站内容目录的写权限
1.
按 Ctrl+Alt+Del,然后单击“注销”。
2.
使用在物理或虚拟目录上具有“读”和“执行”权限的帐户来登录到 Web 服务器。
3.
单击“开始”,右键单击“我的电脑”,单击“资源管理器”,浏览至一个文件位置,您想要将此位置的文件复制到物理或虚拟目录。
4.
右键单击此文件,然后单击“复制”。
5.
浏览至物理或虚拟目录的位置,然后右键单击此目录。“粘贴”选项在上下文菜单上不可用,这意味着您没有此目录的写权限。
返回页首
在 Web 服务器上配置安全套接字层
在 Web 服务器上配置安全套接字层 (SSL) 安全功能,以便验证内容的完整性,验证用户身份并对网络传输加密。SSL 安全依靠服务器证书,此证书允许用户在传输个人信息(例如信用卡帐号)之前验证 Web 网站的身份。每个网站只能有一个服务器证书。
获取并安装服务器证书
证书由称作证书颁发机构 (CA) 的非 Microsoft 组织颁发。服务器证书通常与 Web 服务器有关,尤其与配置了 SSL 的网站有关。您必须生成证书请求,将此请求发送到 CA,然后在接收到 CA 的证书之后安装此证书。
证书依靠一对加密密钥(一个公钥和一个私钥)来确保安全。当您生成服务器证书请求时,您实际上正在生成私钥。从 CA 接收到的服务器证书包含公钥。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc) 和 Web 服务器证书向导。
• 生成服务器证书请求
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“服务和应用程序”部分, 然后双击“Internet 信息服务”。
3.
右键单击您想要安装服务器证书的网站,然后单击“属性”。
4.
单击“目录安全”选项卡。在“安全通信”部分中,单击“服务器证书”,以启动“Web 服务器证书向导”,然后单击“下一步”。
5.
单击“创建一个新证书”,然后单击“下一步”。
6.
单击“立即准备请求,但稍后发送”,然后单击“下一步”。
7.
在“名称”框中,键入容易记住的名称。(默认的名称是您正在生成证书请求的网站名,例如 http://www.contoso.com。)
8.
指定位长度,然后单击“下一步”。
加密密钥的位长度确定了加密的强度。大多数非 Microsoft CA 都希望您最少选择 1024 位。
9.
在“组织”部分,键入您的组织和组织单位信息。确保此信息的准确性,并且“组织”字段中不包含逗号,然后单击“下一步”。
10.
在“站点的公用名称”部分,键入含域名的宿主计算机的名称,然后单击“下一步”。
11.
键入您的地理信息,然后单击“下一步”。
12.
将此文件保存为 .txt 文件。(默认的文件名和位置是 C:\certreq.txt。)
以下示例显示证书请求文件的特征。
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDATCCAmoCAQAwbDEOMAwGA1UEAxMFcGxhbjgxDDAKBgNVBAsTA1BTUzESMBAG
A1UEChMJTWljcm9zb2Z0MRIwEAYDVQQHEwlDaGFybG90dGUxFzAVBgNVBAgTDk5v
cnRoIENhcm9saW5hMQswCQYDVQQGEwJVUzCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAtW1koGfdt+EoJbKdxUZ+5vE7TF1ZuT+xaK9jEWHESfw11zoRKrHzHN0f
IASnwg3vZ0ACteQy5SiWmFaJeJ4k7YaKUb6chZXG3GqL4YiSKFaLpJX+YRiKMtmI
JzFzict5GVVGHsa1lY0BDYDO2XOAlstGlHCtENHOKpzdYdANRg0CAwEAAaCCAVMw
GgYKKwYBBAGCNw0CAzEMFgo1LjAuMjE5NS4yMDUGCisGAQQBgjcCAQ4xJzAlMA4G
A1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDATCB/QYKKwYBBAGCNw0C
AjGB7jCB6wIBAR5aAE0AaQBjAHIAbwBzAG8AZgB0ACAAUgBTAEEAIABTAEMAaABh
AG4AbgBlAGwAIABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBp
AGQAZQByA4GJAGKa0jzBn8fkxScrWsdnU2eUJOMUK5Ms87Q+fjP1/pWN3PJnH7x8
MBc5isFCjww6YnIjD8c3OfYfjkmWc048ZuGoH7ZoD6YNfv/SfAvQmr90eGmKOFFi
TD+hl1hM08gu2oxFU7mCvfTQ/2IbXP7KYFGEqaJ6wn0Z5yLOByPqblQZAAAAAAAA
AAAwDQYJKoZIhvcNAQEFBQADgYEAhpzNy+aMNHAmGUXQT6PKxWpaxDSjf4nBmo7o
MhfC7CIvR0McCQ+CBwuLzD+UJxl+kjgb+qwcOUkGX2PCZ7tOWzcXWNmn/4YHQl0M
GEXu0w67sVc2R9DlsHDNzeXLIOmjUl935qy1uoIR4V5C48YNsF4ejlgjeCFsbCoj
Jb9/2RM=
-----END NEW CERTIFICATE REQUEST-----
13.
确认请求的详细信息,单击“下一步”,然后单击“完成”。
• 提交服务器证书请求
1.
联系 CA,查找提交请求的要求。
2.
将上述过程中创建的 .txt 文件的内容复制成 CA 要求的请求格式。
3.
将请求发送给您的 CA。
接收到 CA 的证书后,准备在您的 Web 服务器上安装此证书。
• 安装服务器证书
1.
将证书 (.cer) 文件复制到 C:\Windows\System32\CertLog 文件夹。
2.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
3.
右键单击您想要安装服务器证书的网站,然后单击“属性”。
4.
单击“目录安全”选项卡。在“安全通信”部分中,单击“服务器证书”,以启动“Web 服务器证书向导”,然后单击“下一步”。
5.
单击“处理挂起的请求并安装证书”,然后单击“下一步”。
6.
浏览至您接收到的 CA 证书。单击“下一步”两次,然后单击“完成”。
验证新的设置
验证正确设置是否已经应用于您的本地计算机。
• 验证是否在 Web 服务器上安装了证书
1.
单击“开始”,单击“控制面板”,单击“管理工具”,然后单击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要查看证书的网站,然后单击“属性”。
3.
在“目录安全”选项卡上的“安全通信”区域内,单击“查看证书”,查看证书之后,单击“确定”两次。
在 Web 服务器上强制和启用 SSL 连接
安装服务器证书之后,必须在 Web 服务器上强制 SSL 连接。然后,必须启用 SSL 连接。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 强制 SSL 连接
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要强制 SSL 连接的网站,然后单击“属性”。
3.
单击“目录安全”选项卡。在“安全通信”部分,单击“编辑”。
4.
单击“要求安全通道 (SSL)”,选择加密长度,然后单击“确定”。
注意:如果您指定 128 位加密,使用 40 位或 56 位长度浏览的客户端计算机不能与您的站点通信,除非将其浏览器升级到支持 128 位加密的版本。
• 在 Web 服务器上启用 SSL 连接
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要启用 SSL 连接的网站,然后单击“属性”。
3.
单击“网站”选项卡。在“网站标识”部分,验证“SSL 端口”是否填充了数值 443。
4.
然后单击“高级”。通常出现两个对话框,在“此网站的多个标识”框中列出此网站 IP 地址和端口。在“此网站的多个 SSL 标识”字段下,如果还没有列出端口 443,则单击“添加”。选择服务器的 IP 地址,在“SSL 端口”框中键入数值“443”,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证 Web 服务器上的 SSL 连接
1.
打开浏览器,然后尝试通过标准的 http:// 协议来连接到 Web 服务器。例如,在“地址”框中,键入 http://localhost。
如果 SSL 被强制,则出现以下错误消息:
网页必须通过安全通道查看。您试图访问的网页受到安全套接字层 (SSL) 保护。
2.
通过键入 https://localhost,再次尝试连接到您想要查看的网页。
通常出现 Web 服务器的默认网页。
返回页首
相关信息
有关保护 IIS 6.0 的详细信息,请参阅下列文档:
• 位于 Microsoft 网站上的Security Enhancements in Internet Information Services 6.0,其网址为 http://go.microsoft.com/fwlink/?LinkId=22800(英文) 。
• 位于 TechNet 网站上的 Configuring Application Isolation on Windows Server 2003 and Internet Information Services (IIS) 6.0,其网址为 http://go.microsoft.com/fwlink/?LinkId=2280(英文)。
• 位于 Microsoft Events and Webcasts 网站上的 TechNet Webcast: Securing Internet Information Services (IIS),其网址为 http://go.microsoft.com/fwlink/?LinkId=22802(英文)。
有关IIS 6.0 的详细信息,请参阅下列文档:
• 位于 Microsoft 下载中心上的 Internet Information Services (IIS) 6.0 Resource Kit,其网址为 http://go.microsoft.com/fwlink/?LinkId=22803(英文)。
• 位于 TechNet 网站上的 Internet Information Services 技术网页,其网址为 http://go.microsoft.com/fwlink/?LinkId=22804(英文)。
• 位于 Microsoft 网站上的 Technical Overview of Internet Information Services (IIS) 6.0,其网址为 http://go.microsoft.com/fwlink/?LinkId=22805(英文)。
http://www.microsoft.com/china/technet/security/sgk/sec_IIS_6_0.mspx
本页内容
简介
准备工作
减少 Web 服务器的攻击面
配置帐户
配置文件和目录的安全
保护网站和虚拟目录
在 Web 服务器上配置安全套接字层
相关信息
简介
Web 服务器通常是各种安全攻击的目标。其中一些攻击非常严重,足以对企业资产、工作效率和客户关系造成相当的破坏—所有攻击都会带来不便和麻烦。Web 服务器的安全是企业成功的关键。
本文档说明如何开始保护 Web 服务器的过程。此 Web 服务器在 Microsoft® Windows Server™ 2003 Standard Edition 操作系统上运行 Internet Information Services (IIS) 6.0。首先,本节描述影响 Web 服务器安全的一些最常见威胁。然后,本文档提供说明性指导,使您的 Web 服务器更安全地防御这些攻击。
通过对 IIS 早期版本做以下更改,IIS 6.0 以更加主动的姿态来防御恶意用户和攻击者:
• 安装 Windows Server 2003 Standard Edition 时,默认情况下没有安装 IIS 6.0。
• 初次安装 IIS 6.0 时,Web 服务器仅服务于或显示静态网页 (HTML),这降低了服务于动态网页或可执行文件、内容而带来的风险。
• 万维网发布服务(WWW 服务)是 IIS 6.0 初次安装时在默认情况下支持的唯一服务。您可以在需要时启用所需要的特定服务。
• IIS 6.0 初次安装时,默认情况下禁用 ASP 和 ASP.NET。
• 对于其他保护,IIS 6.0 中所有默认的安全配置设置都符合或超过由 IIS Lockdown Tool 提供的安全配置设置。IIS Lockdown Tool 在 IIS 的早期版本上运行,旨在通过禁用不必要的特性来减少 Web 服务器的攻击面。有关 IIS Lockdown Tool 的详细信息,请参阅 Security Guidance Kit 中的“确保 Internet 信息服务 5.0 和 5.1 的安全”。
由于 IIS 6.0 的默认设置禁用了 Web 服务通常使用的许多功能,因此,本文档说明如何在降低服务器暴露给潜在攻击者程度的同时配置 Web 服务器的其他功能。
本文档就增强 Web 服务器的安全提供以下指导:
• 减少 Web 服务器的攻击面,或者降低服务器暴露给潜在攻击者的程度。
• 配置匿名访问的用户和组帐户
• 保护文件和目录不接受未经授权的访问
• 保护网站和虚拟目录不接受未经授权的访问
• 配置 Web 服务器上安全套接字层 (SSL)
要点:本文档包括的所有逐步说明都是使用“开始”菜单形成的,此菜单在安装操作系统时默认显示。如果修改过“开始”菜单,则这些步骤可能稍有不同。
在您完成本文档中的步骤之后,Web 服务器将能够服务于以 .asp 页面形式提供的动态内容,而且仍然能够对以下类型的攻击提供强有力的保护,这些攻击有时威胁到面向 Internet 的服务器:
• 配置文件攻击,此攻击搜集网站的有关信息;可通过禁止不需要的端口和禁用不需要的协议来减少这种攻击。
• 拒绝服务攻击,此攻击使 Web 服务器充满各种请求;可通过应用安全修补程序和软件更新来最大限度地减少这种攻击。
• 没有正确权限的用户未经授权的访问;通常通过配置 Web 和 NTFS 权限来阻止这种访问。
• 恶意代码在 Web 服务器上任意执行;可通过防止对系统工具和命令的访问来最大限度地减少这种攻击。
• 特权提升,使恶意用户能够使用具有较高特权的帐户来运行程序;可通过使用最低特权的服务和用户帐户来最大限度地减少这种攻击。
• 来自病毒、蠕虫和特洛伊木马的破坏;可通过禁用不需要的功能、使用最低特权的帐户以及及时应用最新安全修补程序来遏制这种攻击。
注意:由于保护 Web 服务器是一个复杂而长期的过程,完全的安全性很难保证。
返回页首
准备工作
本节说明本文档中描述的 Web 服务器的系统要求和特征。
系统要求
本文档中用作示例的 Web 服务器有以下系统要求:
• 此服务器运行 Windows Server 2003 Standard Edition。
• 操作系统安装在 NTFS 分区上。有关 NTFS 的信息,请在 Windows Server 2003 中的帮助和支持中心搜索“NTFS”。
• Windows Server 2003 所有必需的修补程序和更新都已经应用到此服务器。为了验证 Web 服务器上是否安装了最新的安全更新,请转到位于 Microsoft 网站 http://go.microsoft.com/fwlink/?LinkId=22630 上的 Windows Update 网页,利用 Windows Update 来扫描服务器是否有可用的更新。
• Windows Server 2003 安全保护已经应用到服务器。
本文档提供介绍性信息,帮助您设置最初的几个步骤,以配置一台更安全的 Web 服务器。不过,为了使 Web 服务器尽可能安全,您必须了解服务器上运行的应用程序的操作。本文档不包括应用程序特定安全配置的有关信息。
Web 服务器特征
本文档中用作示例的 Web 服务器有以下特征要求:
• Web 服务器正在工作进程隔离模式下运行 IIS 6.0 。
• Web 服务器托管一个面向 Internet 的网站。
• Web 服务器配有防火墙,仅支持 HTTP 端口 80 和 HTTPS 端口 443 上的流量。
• 此 Web 服务器是专用 Web 服务器,这种服务器只能用作 Web 服务器而不能用于其他目的,例如文件服务器、打印服务器或运行 Microsoft SQL Server® 的数据库服务器。
• 允许匿名访问网站。
• Web 服务器服务于 HTML 和 ASP 网页。
• 没有在 Web 服务器上配置 Microsoft 的 FrontPage® 2002 Server Extensions。
• Web 服务器上的应用程序不需要数据库连接。
• Web 服务器不支持 FTP(文件上传和下载)、SMTP(电子邮件)或 NNTP(新闻组)协议。
• Web 服务器不使用 Internet Security and Acceleration Server。
• 管理员必须本地登录以管理 Web 服务器。
返回页首
减少 Web 服务器的攻击面
通过减少 Web 服务器的攻击面,或者降低服务器暴露给潜在攻击者的程度,来开始保护 Web 服务器的过程。例如,仅启用 Web 服务器正常运行所必需的组件、服务和端口。
禁用 SMB 和 NetBIOS
主机枚举攻击扫描网络,以便确定潜在目标的 IP 地址。要降低主机枚举成功攻击 Web 服务器上面向 Internet 的端口的可能性,应禁用除传输控制协议 (TCP) 以外的所有网络协议。Web 服务器中的面向 Internet 的网络适配器上不需要服务器消息块 (SMB) 和 NetBIOS。
本节提供以下逐步说明,以降低 Web 服务器的攻击面:
• 禁用面向 Internet 连接上的 SMB
• 禁用基于 TCP/IP 的 NetBIOS
注意:禁用 SMB 和 NetBIOS 之后,此服务器不能用作文件服务器或打印服务器,不可以浏览网络,而且不能远程管理此 Web 服务器。如果您的服务器是需要管理员本地登录的专用 Web 服务器,这些限制则不会影响服务器的运行。
SMB 使用下列端口:
• TCP 端口 139
• TCP 和 UDP 端口 445 (SMB Direct Host)
NetBIOS 使用下列端口:
• TCP 和 UDP 端口 137(NetBIOS 命名服务)
• TCP 和 UDP 端口 138(NetBIOS 数据报服务)
• TCP 和 UDP 端口 139(NetBIOS 会话服务)
仅禁用 NetBIOS 将不会防止 SMB 通信,因为如果标准 NetBIOS 端口不可用,SMB 则使用 TCP 端口 445(也称为 SMB Direct Host)。您必须分别禁用 NetBIOS 和 SMB。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑、系统工具和设备管理器。
• 禁用面向 Internet 连接上的 SMB
1.
单击“开始”,单击“设置”,再单击“控制面板”,然后双击“网络连接”。
2.
右键单击您的面向 Internet 的连接,然后单击“属性”。
3.
清除“Microsoft 网络客户端”复选框。
4.
清除“Microsoft 网络的文件和打印机共享”复选框,然后单击“确定”。
• 禁用基于 TCP/IP 的 NetBIOS
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“系统工具”,然后选择“设备管理器”。
3.
右键单击“设备管理器”,单击“查看”,然后单击“显示隐藏的设备”。
4.
双击“非即插即用驱动程序”。
5.
右键单击“NetBios over Tcpip”,单击“停用”,然后单击“是”。
注意:本文档中的屏幕快照反映的是测试环境,其信息可能与您的屏幕所显示的信息有所不同。
上述过程不仅禁用 TCP 端口 445 和 UDP 端口 445 上的 SMB 直接宿主侦听者,而且禁用 Nbt.sys 驱动程序,并需要重新启动系统。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证 SMB 是否已禁用
1.
单击“开始”,单击“设置”,然后单击“网络和拨号连接”。
2.
右键单击您的面向 Internet 的连接,然后单击“属性”。
3.
验证是否清除了“Microsoft 网络客户端”和“Microsoft 网络的文件和打印机共享”复选框,然后单击“确定”。
• 验证 NetBIOS 是否已禁用
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“系统工具”,然后选择“设备管理器”。
3.
右键单击“设备管理器”,单击“查看”,然后单击“显示隐藏的设备”。
4.
双击“非即插即用驱动程序”,然后单击“NetBios over Tcpip”。
上下文菜单中现在出现“启用”选择,这表示 NetBIOS over TCP/IP 目前已禁用。
5.
单击“确定”关闭“设备管理器”。
只选择基本的 IIS 组件和服务
IIS 6.0 除了包括 WWW 服务之外,还包括一些子组件和服务,例如 FTP 服务和 SMTP 服务。为了最大限度地降低针对特定服务和子组件的攻击风险,建议您只选择网站和 Web 应用程序正确运行所必需的服务和子组件。
下表显示用作本文档示例的 Web 服务器上 IIS 子组件和服务在“添加或删除程序”中的推荐设置。
IIS 子组件和服务的推荐设置
子组件或服务 默认设置 Web 服务器设置
后台智能传输服务 (BITS) 服务器扩展
禁用
不更改
公用文件
启用
不更改
FTP 服务
禁用
不更改
FrontPage 2002 Server Extensions
禁用
不更改
Internet 信息服务管理器
启用
不更改
Internet 打印
禁用
不更改
NNTP 服务
禁用
不更改
SMTP 服务
启用
禁用
万维网服务
启用
不更改
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:添加或删除程序。
• 配置 IIS 组件和服务
1.
单击“开始”,单击“控制面板”,然后单击“添加或删除程序”。
2.
单击“添加/删除 Windows 组件”。
3.
在“Windows 组件向导”页面中的“组件”下,单击“应用程序服务器”,然后单击“详细信息”。
4.
单击“Internet 信息服务 (IIS)”,然后单击“详细信息”。
5.
参考上表,然后通过选择或清除相应组件或服务的复选框,来选择或取消相应的 IIS 组件和服务。
6.
按照“Windows 组件向导”中的以下说明来完成此向导。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否选择了 IIS 组件和服务
• 单击“开始”,单击“控制面板”,然后单击“管理工具”。
在“管理工具”菜单中出现“Internet 信息服务 (IIS) 管理器”。
只启用基本的 Web 服务扩展
服务于动态内容的 Web 服务器需要 Web 服务扩展。每种动态内容都响应特定的 Web 服务扩展。由于安全原因,IIS 6.0 允许您启用和禁用单独的 Web 服务扩展,因此,只启用您的内容所需要的扩展。
警告:不要启用所有的 Web 服务扩展。尽管启用所有的 Web 服务扩展可确保最大限度地兼容现有的网站和应用程序,但却大幅增加了 Web 服务器的攻击面。您可能需要分别测试您的网站和应用程序,以确保只启用必需的 Web 服务和扩展。
假设配置 Web 服务器来服务于作为默认网页的 Default.asp 文件。尽管配置了默认网页,但您必须启用 Active Server Pages Web 服务扩展才能查看 .asp 网页。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 启用 Active Server Pages Web 服务扩展
1.
单击“开始”,单击“控制面板”,单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
双击“本地计算机”,然后单击“Web 服务扩展”。
3.
单击“Active Server Pages”,然后单击“允许”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否启用了 Active Server Pages Web 服务扩展
1.
打开“文本编辑器”,键入文本,然后将文件作为 Default.asp 保存到 C:\inetpub\wwwroot 目录。
2.
在 Internet Explorer 地址栏中,键入以下 URL,然后按 Enter 键: http://localhost。
浏览器中出现 Default.asp 文件。
返回页首
配置帐户
建议您删除未使用的帐户,因为攻击者可能发现这些帐户,然后利用这些帐户来获取您服务器上的数据和应用程序的访问权。始终使用强密码,因为弱密码增加了成功进行强力攻击或字典攻击(即攻击者竭尽全力地猜密码)的可能性。使用以最低特权运行的帐户。否则,攻击者可以通过使用以高级特权运行的帐户来获取未经授权的资源的访问权。
本节对配置帐户提供以下逐步说明:
• 禁用未使用的帐户
• 使用应用程序池来隔离应用程序
禁用未使用的帐户
未使用的帐户及其特权可以被攻击者用来获取服务器的访问权。您应该定期审核服务器上的本地帐户,并禁用未使用的任何帐户。在生产服务器上禁用这些帐户之前,先在测试服务器上禁用帐户,以确保禁用帐户不会对应用程序的操作方式带来不利影响。如果在测试服务器上禁用帐户没有出现任何问题,则在生产服务器上禁用帐户。
注意:如果您选择删除而不是禁用未使用的帐户,则一定要知道您不能恢复已删除的帐户,因而不能删除管理员帐户和来宾帐户。而且,一定要在生产服务器上删除帐户之前,先在测试服务器上删除此帐户。
本节对删除或禁用未使用的帐户提供以下逐步说明:
• 禁用来宾帐户
• 重命名管理员帐户
• 重命名 IUSR_ComputerName 帐户
禁用来宾帐户
采用匿名连接来访问 Web 服务器时,使用来宾帐户。在默认安装 Windows Server 2003 时,禁用来宾帐户。 要限制对服务器的匿名连接,请确保禁用来宾帐户。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:计算机管理
• 禁用来宾帐户
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“本地用户和组”,然后单击“用户”文件夹。来宾帐户应该以红色的 X 图标显示,以指示此帐户已禁用。如果来宾帐户未禁用,则继续步骤 3 来禁用此帐户。
3.
右键单击“Guest”(来宾)帐户,然后单击“属性”。
4.
在“常规”选项卡上,选中“帐户已停用”复选框,然后单击“确定”。
来宾帐户现在应该以红色 X 图标显示。
重命名管理员帐户
默认的本地管理员帐户因其在计算机上的更高特权而成为恶意用户的目标。要增强安全性,请重命名默认的管理员帐户并分配一个强密码。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑。
• 重命名默认的管理员帐户并分配一个强密码
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“本地用户和组”,然后单击“用户”文件夹。
3.
右键单击“Administrator”(管理员)帐户,然后单击“重命名”。
4.
在框中键入名称,然后按 Enter 键。
5.
在桌面上,按 Ctrl+Alt+Del,然后单击“更改密码”。
6.
在“用户名”框中键入管理员帐户的新名称。
7.
在“旧密码”框中键入当前密码,在“新密码”框中键入新密码,在“确认新密码”框中重新键入新密码,然后单击“确定”。
警告:不要使用上下文菜单中的“设置密码”菜单项来更改密码,除非您忘记了密码并且没有可用的密码重置磁盘。使用这种方法来更改管理员密码可能导致受此密码保护的信息永久丢失。
重命名 IUSR 帐户
默认的匿名 Internet 用户帐户 IUSR_ComputerName 是在 IIS 安装期间创建的。ComputerName 的值是安装 IIS 时服务器的 NetBIOS 名称。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑。
• 重命名 IUSR 帐户
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“本地用户和组”,然后单击“用户”文件夹。
3.
右键单击 IUSR_ComputerName 帐户,然后单击“重命名”。
4.
键入新帐户名称,然后按 Enter 键。
• 在 IIS 元数据库中更改 IUSR 帐户的值
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击“本地计算机”,然后单击“属性”。
3.
选中“允许直接编辑配置数据库”复选框,然后单击“确定”。
4.
浏览至 MetaBase.xml 文件的位置,默认情况下为 C:\Windows\system32\inetsrv。
5.
右键单击 MetaBase.xml 文件,然后单击“编辑”。
6.
搜索“AnonymousUserName”属性,然后键入 IUSR 帐户的新名称。
7.
在“文件”菜单上,单击“退出”,然后单击“是”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证帐户是否已禁用
1.
按 Ctrl+Alt+Del,然后单击“注销”以注销 Web 服务器。
2.
在“登录到 Windows”对话框中,在“用户名”框中键入已禁用帐户的名称,键入已禁用帐户的密码,然后单击“确定”。
出现以下消息:
您的帐户已被停用。请向系统管理员咨询。
• 验证帐户是否已重命名
1.
按 Ctrl+Alt+Del,然后单击“注销”以注销 Web 服务器。
2.
在“登录到 Windows”对话框中,在“用户名”框中键入已重命名帐户以前的名称,键入重命名帐户的密码,然后单击“确定”。
出现以下消息:
系统无法让您登录。请确定您的用户名及域无误,然后再次输入密码。密码的字母必须使用正确的大小写。
3.
单击“确定”,然后在“用户名”框中键入重命名帐户的新名称。
4.
键入重命名帐户的密码,然后单击“确定”。
您应该能够用重命名的帐户登录到计算机。
使用应用程序池来隔离应用程序
使用 IIS 6.0,可以将应用程序隔离到应用程序池。应用程序池是包含一个或多个 URL 的一个组,一个工作进程或者一组工作进程对应用程序池提供服务。因为每个应用程序都独立于其他应用程序运行,因此,使用应用程序池可以提高 Web 服务器的可靠性和安全性。
在 Windows 操作系统上运行进程的每个应用程序都有一个进程标识,以确定此进程如何访问系统资源。每个应用程序池也有一个进程标识,此标识是一个以应用程序需要的最低权限运行的帐户。可以使用此进程标识来允许匿名访问您的网站或应用程序。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑。
• 创建应用程序池
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
双击本地计算机,右键单击“应用程序池”,单击“新建”,然后单击“应用程序池”。
3.
在“应用程序池 ID”框中,为应用程序池键入一个新 ID(例如,ContosoAppPool)。
4.
在“应用程序池设置”下,单击“Use default settings for the new application pool”(使用新应用程序池的默认设置),然后单击“确定”。
• 将网站或应用程序分配到应用程序池
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要分配到应用程序池的网站或应用程序,然后单击“属性”。
3.
根据您选择的应用程序类型,单击“主目录”、“虚拟目录”或“目录”选项卡。
4.
如果您将目录或虚拟目录分配到应用程序池,则验证“应用程序名”框是否包含正确的网站或应用程序名称。
-或者-
如果在“应用程序名”框中没有名称,则单击“创建”,然后键入网站或应用程序的名称。
5.
在“应用程序池”列表框中,单击您想要分配网站或应用程序的应用程序池的名称,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否创建了应用程序池
1.
使用管理员帐户登录到 Web 服务器。
2.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
3.
双击本地计算机,双击“应用程序池”,然后验证是否在应用程序池节点下出现您所创建的应用程序池。
4.
右键单击您所创建的程序池,然后单击“属性”。
5.
单击“标识”选项卡,验证此应用程序池是否设置为称作“网络服务”的预定义的安全帐户,然后单击“确定”。
• 验证网站或应用程序是否分配到特定的应用程序池
1.
使用管理员帐户登录到 Web 服务器。
2.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
3.
双击本地计算机,双击“网站”,右键单击您想要验证应用程序池设置的网站,然后单击“属性”。
4.
根据您选择的应用程序类型,单击“主目录”、“虚拟目录”或“目录”选项卡。
5.
在“应用程序池”列表框中,验证是否列出您想要将网站分配到的应用程序池的名称,然后单击“取消”。
返回页首
配置文件和目录的安全
使用强访问控制来帮助保护敏感的文件和目录。在多数情况下,允许对特定帐户的访问比拒绝对特定帐户的访问更加有效。如有可能,请将访问设置在目录级。当文件添加到文件夹时,它们继承文件夹的权限,因此您不需要采取进一步的措施。
本节对配置文件和目录提供以下逐步说明:
• 重定位和设置 IIS 日志文件的权限
• 配置 IIS 元数据库权限
• 禁用 FileSystemObject 组件
重新定位和设置 IIS 日志文件的权限
为了增强 IIS 日志文件的安全,您应该将文件重新定位到非系统驱动器,此驱动器格式化为使用 NTFS 文件系统。此位置应该与网站内容的位置不同。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑和 Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 将 IIS 日志文件的位置移动到非系统分区
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至您想要重新定位 IIS 日志文件的位置。
3.
右键单击您想要重新定位 IIS 日志文件的上一级目录,单击“新建”,然后单击“文件夹”。
4.
键入文件夹的名称,例如 ContosoIISLogs,然后按 Enter 键。
5.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
6.
右键单击网站,然后单击“属性”。
7.
单击“网站”选项卡,然后单击“启用日志记录”框架中的“属性”。
8.
在“常规属性”选项卡中,单击“浏览”,然后导航到您刚才创建的文件夹以存储 IIS 日志文件。
9.
单击“确定”三次。
注意:如果您在原来的位置 Windows\System32\Logfiles 上有 IIS 日志文件,则必须将这些文件手动移动到新位置。IIS 不为您移动这些文件。
• 设置 IIS 日志文件的 ACL
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至日志文件所在的文件夹。
3.
右键单击此文件夹,单击“属性”,然后单击“安全”选项卡。
4.
在顶部窗格中,单击“Administrators”(管理员),确保底部窗格中的权限设置为“完全控制”。
5.
在顶部窗格中,单击“System”(系统),确保底部窗格中的权限设置为“完全控制”,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否移动了日志文件并设置了权限
1.
单击“开始”,单击“搜索”,然后单击“文件或文件夹”。
2.
在“要搜索的文件名”框中键入部分或完整的文件名(例如 LogFiles),在“搜索范围”框中选择一个位置,然后单击“立即搜索”。
搜索返回日志文件的新位置。
3.
按 Ctrl+Alt+Del,然后单击“注销”。
4.
使用没有日志文件访问权的帐户来登录到 Web 服务器。
5.
单击“开始”,右键单击“我的电脑”,单击“资源管理器”,然后浏览至 LogFiles 目录。
6.
右键单击 LogFiles 目录,然后单击“打开”。
出现以下消息:
• 拒绝访问。
配置 IIS 元数据库权限
IIS 元数据库是包含大部分 IIS 配置信息的 XML 文件。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑和 MetaBase.xml 文件。
• 限制 MetaBase.xml 文件的访问权
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至 Windows\System32\Inetsrv\MetaBase.xml 文件,右键单击此文件,然后单击“属性”。
3.
单击“安全”选项卡,确认只有 Administrators 组的成员和 LocalSystem 帐户拥有对元数据库的完全控制访问权,删除所有其他文件权限,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证对 MetaBase.xml 文件受限制的访问
1.
按 Ctrl+Alt+Del,然后单击“注销”。
2.
使用没有 MetaBase.xml 文件访问权的帐户来登录到 Web 服务器。
3.
单击“开始”,右键单击“我的电脑”,单击“资源管理器”,然后浏览至 MetaBase.xml 的位置。
4.
右键单击 MetaBase.xml 文件,然后单击“打开”。
出现以下消息:
• 拒绝访问。
禁用 FileSystemObject 组件
ASP、Windows 脚本主机和其他编写脚本的应用程序使用 FileSystemObject (FSO) 组件来创建、删除、获取信息以及操纵驱动器、文件夹和文件。可考虑禁用 FSO 组件,但要注意,这也将删除字典对象。另外,验证是否没有其他程序需要这个组件。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:命令提示符。
• 禁用 FileSystemObject 组件
1.
单击“开始”,单击“运行”,在“打开”框中键入 cmd,然后单击“确定”。
2.
切换到 C:\Windows\system32 目录。
3.
在命令提示符处,键入 regsvr32 scrrun.dll /u ,然后按 Enter 键。
出现以下消息:
DllUnregisterServer in scrrun.dll succeeded。
4.
单击“确定”。
5.
在命令提示符处,键入 exit 关闭命令提示窗口。
返回页首
保护网站和虚拟目录
将 Web 根目录和虚拟目录重新定位到非系统分区,以帮助防御目录遍历攻击。这些攻击允许攻击者执行操作系统程序和工具。由于这种攻击不能遍历所有驱动器,因此,将网站内容重新定位到另一个驱动器可以增强对这些攻击的防护。
本节对保护网站和虚拟目录提供以下逐步说明:
• 将网站内容移动到非系统驱动器
• 配置网站权限
将网站内容移动到非系统驱动器
不要使用默认的 \Inetpub\Wwwroot 目录作为网站内容的位置。例如,如果系统安装在 C: 驱动器,则将内容目录移动到 D: 驱动器,以减轻目录遍历攻击(这种攻击试图浏览 Web 服务器的目录结构)带来的危险。一定要验证是否所有的虚拟目录都指向新驱动器。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc) 和命令提示。
• 将网站内容移动到非系统驱动器
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要移动其内容的网站,然后单击“停止”。
3.
单击“开始”,单击“运行”,在“打开”框中键入 cmd,然后单击“确定”。
4.
在命令提示符处键入以下命令:
xcopy c:\inetpub\wwwroot\SiteName Drive:\wwwroot\SiteName /s /i /o
在上述命令中,
• SiteName 由您的网站名代替。
• Drive 由新驱动器名代替,例如 D。
5.
返回到 Internet 信息服务 (IIS) 管理器管理单元。
6.
右键单击网站,然后单击“属性”。
7.
根据您选择的应用程序类型,单击“主目录”、“虚拟目录”或“目录”选项卡,在“本地路径”框中键入新目录位置,然后单击“确定”。
-或者-
浏览至您刚才复制了文件的目录位置,然后单击“确定”。
8.
右键单击网站,然后单击“开始”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证网站内容是否已经移动到非系统驱动器
1.
单击“开始”,单击“搜索”,然后单击“文件或文件夹”。
2.
在“要搜索的文件名”框中键入部分或完整的文件名,在“搜索范围”中选择位置,然后单击“立即搜索”。
搜索结果列出您移动到新位置的文件以及原有位置的文件。
• 删除系统驱动器上的网站内容
• 导航到 C:\Inetpub\Wwwroot\SiteName 目录,然后删除移动到非系统驱动器的文件。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证网站内容是否已经从系统驱动器上删除
1.
单击“开始”,单击“搜索”,然后单击“文件或文件夹”。
2.
在“要搜索的文件名”文本框中键入部分或完整的文件名,在“搜索范围”中选择一个位置,然后单击“立即搜索”。
搜索结果只列出您移动到新位置的文件。
配置网站权限
可以为您的 Web 服务器配置特定站点、目录和文件的访问权。这些权限可以应用于所有用户,无论用户有何特定的访问权。
配置文件系统目录的权限
IIS 6.0 依靠 NTFS 权限来帮助保护单个文件和目录不会受到未经授权的访问。网站权限应用于试图访问网站的任何人,与此不同的是,您可以使用 NTFS 权限来定义哪些用户可以访问您的内容,以及如何允许这些用户操作这些内容。为了增强安全性,同时使用网站权限和 NTFS 权限。
访问控制列表 (ACL) 指示哪些用户或组有访问或修改特定文件的权限。不是在每个文件上设置 ACL,而是为每种文件类型创建新目录,在每个目录上设置 ACL,然后允许文件从它们所在的目录中继承这些权限。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:我的电脑和 Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 将网站内容移动到单独的文件夹
1.
单击“开始”,右键单击“我的电脑”,然后单击“资源管理器”。
2.
浏览至包含网站内容的文件,然后单击网站内容的最上层的文件夹。
3.
在“文件”菜单中,单击“新建”,然后单击“文件夹”,以便在网站的内容目录中创建一个新文件夹。
4.
为文件夹命名,然后按 Enter 键。
5.
按 Ctrl 键,然后选择您想要保护的每个网页。
6.
右键单击这些网页,然后单击“复制”。
7.
右键单击新文件夹,然后单击“粘贴”。
注意: 如果您已经创建了到这些网页的链接,则必须更新这些链接以便反映站点内容的新位置。
• 设置 Web 内容的权限
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要配置的网站的文件夹、网站、目录、虚拟目录或文件,然后单击“属性”。
3.
根据您想要授权或拒绝访问的类型,选择或清除下列任何复选框(如果可用):
• 脚本源文件访问。用户可以访问源文件。如果选择“读”,则可以读源文件;如果选择“写”,则可以写源文件。脚本源访问包括脚本的源代码。如果“读”或“写”均未选择,则此选项不可用。
• 读(默认情况下选择)。用户可以查看目录或文件的内容和属性。
• 写。用户可以更改目录或文件的内容和属性。
• 目录浏览。用户可以查看文件列表和集合。
• 日志访问。对网站的每次访问创建日志项。
• 检索资源。允许检索服务检索此资源。这允许用户搜索资源。
4.
在“执行权限”列表框中,选择脚本执行的相应级别:
• 无。不在服务器上运行脚本和可执行文件(例如,文件类型为 .exe 的文件)。
• 仅脚本。只在服务器上运行脚本。
• 脚本和可执行文件。在服务器运行脚本和可执行文件。
5.
单击“确定”。如果目录的子节点配置了不同的网站权限,则出现“继承覆盖”框。
6.
如果出现“继承覆盖”框,在“子节点”列表中选择您想要应用目录的 Web 权限的子节点。
-或者-
单击“全选”来设置属性,以便将 Web 权限应用到所有子节点。
7.
如果您不只看到一个“继承覆盖”对话框,则从“子节点”列表中选择子节点,或者单击“全选”,然后单击“确定”,以便将此属性的 Web 权限应用到子节点。
如果一个子节点属于您已经更改了网站权限的目录,此节点还为特定选项设置了网站权限,则子节点的权限将覆盖您为目录设置的权限。如果您想要将目录级的 Web 权限应用到子节点,则必须在“继承覆盖”框中选择这些子节点。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证是否拒绝网站内容目录的写权限
1.
按 Ctrl+Alt+Del,然后单击“注销”。
2.
使用在物理或虚拟目录上具有“读”和“执行”权限的帐户来登录到 Web 服务器。
3.
单击“开始”,右键单击“我的电脑”,单击“资源管理器”,浏览至一个文件位置,您想要将此位置的文件复制到物理或虚拟目录。
4.
右键单击此文件,然后单击“复制”。
5.
浏览至物理或虚拟目录的位置,然后右键单击此目录。“粘贴”选项在上下文菜单上不可用,这意味着您没有此目录的写权限。
返回页首
在 Web 服务器上配置安全套接字层
在 Web 服务器上配置安全套接字层 (SSL) 安全功能,以便验证内容的完整性,验证用户身份并对网络传输加密。SSL 安全依靠服务器证书,此证书允许用户在传输个人信息(例如信用卡帐号)之前验证 Web 网站的身份。每个网站只能有一个服务器证书。
获取并安装服务器证书
证书由称作证书颁发机构 (CA) 的非 Microsoft 组织颁发。服务器证书通常与 Web 服务器有关,尤其与配置了 SSL 的网站有关。您必须生成证书请求,将此请求发送到 CA,然后在接收到 CA 的证书之后安装此证书。
证书依靠一对加密密钥(一个公钥和一个私钥)来确保安全。当您生成服务器证书请求时,您实际上正在生成私钥。从 CA 接收到的服务器证书包含公钥。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc) 和 Web 服务器证书向导。
• 生成服务器证书请求
1.
单击“开始”,右键单击“我的电脑”,然后单击“管理”。
2.
双击“服务和应用程序”部分, 然后双击“Internet 信息服务”。
3.
右键单击您想要安装服务器证书的网站,然后单击“属性”。
4.
单击“目录安全”选项卡。在“安全通信”部分中,单击“服务器证书”,以启动“Web 服务器证书向导”,然后单击“下一步”。
5.
单击“创建一个新证书”,然后单击“下一步”。
6.
单击“立即准备请求,但稍后发送”,然后单击“下一步”。
7.
在“名称”框中,键入容易记住的名称。(默认的名称是您正在生成证书请求的网站名,例如 http://www.contoso.com。)
8.
指定位长度,然后单击“下一步”。
加密密钥的位长度确定了加密的强度。大多数非 Microsoft CA 都希望您最少选择 1024 位。
9.
在“组织”部分,键入您的组织和组织单位信息。确保此信息的准确性,并且“组织”字段中不包含逗号,然后单击“下一步”。
10.
在“站点的公用名称”部分,键入含域名的宿主计算机的名称,然后单击“下一步”。
11.
键入您的地理信息,然后单击“下一步”。
12.
将此文件保存为 .txt 文件。(默认的文件名和位置是 C:\certreq.txt。)
以下示例显示证书请求文件的特征。
-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDATCCAmoCAQAwbDEOMAwGA1UEAxMFcGxhbjgxDDAKBgNVBAsTA1BTUzESMBAG
A1UEChMJTWljcm9zb2Z0MRIwEAYDVQQHEwlDaGFybG90dGUxFzAVBgNVBAgTDk5v
cnRoIENhcm9saW5hMQswCQYDVQQGEwJVUzCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
gYkCgYEAtW1koGfdt+EoJbKdxUZ+5vE7TF1ZuT+xaK9jEWHESfw11zoRKrHzHN0f
IASnwg3vZ0ACteQy5SiWmFaJeJ4k7YaKUb6chZXG3GqL4YiSKFaLpJX+YRiKMtmI
JzFzict5GVVGHsa1lY0BDYDO2XOAlstGlHCtENHOKpzdYdANRg0CAwEAAaCCAVMw
GgYKKwYBBAGCNw0CAzEMFgo1LjAuMjE5NS4yMDUGCisGAQQBgjcCAQ4xJzAlMA4G
A1UdDwEB/wQEAwIE8DATBgNVHSUEDDAKBggrBgEFBQcDATCB/QYKKwYBBAGCNw0C
AjGB7jCB6wIBAR5aAE0AaQBjAHIAbwBzAG8AZgB0ACAAUgBTAEEAIABTAEMAaABh
AG4AbgBlAGwAIABDAHIAeQBwAHQAbwBnAHIAYQBwAGgAaQBjACAAUAByAG8AdgBp
AGQAZQByA4GJAGKa0jzBn8fkxScrWsdnU2eUJOMUK5Ms87Q+fjP1/pWN3PJnH7x8
MBc5isFCjww6YnIjD8c3OfYfjkmWc048ZuGoH7ZoD6YNfv/SfAvQmr90eGmKOFFi
TD+hl1hM08gu2oxFU7mCvfTQ/2IbXP7KYFGEqaJ6wn0Z5yLOByPqblQZAAAAAAAA
AAAwDQYJKoZIhvcNAQEFBQADgYEAhpzNy+aMNHAmGUXQT6PKxWpaxDSjf4nBmo7o
MhfC7CIvR0McCQ+CBwuLzD+UJxl+kjgb+qwcOUkGX2PCZ7tOWzcXWNmn/4YHQl0M
GEXu0w67sVc2R9DlsHDNzeXLIOmjUl935qy1uoIR4V5C48YNsF4ejlgjeCFsbCoj
Jb9/2RM=
-----END NEW CERTIFICATE REQUEST-----
13.
确认请求的详细信息,单击“下一步”,然后单击“完成”。
• 提交服务器证书请求
1.
联系 CA,查找提交请求的要求。
2.
将上述过程中创建的 .txt 文件的内容复制成 CA 要求的请求格式。
3.
将请求发送给您的 CA。
接收到 CA 的证书后,准备在您的 Web 服务器上安装此证书。
• 安装服务器证书
1.
将证书 (.cer) 文件复制到 C:\Windows\System32\CertLog 文件夹。
2.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
3.
右键单击您想要安装服务器证书的网站,然后单击“属性”。
4.
单击“目录安全”选项卡。在“安全通信”部分中,单击“服务器证书”,以启动“Web 服务器证书向导”,然后单击“下一步”。
5.
单击“处理挂起的请求并安装证书”,然后单击“下一步”。
6.
浏览至您接收到的 CA 证书。单击“下一步”两次,然后单击“完成”。
验证新的设置
验证正确设置是否已经应用于您的本地计算机。
• 验证是否在 Web 服务器上安装了证书
1.
单击“开始”,单击“控制面板”,单击“管理工具”,然后单击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要查看证书的网站,然后单击“属性”。
3.
在“目录安全”选项卡上的“安全通信”区域内,单击“查看证书”,查看证书之后,单击“确定”两次。
在 Web 服务器上强制和启用 SSL 连接
安装服务器证书之后,必须在 Web 服务器上强制 SSL 连接。然后,必须启用 SSL 连接。
要求
• 凭据:您必须作为 Web 服务器 Administrators 组成员登录。
• 工具:Internet 信息服务 (IIS) 管理器 (Iis.msc)。
• 强制 SSL 连接
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要强制 SSL 连接的网站,然后单击“属性”。
3.
单击“目录安全”选项卡。在“安全通信”部分,单击“编辑”。
4.
单击“要求安全通道 (SSL)”,选择加密长度,然后单击“确定”。
注意:如果您指定 128 位加密,使用 40 位或 56 位长度浏览的客户端计算机不能与您的站点通信,除非将其浏览器升级到支持 128 位加密的版本。
• 在 Web 服务器上启用 SSL 连接
1.
单击“开始”,单击“控制面板”,再单击“管理工具”,然后双击“Internet 信息服务 (IIS) 管理器”。
2.
右键单击您想要启用 SSL 连接的网站,然后单击“属性”。
3.
单击“网站”选项卡。在“网站标识”部分,验证“SSL 端口”是否填充了数值 443。
4.
然后单击“高级”。通常出现两个对话框,在“此网站的多个标识”框中列出此网站 IP 地址和端口。在“此网站的多个 SSL 标识”字段下,如果还没有列出端口 443,则单击“添加”。选择服务器的 IP 地址,在“SSL 端口”框中键入数值“443”,然后单击“确定”。
验证新的设置
验证正确安全设置是否已经应用于您的 Web 服务器。
• 验证 Web 服务器上的 SSL 连接
1.
打开浏览器,然后尝试通过标准的 http:// 协议来连接到 Web 服务器。例如,在“地址”框中,键入 http://localhost。
如果 SSL 被强制,则出现以下错误消息:
网页必须通过安全通道查看。您试图访问的网页受到安全套接字层 (SSL) 保护。
2.
通过键入 https://localhost,再次尝试连接到您想要查看的网页。
通常出现 Web 服务器的默认网页。
返回页首
相关信息
有关保护 IIS 6.0 的详细信息,请参阅下列文档:
• 位于 Microsoft 网站上的Security Enhancements in Internet Information Services 6.0,其网址为 http://go.microsoft.com/fwlink/?LinkId=22800(英文) 。
• 位于 TechNet 网站上的 Configuring Application Isolation on Windows Server 2003 and Internet Information Services (IIS) 6.0,其网址为 http://go.microsoft.com/fwlink/?LinkId=2280(英文)。
• 位于 Microsoft Events and Webcasts 网站上的 TechNet Webcast: Securing Internet Information Services (IIS),其网址为 http://go.microsoft.com/fwlink/?LinkId=22802(英文)。
有关IIS 6.0 的详细信息,请参阅下列文档:
• 位于 Microsoft 下载中心上的 Internet Information Services (IIS) 6.0 Resource Kit,其网址为 http://go.microsoft.com/fwlink/?LinkId=22803(英文)。
• 位于 TechNet 网站上的 Internet Information Services 技术网页,其网址为 http://go.microsoft.com/fwlink/?LinkId=22804(英文)。
• 位于 Microsoft 网站上的 Technical Overview of Internet Information Services (IIS) 6.0,其网址为 http://go.microsoft.com/fwlink/?LinkId=22805(英文)。
Mar
14
INTRODUCTION
This article describes the default permissions and the user rights on a newly installed application server that has Internet Information Services (IIS) 6.0 installed.
MORE INFORMATION
The following tables document the NTFS file system permissions, registry permissions, and Microsoft Windows user rights. This information applies if Microsoft ASP.NET is included as part of the installation suite. This article focuses on the World Wide Web Publishing Service and does not consider other components, such as the File Transfer Protocol (FTP) service, the Simple Mail Transfer Protocol (SMTP) service, and Microsoft FrontPage Server Extensions (FPSE).
Note For the purposes of this document, the IUSR_MachineName account is used interchangeably with a configured anonymous account.
NTFS permissions
Directory Users\Groups Permissions
%windir%\help\iishelp\common Administrators Full control
%windir%\help\iishelp\common System Full control
%windir%\help\iishelp\common IIS_WPG Read
%windir%\help\iishelp\common Users (See Note 1.) Read, execute
%windir%\IIS Temporary Compressed Files Administrators Full control
%windir%\IIS Temporary Compressed Files System Full control
%windir%\IIS Temporary Compressed Files IIS_WPG List, read, write
%windir%\IIS Temporary Compressed Files Creator owner Full control
%windir%\system32\inetsrv Administrators Full control
%windir%\system32\inetsrv System Full control
%windir%\system32\inetsrv Users Read, execute
%windir%\system32\inetsrv\*.vbs Administrators Full control
%windir%\system32\inetsrv\ASP compiled templates Administrators Full control
%windir%\system32\inetsrv\ASP compiled templates IIS_WPG Read
%windir%\system32\inetsrv\History Administrators Full control
%windir%\system32\inetsrv\History System Full control
%windir%\system32\Logfiles Administrators Full control
%windir%\system32\inetsrv\metaback Administrators Full control
%windir%\system32\inetsrv\metaback System Full control
Inetpub\Adminscripts Administrators Full control
Inetpub\wwwroot (or content directories) Administrators Full control
Inetpub\wwwroot (or content directories) System Full control
Inetpub\wwwroot (or content directories) IIS_WPG Read, execute
Inetpub\wwwroot (or content directories) IUSR_MachineName Read, execute
Inetpub\wwwroot (or content directories) ASPNET (See Note 2.) Read, execute
Note 1 You must have permissions to this directory when you use Basic authentication or Integrated authentication and when custom errors are configured. For example, when error 401.1 occurs, the logged-on user sees the expected detailed custom error only if permissions to read the 4011.htm file have been granted to that user.
Note 2 By default, ASP.NET is used as the ASP.NET process identity in IIS 5.0 isolation mode. If ASP.NET is switched to IIS 5.0 isolation mode, ASP.NET must have access to the content areas. ASP.NET process isolation is detailed in IIS Help. For additional information, visit the following Microsoft Web site:
ASP.NET process isolation
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol
/windowsserver2003/proddocs/standard/aaconruntimeprocessisolation.asp
Registry permissions
Location Users\Groups Permissions
HKLM\System\CurrentControlSet\Service\ASP Administrators Full control
HKLM\System\CurrentControlSet\Service\ASP System Full control
HKLM\System\CurrentControlSet\Service\ASP IIS_WPG Read
HKLM\System\CurrentControlSet\Service\HTTP Administrators Full control
HKLM\System\CurrentControlSet\Service\HTTP System Full control
HKLM\System\CurrentControlSet\Service\HTTP IIS_WPG Read
HKLM\System\CurrentControlSet\Service\IISAdmin Administrators Full control
HKLM\System\CurrentControlSet\Service\IISAdmin System Full control
HKLM\System\CurrentControlSet\Service\IISAdmin IIS_WPG Read
HKLM\System\CurrentControlSet\Service\w3svc Administrators Full control
HKLM\System\CurrentControlSet\Service\w3svc System Full control
HKLM\System\CurrentControlSet\Service\w3svc IIS_WPG Read
Windows User Rights
Policy Users
Access this computer from the network Administrators
Access this computer from the network ASPNET
Access this computer from the network IUSR_MachineName
Access this computer from the network IWAM_MachineName
Access this computer from the network Users
Adjust memory quotas for a process Administrators
Adjust memory quotas for a process IWAM_MachineName
Adjust memory quotas for a process Local service
Adjust memory quotas for a process Network service
Bypass traverse checking IIS_WPG
Allow log on locally (see Note) Administrators
Allow log on locally (see Note) IUSR_MachineName
Deny logon locally ASPNET
Impersonate a client after authentication Administrators
Impersonate a client after authentication ASPNET
Impersonate a client after authentication IIS_WPG
Impersonate a client after authentication Service
Log on as a batch job ASPNET
Log on as a batch job IIS_WPG
Log on as a batch job IUSR_MachineName
Log on as a batch job IWAM_MachineName
Log on as a batch job Local service
Logon as a service ASPNET
Logon as a service Network service
Replace a process level token IWAM_MachineName
Replace a process level token Local service
Replace a process level token Network service
Note In a new default installation of Microsoft Windows Server 2003 with IIS 6.0, the Users group and the Everyone group have Bypass traverse checking permissions. The worker process identity inherits Bypass traverse checking permissions through one of these groups. If both groups are removed from Bypass traverse checking permissions, and the worker process identity does not inherit Bypass traverse checking permissions through any other assignment, the worker process does not start. If the Users group and the Everyone group must be removed from the Bypass traverse checking permissions, add the IIS_WPG group to permit IIS to function as expected.
Note In IIS 6.0, when Basic authentication is configured as one of the authentication options, the LogonMethod metabase property for Basic authentication is NETWORK_CLEARTEXT. The NETWORK_CLEARTEXT logon type does not require the Allow log on locally user right. This also applies to Anonymous authentication. For additional information, see the "Basic Authentication Default Logon Type" topic in IIS Help. You can also visit the following Microsoft Web site:
Basic authentication
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol
/windowsserver2003/proddocs/standard/sec_auth_basicauth.asp?frame=true
REFERENCES
For additional information about how to implement and manage IIS security, visit the following Microsoft Web sites:
Windows Server 2003 Security Guide
http://go.microsoft.com/fwlink/?LinkId=14845
TechNet
http://www.microsoft.com/technet/security/prodtech/iis/default.mspx
Security how-to resources
http://www.microsoft.com/technet/itsolutions/howto/sechow.mspx
Improving Web application security: threats and countermeasures
http://msdn.microsoft.com/library/en-us/dnnetsec/html/ThreatCounter.asp
This article describes the default permissions and the user rights on a newly installed application server that has Internet Information Services (IIS) 6.0 installed.
MORE INFORMATION
The following tables document the NTFS file system permissions, registry permissions, and Microsoft Windows user rights. This information applies if Microsoft ASP.NET is included as part of the installation suite. This article focuses on the World Wide Web Publishing Service and does not consider other components, such as the File Transfer Protocol (FTP) service, the Simple Mail Transfer Protocol (SMTP) service, and Microsoft FrontPage Server Extensions (FPSE).
Note For the purposes of this document, the IUSR_MachineName account is used interchangeably with a configured anonymous account.
NTFS permissions
Directory Users\Groups Permissions
%windir%\help\iishelp\common Administrators Full control
%windir%\help\iishelp\common System Full control
%windir%\help\iishelp\common IIS_WPG Read
%windir%\help\iishelp\common Users (See Note 1.) Read, execute
%windir%\IIS Temporary Compressed Files Administrators Full control
%windir%\IIS Temporary Compressed Files System Full control
%windir%\IIS Temporary Compressed Files IIS_WPG List, read, write
%windir%\IIS Temporary Compressed Files Creator owner Full control
%windir%\system32\inetsrv Administrators Full control
%windir%\system32\inetsrv System Full control
%windir%\system32\inetsrv Users Read, execute
%windir%\system32\inetsrv\*.vbs Administrators Full control
%windir%\system32\inetsrv\ASP compiled templates Administrators Full control
%windir%\system32\inetsrv\ASP compiled templates IIS_WPG Read
%windir%\system32\inetsrv\History Administrators Full control
%windir%\system32\inetsrv\History System Full control
%windir%\system32\Logfiles Administrators Full control
%windir%\system32\inetsrv\metaback Administrators Full control
%windir%\system32\inetsrv\metaback System Full control
Inetpub\Adminscripts Administrators Full control
Inetpub\wwwroot (or content directories) Administrators Full control
Inetpub\wwwroot (or content directories) System Full control
Inetpub\wwwroot (or content directories) IIS_WPG Read, execute
Inetpub\wwwroot (or content directories) IUSR_MachineName Read, execute
Inetpub\wwwroot (or content directories) ASPNET (See Note 2.) Read, execute
Note 1 You must have permissions to this directory when you use Basic authentication or Integrated authentication and when custom errors are configured. For example, when error 401.1 occurs, the logged-on user sees the expected detailed custom error only if permissions to read the 4011.htm file have been granted to that user.
Note 2 By default, ASP.NET is used as the ASP.NET process identity in IIS 5.0 isolation mode. If ASP.NET is switched to IIS 5.0 isolation mode, ASP.NET must have access to the content areas. ASP.NET process isolation is detailed in IIS Help. For additional information, visit the following Microsoft Web site:
ASP.NET process isolation
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol
/windowsserver2003/proddocs/standard/aaconruntimeprocessisolation.asp
Registry permissions
Location Users\Groups Permissions
HKLM\System\CurrentControlSet\Service\ASP Administrators Full control
HKLM\System\CurrentControlSet\Service\ASP System Full control
HKLM\System\CurrentControlSet\Service\ASP IIS_WPG Read
HKLM\System\CurrentControlSet\Service\HTTP Administrators Full control
HKLM\System\CurrentControlSet\Service\HTTP System Full control
HKLM\System\CurrentControlSet\Service\HTTP IIS_WPG Read
HKLM\System\CurrentControlSet\Service\IISAdmin Administrators Full control
HKLM\System\CurrentControlSet\Service\IISAdmin System Full control
HKLM\System\CurrentControlSet\Service\IISAdmin IIS_WPG Read
HKLM\System\CurrentControlSet\Service\w3svc Administrators Full control
HKLM\System\CurrentControlSet\Service\w3svc System Full control
HKLM\System\CurrentControlSet\Service\w3svc IIS_WPG Read
Windows User Rights
Policy Users
Access this computer from the network Administrators
Access this computer from the network ASPNET
Access this computer from the network IUSR_MachineName
Access this computer from the network IWAM_MachineName
Access this computer from the network Users
Adjust memory quotas for a process Administrators
Adjust memory quotas for a process IWAM_MachineName
Adjust memory quotas for a process Local service
Adjust memory quotas for a process Network service
Bypass traverse checking IIS_WPG
Allow log on locally (see Note) Administrators
Allow log on locally (see Note) IUSR_MachineName
Deny logon locally ASPNET
Impersonate a client after authentication Administrators
Impersonate a client after authentication ASPNET
Impersonate a client after authentication IIS_WPG
Impersonate a client after authentication Service
Log on as a batch job ASPNET
Log on as a batch job IIS_WPG
Log on as a batch job IUSR_MachineName
Log on as a batch job IWAM_MachineName
Log on as a batch job Local service
Logon as a service ASPNET
Logon as a service Network service
Replace a process level token IWAM_MachineName
Replace a process level token Local service
Replace a process level token Network service
Note In a new default installation of Microsoft Windows Server 2003 with IIS 6.0, the Users group and the Everyone group have Bypass traverse checking permissions. The worker process identity inherits Bypass traverse checking permissions through one of these groups. If both groups are removed from Bypass traverse checking permissions, and the worker process identity does not inherit Bypass traverse checking permissions through any other assignment, the worker process does not start. If the Users group and the Everyone group must be removed from the Bypass traverse checking permissions, add the IIS_WPG group to permit IIS to function as expected.
Note In IIS 6.0, when Basic authentication is configured as one of the authentication options, the LogonMethod metabase property for Basic authentication is NETWORK_CLEARTEXT. The NETWORK_CLEARTEXT logon type does not require the Allow log on locally user right. This also applies to Anonymous authentication. For additional information, see the "Basic Authentication Default Logon Type" topic in IIS Help. You can also visit the following Microsoft Web site:
Basic authentication
http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol
/windowsserver2003/proddocs/standard/sec_auth_basicauth.asp?frame=true
REFERENCES
For additional information about how to implement and manage IIS security, visit the following Microsoft Web sites:
Windows Server 2003 Security Guide
http://go.microsoft.com/fwlink/?LinkId=14845
TechNet
http://www.microsoft.com/technet/security/prodtech/iis/default.mspx
Security how-to resources
http://www.microsoft.com/technet/itsolutions/howto/sechow.mspx
Improving Web application security: threats and countermeasures
http://msdn.microsoft.com/library/en-us/dnnetsec/html/ThreatCounter.asp
Mar
14
MySQL server has gone away错误
本小节也涉及有关Lost connection to server during query的错误。
对MySQL server has gone away错误最常见的原因是服务器超时了并且关闭了连接。缺省地,如果没有事情发生,服务器在 8个小时后关闭连接。你可在启动mysqld时通过设置wait_timeout变量改变时间限制。
你可以通过执行mysqladmin version并且检验正常运行的时间来检查MySQL还没死掉。
如果你有一个脚本,你只须再发出查询让客护进行一次自动的重新连接。
在这种请下,你通常能获得下列错误代码(你得到的是OS相关的):
CR_SERVER_GONE_ERROR 客户不能发送一个问题给服务器。
CR_SERVER_LOST 当写服务器时,客户没有出错,但是它没有得到对问题的一个完整的答案(或任何答案)。
如果你向服务器发送不正确的或太大的查询,你也可能得到这些错误。如果mysqld得到一个太大或不正常的包,它认为客户出错了并关闭连接。如果你需要较大的查询(例如,如果你正在处理较大的BLOB列),你可以使用-O max_allowed_packet=#选项(缺省1M)启动mysqld以增加查询限制。多余的内存按需分配,这样mysqld只有在你发出较大差询时或mysqld必须返回较大的结果行时,才使用更多的内存!
Can't connect to [local] MySQL server错误
一个MySQL客户可以两种不同的方式连接mysqld服务器:Unix套接字,它通过在文件系统中的一个文件(缺省“/tmp/mysqld.sock”)进行连接;或TCP/IP,它通过一个端口号连接。Unix套接字比TCP/IP更快,但是只有用在连接同一台计算机上的服务器。如果你不指定主机名或如果你指定特殊的主机名localhost,使用Unix套接字。
错误(2002)Can't connect to ...通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时,你正在使用一个错误的套接字文件或TCP/IP端口。
由检查(使用ps)在你的服务器上有一个名为mysqld的进程启动!如果没有任何mysqld过程,你应该启动一个。见4.15.2 启动MySQL服务器的问题。
如果一个mysqld过程正在运行,你可以通过尝试这些不同的连接来检查服务器(当然,端口号和套接字路径名可能在你的安装中是不同的):
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --socket=/tmp/mysql.sock version
注意hostname命令使用反引号“`”而非正引号“'”;这些导致hostname输出(即,当前主机名)被代替进mysqladmin命令中。
这是可能造成Can't connect to local MySQL server错误的一些原因:
mysqld不在运行。
你正在使用MIT-pthreads的一个系统上运行。如果正在运行在一个没有原生线程的系统上,mysqld使用 MIT-pthreads 软件包。见4.2 由MySQL支持的操作系统。然而,MIT-pthreads不支持Unix套接字,因此当与服务器连接时,在这样一个系统上,你总是必须明确地指定主机名。试试使用这个命令检查到服务器的连接:
shell> mysqladmin -h `hostname` version
某人删除了mysqld使用的Unix套接字(缺省“/tmp/mysqld.sock”)。你可能有一个cron任务删除了MySQL套接字(例如,一个把旧文件从“/tmp”目录中删除的任务)。你总是可以运行mysqladmin version并且检查mysqladmin正在试图使用的套接字确实存在。在这种情况下,修复方法是删除cron任务而不删除“mysqld.sock 或将套接字放在其他地方。你能用这个命令在MySQL配置时指定一个不同的套接字地点:
shell> ./configure --with-unix-socket-path=/path/to/socket
你也可以使用--socket=/path/to/socket选项启动safe_mysqld和在启动你的MySQL客户前设置环境变量MYSQL_UNIX_PORT为套接字路径名。你可用--socket=/path/to/socket选项启动mysqld服务器。如果你改变了服务器的套接字路径名,你也必须通知MySQL客户关于新路径的情况。你可以通过设置环境变量MYSQL_UNIX_PORT为套接字路径名或由提供套接字路径名作为客户的参数做到。你可用这个命令测试套接字:
shell> mysqladmin --socket=/path/to/socket version
你正在使用 Linux和线程已经死了(核心倾倒了)。在这种情况中,你必须杀死其它mysqld线程(例如在启动一个新的MySQL服务器之前,可以用mysql_zap脚本)。见18.1 如果MySQL总是崩溃怎么办。
如果你得到错误Can't connect to MySQL server on some_hostname,你可以尝试下列步骤找出问题是什么:
通过执行telnet your-host-name tcp-ip-port-number并且按几次回车来检查服务器是否正常运行。如果有一个MySQL运行在这个端口上,你应该得到一个包含正在运行的MySQL服务器的版本号的应答。如果你得到类似于telnet: Unable to connect to remote host: Connection refused的一个错误,那么没有服务器在使用的端口上运行。
尝试连接本地机器上的mysqld守护进程,并用mysqladmin variables检查mysqld被配置使用的TCP/IP端口(变量port)。
检查你的mysqld服务器没有用--skip-networking选项启动。
Host '...' is blocked错误
如果你得到象这样的一个错误:
Host 'hostname' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
这意味着,mysqld已经得到了大量(max_connect_errors)的主机'hostname'的在中途被中断了的连接请求。在max_connect_errors次失败请求后,mysqld认定出错了(象来字一个黑客的攻击),并且阻止该站点进一步的连接,直到某人执行命令mysqladmin flush-hosts。
缺省地,mysqld在10个连接错误后阻塞一台主机。你可以通过象这样启动服务器很容易地调整它:
shell> safe_mysqld -O max_connect_errors=10000 &
注意,对给定的主机,如果得到这条错误消息,你应该首先检查该主机的TCP/IP连接有没有问题。如果你的TCP/IP连接不在运行,增加max_connect_errors变量的值对你也不会有帮助!
Too many connections错误
如果在你试土连接MySQL时,你得到错误Too many connections,这意味着已经有max_connections个客户连接了mysqld服务器。
如果你需要比缺省(100)更多的连接,那么你应该重启mysqld,用更大的 max_connections 变量值。
注意,mysqld实际上允许(max_connections+1)个客户连接。最后一个连接是为一个用Process权限的用户保留的。通过不把这个权限给一般用户(他们不应该需要它),有这个权限一个管理员可以登录并且使用SHOW PROCESSLIST找出什么可能出错。见7.21 SHOW句法(得到表,列的信息)。
Out of memory错误
如果你发出查询并且得到类似于下面的错误:
mysql: Out of memory at line 42, 'malloc.c'
mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)
ERROR 2008: MySQL client ran out of memory
注意,错误指向了MySQL客户mysql。这个错误的原因很简单,客户没有足够的内存存储全部结果。
为了修正这个问题,首先检查你的查询是否正确。它应该返回这么多的行,这合理吗?如果是这样,你可以使用mysql --quick,它使用mysql_use_result()检索结果集合。这将较少的负担放在了客户端(只是服务器更多)。
Packet too large错误
当一个MySQL客户或mysqld服务器得到一个比max_allowed_packet个字节长的包,它发出一个Packet too large错误并终止连接。
如果你正在使用mysql客户,你可以通过用mysql --set-variable=max_allowed_packet=8M指定一个更大的缓冲区来启动客户程序。
如果你正在使用不允许你指定最大包大小的其他客户(例如 DBI),你需要在你启动服务器时设置包大小。你可以使用mysqld的命令行选项设置max_allowed_packet为一个更大的尺寸。例如,如果你正期望将一个全长的BLOB存入一张表中,你将需要用--set-variable=max_allowed_packet=24M选项来启动服务器。
The table is full错误
这个错误发生在内存临时表变得比tmp_table_size字节大时。为了避免这个问题,你可以使用mysqld的-O tmp_table_size=#选项来增加临时表的大小,或在你发出有疑问的查询之前使用SQL选项SQL_BIG_TABLES。见7.25 SET OPTION句法。
你也可以使用--big-tables选项启动mysqld。这与为所有查询使用SQL_BIG_TABLES完全相同。
Commands out of sync in client错误
如果你在你的客户代码中得到Commands out of sync; You can't run this command now,你正在以错误的次序调用客户函数!
这可能发生,例如,如果你正在使用mysql_use_result()并且在你已经调用了mysql_free_result()之前试图执行新查询。如果你在mysql_use_result()或mysql_store_result()之间试图执行返回数据的2个查询,它也可能发生。
Ignoring user错误
如果你得到下列错误:
Found wrong password for user: 'some_user@some_host'; Ignoring user
这意味着在mysqld启动时或在它再次装载权限表时,它在user表中找到了一个有一个无效口令的条目。结果,条目简单地被权限系统忽略。
可能导致这个问题的原因和修正:
你可能正在运行一个有一个老的user表的新版本mysqld。你可以通过执行mysqlshow mysql user看看口令字段是否少于 16个字符来检查它。如果是这样,你可以通过运行scripts/add_long_password脚本改正这种情况。
用户有一个老式的口令(8个字符长)并且你没使用--old-protocol选项启动mysqld。用一个新口令更新在user表中的用户或用--old-protocol重启mysqld。
你没有使用PASSWORD()函数在在user表中指定了一个口令。使用mysql以一个新口令更新在user表中的用户。确保使用PASSWORD()函数:
mysql> update user set password=PASSWORD('your password')
where user='XXX';
Table 'xxx' doesn't exist错误
如果你得到错误Table 'xxx' doesn't exist或Can't find file: 'xxx' (errno: 2),这意味着在当前数据库中没有名为xxx的表存在。
注意,因为MySQL使用目录和文件存储数据库和表,数据库和表名件是区分大小写的!(在Win32上,数据库和表名不是区分大小写的,但是在查询中对所有表的引用必须使用相同的大小写!)
你可以用SHOW TABLES检查你在当前数据库中有哪个表。
本小节也涉及有关Lost connection to server during query的错误。
对MySQL server has gone away错误最常见的原因是服务器超时了并且关闭了连接。缺省地,如果没有事情发生,服务器在 8个小时后关闭连接。你可在启动mysqld时通过设置wait_timeout变量改变时间限制。
你可以通过执行mysqladmin version并且检验正常运行的时间来检查MySQL还没死掉。
如果你有一个脚本,你只须再发出查询让客护进行一次自动的重新连接。
在这种请下,你通常能获得下列错误代码(你得到的是OS相关的):
CR_SERVER_GONE_ERROR 客户不能发送一个问题给服务器。
CR_SERVER_LOST 当写服务器时,客户没有出错,但是它没有得到对问题的一个完整的答案(或任何答案)。
如果你向服务器发送不正确的或太大的查询,你也可能得到这些错误。如果mysqld得到一个太大或不正常的包,它认为客户出错了并关闭连接。如果你需要较大的查询(例如,如果你正在处理较大的BLOB列),你可以使用-O max_allowed_packet=#选项(缺省1M)启动mysqld以增加查询限制。多余的内存按需分配,这样mysqld只有在你发出较大差询时或mysqld必须返回较大的结果行时,才使用更多的内存!
Can't connect to [local] MySQL server错误
一个MySQL客户可以两种不同的方式连接mysqld服务器:Unix套接字,它通过在文件系统中的一个文件(缺省“/tmp/mysqld.sock”)进行连接;或TCP/IP,它通过一个端口号连接。Unix套接字比TCP/IP更快,但是只有用在连接同一台计算机上的服务器。如果你不指定主机名或如果你指定特殊的主机名localhost,使用Unix套接字。
错误(2002)Can't connect to ...通常意味着没有一个MySQL服务器运行在系统上或当试图连接mysqld服务器时,你正在使用一个错误的套接字文件或TCP/IP端口。
由检查(使用ps)在你的服务器上有一个名为mysqld的进程启动!如果没有任何mysqld过程,你应该启动一个。见4.15.2 启动MySQL服务器的问题。
如果一个mysqld过程正在运行,你可以通过尝试这些不同的连接来检查服务器(当然,端口号和套接字路径名可能在你的安装中是不同的):
shell> mysqladmin version
shell> mysqladmin variables
shell> mysqladmin -h `hostname` version variables
shell> mysqladmin -h `hostname` --port=3306 version
shell> mysqladmin -h 'ip for your host' version
shell> mysqladmin --socket=/tmp/mysql.sock version
注意hostname命令使用反引号“`”而非正引号“'”;这些导致hostname输出(即,当前主机名)被代替进mysqladmin命令中。
这是可能造成Can't connect to local MySQL server错误的一些原因:
mysqld不在运行。
你正在使用MIT-pthreads的一个系统上运行。如果正在运行在一个没有原生线程的系统上,mysqld使用 MIT-pthreads 软件包。见4.2 由MySQL支持的操作系统。然而,MIT-pthreads不支持Unix套接字,因此当与服务器连接时,在这样一个系统上,你总是必须明确地指定主机名。试试使用这个命令检查到服务器的连接:
shell> mysqladmin -h `hostname` version
某人删除了mysqld使用的Unix套接字(缺省“/tmp/mysqld.sock”)。你可能有一个cron任务删除了MySQL套接字(例如,一个把旧文件从“/tmp”目录中删除的任务)。你总是可以运行mysqladmin version并且检查mysqladmin正在试图使用的套接字确实存在。在这种情况下,修复方法是删除cron任务而不删除“mysqld.sock 或将套接字放在其他地方。你能用这个命令在MySQL配置时指定一个不同的套接字地点:
shell> ./configure --with-unix-socket-path=/path/to/socket
你也可以使用--socket=/path/to/socket选项启动safe_mysqld和在启动你的MySQL客户前设置环境变量MYSQL_UNIX_PORT为套接字路径名。你可用--socket=/path/to/socket选项启动mysqld服务器。如果你改变了服务器的套接字路径名,你也必须通知MySQL客户关于新路径的情况。你可以通过设置环境变量MYSQL_UNIX_PORT为套接字路径名或由提供套接字路径名作为客户的参数做到。你可用这个命令测试套接字:
shell> mysqladmin --socket=/path/to/socket version
你正在使用 Linux和线程已经死了(核心倾倒了)。在这种情况中,你必须杀死其它mysqld线程(例如在启动一个新的MySQL服务器之前,可以用mysql_zap脚本)。见18.1 如果MySQL总是崩溃怎么办。
如果你得到错误Can't connect to MySQL server on some_hostname,你可以尝试下列步骤找出问题是什么:
通过执行telnet your-host-name tcp-ip-port-number并且按几次回车来检查服务器是否正常运行。如果有一个MySQL运行在这个端口上,你应该得到一个包含正在运行的MySQL服务器的版本号的应答。如果你得到类似于telnet: Unable to connect to remote host: Connection refused的一个错误,那么没有服务器在使用的端口上运行。
尝试连接本地机器上的mysqld守护进程,并用mysqladmin variables检查mysqld被配置使用的TCP/IP端口(变量port)。
检查你的mysqld服务器没有用--skip-networking选项启动。
Host '...' is blocked错误
如果你得到象这样的一个错误:
Host 'hostname' is blocked because of many connection errors.
Unblock with 'mysqladmin flush-hosts'
这意味着,mysqld已经得到了大量(max_connect_errors)的主机'hostname'的在中途被中断了的连接请求。在max_connect_errors次失败请求后,mysqld认定出错了(象来字一个黑客的攻击),并且阻止该站点进一步的连接,直到某人执行命令mysqladmin flush-hosts。
缺省地,mysqld在10个连接错误后阻塞一台主机。你可以通过象这样启动服务器很容易地调整它:
shell> safe_mysqld -O max_connect_errors=10000 &
注意,对给定的主机,如果得到这条错误消息,你应该首先检查该主机的TCP/IP连接有没有问题。如果你的TCP/IP连接不在运行,增加max_connect_errors变量的值对你也不会有帮助!
Too many connections错误
如果在你试土连接MySQL时,你得到错误Too many connections,这意味着已经有max_connections个客户连接了mysqld服务器。
如果你需要比缺省(100)更多的连接,那么你应该重启mysqld,用更大的 max_connections 变量值。
注意,mysqld实际上允许(max_connections+1)个客户连接。最后一个连接是为一个用Process权限的用户保留的。通过不把这个权限给一般用户(他们不应该需要它),有这个权限一个管理员可以登录并且使用SHOW PROCESSLIST找出什么可能出错。见7.21 SHOW句法(得到表,列的信息)。
Out of memory错误
如果你发出查询并且得到类似于下面的错误:
mysql: Out of memory at line 42, 'malloc.c'
mysql: needed 8136 byte (8k), memory in use: 12481367 bytes (12189k)
ERROR 2008: MySQL client ran out of memory
注意,错误指向了MySQL客户mysql。这个错误的原因很简单,客户没有足够的内存存储全部结果。
为了修正这个问题,首先检查你的查询是否正确。它应该返回这么多的行,这合理吗?如果是这样,你可以使用mysql --quick,它使用mysql_use_result()检索结果集合。这将较少的负担放在了客户端(只是服务器更多)。
Packet too large错误
当一个MySQL客户或mysqld服务器得到一个比max_allowed_packet个字节长的包,它发出一个Packet too large错误并终止连接。
如果你正在使用mysql客户,你可以通过用mysql --set-variable=max_allowed_packet=8M指定一个更大的缓冲区来启动客户程序。
如果你正在使用不允许你指定最大包大小的其他客户(例如 DBI),你需要在你启动服务器时设置包大小。你可以使用mysqld的命令行选项设置max_allowed_packet为一个更大的尺寸。例如,如果你正期望将一个全长的BLOB存入一张表中,你将需要用--set-variable=max_allowed_packet=24M选项来启动服务器。
The table is full错误
这个错误发生在内存临时表变得比tmp_table_size字节大时。为了避免这个问题,你可以使用mysqld的-O tmp_table_size=#选项来增加临时表的大小,或在你发出有疑问的查询之前使用SQL选项SQL_BIG_TABLES。见7.25 SET OPTION句法。
你也可以使用--big-tables选项启动mysqld。这与为所有查询使用SQL_BIG_TABLES完全相同。
Commands out of sync in client错误
如果你在你的客户代码中得到Commands out of sync; You can't run this command now,你正在以错误的次序调用客户函数!
这可能发生,例如,如果你正在使用mysql_use_result()并且在你已经调用了mysql_free_result()之前试图执行新查询。如果你在mysql_use_result()或mysql_store_result()之间试图执行返回数据的2个查询,它也可能发生。
Ignoring user错误
如果你得到下列错误:
Found wrong password for user: 'some_user@some_host'; Ignoring user
这意味着在mysqld启动时或在它再次装载权限表时,它在user表中找到了一个有一个无效口令的条目。结果,条目简单地被权限系统忽略。
可能导致这个问题的原因和修正:
你可能正在运行一个有一个老的user表的新版本mysqld。你可以通过执行mysqlshow mysql user看看口令字段是否少于 16个字符来检查它。如果是这样,你可以通过运行scripts/add_long_password脚本改正这种情况。
用户有一个老式的口令(8个字符长)并且你没使用--old-protocol选项启动mysqld。用一个新口令更新在user表中的用户或用--old-protocol重启mysqld。
你没有使用PASSWORD()函数在在user表中指定了一个口令。使用mysql以一个新口令更新在user表中的用户。确保使用PASSWORD()函数:
mysql> update user set password=PASSWORD('your password')
where user='XXX';
Table 'xxx' doesn't exist错误
如果你得到错误Table 'xxx' doesn't exist或Can't find file: 'xxx' (errno: 2),这意味着在当前数据库中没有名为xxx的表存在。
注意,因为MySQL使用目录和文件存储数据库和表,数据库和表名件是区分大小写的!(在Win32上,数据库和表名不是区分大小写的,但是在查询中对所有表的引用必须使用相同的大小写!)
你可以用SHOW TABLES检查你在当前数据库中有哪个表。