【问题标题】:Running a process with lowest possible privileges in winapi在 winapi 中以最低权限运行进程
【发布时间】:2011-04-17 06:59:14
【问题描述】:

我正在写类似于http://ideone.com/ 的内容。目前我正在使用 CreateProcess 调用运行用户进程。如果它运行的时间比指定的时间长,我会终止该进程,但我不知道如何拒绝对创建的进程的读/写文件系统权限/创建进程权限等。给定的可执行文件实际上可以是任何东西,我只需要允许标准输入/标准输出。如果我能设置工作记忆集,那就太好了。

看了很多msdn上的文章CreateProcessAsUser FunctionCreateProcessWithLogonW Function等,但是很快就糊涂了(可能是因为我的win32知识极其有限)。 仅调用 CreateProcessAsUser 并创建具有这些有限权限的特殊用户(以及如何创建此类用户)就足够了吗?

我希望我可以在一个函数调用中使用正确的参数来实现这一点,所以请帮忙。

另外,如果你知道一些类似的开源项目,那就太好了。

谢谢。

================================================ ===========

编辑: 你好,我们又见面了 :) 我仍然坚持这一点。我没有足够的时间来处理这个问题,但我猜 snemarch 的帖子非常有用。如果有人有开箱即用的解决方案,那就太好了。如果我对 snemarch 的链接做些什么,我会发布。

【问题讨论】:

  • vmware instumentation 是不可能的?还是其他一些 vm 产品?
  • 不,这不是不可能的,但如果可能的话,我想坚持使用 win api。我愿意接受所有建议。

标签: c++ windows winapi process privileges


【解决方案1】:

看看OpenProcessTokenAdjustTokenPrivileges - 这可以让你微调(在某种程度上)你的进程的权限。您可以使用SaferCreateLevel 获得一些标准权限,例如SAFER_LEVELID_UNTRUSTED

【讨论】:

    【解决方案2】:

    考虑在job object 中运行用户进程。用户进程创建的子进程也将在同一个作业对象中结束。您可以对作业可以使用多少资源、它如何与 GUI 交互等应用特定限制(请参阅SetInformationJobObject 函数)。您可以一击杀死作业对象内的所有进程。

    【讨论】:

      【解决方案3】:

      我们有一大段代码可以做到这一点,虽然我不能发布它:(

      根据此进程的访问令牌创建一个“受限”访问令牌。然后使用此访问令牌为应用程序创建一个新进程。

      对代码有评论 - 更多信息可以在名为 "Browsing the Web and Reading E-mail safely as an Administrator". 的 MSDN 文章中找到。不过,像往常一样,MS 破坏了网络,文章不再存在。

      相关搜索发现链接到 blog linking to this article 的“DropMyRights”应用程序可能会做你想做的事,提供源代码,但这些链接在博客页面中再次损坏。

      你可能想看看像这样的函数 OpenProcessToken GetTokenInformation CreateRestrictedToken

      还有像SE_CHANGE_NOTIFY_NAME这样的特权

      【讨论】:

        猜你喜欢
        • 2013-03-04
        • 2015-01-14
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多