基于 Windows Server 2003 下的 IIS 6.0 来搭建 ASP 及 .NET 网站虚拟主机服务环境,需要进行这么几步:
下面分别研究。
安装系统环节要注意的主要是可选组件,没必要的统统去掉,添加作为 HTTP Server 所必需的组件,包括 应用程序服务器 -> ASP.NET,这个一旦勾选,相关的支持组件会自动被勾选,之后还要增加 应用程序服务器 -> Internet 信息服务(IIS) -> 文件传输协议(FTP)服务 和 应用程序服务器 -> Internet 信息服务(IIS) -> 互联网服务 -> Active Server Pages,这里重要的一点是,不必把整个组件组全部勾选,比如不必完全选中整个 Internet 信息服务(IIS),而只需要单独勾选上面指出的就行了。添加的越多安全隐患也就越大,尤其是 Web 远程管理之类的功能。
作为和 .NET 网站配套为用户提供服务的一个重要软件就是 Microsoft SQL Server 2005 数据库服务软件,一并装之。
微软家族的产品安装完成后必须要不厌其烦地坚决执行一项任务:Windows Update 或 Microsoft Update,我用正版我骄傲,升级无忧!这期间涉及到相当多的补丁,还有补丁的补丁,非关键更新最好也都安装,而且有些也是必须安装的,比如 .NET Framework 系列。
PS: 如果你是本着 “学习和研究” 的精神去 “学习和研究” Windows Server 2003 和 Microsoft SQL Server 2005,那就得本着 “学习和研究” 的精神去 “学习和研究” 一下 Windows Update 或 Microsoft Update 的破解。好在互联网上已经有很多牛人 “学习和研究” 过了,你可以很方便的 “学习和研究” 一下他们 “学习和研究” 的结果。
接下来要进行安全和性能方面的调整,互联网上有很多关于 Windows 2003 安全设置的文章,其中一篇在 这个链接,其实没必要完全照本宣科,根据文章中的精神和自己的实际情况和环境,酌情进行一些调整就行了。尤其文中提到的关于服务的调整,可以根据自己的要求和体会选择哪些自动、哪些手动、哪些禁用。其实 Windows 优化大师 是很不错的一个软件,其中关于系统的安全和性能的调整选项也很多,可以借用一下。
之后可以安装一些必要的软件,其中一个就是远程管理软件。出于安全考虑,我禁用掉了作为众矢之的的操作系统自带的远程桌面。取而代之的是安装基于 VNC 协议的软件,这些软件中,我觉得免费软件 UltraVNC 是个非常不错的选择。软件很小巧,而且性能好效率高,功能也很多,比如剪贴板共享,互传文件,这都是必不可少的最实用的功能。安装的时候注意要一并安装 Video Hook Driver,以便 UltraVNC 能高效地直接同显卡进行沟通,提高显示的质量和效率。
这些只是小小前奏,下面的环节更加重要。
作为为用户提供网站上传服务的 FTP Sevice,很多人选择 Serv-U FTP Server。我觉得有时也不是很有必要,Serv-U 大多是用于专用 FTP 服务的,而仅仅作为网站管理员在某些时候上传一下网站文件,我觉得 IIS 6.0 自带的 FTP 服务组件就足够用了。另外,Serv-U 作为一个名气很大的软件,针对它的攻击手段也是数不胜数的,网上基于 Serv-U 的提权工具都泛滥成灾了。
IIS 6.0 的 FTP 配置非常方便,可以一劳永逸。IIS 6.0 的 FTP 有一个功能叫做 隔离用户(PS: 这一功能 Linux 下的多个著名的 FTPD 软件早在 N 年前就已经具备了,而微软直到 IIS 6.0 才有),通过这个功能,用户只能限制在自己的主目录。而 IIS 实现这一功能的方式是这样的(引自官方帮助文档):
创建隔离用户的新 FTP 站点
- 在 IIS 管理器中,展开本地计算机,右键单击“FTP 站点”文件夹,指向“新建”,然后单击“FTP 站点”。
- 在“FTP 站点描述”和“IP 地址和端口设置”对话框中提供所需的信息,然后单击“下一步”。
- 在“FTP 用户隔离”对话框中,单击“隔离用户”,然后单击“下一步”。
- 完成向导的其余步骤。
- 右键单击创建的新 FTP 站点,然后单击“属性”。
- 单击“安全帐户”选项卡。如果选中了“允许匿名连接”复选框,则在“用户名”和“密码”框中键入用于验证匿名用户的用户名和密码。
- 如果允许匿名访问,请在 FTP 站点主目录下创建 LocalUser 和 LocalUser\Public 子目录。
- 如果本地计算机用户使用他们各自的帐户用户名登录(而不是作为匿名用户),请在 FTP 站点根目录下创建 LocalUser 和 LocalUser\username 子目录,以允许每个用户连接该 FTP 站点。
- 如果不同域的用户使用显式 domain\username 凭据登录,请在该 FTP 站点根目录下为每个域都创建一个子目录(使用域名)。在每个域目录下,为每个用户创建一个目录。例如,要支持用户 Sales\user1 访问,请创建 Sales 和 Sales\user1 目录。
这种方式也有不足的地方,官方文档中也有介绍:
注意 当使用该模式创建了上百个主目录时,服务器性能会下降。
所以这种方式只适合用作小规模虚拟主机的 FTP 服务,用户多了还是换别的方式好,不过我个人觉得这个性能的影响不会太大,因为毕竟这个 FTP 只是提供给网站管理员上传网站的,而这种动作并不会太频繁。
因此,根据官方文档的指示,只需新建一个 FTP 站点,把主目录指向放置虚拟主机网站文件的目录,比如此主目录为 D:\,这个 D 盘的就是安装系统是分出来专门放置网站的盘符。创建 D:\LocalUser 目录,这里要注意一点,FTP 站点主目录指向的应该是 LocalUser 目录的上级目录,也就是 D:\,而不能指向 D:\LocalUser。
FTP 设置主要有这么一些:
到这里 FTP 服务就搞定了,后面添加任何虚拟主机和帐户时都不再需要重新设置了。比如添加一个帐户名为 user 的帐户后,只要在 D:\LocalUser 目录下建立一个同名目录(user)即可,IIS 6.0 的 FTP 会自动将这个目录识别为该用户的根目录。
下面要进行 IIS 6.0 HTTP Server 的设置了。
首先可以右键点击 网站,选属性,调整这里的总设置,相当于默认设置。可能需要调整的有:
之后还需要在 Web 服务扩展 中开启 Active Server Pages。
IIS 6.0 还有一个地方很多人可能都希望调整一下,那就是上传数据的大小限制。先停止 IIS 服务,然后找到 C:\WINDOWS\system32\inetsrv\MetaBase.xml 文件,定位里面的 ASPMaxRequestEntityAllowed 处。默认为 204800 即 204800 字节(200KB),修改为想要的数字如:2048000(即 2MB)。修改后重启 IIS 服务即可。
接下来要进行一个与 ASP 相关的极其重要的安全设置,那就是给 Shell.Application、WScript.Shell、WScript.Network 这三个危险组件做手术。有人采用注销、禁用或删除的方式来对待这三个组件,我觉得这样太残忍了!这三个组件是操作系统所有的,并不是单独属于 ASP 的,只不过微软当初在设计 ASP 时,愚蠢地赋予了 ASP 调用包括这三个组件在内的一些系统组件的超能力。而完全谋杀这三个组件有可能导致将来为了某些正常目的而需要调用时出现问题。所以最好的做法是通过注册表把这三个组件更名,将来要调用的时候用新名字来调用即可,而这个新名字只有你知道,所以相当于密码加密了。
比如,在注册表里搜索 Shell.Application,将所有找到的匹配更名为 Shell.Application_xxx,并且把 Shell.Application.1 一并改掉,如改成 Shell.Application.1_xxx。三个组件都做这样的修改,这只是第一步,我们要双管齐下,修改对应的 CLASS ID。在刚才的搜索里,记录下来每个组件对应的 CLSID 的值,然后把所有这些值改掉,但要注意一致性,比如 Shell.Application 的 CLSID 可能是 {13709620-C279-11CE-A49E-444553540000},可以把它都改成 {13709620-C279-11CE-A49E-444553541234}。
这里还要对网站主目录进行一些总的权限设置,以便下级的各网站目录能够直接继承我们定制的权限。
最后,在系统中添加一个用户组 vHost,所有的网站管理帐户都放在这里面,这样的好处是方便将来统一对这个组进行一些权限设置。
IIS 的统一设置完成了,在下面的添加帐号和网站时,还有一系列复杂的操作要做。
以实例说明,比如要添加一个基于域名 test.domain.com 的虚拟主机,对应的管理帐户是 test,依次做以下操作:
创建三个帐户:test、test_iusr、test_iwam,其中 test 帐户用于网站管理员上传主页的帐号,test_iusr 为 IIS 进程访问此网站对应的专用 IIS 来宾帐户,test_iwam 为启用相关程序(如应用程序池、.NET程序)的专用 IIS 进程帐户。把三个帐户隶属于中的 Users 组去掉,然后分别设置隶属于至:test -> vHost 组、test_iusr -> Guests 组(当然也可以创建一个专用的 iusr 组)、test_iwam -> IIS_WPG 组。三个帐户分别设置密码,其中的 test 帐户密码告知网站管理员用于上传网站。
在网站主目录(本文中就是上面提提到的 D:\LocalUser)下建立 test 目录。接下来要设置此目录的权限。
在 Internet 信息服务(IIS)管理器中,新建应用程序池 AppPool_test。之后对此应用程序池设置属性,对话框中切换到 标识 选项卡,点选第二个单选按钮 配置,指定成刚才新建的 test_iwam 帐户。
新建网站,对话框中 此网站的主机头 填入 test.domain.com,以启用基于域名的虚拟主机功能,路径 指向前面新建的目录 D:\LocalUser\test,后面的 权限 中勾选 运行脚本。接着修改新建好的网站的属性,对话框中 主目录 选项卡最下面的 应用程序池 指定刚才新建的 AppPool_test,目录安全性 选项卡 编辑 身份验证和访问控制,把匿名访问的帐户改成上面的 test_iusr,ASP.NET 选项卡中把 ASP.NET 版本换成用户网站需要的版本。
自此一个虚拟主机就搭建完成,也完成了一个网站的创建。最后可以对网站做一些安全测试,比如放个 ASP 探针来检查一些设置,或者运行个木马看看那些危险组件之类的会不会被利用。
步骤比较繁琐,尤其重要的就是创建三个帐户,以及对网站的几个专用账户的设置、应用程序池的设置、目录权限的设置。这样做并不是无懈可击,只不过把每个网站的权限全部分离,不再使用 IIS 统一的 IIS来宾帐号和 IIS 进程帐号。由于 ASP 语言门槛低,虽然不乏很多优秀的程序员,但也充斥着大量的低素质编程人员,网站做得漏洞百出,可以很轻易地被利用。权限分离的好处就是,即使某个网站被黑,黑客也没办法利用这个网站的这几个专用帐户去侵害其它网站。接下来我所要做的就是通知被黑网站的管理员进行彻底的自查了。