windows - 在 IIs 10 上设置 AppPool,keySet 不存在
问题描述
我正在运行 Windows 2016 服务器,我们在其上运行 IIs 10,我需要能够在部署网站之前断言是否有 AppPool 设置。如果它不存在,我需要使用特定用户和密码设置 AppPool。
所有这些都是通过 Azure Devops 使用发布代理完成的。
代理以非管理员身份运行,我所有涉及的帐户都以非管理员身份运行。我根本无意运行任何管理员帐户,出于安全原因,我想为所有相关帐户提供最少的特权。
当我尝试使用设置 AppPool 时appcmd.exe
收到错误消息:
KeySet does not exist
.
当以管理员身份运行所有内容时,它可以工作(我绝对无意以管理员身份运行任何内容)。
我尝试过的:我已将非管理员帐户添加到IIS_IUSRS
组中。
确保用户对文件具有读取权限:76944fb33636aeddb9590521c2e8815a_GUID
在%ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys
文件夹中。
我在这里尝试了所有方法:使用远程计算机上的 IIS 管理器更改应用程序池的标识时出错
有谁真正知道这个问题的原因?
更新:
Microsoft明确建议应使用服务帐户运行代理,我正在这样做,并且我没有兴趣授予构建代理对 1000 台服务器的管理权限,而他们显然实际上并不需要这种权力。我想限制他们的权力,只允许他们做他们需要做的事情。我不敢相信给予一切管理员显然是常态。
解决方案
经过大量的谷歌搜索,我的意思是很多。我设法解决了这个问题。让我说,让我感到困惑的是,“最低特权帐户”在 Microsoft 和 Windows 世界中并不常见。
我发现 InfoSecMike 的这篇出色的帖子锁定了 azure devops pipelines。
我们对这个话题有完全相同的要求和意见。
您显然不需要管理员权限来更新 IIs 配置(因为那太疯狂了,对吧!?)。IIs 配置 API 不关心你有什么权限,你需要的是访问某些文件。但这没有记录。为了简单起见,Microsoft 自己告诉您,您需要成为管理员,并在最好的做法时将所有细节都埋在文档的深处。令我惊讶的是,没有人质疑它。
您需要的是以下内容:
- 完全访问 C:\Windows\System32\inetsrv\Config
- 完全访问 C:\inetpub
- 对 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\ 中三个密钥的读取权限
6de9cb26d2b98c01ec4e9e8b34824aa2_GUID (iisConfigurationKey)
d6d986f09a1ee04e24c949879fdb506c_GUID (NetFrameworkConfigurationKey)
76944fb33636aeddb9590521c2e8815a_GUID (iisWasKey)
如果您确保您的服务帐户是IIS_IUSRS组的成员,则可以获得前 2 个要点。
该组不会让您访问密钥。您需要手动将这 3 个密钥的读取权限授予代理用户。
如果您不授予对这些密钥的访问权限,您将收到晦涩的错误消息
Keyset does not exist ( exception from HRESULT : 0x8009000D)
如果您问我,这是一个不正确的错误,因为它应该IllegalAccessException
有适当的理由告诉您您无权读取密钥,因为密钥在那里,它们确实存在(漂亮的代码微软,也许您应该开源这个所以我们可以修复)。
我将带着来自 infosecmike 的这句话离开。
目标是锁定 Azure Pipeline Agent {...} 的权限。我开始用谷歌搜索,很确定我会找到实现这个目标的方法。我没有。没有找到关于这个的答案是令人惊讶的。似乎最小特权原则不再适用于 devops 世界。
这就是为什么我更喜欢 Linux 而不是 Windows。这是一个简单的任务。
推荐阅读
- javascript - 使用 fetch API javascript 时无法从数组中获取数据
- javascript - 如何在不重写的情况下将标题添加到不同的页面
- python - 再次调用函数时对列表的更改保持不变(不需要)
- c# - Convert.ChangeType 不接受 Decimal 的“1E-5”科学记数法,如何解决?
- makefile - GNU MakeFile 包括另一个带有 eval 函数的 makefile 简单问题
- r - R:ties.method = random:使用 ties.method = random 排名时如何始终获得相同的随机化
- c# - 如何在 ASP.NET Core 2.1 上的另一个 API 中调用 API
- princexml - 如何使用 PrinceXML 将 div 对齐到 PDF 中页面的底部
- powershell - 通过 Powershell 处理来自 SOAP 请求的错误代码
- javascript - 如何让我的元素占据全屏并禁用滚动?