PowerShell
Сценарии подписания
Поиск…
замечания
Подписание сценария заставит ваши скрипты соответствовать всем политикам exeuction в PowerShell и обеспечить целостность скрипта. Подписанные сценарии не будут выполняться, если они были изменены после подписания.
Для подписания скриптов требуется сертификат подписи кода. Рекомендации:
- Персональные скрипты / тестирование (не общие): Сертификат от доверенного органа сертификации (внутреннего или стороннего) или самозаверяющего сертификата.
- Общая внутренняя организация: сертификат от доверенного органа сертификации (внутреннего или стороннего)
- Общая внешняя организация: сертификат доверенного лица, уполномоченного третьей стороны
Подробнее о about_Signing @ TechNet
Политика выполнения
У PowerShell есть настраиваемые политики выполнения, которые определяют, какие условия необходимы для сценария или конфигурации, которые будут выполнены. Политика исключения может быть установлена для нескольких областей; компьютер, текущий пользователь и текущий процесс. Политики выполнения можно легко обойти и не предназначать для ограничения пользователей, а скорее защищать их от непреднамеренного нарушения правил подписи.
Доступные политики:
настройка | Описание |
---|---|
ограниченный | Никаких сценариев не разрешено |
AllSigned | Все скрипты должны быть подписаны |
RemoteSigned | Разрешены все локальные скрипты; только подписанные удаленные сценарии |
неограниченный | Нет требований. Все сценарии разрешены, но будут предупреждать, прежде чем запускать скрипты, загруженные из Интернета |
байпас | Все сценарии разрешены и не отображаются предупреждения |
Неопределенный | Удалите текущую политику выполнения для текущей области. Использует родительскую политику. Если все политики не определены, будут использоваться ограничения. |
Вы можете изменить текущие политики выполнения с помощью Set-ExecutionPolicy
-cmdlet, групповой политики или параметра -ExecutionPolicy
при запуске процесса powershell.exe
.
Подробнее о about_Execution_Policies @ TechNet
Подписание сценария
Подписание сценария выполняется с помощью Set-AuthenticodeSignature
-cmdlet и сертификата подписи кода.
#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1
Вы также можете прочитать сертификат из .pfx
файла, используя:
$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"
Сценарий будет действителен до истечения срока действия cetificate. Если во время подписания используется timestamp-сервер, сценарий будет продолжать действовать после истечения срока действия сертификата. Также полезно добавить цепочку доверия для сертификата (включая полномочия root), чтобы помочь большинству компьютеров доверять сертифицированному, используемому для подписи скрипта.
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"
Рекомендуется использовать timestamp-сервер у доверенного поставщика сертификатов, такого как Verisign, Comodo, Thawte и т. Д.
Изменение политики выполнения с помощью Set-ExecutionPolicy
Чтобы изменить политику выполнения для области по умолчанию (LocalMachine), используйте:
Set-ExecutionPolicy AllSigned
Чтобы изменить политику для определенной области, используйте:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned
Вы можете подавить подсказки, добавив переключатель -Force
.
Обход политики выполнения для одного скрипта
Часто вам может потребоваться выполнить неподписанный скрипт, который не соответствует текущей политике выполнения. Легкий способ сделать это - обходить политику выполнения для этого единственного процесса. Пример:
powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1
Или вы можете использовать стенографию:
powershell -ep Bypass C:\MyUnsignedScript.ps1
Другие правила выполнения:
политика | Описание |
---|---|
AllSigned | Можно запускать только скрипты, подписанные доверенным издателем. |
Bypass | Нет ограничений; все сценарии Windows PowerShell могут быть запущены. |
Default | Обычно RemoteSigned , но управляется через ActiveDirectory |
RemoteSigned | Загруженные скрипты должны быть подписаны доверенным издателем, прежде чем они могут быть запущены. |
Restricted | Никакие сценарии не могут быть запущены. Windows PowerShell можно использовать только в интерактивном режиме. |
Undefined | Не Доступно |
Unrestricted * | Подобно bypass |
Unrestricted*
Caveat: если вы запускаете неподписанный скрипт, загруженный из Интернета, вам предлагается получить разрешение до его запуска.
Дополнительная информация доступна здесь .
Получить текущую политику выполнения
Получение эффективной политики выполнения для текущего сеанса:
PS> Get-ExecutionPolicy
RemoteSigned
Список всех эффективных политик выполнения для текущего сеанса:
PS> Get-ExecutionPolicy -List
Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Undefined
CurrentUser Undefined
LocalMachine RemoteSigned
Перечислите политику выполнения для определенной области, например. процесс:
PS> Get-ExecutionPolicy -Scope Process
Undefined
Получение подписи из подписанного скрипта
Получите информацию о сигнатуре Authenticode из подписанного скрипта с помощью Get-AuthenticodeSignature
-cmdlet:
Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *
Создание самоподписанного сертификата подписи кода для тестирования
При подписании личных сценариев или при тестировании подписи кода может оказаться полезным создать самоподписанный сертификат подписи кода.
Начиная с PowerShell 5.0 вы можете создать самозаверяющий сертификат подписи кода, используя New-SelfSignedCertificate
-cmdlet:
New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert
В более ранних версиях вы можете создать самозаверяющий сертификат, используя средство makecert.exe
, обнаруженное в SDK .NET Framework и Windows SDK.
Самозаверяющемуся ceriticate будет доверять только компьютеры, установившие сертификат. Для сценариев, которые будут использоваться совместно, рекомендуется использовать сертификат из доверенного центра сертификации (внутреннего или доверенного стороннего производителя).