这个过程可以分为两个层面,两者相辅相成,缺一不可:

- NTFS 文件系统权限:操作系统级别的权限,是安全的第一道,也是最根本的一道防线。
- IIS 网站权限:IIS 应用程序级别的权限,主要控制 IIS 进程本身对网站的访问。
核心原则:最小权限原则
在进行任何权限设置时,请始终牢记 最小权限原则,即只授予完成特定任务所必需的最小权限,不多不少,这样可以最大限度地减少因权限过高导致的安全风险(网站被上传并执行恶意脚本)。
第一步:设置 NTFS 文件系统权限 (最关键)
这是权限设置的核心,NTFS 权限直接控制着谁能访问你的文件。
如何访问权限设置?
在 IIS 管理器中,选中你的网站或某个目录,在右侧的 “操作” 窗格中点击 “编辑权限...”,这会弹出该目录的 “属性” 对话框,并直接定位到 “安全” 选项卡。
关键用户和用户组
你需要关注以下几个核心用户/组:

SYSTEM(系统):拥有最高权限,通常需要保留此权限,许多系统服务(包括 IIS)都需要它来正常运行和管理文件。Administrators(管理员组):拥有完全控制权,保留此权限方便管理员进行维护。IIS_IUSRS:这是 IIS 默认的匿名访问账户组,当用户通过浏览器匿名访问你的网站时,实际上就是以这个组的身份在请求文件。这是权限设置的重点对象。YourServerName\IUSR:在某些旧版本或特定配置的 Windows Server 上,IIS 可能使用一个名为IUSR的特定账户,但在现代系统中,推荐使用IIS_IUSRS组。Users(用户组):这是所有已登录用户的通用组,需要非常小心地授予此组权限,范围过大会带来安全风险。
标准权限配置(推荐方案)
以下是一个针对不同目录类型的推荐权限配置,请确保 “高级” 设置中的 “从父项继承权限” 是开启的,然后再进行修改。
网站主目录 (C:\inetpub\wwwroot\MySite)
这是网站的根目录,需要非常谨慎地设置权限。
- 默认继承:确保权限从父目录继承。
- 添加
IIS_IUSRS组:- 点击 “编辑...” -> “添加...” -> 输入
IIS_IUSRS并检查名称 -> “确定”。 - 选中
IIS_IUSRS,在下方权限列表中,仅勾选 “读取和执行”、“列出文件夹内容”、“读取”。 - 不要勾选 “写入” 或 “完全控制”,除非你的网站有非常特殊的需求(比如一个允许用户上传任意文件的公共网盘),否则绝对不要给匿名用户写入权限。
- 点击 “编辑...” -> “添加...” -> 输入
- 添加
SYSTEM和Administrators组:- 这两个组通常已经有完全控制权限,保持默认即可,如果需要,可以将其权限修改为 “完全控制”,方便管理。
- 移除不必要的用户:
- 检查用户列表,移除
Users组(除非你有特殊需求),如果网站必须允许所有登录到服务器的用户访问,再考虑添加Users组,并同样只授予“读取”权限。
- 检查用户列表,移除
主目录最终权限列表应大致如下:
SYSTEM:完全控制Administrators:完全控制IIS_IUSRS:读取和执行、列出文件夹内容、读取
应用程序临时目录 (C:\inetpub\temp\appPools)
这个目录用于存放 ASP.NET 等技术编译后的临时文件,IIS 应用程序池需要写入权限。
- 权限配置:
SYSTEM:完全控制Administrators:完全控制IIS_IUSRS:需要“完全控制”权限,因为 ASP.NET 运行时需要在此目录中创建、修改和删除临时文件。- (可选)如果你的应用程序池使用了专用身份,则需授予该身份完全控制权限。
可写目录 (C:\inetpub\wwwroot\MySite\Uploads)
这是专门用于存放用户上传文件的目录。
- 权限配置:
SYSTEM:完全控制Administrators:完全控制IIS_IUSRS:需要“读取和执行”、“列出文件夹内容”、“读取”权限(为了让网站能读取并展示已上传的文件)。IIS_IUSRS:还需要“写入”权限(为了允许用户上传新文件)。- 注意:不要给
IIS_IUSRS“完全控制”权限,因为它包含了“修改”和“删除”权限,这可能带来安全风险,只给“写入”即可,如果应用需要删除文件,则需要“修改”权限。
第二步:设置 IIS 网站权限
NTFS 权限是底层权限,而 IIS 权限是 IIS 这个应用程序的“门卫”,它控制的是 IIS 进程是否“愿意”去读取某个目录。
-
如何访问 IIS 权限设置? 在 IIS 管理器中,选中你的网站,在右侧的 “操作” 窗格中点击 “编辑权限...”(注意,这里的“编辑权限”和 NTFS 的不是同一个),这会打开一个简单的对话框。
-
权限选项说明
- 读取:必须勾选,这是网站能提供网页、图片、CSS、JS 等静态文件的基础。
- 脚本:允许执行脚本(如 ASP, PHP, JSP),如果你的网站包含动态页面,需要勾选此项。
- 执行:允许执行可执行文件(如 .exe, .bat, .cmd)。强烈建议不要勾选此项,除非你明确知道你需要运行某个特定的程序,这是非常危险的权限,容易导致服务器被控制。
- 写入:允许客户端(浏览器)向服务器写入文件,文件上传功能。仅在需要上传功能的目录上勾选,并且要非常小心。
IIS 权限的设置规则: IIS 权限是“与”的关系,你勾选了“读取”和“脚本”,IIS 就会读取并执行脚本文件。最终的访问权限是由 IIS 权限和 NTFS 权限共同决定的,并且取两者中更严格的那一个。
示例:
- IIS 权限:勾选了“读取”和“脚本”。
- NTFS 权限:
IIS_IUSRS组只有“读取”权限。
最终用户只能读取文件,无法执行脚本,因为 NTFS 权限不允许执行,IIS 即使想执行也无能为力。
总结与最佳实践
-
主目录:
- NTFS:
SYSTEM(完全控制),Administrators(完全控制),IIS_IUSRS(读取和执行、列出文件夹内容、读取)。 - IIS: 勾选 “读取” 和 “脚本”。
- NTFS:
-
上传/数据目录:
- NTFS:
SYSTEM(完全控制),Administrators(完全控制),IIS_IUSRS(读取和执行、列出文件夹内容、读取、写入)。 - IIS: 勾选 “读取” 和 “写入”。
- NTFS:
-
临时目录:
- NTFS:
SYSTEM(完全控制),Administrators(完全控制),IIS_IUSRS(完全控制)。 - IIS: 通常不需要特殊设置,保持默认即可。
- NTFS:
-
禁用目录浏览:
- 在 IIS 管理器中,选中你的网站,双击 “目录浏览” 功能,在右侧操作中点击 “禁用”,这可以防止用户在访问一个不存在的文件时,看到整个目录的文件列表,避免信息泄露。
-
谨慎处理权限继承:
- 如果需要为某个子目录设置特殊的、不同于父目录的权限,可以在该子目录的“安全”选项卡中点击 “高级”,然后取消“从父项继承权限”,选择“仅将权限项目明确应用到这个容器中的对象”,这样新建的文件和文件夹将不会自动继承这些特殊权限,需要手动设置。
通过以上步骤,你可以为你的 IIS 网站建立一个既安全又高效的权限体系。
