如何禁止普通用户终止进程?

Posted

技术标签:

【中文标题】如何禁止普通用户终止进程?【英文标题】:how to forbid process termination by regular user? 【发布时间】:2011-07-26 08:18:50 【问题描述】:

我无法将其实现为 Windows 服务,因为我的进程必须与桌面交互,并且在 Windows 7 中被禁止。

完成此任务的最简单方法是什么?从另一个(特权)用户开始?如何做到这一点?

我的用户不是黑客,只是一个操作员,所以一些“愚蠢”的方法,比如从任务管理器中隐藏也会有所帮助。

编辑:根据提供的答案进行一些澄清

我的进程没有任何 GUI,所以我试图避免从任务管理器中杀死该进程

我的进程是一个监控系统的客户端,它必须监控用户的桌面,所以它必须与桌面交互

编辑 2:

我可以使用 Windows 服务在系统帐户下的用户会话中启动单独的进程吗(因为我的服务在系统帐户下运行)?用户可以杀死这个子进程吗?

【问题讨论】:

Prevent user process from being killed with "End Process" from Process Explorer的可能重复 【参考方案1】:

您可以使用组策略disable the task manager 并隐藏应用程序窗口中的关闭按钮以及 [Alt+F4] 上的反应。

【讨论】:

修复比问题更糟糕吗?任务管理器是一个关键的诊断工具。当然,这不是列出/操作 Windows 内置进程的唯一方法(例如,PSH 中的Stop-Process)。 @Richard:我的用户不需要诊断系统,他们有专门的技术人员。可能这是我要求的一种可接受的“愚蠢”方法,仍在等待其他建议...... @AndyT:我避免对您所说的“操作员”(例如帮助台操作员)做出假设。 Don't use global state to manage a local problem.【参考方案2】:

经过长时间的挖掘,我在这里找到了可以接受的答案:Prevent user process from being killed with "End Process" from Process Explorer

如果您以普通用户身份登录,则可以正常工作,您无法从 Process Explorer 中终止该进程。管理员仍然可以杀死它,因为有足够的权限。这正是我所需要的

【讨论】:

【参考方案3】:

关闭(根)窗口并不意味着停止进程——当消息泵循环存在时,您可以使用新窗口重新启动它(显然,如果您使用的是框架,则可能有一个包装器) .

但如果用户拥有一个 windows 对象(如进程),他们总是可以删除(终止)它。但是,作为不同的用户运行,用户的凭据需要以一种可供当前用户运行的启动器访问的方式存储。

为了更具体地提供帮助,我认为我们需要了解原因:

因为我的进程必须与桌面交互

是一个要求。

【讨论】:

第一个选项(有效地忽略WM_CLOSE)对于所述目标来说已经足够了。考虑到上下文,幸存TerminateProcess() 可能是矫枉过正。【参考方案4】:

来自MSDN blog:


这就是你的做法:

通过调用获取用户令牌

WTSQueryUserToken (WTSGetActiveConsoleSessionId (), &hToken) ;     

在 CreateProcessAsUser 中使用此令牌。


您只需从您的服务中调用WTSQueryUserToken,然后启动该进程 - 它也适用于 Windows 7!

【讨论】:

+1 非常有趣的链接。但这不是一个完整的故事!按照您的建议,我将在登录用户下创建交互式进程,因此它可以由该登录用户终止。我尽量避免这种情况。如何在系统帐户下运行此服务?该博客文章中的1.B 案例听起来很相似。因此,我可以在登录帐户(如您所述)下创建临时进程,并从那里创建带有系统帐户令牌的 CreateProcessAsUser。但是如何将系统帐户令牌从我的服务传递到该临时进程? 我了解您的问题。不知道“如何”实现这一点,但这是可能的 - 尽管 NAV 的进程“ccSvcHst.exe”在我的用户帐户下运行,但我无法终止它。它可能使用SetKernelObjectSecurity 删除帐户的所有ACL(或将它们设置为“拒绝”)。

以上是关于如何禁止普通用户终止进程?的主要内容,如果未能解决你的问题,请参考以下文章

小技巧当对服务器做大负荷操作,如何禁止普通用户登录

linux禁止普通用户登录

禁止普通用户使用su命令切换到root用户

Linux脚本练习之script015-实现禁止和允许普通用户登录系统。

linux 禁止普通用户使用su切换到root用户和禁止 root ssh登陆

GDM, GNOME3禁止普通用户操作电源管理按钮