WindowsのACL(Access Control List)がわかりにくいのは、ユーザーが見ることができる「ACLのようなもの」とWindowsが内部で持っている「情報としてのACL」の間に隔たりがあるからだ。
というのも、前回の【準備編】で紹介したようなエクスプローラーの機能やicaclsコマンドは、ユーザーに使いやすいように、「情報としてのACL」を加工して「ACLのようなもの」を表示している。実体としてのACLは、ユーザーが持つアクセス権を示すビットでしかなく、実利用での「書き込み禁止」といった設定に対して複数のビットを操作しなくてはならず、これをユーザーにやらせると、間違った操作になる可能性が高く、場合によっては、ユーザー自身で解決ができなくなるケースも生じうる。
また、エクスプローラーなどにある「フルアクセス」などは、対応するアクセス権があるのではなく、アクセス権の一部を有効にする操作がなされるだけで、ACL自体に「フルアクセス」というアクセス権があるわけではない。
もう1つの理由としては、ACLは、ファイルだけでなく、セキュリティ保護が可能なオブジェクトすべてで使われるため、そのドキュメントはどうしても難解なものになりがちである。これに対して、エクスプローラーやicaclsコマンドは、ファイルだけを対象にしている。
そういうわけで、MicrosoftにあるACLの解説を見ると、エクスプローラーの表示やicaclsコマンドとは隔たりがあり、同じものなのか? と感じてしまうわけだ。
今回は、ファイルACLの定義を見ていくことにする。定義は、WindowsのSDK(Windows Kit)に含まれているヘッダーファイルの中にある。また、C++などの言語を使って、WindowsのAPIを呼び出すプログラムを開発するためのドキュメントがMicrosoftのサイトに用意されている。
しかし、これを見るだけでACLを理解するのは、プログラマーでないと難しい。プログラムを組むことができるのなら、自分でプログラムを書いて確かめることができるが、そうでないと、開発者向けドキュメントを理解するのは困難だ。
ACLとACEの関係
ACLは、ACEの集まりである。
ACLを表す構造体(メモリ内のデータ構造)には、ACLのバージョン(リビジョン)やACEの数、ACL全体の大きさを表すデータぐらいしかない。なお、ACL自体がセキュリティ保護対象に付属する情報であるため、ACLの中には保護対象を識別するような情報がない。
ACEは、ACEのタイプなどを表すヘッダ情報とアクセス権を示す32bitのデータ(アクセスマスク)、対象となるプリンシパル(のSID)や対象となるオブジェクトのタイプ(GUIDで表現されている)などが含まれている。
つまり、ACEは、「誰に」「何を」「許可/禁止」するのか、「継承」はできるのか、という情報を持っていて、ACLは、このACEを複数持つことでアクセスの制御を細かく設定できる。
この中で“キモ”となるのが、アクセスマスクと呼ばれる情報である。簡単に言えば、このアクセスマスクがACEのアクセス権を示す。
このアクセス権が32bitのバイナリ情報になっているのは、多数のACEを高速に検査して、アクセス権を判定するためである。ACEは、継承されたり、個別に設定されることがある。また、ユーザーのグループなどにもアクセス権を与えることができるため、アクセス権を調べるには、アクセスするプリンシパルに有効なすべてのACEを調べる必要がある。このとき、アクセス権がビットで表された「数値」になっているほうが計算がしやすい。
具体的には、アクセスマスクは下の図のような32個のビットからなっている。このうち下位の16bit(0~15ビット目)は、ACLでの保護対象となるオブジェクトごとに定義されるオブジェクト固有のアクセス権である。
上位の16bitは、いくつかの部分に分かれる。16~23ビット目は、「標準アクセス権」と呼ばれ、どのオブジェクトに対しても共通のアクセス権を示す。
最上位の28~31ビットは、「汎用アクセス権」と呼ばれる。これは、オブジェクトごとに対象ビットは異なるが、基本的には、標準アクセス権とオブジェクト固有アクセス権の特定のビットが有効になっているときにオンになる。標準アクセス権とオブジェクト固有アクセス権を要約したものだ。これは、簡易なアクセス権の判定に使われる。
アプリケーションによっては、「読めるのか?」「書き込めるかどうか?」「実行できるのか?」といった単純な判定しか必要としないことがある。あるいは「リードオンリーにする」「実行できるようにする」といった簡単なアクセス権設定しかしないソフトウェアも少なくない。汎用アクセス権は、こうした簡易な使い方をするアプリケーション向けに「要約」されたACLを提供する。
この連載の記事
-
第429回
PC
Windows Updateの「利用可能になったらすぐに最新の更新プログラムを入手する」はオンにした方がいいか? -
第429回
PC
WindowsからWordPadが廃止! RTF(Rich Text Format)はどうなる? -
第428回
PC
Google/Bingで使える検索オプション -
第427回
PC
WindowsのPowerShellのプロファイルを設定する -
第426回
PC
WindowsでAndroidスマホをWebカメラにする機能を試した -
第425回
PC
無料で使えるExcelにWord、Microsoft 365のウェブ版を調べた -
第424回
PC
Windowsの基本機能であるクリップボードについてあらためて整理 -
第423回
PC
PowerShellの今を見る 2つあるPowerShellはどっち使えばいい? -
第422回
PC
Windows 11の目玉機能が早くも終了、Windows Subsystem for Android(WSA)を振り返る -
第421回
PC
進化しているPowerToys LANで接続したマシンでキーボード/マウス共有機能などが追加 -
第420回
PC
Windowsプレビュー版に搭載されたsudoを試す - この連載の一覧へ