Windows にもともと備え付けられているまたは高機能な sudo
高機能: gsudo - a sudo for Windows
背景・説明
PowerShell の Just Enough Administration を使って sudo 的なものが作れるのではないかと思って実験的にやってみました。 Just Enough Administration に完全に反していますが。
もし sudo を使いたいなら、先に掲載した Microsoft のものか Grignoli 氏の gsudo を使えばよいと思います。
概要・説明
PowerShell JEA は PowerShell Remote での操作にホワイトリスト形式で制限を加えるものです。PowerShell Remote は別のコンピューターの PowerShell に離れたところから接続するための機能です。もちろん自分自身にも接続することができます。今回はこのループバック接続を利用して構成しています。ただし、セッション構成ファイルやエンドポイント自体は PowerShell.exe に -ConfigurationFile (7.3) や -ConfigurationName オプションを指定することでループバック接続せずにローカルでも利用可能です。
PowerShell Remote におけるオブジェクトの受け渡しは [Management.Automation.PSSerializer]::Serialize() ・ [Management.Automation.PSSerializer]::Deserialize() と同じ仕組みが用いられます。つまり宛先コンピューターにはシリアライズ(直列化)されたオブジェクトが渡されます(逆も然り)。よって情報の欠落と、参照ではなくコピーであるためインスタンスに付随するメソッド等が失われる事象が発生します。
注意
これら記事の内容を実行するにあたり、自己責任でお願いします。何か不都合を被ったとしても筆者は責任を負いません。
性質上セキュリティホールを自分で開けているようなものなので、実装は実験目的かつ仮想環境を推奨します。なお当たり前ですが実装自体には管理者権限が必要です。また自分の所有する端末のみで行ってください。
構成
目次
1. 変数の宣言と代入
2. 接続設定
3. 構成ファイル作成・登録
4. 権限設定
5. 証明書作成
6. 証明書紐付け
7. 実行・関数作成
8. 後始末
参考サイト
・Just Enough Administration (JEA) の概要
・Certificate (password-less) based authentication in WinRM
・ルート証明書の作成
・今度こそopensslコマンドを理解して使いたい (2) 設定ファイル(openssl.cnf)を理解する
・SDDL 紐解き
・What's New in PowerShell 7.3