Почему PowerShell имеет политику выполнения
Я достаточно хорошо понимаю, как ExecutionPolicy работает в PowerShell. Большая часть того, что я видел и делал, это как его отключить. Есть даже флаг командной строки для его отключения (powershell -ExecutionPolicy Unrestricted ...).
Так что мой вопрос почему, а не как. Почему это вообще особенность? По моему опыту, это скорее неудача; единственное, что он когда-либо делал для меня, это раздражал меня, между тем, как я вижу ошибку "невозможно загрузить, потому что выполнение сценариев отключено в этой системе", и когда я вспоминаю об этом флаге -ExecutionPolicy.
Почему PowerShell имеет такую функцию? Это как охранная сигнализация с выключателем на внешней стороне здания рядом с входной дверью.
(извиняюсь, если на этот вопрос уже был дан другой ответ)
1 ответ
Еще в темные дни ActiveX, если пользователь действительно хотел запустить элемент управления ActiveX из ненадежного источника, он мог бы это сделать. Предупреждения, которые дал IE, были направлены на то, чтобы пользователи не запускали злонамеренный код непреднамеренно, чтобы не допустить запуска этого кода в любой ситуации. В конечном счете, это браузер пользователя, компьютер пользователя, и они должны контролировать все, что он делает. Браузер просто говорит: "Эй, это может быть плохо..."
Точно такой же принцип действует для политики выполнения Powershell. После запуска Powershell он получает доступ ко всем ресурсам, к которым имеет доступ пользователь.
Так почему же я как администратор не могу запретить запуск любого неподписанного скрипта?
Полностью запретить пользователю запускать скрипт невозможно, потому что, если у него есть доступ к оболочке PS, он может просто построчно запускать команды внутри скрипта.
Как администратор, предоставляя пользователю доступ к Powershell, вы доверяете пользователю запускать код Powershell. Будь то в форме сценария или сидя и взламывая приглашение PS.
Концепция политики выполнения - это способ убедиться, от кого исходит сценарий. Если пользователь установил соответствующий сертификат на компьютере и подписал с ним скрипт, то Powershell будет доверять этому сценарию. Powershell будет доверять сценарию, потому что пользователь доверяет сертификату, потому что сертификат находится в хранилище сертификатов пользователей. Если этот пользователь затем запускает сценарий, который считается доверенным, но не подписан доверенным сертификатом, он предупредит пользователя о том, что сценарий не является доверенным.
Как только вы дойдете до стадии, где может выполняться неавторизованный процесс
PowerShell.exe –ExecutionPolicy Bypass –File c:\temp\bad-script.ps1
Вы уже потеряли свою машину. Если пользователь запускает это, то, следуя тем же принципам, которые позволили ему запускать вредоносный ActiveX, ему будет разрешено запускать вредоносные сценарии Powershell.
Powershell только предупредит, что вы собираетесь сделать что-то глупое. Это не может остановить решительного идиота.
В основном это было переписано (украдено) из Руководства по безопасности PowerShell
Чтобы обернуть это вокруг вашей аналогии. Как только грабитель пролетел мимо вашего электрического забора, вооруженных охранников и диких собак, вы можете просто позволить им нажать кнопку, чтобы выключить будильник. Это спасет их от отрыва от стены и съедения.