ファイルサーバ構築指南書②~共有アクセス許可とNTFSアクセス許可の違い~

ファイルサーバ構築指南書①~ファイルサーバの役割を追加する~

共有フォルダアクセス許可とNTFSアクセス許可

Windows Server でファイルサーバを構築した際、必ず設計しなければならないのがアクセス許可です。

そしてややこしいことに、アクセス許可には「共有フォルダアクセス許可」と「NTFSアクセス許可」の2つが存在し、この2つが組み合わさって最終的なアクセスが判断されます。

共有フォルダアクセス許可

共有フォルダアクセス許可は、文字通りフォルダの共有機能に対するアクセス許可であり、ネットワークを介してアクセス(共有)された場合のみ有効なアクセス許可です

共有フォルダアクセス許可を設定する項目は下図のような「共有」と表示されている箇所になります。

共有フォルダアクセス許可は「共有」タブ

共有フォルダアクセス許可には下表の3種類のアクセス許可があります。

フルコントロール 共有フォルダ上のファイルやフォルダに対して、全ての操作を実行できる
変更 共有フォルダ上のファイルやフォルダに対して、書き込みや削除を実行できる
読み取り 共有フォルダ上のファイルやフォルダに対して、読み取りを実行できる

NTFSアクセス許可

NTFSアクセス許可は、ファイルシステムである NTFS が提供しているアクセス権限機能のことを指します。

つまり、ファイルシステムがファイル/フォルダに対して制限をかけているため、共有/非共有にかかわらずアクセス許可を実施します。そのため共有フォルダアクセス許可とは異なり、ネットワークを介さないアクセス(ローカルログオンやリモートデスクトップ経由のアクセスなど)に対してもアクセス許可設定が機能します。

NTFSアクセス許可を設定する項目は下図のような「アクセス許可」と表示されている箇所になります。

NTFSアクセス許可は「アクセス許可」タブ

先述したように NTFS アクセス許可は NTFS というファイルシステムが独自にサポートしている機能のため、他のファイルシステム上のファイル/フォルダではそのような概念がありません。

例としてファイルシステムを「exFAT」にフォーマットしてみます。

exFAT でフォーマット

exFAT でフォーマットしたボリューム上にフォルダを作成しました。下図のように「アクセス許可」タブがありません

NTFSアクセス許可が無いだけで、共有フォルダとしては問題はありません。

共有はされる

詳細設定画面には「アクセス許可」タブがありました。しかし、当然アクセス許可はありません。

詳細設定から設定可能?

exFAT 上のフォルダのためNTFSアクセス許可が設定不可能なのは目に見えていますが、項目があるのなら試してみたいもの。実際に試してみます。

例えば Administrator にフルコントロールのNTFSアクセス許可を与えようとします。

なんだか行けそうな気もしますが。

適用を押すと内容がリセットされます。案の定ダメみたいですね。

そんなNTFSアクセス許可ですが、下表の6種類のアクセス許可があります。

フルコントロール NTFSボリューム上のファイルやフォルダに対して、すべての操作を実行できる
変更 NTFSボリューム上のファイルやフォルダに対して、読み書きや削除を実行できる
読み取りと実行 NTFSボリューム上のファイルやフォルダに対して、読み取りやプログラムの実行が行える
フォルダの内容の一覧表示 NTFSボリューム上のファイルやフォルダの内容を一覧表示できる
読み取り NTFSボリューム上のファイルやフォルダに対して、読み取りを実行できる
書き込み NTFSボリューム上のファイルやフォルダに対して、書き込みを実行できる

共有フォルダアクセス許可とNTFSアクセス許可の注意事項

共有フォルダアクセス許可もNTFSアクセス許可も、アクセス許可は累積します。例えば、あるユーザが複数のグループに所属している場合に、所属する各グループに対する共有フォルダアクセス許可が異なると、そのユーザに対するアクセス許可は、各グループに設定されているアクセス許可が累積されたものになります。

ただし例外として、アクセス許可が「拒否」になっていると、全てのアクセス許可を打ち消すので、そのユーザは当該共有フォルダにアクセスできなくなります。

2種類のアクセス許可の組み合わせ

共有フォルダアクセス許可とNTFSアクセス許可を同一の共有フォルダに設定していた場合は、制限が厳しいほうのアクセス許可が適用されます

(作成方法によりますが)共有フォルダを作成した際のデフォルト共有フォルダアクセス許可は「Everyone 読み取り」になっています。つまり共有フォルダアクセス許可としては全ユーザに「読み取り」権限が与えられ、NTFSアクセス許可で更にユーザと権限が絞られます。この時、NTFSアクセス許可で「フルコントロール」を設定したとしても全ユーザは「読み取り」以上の操作はできません

実際に動きを見てみます。以下のように共有フォルダアクセス許可として Everyone ではなく “test” というユーザだけを設定しました。

共有フォルダアクセス許可は “test” ユーザのみ許可

アクセス許可はデフォルトのままにしています。つまり test ユーザは「共有フォルダアクセス許可はあるが、NTFSアクセス許可はない」という状態です。

NTFSアクセス許可はデフォルトのまま(Dドライブからの継承)

ただし、Users グループには作成したユーザが自動で所属してしまうので、明示的に追加していないつもりでも test ユーザは NTFS アクセス許可も許可されてしまっています

Users グループ

「共有フォルダアクセス許可はあるが、NTFSアクセス許可はない」という意図した状態になっていないので調整が必要です。

Users から test ユーザを削除すればよいかと言われると、それでもまだ足りません。Users には test ユーザ以外にも以下の2つのグループが所属しています。

  • Authenticated Users
  • INTERACTIVE

実は上記の2つのグループにも test ユーザは所属しています。よって、単純に test ユーザを users から削除しても NTFS アクセス許可は許可されたままです。

所属しているとなぜわかる?

test ユーザでログインした後に下図のように「whoami /groups」と実行すると所属しているグループの一覧が表示されます。Authenticated Users と INTERACTIVE もばっちり出力されます。

そもそも Users からユーザを削除するとそのユーザで Windows にログインできなくなるなど色々と影響があるので、共有フォルダのNTFSアクセス許可から Users を削除してしまいます。なお、このNTFSアクセス許可は継承されたものなので継承を無効化してからでないと削除できません。

継承を無効化し Users を削除

準備ができたので試してみます。まずは Administrators で共有フォルダにアクセスしてみます。

Administrator で共有フォルダにアクセス

Administrator には共有フォルダアクセス権がないので、共有フォルダに対してアクセスすることはできません。

次に test ユーザで共有フォルダにアクセスしてみます。

test ユーザで共有フォルダにアクセス

test ユーザは共有フォルダアクセス権があるため、共有機能に対するアクセス制限はスルーできますが、ファイルシステム(NTFS)に対するアクセス許可が無いためアクセスすることができません。

MEMO

ダメ押しでもう1つ例を挙げてみます。例えば共有フォルダアクセス許可が「Everyone:フルコントロール」、NTFSアクセス許可が「test:読み取り」だった場合、test ユーザで共有フォルダにアクセスしても読み取り以外の操作は行えません。これは逆の共有フォルダアクセス許可が「Everyone:読み取り」、NTFSアクセス許可が「test:フルコントロール」でも同様です。

例えばファイルを作成しようとすると下図のようにエラーとなります。

共有フォルダアクセス許可とNTFSアクセス許可をどう組み合わせるか

まず、個人的には共有フォルダアクセス許可とNTFSアクセス許可の両方でアクセス制御を行うべきではないと考えています。無駄に複雑になります。なので、どちらか一方を選択する必要がありますが、NTFSアクセス許可を推します。

確かにNTFSアクセス許可はNTFSというファイルシステムでのみ有効なメタデータであるため、他のファイルシステムに移動するとアクセス許可が消えてしまうというデメリットはあります。しかし、昨今の Windows は大半が NTFS で動いています。デメリットは無いに等しいでしょう。

メリットとしてはローカルログインも制御できる点や、アクセス制御が柔軟であることが上げられます(後述します)。

USB メモリへの移動などは気を付けなければなりませんが、共有フォルダは共有フォルダアクセス許可を 「Everyone:フルコントロール」(読み取りだと全ユーザが読み取り以上の操作(ファイルの作成など)ができなくなってしまいます)、NTFSアクセス許可を細かく設定する、といった方針にしましょう。

アクセス許可の継承

共有フォルダアクセス許可もNTFSアクセス許可も、アクセス許可は継承されます。ただし、継承をブロックしたり独自のアクセス許可が設定可能なNTFSアクセス許可に対して、共有フォルダアクセス許可は継承のブロックも独自のアクセス許可の設定も不可能です。実際に見てみましょう。

共有フォルダアクセス許可の継承

Dドライブ直下に ShareTest という共有フォルダを用意しました。共有フォルダはこの1つだけです。

共有フォルダは1つだけ。

共有フォルダ ShareTest の配下に「Child」というフォルダを作成しました。右クリックからフォルダを新規作成しただけですね。

この状況において、共有フォルダである ShareTest と、その配下に作成したフォルダ Child のプロパティを確認してみます。

ShareTest のプロパティ

ShareTest\Child のプロパティ

特におかしなところはないですね。続いて共有設定を確認してみます。

ShareTest の共有設定

ShareTest\Child の共有設定

Child フォルダの「このフォルダーを共有する」にチェックが入っていません。しかもアクセス許可がグレーアウトしていて、共有フォルダアクセス許可の設定ができません

「ということは共有されていないの?」と考えてしまいますが、上図で挙げたように共有のパス自体は存在しますし、アクセスすることもできます。

共有フォルダアクセス許可は配下のフォルダまで共有されます。ではなぜ「このフォルダーを共有する」が無効になっていて、アクセス許可の設定ができないのかというと、実際にチェックをつけてみるとわかります。

共有フォルダ配下のフォルダの「このフォルダーを共有する」を有効化

チェックをつけるとアクセス許可の設定もできるようになりました。

プロパティにも若干変化があります。先ほどまで「\\ホスト名\ShareTest\Child」だったネットワークパスが「\\ホスト名\Child」に変化しています。

もうお気づきだと思いますが、「このフォルダーを共有する」が有効化されるのは、共有されたルートフォルダのみです。アクセス許可の設定が可能なのもルートフォルダのみです。

つまり共有フォルダアクセス許可の設定が有効なのはあくまで設定したルートフォルダの1つのみ。その配下のフォルダは当該共有フォルダの一部としてネットワークパスが存在するだけです。

共有フォルダの一覧を確認すると、Child フォルダが共有フォルダとして表示されるようになりました。Child は ShareTest の配下であると同時に、独立した共有フォルダとしても扱われます。

この状況で ShareTest にアクセスしてみるとどうなるかというと、普通に Child にアクセス可能です。勿論、Child は共有フォルダのルートでもあるので、直接アクセスすることもできます。

Child が見えるしアクセスも可能

Child に直接アクセスも可能

この時共有フォルダの一覧を見てみると下図のようになります。奇妙な感じもしますが、まあそうなりますよね。

NTFSアクセス許可の継承

一方のNTFSアクセス許可の継承ですが、こちらはサブフォルダでも継承の無効化やアクセス許可の設定が可能です

例えばまたもや ShareTest フォルダを共有してみます。

ShareTest を共有

共有フォルダアクセス許可の場合、デフォルトで許可されているのは Everyone のみでわかりやすいですが、NTFSアクセス許可はごちゃごちゃと色々許可されています。

このアクセス許可って実はデフォルトで設定されるものではなく、ドライブのアクセス許可を継承しているだけです。今回で言うとDドライブのアクセス許可を継承しているわけですね。

NTFSアクセス許可の継承はブロックすることも可能です。下図のように「継承の無効化」をクリックするだけです。

「継承の無効化」をクリック

そうすると下図のようなエラーがポップします。今回はひとまず全ての継承を削除したいので「このオブジェクトから継承されたアクセス許可をすべて削除します。」を選択します。

特定のアクセス許可だけを削除したいなら上

全て削除しても1つだけはアクセス許可が残ります。本当に何もなくなると誰も何もできなくなるので当然ですね。

全て削除しても残る

継承を無効化したところで、サブフォルダとして Child を作成します。

Child フォルダを作成

Child は ShareTest のNTFSアクセス許可を継承しているので、下図のような感じになります。

Child のNTFSアクセス許可

Child のNTFSアクセス許可を追加してみます。共有フォルダアクセス許可の場合はできなかった行為ですね。

Child のNTFSアクセス許可を追加

ルートフォルダである ShareTest と、そのサブフォルダである Child のNTFSアクセス許可を比較してみます。

ShareTest のNTFSアクセス許可

このように、NTFSアクセス許可は、1つの共有であってもフォルダごとにアクセス許可を設定することが可能です。

ただし、下図のようにNTFSアクセス許可の変更は共有フォルダの一覧には反映されないことを憶えておきましょう。共有フォルダアクセス許可を変更するためには別の共有を実施しなくてはならないので共有フォルダ一覧に反映されますが、NTFSアクセス許可はあくまでファイルシステムのアクセス権の仕様です。

何が言いたいかというと、移行を考える際にここだけ見て「この共有フォルダのアクセス許可だけ控えて移行後に付与すればいいか」と考えてしまうと、NTFSアクセス許可を見落としてしまう可能性があります。

逆に言うと、NTFSアクセス許可は共有/非共有に関係なくファイルシステム上のすべてのデータが持っているメタデータのため、「共有フォルダのNTFSアクセス許可だけ抜き出す」といったことは現実的ではありません。出せたとしても精査できません。

故に、移行する際はどのようなNTFSアクセス許可を割り振っているかというリストが必要です(共有フォルダアクセス許可は見ればわかるので)。もしくは、NTFSアクセス許可の情報をそのまま移行する必要があります。

そもそもドライブからの継承を無効化してもいいのか

ドライブからの継承はブロックしても問題ありません。第1回で行ったように、ドライブそのものの共有を停止するのは NG ですが、ドライブからの継承の無効化は OK です。

共有フォルダの作成方法はメジャーな作り方だけで4つあるのですが、そのうちの2つはそもそもドライブからの継承をデフォルトで無効化します。本記事では、意図的にドライブからの継承がされる共有フォルダの作成方法のみを使っていました。

共有フォルダって簡単に作れる割に奥が深くて面倒くさいんですよね。そんな共有フォルダの作成方法は次の記事で紹介しています。

ファイルサーバ構築指南書③~共有フォルダの作成方法による違い~

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)