0. はじめに
Windowsのファイルやフォルダに設定されているアクセス権(ACL)を確認・変更する際に使用できるのが icacls コマンドです。
今回は、ファイルサーバー移行後に「移行先のファイル・フォルダに、想定したアクセス権が正しく設定されているか」を確認する用途を中心に、icacls コマンドを調査して、整理してみました。
1. icaclsとは
icacls は、Windowsのファイルやフォルダに設定されているアクセス制御リスト(ACL)を表示・変更するコマンドです。
例えば、以下のようなアクセス権を確認できます。
- どのユーザー・グループに権限が設定されているか
- 読み取り・書き込みなど、どの権限が付与されているか
- 継承によって付与された権限なのか
- 明示的に設定された権限なのか
基本的な使い方は以下です。
icacls C:\share\test.txt
実行すると、例えば以下のような情報が表示されます。
C:\share\test.txt
BUILTIN\Administrators:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
DOMAIN\user01:(M)
DOMAIN\user01:(M) のように、対象のユーザーやグループと、そのアクセス権を確認できます。
2. よく使うオプション
icacls には様々なオプションがありますが、まずは以下を押さえておくと便利です。
| オプション | 内容 |
|---|---|
icacls <パス> |
ACLを表示 |
/grant |
アクセス権を追加・付与 |
/remove |
指定したユーザー・グループの権限を削除 |
/inheritance |
継承の設定を変更 |
/T |
サブフォルダ・ファイルも再帰的に処理 |
/C |
エラーが発生しても処理を継続 |
/save |
ACLをファイルに保存 |
/restore |
保存したACLを復元 |
フォルダ配下をまとめて確認したい場合は、/T を使用します。
icacls C:\share /T
/T を付けることで、指定したフォルダだけではなく、その配下のファイル・フォルダについてもACLを確認できます。
3. ファイルサーバー移行後のアクセス権確認
ファイルサーバーを移行する場合、ファイルそのものがコピーできているだけでは十分ではありません。
移行元と移行先で、アクセス権も想定どおりになっているかを確認する必要があります。
例えば、移行後のサーバーで以下を実行します。
icacls D:\share /T /C
大量のファイルを扱うファイルサーバーでは、画面に表示された結果を人間が1件ずつ確認するのは現実的ではありません。
そのため、結果をファイルに出力して、移行元・移行先の結果を比較する方法も考えられます。
icacls D:\share /T /C > C:\work\acl_result.txt
これにより、ACLの確認結果をテキストファイルとして保存できます。
さらに、移行元と移行先で同様の結果を取得して比較することで、
「移行したファイルに、想定したアクセス権が設定されているか?」
を機械的に確認できます。
4. Robocopyによる移行との組み合わせ
ファイルサーバー移行では、ファイルのコピーに Robocopy を利用することがあります。
例えば、
robocopy \\old-server\share \\new-server\share /E /COPYALL
のようにコピーした場合、ファイルだけでなく、ACLなどの情報も含めてコピーすることができます。
ただし、「コピーした」ことと「移行先のアクセス権が期待どおりである」ことは別問題です。
そこで、移行後に icacls を使用してACLを取得し、結果を確認します。
icacls \\new-server\share /T /C > C:\work\new_acl.txt
このように、
- Robocopyでファイル・フォルダを移行
- 移行先と移行元でicaclsを実行
- ACLの情報を取得
- 想定したアクセス権になっているか、移行先と移行元での比較確認を機械的に確認
という流れにすると、移行後のアクセス権確認を効率化できます。
特にファイル数が多い環境では、人手で確認するのではなく、icacls の出力を利用して機械的に差分を確認することが重要です。
まとめ
icacls は、Windowsのファイル・フォルダに設定されたACLを確認・変更するためのコマンドです。
今回のようなファイルサーバー移行では、単純にファイルがコピーされているかだけでなく、
「移行先でアクセス権が正しく設定されているか」
を確認するためにも利用できます。
特に、
icacls <対象フォルダ> /T /C
で配下をまとめて確認し、結果をファイルに出力して比較することで、大量のファイルについても機械的なチェックが可能になります。
今回は、業務でWindowsサーバー更改対応を控えているため、確認テストにおける実行コマンドを調査してみました。
今後も、業務で得た知識や業務での経験をもとに、プチ技術を記事にしていけたらと思います。