しばたテックブログスマートフォン用の表示で見るしばたテックブログPowerShellを中心に気分で書いている技術ブログです。PowerShell最高に誰得なエントリです。1.0~5.0ではpowershell.exeの起動時に$PSHOMEにある*.format.ps1xmlと*.types.ps1xmlを読み込み、オブジェクトの書式設定やオブジェクトの型に対する追加情報を設定します。これらのファイルの内容を変更するシナリオはサポートされていないことに注意してください。ここを読んだ時に最初に「ps1xmlファイルは変更不可では?」という疑問がありました。いうのも$PSHOMEにあるps1xmlファイルは署名付きで改ざんできないはずという記憶があったからです。ps1xmlファイルの署名ps1xmlファイルの署名を改めて調べてみました。4.0では$PSHOMEにあるps1xmlファイルはすべて署名付きでした。4.0のtypes.ps1xmlの例です。最後に署名がついているのがわかります。5.0では署名がなくなりました。5.0で完全に自由にps1xmlファイルを変更可能になったという感じです。実は、署名はついてはいるのですが、組み込み済みのスクリプトの署名を検証するのは実行ポリシーがAllSignedの場合のみなので、事実上$PSHOMEにあるps1xmlファイルは改変可能だったりします。*1ただ、$PSHOMEにあるps1xmlファイルだけは特別扱いされているのではないか?(ps1xmlファイルは実行ポリシーの如何に関わらず常に署名が検証されるのでは?)と思い、試しに適当なps1xmlファイルを変更してみました。2.0からは実行ポリシーがAllSignedでもps1xmlの署名は一切検証されないことがわかりました。ユーザーが自分で作ったカスタムps1xmlファイルはAllSignedであればちゃんと署名の検証がなされます。$PSHOMEにあるps1xmlファイルだけが一切検証されません。4.0の環境でFileSystem.format.ps1xmlを変更してみたものです。実行ポリシーがAllSignedでGet-AuthenticodeSignatureの結果がHashMismatchと検証に失敗しているにも関わらずPowerShellはエラー無く実行できてしまっています。ps1xmlに対する変更も普通に反映されました。1.0では実行ポリシーがAllSignedであれば署名の検証が行われ、PowerShellの起動時にエラーが出ます。ps1xmlファイルのアクセス権で、事実上改変可能とはいえ署名を一切見ないというのはセキュリティ的に如何なものかと思ったのでもう少し調べてみました。1.0と2.0以降では$PSHOMEにあるps1xmlファイルのアクセス権の付き方がまるで別物になっている事がわかりました。1.0ではAdministratorsであればps1xmlファイルに対してフルアクセス権を持っています。下図はtypes.ps1xmlの場合です。2.0以降では、TrustedInstallerがファイルの所有権とフルアクセス権を持っておりその他のユーザーはAdministratorsであってもReadOnlyとなっています。この状態からだと一度所有権を取らないとアクセス権の変更ができず中身を変えることもできません。2.0からは署名の検証をしない代わりにファイルのアクセス権を強化することでps1xmlファイルを保護する方針に変わったと思われます。(もしかしたら単純にOSのアクセス権強化なだけかもしれませんが...)まとめここまでの話をまとめると以下の様になります。1.0では$PSHOMEにあるps1xmlファイルの署名は検証の対象となります。(実行ポリシーがAllSignedの場合のみ)$PSHOMEにあるps1xmlファイルはAdministratorsであれば変更できます。5.0では$PSHOMEにあるps1xmlファイルの署名は一切検証されません。ユーザーが自作したps1xmlファイルの署名は検証の対象となります。(実行ポリシーがAllSignedの場合のみ)$PSHOMEにあるps1xmlファイルはAdministratorでも基本的に変更できません。5.1からは$PSHOMEにあるps1xmlファイルは使われなくなります。最後にここからは完全に私見です。PowerShellがリリースされた当初は実行ポリシーがAllSignedの運用が広まり普通に署名付きスクリプトが使われる未来を想定していたのでは?という気がします。*2しかしながら、現実には実行ポリシーはRemoteSignedで運用されることが大勢となりps1xmlファイルの署名が意味を成さなくなったためアクセス権を強化することによる保護に切り替えたのではないかと思います。加えてPowerShell起動時のパフォーマンス向上のためにps1xmlファイルの署名の検証がされなくなり、最終的にはファイルを使うこと自体を止めたのだと思います。最高に誰得なエントリでしたが何気なく調べた結果が結構面白いことになったので私は満足です。6.0でアイコンが新しくなる話とPosh-ChanことPowerShellさん...ちょっとしたことですが意外と大きな変化です。