Icacls - DOS/コマンドプロンプト コマンド一覧
/verify ACLの検証を行います。ファイルシステムの破損などでACLの状態に問題が出ているかどうかを確認します。 ※ Chkdskではセキュリティ識別子のチェック自体は行いますが、ACLのチェックまでは行わないため、ACL状態のチェックにはIcaclsを使う必要があります。 /reset 個別に設定されたACLを破棄し、ACLを継承されたもののみにします。 [/grant[:r]] [/deny] [/remove] [/setintegritylevel] [/inheritance] 対象のファイルに権限を設定します。/grant, /deny, /remove, /setintegritylevel, /inheritance のいずれのオプションも指定しない場合、対象のファイルに設定されている権限を表示(画面に出力)します。 ※ 「/grant」や「/deny」などで同一ユーザー・識別子に対する権限設定が重なる場合、重なる部分は後に指定されたオプションが優先されます。
なお、 と の間にはスペースを含めず、「:」(コロン)の区切り文字を入れます(User:perm のような形式)。
対象のユーザー・識別子に対して「拒否」権限(明示的な拒否ACE)を付与します。「 : 」の書式は /grant と同様であり、/deny も複数指定することが可能です。
「 」に指定する値は /grant や /deny と同様です。
ファイルに「整合性レベル」(Integrity level)を設定します。 には「Low」「Medium」「High」またはそれらの頭文字を指定します。なお、Icacls のコマンドラインでの整合性レベル設定は「NW」(SYSTEM_MANDATORY_LABEL_NO_WRITE_UP)のみ設定可能であり、解除することはできません(/reset や /restore でも解除されません)。
※ Icaclsのヘルプでは「 : 」とありますが、現在 しか使用されておらず、「L」「M」「H」のいずれかの文字で始まっていれば以降のスペース区切り以外の文字は何であっても無視されるようです。 ※ 「/setintegritylevel」も複数指定可能ですが、最後の指定のみ効果があります。 ※ 解除するにはファイル・ディレクトリを作り直すか整合性レベルを取り扱うようなツールを利用する必要があります。
権限データ(ACEデータ)の継承について設定します。「:」のあとに e, d, r のいずれかを指定しますが、それらの意味は以下の通りです。
/inheritance:e親オブジェクトの権限を継承します。 /inheritance:d親オブジェクトの権限を継承せず、親の権限をコピーして自分に割り当てます。 /inheritance:r親オブジェクトの権限を継承せず削除します。既に個別に割り当てられている権限は(同一であるかにかかわらず)そのままにします。解説
Windowsのセキュリティシステムにおいては、「オブジェクト」という抽象的な概念に「セキュリティ記述子」(Security Descriptor)というものが紐づけられ、その中にアクセス制御エントリ(Access Control Entry; ACE)を複数持った「アクセス制御リスト」(Access Control List; ACL)が含まれます。ACLは「DACL (Discretionary ACL; 任意に扱えるACL)」と「SACL (System ACL)」の2種類がセキュリティ記述子に含まれ、通常はDACLを適切に設定してアクセス権の制御などを行います。
※ 他にはレジストリも「オブジェクト」に含まれ、プロセスやスレッドも作成時や実行時などには(ファイルとは別の)「オブジェクト」として扱われます。 ※ Windows XPまではCaclsプログラムが提供されていましたが、現在はIcaclsプログラムの使用が推奨されています(Caclsも使用することはできます)。
perm で指定する文字列「/grant」「/deny」「/remove」の各オプションにおける「 」には、単純な権限を指定するか「( )」内に詳細な権限をコンマ区切りで指定します。また、ディレクトリに対しては継承に関する権限の指定も組み合わせることができます。
Nアクセス権無し Fフルコントロール M変更 R読み取り(専用) RX読み取りと実行 W書き込み(専用) D削除※ フルコントロールを除き、アクセス権変更を許可する指定はないため、アクセス権変更の権限を扱う場合は以下の詳細権限設定を利用する必要があります。 詳細な権限 以下の文字を1つまたはコンマ区切りで複数繋げ、全体を「( )」で括って指定します。(例: 「(RD,WD,AD)」)
RDデータの読み取り、またはディレクトリ内の一覧表示(取得・列挙) RA属性の取得 REA拡張属性の取得 RCアクセス権の読み取り GR一般的な「読み取り」権(RD, RA, RC, REAを組み合わせた値です) WDデータの書き込み、またはディレクトリ内へのファイルの追加 ADデータの追加書き込み、またはディレクトリ内へのサブディレクトリの追加 WA属性の変更 WEA拡張属性の変更 GW一般的な「書き込み」権(WD, AD, WA, WEAを組み合わせた値です) Xファイルの実行、またはディレクトリのスキャン(走査) GE一般的な「実行」権(RA, RC, Xを組み合わせた値です) DE削除 DC子の削除 WO所有者の設定(変更) WDACDAC(アクセス権設定)の変更 GA一般的な全アクセス権(フルコントロール) ASシステムACL(SACL)の変更 S同期処理(待機関数)への利用 MA最大限のアクセス許可※ Attribで変更できる属性の変更は「WA」で制御しますが、「RA」が無くてもこの属性の取得は可能です。 ※ 多くのアプリケーションはファイル書き込みに「GW」(GENERIC_WRITE; WD + AD + WA + WEA)を要求しており、その場合は WD, AD, WA, WEA のいずれかが欠けると書き込みできなくなります。 ※ 「ディレクトリのスキャン(走査)」権は、既定のユーザーの権限では無視する設定になっています。 ※ 「MA」(Maximum Allowed)の指定はアクセス権を要求する際に使用されるものであり、ファイルやディレクトリなどのアクセス権として指定する場合は何も意味を持ちません。(参考: [MS-DTYP]: ACCESS_MASK (英語)) ※ 「AS」(Access System Security)はファイルやディレクトリに対しては特に効果を持ちません。 継承に関する権限 対象がディレクトリである場合、指定した権限を子に継承できるかどうか追加で指定することができます。上記の単純な権限または詳細な権限の手前に「( )」付きで1つまたは複数指定します。(例: 「(OI)(CI)F」「(OI)(IO)(GR,GE)」
(OI)子オブジェクト(ファイル)に継承 (CI)子コンテナー(サブディレクトリ・サブフォルダー)に継承 (IO)継承のみ行い、自身には権限を与えない (NP)直下のオブジェクト(ファイル)やコンテナー(サブディレクトリ・サブフォルダー)には継承するが、さらに下(孫)のオブジェクトやコンテナーには継承させない Security Descriptor Definition Language (SDDL)Security Descriptor Definition Language (SDDL; セキュリティ記述子定義言語)はセキュリティ記述子(アクセス権などの情報)を文字列として定義した言語です(その文字列は「Security Descriptor String Format」と呼ばれます)。Icaclsの /save オプションと /restore オプションで指定するファイルでは奇数行目にファイル(ディレクトリ)名を記述し、偶数行目にそのファイルに対応するセキュリティ記述子をSDDLで記述します。
整合性レベル例
サンプル1 icacls MyFile.txt サンプル2 icacls . /reset /T /C /L /Q サンプル3 icacls PrivateSchedule /reset icacls PrivateSchedule /grant:r Luminas:F /grant:r BUILTIN\Administrators:F /inheritance:r サンプル4 icacls ProtectedDir /setintegritylevel (OI)(CI)Low start ProtectedDir\MyProgram.exe※ [Windows 8以降] Windows SmartScreenが有効になっている場合(既定では有効です)、Lowレベルのプログラムの実行時に確認のダイアログが表示されます。
サンプル5 icacls MyDir\. /save MyDirAcls.dat icacls MyDir /restore MyDirAcls.dat※ /save において「MyDir\.」を「MyDir\」で指定すると、「MyDirAcls.dat」内の記述においてファイル・ディレクトリ名が入るべき場所が空欄になり、/restore での解析に失敗します。「MyDir\.」とすることによりそこが空欄ではなく「.」となり、/restore で正しく解析できるようになります。
icacls MyDir /save MyDirAcls.dat icacls . /restore MyDirAcls.dat※ /save において「MyDir\.」を「MyDir」で指定することで、「MyDirAcls.dat」内の記述においてファイル・ディレクトリ名が入るべき場所が「MyDir」となります。この場合、/restore で指定すべきディレクトリは「MyDir」ではなくその親ディレクトリにあたる「.」となります。これは、「/restore」がファイルを解析する際に読み取るファイル・ディレクトリ名は /restore で指定したディレクトリを起点としたものとして扱うためです。
関連項目
- ユーザー権限の確認とファイルのアクセス制御変更(Icacls編) (Windowsコマンド実用例) - 実際にIcaclsを使う例を使い方ベースで紹介しています。
- 管理者でも開けないフォルダーの対処法(Takeown / Icacls活用) (Windowsコマンド実用例) - 所有者変更後にIcaclsで権限調整を行う例や、Icaclsでもファイル・フォルダーの所有者を変更できることについてTakeownとの違いなどを説明しています。
- Takeownコマンド - ファイル・ディレクトリの所有者を現在のユーザーに変更する際に用います。Icaclsと異なり強制的に変更することもできます。
- Attribコマンド - 読み取り専用や隠しファイルなどの一般属性を変更する際に用います。
- Whoamiコマンド - 現在のユーザーのSIDを知りたい場合に用いることができます。