はじめに
Windows Server上のファイルを移動したら、ファイルは存在しているのにある権限の人から”ファイルが無い”と言われたのをきっかけで調べた結果です。2003年から実装されている機能なのでネタとしては古いですが、設定するのに少しコツがあったので記事にしています。
Windows Server/ABE機能とは
「アクセスベースの列挙」 (Access-based Enumeration: ABE) とは、Windows Server 2003 SP1以降で導入されたWindows Serverの標準機能であり、「共有フォルダー内の全フォルダーではなく、自分がアクセス可能なフォルダーのみを列挙して表示する」機能のことだそうです。
Linux 使いだと ”そんなことできるんだ”と思われますよね。わたしもその1人でした。
この記事の例えが分かりやすかった。
”ファイルサーバ上の共有フォルダをエクスプローラやファイルのオープン・ダイアログなどで参照する場合、従来のWindows OSでは自分とは関係のない(自分にはアクセス権が与えられていない)ファイルやフォルダも一覧に表示されていた。そのため、間違って開こうとしてエラーになることがあった。また、たとえアクセス権限はなくてもファイルやフォルダの名前は見えるので、セキュリティ的にも問題となることがあった。”
実際に試してみる
下記のような共有フォルダがある場合、一般の権限では ”総務”ディレクトリが見えないようにしたいを実施してみます。
ABE設定前
ABE設定後
継承の無効化
上位フォルダからの継承を無効化します。上位フォルダは、すべてのユーザが参照できるように Eveyone 権限を意図的につけています。
とりあえず ”一般” or ”総務” ディレクトリを下記のように設定します。
変更前
"継承の無効化”ボタンを押下して。明示的なアクセス許可に変換します。
このときディレクトリにファイルが多いと変換にすごい時間がかかります。
結果的に、下記のようになればよろし。
フォルダ権限の変更
上位フォルダから継承のされた Eveyone 権限を削除します。また 総務グループ権限(ここでは ”somu_gr” とした)を追加して 総務グループ権限のみ参照することができるようにします。
とりあえず ”一般” にも同様に 一般グループ権限(ここでは ”hira_gr” とした)として同じように変更しておきます。
変更前
結果的に、下記のようになればよろし。
ABE機能の有効化
デフォルトでONとなっているようですが、念のため確認してみます。
ABE機能による「アクセスベースの列挙」とは、なんぞや
まず前提をおさらいしましょう。
・共有フォルダ経由でアクセスした場合に、ABE機能が有効化される。
※ローカルディスクに対して直接アクセスした場合は、ABE機能は有効化されない。
・ABE機能の設定は、Windows Server のファイル・サービス役割で設定する。
要するに ファイルサービス(SMB)経由でしか ABE機能が有効化されないということ。また「アクセスベースの列挙」という言葉は、”あなたの権限でアクセスすることのできるディレクトリ/ファイルを返します” という意味です。
Windows/Linux でABE機能によるフォルダ非可視を確認
ここまでの設定で ABE機能による「アクセスベースの列挙」が有効化されていることを確認します。
期待値として ”一般”ユーザ権限でアクセスしたときに、”総務”ディレクトリが見えないことを確認します。
Windowsの場合(ネットワークドライブの割り当て):
Linuxの場合(SMBを /tmp/aaa に mount):
たしかに「アクセスベースの列挙」といううたい文句なだけに、Linuxで mount しても同様の結果となるのは嬉しいですね。
異なるファイル/ディレクトリ権限がある場合の挙動
Linuxと違いWindowsでは、ディレクトリに付与した権限はファイル権限と同等になります。これ何を言っているのかというと、admin権限の人が、あるディレクトリのファイルを移動(mv)したとき、移動元の権限になりますよね。
Windowsでは、意図的(以下で説明)にしない限りは、移動先の権限に変更されます。
じゃあなにが問題なの?というと。
下記のように 異なるファイル権限がある場合の挙動が異なるのです。
ローカルディスクでの見え方
ネットワークでの見え方(Windows/Linux)
勉強になりますね。ちなみに DOS窓で MOVE しました。
共有のトップフォルダ
共有トップフォルダは、権限の設定で非表示にできないらしい。
ここまでで思ったこと
ABE使えば、会社で共有フォルダを使っている場面で、ディレクトリ名にプロジェクトをいれちゃって、”ああ新規でどこぞの会社と・・・”みたいにコンプライアンス的にどうなのよという事は防げそうですね。
ちょっとしたことかもしれないけども、Active Directory(AD)使うと便利だなって思った次第。