Windows版sudo登場
「Windows」にWindows版「sudo」が登場しました。プレビュービルドで利用可能に
Windows版「sudo」は、「Windows 11 Insider Preview Build 26052」以降のバージョンで利用可能です。sudoとは
「sudo」コマンドは指定されたユーザーでコマンドを実行するためのコマンドです。
「Ubuntu」ユーザーではお馴染みのコマンドですね。
特に管理者である「root」でコマンドを実行したい時によく利用されるコマンドです。
例えば「Ubuntu」では以下のように、「sudo」を経由して「root」で「apt」コマンドを実行する機会があるかと思います。
今回この「sudo」コマンドに相当するWindows版「sudo」が登場しました。
ただしWindows版「sudo」は、Ubuntu版「sudo」が実装している「他のユーザーでコマンドを実行する」機能は持ち合わせていません。
リポジトリーは以下を参照してください。
現状Windows版「sudo」は、あくまで権限を昇格してコマンドを実行するためのコマンドです。
将来的に「他のユーザーでコマンドを実行する」機能の対応も検討されています。
しかし「sudo」は「runas」と異なり、昇格したプロセスでユーザーや他のプロセスからの入力を拒否することもできます。
この機能は「runas」ではサポートされていません。
しかし「sudo」ではコンソールウィンドウ内でユーザーにパスワード入力を求めることはできません。
言い換えると「sudo」実行時に「UAC」の認証ダイアログが表示されます。
これでWindows版「sudo」が利用できるようになります。
この設定がデフォルトの設定であり、「runas /user:admin」と似た振る舞いになります。
ただしそのプロセスの入力ハンドル(stdin)はクローズされ、昇格したプロセスは現在のコンソールウィンドウから入力を受け取ることはできません。
これにより悪意あるソフトウェアからのセキュリティーリスクを軽減できます。
ただし昇格したプロセスはユーザーからの入力を受け取れないため、ユーザーからの入力を待つようなコマンドでは、意図したとおりに動作しないでしょう、
ただし「2. Input closed」と異なりそのプロセスの入力ハンドルはクローズされず、昇格したプロセスは現在のコンソールウィンドウから入力を受け取ることができます。
言い換えると現在のコンソールウィンドウに「stdin」「stdout」「stderr」が接続された状態になります。
「Ubuntu」ユーザーではお馴染みのコマンドですね。
特に管理者である「root」でコマンドを実行したい時によく利用されるコマンドです。
例えば「Ubuntu」では以下のように、「sudo」を経由して「root」で「apt」コマンドを実行する機会があるかと思います。
sudo apt update
今回この「sudo」コマンドに相当するWindows版「sudo」が登場しました。
権限を昇格させてコマンドを実行
さて今回登場したWindows版「sudo」もUbuntu版「sudo」と同様の目的を持ち、昇格していないユーザーのコンソールセッションから、昇格したコマンドを実行するためのコマンドです。ただしWindows版「sudo」は、Ubuntu版「sudo」が実装している「他のユーザーでコマンドを実行する」機能は持ち合わせていません。
オープンソースで開発
今回登場したWindows版「sudo」はオープンソースで開発されています。リポジトリーは以下を参照してください。
runasとsudoの違い
Windowsには管理者も含め「他のユーザーでコマンドを実行する」機能を持つ「runas」コマンドがありますが、Windows版「sudo」と「runas」にはいくつか違いがあります。1. 他のユーザーでコマンドを実行する機能はない
上記でも紹介した通り、Windows版「sudo」には「他のユーザーでコマンドを実行する」機能がありません。現状Windows版「sudo」は、あくまで権限を昇格してコマンドを実行するためのコマンドです。
将来的に「他のユーザーでコマンドを実行する」機能の対応も検討されています。
2. sudoならではのオプション
「sudo」では「runas」のように新しいウィンドウで昇格したプロセスを実行することもできますし、現在のコンソールウィンドウ内で昇格したプロセスを実行することもできます。しかし「sudo」は「runas」と異なり、昇格したプロセスでユーザーや他のプロセスからの入力を拒否することもできます。
この機能は「runas」ではサポートされていません。
3. パスワードの入力
「runas」ではコンソールウィンドウ内でユーザーにパスワード入力を求めることができます。しかし「sudo」ではコンソールウィンドウ内でユーザーにパスワード入力を求めることはできません。
言い換えると「sudo」実行時に「UAC」の認証ダイアログが表示されます。
4. 権限の昇格はUAC経由
「sudo」では悪意あるソフトウェアから保護するため、権限の昇格は「UAC(User Account Control)」経由でのみ行われます。Windows版sudoの使い方やインストール方法
Windows版「sudo」の使い方やインストール方法の詳細は、以下を参照してください。sudoの有効化
「設定」画面の「開発者向け」設定画面で、「sudoの有効化(Enable sudo)」オプションを有効にしてください。これでWindows版「sudo」が利用できるようになります。
3種類の実行時設定
「sudo」実行時のコンソールウィンドウの振る舞いを以下の3種類から選択できます。- In a new window(forceNewWindow)
- Input closed(disableInput)
- Inline(normal)
1. In a new window
「1. In a new window」では「sudo」実行時に、昇格したプロセスを新しいコンソールウィンドウで実行します。この設定がデフォルトの設定であり、「runas /user:admin」と似た振る舞いになります。
2. Input closed
「2. Input closed」では「sudo」実行時に、昇格したプロセスを現在のコンソールウィンドウで実行します。ただしそのプロセスの入力ハンドル(stdin)はクローズされ、昇格したプロセスは現在のコンソールウィンドウから入力を受け取ることはできません。
これにより悪意あるソフトウェアからのセキュリティーリスクを軽減できます。
ただし昇格したプロセスはユーザーからの入力を受け取れないため、ユーザーからの入力を待つようなコマンドでは、意図したとおりに動作しないでしょう、
3. Inline
「3. Inline」では「2. Input closed」と同様に「sudo」実行時に、昇格したプロセスを現在のコンソールウィンドウで実行します。ただし「2. Input closed」と異なりそのプロセスの入力ハンドルはクローズされず、昇格したプロセスは現在のコンソールウィンドウから入力を受け取ることができます。
言い換えると現在のコンソールウィンドウに「stdin」「stdout」「stderr」が接続された状態になります。