• 欢迎访问金刀客博客!
  • 2019,春节快乐!

浅谈服务器中IIS的安全设置

原创天空 admin 3894次浏览 已收录 2个评论

最近忙着服务器的安全设置的研究,从百度和G上学了不少关于IIS安全方面的知识,今天在网上看到一篇比较好的总结性的文章,写的相当好,可以说完完全全的把我的思路全连接了起来,以前在脑海中可能都是一些零碎的方法,这篇文章基本上总结了全部内容,把思路连贯了起来,加深了我对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 共享会给其更多权限,可能会造成不安全因素。
也就是说一般不要打开-主目录-(写入),(脚本资源访问) 这两项以及不要选上(纯脚本和可执行程序),选(纯脚本)就可以了.需要asp.net的应用程序的如果应用程序目录不止应用程序一个程序的可以在应用程序文件夹上(属性)-目录-点创建就可以了.不要在文件夹上选web共享.
例2 —— 上传目录的权限设置:
用户的网站上可能会设置一个或几个目录允许上传文件,上传的方式一般是通过 ASP、PHP、ASP.NET 等程序来完成。这时需要注意,一定要将上传目录的执行权限设为“无”,这样即使上传了 ASP、PHP 等脚本程序或者 exe 程序,也不会在用户浏览器里就触发执行。
同样,如果不需要用户用 PUT 指令上传,那么不要打开该上传目录的“写入”权限。而应该设置 NTFS 权限中的 Internet 来宾帐号(ASP.NET 程序的上传目录是 IIS_WPG 组)的写权限。
如果下载时,是通过程序读取文件内容然后再转发给用户的话,那么连“读取”权限也不要设置。这样可以保证用户上传的文件只能被程序中已授权的用户所下载。而不是知道文件存放目录的用户所下载。“浏览”权限也不要打开,除非你就是希望用户可以浏览你的上传目录,并可以选择自己想要下载的东西。
一般的一些asp.php等程序都有一个上传目录.比如论坛.他们继承了上面的属性可以运行脚本的.我们应该将这些目录从新设置一下属性.将(纯脚本)改成(无).
例3 —— Access 数据库所在目录的权限设置:
许多 IIS 用户常常采用将 Access 数据库改名(改为 asp 或者 aspx 后缀等)或者放在发布目录之外的方法来避免浏览者下载它们的 Access 数据库。而实际上,这是不必要的。其实只需要将 Access 所在目录(或者该文件)的“读取”、“写入”权限都去掉就可以防止被人下载或篡改了。你不必担心这样你的程序会无法读取和写入你的 Access 数据库。你的程序需要的是 NTFS 上 Internet 来宾帐号或 IIS_WPG 组帐号的权限,你只要将这些用户的权限设置为可读可写就完全可以保证你的程序能够正确运行了。
Internet 来宾帐号或 IIS_WPG 组帐号的权限可读可写.那么Access所在目录(或者该文件)的“读取”、“写入”权限都去掉就可以防止被人下载或篡改了
例4 —— 其它目录的权限设置:
你的网站下可能还有纯图片目录、纯 html 模版目录、纯客户端 js 文件目录或者样式表目录等,这些目录只需要设置“读取”权限即可,执行权限设成“无”即可。其它权限一概不需要设置。
好了,我想上面的几个例子已经包含了大部分情况下的权限设置,其它情况根据这些例子,我想你一定可以想到该如何设置了吧。

对于这篇文章我想谈几点我的想法。
1,首先分清楚2个权限:NTFS 文件系统本身的权限设置和IIS站点的设置权限,上面引用的文章说的都是在IIS中安全设置。关于“IIS 下网站->站点->属性->主目录”的安全设置,按照我的习惯,我仅仅放开“读取”和“记录访问”权限,而执行权限我设置为“无”,然后到有asp,php的目录下设置权限为“纯脚本”。
2,对于数据库目录,把“读取”的权限也取消,这样从根本上防治了数据库被下载,同时打开“我的电脑”,找到数据库的物理地址,修改它所在的文件夹的属性,如果是asp程序的数据库,那么在文件夹属性的“安全”栏目下加入“Internet 来宾帐号”,给予“读取”和“写入”权限。
3,对于新手可能不知道怎么添加这个用户,这里简单说说,
一,要使网站运行,需要添加哪一个用户,既然我们的脚本是在IIS下面运行,那么IIS用户就需要有对数据库修改的权限。这里可以从2个地方得到。第一个就是直接从查看系统用户就知道了,在windows 2003中,我的电脑-管理或者“运行”中输入compmgmt.msc打开”计算机管理“,点击系统工具-本地用户和组-用户,在右边你会看到全名为“Internet 来宾帐号”的用户,它的名称一般是以IUER-MCHL-开头。另外一个方法就是打开IIS中的站点的属性,点击“目录安全性-身份验证和访问控制”的编辑按钮,在弹出的对话框中的用户名就是IIS的用户名。如图

二,添加“Internet 来宾帐号”的方法。右击数据库所在文件夹,打开属性对话框,点击“安全-添加-高级-立即查找”,在下面的“搜索结果”中找到我们上一步确定的IIS用户,选择后一路确定之。如图


最后给新添加的用户设置权限,“读取”和“写入”。

4,关于引用文章中说的“例2 —— 上传目录的权限设置 ”,似乎并不需要添加“Internet 来宾帐号。


金刀客博客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明浅谈服务器中IIS的安全设置
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到
(2)个小伙伴在吐槽
  1. 学习了!~~
    ropean2011-03-23 15:24 回复
  2. 看刀客的文章就是能学到不少东西,嘿~~~
    admin 于 2010-10-16 02:01 AM 回复
    那就好
    mzry6662010-10-12 13:07 回复