以下ではNTFSファイルシステムにおけるACLを例に、ACLで設定できる機能について見ていこう。ファイルやフォルダーのACLの状態は、プロパティ画面を表示させ、[セキュリティ]タブを選択すると表示される。
ただしこの画面ではACLの全ての情報が表示されているわけではなく、かなり簡略化されている(後述する「ACLの継承」などの情報が省略されている)。また、許可と拒否のACEが1つにまとめて表示されているので、ACEの適用順序が分かりづらくなっている。ACLの設定状態をより詳しく確認するには、上の画面にある[詳細設定]ボタンをクリックする。すると次のような画面が表示される(これはWindows 8.1の画面例)。OSのバージョンによってボタンの文字列などが少し異なるが、内容はほぼ同じである。
ACLがどのようなものか、(ACLを構成する)ACEにはどのような情報が含まれるのか、などはこの画面を見ると理解しやすいだろう。
上記画面で[追加]ボタンか[編集]ボタンをクリックすると、ACEのエントリを追加/編集できる。ACEごとに次のような情報を設定できる。
Windows 7/Windows Server 2008 R2以前のWindows OSでは、この画面は次のように表示されるが、内容は同じである。
これらの画面で設定できる項目の意味は次の通りである(Windows 8での表記で記述)。
「プリンシパル(principle)」とは、このACEの対象となるユーザーやグループアカウントを表す。[プリンシパルの選択]のリンクをクリックすると、ユーザーやグループを変更できる。
「種類」ではアクセス許可ACEかアクセス拒否ACEかを選択する。同じプリンシパルに対して許可と拒否のACEを定義すると、実際には2つのACEが作成されることになる。
この画面で定義されているACEの適用先を選択する。これについては後述の「ACLの継承」を参照のこと。
ACEで定義できるアクセス権は、この画面のように全部で14種類ある。簡易表示の場合は6種類しか表示されないが、実際にはこのような細かいアクセス許可属性を組み合わせたものから構成されている。簡易表示と高度な表示の対応は次のようになっている。
特殊なアクセス許可 | フルコントロール | 変更 | 読み取りと実行 | フォルダーの内容の一覧表示 | 読み取り | 書き込み |
---|---|---|---|---|---|---|
フォルダーのスキャンとファイルの実行 | ○ | ○ | ○ | ○ | − | − |
フォルダーの一覧/データの読み取り | ○ | ○ | ○ | ○ | ○ | − |
属性の読み取り | ○ | ○ | ○ | ○ | ○ | − |
拡張属性の読み取り | ○ | ○ | ○ | ○ | ○ | − |
ファイルの作成/データの書き込み | ○ | ○ | − | − | − | ○ |
フォルダーの作成/データの追加 | ○ | ○ | − | − | − | ○ |
属性の書き込み | ○ | ○ | − | − | − | ○ |
拡張属性の書き込み | ○ | ○ | − | − | − | ○ |
サブフォルダーとファイルの削除 | ○ | − | − | − | − | − |
削除 | ○ | ○ | − | − | − | − |
アクセス許可の読み取り | ○ | ○ | ○ | ○ | ○ | ○ |
アクセス許可の変更 | ○ | − | − | − | − | − |
所有権の取得 | ○ | − | − | − | − | − |
同期 | ○ | ○ | ○ | ○ | ○ | ○ |
ファイル/フォルダーのアクセス許可設定 アクセス許可における「フルコントロール」や「変更」「読み取りと実行」などは、実際には複数のアクセス権を組み合わせたもので構成されている。 |
ACLはファイルやフォルダーに設定するだけでなく、上位のフォルダーから「継承(Inherit)」することもできる。継承機能を使うことにより、新規作成されたファイルやフォルダーに対して、いちいちACLを設定する必要がなくなる。もし継承機能がなければ、新規作成されたファイルやフォルダーにはACLが何もない状態(=誰もアクセスできない状態)になってしまうだろう。
例えばユーザーごとのフォルダーを作成する場合、そのユーザーに対してはフルアクセス権を、それ以外のユーザーには(フルアクセスではなく)やや制限されたアクセス権を与えておくのが一般的である。ユーザーのルート(トップ)となるフォルダー(現在のWindows OSなら「C:\Users\user01」などとなる)にこのようなACLを設定して、さらに継承機能を有効にしておけば、その下に作られるファイルやフォルダーには全て自動的に同じACLが割り当てられる。
アクセス権の継承は、フォルダーのACLでのみ定義できる(ファイルのACLには、継承という概念はない。ファイルの「中」に新しいファイルやフォルダーを作成することはできないから)。継承はACL中のACEごとに設定できる。継承を有効にしておくと、そのACEが新しく作成されたサブフォルダーやファイルにも継承される。継承されたACEは、プロパティの「セキュリティ」タブ画面では、薄くグレー表示されることは、すでに述べた通りだ(先の画面「ACLの簡易表示画面」参照)。
継承機能によって、どこまで下位のファイルやフォルダーにまでACEが伝達されるかは、設定によって変更できる。それを決定するのが、先の画面「ACEの編集/定義」中にある「適用先」と「これらのアクセス許可を、このコンテナーの中にあるオブジェクトやコンテナーにのみ適用する」の設定である。次の画面のように、適用先には全部で7つの選択肢があり、画面下部にあるチェックボックスのオン/オフと合わせると、全部で14通りの組み合わせがある。
「適用先」には全部で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を表す |
継承の選択肢 |
「これらのアクセス許可を、このコンテナーの中にあるオブジェクトやコンテナーにのみ適用する」のチェックボックスをオンにすると、継承先をサブフォルダーまでに限定できる。デフォルトではこのチェックボックスはオフなので、継承先が「このフォルダーのみ」以外の場合は、どこまでも継承されることになる。
継承先と、このチェックボックスの意味を図にすると次のようになる。
ACEには、「アクセス許可ACE」と「アクセス拒否ACE」の2種類があり、さらに「上位のフォルダーから継承されるACE」もある。このように、1つのオブジェクトに対して複数のACEが定義されているのが一般的であり、これらのACEは、次に示す順でマッチするものがないかどうかがチェックされる。アクセスに使用しているプリンシパル(ユーザーやグループ名)に該当するACEが見つかれば、そのACEが最終的に適用されることになる。
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管理のさまざまな場所で使われているので、ぜひ理解しておいていただきたい。
Copyright© Digital Advantage Corp. All Rights Reserved.