第2回 アクセス制御リストACLWindows OS入門(2/2 ページ)

» 2014年07月17日 17時47分 公開
[打越浩幸デジタルアドバンテージ]
前のページへ 1|2       

Windows OSにおけるACL

 以下ではNTFSファイルシステムにおけるACLを例に、ACLで設定できる機能について見ていこう。ファイルやフォルダーのACLの状態は、プロパティ画面を表示させ、[セキュリティ]タブを選択すると表示される。

ACLの簡易表示画面 ACLの簡易表示画面
これはWindows 8.1の画面例。エクスプローラーでファイルやフォルダーのプロパティ画面を開くと、ACLを確認できる。
  (1)まず[セキュリティ]タブを開く。
  (2)ACEが1行ずつ表示されている。この例では4つのACEエントリが定義されている(ように見える)。継承属性の違いなどにより、実際には複数のエントリに分かれていることがある(「継承」については後で詳しく説明する)。許可と拒否は異なるACEなので、同じユーザーで許可と拒否の両方を定義すると、実際には2つ以上のACEに分かれる。
  (3)許可もしくは拒否の定義。チェックマークが薄いグレーになっているのは、上位フォルダーから継承した属性を表している。濃い黒のチェックマークの場合は、継承ではなく、このプロパティ画面で設定されている属性。
  (4)「フルコントロール」や「変更」などの代表的なアクセス権以外は、全てこの「特殊なアクセス権」として表示される。
  (5)これをクリックすると、ACLの簡易編集画面が表示される。
  (6)これをクリックすると、ACLの詳細編集画面が表示される。継承などの属性を編集するには、こちらを使う。

 ただしこの画面ではACLの全ての情報が表示されているわけではなく、かなり簡略化されている(後述する「ACLの継承」などの情報が省略されている)。また、許可と拒否のACEが1つにまとめて表示されているので、ACEの適用順序が分かりづらくなっている。ACLの設定状態をより詳しく確認するには、上の画面にある[詳細設定]ボタンをクリックする。すると次のような画面が表示される(これはWindows 8.1の画面例)。OSのバージョンによってボタンの文字列などが少し異なるが、内容はほぼ同じである。

ACLの詳細表示画面 ACLの詳細表示画面
このACL中には、全部で5つのACEが含まれていることが分かる。
  (1)ACLが割り当てられているオブジェクト名(この場合はNTFSのフォルダー名)。
  (2)オブジェクトの所有者情報。
  (3)ACLを表示/確認するには[アクセス許可]タブを選択する。
  (4)ACEの種類。「拒否」と「許可」がある。ACEの適用順序は「拒否」→「許可」の順なので、「拒否」のACEが先に列挙され、「許可」のACEは下の方に表示されるようになっている。
  (5)ユーザー名もしくはグループ名。
  (6)権限。
  (7)ACEをどこから継承しているかという情報。新しいファイルやフォルダーを作成するたびにACLを新しく作成して割り当てるのではなく、上位のフォルダーで定義されているACLを継承して利用するのが一般的。
  (8)このACEをどこまで継承するかという指定。
  (9)新たにACEを追加したり、選択したACEを削除/編集したりしたい場合はこれらのボタンをクリックする。
  (10)上位から継承しているACLをキャンセルして、このオブジェクト(この場合はフォルダー)に対して新しくACLを割り当てたい場合はこれをクリックする。Windows 7/Windows Server 2008 R2以前のWindows OSでは、この項目はボタンではなく、[このオブジェクトの親からの継承可能なアクセス許可を含める]や[子オブジェクトに適用するアクセス許可エントリを親から継承し、さらにここで明示的に定義されているものに含める]というラベルの付いたチェックボックスになっている。
  (11)このチェックボックスをオンにすると、このフォルダーとその中に含まれる全てのオブジェクトに対して、ここで定義されているACLと同じになるように、ACLがリセットされる。

 ACLがどのようなものか、(ACLを構成する)ACEにはどのような情報が含まれるのか、などはこの画面を見ると理解しやすいだろう。

 上記画面で[追加]ボタンか[編集]ボタンをクリックすると、ACEのエントリを追加/編集できる。ACEごとに次のような情報を設定できる。

ACEの編集/定義 ACEの編集/定義
この画面には、個々のACEに設定可能な項目が一覧表示されている。
  (1)ユーザー名もしくはグループ名を指定、選択する。
  (2)アクセス許可ACEか、アクセス拒否ACEかを選択する。
  (3)これはフォルダーの場合にのみ設定できる項目。継承先を選択する。詳細は後述。
  (4)設定可能な権限の一覧。これは全権限を表示させたところ。
  (5)これをクリックすると簡易表示になり、「フルコントロール」や「変更」「読み取りと実行」といった分かりやすい名前で設定できるようになる。ただしこれは表示方法が変わるだけであり、最終的にはこの画面に表示されているいずれかの権限を設定することになる。
  (6)これもフォルダーの場合にのみ設定できる項目。これをオンにするとACLの継承が制限され、このフォルダーの中にあるファイルかサブフォルダーまでしかACLが継承されなくなる(サブフォルダー内のファイルやサブフォルダーには継承されない)。

 Windows 7/Windows Server 2008 R2以前のWindows OSでは、この画面は次のように表示されるが、内容は同じである。

ACEの編集/定義画面(旧形式) ACEの編集/定義画面(旧形式)
Windows 7/Windows Server 2008 R2以前のWindows OSでは、このように許可と拒否が1つの画面中で同時に設定できるようになっているが、内容は同じである。ただし、Windows 8以降にある簡易表示はできず、常に全権利が表示されている。
  (1)許可と拒否の両方を同時に確認しながら設定できる。許可と拒否の両方のチェックボックスをオンにすると、許可ACEと拒否ACEの2つのACEエントリが作成される。

 これらの画面で設定できる項目の意味は次の通りである(Windows 8での表記で記述)。

プリンシパル

 「プリンシパル(principle)」とは、このACEの対象となるユーザーやグループアカウントを表す。[プリンシパルの選択]のリンクをクリックすると、ユーザーやグループを変更できる。

種類:[許可]/[拒否]

 「種類」ではアクセス許可ACEかアクセス拒否ACEかを選択する。同じプリンシパルに対して許可と拒否のACEを定義すると、実際には2つのACEが作成されることになる。

適用先

 この画面で定義されているACEの適用先を選択する。これについては後述の「ACLの継承」を参照のこと。

高度なアクセス許可

 ACEで定義できるアクセス権は、この画面のように全部で14種類ある。簡易表示の場合は6種類しか表示されないが、実際にはこのような細かいアクセス許可属性を組み合わせたものから構成されている。簡易表示と高度な表示の対応は次のようになっている。

特殊なアクセス許可 フルコントロール 変更 読み取りと実行 フォルダーの内容の一覧表示 読み取り 書き込み
フォルダーのスキャンとファイルの実行
フォルダーの一覧/データの読み取り
属性の読み取り
拡張属性の読み取り
ファイルの作成/データの書き込み
フォルダーの作成/データの追加
属性の書き込み
拡張属性の書き込み
サブフォルダーとファイルの削除
削除
アクセス許可の読み取り
アクセス許可の変更
所有権の取得
同期
ファイル/フォルダーのアクセス許可設定
アクセス許可における「フルコントロール」や「変更」「読み取りと実行」などは、実際には複数のアクセス権を組み合わせたもので構成されている。

ACLの継承

 ACLはファイルやフォルダーに設定するだけでなく、上位のフォルダーから「継承(Inherit)」することもできる。継承機能を使うことにより、新規作成されたファイルやフォルダーに対して、いちいちACLを設定する必要がなくなる。もし継承機能がなければ、新規作成されたファイルやフォルダーにはACLが何もない状態(=誰もアクセスできない状態)になってしまうだろう。

 例えばユーザーごとのフォルダーを作成する場合、そのユーザーに対してはフルアクセス権を、それ以外のユーザーには(フルアクセスではなく)やや制限されたアクセス権を与えておくのが一般的である。ユーザーのルート(トップ)となるフォルダー(現在のWindows OSなら「C:\Users\user01」などとなる)にこのようなACLを設定して、さらに継承機能を有効にしておけば、その下に作られるファイルやフォルダーには全て自動的に同じACLが割り当てられる。

 アクセス権の継承は、フォルダーのACLでのみ定義できる(ファイルのACLには、継承という概念はない。ファイルの「中」に新しいファイルやフォルダーを作成することはできないから)。継承はACL中のACEごとに設定できる。継承を有効にしておくと、そのACEが新しく作成されたサブフォルダーやファイルにも継承される。継承されたACEは、プロパティの「セキュリティ」タブ画面では、薄くグレー表示されることは、すでに述べた通りだ(先の画面「ACLの簡易表示画面」参照)。

 継承機能によって、どこまで下位のファイルやフォルダーにまでACEが伝達されるかは、設定によって変更できる。それを決定するのが、先の画面「ACEの編集/定義」中にある「適用先」と「これらのアクセス許可を、このコンテナーの中にあるオブジェクトやコンテナーにのみ適用する」の設定である。次の画面のように、適用先には全部で7つの選択肢があり、画面下部にあるチェックボックスのオン/オフと合わせると、全部で14通りの組み合わせがある。

ACEの適用先の選択 ACEの適用先の選択
フォルダーに設定されたACEの内容は、その中や下位にあるファイルやフォルダーにまで自動的に伝達させることができる。これを「継承」という。どこまで継承させるかは、これらの設定で制御できる。
  (1)継承先の設定。7通りある。デフォルトでは「このフォルダー、サブフォルダーおよびファイル」が選択されている。
  (2)継承先を限定するかどうかの設定。オフにしておくと、どこまでも継承される。オンにしておくと、1つ下のファイルやフォルダーまでにしか継承されなくなる。

 「適用先」には全部で7つの選択肢があるが、具体的には次のような意味を持つ。

適用先表記 OI:オブジェクト継承 CI:コンテナー継承 IO:継承のみ cacls/icaclsでの表記
このフォルダーのみ (無し)
このフォルダー、サブフォルダーおよびファイル (OI)(CI)
このフォルダーとサブフォルダー (CI)
このフォルダーとファイル (OI)
サブフォルダーとファイルのみ (OI)(CI)(IO)
サブフォルダーのみ (CI)(IO)
ファイルのみ (OI)(IO)
適用先の選択肢
適用先は、実際には「OI」「CI」「IO」の3つの組み合わせで実現されている。「IO」のみは意味がないので、存在しない。「cacls/icacls表記」とは、caclsやicaclsコマンドで利用されている書式である。管理業務などでACLの状態をチェックしたり、一括設定したりする場合にはこれらのコマンドや書式を使うことになるので、覚えておくとよい。

 この表の中にある「OI」「CI」「IO」(および「NP」「ID」「I」)は、次のような意味を持つ。この表記は、後述するcaclsやicaclsコマンドで利用されている書式である。

表記 意味 内容
OI(Object Inherit) オブジェクト継承 ファイルに継承される
CI(Container Inherit) コンテナー継承 フォルダーに継承される
IO(Inherit Only) 継承のみ ACEは下位のファイルやフォルダーに継承されるだけで、このフォルダーには適用されない
NP(No Propagate Inherit) 継承の禁止 これはicaclsコマンドでのみ表示される情報。次に説明するチェックボックス「これらのアクセス許可を、このコンテナーの中にあるオブジェクトやコンテナーにのみ適用する」がオンの場合に表示される
ID(Inherited)/I(Inherit) 継承されたアクセス権 「ID」はcaclsコマンドの、「I」はicaclsコマンドにおける出力表記。上位のフォルダーから継承されたACLを表す
継承の選択肢

 「これらのアクセス許可を、このコンテナーの中にあるオブジェクトやコンテナーにのみ適用する」のチェックボックスをオンにすると、継承先をサブフォルダーまでに限定できる。デフォルトではこのチェックボックスはオフなので、継承先が「このフォルダーのみ」以外の場合は、どこまでも継承されることになる。

 継承先と、このチェックボックスの意味を図にすると次のようになる。

継承先の意味 継承先の意味
フォルダーに設定したACLは、その継承設定に従って下位のファイルやフォルダーへも伝達される。「(CI)コンテナー継承」はフォルダーへの継承、「(OI)オブジェクト継承」はファイルへの継承を表す。ACLは、基本的には自分自身(図中の「このフォルダー」)へも適用されるが、「(IO)継承のみ」が有効な場合は、自分自身には適用されない。「(NP)」がオンの場合は、自分自身か、「このフォルダーのファイル」「サブフォルダー」までしか継承されない。

ACEの優先度

 ACEには、「アクセス許可ACE」と「アクセス拒否ACE」の2種類があり、さらに「上位のフォルダーから継承されるACE」もある。このように、1つのオブジェクトに対して複数のACEが定義されているのが一般的であり、これらのACEは、次に示す順でマッチするものがないかどうかがチェックされる。アクセスに使用しているプリンシパル(ユーザーやグループ名)に該当するACEが見つかれば、そのACEが最終的に適用されることになる。

  • まず該当オブジェクトで明示的に定義されている「アクセス拒否ACE」をチェックする
  • 次に該当オブジェクトで明示的に定義されている「アクセス許可ACE」をチェックする
  • 継承したACLの場合は、継承元が一番近いフォルダー(直接の親フォルダー)のACLでチェックする。この場合も、「拒否ACE」→「許可ACE」の順でチェックする
  • その次は、もう1つ上の親フォルダーのACLでチェックする。というふうに、1つずつフォルダーを継承元まで遡ってチェックする
  • マッチするACEがなければ、アクセスは拒否される

ACLをコマンドプロンプト上で操作する

 ACLの状態を確認するには、エクスプローラーを使ってファイルやフォルダーのプロパティ画面から操作することが多いが、コマンドプロンプト上で操作することも可能である。ACLを操作するためのコマンドはいくつかあるが、代表的なものとしてはcacls.exeやicacls.exe、subinacl.vbsコマンドなどがある。詳細については以下の記事を参照していただきたい。

 これらのコマンドを使えば、ACLを表示/編集できるだけでなく、ACLの状態を保存しておいて後で戻すとか、複数のファイルやフォルダーのACL設定をまとめて変更する、といったことが簡単に行える。

 caclsコマンドは一番古くからWindows OSに用意されているACLの操作用コマンドであるが、いくらか機能が不足しているので、現在では後継のicacls.exeコマンドを使うことが推奨されている。

C:\Users\user01\Documents>cacls folder
C:\Users\user01\Documents\folder PCWIN81\user02:(OI)(CI)(DENY)(特殊なアクセス:) …拒否ACE
                                                        FILE_WRITE_DATA
                                                        FILE_APPEND_DATA
                                                        FILE_WRITE_EA
                                                        FILE_WRITE_ATTRIBUTES

                                 PCWIN81\user02:(OI)(CI)R …許可ACE
                                 NT AUTHORITY\SYSTEM:(OI)(CI)(ID)F …許可ACE。フルコントロール権限
                                 BUILTIN\Administrators:(OI)(CI)(ID)F
                                 PCWIN81\user01:(OI)(CI)(ID)F

C:\Users\user01\Documents>



 icacls.exeはcacls.exeに代わる後継のコマンドで、ACLの保存や復元、リセットなどの機能を持っている。

C:\Users\user01\Documents>icacls folder
folder PCWIN81\user02:(OI)(CI)(DENY)(W) …拒否ACE
       PCWIN81\user02:(OI)(CI)(RX) …許可ACE
       NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F) …許可ACE。フルコントロール権限
       BUILTIN\Administrators:(I)(OI)(CI)(F)
       PCWIN81\user01:(I)(OI)(CI)(F)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

C:\Users\user01\Documents>



 これらのコマンドのより詳しい使い方については、前出のTIPS記事を参照していただきたい。


 今回はアクセス制御を実現するACLについて解説した。ACLに対する操作は、ファイルサーバー(NTFS)だけでなく、Windows OS管理のさまざまな場所で使われているので、ぜひ理解しておいていただきたい。


「Windows OS入門」のインデックス

Windows OS入門

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

AI for エンジニアリング
「サプライチェーン攻撃」対策
1P情シスのための脆弱性管理/対策の現実解
OSSのサプライチェーン管理、取るべきアクションとは
Microsoft & Windows最前線2024
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。