今の現場でicaclsコマンドを使う機会がありましたが、よく知らなかったので調べてみました。
icacls
コマンドとは?
icaclsコマンドとは、Windowsでファイルやフォルダーのアクセス制御リスト(ACL)を管理するためのコマンドです。
アクセス制御リスト(Access Control List、ACL)は、ユーザーやグループに対するファイルやフォルダーへのアクセス権限を指定するリストです。具体的には、「読み取り」「書き込み」「実行」などの権限をユーザーごとに設定することが可能です。
つまり、ファイルやフォルダのアクセス権を変更したりする際に使用するコマンドのようです。
icacls
コマンドの基本構文
アクセス権の表示
ファイルやフォルダーに設定されているアクセス権を確認できます
icacls <ファイル名またはフォルダ名>
表示されるアクセス権には様々な種類がありますが、主に使われるものを紹介します。
- F:フルアクセス権限
- RX:読み取りと実行権限
- R:読み取り権限
- W:書き込み権限
アクセス権の設定
特定のユーザーにアクセス権を付与できます
icacls <ファイル名またはフォルダ名> /grant <ユーザー>:<アクセス権>
- 例:ユーザ名
user1
にtest.txt
へのフルアクセスコントロール権限(F)を付与する場合
icacls test.txt /grant user1:F
アクセス権の削除
特定のユーザーのアクセス権を削除できます
icacls <ファイル名またはフォルダ名> /remove <ユーザー>
- 例:ユーザ名
user1
のtest.txt
へのアクセス権限を削除する場合
icacls test.txt /remove user1
/remove
オプションは対象のアクセス権をすべて削除してしまいます。
仮に読み取り権限(R)だけを拒否したい場合は/deny
オプションを利用し、次のように使用します。
icacls test.txt /deny user1:R
継承権限
Windowsのファイルシステムには、ACLの権限設定を親フォルダから子フォルダに自動的に適用し、管理を効率化する「継承権限」という仕組みがあります。
icacls
コマンドと/inheritance
オプションを使って継承権限の設定を行うことができます。
継承の有効化
親フォルダからの継承を有効にし、子フォルダやファイルは親フォルダの権限を継承します。
icacls <フォルダ名> /inheritance:e
- 例:
Projects
フォルダ(C:\Projects
)にUser1
のアクセス権を設定し、権限をそのフォルダ内の子フォルダやファイルに継承させたい場合
icacls "C:\Projects" /grant User1:F
icacls "C:\Projects" /inheritance:e
継承の無効化
親フォルダからの継承を無効にし、子フォルダやファイルは親フォルダの権限を継承しなくなります。継承されていた権限は削除されます。
icacls <フォルダ名> /inheritance:r
- 例:
Projects
フォルダの子フォルダSubfolder
(C:\Projects\Subfolder
)の権限を無効化し、User1
にのみ独自の読み取り権限を与える場合
icacls "C:\Projects\Subfolder" /inheritance:r
icacls "C:\Projects\Subfolder" /grant User1:R
継承の範囲
icacls
コマンドを使ってアクセス権を表示させると、「継承の範囲」を示すコードが表示されます。
それらはそれぞれ以下のような意味を持ちます。
- (I):親フォルダから継承されたアクセス権であることを示します
- (OI):このフォルダ内のファイルにのみ継承された権限が適用され、フォルダや子フォルダには適用されません
- (CI):このフォルダ内の子ファイルにのみ継承された権限が適用され、フォルダ内のファイルには適用されません
- (IO):継承のみの設定で、このフォルダ自体には権限が適用されず、子フォルダやフォルダ内のファイルにのみ適用されます
まとめ
icacls
コマンドを使うことでファイルやフォルダの権限を効率的に管理できるようです。
参考資料