安全设置IIS中的权限

虽然 Apache 的名声可能比 IIS 好,但我相信用 IIS 来作 Web 服务器的人必定也很多。说实话,我以为 IIS 仍是不错的,尤为是 Windows 2003 的 IIS 6(立刻 Longhorn Server 的 IIS 7 也就要来了,相信会更好),性能和稳定性都至关不错。可是我发现许多用 IIS 的人不太会设置 Web 服务器的权限,所以,出现漏洞被人黑掉也就不足为奇了。但咱们不该该把这归咎于 IIS 的不安全。若是对站点的每一个目录都配以正确的权限,出现漏洞被人黑掉的机会仍是很小的(Web 应用程序自己有问题和经过其它方式***黑掉服务器的除外)。下面是我在配置过程当中总结的一些经验,但愿对你们有所帮助。
IIS Web 服务器的权限设置有两个地方,一个是 NTFS 文件系统自己的权限设置,另外一个是 IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上。这两个地方是密切相关的。下面我会以实例的方式来说解如何设置权限。
IIS 下网站->站点->属性->主目录(或站点下目录->属性->目录)面板上有:
  • 脚本资源访问
  • 读取
  • 写入
  • 浏览
  • 记录访问
  • 索引资源
6 个选项。这 6 个选项中,“记录访问”和“索引资源”跟安全性关系不大,通常都设置。可是若是前面四个权限都没有设置的话,这两个权限也没有必要设置。在设置权限时,记住这个规则便可,后面的例子中再也不特别说明这两个权限的设置。
另外在这 6 个选项下面的执行权限下拉列表中还有:
  • 纯脚本
  • 纯脚本和可执行程序
3 个选项。
而网站目录若是在 NTFS 分区(推荐用这种)的话,还须要对 NTFS 分区上的这个目录设置相应权限,许多地方都介绍设置 everyone 的权限,实际上这是很差的,其实只要设置好 Internet 来宾账号(IUSR_xxxxxxx)或 IIS_WPG 组的账号权限就能够了。若是是设置 ASP、PHP 程序的目录权限,那么设置 Internet 来宾账号的权限,而对于 ASP.NET 程序,则须要设置 IIS_WPG 组的账号权限。在后面提到 NTFS 权限设置时会明确指出,没有明确指出的都是指设置 IIS 属性面板上的权限。

例1 —— ASP、PHP、ASP.NET 程序所在目录的权限设置:

若是这些程序是要执行的,那么须要设置“读取”权限,而且设置执行权限为“纯脚本”。不要设置“写入”和“脚本资源访问”,更不要设置执行权限为“纯脚本和可执行程序”。NTFS 权限中不要给 IIS_WPG 用户组和 Internet 来宾账号设置写和修改权限。若是有一些特殊的配置文件(并且配置文件自己也是 ASP、PHP 程序),则须要给这些特定的文件配置 NTFS 权限中的 Internet 来宾账号(ASP.NET 程序是 IIS_WPG 组)的写权限,而不要配置 IIS 属性面板中的“写入”权限。
IIS 面板中的“写入”权限其实是对 HTTP PUT 指令的处理,对于普通网站,通常状况下这个权限是不打开的。
IIS 面板中的“脚本资源访问”不是指能够执行脚本的权限,而是指能够访问源代码的权限,若是同时又打开“写入”权限的话,那么就很是危险了。
执行权限中“纯脚本和可执行程序”权限能够执行任意程序,包括 exe 可执行程序,若是目录同时有“写入”权限的话,那么就很容易被人上传并执行***程序了。
对于 ASP.NET 程序的目录,许多人喜欢在文件系统中设置成 Web 共享,实际上这是没有必要的。只须要在 IIS 中保证该目录为一个应用程序便可。若是所在目录在 IIS 中不是一个应用程序目录,只须要在其属性->目录面板中应用程序设置部分点建立就能够了。Web 共享会给其更多权限,可能会形成不安全因素。

例2 —— 上传目录的权限设置:

用户的网站上可能会设置一个或几个目录容许上传文件,上传的方式通常是经过 ASP、PHP、ASP.NET 等程序来完成。这时须要注意,必定要将上传目录的执行权限设为“无”,这样即便上传了 ASP、PHP 等脚本程序或者 exe 程序,也不会在用户浏览器里就触发执行。
一样,若是不须要用户用 PUT 指令上传,那么不要打开该上传目录的“写入”权限。而应该设置 NTFS 权限中的 Internet 来宾账号(ASP.NET 程序的上传目录是 IIS_WPG 组)的写权限。
若是下载时,是经过程序读取文件内容而后再转发给用户的话,那么连“读取”权限也不要设置。这样能够保证用户上传的文件只能被程序中已受权的用户所下载。而不是知道文件存放目录的用户所下载。“浏览”权限也不要打开,除非你就是但愿用户能够浏览你的上传目录,并能够选择本身想要下载的东西。

例3 —— Access 数据库所在目录的权限设置:

许多 IIS 用户经常采用将 Access 数据库更名(改成 asp 或者 aspx 后缀等)或者放在发布目录以外的方法来避免浏览者下载它们的 Access 数据库。而实际上,这是没必要要的。其实只须要将 Access 所在目录(或者该文件)的“读取”、“写入”权限都去掉就能够防止被人下载或篡改了。你没必要担忧这样你的程序会没法读取和写入你的 Access 数据库。你的程序须要的是 NTFS 上 Internet 来宾账号或 IIS_WPG 组账号的权限,你只要将这些用户的权限设置为可读可写就彻底能够保证你的程序可以正确运行了。

例4 —— 其它目录的权限设置:

你的网站下可能还有纯图片目录、纯 html 模版目录、纯客户端 js 文件目录或者样式表目录等,这些目录只须要设置“读取”权限便可,执行权限设成“无”便可。其它权限一律不须要设置。
好了,我想上面的几个例子已经包含了大部分状况下的权限设置,其它状况根据这些例子,我想你必定能够想到该如何设置了吧。