• User of Interest

Windowsにsudoが搭載される。Windows 11 Ver.24H2になる予定のプレビュー版にsudoが搭載された。コマンドラインのBlogなどでも記事になったのでWindowsへの搭載はほぼ確実と思われる。

sudoとは、そもそもUnixに搭載されたsuを補完するために作られたコマンドだ。suは1972年のVersion 2 UNIXに含まれていた。これは、一時的に管理者権限を持つユーザー(Super User)になるために作られたコマンドだ。suは、「エスユー」と読むこともあるが「スゥ」(あるいはスー)と読む人も少なくない。sudoは、“su do”の意味で、「スゥ・ドゥー」と発音されることが多い。

コンピュータの操作には、誰にでも許すと問題が生じるものがある。Unixでは、こうした操作はroot(ルート)と呼ばれる組み込みの管理者ユーザーのみが実行できる。しかし、rootとしてログインして作業することは、かなり危険である。rootは、カーネル実行ファイルを含め、すべてのファイルを消すことが可能であるなど、Unix上では絶大な権限を持つ。ちょっとした間違いでシステム全体を再起不能にできる。

そこで、必要なときのみrootに「変身」できるコマンドとしてsuが作られた(のちにroot以外のユーザーにも対応)。しかし、プロンプトを変えるなどの対策はあるが、suでrootになったまま危険な間違いを犯してしまう可能性は残る。

そこで作られたのがsudoだ。sudoは、1980年台にニューヨーク大学で4.1 BSD上のコマンドとして作られ、その後NetNewsにソースコードが投稿されて広まった。sudoのアイディアは、ユーザーを切り替えて、シェルを継続実行するのではなく、単独のコマンドだけをrootとして実行するものだ。

Windowsに搭載されるsudoは名前は同じだが、Unix/Linuxのsudoとはまったく異なる。Windowsでは、ユーザーを切り替えただけでは管理者権限が必要なコマンドは実行できない。これは、User Account Control(UAC)と呼ばれる機能で、管理者権限でコマンドを実行するには「昇格」を行わねばならない。UACは2007年のWindows Vistaで導入された。GUIコマンドではプログラムが昇格を要求し、UACダイアログでユーザーに確認を行わせた上で起動する(たとえばregedit.exe)。しかし、コマンドラインの場合、大半のコマンドには昇格要求の機能がなくコンソールを管理者権限で起動しなければならなかった。これではsuと同じである。この点では、UACの設計はツメが甘かったというか、GUIしか想定していなかった。

そして17年後の2024年になって登場したのがsudoである。Windows上のsudo.exeは、ユーザーを切り替えるものではなく、コマンド単位でUACの「昇格」を要求するものだ。これによりコンソール自体を昇格させる必要がなくなる。

現在、sudoは、Dev、Canaryチャンネルのプレビュー版Windows 11でのみ利用できる。「設定 ⇒ システム ⇒ 管理者向け」に「sudoの有効化」というトグルスイッチがあり、これを使うことでsudoが使えるようになる(写真01)。なお、コマンドは、C:\Windows\system32にあるsudo.exeである。また、GitHub上にリポジトリもあるが、まだソースコードは公開されていない。公式のドキュメントは、ここにある。

  • 写真01: Devチャンネル、Canaryチャンネルのプレビュー版の「設定 ⇒ システム ⇒ 開発者向け」には「sudoの有効化」トグルスイッチと、実行方法3つの選択肢がある。写真は、DevチャンネルのOSビルド26080.1201のもの

実行方法は3つあるが基本的には「インライン」でよい。インラインでは、Unix/Linuxのsudoと同じく、コマンドの実行結果を同じコンソールウィンドウに表示する。ただし、インターネットからダウンロードしてきたプログラムで、昇格が必要になるようなものは、そもそも実行しない方が無難である。

Windowsのsudoには、ほかに、標準入力を接続しないで実行(設定ページの「入力が無効な場合」)、「新しいウィンドウで表示」の2つの選択肢がある。別ウィンドウでコマンドを実行させても、大半の場合、実行後にウィンドウが閉じてしまい、結果を見ることができない。ウィンドウを閉じないようにするには


sudo --new-window cmd.exe /c "netstat.exe -n -a -b && pause"

などとしなければならない。また、標準入力を接続しないで実行することの安全性は気休め程度でしかない。

なお、現在のWindowsに付属しているコンソールコマンドの多くは、管理者権限が必要なオプション(netstat.exeの-bなど)を使わなければ昇格せずに実行できる。また、diskpart.exeのように自分でUACの昇格を要求するものもある。コマンド自身がUACの昇格要求を行ってくれるならsudoは必要ない。いまになってsudoが導入されたのは、標準搭載コマンドを全部、昇格要求するように改良するよりも、sudo.exeを提供した方がラクだということに気がついたからじゃないのか? と筆者は「邪推」している。

今回のタイトルネタは、2011年の米国ドラマ「PERSON of INTEREST」である。対象に矩形をつけて横に数値などを表示するコンピュータービジョンの視覚効果が特徴的だった。この作品には、ルートとよばれる人物が登場する。というrootつながりでこの作品を選んだ。コンピュータに関わる者なら、一見の価値あり。