Windows TIPS
[System Environment]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

icacls/subinaclでアクセス制御リストからメンバーを削除する

解説をスキップして操作方法を読む

デジタルアドバンテージ 打越 浩幸
2010/08/13
対象OS
Windows 2000
Windows XP
Windows Server 2003
Windows Vista
Windows Server 2008
Windows 7
Windows Server 2008 R2
ファイルやフォルダ、レジストリなどのオブジェクトに対するアクセス権は、アクセス制御リストACLで管理されている。
特定のアカウントに対するACLのエントリを削除するには、icaclsやsubinaclコマンドを利用する。
削除済みのアカウントに対するエントリを削除するには、SID形式で指定する。

解説

 TIPS「icaclsコマンドでアクセス制御リスト中のメンバーを検索する」や「subinaclコマンドでアクセス制御リスト中のメンバーを検索する」では、icacls/subinaclコマンドを使ってアクセス制御リスト(以下ACL)中に含まれる、特定のメンバー名(が含まれるエントリ)を検索する方法を紹介した。本TIPSではこの応用として、特定のメンバーが含まれるエントリを削除する方法を紹介する。人事異動などでセキュリティ設定を変更する場合や、すでに削除してしまったユーザーやグループ・アカウントが含まれるエントリを削除したいといった場合に利用できる。caclsコマンドで行う方法はTIPS「caclsコマンドでACLを編集する」で紹介しているが、本TIPSではicaclsやsubinaclコマンドでの利用方法を解説する。

 なお、Windows Server 2003向けのicaclsコマンドの入手方法については、TIPS「icaclsコマンドでファイルの所有者を変更する」を参照していただきたい。またsubinaclコマンドの入手はTIPS「subinaclコマンドでオブジェクトのセキュリティ情報を表示させる(subinaclの基本)」を参照するか、以下のリンク先からダウンロードしていただきたい。

  操作方法

icaclsコマンドで特定のアカウントのACLエントリを削除する

 icaclsコマンドで特定のユーザー/グループ・アカウントが含まれるエントリを削除するには、/removeオプションを利用する。

C:\>icacls /? ……ヘルプの表示
……(中略)……
ICACLS <名前> [/grant[:r] <SID>:perm[...]]
       [/deny <SID>:perm [...]]
       [/remove[:g|:d]] <SID>[...]] [/T] [/C] ……これを利用する

    /grant[:r] <SID>:perm は、指定されたユーザー アクセス権を付与します。
        :r を指定すると、以前に付与されたすべての明示的なアクセス許可は新しい
        アクセス許可に置き換えられます。
        :r を指定しない場合、新しいアクセス許可は以前に付与された明示的な
        アクセス許可に追加されます。

    /deny <SID>:perm は、指定されたユーザー アクセス権を明示的に否定します。
        指定されたアクセス許可の明示的な否定 ACE が追加され、明示的な許可内容
        に含まれた同じアクセス許可は削除されます。

    /remove[:[g|d]] <SID> は、ACL 内にあるすべての <SID> を削除します。
        :g を指定すると、その SID に対して許可されたすべての権限を ACL から
        削除します。
        :d を指定すると、その SID に対して否定されたすべての権限を ACL から
        削除します。
……(以下省略)……

 今、次のようなアクセス権が設定されたファイルがあるとする。

C:\>icacls x.txt ……caclsコマンドによる確認。以下の6つのエントリがある
x.txt MYPC12\user01:(W) ……これを削除してみる
      MYPC12\user02:(W)
      BUILTIN\Administrators:(F)
      EXAMPLEDOM\uchikoshi:(F)
      NT AUTHORITY\SYSTEM:(F)
      BUILTIN\Users:(RX)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

 このACLから、例えば先頭のuser01アカウント(これはローカルPCのアカウント)に対する許可エントリを削除するには、次のように/removeオプションを指定する。

C:\>icacls x.txt /remove user01 …user01のエントリを削除する
処理ファイル: x.txt
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

C:\>icacls x.txt ……結果の確認
x.txt MYPC12\user02:(W) ……この直前のエントリが削除されている
      BUILTIN\Administrators:(F)
      EXAMPLEDOM\uchikoshi:(F)
      NT AUTHORITY\SYSTEM:(F)
      BUILTIN\Users:(RX)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

 サブフォルダ全体を処理する場合は、/tオプションを追加する。

subinaclコマンドで特定のアカウントのACLエントリを削除する

 subinaclコマンドで特定のユーザー/グループ・アカウントが含まれるエントリを削除するには、/revokeオプションを利用する。

C:\>subinacl /help /revoke ……ヘルプの表示
SubInAcl version 5.2.3790.1180

/REVOKE
-------

/revoke=[DomainName\]User ……削除コマンド

     suppress all Permission Ace(s) for the specified User (or group)

 先ほどと同じファイル(x.txt)がある場合に、user01アカウントに対するエントリを削除するには次のようにする。

C:\>icacls x.txt ……caclsコマンドによる確認
x.txt MYPC12\user01:(W) ……以下の6つのエントリがある
      MYPC12\user02:(W)
      BUILTIN\Administrators:(F)
      EXAMPLEDOM\uchikoshi:(F)
      NT AUTHORITY\SYSTEM:(F)
      BUILTIN\Users:(RX)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

C:\>subinacl /file x.txt /revoke=user01 ……user01に対するエントリの削除
C:\x.txt : delete Perm. ACE 0 MYPC12\user01 ……処理中
C:\x.txt : 1 change(s) ……結果

Elapsed Time: 00 00:00:00
Done:        1, Modified        1, Failed        0, Syntax errors        0
Last Done  : C:\x.txt

C:\>icacls x.txt ……結果の確認
x.txt MYPC12\user02:(W) ……1つ削除されている
      BUILTIN\Administrators:(F)
      EXAMPLEDOM\uchikoshi:(F)
      NT AUTHORITY\SYSTEM:(F)
      BUILTIN\Users:(RX)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

C:\>

 「/file <名前>」は、ファイルを処理する場合の指定である。サブフォルダ全体を指定する場合は「/subdirectories <名前>」のように指定する。レジストリや共有などのオブジェクトを指定する方法については、TIPS「subinaclコマンドでオブジェクトのセキュリティ情報を表示させる(subinaclの基本)」を参照していただきたい。

不明アカウントに対するエントリの削除

 ローカル・コンピュータやドメインからユーザーやグループを削除しても、ファイルやフォルダなどのオブジェクトに付けられたACL中のエントリはそのままである。そのようなケースでACLの内容を表示させると、アカウントの代わりに、「<アカウント ドメインが見つかりません>」や「アカウント名とセキュリティ ID の間のマッピングは実行されませんでした。」といったメッセージが表示される。例えば、アカウントuser02を削除すると次のようになる。

※先ほどの例において、user02というアカウントが削除された場合の例

C:\>cacls x.txt ……caclsによる確認
C:\x.txt MYPC12\user01:(特殊なアクセス:)
                       SYNCHRONIZE
……(中略)……
         <アカウント ドメインが見つかりません>(特殊なアクセス:) ……不明アカウントに対するエントリ
                             SYNCHRONIZE
……(中略)……
         BUILTIN\Administrators:F
         EXAMPLEDOM\uchikoshi:F
         NT AUTHORITY\SYSTEM:F
         BUILTIN\Users:R


C:\>icacls x.txt ……icaclsによる確認
x.txt MYPC12\user01:(W)
      アカウント名とセキュリティ ID の間のマッピングは実行されませんでした。
(W) ……不明アカウントに対するエントリ
      BUILTIN\Administrators:(F)
      EXAMPLEDOM\uchikoshi:(F)
      NT AUTHORITY\SYSTEM:(F)
      BUILTIN\Users:(RX)

1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

 このような場合は、削除されたアカウントをSID文字列形式で指定すればよい。SID文字列とは、オブジェクトの内部名であり、例えば「S-1-1-0」といった形式となっている。詳細はTIPS「オブジェクトを識別するSIDとは?」「whoamiコマンドでユーザーのSIDや権利を調査する」を参照していただきたい。subinaclコマンドでは、アカウントが不明な場合はSID形式で表示されるので、これで確認する。

C:\>subinacl /file x.txt ……subinaclによる確認

===============
+File C:\x.txt
===============
……(中略)……
/pace =S-1-5-21-515967499-1637732038-1606110848-1031    ACCESS_ALLOWED_ACE_TYPE-0x0  ……これが削除されたアカウントに対するエントリ
    Type of access:
        Special acccess :
    Detailed Access Flags :
        FILE_WRITE_DATA-0x2         FILE_APPEND_DATA-0x4        FILE_WRITE_EA-0x10
        FILE_WRITE_ATTRIBUTES-0x100 SYNCHRONIZE-0x100000
……(以下省略)……

 このリストの中にある、「S-1-5-21-……」というのが削除されたエントリに対するSID文字列である。これを指定して、エントリを削除すればよい。

 subinaclなら、アカウント名の代わりにSID文字列を直接そのまま記述すればよい。

C:\>subinacl /file x.txt /revoke=S-1-5-21-515967499-1637732038-1606110848-1031 ……削除
C:\x.txt : delete Perm. ACE 1 S-1-5-21-515967499-1637732038-1606110848-1031
C:\x.txt : 1 change(s)

Elapsed Time: 00 00:00:00
Done:        1, Modified        1, Failed        0, Syntax errors        0
Last Done  : C:\x.txt

 なおicaclsコマンドでは、SID文字列の前に「*」を付ければSID形式でアカウントを指定できることになっているが、削除済みアカウント(や存在しないアカウントなど)の場合は利用できないようである(SIDとして正しいかどうか検証できないのでエラーとしているようだ)。icaclsではこの表記方法は、有効なアカウントを使ってACLを編集したり、削除する場合にのみ利用できる。End of Article

C:\>icacls x.txt /remove *S-1-5-21-515967499-1637732038-1606110848-1031 ……SID形式で指定してみる
0 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした ……エラー
C:\>icacls x.txt /grant *S-1-1-0:F ……Everyone:Fを追加してみる
処理ファイル: x.txt
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした

「Windows TIPS」

@IT Special

- PR -

TechTargetジャパン

Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間
ソリューションFLASH