Windowsでファイルやフォルダのアクセス権をリセットして親フォルダから継承させるTech TIPS

Windowsではファイルやフォルダにアクセス権を与えてセキュリティを確保している。アクセス権の設定が壊れたり削除されたりしたら、全設定のリセット後、親のアクセス権を継承させるとよい。アクセス権をリセットには、プロパティ画面で設定するか、icacls /resetコマンドを利用する。

» 2010年07月09日 05時00分 公開
[打越浩幸デジタルアドバンテージ]
「Tech TIPS」のインデックス

連載目次

対象OS:Windows XP/Windows Server 2003/Windows Vista/Windows Server 2008/Windows 7/Windows Server 2008 R2



解説

 Windows OSでは、ファイルやオブジェクトにACL(アクセス制御リスト)を付与し、アクセスを許可するか、禁止するかなどのアクセス権を制御している。ACLの詳細についてはTIPS「アクセス制御リストACLとは?」や「有効なファイル・アクセス権を調査する」などを参照していただきたい。

 ACLの設定を手動で変更したり、バックアップからリストアしたり、ユーザーやグループの設定を変更したりすると、ACLの設定が不整合を起こしたり、破損したりすることがある。またセキュリティ設定の見直しなどのために、ファイルやフォルダのACLをいっせいに変更したいこともあるだろう。このような場合は、アクセス権の設定をいったんすべてリセットして、親(親フォルダ)から継承しているアクセス権だけにするとよい。本TIPSではその方法について解説する。なお、アクセス権をすべて削除すると、ファイルやフォルダへはまったくアクセスできなくなる。ここではACLをすべて削除するのではなく、デフォルトのアクセス権である、親から継承しているACLだけにする方法を紹介する。

操作方法

●GUIのプロパティ画面で操作する方法

 ファイルやフォルダに付けられているアクセス権をすべてリセットし、親から継承しているアクセス権だけにするには、GUI画面で行う方法と、icaclsコマンドを利用する方法がある。最初に、GUI画面で操作する方法を紹介する。

 まず、対象となるファイルやフォルダのアクセス権設定を確認する。このためには、エクスプローラで該当するファイルやフォルダを選択して右クリックし、ポップアップ・メニューから[プロパティ]を選択する。そして[セキュリティ]タブ画面の[詳細設定]ボタンをクリックする。すると次のような画面が表示される。

フォルダのセキュリティの例 フォルダのセキュリティの例
これはWindows XP上で確認した、あるフォルダに与えられているACLの例である。Windows Vista以降のOSの場合は、UACによる操作のブロックがあるため、さらに[アクセス許可の変更]というボタンをクリックする必要がある。[継承元]が「<継承なし>」となっているACLのエントリ(ACE)が、このフォルダやファイル独自のエントリである。
  (1)このタブを選択する。
  (2)ACLを構成するACE(アクセス制御エントリ)の一覧。
  (3)ACLの継承元情報。<継承なし>以外は、親フォルダから継承したエントリ。
  (4)これは、このフォルダ独自のACE。
  (5)親から継承したエントリ。ACLをリセットするとは、このエントリだけにすることを指す。
  (6)継承していないエントリの場合は、このように[削除]が可能。継承しているエントリの場合は、このボタンはグレーアウトしていて、クリックできない。

 この画面には、ACLを構成するエントリ(ACE:Access Control Entryという)が複数列挙されている。このうち、[継承元]の欄が「<継承なし>」となっているACEが、このフォルダやファイル独自のものである。フォルダ名や「親オブジェクト」などと表示されているものが親から継承したACEである。

 ACLの設定をリセットして、継承されたACLだけにするには、[継承元]が「<継承なし>」となっているエントリを選んで[削除]ボタンをクリックすればよい(親から継承しているACEは削除できない)。

 ファイルの場合は、もう子オブジェクトはないので、該当するACEをすべて削除するだけで作業は終了である。最後に[OK]や[適用]ボタンをクリックする。

 フォルダの場合は、該当するエントリをすべて削除後、下にある[子オブジェクトすべてのアクセス許可エントリを、……](OSによっては[子オブジェクトのアクセス許可すべてを、……]などとなっている)のチェック・ボックスをオンにする。

ACLの継承の強制 ACLの継承の強制
このフォルダに与えられているACLを、この子フォルダやその中にあるファイルなどへ強制的に適用させることができる。
  (1)親から継承しているACEのみを残し、ほかはすべて削除した。
  (2)これをオンにして、子フォルダへ強制的に複製させる。

 オンにしてから[OK]や[適用]ボタンをクリックすると次のような確認ダイアログが表示されるので、[はい]を選択する。これで、同じACLがこのフォルダ以下のすべてファイルやフォルダに再帰的に継承される。

ACLの変更の確認 ACLの変更の確認
これを許可すると、子フォルダ以下に対して、このフォルダのACLが強制的に適用される。
  (1)これをクリックすると、変更作業が行われる。ただしアクセス権を変更する権限がない場合はエラーになるので、TIPS「ファイルの所有者を変更する(GUI操作編)」「ファイルの所有者を変更する(コマンド・プロンプト編)」などの方法であらかじめ所有者を変更して、変更の権限を与えておくこと。

●icaclsコマンドで操作する方法

 icacls.exeコマンドは、Windows Server 2003 SP2以降で利用可能な、ACLを管理するためのコマンドである。icaclsには/resetというオプションがあり、これを使うと現在のACL設定をリセットして、親から継承しているACEだけにすることが可能である。/Tオプションを付けると再帰的に処理できるので、非常に簡単に、特定のフォルダ以下にあるACLをリセットできる。

 なおWindows Server 2003 SP2に含まれるicacls.exeコマンドには不具合があるので、TIPS「icaclsコマンドでファイルの所有者を変更する」の方法で最新の修正プログラムを入手しておいていただきたい。

C:\> icacls /? ……ヘルプの表示
……(中略)……
ICACLS <名前> /reset [/T] [/C]
    すべての一致するファイルについて、ACL を継承された既定の ACL と置換します。
……(以下省略)……



 特定のフォルダ以下のACLをリセットして、継承しているACEだけにするには、フォルダ名を指定して/reset /tオプションを指定すればよい。ACEの先頭に表示されている「(I)」が親からの継承を表す。

C:\MyDocument> icacls Project01 /reset /t ……ACLのリセット
処理ファイル: Project01
処理ファイル: Project01\testdata1.txt
処理ファイル: Project01\testdata2.txt
3 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

C:\MyDocument>icacls Project01 ……ACLの確認。(I) が親からの継承を表す
Project01 BUILTIN\Administrators:(I)(OI)(CI)(F)
          Everyone:(I)(OI)(CI)(RX)
          BUILTIN\Users:(I)(OI)(CI)(F)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした



「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。