Windows基礎①|Windowsの仕組みと管理者権限

Windows基礎①|Windowsの仕組みと管理者権限 Windows

管理者アカウントで入っているのに、なぜ「管理者として実行」と聞かれるのか。「管理者として実行って、毎回聞かれるのは、なんでなんですか? 僕、管理者アカウントなのに」

情シスになりたての頃、僕もまったく同じ疑問を持っていました。答えを先に言うと、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
管理者かどうかの判定が False になり、整合性レベルが Medium、Administrators グループが「拒否のみに使用するグループ」と表示された画面

僕のアカウントは、管理者グループのメンバーです。それなのに、結果はこうなりました。

  • 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 を使い分けましょう。

→ 第2回:プロセス・サービス・タスクの違い

参考

ITもごはんも、腹八分目が長続きのコツ!

コメント