Windows基礎③|ファイル・フォルダーのアクセス権

Windows基礎③|ファイル・フォルダーのアクセス権 Windows

フォルダーが開けないとき、まず疑うのは、アクセス権(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
Get-Acl で所有者を、icacls で C:\Temp\lab とその下のフォルダーのアクセス権を表示した画面。許可の一覧と継承の記号が並ぶ

画面を、読んでみます。

  • 所有者: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 には、許可だけでなく、拒否もあります。並び方のルールがあります。

  1. 明示的な拒否
  2. 明示的な許可
  3. 継承された拒否
  4. 継承された許可

つまり、同じ人に、許可と拒否が書かれていると、拒否が勝つことが多い(先に評価される)わけです。「許可されているはずなのに、入れない」は、拒否(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 で調べる方法を、学びます。

→ 第4回:イベントログと Windows のログ調査

参考

ITもごはんも、腹八分目が長続きのコツ!

コメント