【问题标题】:How do I temporarily lower elevation如何暂时降低海拔
【发布时间】:2014-02-20 15:53:55
【问题描述】:

场景是我以管理员身份运行服务。

我们有一个运行自定义代码的标注(想想脚本)。它使用 codedom 编译来创建程序集并创建类型并调用方法(基于代码)。

我想在调用期间暂时放弃管理员权限,然后再恢复它们。

【问题讨论】:

  • 那么,是什么阻止了你?
  • 我不知道该怎么做。我正在想象创建一个实现 IDisposable 并在构造函数中丢弃海拔并在析构函数中恢复它的类,但我不知道删除海拔并恢复它的调用是什么。我想我可能需要知道海拔的当前“状态”才能在以后恢复它。
  • 您能否从单独的进程(从服务启动)调用调用?如果可能,请参阅stackoverflow.com/q/1173630
  • 我确实在一个单独的应用程序域中运行,但该应用程序域进行编译和执行。我猜想编译需要执行不需要的权限。例如:我将我的 dll 编译到磁盘。所以我想在我实际调用代码的调用期间降低海拔。
  • 从 Windows 的角度来看,通常发生的情况是,您有一个具有较低海拔的二进制文件并调用另一个需要临时更高海拔的二进制文件。在 .NET 中,您可以创建一个“沙箱”以在较低的高度运行代码,但这必须在不同的 AppDomain 中运行。

标签: .net elevated-privileges


【解决方案1】:

我认为您不能以您描述的方式“放弃”特权;您的服务以用户身份运行,并且该用户被允许一定数量的访问权限。您可以要求 Windows 暂时授予您更多权限(这就是 UAC 的全部意义所在),但您不能要求它给予您更少的权限!

我将在系统中创建第二个用户以运行脚本(具有适当较低的访问级别)并在自定义代码期间模拟该用户。

[编辑] 结果我不知道我在说什么。根据此链接,UAC 以相反的方式实现,通过创建一组受限的权限并在该上下文中运行代码。

http://weblogs.asp.net/kennykerr/archive/2006/09/29/Windows-Vista-for-Developers-1320-Part-4-1320-User-Account-Control.aspx

【讨论】:

    【解决方案2】:

    我最终在沙盒应用程序域中运行代码,如链接中所述:

    如何:在沙盒中运行部分受信任的代码

    http://msdn.microsoft.com/en-us/library/bb763046%28v=vs.100%29.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多