【问题标题】:Temporarily granting elevated administrator privileges to ASP.NET code临时授予 ASP.NET 代码提升的管理员权限
【发布时间】:2011-01-26 03:22:00
【问题描述】:

我们正在尝试通过 Web 管理控制台在服务器上运行一组管理任务。控制台以当前登录用户的身份运行,并且只允许本地计算机上的管理员登录。目前它适用于大多数情况,但我们在 UAC 下运行时遇到问题。

第一个问题是一个阻止程序:管理员似乎没有获得“BUILTIN\Administrators”角色,即使他们是本地机器上的管理员。这甚至可以阻止他们进入管理控制台,因为我们使用 web.config <allow roles="BUILTIN\Administrators"> 符号来指定安全性。我怀疑这里唯一的解决方案是将 ASP.NET 应用程序作为 SYSTEM 运行,或者允许更多用户并在代码中进行更精细的权限检查。还有其他想法吗?有没有办法将提升请求注入到内置的 ASP.NET 权限检查中?

另一个问题是我们要运行一些需要管理员权限的命令。访问该站点的用户是管理员,并且被正确模拟,但是当我们生成一个进程时,由于缺乏管理员权限而失败。明确的答案是在该命令的持续时间内提升。有一些解决方案可以让我通过模拟特定的用户名和密码来临时提升权限,但我不希望不必向已经验证的用户询问他的密码。提升当前用户有什么技巧吗?

(我可以理解为什么 ASP.NET 团队可能会试图让这件事变得困难,这样网页就不能利用管理员访问网站的隐形优势......但肯定有一些方法可以以编程方式进行声明您的代码需要完整的管理员权限,适当地警告 IIS 管理员其意图?)

Windows 窗体应用有一系列答案,例如: How to elevate privileges only when required?File.Exists returning false from a network share 但我希望能找到一个适用于 ASP.NET 的...

谢谢 史蒂夫

【问题讨论】:

  • 我也有这个问题。你找到答案了吗?
  • 也在寻找这个问题的答案。
  • 您是否曾经使用过我在回答中提供的任何资源?还是您采取了替代路线?
  • 嗨,彼得 - 这么多年过去了,感谢您的提醒 :) 当我在 2010 年 3 月没有立即得到任何答复时,我自己想通了。我希望我能发布我解决这个问题的确切方法,但我不再在公司工作,所以我无法再访问源代码(而且我不再使用 .NET)
  • 如果我没记错的话,它与“机器管理员”权限被隐藏有关,即。当您冒充时,它会从您的身份令牌中删除该部分,除非您明确要求对其进行维护。我相信要进行调用并保留正确的凭据,我必须包装一个 DLL 函数而不是使用 .NET 函数。

标签: asp.net security impersonation elevated-privileges


【解决方案1】:

通过在 Active Directory 中启用服务器进行委派,我们能够从当前访问网站的用户中获得“更高”的模拟级别。根据 Microsoft,You can think of delegation as a more powerful form of impersonation, as it enables impersonation across a network. 您可能不需要通过网络,但它可能会解决您的安全问题。

这里有一些关于设置委托的资源,希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 2020-09-04
    • 2015-06-19
    • 2013-09-22
    • 2020-12-11
    • 1970-01-01
    • 2012-07-12
    • 2018-11-12
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多