【转】运行 IIS 的最小 NTFS 权限

IIS 5.0(Windows 2000)

虽然每个系统管理员可以根据各自的需求设置权限,但最好使用 Everyone 组,而不要只使用 IUSR_MACHINE 帐户。实际上,如果只为 IUSR_MACHINE 帐户添加权限,ASP 和 ASP.NET 将无法运行。如果使用 Everyone 组,当 Web 站点对匿名用户和经过身份验证的用户都有高、中或低的保护级别设置时,ASP 能够正常运行。

另外,如果只需要匿名访问,管理员可以创建 InternetGuests 本地组,然后将 IUSR_MACHINE、IWAM_MACHINE 和 ASPNET 添加到该组,将 Everyone 组替换为 InternetGuests 组。不过,Everyone 组包括 Users 组(对于经过身份验证的 Web 用户)、IUSR_MACHINE 帐户(对于匿名 HTM 访问)、IWAM_MACHINE 帐户(对于匿名 ASP 功能)以及 ASPNET(对于 ASP.NET 功能)。

IIS 5.0 使用两个单独的帐户执行 Web 页。使用匿名身份验证时,IIS 使用 IUSR_MACHINE 帐户查看 Web 页。不过,IWAM_MACHINE 用于启动一个单独的进程,该进程称为 Dllhost.exe,所有 Active Server Pages (ASP)、组件对象模型(COM)组件或其他 ISAPI 扩展(ASP 被视为 ISAPI 扩展)都在该进程内运行。这样做的目的主要是保持稳定。如果从 ASP 页调用的自定义 COM 组件崩溃(也即,导致访问冲突,从而致使进程停止),它不会影响到 Inetinfo.exe,因此 Web服务将继续运行。

IIS 5.0 中的三个保护级别如下:
低(IIS 进程):该设置与 IIS 4.0 下的默认设置类似。所有 Web 页,不论是 HTM 还是 ASP,都在 Inetinfo.exe 进程内运行。
中等(池):这是默认设置。与 IIS 4.0 相同,该设置启动称为 Dllhost.exe 的单独进程,所有 ASP 和 COM 组件都在该进程内运行。该进程由 IWAM_MACHINE 帐户启动,这也与 IIS 4.0 相同。另外,该设置也称为池,因为在 IIS 中运行的所有 Web 站点都在执行 ASP 页时共享这一个 Dllhost.exe 进程。请注意,Windows 2000 用 Dllhost.exe 替换 Mtx.exe。
高(独立):该设置为每个 Web 站点或应用程序启动专用 Dllhost.exe 进程。如果有 5 个 Web 站点,每个站点的保护级别都设为“高”,总共将有六个 Dllhost.exe 进程:五个 Dllhost.exe 进程和一个附加 Dllhost.exe 进程,该附加进程由 COM+ 在系统应用程序下启动。

推荐的设置:

1,选取整个硬盘:
System:完全控制
Administrators:完全控制;(允许将来自父系的可继承性权限传播给对象)

2,%SystemDrive%\Program Files\Common Files:
Everyone:读取及运行;列出文件目录;读取;(允许将来自父系的可继承性权限传播给对象)

3,%SystemDrive%\Inetpub\wwwroot:(在 IIS 可重定义发布目录;权限根据网站类型而定,默认为 ASP 站)
IUSR_MACHINE:读取及运行;列出文件目录;读取;(允许将来自父系的可继承性权限传播给对象)

4,%SystemRoot%\system32:
选中 Inetsrv、Certsrv (如果存在)和 Com 之外的其他所有文件夹,去除“允许将来自父系的可继承性权限传播给对象”选框,复制。

5,%SystemRoot%:
选中以下文件夹之外的其他所有文件夹:Assembly(如果有)、Downloaded Program Files、Help、IIS Temporary Compressed Files、Microsoft.NET(如果有)、Offline Web Pages、System32、Tasks、Temp 和 Web,去除“允许将来自父系的可继承性权限传播给对象”选框,复制。

6,%SystemRoot%:
Everyone:读取及运行;列出文件目录;读取;(允许将来自父系的可继承性权限传播给对象)

7,%SystemRoot%\Temp:(允许访问数据库并显示在ASP页面上)
Everyone:修改;(允许将来自父系的可继承性权限传播给对象)

附加建议:

1,%SystemRoot%\system32\intesvr\ 这个目录下不要给 Everyone 写入权限;

2,cmd.exe、net.exe 给 IUSR_MACHINE 任何操作都是“拒绝”的权限;

3,使用 PHP 环境的话,php.ini 中 display_errors 设为 OFF;

4,使用 Serv-U 的话,只给 Administrators 所有权限;

5,使用 WebEasyMail 的话,需要给安装路径(缺省时为 C:\WebEasyMail)及其所有子路径(除 \Web 子目录以外)以 Everyone 可完全控制的权限。

 

IIS 6.0(Windows Server 2003)

见以下批处理:

@echo off
echo "虚拟主机在系统分区的权限设定"

echo "删除系统分区 Everyone 的权限"
cd/
cacls "%SystemDrive%" /r "Everyone" /e
cacls "%SystemRoot%" /r "Everyone" /e
cacls "%SystemRoot%/Registration" /r "Everyone" /e
cacls "%SystemDrive%/Documents and Settings" /r "Everyone" /e

echo "删除系统分区所有 Users 的访问权限"
cd/
cacls "%SystemDrive%" /r "Users" /e
cacls "%SystemDrive%/Program Files" /r "Users" /e
cacls "%SystemDrive%/Documents and Settings" /r "Users" /e

cacls "%SystemRoot%" /r "Users" /e
cacls "%SystemRoot%/addins" /r "Users" /e
cacls "%SystemRoot%/AppPatch" /r "Users" /e
cacls "%SystemRoot%/Connection Wizard" /r "Users" /e
cacls "%SystemRoot%/Debug" /r "Users" /e
cacls "%SystemRoot%/Driver Cache" /r "Users" /e
cacls "%SystemRoot%/Help" /r "Users" /e
cacls "%SystemRoot%/IIS Temporary Compressed Files" /r "Users" /e
cacls "%SystemRoot%/java" /r "Users" /e
cacls "%SystemRoot%/msagent" /r "Users" /e
cacls "%SystemRoot%/mui" /r "Users" /e
cacls "%SystemRoot%/repair" /r "Users" /e
cacls "%SystemRoot%/Resources" /r "Users" /e
cacls "%SystemRoot%/security" /r "Users" /e
cacls "%SystemRoot%/system" /r "Users" /e
cacls "%SystemRoot%/TAPI" /r "Users" /e
cacls "%SystemRoot%/Temp" /r "Users" /e
cacls "%SystemRoot%/twain_32" /r "Users" /e
cacls "%SystemRoot%/Web" /r "Users" /e
cacls "%SystemRoot%/WinSxS" /r "Users" /e

cacls "%SystemRoot%/system32/3com_dmi" /r "Users" /e
cacls "%SystemRoot%/system32/administration" /r "Users" /e
cacls "%SystemRoot%/system32/Cache" /r "Users" /e
cacls "%SystemRoot%/system32/CatRoot2" /r "Users" /e
cacls "%SystemRoot%/system32/Com" /r "Users" /e
cacls "%SystemRoot%/system32/config" /r "Users" /e
cacls "%SystemRoot%/system32/dhcp" /r "Users" /e
cacls "%SystemRoot%/system32/drivers" /r "Users" /e
cacls "%SystemRoot%/system32/export" /r "Users" /e
cacls "%SystemRoot%/system32/icsxml" /r "Users" /e
cacls "%SystemRoot%/system32/lls" /r "Users" /e
cacls "%SystemRoot%/system32/LogFiles" /r "Users" /e
cacls "%SystemRoot%/system32/MicrosoftPassport" /r "Users" /e
cacls "%SystemRoot%/system32/mui" /r "Users" /e
cacls "%SystemRoot%/system32/oobe" /r "Users" /e
cacls "%SystemRoot%/system32/ShellExt" /r "Users" /e
cacls "%SystemRoot%/system32/wbem" /r "Users" /e

echo "添加 IIS_WPG 的访问权限"
cacls "%SystemRoot%" /g IIS_WPG:r /e
cacls "%SystemDrive%/Program Files/Common Files" /g IIS_WPG:r /e

cacls "%SystemRoot%/Downloaded Program Files" /g IIS_WPG:c /e
cacls "%SystemRoot%/Help" /g IIS_WPG:c /e
cacls "%SystemRoot%/IIS Temporary Compressed Files" /g IIS_WPG:c /e
cacls "%SystemRoot%/Offline Web Pages" /g IIS_WPG:c /e
cacls "%SystemRoot%/System32" /g IIS_WPG:c /e
cacls "%SystemRoot%/Tasks" /g IIS_WPG:c /e
cacls "%SystemRoot%/Temp" /g IIS_WPG:c /e
cacls "%SystemRoot%/Web" /g IIS_WPG:c /e

echo "添加 IIS_WPG 的访问权限 [.NET 专用]"
cacls "%SystemRoot%/Assembly" /g IIS_WPG:c /e
cacls "%SystemRoot%/Microsoft.NET" /g IIS_WPG:c /e

echo "添加 IIS_WPG 的访问权限 [装有 McAfee 软件的计算机专用]"
cacls "%SystemDrive%/Program Files/Network Associates" /g IIS_WPG:r /e

echo "添加 Users 的访问权限"
cacls "%SystemRoot%/temp" /g Users:c /e