少し技術的な記事を掲載します。
Windowsの共有ファイルへのアクセス
Windowsの共有ファイルにアクセスする際、ファイルやフォルダーに対するアクセス権についてはっきりと理解しておく必要があります。
理解するためには少々の時間が必要ですが、この部分の理解をあいまいにしておくと後で様々な局面において悩むことになります。少し辛抱して先に理解をしておく方が長い目で見るとずっと時間の節約になります。例えると、PCを使った仕事をするうえで最初にブラインドタッチを身に付けておくようなものです。
Windowsには以下の2種類のアクセス制御機構があります。
- 共有レベルアクセス権
ネットワーク接続でログインするユーザに対して適用されます。 - ファイルアクセス権
NTFSファイルシステムに対するセキュリティ機構。セキュリティを考慮する場合、NTFSフォーマットは必要不可欠です。本説明では、NTFS以外の環境(FATなど)については対象外とします。
ネットワーク接続のユーザ、ローカル(直接)ログインユーザ、リモートデスクトップ接続ユーザ、これらすべてのユーザに対して適用されます。NTFSファイルシステムレベルアクセス権などともいいます。
ファイルアクセス権のチェックも共有レベルアクセス権のチェックも、Windowsのユーザアカウントに対して行われます。つまり、ネットワークログインを行うユーザから見ると、同じアカウント情報を共有レベルアクセス権チェックとファイルアクセス権チェックの2か所でチェックされることになります。
これは例えると、海外から中国に経済特別区を経由して内陸部に入国する際、(1) 日本→中国(経済特別区)、(2) 中国(経済特別区)→中国(本土)、といったように、同じパスポートで2回税関を通るようなものです。
そして理解を混乱させる要因となっているのが、これらの設定方法です。設定するにはファイルエクスプローラからフォルダーを選択して右クリックで「プロパティ」を表示します。このプロパティ画面の「共有」タブが共有レベルアクセス権の設定で、「セキュリティ」タブがファイルアクセス権の設定です。
これらは似通っていますが、混同しないようにはっきりと区別しておくようにしましょう。
ネットワークログインの場合、2種類のセキュリティ機構を通過するわけですが、共有レベルアクセスの設定内容と、ファイルアクセスの設定内容との間に矛盾があったらどうなるでしょうか。それはパスポートと同じで最初にチェックされる場所、つまり共有レベルアクセス権のチェックでアクセス拒否されればそれまでですし、そこをパスしても次のファイルアクセス権のチェックでアクセス拒否されるとそれまでです。
また、例えば共有レベルアクセス権では「変更」可能なのに、ファイルアクセス権では「読み取り」のみとなっている場合は「読み取り」のみ、逆に共有レベルアクセス権では「変更」可能なのに、ファイルアクセス権では「読み取り」の場合もまた「読み取り」のみとなります。つまり、共有レベルアクセス権とファイルアクセス権の2つのうち、より厳しい権限が適用されます。
もっと厳密にいうと以下の図のようなAND関係です。
共有レベルアクセス権 |
論理 |
ファイルアクセス権 |
ANDの結果 |
||
フルコントロール |
○ |
AND |
フルコントロール |
× |
× |
変更 |
○ |
AND |
変更 |
× |
× |
読み取り |
○ |
AND |
読み取り |
○ |
○ |
共有レベルアクセス権
デフォルトの共有
実際に共有レベルアクセス権を設定します。share1フォルダーを作成し共有にしてみます。
1. |
2. |
3. |
|
共有アクセス許可ユーザに、デフォルトでEveryoneが「読み取り」が設定されている。
このようにデフォルトで設定した時は次のような状態となっています。
ファイルアクセス権は次のようになっています。(株式会社エクシード・ワンのツール、File Authority Designerを使用)
Usersに対して読み取りができるように設定されています。プロパティでは単純に「読み取り」というチェックがついているだけですが、実際のアクセス権はこのように複雑です。
既存のアカウントfoo@abc.co.jpユーザでログインするとフォルダーは読み込みのみとしてアクセスできます。
特定ユーザに対して書き込みできるように設定
このフォルダーに対して、特定のユーザが読み書きできるように設定します。この例では私のアカウント(阿部秀嗣)を使います。
1. |
2. |
3. |
4. |
「適用」をクリックしても実際はまだ適用されない。 |
|
5. |
|
ここで適用して初めて有効になる。 |
再ログインしてからその権限が適用されると考える人もいるでしょうけれど、適用すると即座に反映されます。
ファイルアクセス権は変化なし。
この時、リモートのuser1アカウントで接続すると、フォルダーは読み込みとなっています。
Everyone
デフォルト
特別な設定をせずにフォルダーを共有にすると、デフォルトでEveryoneというグループがアクセス許可されています。これは、誰に対してもアクセスを許すということで「読み取り」権限がつけられています。(古いOSでは「変更」も可能だったようです)
Everyoneをフルコントロールにしてみる
これまで「読み込み」だったuser1アカウントで書き込みが可能となった。
もちろん、ファイルアクセス権は変化なし。
考察:
ファイルアクセス権に権限の設定されていないuser1アカウントで書き込みができるのは、ファイルアクセス権でAuthenticated Usersが書き込みOKだからでしょうか?
ファイルアクセス権
ファイルアクセス権を絞ってみる
Authenticated Usersが変更、書き込みOKなので、これを外す。
1. |
2. |
編集しようと思ったが、オプションボタンがグレーアウトしていて設定できない。これは親ディレクトリから継承されているから。 |
そこで、詳細設定の方から行う。 |
3. |
4. |
5. |
6. |
<少し時間がかかる>
7. |
8. |
再度セキュリティの編集 |
今度は設定できるので、「変更」と「書き込み」チェックを外す。 |
これで、User1から書き込みできなくなりました。先ほどの考察が正しかったことが分かりました。
Windows Storage ServerとWindows8とのデフォルト設定
Windows Storage Server |
Windows 8.1 |
両者の違いを比較すると、SYSTEM, Administratorsにフルコントロールを与えているのは同じ。
< Storage Server >
基本的にAuthenticated Usersに権限を与えていない。これは、サーバにログインしたユーザだからといってだれでも無条件にファイルにアクセスはさせないということ。
ローカルアカウントユーザに対して、
- C:\以下、読み取り権限は与える。
- C:\直下のファイルに対する書き込み権限は与えていない。
- C:\のサブフォルダに対してはファイルの作成/データの書き込みを許可
< Windows8.1 >
Authenticated Users(パスワード認証でログインできたユーザ)には、C:\のサブフォルダー以下に対して変更権限を与える。また、C:\直下に対してはフォルダーの作成/データの追加は許す。
ローカルアカウントユーザに対してC:\以下、読み取り権限は与える。
ファイルアクセス制御の考え方
ファイルアクセス制御の考え方をそのまま理解できる人はよいのですが、どうも抽象的で分かりにくいという人向けに、現実社会に存在する「選挙」という制度を引き合いに説明します。
Windowsのファイルアクセス制御は、「アクセス制御リスト(Access Control List)」(以下ACL)と呼ばれるアクセス権のセットです。これは、「選挙」の際の賛成票と反対票のようなものと言えます。このアクセス権はユーザまたはグループに対して付与されます。
各リソース(フォルダやファイル)には、賛成の投票箱と反対の投票箱があると考えます。
そしてこのアクセス許可設定が投票を行う画面で、許可が賛成票、拒否が反対票と考えます。そしてフォルダーを選挙区(地域)と考えるとより分かりやすいかもしれません。
空白(票を入れない)ということは、このリソースに設定されている(いないかも知れないが)他のグループやユーザに依存するということ。つまり自分は決定権を行使しないということです。
ここで次のようなユーザとグループがあったとします。
group1 |
group2 |
group3 |
|
user1 |
○ |
○ |
|
user2 |
○ |
||
user3 |
○ |
○ |
○ |
この図でuser1は、group1とgroup2に所属していることを表しています。
そして、フォルダーA, B, Cにはそれぞれ次のようにアクセス許可ユーザ・グループが設定されているものとします。アクセス許可には変更、読み取りと実行、フォルダーの内容の一覧、など色々な属性がありますが、話のポイントを絞るためにすべて「フルアクセス」とします。
フォルダー |
A(地域) |
B(地域) |
C(地域) |
||||||
アクセス許可 |
許可 |
拒否 |
許可 |
拒否 |
許可 |
拒否 |
|||
group1 user3 |
☑ ☑ |
□ □ |
group2 group3 user3 |
☑ ☑ ☑ |
□ □ □ |
user1 user2 user3 |
☑ ☑ ☑ |
□ □ □ |
この時、各ユーザが各フォルダーに対する賛成票と反対票を集計します。少し回りくどいですが、わかりやすく説明します。
A(地域) |
B(地域) |
C(地域) |
||||
賛成 |
反対 |
賛成 |
反対 |
賛成 |
反対 |
|
user1 |
group1の票 |
|
group2の票 |
user1の票 |
||
1票 |
0票 |
1票 |
0票 |
1票 |
0票 |
|
user2 |
group1の票 |
|
user2の票 |
|||
1票 |
0票 |
0票 |
0票 |
1票 |
0票 |
|
user3 |
group1の票 user3の票 |
group2の票 group3の票 user3の票 |
user3の票 |
|||
2票 |
0票 |
3票 |
0票 |
1票 |
0票 |
user1はAにアクセスできる。なぜなら、Aでは賛成1、反対0だから。
user2はBにアクセスできない。なぜなら、Bでは賛成0、反対0だから。
user3はCにアクセスできる。なぜなら、Cでは賛成3、反対0だから。
さて、そこで少し設定を変えます。
Bフォルダーのgroup3に対する設定を許可ではなく拒否にしてみます。
フォルダー |
A(地域) |
B(地域) |
C(地域) |
||||||
アクセス許可 |
許可 |
拒否 |
許可 |
拒否 |
許可 |
拒否 |
|||
group1 user3 |
☑ ☑ |
□ □ |
group2 group3 user3 |
☑ □ ☑ |
□ ☑ □ |
user1 user2 user3 |
☑ ☑ ☑ |
□ □ □ |
すると票はこうなります。
フォルダー |
A(地域) |
B(地域) |
C(地域) |
|||
賛成 |
反対 |
賛成 |
反対 |
賛成 |
反対 |
|
user1 |
group1の票 |
|
group2の票 |
user1の票 |
||
1票 |
0票 |
1票 |
0票 |
1票 |
0票 |
|
user2 |
group1の票 |
|
user2の票 |
|||
1票 |
0票 |
0票 |
0票 |
1票 |
0票 |
|
user3 |
group1の票 user3の票 |
group2の票 user3の票 |
group3の票 |
user3の票 |
||
2票 |
0票 |
2票 |
1票 |
1票 |
0票 |
Windowsのアクセス制御(ACL)ポリシー賛成票よりも反対票が優先するというルールがあります。このことにより、user3はBフォルダにアクセスすることができなくなります。たとえ賛成票が2で反対票が1であっても、票の数に関係なく拒否されます。国連安保理のようなものですね。
実際のアクセス許可属性は以下のものがあります。
- フル コントロール
- フォルダーのスキャン/ファイルの実行
- フォルダーの一覧/データの読み取り
- 属性の読み取り
- 拡張属性の読み取り
- ファイルの作成/データの書き込み
- フォルダーの作成/データの追加
- 属性の書き込み
- 拡張属性の書き込み
- サブフォルダーとファイルの削除
- 削除
- アクセス許可の読み取り
- アクセス許可の変更
- 所有権の取得
もっとわかりやすい(?)説明
さらに別のたとえ話で説明します。飲み屋への出入り許可を例にします。
高級な飲み屋ではメンバー制にしていたり、危ない客はブラックリストに載ったりします。ホワイトリスト、ブラックリストは次の関係となります。
- ホワイトリスト=お得意先台帳
- ブラックリスト=出入り禁止台帳
あなたの街に以下のお店があるとします。
- 高級割烹-A
- Club-B
- 大衆居酒屋-C
そしてあなたは以下の組織に所属しています。
- ヤマブキ商店会
- オオトラ高校同窓会
高級割烹AとClub-Bは会員制でお得意様台帳を持っています。一方大衆居酒屋-Cは誰でも入れます。
こんな感じです。
店 |
お得意様台帳 |
出入り禁止台帳 |
高級割烹-A |
ヤマブキ商店会 |
|
Club-B |
ヤマブキ商店会 オオトラ高校同窓会 |
|
大衆居酒屋-C |
誰でも入れますので、ACLでいうEveryoneに許可が付与されていると考えてください。 |
あなたはこれらすべての店に入ることができていました。
しかし事件が起きました。先日オオトラ高校同窓会の忘年会がCloub-Aで行われましたが、そのときに会員のXさんがお店の女性に悪さをして出入り禁止になってしまいました。それも、Xさんだけではなくオオトラ高校同窓会そのものが出入り禁止とされました。
こうなります。
店 |
お得意様台帳 |
出入り禁止台帳 |
高級割烹-A |
ヤマブキ商店会 |
|
Club-B |
ヤマブキ商店会 |
オオトラ高校同窓会 |
大衆居酒屋-C |
誰でも入れますので、ACLでいうEveryoneに許可が付与されていると考えてください。 |
あなたはそれを知らずにいつものようにClub-Bに行きましたが入店を拒否されました。
店のボーイが慇懃にこういいます。「申し訳ありませんが、オオトラ高校同窓会の方はしばらくご遠慮願っております。」
あなた:「この間の話は聞いているよ、店に迷惑かけて申し訳なかったね、でもワシはそのときいなかったし、Xとは個人的な付き合いもないし」
ボーイ:「しかし、お店の方針でして・・」
あなた:「ワシはヤマブキ商店会の理事だぞ、ヤマブキはオタクの大得意だし何も悪さしとらんだろう」といいましたが、それでもオオトラのメンバーであることには変わりないのでやはり入店できません。
あなたがClub-Bに入店するには、オオトラのメンバーから外れるか、ほとぼりが冷めてブラックリストから解除されるまで待たなければなりません。
でも、あなたは高級割烹-Aか、大衆居酒屋-Cなら入ることができます。
さてXさんですが、その後大衆居酒屋-Cでも飲んで暴れてこちらも出入り禁止になりました。もうお分かりだと思いますが、リストはこうなります。
店 |
お得意様台帳 |
ブラックリスト |
高級割烹-A |
ヤマブキ商店会 |
|
Club-B |
ヤマブキ商店会 |
オオトラ高校同窓会 |
大衆居酒屋-C |
誰でも入れますので、ACLでいうEveryoneに許可が付与されていると考えてください。 |
Xさん |
Xさんは、誰でも入れるはずの大衆居酒屋-Cにもブラックリストに名前が載ってしまいました。これは、ACLがユーザまたはグループを登録できるのと同じです。お得意様台帳あるいはブラックリストには組織だけではなく個人も登録できます。
Xさんはしかたなく高級割烹-Aで品よく飲むしかありませんでした。