Home > Windows にまつわる e.t.c.

管理権限を持っていないユーザーで PowerShell スクリプトを実行する


セキュリティガバナンスの一環で、利用者にローカル PC の管理権限を付与しないケースがあります。

PowerShell のスクリプト許可は、管理者実行した PowerShell で「Set-ExecutionPolicy RemoteSigned -Force」とする事が多いのですが、利用者にローカル管理権限が付与されない場合はこの設定が出来ません。

このような環境でも PowerShell スクリプトを実行する方法を解説します。

方法は3つあります(これ以外にも手はありますが、あまり現実的ではないので割愛)

・PowerShell の起動オプションを使う
・Set-ExecutionPolicy の -Scope オプションで Process を指定する
・Set-ExecutionPolicy の -Scope オプションで CurrentUser を指定する

 

なぜ管理権限が無いと「Set-ExecutionPolicy RemoteSigned -Force」が出来ないのか

「Set-ExecutionPolicy RemoteSigned -Force」とした時の設定スコープが「LocalMachine」であるため、LocalMachine 設定に必要な管理権限を持っていない利用者では設定が出来ません。

 

このため、管理権限を持っていないユーザーで PowerShell スクリプトを実行するには LocalMachine の設定ではなく、利用者が使用している環境に対してスクリプトの実行許可を与えれば良い事になります。

 

PowerShell の起動オプションを使う

powershell.exe のオプションには「-ExecutionPolicy」があり、このオプションを使用することでスクリプトを実行することが出来ます。

例えば、「C:\Script\Test.ps1」を実行するためには、以下のようにします。

powershell -ExecutionPolicy RemoteSigned -File "C:\Script\Test.ps1"

 

Set-ExecutionPolicy の -Scope オプションで Process を指定する

Set-ExecutionPolicy の -Scope オプションに Process を指定すると、その PowerSehll のみにスクリプト実行許可を与えます。
つまり、PowerShell を一度閉じると実行許可が消えるのて、セキュリティリスク的に見ると良い選択となります。

Set-ExecutionPolicy RemoteSigned -Scope Process -Force

 

PowerShell を一度閉じると、実行許可は取り消されています。

 

Set-ExecutionPolicy の -Scope オプションで CurrentUser を指定する

Set-ExecutionPolicy の -Scope オプションに CurrentUser を指定すると、CurrentUser にのみにスクリプト実行許可を与えます。

 

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force

 

この設定は永続的なので、一度設定すればスクリプト実行が可能になります。

セキュリティリスク的に見ると、マクロウイルスが PowerShell スクリプトを実行する攻撃ケースには対処できない弱点があります。

 

PowerShell Core の場合

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?view=powershell-7

AD CS でコード証明書を発行する
https://www.vwnet.jp/Windows/WS08R2/ADCS/CodeSigningCert.htm

自己証明書で PowerShell にコード署名をする
http://www.vwnet.jp/Windows/PowerShell/2016061101/SelfCertificateCodeSigning.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.