核心原则:最小权限原则

在设置任何权限之前,请务必记住 “最小权限原则”,即只授予用户完成其任务所必需的最小权限,这能有效减少安全风险。

iis 网站访问权限 设置
(图片来源网络,侵删)

IIS 级别的权限 (网站级别)

这些权限在 IIS 管理器中直接配置,控制着客户端(如浏览器)可以对网站执行哪些操作,它们位于网站的 “功能视图” -> “授权规则” (Authorization Rules) 中。

如何访问:

  1. 打开 IIS 管理器
  2. 在左侧的“连接”窗格中,选择你的网站。
  3. 在中间的“功能视图”中,双击 “授权规则” (Authorization Rules)。

主要权限项:

  • 读取:允许用户浏览和下载文件,这是绝大多数网站(如静态 HTML、图片、CSS、JS 文件)的默认权限。如果网站无法显示内容,首先检查此项是否已启用。
  • 脚本:允许用户执行脚本文件(如 .asp, .aspx, .php 等),如果您的网站是动态的,需要此项。
  • 执行:这是一个非常危险的权限,它允许用户执行任何文件,包括可执行文件 (.exe) 和脚本。对于绝大多数网站,此项都应保持“无”,只有当您明确需要运行某些非脚本的可执行程序时才启用,例如某些特定的 ISAPI 过滤器。
  • 写入:允许用户上传或修改文件。此项权限应极其谨慎地授予,通常只对需要用户上传内容的特定目录(如 upload 文件夹)启用,并且要配合严格的文件类型限制,对于整个网站,通常保持禁用。
  • 浏览:当用户请求一个目录而不是文件时,是否显示该目录下的文件列表。出于安全考虑,此项通常保持“禁用”,以防止网站结构信息泄露。

授权规则:

  • 默认规则:IIS 默认会添加一条 允许所有用户 的规则,这通常意味着任何人都可匿名访问。
  • 添加规则:您可以基于特定用户或用户组来精细化控制。
    • 允许:为特定用户/组授予权限。
    • 拒绝:明确拒绝特定用户/组的访问。“拒绝”规则的优先级高于“允许”规则
    • 特定用户:可以输入 Windows 用户名、用户组名(如 IIS_IUSRS)或内置账户(如 ANONYMOUS LOGON)。

操作系统级别的权限 (文件系统级别)

这是更底层、更关键的权限控制,即使 IIS 设置了“允许写入”,如果操作系统层面禁止了 IIS 进程写入文件,那么写入操作同样会失败,这确保了即使 IIS 被攻破,攻击者也无法轻易地修改服务器上的文件。

IIS 默认使用两个特殊的账户来运行应用程序池:

  1. IIS_IUSRS:这是一个内置的用户组,用于隔离 IIS 的进程,默认情况下,IIS 应用程序池以 ApplicationPoolIdentity 身份运行,这实际上就是以 IIS_IUSRS 组的身份运行。
  2. NETWORK SERVICE:这是另一个内置账户,具有更低的权限,用于访问网络资源,一些旧版本的 IIS 可能会使用它。

如何设置:

  1. 在文件资源管理器中,导航到您的网站根目录。
  2. 右键点击该文件夹,选择 “属性”
  3. 切换到 “安全” 选项卡。
  4. 点击 “编辑...”“添加...” 来添加用户或用户组。
  5. 输入 IIS_IUSRS,点击“检查名称”确认,然后点击“确定”。

推荐的权限配置:

文件夹/文件 用户/组 权限 (建议) 说明
网站根目录 SYSTEM 完全控制 系统账户需要完全控制权限来管理文件。
Administrators 完全控制 管理员组需要完全控制权限。
IIS_IUSRS 读取和执行列出文件夹内容读取 这是最核心的设置,允许 IIS 读取和执行网站文件,但不能修改或删除。
Users 读取 允许服务器上的其他标准用户读取文件(可选,根据安全策略)。
Creator Owner 特殊 继承自父级,通常无需手动设置。
临时文件目录 (如 ASP.NET Temp) IIS_IUSRS 完全控制 ASP.NET 等技术需要在此目录编译和缓存文件,需要写入权限。
上传目录 (如 upload) IIS_IUSRS 读取写入读取和执行 仅对需要上传的目录设置,允许 IIS 写入上传的文件,但通常不应有“删除”权限,以防恶意删除。
Web.config IIS_IUSRS 读取读取和执行 配置文件通常只允许读取,不允许修改。

特别注意:

iis 网站访问权限 设置
(图片来源网络,侵删)
  • 继承:确保子文件夹和文件从父目录继承这些权限,如果不希望继承,可以手动为特定目录设置更严格的权限。
  • 不要直接给 EveryoneUsers 组过高的权限,这会带来巨大的安全风险。

综合最佳实践步骤

假设您要部署一个新的静态网站,并允许用户在 upload 文件夹上传图片。

步骤 1:设置 IIS 权限

  1. 在 IIS 管理器中,选择您的网站。
  2. 双击 “授权规则”
  3. 默认的 允许所有用户 规则对于静态网站是合适的,如果您需要更精细控制,可以删除它,
    • 点击 “添加允许规则...”
    • 角色选择 “所有用户”
    • 权限勾选 “读取”“脚本”
    • 点击“确定”。
  4. 单独为 upload 文件夹设置 IIS 权限:
    • 在 IIS 管理器左侧,选择您的网站下的 upload 文件夹。
    • 双击 “授权规则”
    • 添加一条 “允许所有用户” 的规则,并勾选 “读取”“写入” 权限。

步骤 2:设置文件系统权限

  1. 在文件资源管理器中,右键点击网站根目录,选择 “属性” -> “安全” -> “编辑”
  2. 添加 IIS_IUSRS 用户组,并授予其 “读取和执行”“列出文件夹内容”“读取” 权限。
  3. 点击“确定”。
  4. 单独为 upload 文件夹设置权限:
    • 右键点击 upload 文件夹,选择 “属性” -> “安全” -> “编辑”
    • 添加 IIS_IUSRS 用户组,并授予其 “读取和执行”“列出文件夹内容”“读取”“写入” 权限。
    • 点击“确定”。

步骤 3:验证

  1. 访问您的网站主页,确保页面正常显示。
  2. 尝试上传一张图片到 upload 文件夹,确保上传成功。
  3. 尝试删除或修改网站根目录下的一个 HTML 文件,如果操作被拒绝,则说明权限设置正确。

通过以上步骤,您就为网站建立了一个既安全又功能完备的访问权限体系。