【図解】アクセストークンとACLとは?Windowsがアクセスを許可するしくみを初心者向けに解説

Windowsでファイルを開こうとしたとき、開けるかどうかを決めているのは「アクセストークン」と「ACL」の2つです。アクセストークンは利用者が持つ通行証で、ACLはファイルやフォルダが持つ「入ってよい人の名簿」です。この記事では、それぞれの中身と、Windowsが許可・拒否を決める順番を見ていきます。

この記事でわかること
  1. アクセストークンには何が入っていて、いつ作られるのか
  2. ACL(DACLとACE)の中身と、許可・拒否が決まる順番
  3. 共有のアクセス許可とNTFSのアクセス許可、UACでつまずく場面

全体像:通行証と、扉の名簿

Windowsのアクセス制御は、利用者の側にある「アクセストークン」と、ファイルやフォルダの側にある「ACL(アクセス制御リスト)」の2つでできています。ファイルを開こうとすると、Windowsはトークンに入っているSIDと、ACLに書かれたSIDを照らし合わせます。この照合を「アクセスチェック」と呼びます。

user01サインインアクセストークン(通行証)user01 のSID営業部 のSIDDomain Users のSID特権(ユーザー権利)利用者の側にあるもの照合アクセスチェックフォルダのACL(扉の名簿)営業部:読み取り・書き込み経理部:読み取りAdministrators:フルファイルやフォルダの側にあるもの一致した行の権限だけが許可される
図1 アクセストークンとACLの全体像。利用者の通行証と、フォルダの名簿を照らし合わせる

SIDは、Windowsがユーザーやグループを見分けるための番号です。トークンにもACLにも、名前ではなくSIDが入っています。

アクセストークンとは

アクセストークンは、サインインに成功したときにWindows(LSA)が作る、利用者の情報のまとまりです。そのユーザーが起動したプログラム(プロセス)には、すべてこのトークンのコピーが付きます。プログラムがファイルを開こうとすると、Windowsはそのプロセスのトークンを使ってアクセスチェックをします。

アクセストークン(user01)ユーザーのSIDS-1-5-21-…-1104(user01)グループのSID…-1108(営業部)、…-513 などS-1-1-0(Everyone)なども入るログオンSIDこのサインインを表すSID特権シャットダウン、タイムゾーンの変更 など既定のDACL新しく作るものに付けるACL種類プライマリ/偽装(なりすまし)サインインのときに作るプロセスごとにコピーされる
図2 アクセストークンの中身。だれか(SID)と、何ができるか(特権)が入っている
入っているもの内容
ユーザーのSIDサインインしたユーザー本人のSID
グループのSIDユーザーが入っているグループのSID。Everyone や Authenticated Users のような、Windowsが自動で付けるグループも入る
ログオンSID今回のサインイン(ログオンセッション)を表すSID
特権シャットダウンやバックアップなど、システム全体に関わる操作をしてよいかどうか
既定のDACLこのユーザーが新しくファイルなどを作るときに、ACLを指定しなければ使われるACL
トークンの種類プロセスが持つ「プライマリトークン」か、別のユーザーになりすますための「偽装トークン」か

トークンはサインインしたときに作られ、あとから中身は増えません。グループに追加しても、サインインし直すまで反映されないことがあるのはこのためです。

ネットワーク越しのアクセスでは、サーバ側でトークンができる

ファイルサーバの共有フォルダを開くときは、利用者のPCのトークンがそのまま使われるわけではありません。ファイルサーバが利用者を認証し、ファイルサーバの上で、その利用者のアクセストークンを作ります。ファイルサーバは、そのトークンを使って利用者に「なりすまし」、自分のACLと照らし合わせます。

利用者のPCuser01DCファイルサーバ共有フォルダ① 共有を開きたい+本人の証明Kerberosのチケット(またはNTLM)② NTLMならDCに確認を頼むKerberosならチケットの中身で確認③ user01のアクセストークンを作る④ user01になりすまして、ACLと照合⑤ 許可ならファイルを開ける
図3 ネットワーク越しのアクセス。ファイルサーバが利用者のトークンを作り、利用者になりすまして照合する
No.何が起きているか
①PCは、共有を開くときに本人であることを証明します。Kerberosならチケットを、NTLMなら認証の応答を送ります。
②NTLMの場合、ファイルサーバはDCに確認を頼み、ユーザーとグループの情報を受け取ります。Kerberosの場合は、チケットの中に入っているユーザーとグループの情報を使います。
③ファイルサーバは、受け取った情報からuser01のアクセストークンを作ります。
④⑤ファイルサーバはuser01になりすまして(偽装トークンを使って)ファイルを開き、ACLと照らし合わせて許可するかどうかを決めます。
なぜサーバ側で作り直すのか

アクセストークンは、そのコンピュータのWindowsがメモリの中で管理しているもので、ネットワーク越しに渡すことはできません。仮に中身を送れたとしても、利用者のPCが作った情報は書き換えられるおそれがあるため、サーバはDCが保証した情報(Kerberosのチケットに入ったグループ情報や、NTLMでのDCの応答)をもとに、自分でトークンを組み立てます。また、サーバのローカルグループや「ユーザー権利の割り当て」はコンピュータごとに違うので、そのサーバの設定を反映したトークンが必要になります。

特権(ユーザー権利)はACLとは別

トークンには、SIDのほかに「特権」も入っています。特権は、シャットダウン、時刻の変更、ファイルのバックアップなど、特定のファイルではなくシステム全体に関わる操作をしてよいかを表します。たとえば Backup Operators グループには、ファイルのアクセス許可に関係なく、すべてのファイルをバックアップ・復元できる特権が与えられています。

特権は、ローカルセキュリティポリシーやグループポリシーの「ユーザー権利の割り当て」で設定します。ファイルごとのACLとは別の仕組みなので、ACLだけを見ていると見落としやすいところです。

ACLとは

ファイルやフォルダなど、アクセスを制御できるものには「セキュリティ記述子」が付いています。セキュリティ記述子には、所有者と、2種類のACLが入っています。アクセスを許可・拒否するのがDACL、アクセスをログに残すかどうかを決めるのがSACLです。ふだん「アクセス許可」や「ACL」と呼んでいるのは、DACLのことです。

フォルダ「営業資料」セキュリティ記述子所有者AdministratorsSACL監査の設定(ログ)DACL(アクセスを許可・拒否する名簿)ACE種類だれ(SID)権利1拒否user02書き込み2許可営業部読み取り・書き込み3許可経理部読み取り4許可Administratorsフルコントロール1行ずつ = ACE(アクセス制御エントリ)
図4 セキュリティ記述子の中身。DACLは、ACEと呼ばれる1行ずつの設定の集まり

DACLの1行1行を「ACE(アクセス制御エントリ)」と呼びます。ACEには、「だれに(SID)」「許可か拒否か」「どの権利を」が書かれています。エクスプローラーのセキュリティタブに並んでいるのは、このACEです。

基本のアクセス許可できることicaclsでの表記
フル コントロールすべての操作。アクセス許可の変更や所有権の取得もできるF
変更読み取り、書き込み、削除M
読み取りと実行ファイルを読む、プログラムを実行するRX
読み取りファイルの中身や属性を読むR
書き込みファイルを作る、書き込むW

アクセス許可は親フォルダから継承される

新しく作ったファイルやフォルダは、ふつう親フォルダのACEを受け継ぎます(継承)。継承されたACEは、セキュリティタブでは灰色のチェックで表示され、icaclsでは (I) が付きます。フォルダの下のファイルに同じ権限を付けたいときは、親フォルダに設定すれば済みます。

補足

DACLが「ない」場合と「空」の場合では、意味が逆になります。DACLがない(NULL DACL)と、だれでもフルアクセスできます。DACLはあってもACEが1つもない(空のDACL)と、だれもアクセスできません。

許可・拒否はどう決まるのか

アクセスチェックでは、DACLのACEを上から順に見ていきます。求めた権利(たとえば「書き込み」)を拒否するACEに当たれば、その時点で拒否です。許可するACEを足し合わせて求めた権利がそろえば、その時点で許可です。最後まで見てもそろわなければ、拒否になります。

例:営業部のuser01が「書き込み」をしたいACE 1拒否 user02:書き込みuser01には当てはまらない → 次へACE 2許可 営業部:読み取り・書き込み当てはまる → 書き込みが許可されたここで終了求めた権利がそろったので、ACE 3以降は見ない判定のルール求めた権利を拒否するACEに当たる → 拒否 / 許可するACEで権利がそろう → 許可最後まで見ても権利がそろわない → 拒否(名簿にない人は入れない)
図5 アクセスチェックの流れ。ACEを上から順に見て、拒否に当たるか、許可で権利がそろったところで決まる

ACEを上から見るので、並び順が大事です。Windowsは、ACEを次の順に並べるように決めています。エクスプローラーやicaclsで設定すると、自動でこの順になります。

順ACEの種類ここから言えること
1明示的な拒否(そのフォルダに直接設定した拒否)直接設定した拒否は、どの許可よりも先に見られる
2明示的な許可直接設定した許可は、継承した拒否より先に見られる
3継承した拒否(親、祖父母…の順)近い親のACEほど先に見られる
4継承した許可―

また、ACLに名前がない人は、許可も拒否も書かれていなくてもアクセスできません。ふだんは許可だけを設定し、拒否は「グループには許可したいが、その中の特定の人だけ止めたい」ときに使うのが基本です。

共有のアクセス許可とNTFSのアクセス許可

ファイルサーバの共有フォルダには、アクセス許可が2か所にあります。共有の設定(「共有」タブの「詳細な共有」)にある「共有のアクセス許可」と、フォルダそのものの「セキュリティ」タブにあるNTFSのアクセス許可です。ネットワーク越しにアクセスすると、この2つの門を両方通ることになります。

user01SMB① 共有のアクセス許可ネットワーク越しだけEveryone:変更(フル/変更/読み取り)② NTFSのアクセス許可ローカルでも効く営業部:読み取り(細かい権利まで設定)両方の門を通れる権利だけ = より厳しいほうこの例では「読み取り」だけができる
図6 共有のアクセス許可とNTFSのアクセス許可。両方を通れる権利だけが使える
項目共有のアクセス許可NTFSのアクセス許可
効く場面ネットワーク越しのアクセスだけネットワーク越しでも、サーバの上で直接開いても
設定できる権利フル コントロール、変更、読み取りの3つだけ基本の5つに加え、細かい権利まで設定できる
設定する単位共有ごとフォルダやファイルごと(継承あり)

2つの設定が食い違うときは、より厳しいほうになります。共有で「変更」、NTFSで「読み取り」なら、できるのは読み取りだけです。管理を分かりやすくするために、共有のアクセス許可は広めにしておき、細かい制御はNTFSのアクセス許可で行う運用がよく使われます。

ユーザーが実際にどこまでできるかは、フォルダのプロパティで セキュリティ ›› 詳細設定 ›› 有効なアクセス を開くと確認できます。

管理者なのに「アクセスが拒否されました」になる理由

Administratorsグループのメンバーでサインインしても、ACLが「Administrators:フル コントロール」だけのフォルダを開けないことがあります。これはUAC(ユーザーアカウント制御)の働きです。

管理者がサインインすると、Windowsは2つのトークンを作ります。1つは管理者のトークンで、もう1つは管理者の特権を外し、Administratorsを「拒否専用」にした標準ユーザー相当のトークンです。エクスプローラーやふだんのプログラムは、標準ユーザー相当のトークンで動きます。

admin01(Administratorsのメンバー)ふだん使うトークン(標準ユーザー)Administrators:拒否専用管理者の特権は外されているエクスプローラーなど昇格したときのトークン(管理者)Administrators:有効管理者の特権が使える「管理者として実行」ACLが「Administrators:フル」だけ→ ふだんのトークンでは開けない(拒否専用のSIDは許可に使われない)昇格すると、同じACLでも→ 開ける(UACの確認画面が出る)
図7 UACによる2つのトークン。昇格したときだけ管理者のトークンを使う

拒否専用のSIDは、拒否のACEにだけ使われ、許可には使われません。そのため、Administratorsにだけ許可したフォルダは、ふだんのトークンでは開けません。「管理者として実行」したプログラムなら、管理者のトークンが使われるので開けます。ふだん使うフォルダは、Administratorsではなく、利用者のグループに許可を付けておくと混乱しにくくなります。

確認に使うコマンド

PC(コマンドプロンプト):今のトークンのユーザー、グループ、特権をすべて表示する

whoami /all

PC(コマンドプロンプト):今のトークンの特権だけを表示する

whoami /priv

ファイルサーバ(コマンドプロンプト):フォルダのACLを表示する

icacls "D:\Share\営業資料"

ファイルサーバ(PowerShell):フォルダのACLを表示する

Get-Acl -Path "D:\Share\営業資料" | Format-List

ファイルサーバ(PowerShell):共有のアクセス許可を表示する

Get-SmbShareAccess -Name "営業資料"

icacls の表示では、アクセス許可が略号で表されます。よく見るものを挙げます。

表示意味
F / M / RX / R / Wフル コントロール/変更/読み取りと実行/読み取り/書き込み
(I)親フォルダから継承したACE
(OI)このフォルダの中のファイルに継承される
(CI)このフォルダの中のフォルダに継承される
(IO)このフォルダ自身には効かず、中のものにだけ継承される

まとめ

Windowsは、利用者のアクセストークンと、ファイルやフォルダのACLをSIDで照らし合わせて、アクセスを許可するかどうかを決めます。共有フォルダでは、共有とNTFSの2つの門を通り、より厳しいほうの権利になります。

項目押さえておくこと
アクセストークンサインイン時にできる通行証。ユーザーとグループのSID、特権が入る
ネットワーク越しファイルサーバが利用者のトークンを作り、なりすまして照合する
ACL(DACL)ACEの並び。ACEは「だれに・許可か拒否か・どの権利を」
判定上から順に見て、拒否に当たれば拒否。許可で権利がそろえば許可。そろわなければ拒否
順番明示的な拒否 → 明示的な許可 → 継承した拒否 → 継承した許可
共有とNTFS両方が効き、より厳しいほうになる。「有効なアクセス」で確認できる
UAC管理者でも、ふだんは標準ユーザー相当のトークン。Administratorsだけに許可したものは昇格しないと開けない

コメント