管理者アカウントで入っているのに、なぜ「管理者として実行」と聞かれるのか。「管理者として実行って、毎回聞かれるのは、なんでなんですか? 僕、管理者アカウントなのに」
情シスになりたての頃、僕もまったく同じ疑問を持っていました。答えを先に言うと、Windows は、管理者アカウントでも、普段は「一般ユーザーの権限」で動かしているからです。
新シリーズ「情シスのための Windows OS 基礎」(全5回)の第1回です。ネットワーク基礎(最終回:通信障害の切り分け)の次は、PC の中の話をします。
| 回 | テーマ |
|---|---|
| ① 今回 | Windows の仕組みと管理者権限 |
| ② | プロセス・サービス・タスクの違い |
| ③ | ファイル・フォルダー・アクセス権 |
| ④ | イベントログと Windows のログ調査 |
| ⑤ | PC が遅い・起動しないときの調査手順 |
結論:「管理者」でも、ふだんは、一般ユーザーの権限で動いている
Windows には、ユーザーアカウント制御(UAC)という安全装置があります。管理者権限が要る操作の前に、「本当に実行しますか?」と聞いてくる、あの画面です。
- 管理者アカウントでサインインすると、2種類の「通行証」(アクセストークン)が作られます。
- 標準ユーザーのトークン:管理者の特権と、管理者グループの資格を取り除いたもの
- 管理者のトークン:すべての特権を持つもの
- 画面の表示(
explorer.exe)は、標準ユーザーのトークンで動きます。そこから起動するアプリは、同意するまで、すべて標準ユーザーの権限で動きます。 - 管理者権限が要る操作のときだけ、昇格の確認画面(同意プロンプト)が出ます。
つまり、毎回聞かれるのは、わざとそうしてあるからです。ウイルスが、勝手に管理者権限で動くのを防ぐために、「管理者の通行証は、金庫にしまってある」状態にしているんですね。
Windows の中を、ざっくり
細かい構造は、必要になったときに調べれば十分です。まずは、レストランにたとえて、3層で考えます。
| 層 | たとえ | 中身 |
|---|---|---|
| カーネル・ドライバー | 厨房の設備・ガス・電気 | ハードウェアの制御、メモリの管理 |
| サービス・システムのプロセス | 裏方のスタッフ(皿洗い、仕込み) | ログインしなくても、裏で動き続ける仕組み(第2回) |
| ユーザーのアプリ | ホールの接客 | あなたが開く、ブラウザやエクセル |
権限が強いほど、厨房の奥まで入れるイメージです。誰が、どこまで入れるかを決めているのが、今回のテーマの権限です。
管理者を含む、アカウントの種類
| 種類 | できること | 使いどころ |
|---|---|---|
| 標準ユーザー | 自分の設定の変更、普通のアプリの利用 | 普段使い(推奨) |
| 管理者 | 設定の変更、アプリの導入、ほかのユーザーの管理 | 必要なときだけ昇格して使う |
| SYSTEM(LocalSystem) | OS 自身。ほぼ全権限 | サービスなどが、この権限で動く |
Microsoft は、「普段使うアカウントは、標準ユーザーにすること」を、より安全な運用として、勧めています。標準ユーザーでも、必要なときは、管理者の資格情報を入力して、昇格できます(資格情報の確認画面)。
実機で確認:自分のトークンを見る
([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
whoami /groups | Select-String 'Mandatory Label|Administrators'
whoami /priv | Select-Object -First 7

僕のアカウントは、管理者グループのメンバーです。それなのに、結果はこうなりました。
- 1つ目:「管理者か?」の判定は
False。昇格していない、普通の PowerShell だからです。 - 2つ目:
Mandatory Label\Medium Mandatory Level= 整合性レベルが Medium(中)。昇格すると、High(高)になります(整合性レベルは、信頼の度合いの目安です)。BUILTIN\Administratorsには、「拒否のみに使用するグループ」と出ています。管理者グループに入っているのに、今は、その権限は使われていない、という意味です。 - 3つ目:特権の一覧(
SeShutdownPrivilege=シャットダウン)が、無効のまま。管理者の通行証を、使っていないからです。
これが、「管理者なのに、普段は管理者ではない」の、実際の姿です。
管理者として開くには
- スタートメニューで「PowerShell」を右クリック → 管理者として実行
- 起動のあと、確認画面で「はい」を押す(標準ユーザーなら、管理者のパスワードを入力)
- PowerShell から、別の窓を、管理者として開く:
Start-Process powershell -Verb RunAs
昇格した窓では、さきほどのコマンドを打つと、整合性レベルが High、IsInRole が True に変わります。昇格した窓は、必要な作業が終わったら、閉じるのが基本です。
僕のやらかし:whoami が、別の whoami だった
この記事のために、PowerShell で whoami /groups を打ちました。すると、見慣れない、英語のエラーが出ました。
/usr/bin/whoami: extra operand '/groups'
/usr/bin/whoami? Windows の whoami ではなく、Git for Windows に同梱された、Linux 版の whoami が、先に見つかって、実行されていたんです。PATH(コマンドを探す場所の並び)で、Git のフォルダーが、System32 より先にあったのが原因でした。
直し方は、フルパスで書くか、.exe を付けた上で、場所を確かめることです。
Get-Command whoami -All
& "$env:SystemRoot\System32\whoami.exe" /groups
同じ名前のコマンドが、複数あると、先に見つかったものが、勝つ。 知らない間に、別のものが動いている、というのは、情シスの現場でも、よくあります。同じ名前の定食が、お店ごとに、中身が違うのと同じです。
今回覚えたコマンド
| コマンド | 意味 |
|---|---|
whoami /groups |
自分が属するグループと整合性レベルを見る |
whoami /priv |
自分が持つ特権と、有効かどうかを見る |
Start-Process powershell -Verb RunAs |
管理者として、別の PowerShell を開く |
Get-Command <名前> -All |
同じ名前のコマンドを、すべて探す |
次回予告
次回は、プロセス・サービス・タスクの違い。タスクマネージャーで見える「動いているもの」には、種類があり、それぞれ、止め方も、見るべき場所も、違います。Get-Process、Get-Service、Get-ScheduledTask を使い分けましょう。
参考
ITもごはんも、腹八分目が長続きのコツ!


コメント