3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

NTFSアクセス権(ACL)でフォルダの削除と名前の変更をさせないようにしたい

Windowsファイルサーバで共有フォルダを作成してたんですが、要件の中でフォルダの削除と名前の変更はさせないようにしたいということだったので、どうすればいいかテストしてみました。

まず、下記のような構成のフォルダとします。

共有ルートフォルダ

├─Aフォルダ → 削除名前の変更不可

| └─(自由にフォルダ・ファイル追加、変更可)

└─(自由にフォルダ・ファイル追加、変更可)

設定したいアクセス権は下記の通りです。

「Aフォルダ」自体は削除不可かつ、名前の変更不可。

「Aフォルダ」配下にはフォルダ・ファイルの追記、変更、削除可能。

「共有ルートフォルダ」配下にはフォルダ・ファイルの追記、変更、削除可能。(「Aフォルダ」を除く)

いろいろ試した結果、下記のようにNTFSアクセス権を設定すれば要件を満たせることが確認できました。

(もちろん細かいアクセス制御を実施する時は、共有フォルダアクセス権はフルコントロールにするのはお約束です。)

・「共有ルートフォルダ」のアクセス権(アクセス権の継承無し)

□アクセス権1

適用先:このフォルダ、サブフォルダおよびファイル

┌─────────────────┬──┬──┐

│アクセス許可: │ │ │

├─────────────────┼──┼──┤

│ │許可│拒否│

├─────────────────┼──┼──┤

│フォルダのスキャンとファイルの実行│● │ │

├─────────────────┼──┼──┤

│フォルダの一覧/データの読み取り │● │ │

├─────────────────┼──┼──┤

│属性の読み取り │● │ │

├─────────────────┼──┼──┤

│拡張属性の読み取り │● │ │

├─────────────────┼──┼──┤

│ファイルの作成/データの書き込み │● │ │

├─────────────────┼──┼──┤

│フォルダの作成/データの追加 │● │ │

├─────────────────┼──┼──┤

│属性の書き込み │● │ │

├─────────────────┼──┼──┤

│拡張属性の書き込み │● │ │

├─────────────────┼──┼──┤

│サブフォルダとファイルの削除 │ │ │

├─────────────────┼──┼──┤

│削除 │● │ │

├─────────────────┼──┼──┤

│アクセス許可の読み取り │● │ │

├─────────────────┼──┼──┤

│アクセス許可の変更 │ │ │

├─────────────────┼──┼──┤

│所有権の取得 │ │ │

└─────────────────┴──┴──┘

・「Aフォルダ」のアクセス権(アクセス権の継承有り)

□アクセス権1

適用先:このフォルダ、サブフォルダおよびファイル

アクセス許可:これは継承なので親フォルダ(共有ルートフォルダ)と同じ権限

□アクセス権2

適用先:このフォルダのみ

┌─────────────────┬──┬──┐

│アクセス許可: │ │ │

├─────────────────┼──┼──┤

│ │許可│拒否│

├─────────────────┼──┼──┤

│フォルダのスキャンとファイルの実行│ │ │

├─────────────────┼──┼──┤

│フォルダの一覧/データの読み取り │ │ │

├─────────────────┼──┼──┤

│属性の読み取り │ │ │

├─────────────────┼──┼──┤

│拡張属性の読み取り │ │ │

├─────────────────┼──┼──┤

│ファイルの作成/データの書き込み │ │ │

├─────────────────┼──┼──┤

│フォルダの作成/データの追加 │ │ │

├─────────────────┼──┼──┤

│属性の書き込み │ │ │

├─────────────────┼──┼──┤

│拡張属性の書き込み │ │ │

├─────────────────┼──┼──┤

│サブフォルダとファイルの削除 │ │ │

├─────────────────┼──┼──┤

│削除 │ │● │

├─────────────────┼──┼──┤

│アクセス許可の読み取り │ │ │

├─────────────────┼──┼──┤

│アクセス許可の変更 │ │ │

├─────────────────┼──┼──┤

│所有権の取得 │ │ │

└─────────────────┴──┴──┘

上記の設定を見たらわかるように、削除させたくないフォルダは、そのフォルダに対してのみ、「削除」の拒否を与えてやる必要があります。

また、親フォルダが、「サブフォルダのファイルと削除」が許可になっていると、削除拒否のアクセス権が無視される仕様のようなので、親フォルダの「サブフォルダのファイルと削除」は許可しないようにしましょう。

今回気付いたんですが、フォルダの名前の変更の拒否も、そのフォルダの「削除」の削除を拒否してやると可能なようです。

結構ショートカット先になってるとかで、共有フォルダ内のフォルダの名前変更や削除をさせたくない要件があったりするんですが、このようにすれば可能ですね。

注意点として、上記の設定をして、削除拒否のフォルダを作成したとしても、そのフォルダに対して削除処理を実行するとフォルダ配下のデータは消えてしまいます。(そのフォルダは消えません。)

また、別の方法として、該当フォルダ内に削除できないファイルがあると、そのフォルダは削除できません。なので削除拒否にしたダミーのファイルを置いとくという手もありますね。(それ以外の該当フォルダ内のフォルダ・ファイルは削除されてしまいますが。。。)

本当に細かくアクセス制御しようとすると大変です。。。。。

参考:

TechNet:ファイルおよびフォルダのアクセス許可

MSサポート:Windows XP でファイルとフォルダの特殊なアクセス許可の設定、表示、変更、または削除を行う方法