Windowsには、UAC(User Account Control、ユーザーアカウント制御)と呼ばれる機能がある。Windowsでは外部のスクリプトでキーストロークを送るなどの方法で、「悪意のあるプログラム」からGUI操作される可能性があった。
このとき、Windowsに変更が加わる動作に関しては、対面しているユーザーに最終判断を委ね、ユーザーが許可した場合のみ実行を許すのがUACだ。今回はこのUACについて解説する。なお、UACは現在のWindows 11に含まれている「sudo」コマンドと関係がある。このことについては過去記事「Windowsプレビュー版に搭載されたsudoを試す」(https://ascii.jp/elem/000/004/185/4185975/)も参照してほしい。
そもそもUACとは?
UACは2006年のWindows Vistaで導入された。これにより、危険な動作は、ユーザーがその場で許可しないかぎり、プログラムやスクリプトから設定変更ができなくなった。仕組みとしては、どのユーザーも普段は一般ユーザーとして操作する。これは管理者になったユーザーであっても同じだ。そしてWindowsは管理者権限が必要な操作の場合には、UACダイアログボックスを使ってユーザーに最終確認をさせる。
このUACダイアログが表示されるとき、デスクトップは暗転し、UAC以外のGUIは操作ができなくなるのが標準設定になっているわけだ。
ユーザーがUACダイアログで許可すると、該当処理に対して、ユーザーを管理者権限を持つように「昇格」させる。このときユーザーアカウント自体は変わらず、実行権限を持つユーザーとして実行するのではないことに注意してほしい。
UACダイアログに関する設定は、コントロールパネルの「ユーザーアカウントアイコン」→「ユーザーアカウント制御設定の変更」にある。
ここでUACダイアログの表示方法を選択できる。標準ではスライダーの上から2番目「アプリがコンピュータに変更を加えようとする場合のみ通知する(規定)」である。これを1つ下にすると、UACダイアログが表示される条件は同じだが、デスクトップが暗転しない分、ダイアログの表示が速くなる。ただし、セキュリティ的には弱くなるため推奨はされていない。
とはいえ、Windows 11ではダイアログ自体が他のウィンドウの下に入ってしまって、タスクバーにUACアイコンが表示されているのを見落とすと、処理が中断したままになってしまうことがある。そういうとき、暗転しない設定(上から3つ目)を選択しておくと、ダイアログが操作を受け付けるのが若干早くなる。
モバイルPCにおけるUAC
モバイルPCでは、同世代のCPUを採用するデスクトップと比較した場合には一般に性能が劣る。しかしながら、モバイルPCではUACダイアログの設定を変更しない方がよい。そもそも、外出先でアプリをインストール、システムを変更するのは、できれば避けたいシナリオではある。セキュリティの問題だけでなく、バッテリ消費や、インストールやシステム変更に原因を持つトラブルの発生など、メリットが何もないからだ。
出張のように数日間外出するのであれば、Windows Updateも止めておきたいぐらいだ。昨今のWindowsのアップデートでは、トラブルの発生もあると聞く。トラブル対策のための「ツール」(たとえば、バックアップ用の外部ドライブなど)なしのトラブル対策は辛いものがある。このため、外出中はなるべくトラブルの原因になる作業は避けて、文書作成など、本来の仕事でのみマシンを使うようにしたほうがよい。
UACとsudo.exe
Windows 11 Ver.24H2から、コンソールでsudo.exeが利用できるようになった。sudo.exe自体に関しては、上で紹介した「過去記事」を参照してほしい。
Vistaからは、ACL(Access Control List)で、ユーザーに権限を与えても、システムの変更などの操作に管理者権限とユーザーの確認が必要な場合にはUACが動作する。Vista以前では、UACがなく、事前にユーザーに権限を与えておくだけで、管理者権限が必要な操作ができた。また、runas.exeコマンドを使って、一時的に他のユーザー(管理者)としてプログラムを起動することもできた。
スタートメニューに表示されるショートカットの右クリックメニューにある「管理者として実行」は、該当のプログラムを管理者権限で起動する。管理者権限で起動されたコンソールなどからプログラムを実行させると、やはり管理者権限で実行される。ただし、このときにもシステムを変更するようなコマンドではUACが働く。しかし、管理者権限が必要でも表示のみなどの場合(たとえばnetstat.exeの-bオプションなど)は、管理者権限の有無のみでUACを動かさずに動作が可能だ。
しかし、管理者権限でコンソール(Windowsターミナルなど)などを立ち上げると、そこから実行されるアプリは、すべて管理者権限で動作してしまう。
そこでコンソールは通常起動させ、管理者権限が必要なコマンドを実行するときのみ、権限を与えるコマンドとしてsudo.exeが作られた。このようにすることで、コンソール自体は一般ユーザーで昇格なしに動作し、ここからsudo.exeを使って起動されたプログラムのみが管理者権限で動作する。これにより、通常のコマンドまで管理者権限で動作しなくなり、安全性が高まる。
UACを邪魔に感じることも少なくないが、悪意のあるプログラムを仕込んである、あるいは偽サイトに誘導するようなメールといったものも増えていて、年々その偽装技術は向上している。そう考えるとマシンの乗っ取りなどを防ぐにはUACが最後の砦となる。ほかにも防御方法はあるが、UACの場合、Windowsに対する変更設定を直接検出しており、想定内の攻撃であれば十分な効果がある。

この連載の記事
-
第517回
PC
Windows 11の付箋アプリはWindowsだけでなく、スマホなどとも共有できる -
第516回
PC
今年のWindows 11には26H2以外に「26H1」がある!? 新種のCPUでのAI対応の可能性 -
第515回
PC
そもそも1キロバイトって何バイトなの? -
第514回
PC
Windows用のPowerToysのいくつかの機能がコマンドラインで制御できるようになった -
第513回
PC
Gmailで外部メール受信不可に! サポートが終わるPOPってそもそも何? -
第512回
PC
WindowsのPowerShellにおけるワイルドカード -
第511回
PC
TFS/ReFS/FAT/FAT32/exFAT/UDF、Windows 11で扱えるファイルシステムを整理する -
第510回
PC
PowerShellの「共通パラメーター」を理解する -
第509回
PC
Windowsにも実装された、生成AIと他のシステムを接続するためのプロトコル「MCP」とは何か? -
第508回
PC
Scalable Vector Graphics(SVG)そもそも何なのか? - この連載の一覧へ















