一覧OS-11-1 · Windowsの基本構造

WindowsのSIDとアクセス制御リスト

トークン内のSIDとDACLの順序を照合し、同じファイルへの読取り・書込みの違いを確認します。

説明

Windowsのアクセス制御では、プロセスやスレッドのアクセストークンと、対象に付いたDACLを照合します。トークンには利用者やグループのSIDが含まれ、DACLの各ACEが特定のSIDに対する許可や拒否を表します。

LAB\ayaが所有するレポートを使い、Editorsグループから継承した変更権限で内容を読みます。その後、ayaの書込みだけを拒否し、同じファイルで読取りと書込みを比べます。拒否を外した後も同じページで更新結果まで確認します。

1利用者をSIDで確認

whoami /userで、現在のトークンの利用者名とSIDを表示します。SIDは名前の変更とは別にアカウントを識別する値です。

whoami /user現在の利用者SID

ayaのSID末尾は1001です。名前が同じでも別アカウントならSIDが異なる場合があります。以後のACL判定はこの利用者SIDと、トークンに含まれる有効なグループSIDを対象にします。

2グループSIDと有効状態

ayaが所属するEditorsとUsersを表示します。この場面ではどちらもトークンで有効です。

whoami /groupsグループと属性

EditorsのSID末尾は2001です。DACLにaya自身の許可がなくても、有効なEditorsの許可が要求を満たす場合があります。deny-only属性などがある場合は、同じSIDが含まれていても許可への使われ方が変わります。

3継承された変更権限

report.txtのDACLを読みます。ファイル所有者はayaで、親ディレクトリからEditorsの変更権限を継承しています。

icaclsDACLを表示 C:\Lab\report.txt対象ファイル

(I)は継承されたACE、(M)はModifyです。この権限には内容の読取り・書込み・削除などが含まれます。所有者であることと、ファイル内容へのアクセスがすべて許可されることは同じではありません。

4グループの許可で内容を読む

現在のトークンとDACLでレポートを読みます。

Get-Content内容を読む C:\Lab\report.txtレポート

total=42が読めます。今回の読取り要求は、有効なEditors SIDへ与えられた継承許可で満たされています。ファイルを開く前のディレクトリ探索など、他の必要条件も満たした設定です。

5利用者へ明示的な書込み拒否を追加

ayaのWを明示的に拒否します。ayaはこのファイルの所有者としてDACLを変更できる設定です。変更後のDACLも表示します。

WDはファイル内容への書込みです。ここではこの権利だけを拒否します。一般的なWにはREAD_CONTROLなど共通の権利も含まれるため、読取りを残すこの例では使いません。

icaclsDACLを変更 C:\Lab\report.txt対象 /deny拒否ACEを追加 "LAB\aya:(WD)"ayaの書込みを拒否; icacls C:\Lab\report.txt変更後を表示

明示的な拒否が継承許可より先に並びます。この順序でayaの書込み要求は拒否されます。「拒否は順序に関係なく常に最後まで優先」という仕組みではなく、DACLのACEを順に処理する規則と並びの両方が関係します。

6拒否された書込み

同じトークンで内容を更新します。読取りと書込みは別の要求なので、直前の読取り成功だけではこの結果を判断できません。

Set-Content内容を更新 C:\Lab\report.txt対象 -Value "total=99"新しい内容 -NoNewline末尾に改行を追加しない

ayaへ一致する明示的な拒否ACEが内容への書込み(WD)を拒否します。Editorsの変更権限が残っていても、この順序では書込み要求を通せません。内容は更新されていません。

7読取りは引き続き許可される

同じファイルをもう一度読み、拒否した権限の範囲と更新の成否を確認します。

Get-Content内容を再確認 C:\Lab\report.txt同じ対象

元のtotal=42です。拒否したのは内容への書込み(WD)であり、今回の読取り要求は継承許可で満たされます。ACEが一つあることだけで全操作が許可または拒否されるわけではありません。

8拒否だけを外して再度更新

/remove:dでayaの拒否ACEを外し、同じ内容の更新を試します。最後に読んで確認します。

icaclsDACLを変更 C:\Lab\report.txt /remove:d LAB\ayaayaの拒否ACEを除去; Set-Content C:\Lab\report.txt -Value "total=99" -NoNewline同じ更新を再試行; Get-Content C:\Lab\report.txt結果を読む

更新後はtotal=99です。拒否の除去後、Editorsの継承許可が書込み要求を満たします。/remove:dはそのSIDの拒否ACEを対象とする指定で、すべての許可や継承を初期化する操作とは異なります。

まとめ

アクセス判定には利用者名だけでなく、トークン内のSIDとその属性を使います。

DACLはACEの順序と要求した権限に従って処理され、明示・継承の並びも結果へ影響します。

一つのファイルでも読取りと書込みは別に判定され、変更後は同じ操作で結果を確認します。

操作履歴と解説を振り返れます。

PowerShell 7 / LAB\aya

1
whoami /user
USER INFORMATION
----------------
User Name SID
========= ==============================================
lab\aya  S-1-5-21-111111111-222222222-333333333-1001
2
whoami /groups
GROUP INFORMATION
-----------------
Group Name     SID                                               Attributes
============== ================================================= ==============================
LAB\Editors    S-1-5-21-111111111-222222222-333333333-2001 Mandatory group, Enabled by default, Enabled group
BUILTIN\Users  S-1-5-32-545                                      Mandatory group, Enabled by default, Enabled group
3
icacls C:\Lab\report.txt
C:\Lab\report.txt LAB\Editors:(I)(M)
Successfully processed 1 files; Failed processing 0 files
4
Get-Content C:\Lab\report.txt
total=42
5
icacls C:\Lab\report.txt /deny "LAB\aya:(WD)"; icacls C:\Lab\report.txt
processed file: C:\Lab\report.txt
Successfully processed 1 files; Failed processing 0 files
C:\Lab\report.txt LAB\aya:(DENY)(WD)
                  LAB\Editors:(I)(M)
Successfully processed 1 files; Failed processing 0 files
6
Set-Content C:\Lab\report.txt -Value "total=99" -NoNewline
Set-Content: Access to the path 'C:\Lab\report.txt' is denied.
7
Get-Content C:\Lab\report.txt
total=42
8
icacls C:\Lab\report.txt /remove:d LAB\aya; Set-Content C:\Lab\report.txt -Value "total=99" -NoNewline; Get-Content C:\Lab\report.txt
processed file: C:\Lab\report.txt
Successfully processed 1 files; Failed processing 0 files
total=99

演習完了