フォルダーが開けないとき、まず疑うのは、アクセス権(ACL)です。「共有フォルダーが、開けないんですけど! 昨日までは、見えてたのに」
情シスの問い合わせで、ネットワークの次に多いのが、アクセス権の相談です。そして、僕の経験では、「消えた」のではなく、「見えなくなった」だけのことが、ほとんどです。
シリーズ「情シスのための Windows OS 基礎」の第3回です。前回(第2回:プロセス・サービス・タスクの違い)で、「何が動いているか」を見ました。今回は、誰が、どのファイルに、何ができるかを決める仕組みを、整理します。
結論:ファイルとフォルダーごとの「入館名簿」(ACL)を読む
Windows のファイルやフォルダーには、ACL(アクセス制御リスト)という名簿が付いています。「誰に、何を許可・拒否するか」の一覧です。
| 用語 | たとえ | 意味 |
|---|---|---|
| ACL | 入館名簿 | 許可・拒否の一覧全体 |
| ACE | 名簿の1行 | 1人(1グループ)分の許可・拒否 |
| 所有者(Owner) | 部屋のオーナー | 権限を変更できる人 |
| 継承 | 建物全体のルールの引き継ぎ | 親のフォルダーの設定が、子に引き継がれる |
権限の種類(icacls の記号)
icacls というコマンドで、ACL を見られます。権限は、記号で表示されます。
| 記号 | 意味 |
|---|---|
F |
フルコントロール(すべて) |
M |
変更(読み書き・削除) |
RX |
読み取りと実行 |
R |
読み取りのみ |
W |
書き込みのみ |
D |
削除 |
N |
アクセスなし |
継承を表す記号も、並びます。
| 記号 | 意味 |
|---|---|
(I) |
親から継承したもの |
(OI) |
このフォルダー内のファイルにも引き継ぐ |
(CI) |
このフォルダー内のフォルダーにも引き継ぐ |
(IO) |
継承のみ(そのフォルダー自身には、効かない) |
実機で確認:フォルダーの ACL を読む
練習用に作った C:\Temp\lab を、見てみます。
Get-Acl C:\Temp\lab | Format-List Owner
icacls C:\Temp\lab
icacls C:\Temp\lab\acl-demo

画面を、読んでみます。
- 所有者:
PC-SAMPLE\user(僕の PC の、僕のアカウント。例の値に置き換え) BUILTIN\Administrators:(I)(OI)(CI)(F):管理者グループは、フルコントロール。(I)で、親(C:\Temp)から継承したもので、(OI)(CI)で、中のファイルとフォルダーにも引き継がれるNT AUTHORITY\SYSTEM:(I)(OI)(CI)(F):OS 自身も、フルコントロールBUILTIN\Users:(I)(OI)(CI)(RX):一般ユーザーは、読み取りと実行までNT AUTHORITY\Authenticated Users:(I)(M)と…(I)(OI)(CI)(IO)(M):サインインしているユーザーは、変更できる。2行あるのは、フォルダー自身と、中身で、分けて書かれているからです((IO)は、中身だけに効く行)
下のフォルダー(acl-demo)の ACL は、すべて (I)(継承)で、親とまったく同じです。特別な設定をしていなければ、子は、親のルールに従うわけです。
「拒否」が、強い
ACL には、許可だけでなく、拒否もあります。並び方のルールがあります。
- 明示的な拒否
- 明示的な許可
- 継承された拒否
- 継承された許可
つまり、同じ人に、許可と拒否が書かれていると、拒否が勝つことが多い(先に評価される)わけです。「許可されているはずなのに、入れない」は、拒否(N や deny)が、どこかに書かれているサインかもしれません。
フォルダーの権限を変更するときの安全策
権限を変えるのは、やり直しがきかないことがあります。変える前に、現在の ACL を、ファイルに保存しておきます。
icacls C:\Temp\lab /save C:\Temp\lab_acl_backup.txt /t
戻すときは、/restore を使います(これも、練習用のフォルダーで、練習してから)。
僕のやらかし:継承を切ったら、自分が入れなくなった
あるフォルダーに、特定の人にだけ、権限を絞りたいと考えました。「継承が、じゃまだな」と、継承を無効にして、必要な人だけを残すつもりでした。
ところが、継承を切るときに、「親の権限を、コピーするか、削除するか」を選ぶ場面で、削除を選んでしまいました(/inheritance:r)。結果、誰の名前も、書かれていない状態に。管理者である自分すら、中を開けなくなりました。
そのときは、フォルダーの所有者として、自分に権限を付け直して、事なきを得ました。所有者は、権限を変更できるからです。ただし、所有者の変更には、管理者権限が要ります。
教訓は、2つです。
- 継承を切るときは、「コピー」を選んで、あとから、不要な行を消す
- 事前に、
/saveで、元の ACL を保存しておく
出前を断ったあとで、自分の食べるものが、なくなっていた、みたいな話です。
今回覚えたコマンド
| コマンド | 意味 |
|---|---|
icacls <パス> |
アクセス権(ACL)を見る |
Get-Acl <パス> |
PowerShell で ACL と所有者を見る |
icacls <パス> /save <ファイル> /t |
現在の ACL を保存する(変更前の備え) |
icacls <パス> /restore |
保存した ACL を戻す |
icacls <パス> /inheritance:e(d、r) |
継承の有効化(e)、無効化してコピー(d)、無効化して削除(r) |
次回予告
次回は、イベントログ。PC に起きたことは、ログに、時刻つきで、残っています。「いつ、何が、起きたか」を、Get-WinEvent で調べる方法を、学びます。
参考
ITもごはんも、腹八分目が長続きのコツ!


コメント