1. トップ
  2. 新着ニュース
  3. IT
  4. IT総合

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
「設定」→「システム」→「開発者向け」→「sudoの有効化」でコマンドを有効化し、実行方法を選択する

 このときに「sudoによるアプリケーションの実行方法を構成する」で、sudoで実行するコマンドの実行方法を指定できる。Linuxのように使うには「インライン」を選ぶ。そのほかに「入力が無効な場合」「新しいウィンドウで表示」の2つが選択でき、この順でセキュリティが高くなる。

 「入力が無効な場合」とは、実行されるコマンドに対して標準入力(stdin)を閉じた状態(入力を禁止した状態)で起動される。英語では「With Input disabled」なので日本語訳がおかしく、意味としては「入力を禁止」である。この設定は起動後にユーザー入力を受け付けるようなコマンドの利用には向いていない。プログラムを停止するための「Ctrl+C」などは標準入力を通らないために有効である。

 デフォルト値の「新しいウィンドウで表示」がセキュリティ的には最も高く、起動するコマンドは、別ウィンドウとなる。

sudoの使い方

 使い方は簡単で、sudoに続けて管理者権限で実行したいコマンドを指定すればよい。sudoのオプションを以下の表に示す。

sudo

 たとえば、netstat.exeでは、「-b」オプションの実行には管理者権限が必要になる。このような場合

sudo netstat -b

とすることで、一般ユーザーで起動したコンソール(Windows Terminal)内から、管理者権限が必要なコマンドを実行できる。

sudo
netstat -bコマンドを管理者権限で実行するには「sudo netstat -b」とすればよい。sudo helpでオンラインヘルプを表示できる

 書式としては、

sudo.exe [サブコマンド] [sudoオプション] [実行コマンドとオプション]

となる。

 ただし、実行前にUACの通知で実行許可を与える必要がある。sudoに限らずUACの通知では「Alt+y」で「はい」を選択でき、マウスクリックは不要だ。その後、設定に応じてコマンドが実行される。

 なお、sudoコマンドを起動するユーザーのユーザー種別が「管理者」の場合には、UACの通知で「はい」を選択すればいいが、「一般ユーザー」の場合、管理者のユーザー名とパスワードを入力する必要がある。もっとも、sudoは、開発者など比較的高度な作業をするユーザーを想定しており、管理者権限を持たない一般ユーザーに指定されているようなユーザー向けではないので、これでいいのであろう。

 管理者権限で実行しているコンソールからは、以下の書式でsudoコマンドの設定を変更できる(詳細は、sudo.exe --help参照)。「<指定>」には、以下の表の項目を指定する。

sudo

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年、いやちょっと長すぎるだろう。

この記事に関連するニュース

トピックスRSS

ランキング

記事ミッション中・・・

10秒滞在

記事にリアクションする

記事ミッション中・・・

10秒滞在

記事にリアクションする

デイリー: 参加する
ウィークリー: 参加する
マンスリー: 参加する
10秒滞在

記事にリアクションする

次の記事を探す

エラーが発生しました

ページを再読み込みして
ください