Windows TIPS
[System Environment]
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つエラーが見つかると、そこで終了する)である。
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
generated by
TechTargetジャパン
Windows Server Insider フォーラム 新着記事
キャリアアップ
**先週の人気講座ランキング**
〜 Android編 〜