このページの本文へ

前へ 1 2 次へ

Windows Info 第323回

WindowsのACL(Access Control List)を解説する【準備編】

2022年04月17日 10時00分更新

文● 塩田紳二 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

 今回から複数回に分けて、WindowsのAccess Control List(ACL、アクセス制御リスト)を解説することにする。ACLは、Windowsの中でも面倒な部分の1つで理解しなくても特に困るというものでもないが、複雑なファイルアクセス権の管理(あの人たちにファイルを見せたくないけど、自分たちは編集できる)をする場合、避けて通れないことがある。

 ACLが面倒なのは、Windowsでは直接見えにくいものだからだ。ただし、すべてのオブジェクトのACLを説明することはかなり大変なので、ここでは対象をファイルシステム(ファイルとディレクトリ)に限定することにする。と言っても、ファイルシステム固有の部分があるだけで、基本はどのACLも同じである。

Windowsでファイルやディレクトリにアクセスできないことがあるが、それはアクセス権を持っていないから。それぞれのファイルやディレクトリに対するアクセス権を定義しているのがACLである

そもそもACLとはなんぞや?

 ACL、Access Control ListがWindowsに導入されたのは、Windows NTのときだ。当時、米国政府の調達に入るためには、POSIXに準拠していることが必要であり、Windows NTはその仕様に合うべく作られた。POSIXのAPIに関しては、Windows Subsystem for Unixで対処したが、その下に入るファイルシステムであるNTFSに関しては、POSIX準拠とすることが求められた。

 当時POSIXでは、ファイルのアクセス制御にACLを使うことが検討されていた。結果的にPOISXのACLは策定されなかったが、検討の過程でPOSIXはACLの概念を定義したドラフト文書を作成した。Sun MicrosystemsがNFS用のACLを開発し、これがUnix用としては標準的に使われることになった。このため、ACLはUnixや現在のLinuxでも利用できるのだが、伝統的なUnixのアクセス権管理(俗にパーミッションと呼ばれる)のままで使うことも多い。というのも、ACLで可能にする細かいアクセス管理が必要ない環境も少なくないからだ。

 Windowsではファイルシステムのアクセス管理にACLを採用した関係もあり、セキュリティで保護するすべてのオブジェクトのアクセス管理にもACLを使う。Windows関連のドキュメントを見ると、「セキュリティ記述子」「セキュリティディスクリプタ」などと呼ばれる単語が目につくが、これらが指し示すセキュリティ情報の中身がACLである。そして、結果的にACLを標準として組み込んだOSは、Windowsぐらいしかない。なので、Windows固有のものと思われがちだが概念としてはそうではないのだ。

 ACLとは簡単に言えば、アクセス権とそれを付与される対象を指定したACE(Access Control Entry)を複数まとめてリストにしたものである。このACLは、ファイルやディレクトリにそれぞれ存在する。アクセス許可がリストになっているため、対象ごとにアクセス権の管理を細かくできるというのが特徴であり、メリットでもある。反面、ACLは複雑なものになった。

 Windowsでは、ACEによるアクセス権を付与される対象を「プリンシパル」という。ここでなぜユーザーでないのかというと、実際にオブジェクトを扱うのは、ユーザーが起動したプログラムやそこから発生したスレッドであったり、あるいはサービスのようなプログラム、人でない管理用のユーザー(コンピュータアカウント)であったりするからだ。とりあえずはプリンシパルと言われたときに、ユーザーを想定してもかまわないが、概念的にはユーザーに限るものではないことは理解しておいてほしい。

 このプリンシパルは、たとえばアカウント名などのような人間にわかりやすい「表示名」で扱うこともできるが、内部的には「セキュリティ識別子」(Security ID。SID)で表現される。Windowsでときどき見かける「S-1-」から始まる数字とハイフンからなる文字列がSIDの文字列表現だ(SID自体はバイナリデータ)。

 ACEによるアクセスが制御される対象はすべてWindowsの「オブジェクト」である。これを「セキュリティ保護可能なオブジェクト」という。ここではファイルやディレクトリに限って話をするが、特に限定する必要がない場合には、「オブジェクト」と呼ぶことにする。

 ACLには、いわゆるアクセス制御に使うDACL(Discretionary ACL。随意ACLなどと呼ばれる)と、Windowsの監査(ファイルアクセスなどのOS内の操作を追跡して記録すること)用のSACL(System ACL。システムACL)がある。しかし、通常ACLと言えば、DACLのことを意味する。

前へ 1 2 次へ

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

プレミアムPC試用レポート

ピックアップ

ASCII.jp RSS2.0 配信中

ASCII.jpメール デジタルMac/iPodマガジン