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

icaclsコマンドでアクセス制御リスト中のメンバーを検索する

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

デジタルアドバンテージ 打越 浩幸
2010/07/02
対象OS
Windows Server 2003
Windows Vista
Windows Server 2008
Windows 7
Windows Server 2008 R2
ファイルやフォルダに対するアクセス権は、アクセス制御リストACLで管理されている。
ACLの中に、特定のユーザーやグループに対するエントリが含まれているかどうかは、icaclsコマンドで検索できる。

解説

 Windows OSでは、ファイルやオブジェクトに対するセキュリティは、ACL(アクセス制御リスト)を使って実現している。ACLには、あるユーザーやグループなどに対して、どのような操作や権限を許可するか、もしくは許可しないかという設定(ACE:アクセス制御エントリ)が記述されており、システムはアクセスしているユーザーやグループと、オブジェクトのACLを照合して、アクセスする権利があるかどうかを判断している。

 ファイルに対するACLは、例えばicacls.exeコマンドを利用すれば確認できる。

C:\Documents and Settings\Administrator>icacls . ……ACLを確認する
. UXPC21X\Administrator:(F) ……Administratorに対してフルコントロール可
  NT AUTHORITY\SYSTEM:(F)
  BUILTIN\Administrators:(F) ……Administratorsに対してフルコントロール可
  UXPC21X\Administrator:(OI)(CI)(IO)(F)
  NT AUTHORITY\SYSTEM:(OI)(CI)(IO)(F)
  BUILTIN\Administrators:(OI)(CI)(IO)(F)

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

 アクセス権の管理業務では、どの権限が誰に与えられているのかを知りたいことがある。例えば機密性の高いデータに対してアクセス権を設定する場合、すでに退職してしまったユーザーやグループがアクセス許可リストの中に残っていないか調査したり(本来ならば、適切なセキュリティ・グループを使って管理するべきところであるが)、逆にあるユーザーに対してすでに権限を与えているかどうか調査したり、といった作業が発生するだろう。

 ある特定のユーザーやグループがファイルやフォルダのACLに含まれているかどうかを検索するにはいくつか方法があるが、本TIPSではicacls.exeコマンドを使う方法を紹介する。

  操作方法

 icacls.exeコマンドはWindows Server 2003 SP2以降のWindows OSで利用できるコマンドであり、ACLの中から特定のユーザーやグループを検索するというオプションを持っている。

C:\Documents and Settings\Administrator>icacls /? ……ヘルプの表示
……(中略)……
ICACLS <名前> /findsid <SID> [/T] [/C]
    <SID> が明示されている ACL を含むすべての一致する名前を検索します。
……(中略)……
注意:
    <SID> は数値形式またはフレンドリ名形式で指定できます。数値形式の場合は、
    SID の始めに * を付けます。

    /T は、<名前> で指定されたディレクトリ以下のすべての一致するファイルと
        ディレクトリに対してこの処理が実行されることを指定します。

    /C は、どのようなファイル エラーが発生してもこの処理が続行されることを
        指定します。ただしエラー メッセージは表示されます。
……(以下省略)……

 なおWindows Server 2003 SP2に含まれるicacls.exeコマンドには不具合があるので、TIPS「icaclsコマンドでファイルの所有者を変更する」の方法で最新の修正プログラムを入手しておいていただきたい。

 ACLの中に含まれる、特定のユーザーやグループに対するACEエントリを見つけるには/findsidオプションを指定する。オプションは「/findsid <SID>」という形式で与えるが、実際には数値形式のSID(「S-1-1-0」など。これはeveryoneを表す。詳細はTIPS「オブジェクトを識別するSIDとは?」参照)だけでなく、単に「everyone」や「administrator」、「mydomain\myuser01」といった、通常の形式でもよい。数値形式で指定する場合は先頭に「*」を付けて、「*S-1-1-0」のように指定する。

 次の例では、X:\CompanyDataというフォルダ以下にあり、「mycompany\account staff」というグループが含まれるACLを検索している。最後にある/tはフォルダ以下を再帰的にすべて検索する指示、/cはエラーが発生しても検索を続けるという指示(デフォルトでは1つエラーが見つかると、そこで終了する)である。End of Article

X:\CompanyData>icacls . /findsid "mycompany\account staff" /t /c ……検索してみる
SID が見つかりました: . ……検索結果
SID が見つかりました: .\2003年度
SID が見つかりました: .\2004年度
SID が見つかりました: .\2005年度
SID が見つかりました: .\2006年度
SID が見つかりました: .\Account
SID が見つかりました: .\AddressBook
……(中略)……
SID が見つかりました: .\2003年度\2003年度決算資料
SID が見つかりました: .\2003年度\2003年度決算資料\0001.xls
SID が見つかりました: .\2003年度\2003年度決算資料\0002.xls
SID が見つかりました: .\2003年度\2003年度決算資料\0003.xls
SID が見つかりました: .\2003年度\2003年度決算資料\0004.xls
……(中略)……

X:\CompanyData>icacls .\2003年度\2003年度決算資料\0002.xls ……ACLを確認
.\2003年度\2003年度決算資料\0002.xls BUILTIN\Administrators:(F)
                             BUILTIN\Administrators:(I)(F)
                             mycompany\aki:(I)(F)
                             mycompany\hiro:(I)(F)
                             mycompany\account staff:(I)(F) ……これを検索した
                             mycompany\board group:(I)(F)

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

「Windows TIPS」


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

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間