Windowsプレビュー版に搭載されたsudoを試す
ASCII.jp / 2024年2月25日 10時0分
Windows Insider ProgramのDevチャンネル(およびCanaryチャンネル)でプレビュー中のWindows 11 Ver.24H2には、sudo.exeコマンドが搭載されている。簡単に言えば、sudo.exeとは管理者権限でコマンドを実行するためのものだ。今回は、このsudo.exeを試した。
そもそもsudoとはなんぞや?
sudoは、Linuxに搭載されているコマンドで、他のユーザーID、グループIDを使って指定されたコマンドを実行するためのものだ。特にオプションを指定せず、sudoのあとに実行したいコマンドを続けると、root(Linux/Unixの管理者)としてコマンドを実行する。このとき、rootのパスワードを入力する必要があるが、sudoがパスワードを一時的に記憶して、しばらくの間はパスワードの再入力は必要がなくなる。
Linuxでは、多くの管理・設定コマンドに管理者権限が必要になる。もともと、Unixには、su(Super Userの略)コマンドがあり、一時的にroot(管理者ユーザー)になって作業をしていた。このコマンドは、Version 1 Unix(1971年)から存在するコマンドである。しかし、suコマンドでは、ミスをしたときにroot権限であるため、大きな事故になりかねない。そこで、指定した単独のコマンドだけをroot権限で実行するsudoが、1980年代に4.1 BSD UNIX上で、ニューヨーク州立大学バッファロー校において最初に開発された。
今回、Windowsに搭載されたsudoは、コンセプトとしては同じだが、UnixやLinux上のsudoとは異なり、ほかのユーザーでコマンドを実行するものではない。というのも、Windowsにはユーザーアカウント制御(User Account Control。UAC)という機能があり、管理者ユーザーであったとしても、コマンドの実行は通常ユーザーと同じ権限でしか実行できないからだ。
管理者権限を使ってコマンドを実行するには「昇格」する必要がある。アプリケーションのインストールなどで、ユーザーに許可を求めるメッセージボックスが表示される。これがUACの「昇格」の確認のための「通知」(UAC通知)である。このとき画面が反転し、UACの通知だけが表示されるのは、悪意のあるプログラムがマウスやキーボードを制御してメッセージボックスを操作することを避けるためだ。
UAC通知に関しては「コントロールパネル」→「ユーザーアカウント」→「ユーザーアカウント制御の変更」で設定が可能だが、基本的には変更しないほうがよい。
「昇格」は、GUIアプリケーションなどがAPIを使って要求することができる(もちろんユーザーによる許可が必要)ほか、スタートメニューなどで一部のコマンドが持つ右クリックメニューの「管理者として起動」を使う。コマンドラインの場合、コンソール自体を管理者として起動し、その中で作業する。これは前述のsuとほぼ同じ状態である。
Windowsに搭載されたsudo.exeは、昇格によって指定されたコマンドを実行するものだ。このため、ユーザーは実行ユーザーのままになる。
なおWindowsには、sudoとよく似たrunasというコマンドがある。これは、ユーザーを切り替えてコマンドを実行するものだが、Windows VistaでUACが導入されて以来、管理者ユーザーを指定しても、コマンドの実行は一般ユーザー権限となってしまうため、管理者権限が必要なコマンドの実行ができなかった。
実際にsudo.exeを使う
sudo.exeを使うには、Windows Insider ProgramのCanary、Devチャンネルで配布されている「ビルド26052」(https://blogs.windows.com/windows-insider/2024/02/08/announcing-windows-11-insider-preview-build-26052-canary-and-dev-channels/、2024年2月8日配布開始)以降が必要である。
原稿執筆時点のDev/Canaryチャンネルの最新版は、「ビルド26058」(https://blogs.windows.com/windows-insider/2024/02/14/announcing-windows-11-insider-preview-build-26058-canary-and-dev-channels/)である。このビルドには、sudo ver.0.1.5が搭載されていた。
まず、「設定」→「システム」→「開発者向け」→「sudoの有効化」でsudoコマンドを有効にする。
![sudo](https://ascii.jp/img/2024/02/24/3691265/x/64ae39a8c506d50b.png)
このときに「sudoによるアプリケーションの実行方法を構成する」で、sudoで実行するコマンドの実行方法を指定できる。Linuxのように使うには「インライン」を選ぶ。そのほかに「入力が無効な場合」「新しいウィンドウで表示」の2つが選択でき、この順でセキュリティが高くなる。
「入力が無効な場合」とは、実行されるコマンドに対して標準入力(stdin)を閉じた状態(入力を禁止した状態)で起動される。英語では「With Input disabled」なので日本語訳がおかしく、意味としては「入力を禁止」である。この設定は起動後にユーザー入力を受け付けるようなコマンドの利用には向いていない。プログラムを停止するための「Ctrl+C」などは標準入力を通らないために有効である。
デフォルト値の「新しいウィンドウで表示」がセキュリティ的には最も高く、起動するコマンドは、別ウィンドウとなる。
sudoの使い方
使い方は簡単で、sudoに続けて管理者権限で実行したいコマンドを指定すればよい。sudoのオプションを以下の表に示す。
![sudo](https://ascii.jp/img/2024/02/24/3691267/x/2b642987f513f2c3.png)
たとえば、netstat.exeでは、「-b」オプションの実行には管理者権限が必要になる。このような場合
sudo netstat -b
とすることで、一般ユーザーで起動したコンソール(Windows Terminal)内から、管理者権限が必要なコマンドを実行できる。
![sudo](https://ascii.jp/img/2024/02/24/3691266/x/c99e2fa3e31d4945.png)
書式としては、
sudo.exe [サブコマンド] [sudoオプション] [実行コマンドとオプション]
となる。
ただし、実行前にUACの通知で実行許可を与える必要がある。sudoに限らずUACの通知では「Alt+y」で「はい」を選択でき、マウスクリックは不要だ。その後、設定に応じてコマンドが実行される。
なお、sudoコマンドを起動するユーザーのユーザー種別が「管理者」の場合には、UACの通知で「はい」を選択すればいいが、「一般ユーザー」の場合、管理者のユーザー名とパスワードを入力する必要がある。もっとも、sudoは、開発者など比較的高度な作業をするユーザーを想定しており、管理者権限を持たない一般ユーザーに指定されているようなユーザー向けではないので、これでいいのであろう。
管理者権限で実行しているコンソールからは、以下の書式でsudoコマンドの設定を変更できる(詳細は、sudo.exe --help参照)。「<指定>」には、以下の表の項目を指定する。
![sudo](https://ascii.jp/img/2024/02/24/3691268/x/da71a00df88af73f.png)
sudo.exe config --enable <指定>
sudoが有効なら、コンソールでもsudo自身を使って
sudo sudo config --enable normal
のように設定値を変更できる。
設定としては、コマンドの実行方法を指定するだけなので、特に問題はないはずだ。インラインを指定すれば、Linuxとほぼ同じ使い方ができる。この場合なら、オプションで一時的に別ウィンドウで表示なども指定が可能。
いろいろと試してみたが、入力禁止(設定としては「入力が無効な場合」)では、完全に入力を禁止できていなかった。たとえば、
sudo sudo config --enable disableInput sudo cmd.exe /c copy con sudotest.txt this is test. ^Z type sudotest.txt
とすると、コマンドに対して入力が可能で、キーボードからファイルに入力ができしまう。3行目はコマンドに対するユーザー入力なので何でも構わない。4行目の「^Z」は、Ctrlキーを押しながらZキーを押すことを意味する(入力終了の意味)。上記のコマンドでは、カレントディレクトリにファイルを書き込むので、もし試すときにはカレントディレクトリには充分注意してほしい。
Windows Command Lineブログにある解説「Introducing Sudo for Windows!」(https://devblogs.microsoft.com/commandline/introducing-sudo-for-windows/)では、stdinをクローズしてコマンドを起動するとしているが、conデバイスまでは禁止していないようだ。Windowsの標準コマンドであれば問題はないが、当面はインターネットから入手したプログラムなどには利用しない方がよさそうだ。
UACが組み込まれたのは2007年のWindows Vistaで、このときからrunasコマンドは使い物にならなくなった。コンソールを管理者権限で起動するのは、suコマンドで管理者になって実行しているのと同じ。管理者権限で間違ったコマンドを起動してしまう可能性もあった。sudoの登場までに17年、いやちょっと長すぎるだろう。
この記事に関連するニュース
-
Windowsはなぜ再起動が必要になるのか?
ASCII.jp / 2024年6月30日 10時0分
-
Windowsが今更(?)開発者に優しくなろうとしている!? 「Dev Home」は開発者にとって使い物になる?
ASCII.jp / 2024年6月23日 10時0分
-
窓辺の小石 第170回 ネットの総和
マイナビニュース / 2024年6月14日 10時13分
-
Windows Subsystem for Linuxガイド 第36回 WSL2でDockerを使う その2「Dockerエンジン編」
マイナビニュース / 2024年6月10日 17時57分
-
Windows Subsystem for Linuxのアップデート概要発表
マイナビニュース / 2024年6月5日 15時31分
ランキング
-
1迷惑メール転送すると送信元が行政処分される? Xでアドレス拡散、宛先の「迷惑メール相談センター」が明かす実情
J-CASTニュース / 2024年7月2日 11時0分
-
2こ、これは……! Netflixで見られる“まさかの映画”に思わず二度見 「まさかネトフリでやってくれるとは!!」
ねとらぼ / 2024年7月4日 7時0分
-
3ヤマト運輸のLINEに「ありがとニャン」と返信したら…… “意外な機能”に「知らなかった」と驚き
ねとらぼ / 2024年7月4日 8時0分
-
4老後の趣味で気軽に“塗り絵”を始めて1年後…… めきめき上達した70代女性の美麗な水彩画に「本当にすごい…」「感動です」
ねとらぼ / 2024年6月29日 22時0分
-
5人気VTuber、サイバー攻撃余波?で本名公表 問われる妥当性、それでも「認めざるを得なかった」理由
J-CASTニュース / 2024年7月4日 12時58分
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/mission_close_icon.png)
記事ミッション中・・・
記事にリアクションする
![](/pc/img/mission/point-loading.png)
エラーが発生しました
ページを再読み込みして
ください
![](/pc/img/mission/mission_close_icon.png)