icaclsコマンドでファイルのアクセス制御リストACLを保存/復元する:Tech TIPS
アクセス制御リストACLを操作するには、従来のcaclsコマンドのほか、icaclsコマンドも利用できる。icaclsコマンドでは、ACLの保存や復元が可能になるなど、機能が拡張されている。
対象OS:Windows Server 2003 SP2/Windows Vista/Windows Server 2008/Windows 7/Windows Server 2008 R2
解説
Windows OSでは、ファイルやオブジェクトにACL(アクセス制御リスト)を付与し、アクセスを許可するか、禁止するかなどを制御している。ACLの詳細についてはTIPS「アクセス制御リストACLとは?」や「有効なファイル・アクセス権を調査する」などを参照していただきたい。
ACLを調査するコマンドとしてはcacls.exeがあり、TIPS「caclsコマンドの出力の見方」「caclsコマンドでACLを編集する」などで紹介している。このcaclsコマンドの後継として、Windows Server 2003 SP2以降のOSでは、icacls.exeというコマンドが提供されている。オプションの指定方法が少し変更されているほか、ACLの保存や復元、SIDを指定しての削除など、いくつか機能が拡張されている。
※現在のWindows OSでは、icacls.exeコマンドの使用が推奨されている
C:\>cacls ……Windows 7でcaclsを実行した場合の表示例
注意: CACLS の使用は推奨されていません。ICACLS を使用してください。 ……icaclsコマンドの使用を推奨している
ファイルのアクセス制御リスト (ACL) を表示または変更します。
CACLS ファイル名 [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C]
……以下省略……
本TIPSではicaclsコマンドの基本的な使い方として、ACLの保存と復元方法について紹介する。それ以外の用法については今後別TIPSで紹介する。
操作方法
●icacls.exeの使い方
icaclsコマンドの使い方は引数なしで実行するか、/?を付けると表示される。
C:\>icacls /? ……Windows 7でヘルプを表示させた場合の例
ICACLS <名前> /save <ACL ファイル> [/T] [/C] [/L] [/Q]
名前が一致するすべてのファイルとフォルダーの DACL を <ACL ファイル> に
格納して、後で /restore で指定できるようにします。SACL、所有者、整合性
ラベルは保存されません。
ICACLS <ディレクトリ> [/substitute <旧 SID> <新 SID> [...]] /restore:<ACL ファ
イル> [/C] [/L] [/Q]
格納されている DACL を <ディレクトリ> 内のファイルに適用します。
ICACLS <名前> /setowner <ユーザー> [/T] [/C] [/L] [/Q]
すべての一致する名前の所有者を変更します。このオプションは所有権の変更を
強制しません。所有権の変更を行うには、takeown.exe ユーティリティを使用し
ます。
……以下省略……
■Windows Server 2003 SP3に付属のicacls.exeコマンドについて
日本語版のWindows Server 2003 SP2に付属のicacls.exeコマンドには不具合があり、/?を付けてもヘルプが正しく表示されない。とはいえ、これはヘルプの表示方法だけの問題であり、機能的には正しく動作する。Windows Vista以降のWindows OSに付属のものは正しくヘルプが表示される。
※日本語版のWindows Server 2003 SP2上での実行例
C:\>icacls /?
ICACLS < ……不具合のため、このようにしか表示されない
C:\>
マイクロソフトからはこれに対する修正プログラムが提供されている。
【2010/06/25追記】ただし、上のサポート技術情報に記述されているicacls.exeコマンドはその後さらに改訂され、現在ではより新しいバージョンが提供されている。次のページの先頭にある「この技術情報に対応する修正プログラムのダウンロードのリスト」のリンクをクリックして、最新版を入手していただきたい。修正プログラムのダウンロード手順については、TIPS「不具合を修正するホットフィックス修正プログラム(QFE)を入手する」を参照のこと。
- Windows Server 2003 SP2 を実行しているコンピューター上のファイルまたはフォルダーの所有権を設定する Icacls.exe ユーティリティを実行するとエラー メッセージ: アクセスが拒否されました"[機械翻訳](サポート技術情報)
●ACLを保存する
icaclsにパス名を付けて実行すると、デフォルトでは指定されたファイルやフォルダのACLが表示される。フォルダを再帰的に走査するには/Tオプションを指定する(これはcaclsコマンドと同じ)。さらに「/save <ファイル名>」オプションを付けると、その結果が指定されたファイルに保存される。このファイルは後でACLの復元作業に利用できる。
C:\文書>dir /s /b ……ファイルの一覧
C:\文書\プロジェクト
C:\文書\プロジェクト\Book1.xlsx
C:\文書\プロジェクト\photo1.jpg
C:\文書\プロジェクト\コマンド・ヘルプ.docx
C:\文書>icacls * /t ……ACLを表示させてみる
プロジェクト Everyone:(I)(OI)(CI)(F) ……結果(カレント・フォルダ)
プロジェクト\Book1.xlsx NT AUTHORITY\SYSTEM:(F) ……ファイル1
BUILTIN\Administrators:(F)
XPC00090AB003\user01:(F)
プロジェクト\photo1.jpg Everyone:(I)(F) ……ファイル2
プロジェクト\コマンド・ヘルプ.docx NT AUTHORITY\SYSTEM:(F) ……ファイル3
BUILTIN\Administrators:(F)
XPC00090AB003\user01:(F)
4 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
C:\文書>icacls * /t /save c:\tmp\acl.bin ……ACLを保存させる
処理ファイル: プロジェクト
処理ファイル: プロジェクト\Book1.xlsx
処理ファイル: プロジェクト\photo1.jpg
処理ファイル: プロジェクト\コマンド・ヘルプ.docx
4 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした ……正常に終了した。「0 個のファイルを……」は、正常終了しているという意味
結果は次のように、Unicode形式のテキスト・ファイルとして保存される(ただし先頭の「BOM:Byte Order Mark」はないので注意)。「D:AI(A;OICIID;FA;;;WD)」といった文字列はSDDL形式で表現したACLである。SDDLについてはTIPS「セキュリティ設定を記述するSDDL文字列とは?」「caclsコマンドでACLを編集する(SDDL編)」を参照していただきたい。
保存されたACLのリスト
結果のACLはUnicode形式でファイルに保存される。ACLの各要素(DACLという)は、SDDL形式で記録されている。ファイル/フォルダ名とACLが1行ずつ並んでいる。
(1)ACLの各エントリは2行で構成されている。1行目はパス名、2行目はACL(DACL)のリストである。ファイルはUnicode形式で読み書きすること。パス名は絶対パス名でもよいし、この例のように相対パス名でもよい。ただし相対パス名のときは、復元コマンドの実行時のカレント・フォルダに注意。
●ACLを復元する
/saveオプションで保存したACLのテキスト・ファイルや同様の形式になるように作成したファイルは、/restoreオプションを付けて実行すれば、ACLの復元に利用できる。
なおメモ帳でUnicodeとして保存すると先頭に「BOM:Byte Order Mark(16進数でFF-FE)」が付くが、このようなUnicodeテキスト・ファイルはWindows 7やWindows Server 2008 R2以降のicacls.exeコマンドでないと正しく読み込めないようである。Windows Server 2003やWindows Vista、Windows Server 2008のicacls.exeに与える場合は、BOMマークのないUnicodeテキスト・ファイルにする必要がある。いったんInternet Explorer 8で開いて、Unicode形式で保存し直すと、BOMのないUnicodeファイルになる(TIPS「文字コードを変換する」参照)。
C:\文書>icacls . /restore c:\tmp\acl.bin ……ACLを復元してみる
処理ファイル: .\プロジェクト ……処理中のパスの表示
処理ファイル: .\プロジェクト\Book1.xlsx
処理ファイル: .\プロジェクト\photo1.jpg
処理ファイル: .\プロジェクト\コマンド・ヘルプ.docx
4 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした ……正常に終了
■更新履歴
【2010/06/25】icacls.exeの新バージョンについて追記しました。
【2010/06/18】初版公開。
■この記事と関連性の高い別の記事
- icaclsコマンドでアクセス制御リスト中のメンバーを検索する(TIPS)
- Windowsのcaclsコマンドが出力する内容の意味や見方を知る(TIPS)
- caclsコマンドでACLを編集する(SDDL編)(TIPS)
- Windowsでファイルやフォルダのアクセス権をリセットして親フォルダから継承させる(TIPS)
- WindowsのcaclsコマンドでACLを編集する(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.