Windowsのアクセス制御

投稿日:
最終更新日:

この記事はhydrogen Advent Calender 2024の17日目の記事です。MMA Advent Calender 2024の17日目の記事でもあります。

昨日の記事はshiragi君による携帯電話番号を変えた話でした。

もはや、記事がshiragi君一色になりつつあります。

UNIX系のアクセス権

Windowsにおけるファイルの権限はUNIX系とはまったく異なる仕組みが採用されている。UNIX系のファイルシステムでは、各ファイルには所有者、所有グループが存在し、それら2つ及びそれ以外のユーザーに対して読み取り、書き込み、実行の3種類の権限を設定することができる。そして、所有者はいかなる場合でもそのファイルの権限を変更することができる。それ以外にもフラグとしてスティッキービットや、SUID、SGIDなどの機能が存在するが、後2つは権限と呼ぶべきものではない。スティッキービットはファイルに付与した際の挙動は様々あるが、ディレクトリに付与した場合はそのディレクトリの所有者とディレクトリの内容物の所有者以外に改名や削除を禁ずるものとなる。

WindowsのACL

それに対し、Windowsでは所有者が存在していかなる場合でもファイルの権限を変更できるという点は共通しているがそれ以外の点が全く異なる。まず、所有グループという概念が存在せず、所有者としてグループも設定可能である。権限の管理はACLによって行われているのでより細かく対象を限定して、各ユーザーやグループに対して操作の許可及び拒否の権限エントリを設定することができる。そして、肝心の権限の種類は極めて多種多様に渡り、すべてを細かく説明するのは困難なため、次の表に簡単な説明を示すにとどめる。

識別子権限名ファイルに適用時ディレクトリに適用時
RDデータの読み取り/ディレクトリの一覧表示ファイルの読み取りディレクトリの内容物の一覧表示
ディレクトリへのアクセス
WDデータの書き込み/ディレクトリの作成ファイルへの書き込みディレクトリ内にファイルを作成
Xスキャン/実行ファイルの実行サブディレクトリにアクセス可能
ADデータの追加/サブディレクトリの追加ファイルへの追記(上書き不可)サブディレクトリの作成
DE削除ファイルの削除ディレクトリの削除
DC子の削除N/Aディレクトリの内容物の削除
RA属性の読み取りファイルの属性の読み取りディレクトリの属性の読み取り
WA属性の書き込みファイルの属性の書き込みディレクトリの属性の書き込み
REA拡張属性の読み取りファイルの拡張属性の読み取りディレクトリの拡張属性の読み取り
WEA拡張属性の書き込みファイルの拡張属性の書き込みディレクトリの拡張属性の書き込み
RC読み取り制御ACLの読み取りACLの読み取り
WDACDAC の書き込みACLへの書き込みACLへの書き込み
WO所有者の書き込み所有者の変更所有者の変更
S同期ファイルの同期ディレクトリの同期
ASシステム セキュリティへのアクセス監査ログの読み取り監査ログの読み取り


注目すべきは、ACLの書き換え権や所有者の変更権なども権限として設定できる点である。UNIX系のシステムでは、前者は所有者もしくはrootにしかできず、後者は所有者ですらできない。この点を鑑みると、WindowsはUNIX系のアクセス制御と比較してよく言えば柔軟で、悪く言えば複雑な権限管理が可能であると言える。

拒否エントリ

先ほど、ACLには拒否の権限エントリを設定できると述べた。UNIX系のシステムでは、特定のグループにアクセスを許可しつつ、そのうちの特定のユーザーのアクセスを拒否するようなことはできないが、Windowsにおいてはそのグループの許可エントリとそのユーザーの拒否エントリを同時に設定することで実現可能である。なお、アクセス許可の書き換えや所有者の書き込みの権限を拒否することでファイルの権限を書き換えられることを防げるように思えるかもしれないが、ACLは特権による操作を防ぐことはできないので、管理者は特権を用いて所有権を取得することでACLを書き換えることができるという点に留意すべきである。

オブジェクトとACL

実はこのACLはWindows上のセキュリティ保護可能なありとあらゆるものに付与されており、それをセキュリティ保護可能なオブジェクトという。

ファイルのほかにレジストリもそのようなオブジェクトであり、実はACLが設定されている。WindowsにおいてACLがどれほど重要なシステムであるかがうかがえる。