6

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

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

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

4

1 回答 1

6

回到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 的安全指导原则中重写(窃取)的。

用你的比喻来概括:一旦窃贼越过你的电栅栏、武装警卫和野狗,你不妨让他们按下按钮关闭警报。这将避免他们把它从墙上撕下来吃掉。

于 2016-02-01T23:18:18.643 回答