Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
Warning: preg_match(): Compilation failed: unrecognized character follows \ at offset 1 in /home/r5652521/public_html/soma-engineering.com/wp-content/themes/affinger/functions.php on line 1548
こんにちは!SE ブログの相馬です。
検証環境を作っているうちに、PowerShell の実行ポリシーを変更する内容がいくつか出てきましたので、PowerShell の実行ポリシーの変更方法を記事毎に書くよりも、纏めて記事にリンクさせるほうが良いかなと思い書きました。
PowerShell の実行ポリシーとは何か
PowerShell でスクリプトを実行する上で、どの程度まで実行する事を許可するかを設定する事ができるポリシーになります。
つまり、コマンドレットのみ実行を許可させるのか、デジタル署名が付いている場合のみ許可するのか、或いは全てのスクリプトを警告なしに実行させるのかといった事になります。
また、一見セキュリティの機能に見えますが、PowerShell の実行ポリシーはセキュリティの機能では無いようです。ついでにですが、PowerShell のセキュリティについては Microsoft のサイトにあります。
Windows PowerShell Script Security | Microsoft TechNet
PowerShell を使い始める前にする事
PowerShell を使い始める際にまずする事は、実行ポリシーを選択する事かと思います。
実行ポリシーが厳しすぎるとスクリプトが実行できませんし、逆に甘すぎると、セキュリティ的に問題が発生する可能性が出てきます。
ですので、この実行ポリシーを適切なレベルに設定する必要があります。
マイクロソフトのサイトにも書いてありますが(以下引用です)、実行ポリシーを甘すぎる設定にする事は余り良くはないと思います。
実行ポリシーはユーザーの操作を制限するセキュリティ システムではありません。たとえば、ユーザーはスクリプトを実行できないとき、コマンド ラインでスクリプトの内容を入力すると、容易にポリシーを回避できます。一方で、実行ポリシーを使用して基本的な規則を設定することで、意図せずに違反することを防止することができます。
引用元:about_Execution_Policies | Microsoft Developers Network
とはいえ、デフォルトは Restricted ではスクリプトを実行する事ができません。
という事で早速みてゆきましょう。
PowerShell の実行ポリシーを確認する
現在の実行ポリシーの種類を確認します。
[code language="powershell"]
PS C:\WINDOWS\system32> Get-ExecutionPolicy
[/code]
実行ポリシーの種類
実行ポリシー | 説明 | 安全性
(個人的見解) |
---|---|---|
Restricted | 個別のコマンドは許可しますが、スクリプトは実行できません。
(Windows Server 2012 R2 を除く全てのバージョンでのデフォルトになります。) |
高
但しスクリプトは動作しません。 |
AllSigned | スクリプトは実行できますが、デジタル署名が付いてなければなりません。
(そのスクリプトをローカル PC で書いても同じです。) 未署名のスクリプトを実行すると、実行を許可するか拒否するか確認ダイアログが表示されます。 (ユーザーが許可を選べば実行します。) |
高 |
RemoteSigned | スクリプトは実行できますが、以下の条件下になります。
インターネットからダウンロードしたスクリプト或いはコンフィグファイル、メールの添付ファイルに含まれているものも含めてデジタル署名が付いていなければなりません。(或いは、ユーザーがUnblock-File コマンド、またはファイルのプロパティからファイルのブロックを解除していなければなりません。) ローカルコンピューターで書かれたスクリプトは実行できます。 (Windows Server 2012 R2 のデフォルトになります。) |
中 |
Unrestricted | 未署名のスクリプトでも実行できます。
インターネットからダウンロードしたファイルがブロック解除されていなければ、実行時に警告が表示されます。 (ユーザーが実行を許可すれば実行できます。) |
低 |
Bypass | 警告やユーザーへの確認なしに、全てのスクリプトが実行ができます。 | 低 |
PowerShell の実行ポリシーを変更する
では、実行ポリシーを変更してみます。ここでは、RemoteSigned に変更する事とします。
[code language="powershell"]
PS C:\WINDOWS\system32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
[/code]
まとめ
以上になります。いかがでしょうか。
実際は「とりあえず Bypass にしてしまおうという」という考え方よりも、「まずは RemoteSigned に設定し、スクリプトが動く状態にする」といった感じでしょうか。
とはいえ、余り無いかもしれませんが企業のセキュリティポリシーにも抵触する部分でもあるかもしれませんので、気を付けたほうが良いかもしませんね。
また、別の記事にはなりますが、スクリプトに署名を入れる事もできます。スクリプトに署名を付けて、特定のスクリプトのみ動作させる事もできますので、ご興味がある方は見ていただけますと嬉しいです。
では最後までお読みいただきありがとうございました!