WindowsのcaclsコマンドでACLを編集するTech TIPS

コマンドラインでファイルやフォルダのACLを編集するにはcaclsコマンドを利用する。ACLの追加や置換、削除には、それぞれ/G、/P、/Rオプションを使用する。既存のACLを残したまま編集するためには、/Eオプションを付ける必要がある。

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

連載目次

対象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



「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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