やじうまの杜

Windowsでもようやく利用できるようになった「Sudo」コマンドを早速体験

Linuxの「Sudo」とは似て非なるものだが快適。セキュリティレベルの低下には注意

 「やじうまの杜」では、ニュース・レビューにこだわらない幅広い話題をお伝えします。

Windowsでもようやく利用できるようになった「Sudo」コマンド

 「Windows 11 Insider Preview」Build 26052(Canary/Dev)より展開されていた「Sudo」コマンドが、ようやく編集部の環境でも利用できるようになっていたのでさっそく試してみました。

Windowsの「Sudo」コマンド

Windowsでコマンドを実行すると、ときどき「管理者権限が必要」という旨のエラーメッセージが表示される

 Windowsでコマンドを実行すると、ときどき「管理者権限が必要」という旨のエラーメッセージが表示されます。Linuxであれば、指定したコマンドを別のユーザーでコマンドを実行する 「Sudo」 があるので、一時的に管理者になってコマンドの実行を継続することができます。しかし、Windowsには「Sudo」コマンドがないので、新たにターミナルを管理者権限で起動し、再度コマンドを実行する必要がありました。これは大変不便です。

 実はWindowsにも 「RunAs」 というコマンドがあり、別のユーザーでコマンドを実行することはできます。しかし、単に管理者権限でコマンドを実行すると用途では少し書式が大袈裟で、「UAC」による権限昇格ではなく管理者(Administrator:初期状態では無効)のパスワードの入力が必要になる点、別ウィンドウでターミナルが起動する点などが不満として残ります。

Windowsにも「RunAs」というコマンドがあるが……

 その点、Windowsの「Sudo」コマンドは今のところ 「UACで一時的に権限昇格する」 という目的に絞って開発されており、とても簡単に利用できます。Linuxの「Sudo」コマンドとは似て非なるものですが、管理者権限が必要なとき一時的に権限昇格できるのは大変便利です。

ターミナルウィンドウをそのまま、「UAC」で一時的に権限昇格して指定コマンドを実行するのがWindowsの「Sudo」コマンド

 ちなみに、Windowsの「Sudo」コマンドは「System32」フォルダー内の実行ファイルとして実装されています。コマンドの書式は以下の通りです。

sudo for Windows

Usage: sudo [OPTIONS] [COMMANDLINE]... [COMMAND]

Commands:
  run     管理者としてコマンドを実行する
  config  sudo の現在の構成情報を取得する
  help    Print this message or the help of the given subcommand(s)

Arguments:
  [COMMANDLINE]...  実行するコマンドライン

Options:
  -E, --preserve-env   現在の環境変数をコマンドに渡す
  -N, --new-window     コマンドに新しいウィンドウを使用する
      --disable-input  ターゲット アプリケーションへの入力を無効にした状態で現在のターミナルで実行します
      --inline         現在のターミナルで実行する
  -D, --chdir <chdir>  コマンドを実行する前に作業ディレクトリを変更してください
  -h, --help           印刷のヘルプ ("--help" で詳細を表示)
  -V, --version        印刷のバージョン
「Sudo」コマンドは「System32」フォルダーにある

使い方

 たとえば「PowerToys」をインストールするコマンドを管理者権限で実行したい場合、以下のように入力します。

sudo winget install powertoys -s winget

 初回利用時はシステムで「Sudo」コマンドが有効ではないという旨のメッセージが表示されますが、案内に従って「設定」アプリの[システム]-[開発者向け]ページで「Sudo」コマンドを有効化すると、2回目からはコマンドが利用できるようになります。

初回利用時のエラーメッセージ。「Windows Terminal」であれば、[Ctrl]キーを押しながらクリックすることで、[システム]-[開発者向け]設定ページへジャンプできる
[システム]-[開発者向け]設定ページ。「Sudo」コマンのON/OFFと、3つの動作モードを指定できる

 Windowsの「Sudo」コマンドには、以下の3つのモードがあります。

  • 新しいウィンドウで表示(In a new window、forceNewWindow):管理者権限のウィンドウが新たに開かれる(既定)
  • 入力が無効な場合(With input disabled、disableInput):インラインで実行されるが、昇格プロセスと対話することはできない。このオプションは翻訳が正しくないため、いずれ変更されると思われる(サポートページでは「入力を閉じる」)
  • インライン(Inline、normal):昇格をトリガーしたウィンドウ内でコマンドが管理者権限でインライン実行される

 既定は「新しいウィンドウで表示」で、管理者権限のターミナルが別ウィンドウで表示され、コマンドが実行されます。ターミナルを管理者権限で起動しなおす必要はなくなりましたが、あまりスマートとは言えません。

「新しいウィンドウで表示」モード

 「入力を閉じる」や「インライン」は、昇格されたプロセスが現在のウィンドウで実行されるため、よりLinuxに近い使い勝手になります。「入力を閉じる」と「インライン」の違いは、実行している管理権限コマンドと対話できるかどうか(入力ハンドルを閉じるかどうか)です。「インライン」ならば、ほぼLinuxのような体験が得られます。

「インライン」ならば、ほぼLinuxのような体験が得られる

 ただし、「新しいウィンドウで表示」「入力を閉じる」「インライン」の順にセキュリティリスクは上がるとのこと。利便性とのトレードオフになります。また、Windows Serverでは「Sudo」コマンドはサポートされません。