我们有一个运行 IIS 7.5 的 Windows 2008 R2 机器,由于安全要求,我们需要将万维网发布服务设置为在 IUSR 下运行。我可以很好地授予 IUSR 文件夹权限。但是当我尝试选择 IUSR 作为万维网发布服务运行的帐户时,我收到一条消息,提示找不到该用户。目前,我们在“本地系统帐户”下运行该服务。任何帮助都将不胜感激。
答案1
IUSR 是匿名访问者浏览您的网站时使用的安全上下文。我不建议将它用于 WWW 服务。
在 IIS7.5 之前,除了本地 IUSR 帐户外,还会为您创建一个服务帐户 (IWAM),这是一个本地帐户。新模型将使用不同的应用程序池标识运行,这样如果某个网站受到攻击,一个网站就不会影响该机器上的另一个网站。我可能会考虑为 WWW 服务使用一个非特权本地帐户,以将凭据限制在该特定机器上。
我使用本地用户对 WWW 和 Windows 进程激活服务进行了测试,但 Windows 进程激活服务一直收到“此帐户权限不足”的错误消息。因此,我将本地帐户添加到 IIS_IUSRS 和任何其他与 IIS 相关的组,然后进入本地安全策略并在本地安全策略的用户权限分配中添加权限:
- 替换进程级令牌
- 调整进程的内存配额
- 生成安全审计
- 作为批处理作业登录
这不起作用,所以我在谷歌上找到了一些建议,建议这样做可能会有帮助,然后我添加了“创建全局对象”。但没用。但后来我该回家了,所以我把这一切都撤消了(尽管这是一个测试环境)。
然后我尝试
- 身份验证后模拟客户端
没什么乐趣。服务以本地系统运行,我正在使用的链接说,
本地系统帐户是一个功能强大的帐户,它对计算机具有完全访问权限,并充当网络上的计算机。如果某个服务使用本地系统帐户登录到域控制器,则该服务可以访问整个域。某些服务默认配置为使用本地系统帐户,不应更改此配置。本地系统帐户没有用户可访问的密码。
抱歉,我试过了,但我觉得你运气不好。你当然可以尝试给帐户列出的权限这里:
- SE_ASSIGNPRIMARYTOKEN_NAME(已禁用)
- SE_AUDIT_NAME(已启用)
- SE_BACKUP_NAME(已禁用)
- SE_CHANGE_NOTIFY_NAME(已启用)
- SE_CREATE_GLOBAL_NAME(已启用)
- SE_CREATE_PAGEFILE_NAME(已启用)
- SE_CREATE_PERMANENT_NAME(已启用)
- SE_CREATE_TOKEN_NAME(已禁用)
- SE_DEBUG_NAME(已启用)
- SE_IMPERSONATE_NAME(已启用)
- SE_INC_BASE_PRIORITY_NAME(已启用)
- SE_INCREASE_QUOTA_NAME(已禁用)
- SE_LOAD_DRIVER_NAME(已禁用)
- SE_LOCK_MEMORY_NAME(已启用)
- SE_MANAGE_VOLUME_NAME(已禁用)
- SE_PROF_SINGLE_PROCESS_NAME(已启用)
- SE_RESTORE_NAME(已禁用)
- SE_SECURITY_NAME(已禁用)
- SE_SHUTDOWN_NAME(已禁用)
- SE_SYSTEM_ENVIRONMENT_NAME(已禁用)
- SE_SYSTEMTIME_NAME(已禁用)
- SE_TAKE_OWNERSHIP_NAME(已禁用)
- SE_TCB_NAME(已启用)
- SE_UNDOCK_NAME(已禁用)
但也许更容易的办法是,从微软那里拿一张纸告诉你不要这样做。
答案2
我也在寻找一种方法来做到这一点。我怀疑 OP 有和我一样的要求。这将是国防部的 JITC 要求。它如下:
Check Content:
1. Go to Start, Administrative Tools, then Services.
2. Right click on service name World Wide Web Publishing Service, Select Properties, then select the Log On tab.
3. The username next to this account is the web service account ID. If any other user than IUSR is listed, continue to step 4. If the service account IUSR is used to run the service, this is not a finding.
4. Open a command prompt and enter Net User [service account ID], press Enter.
5. Verify the values for Password last set and Password expires to ensure the password has been changed in the past year, and will be required to change within the coming year.
Fix Text:
Configure the service account ID, used to run the web-site, to have its password changed at least annually or use the service account IUSR.
答案3
很多这里的错误程度。非常简短的版本:不要这样做!
我强烈怀疑您要么误解了安全要求,要么在编写时没有考虑 IIS 的设计方式。
WAS 需要以本地系统身份运行。完全无法远程访问,因此攻击面非常有限,即本地计算机管理员。
它作为本地系统运行的一个原因是,它将 applicationhost.config 划分为每个应用程序池的不同部分,每个应用程序池在 Inetpub\Temp\AppPools 中获取其自己的独立副本。
另一个是,它启动具有由 Web 管理员配置的特定身份的应用程序池工作进程(W3WP) - 例如,如果您说某个应用程序池具有 ApplicationPoolIdentity 的基本身份,那么它就是一个唯一的低特权帐户,在未冒充其他人时用作基本进程身份。
另一个缺点是,它不支持更改 WAS 的身份,并且它被设计为以本地系统身份运行。它是一个特权进程。
WWW 服务,即 InetInfo,在过去曾支持页面处理(例如最近的 Windows 2000 时间段),但现在不再支持了,可能是此项建议的目标。
但是它不再参与页面处理(IIS 6+),仅参与配置 HTTP.SYS 以供 W3WP 将来使用。
因此,应用程序池(具体来说,相关的工作进程)执行实际工作,您可以通过“应用程序池”选项卡配置其基本身份,并通过“身份验证”->“匿名”设置配置用于匿名工作的特定帐户。
在没有看到实际的书面文本或不了解其来源的情况下,某些地方似乎存在格式错误。或者,它似乎是由对标准 Win32 服务有所了解但对 IIS 了解不多的人编写的。
为了保护和隔离 IIS 站点,并看似实现了指南的目的(如果不是书面上的意思),您需要做的就是:
- 使用应用程序池标识作为匿名帐户(或 IUSR,如果您的策略要求,但它会降低安全性(因为它是一个通用共享帐户,而不是每个站点唯一的帐户)
- 设置内容权限,以便只有 IIS AppPool\AppPoolName 对内容文件夹具有读取权限
您已经完成。