【问题标题】:Why does PowerShell have an execution policy?为什么 PowerShell 有执行策略?
【发布时间】:2019-08-02 19:28:30
【问题描述】:

我充分理解 ExecutionPolicy 在 PowerShell 中的工作原理。我见过和做过的大部分事情都是如何禁用它。甚至还有一个命令行标志可以禁用它 (powershell -ExecutionPolicy Unrestricted ...)。

所以我的问题是为什么,而不是如何。为什么这甚至是一个功能?以我的经验,这更像是一个错误。它对我做的唯一一件事就是让我烦恼,在我看到“无法加载,因为在这个系统上禁用脚本的执行”错误之间,当我记得那个 -ExecutionPolicy 标志时。

为什么 PowerShell 会有这样的功能?这就像一个防盗警报器,在前门旁边的建筑物外面有一个开/关开关。

【问题讨论】:

  • 使用 PowerShell,您将关闭开关。窃贼不能。无限制也不是应该推荐的。 RemoteSigned 更安全。
  • 是什么阻止了我们的类似窃贼使用相同的命令行开关?
  • 对这个问题的任何答案都可能基于意见,除非 Microsoft 员工站出来发布明确的答案。投票结束。
  • 文档中有一些信息,不同可用设置的描述告诉你他们希望你如何处理它 - technet.microsoft.com/en-us/library/hh847748.aspx
  • 正如blog 认为的那样,执行策略不被视为安全功能,而是一种防止自爆的功能。这与我之前听到的一致。该博客列出了 15 种绕过执行策略的方法,表明它不是安全功能。我使用的命令行开关的一个用例是创建一个用 PS 编写的应用程序,供非 PS 精通用户使用。我不希望用户必须了解 set-executionpolicy,因此我将脚本包装在 .CMD (.bat) 文件中并使用了该选项。

标签: powershell executionpolicy


【解决方案1】:

回到ActiveX 的黑暗时代,如果用户真的想从不受信任的来源运行 ActiveX 控件,他们可以这样做。 Internet Explorer 发出的警告是为了阻止用户无意中运行恶意代码,而不是阻止该代码在任何情况下运行。

最终它是用户的浏览器,用户的计算机,他们应该可以控制它所做的一切。浏览器只是说'嘿,这可能很糟糕......'

完全相同的原则适用于 PowerShell 的执行策略。一旦 PowerShell 运行,它就可以访问用户有权访问的所有资源。

那么,作为管理员,为什么我不能阻止任何未签名的脚本运行呢?

完全阻止用户运行脚本是不可能管理的,因为如果他们有权访问 PowerShell shell,他们就可以逐行运行脚本中的命令。

作为管理员,通过授予用户对 PowerShell 的访问权限,您信任用户运行 PowerShell 代码。无论是脚本形式,还是在 PowerShell 提示符下坐下来破解。

执行策略的概念是一种确保脚本来自何处的方法。如果用户已在计算机上安装了适当的证书,并使用它签署了脚本,那么 PowerShell 将信任该脚本。 PowerShell 将信任脚本,因为用户信任证书,因为证书在用户证书存储中。如果该用户随后运行了一个被认为受信任但未由受信任证书签名的脚本,它将警告用户该脚本不受信任。

一旦到了可以运行未经授权的进程的阶段,

PowerShell.exe –ExecutionPolicy Bypass –File c:\temp\bad-script.ps1

您已经丢失了您的机器。如果用户运行它,那么遵循允许该用户运行恶意 ActiveX 代码的相同原则,他们将被允许运行恶意 PowerShell 脚本。

PowerShell 只会警告您即将做一些愚蠢的事情。它无法阻止一个坚定的白痴。

这主要是从PowerShell’s Security Guiding Principles 重写(窃取)的。

套用你的类比:一旦窃贼越过你的电栅栏、武装警卫和野蛮的狗,你不妨让他们按下按钮关闭警报。这样他们就不用把它从墙上撕下来吃掉了。

【讨论】:

  • 不错的答案@MichaelB。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-27
  • 2020-10-08
  • 2021-06-29
相关资源
最近更新 更多