セキュリティガバナンスの一環で、利用者にローカル PC の管理権限を付与しないケースがあります。
PowerShell のスクリプト許可は、管理者実行した PowerShell で「Set-ExecutionPolicy RemoteSigned -Force」とする事が多いのですが、利用者にローカル管理権限が付与されない場合はこの設定が出来ません。
このような環境でも PowerShell スクリプトを実行する方法を解説します。
方法は3つあります(これ以外にも手はありますが、あまり現実的ではないので割愛)
・PowerShell の起動オプションを使う
・Set-ExecutionPolicy の -Scope
オプションで Process を指定する
・Set-ExecutionPolicy の -Scope オプションで CurrentUser を指定する
「Set-ExecutionPolicy RemoteSigned -Force」とした時の設定スコープが「LocalMachine」であるため、LocalMachine 設定に必要な管理権限を持っていない利用者では設定が出来ません。
このため、管理権限を持っていないユーザーで PowerShell スクリプトを実行するには LocalMachine の設定ではなく、利用者が使用している環境に対してスクリプトの実行許可を与えれば良い事になります。
powershell.exe のオプションには「-ExecutionPolicy」があり、このオプションを使用することでスクリプトを実行することが出来ます。
例えば、「C:\Script\Test.ps1」を実行するためには、以下のようにします。
powershell -ExecutionPolicy RemoteSigned -File "C:\Script\Test.ps1" |
Set-ExecutionPolicy の -Scope オプションに Process を指定すると、その
PowerSehll のみにスクリプト実行許可を与えます。
つまり、PowerShell
を一度閉じると実行許可が消えるのて、セキュリティリスク的に見ると良い選択となります。
Set-ExecutionPolicy RemoteSigned -Scope Process -Force |
PowerShell を一度閉じると、実行許可は取り消されています。
Set-ExecutionPolicy の -Scope オプションに CurrentUser を指定すると、CurrentUser にのみにスクリプト実行許可を与えます。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force |
この設定は永続的なので、一度設定すればスクリプト実行が可能になります。
セキュリティリスク的に見ると、マクロウイルスが PowerShell スクリプトを実行する攻撃ケースには対処できない弱点があります。
Windows PC に PowerShell Core をインストールした場合、default で LocalMachine に RemoteSigned が付与されています。
この設定を Windows PowerShell の default と同じにするには、管理者で実行した PowerShell Core で Undefined を設定します。
Set-ExecutionPolicy Undefined -Force |
PowerShell Core をインストールする際に管理権限が必要なので、管理権限を持たない利用者が PowerShell Core をインストールする事は出来ません。
-Scope オプションで指定できるスコープは以下があります。
スコープ | 意味 |
MachinePolicy | コンピュータ GPO で制御されます |
UserPolicy | ユーザー GPO で制御されます |
Process | 現在の PowerShell セッションにのみに適用します |
CurrentUser | 現在のユーザーにのみ適用します |
LocalMachine | コンピュータのすべてのユーザーに適用します(default) |
ポリシー(-ExecutionPolicy)には以下の種類があります。
制御 | 意味 |
AllSigned | すべてのスクリプトに、信頼された発行元によって署名されている必要があります |
Bypass | 何もブロックされず、警告やプロンプトもありません |
Default | 既定の実行ポリシーを設定します |
RemoteSigned |
インターネットからダウンロードされたすべてのスクリプトと構成ファイルが、信頼できる発行元によって署名されている必要があります。 (Windows Server の default) スクリプトには「ZoneID」と呼ばれる入手元のゾーンを表す情報が付加されており、インターネット等からダウンロードしたスクリプトを識別してます。 ZoneID をリセットするには、Unblock-File コマンドレットを使用します。 |
Restricted | スクリプトの実行を許可しません (Windows Client の default) |
Undefined | 実行ポリシーが設定されていない状態です default ポリシーが適用されます |
Unrestricted | 全てのスクリプトが実行可能ですが、インターネットからダウンロードしたスクリプトは、実行するかどうかが確認されます |
Set-ExecutionPolicy (Microsoft.PowerShell.Security) -
PowerShell | Microsoft Docs
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.security/set-executionpolicy?WT.mc_id=WD-MVP-36880
AD CS でコード証明書を発行する
https://www.vwnet.jp/Windows/WS08R2/ADCS/CodeSigningCert.htm
自己証明書で PowerShell にコード署名をする
http://www.vwnet.jp/Windows/PowerShell/2016061101/SelfCertificateCodeSigning.htm
Copyright © MURA All rights reserved.