Windows TIPS
[PowerShell]
PowerShellスクリプトの実行セキュリティ・ポリシーを変更する
■
PowerShellのスクリプトは、デフォルトではセキュリティのために、実行されないようになっている。
■
PowerShellのスクリプトを利用するには、実行ポリシーを変更する。署名とスクリプトの種類によって、4つのポリシーのうちの1つを選択する。
PowerShellのスクリプトは「.ps1」という拡張子のファイルに保存することになっているが、セキュリティのため、デフォルトではスクリプト・ファイルの実行は禁止されている。ユーザーや管理者が知らないうちにPowerShellを悪用したウイルスなどがインストールされ、実行されないようにするためだ。
.ps1ファイルを実行するかどうかは、PowerShellの「実行ポリシー(Execution Policy)」で制御されている。ポリシーには次の4つがあり、デフォルトではRestrictedになっているので、スクリプトは実行できない(関連記事も参照)。
実行ポリシー
意味
Restricted
すべてのスクリプトが実行禁止。PowerShellインストール直後のデフォルト設定
AllSigned
署名されているスクリプトのみが実行可能。署名されていないスクリプトは実行禁止
RemoteSigned
ローカルに保存されているスクリプトは実行可能。インターネットからダウンロードしたスクリプト(非ローカルのスクリプト)は、署名されているもののみが実行可能
Unrestricted
すべてのスクリプトが実行可能。ただしインターネットからダウンロードしたスクリプトは、実行するかどうかが確認されるので、ユーザーが明示的に許可した場合のみ実行される
PowerShellスクリプトの署名/実行ポリシー
スクリプトには書名付きと署名なし、ローカル・スクリプトと非ローカル・スクリプトという違いがあり、ポリシーによってそれぞれ実行できるかどうかが決まる。デフォルトではすべてのスクリプトが実行不可能になっており、ほかのポリシーに変更するまで、実行できない。
この表から分かるように、スクリプトには書名付きと署名なし、ローカル・スクリプトと非ローカル・スクリプトという種類がある。
書名付きスクリプトと署名なしスクリプト
スクリプトには、その正当性を証明/アピールするために、署名を付けることができる。署名は公的な証明書機関が発行した証明書に基づくデジタル証明書や、(テスト用の)自己発行の証明書が利用できる。証明書が付けられたスクリプトだけに実行を限定することにより、不正なスクリプトによってシステムが破壊されるなどのセキュリティ上のリスクを抑えることができる。
ローカル・スクリプトと非ローカル・スクリプト
スクリプト・ファイルが保存されている場所(もしくはスクリプト・ファイルを入手した経路)によって、ローカル・スクリプトと非ローカル・スクリプト(インターネット経由で入手したスクリプト)という2種類がある。
ローカルのスクリプトとは、ローカルの(物理的な)ハードディスク上に保存されているスクリプトを指す。例えばC:がローカルのHDDの場合、これらの上に保存されている「C:\MyScript\testps.ps1」というファイルはローカルのスクリプトとみなされる。ただしネットワーク・ドライブをローカルにマップしている場合、そのドライブもローカルとみなされる。また「\\server1\user1\MyScript\testps.ps1」のように、単一ラベルのコンピュータ名(ドメイン名を持たない、単一のコンピュータ名)から始まるUNC パスのファイルも、ローカルとして扱われる。
これに対し、インターネットからダウンロードした.ps1ファイルや、FQDN 名/IPアドレス から始まるUNC名を持つファイルは、非ローカルのファイルとして扱われる。例えば「http://www.example.com/MyScript/testps.ps1(から取得したファイル。次の「ZoneIDについて 」参照)」や「\\server1.example.com\user1\MyScript\testps.ps1」のようなファイルは、非ローカルとみなされる。FQDN名やIPアドレス、サーバ名の表記の違いによるローカルと非ローカルの判断は、Internet Explorerにおける「インターネット・ゾーン」と「イントラネット・ゾーン」の違いと同じである。Internet Explorerでは、ステータス・バーの右下に現在のゾーン名が表示されるので、どのゾーンか判定するにはアドレス・バーにフォルダ名をコピーしてみればよい(ゾーンについてはTIPS「IEのセキュリティ設定を変更してセキュリティ機能を強化する 」も参照)
■ZoneIDについて
インターネットからダウンロードしたスクリプト・ファイルをローカルのディスク上に保存しても、それは非ローカルのスクリプトとみなされる。これはWindows XP SP2以降のOSで利用できる「ZoneID」がスクリプト・ファイルに付けられているからだ。ZoneIdの詳細はTIPS「XP SP2のZoneIdとは? 」を参照していただきたいが、簡単に言うと、NTFSのストリーム機能を使って、入手元のゾーン情報を記録/保持しておく機能である。このZoneIdが付いているファイルは、ローカルのディスク上にあってもインターネット経由で取得したものとされ、非ローカル・スクリプトとしてのセキュリティの制限を受ける。ただしそのTIPSでも述べているように、FATファイル・システムへコピーしたり、ZoneIDを無視するアプリケーションなどを使うとZoneIDが欠落してしまうので、注意が必要である。
スクリプトの実行ポリシーを選択する
PowerShellでは、スクリプトの署名や種類に応じて、先に挙げた4つの実行ポリシーを選択できるようになっている。デフォルトでは一切スクリプトが実行できないが、必要に応じて、変更する。ただしAllSignedにすると常に署名が要求されるようになるので、使い勝手はよくないだろう。テスト用のスクリプトや、Webページ上で解説されているようなスクリプトを利用するだけでも、いちいち署名しないと実行できないからだ。
Unrestrictedだとほとんど制限なく実行できるため、セキュリティ上はあまり好ましくない。そのため、RemoteSigned(ローカル・スクリプトはそのまま実行、非ローカルは署名を要求)を使うのが現実的と思われる。
現在の実行ポリシーを確認するには、Get-ExecutionPolicyコマンドレットを利用する。
PS C:\MyScript> Get-ExecutionPolicy …現在のポリシーの取得
Restricted …結果
実行ポリシーを設定するには、Set-ExecutionPolicyコマンドレットを利用する。
PS C:\MyScript> Set-ExecutionPolicy RemoteSigned …ポリシーの設定
PS C:\MyScript> Get-ExecutionPolicy …結果の確認
RemoteSigned …結果
なおWindows Vistaの場合はUACによってSet-ExecutionPolicyの実行が拒否されるので、[管理者として実行]で[Windows PowerShell]を起動してから実行していただきたい。
実行できない場合のエラー・メッセージ
ポリシーによってPowerShellスクリプトの実行が禁止されている場合、次のようなメッセージが表示される。
PS C:\MyScript> .\testps.ps1
スクリプトの実行がシステムで無効になっているため、ファイル C:\MyScript\testps.ps1 を読み込めません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。
発生場所 行:1 文字:12
+ .\testps.ps1 <<<<
PS C:\MyScript>
なおセキュリティのため、スクリプトを実行するには、フルパス名か「.\」で始まる相対パス名を指定する必要がある。単に「testsp.ps1」と指定するだけでは実行できないので、注意していただきたい。詳細については「Windows PowerShellコマンド&スクリプティング入門 」を参照していただきたい。
次はデジタル署名が要求されているのに、署名されていないスクリプトを実行しようとした場合の例である。署名がないと、このようにエラーとなり、実行されない。
PS C:\MyScript> .\testps.ps1
ファイル C:\MyScript\testps.ps1 を読み込めません。ファイル C:\MyScript\testps.ps1 はデジタル署名されていません。このスクリプトはシステムで実行されません。詳細については、「get-help about_signing」と入力してヘルプを参照してください。。
発生場所 行:1 文字:12
+ .\testps.ps1 <<<<
PS C:\MyScript>
実行ポリシーでUnrestrictedを選択した場合は、インターネット(インターネット・ゾーン)から入手したファイルかどうかが判断され、そうならば、実行するかどうかを確認する問い合わせが表示される。単に[Return]キーを押すか、[D]キーを押すと実行が中断され、[R]キーを押した場合にのみ実行される。
PS C:\MyScript> .\internetscript.ps1
セキュリティ警告
信頼するスクリプトのみを実行してください。インターネットから入手したスクリプトは便利ですが、コンピュータに危害を及ぼす可能性があります。C:\MyScript\internetscript.ps1 を実行しますか?
[D] 実行しない(D) [R] 一度だけ実行する(R) [S] 中断(S) [?] ヘルプ (既定値は "D"): ……ここで[Return]キーだけを押してみる
このソフトウェアを今回は実行しないことを選択したため、ファイル C:\MyScript\internetscript.ps1 を読み込めません。
発生場所 行:1 文字:14
+ .\internetscript.ps1 <<<<
PS C:\MyScript>
この例では[Return]キーを押してみた。するとこのようなメッセージが表示され、実行が中断された。
なお手元で試したところ、ドライブにマップしたネットワーク・ドライブや単一ラベルのサーバ名を使ったUNCパス上のインターネット・ゾーンのスクリプト・ファイルの場合、このような問い合わせなしに、すぐに実行されてしまった(物理的なローカルHDDドライブ上のインターネット・ゾーン・ファイルや、FQDNによるUNCパスの場合は上の例のように動作する)。ゾーンの自動判定の機能をあまり信用してはいけないのかもしれない。
この記事と関連性の高い別のWindows TIPS
generated by
TechTargetジャパン
Windows Server Insider フォーラム 新着記事
キャリアアップ