为什么 PowerShell 有执行策略?

Why does PowerShell have an execution policy?

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

所以我的问题是为什么,而不是如何。为什么这甚至是一个功能?根据我的经验,这更像是一个错误;在我看到 "cannot be loaded because the execution of scripts is disabled on this system" 错误和我记起那个 -ExecutionPolicy 标志之间,它对我所做的唯一一件事就是惹恼我。

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

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

最终它是用户的浏览器,用户的电脑,他们应该控制它所做的一切。浏览器只是说 'hey, this could be bad...'

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

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

完全阻止用户 运行 执行脚本将无法管​​理,因为如果他们有权访问 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 重写(窃取)的。

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