- NTFS 文件系统权限:操作系统层面的权限,控制用户对网站文件(如
.html,.aspx,.php等)的读取、写入、执行等操作。 - IIS 授权规则:IIS 应用程序层面的权限,控制哪些用户或IP地址可以访问你的网站或应用程序。
核心原则: 严格的权限应该是“最小权限原则”,即只授予完成工作所必需的最小权限。

NTFS 文件系统权限
这是最底层、最根本的权限,如果用户没有NTFS权限,即使IIS允许访问,也无法访问文件。
如何访问
在文件资源管理器中,右键点击你的网站根目录(C:\inetpub\wwwroot\MySite),选择 “属性” -> “安全” 选项卡。
关键用户和组
SYSTEM(系统):必须拥有完全控制权限,这是IIS工作进程(如w3wp.exe)以SYSTEM身份运行时需要的,用于读取、写入和执行网站文件。Administrators(管理员组):通常拥有完全控制权限,方便管理员管理文件。IIS_IUSRS(IIS IIS_USRS 组):这是IIS默认的工作进程账户组。必须至少授予“读取和执行”、“列出文件夹内容”、“读取”权限,如果你的网站需要写入文件(如上传图片、生成日志),还需要授予“写入”权限。Users(用户组):这是所有 authenticated (已验证) 用户的默认组,对于大多数公共网站,应仅授予“读取和执行”、“列出文件夹内容”、“读取”权限,绝不授予“写入”权限,除非有特殊需求。Authenticated Users(已验证用户):与Users类似,但更明确,通常也只授予读取权限。Everyone(所有人):极其危险! 除非是测试环境,否则绝对不要授予此组任何权限,因为它包括了所有匿名用户和已验证用户,会带来巨大的安全风险。
最佳实践配置
对于大多数静态网站或动态网站(如 ASP.NET, PHP),一个安全的NTFS权限配置如下:
-
根目录:
(图片来源网络,侵删)SYSTEM: 完全控制Administrators: 完全控制IIS_IUSRS: 读取和执行、列出文件夹内容、读取Users或Authenticated Users: 读取和执行、列出文件夹内容、读取- (可选)如果你的网站需要用户上传文件,创建一个特定的用户组(如
WebApp_Writers),只授予该组对特定上传目录的“写入”权限,而不是整个网站。
-
特定目录:
- 包含可执行脚本的目录(如
bin,cgi-bin):SYSTEM,Administrators: 完全控制IIS_IUSRS: 读取和执行Users: 无权限
- 需要写入的目录(如
uploads,logs):SYSTEM,Administrators: 完全控制IIS_IUSRS: 修改 (或 读取和执行、列出文件夹内容、读取、写入)Users: 无权限
- 包含配置文件的目录(如
App_Data):SYSTEM,Administrators: 完全控制IIS_IUSRS: 读取和执行、列出文件夹内容、读取Users: 无权限
- 包含可执行脚本的目录(如
IIS 授权规则
IIS 授权规则在IIS管理器中设置,它决定了哪些请求能够到达你的应用程序,这些规则会覆盖NTFS权限中的一些设置,特别是对于匿名用户。
如何访问
打开 IIS 管理器 -> 选择你的网站或应用程序 -> 在 “功能视图” 中双击 “授权规则”。
关键规则类型
-
匿名授权:
(图片来源网络,侵删)- 默认启用,它允许任何用户在未提供用户名和密码的情况下访问网站。
- 匿名用户在IIS中默认映射到
IUSR账户(在IIS 7及更高版本中,这个账户通常被IIS_IUSRS组包含)。 - 如果你的网站是公开的,必须启用此规则。
- 如果你的网站需要登录才能访问(如后台管理系统),应该禁用此规则。
-
已授权用户:
- 允许所有在Windows中拥有有效账户的已验证用户访问。
- 通常与“ASP.NET impersonation”或“Windows身份验证”结合使用。
-
角色或用户组:
- 允许特定的Windows用户或用户组访问。
- 只允许
Administrators组访问网站的管理页面。
-
拒绝规则:
- 优先级最高,一旦某个请求匹配了“拒绝”规则,它就会被立即拒绝,不会再检查其他“允许”规则。
- 最佳实践: 在规则列表的顶部,添加一条“拒绝所有用户”的规则,然后在其下方添加具体的“允许”规则,这样可以确保只有你明确授权的用户才能访问。
最佳实践配置
-
公共网站(博客、企业官网等):
- 确保 “匿名授权” 规则已启用。
- (可选但推荐)添加一条 “拒绝所有用户” 的规则,并将其拖到最顶部,这样可以创建一个“默认拒绝,明确允许”的安全模型。
-
需要登录的网站(如Intranet、管理系统):
- 禁用 “匿名授权” 规则。
- 启用 “Windows 身份验证”(在IIS管理器的“身份验证”功能中)。
- 在“授权规则”中,添加一条允许特定用户或组(如
DOMAIN\YourAppUsers)的规则。
两者关系与排查流程
理解两者的关系至关重要:
请求流程:
用户请求 -> IIS 授权规则检查 -> (如果允许) -> IIS 请求文件 -> NTFS 权限检查 -> (如果允许) -> 返回文件内容
如果访问失败,请按以下步骤排查:
-
检查 IIS 授权规则:
- 在IIS管理器中,打开“授权规则”。
- 确认是否有规则阻止了访问(你忘记为匿名用户或特定IP添加允许规则)。
- 检查规则顺序,拒绝规则必须在最上方。
-
检查 NTFS 权限:
- 确认IIS工作进程账户(
IIS_IUSRS或SYSTEM)是否有足够的权限来读取和执行请求的文件。 - 确认请求的文件是否被其他用户锁定。
- 确认IIS工作进程账户(
-
检查 IIS 身份验证:
- 在IIS管理器的“身份验证”功能中,确认你启用了正确的身份验证方式。
- 对于公共网站,匿名身份验证必须启用,Windows 身份验证可以禁用。
- 对于内部网站,可以禁用匿名身份验证,启用Windows 身份验证。
| 权限类型 | 作用范围 | 核心用户/组 | 安全最佳实践 |
|---|---|---|---|
| NTFS 权限 | 操作系统文件层面 | SYSTEM, IIS_IUSRS, Users |
遵循最小权限原则,对敏感目录严格限制,避免使用 Everyone。 |
| IIS 授权规则 | IIS 应用程序访问层面 | 匿名用户, 已验证用户 | 默认拒绝,明确允许,公共网站启用匿名,内部网站禁用匿名并启用Windows身份验证。 |
通过正确配置这两个层面的权限,你可以确保你的IIS网站既能正常提供服务,又能得到最大程度的安全保护。
