WindowsのcaclsコマンドでACLを編集する:Tech TIPS
コマンドラインでファイルやフォルダのACLを編集するにはcaclsコマンドを利用する。ACLの追加や置換、削除には、それぞれ/G、/P、/Rオプションを使用する。既存のACLを残したまま編集するためには、/Eオプションを付ける必要がある。
対象OS:Windows 2000/Windows XP/Windows Server 2003
解説
TIPS「アクセス制御リストACLとは?」や「 有効なファイル・アクセス権を調査する」「caclsコマンドの出力の見方」では、ファイルのアクセス制御リスト(Access Control List、以下ACL)について解説した。これらのTIPSでは、ACLの概要や「有効なACL」の確認方法、コマンド・プロンプト上でのACLの確認方法について説明しているので、参考にしていただきたい。
本TIPSでは、コマンド・プロンプト上で動作するcacls.exeコマンドを使った、ACLの編集方法について解説する。
操作方法
●ACLの追加/編集
cacls.exeコマンドにファイルやフォルダ名を与えて(ワイルドカード使用可)、オプションなしで実行すると現在設定されているACLのリストが表示される(例「cacls test.txt」)。これに続けて、さらに「/G(Grant=許可)」や「/P(rePlace=置換)」オプションと、「ユーザー名:アクセス権」を指定すると、ACLを追加/変更することができる。
「ユーザー名」には、アクセス権を与えるユーザー名やグループ名、組み込みアカウント名などを指定する。「アクセス権」には「R(読み出しのみ)」「W(書き込み許可)」「C(変更許可)」「F(フルコントロール)」「N(拒否。/Pでのみ利用可)」を続ける。これより細かい個別のアクセス権、例えば「拡張属性の書き込み:FILE_WRITE_EA」だけを指定する、ということはできない(拡張コマンドであるxcacls.exeでは利用可能)。またユーザー名に空白文字が含まれている場合は、名前全体を引用符で囲み、例えば「/g "Domain Users":r」とする。
C:\Data>cacls file01.txt …現在のACL
C:\Data\file01.txt BUILTIN\Administrators:F
NT AUTHORITY\SYSTEM:F
BUILTIN\Administrators:F
BUILTIN\Users:R
C:\Data>cacls file01.txt /g everyone:r Users:f …ACLの変更
よろしいですか (Y/N)?Y …確認の入力
処理ファイル: C:\Data\file01.txt
C:\Data>cacls file01.txt …編集後のACL
C:\Data\file01.txt Everyone:R …Everyoneに読み出しを許可
BUILTIN\Users:F …Usersにフルアクセス権>
/Gと/Pの違いは、前者は既存のアクセス権に対して追加するのに対し、後者では既存のアクセス権は削除してから新たに追加し直す(すべて置換する)という点にある。例えば、Everyone:Rというファイルに新しくEveryone:Wというアクセス権を/Gオプションで追加すると、RとWが合成されたものになるが、/PオプションならばEveryone:Wだけになる(元のアクセス権Rは削除され、新しく指定したWだけになる)。また、Everyone:N(Everyoneからのアクセスは不許可)というファイルにEveryone:Rを/Gで追加すると、許可と不許可の2つのACLエントリが作成されるが、/PオプションならばEveryone:Rだけになる。
ところで、これらのオプションを利用する場合は、同時に「/E(Edit=編集)」オプションも指定する必要があるだろう。/Eを付けると、既存のACLの内容はそのままにして、新しくACLを追加したり、既存のACLを編集したりできる。これに対して/Eを省略すると(付けるのを忘れると)、既存のACLの内容はいったんすべて削除(破棄)され、/Gや/Pで指定されたACLのみが設定される。例えば、既存のファイルやフォルダに対して「Everyone:R」を付けようとして「cacls * /p everyone:r」とすると、既存のACLの内容はすべて削除され、Everyone:Rのみが設定されてしまう。ACLを追加したい場合は、/Eオプションを忘れないようにする。
また、フォルダ階層を再帰的にスキャンするためには、/Tオプションも追加する。例えば「cacls * /T /E /P everyone:R」とすると、現在のフォルダ以下にあるすべてのフォルダ/ファイルに対してEveryone:RのACLエントリが追加される。
●ACLの削除
ACLを削除するには、「/R(Revoke=取り消し)」と/Eオプションを使用する(/Eがないとエラー)。/Rの引数にはユーザー/グループ名を指定する。
C:\Data>cacls * /t /e /r everyone …EveryoneへのACLエントリをすべて削除
処理ファイル: C:\Data\file01.txt
処理ファイル: C:\Data\file02.txt
処理ディレクトリ: C:\Data\folder1
処理ファイル: C:\Data\folder1\subfile1.txt
処理ファイル: C:\Data\folder1\subfile2.txt
●拒否ACL(アクセス拒否)の設定
指定したユーザーに対して、拒否ACLエントリ(あるユーザーやグループからのアクセスを拒否するACLエントリ)を設定するには「/D(Deny=拒否)」オプションが利用できる。これは「/P ユーザー:N」と指定するのと同じであるが、より短い表記になっている。使用する場合は、/Eを忘れないようにしよう(忘れると、ほかのACLエントリがすべて削除されてしまい、だれもアクセスできなくなってしまう)。
C:\Data>cacls * /t /e /d user02 …user02に対するアクセスを拒否
処理ファイル: C:\Data\file01.txt
処理ファイル: C:\Data\file02.txt
処理ディレクトリ: C:\Data\folder1
処理ファイル: C:\Data\folder1\subfile1.txt
処理ファイル: C:\Data\folder1\subfile2.txt
■この記事と関連性の高い別の記事
- Windowsのcaclsコマンドが出力する内容の意味や見方を知る(TIPS)
- Windowsでファイルやフォルダのアクセス権をリセットして親フォルダから継承させる(TIPS)
- icaclsコマンドでアクセス制御リスト中のメンバーを検索する(TIPS)
- icaclsコマンドでファイルのアクセス制御リストACLを保存/復元する(TIPS)
- Windowsのアクセス制御リストACLとは?(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.