フォルダー権限を触る前は、「もし壊したら元に戻せるのか」がいちばん不安になりやすいものです。icacls でアクセス権をバックアップ・復元する基本は、先に icacls C:\Target\* /save C:\AclBackup\target-acl.txt /t /c で配下の DACL を保存し、戻すときに icacls C:\Target /restore C:\AclBackup\target-acl.txt /c を実行することです。Microsoft の仕様でも、/save は DACL を ACL ファイルへ保存し、/restore は指定ディレクトリへ保存済み DACL を適用するコマンドです。 (Microsoft Learn)
ただし、ここで扱える中心は DACL です。所有者変更は icacls /setowner が別パラメーターで、Robocopy では S が ACL、O が owner、U が auditing を表し、/copyall がそれらをまとめてコピーします。つまり、icacls は同じフォルダーツリーの権限を退避して戻す用途に向き、移行先へ owner や auditing まで含めて持っていく用途とは切り分けて考えるのが安全です。 (Microsoft Learn)
この記事では、実行前に押さえるべき前提、迷わない基本コマンド、失敗しやすい点、バックアップがないときの戻し方まで、実務で使える形で整理します。
icaclsで何が戻せて、何が戻せないか
icacls が直接触るのは、ファイルやディレクトリに付いている DACL です。まずは守備範囲を切り分けると、途中で「思っていた復元と違う」となりにくくなります。 (Microsoft Learn)
| やりたいこと | icaclsとの相性 | 実務での見方 |
|---|---|---|
| 配下の DACL を保存・復元したい | 向く | /save と /restore の基本用途 |
| 所有者をそのまま戻したい | 向きにくい | /save /restore ではなく /setowner が別扱い |
| 監査情報まで維持したい | 向きにくい | robocopy /copyall の守備範囲 |
| ACL の異常を先に見つけたい | 向く | /verify が使える |
| 継承 ACL に戻したい | 条件付きで可 | /reset は既定の継承 ACL に置き換える |
| ドメイン移行で SID が変わる | 条件付きで可 | /substitute の検討対象 |
/save は DACL 保存、/restore は DACL 再適用、/verify は ACL 異常の確認、/reset は既定の継承 ACL への置き換え、/substitute は SID 置換、/setowner は所有者変更という役割です。owner や auditing まで含めて扱いたい場合は、robocopy の copy flags を使う前提で考えるほうがズレません。 (Microsoft Learn)
まず覚える基本コマンド
実務で最初に覚えるのは、次の 2 行です。
icacls C:\Target\* /save C:\AclBackup\target-acl.txt /t /c
icacls C:\Target /restore C:\AclBackup\target-acl.txt /c
保存時は 対象\*、復元時は 対象フォルダー と覚えると迷いにくいです。公式例も C:\Windows\* /save と C:\Windows\ /restore の形になっていて、/restore は <directory> パラメーターと組み合わせる仕様です。 (Microsoft Learn)
保存先の ACL ファイルは、操作対象フォルダーの外に置いておくほうが管理しやすくなります。ファイル名に日付を入れておくと、戻し先を取り違えにくくなります。
| オプション | 意味 | 使いどころ |
|---|---|---|
/t | 現在のディレクトリとサブディレクトリまで処理する | ツリー全体をまとめて扱いたいとき |
/c | ファイルエラーが出ても処理を継続する | 一部に問題ファイルがあっても全体を止めたくないとき |
/q | 成功メッセージを抑止する | 出力を簡潔にしたいとき |
/l | シンボリックリンクではなくリンクそのものを処理する | リンク先を誤って触りたくないとき |
これらのオプションの意味は公式仕様で明示されています。特に /c は便利ですが、エラーがあっても処理が進むため、実行結果の見落としには注意が必要です。 (Microsoft Learn)
迷わない進め方
変更前に /verify で状態を確認する
icacls C:\Target\* /verify /t /c
/verify は、canonical でない ACL や、ACE 数と長さの不整合がある ACL を見つけるためのオプションです。権限変更前に一度流しておくと、「もともと壊れていた ACL をそのまま保存してしまった」という切り分けがしやすくなります。 (Microsoft Learn)
変更前に /save でバックアップする
icacls C:\Target\* /save C:\AclBackup\target-acl-20260409.txt /t /c
/save は、あとで /restore に使うための ACL ファイルを作ります。権限の一括変更、継承設定の見直し、grant や deny の投入前にこの状態を残しておくと、やり直しがかなり楽になります。 (Microsoft Learn)
問題が出たら /restore で戻す
icacls C:\Target /restore C:\AclBackup\target-acl-20260409.txt /c
/restore は、ACL ファイル内の保存済み DACL を指定ディレクトリ配下へ適用します。仕様上も <directory> パラメーターと組み合わせる前提なので、保存時と同じツリーに対するロールバックで使うのが基本です。保存後にフォルダー構成を大きく変える運用では、先に検証してから本番に入ったほうが安全です。 (Microsoft Learn)
シンボリックリンクがあるなら /l を検討する
シンボリックリンクやジャンクションを含むツリーでは、/l を付けるかどうかを先に決めておくべきです。/l はリンク先ではなくリンクそのものを処理するオプションなので、意図せず実体側まで触ってしまう事故を避けやすくなります。 (Microsoft Learn)
ドメイン移行や SID 変更があるなら /substitute を視野に入れる
別ドメイン移行やアカウント統合のように SID が変わるケースでは、単純な /restore だけで終わらないことがあります。icacls には /substitute <sidold> <sidnew> が用意されており、これは <directory> パラメーターと組み合わせて使う仕様です。 (Microsoft Learn)
失敗しやすいポイント
| 失敗例 | 起きやすい理由 | どう対処するか |
|---|---|---|
| 復元したのに完全に元へ戻らない | /save /restore の中心は DACL で、owner や auditing まで含まない | owner や auditing が必要な作業は最初から別管理にする |
| 一部だけ権限が変わらない | /c 付きだとエラーがあっても処理が進む | 初回検証では /q を外し、エラー出力を確認する |
| リンク先まで影響してしまう | /l を付けずにリンクを含むツリーを触った | リンクそのものを扱うなら /l を使う |
| バックアップなしで元の個別権限を戻したい | /reset は既定の継承 ACL に置き換えるだけ | 元の独自 ACL を正確に戻すには事前バックアップが必要 |
| 別ドメインで権限が合わない | SID が変わっている | /substitute を検討する |
表のポイントはすべて公式仕様に沿っています。特に見落としやすいのは、/reset が「元に戻す」ではなく「既定の継承 ACL に置き換える」動きだという点と、/copyall まで使わない限り owner や auditing は別問題だという点です。 (Microsoft Learn)
もうひとつ見落としやすいのが、保存時と復元時の指定形です。公式例は保存時に C:\Windows\*、復元時に C:\Windows\ なので、ルートフォルダー自体の扱いが重要な運用では、小さな検証用フォルダーで一度結果を確認してから本番に入るほうが安心です。 (Microsoft Learn)
バックアップがないときの戻し方
バックアップがない場合に頼りやすいのは /reset ですが、これは「変更前の独自 ACL を復元する」コマンドではありません。公式仕様では、/reset は一致するファイルの ACL を既定の継承 ACL に置き換える動きです。つまり、親フォルダーの継承状態に戻したい場面には使えますが、以前の細かな明示権限を正確に再現する用途には向きません。 (Microsoft Learn)
icacls C:\Target /reset /t /c
このコマンドは、「独自権限は不要で、親から継承した状態に戻ればよい」というケースでは有効です。逆に、業務アカウントごとの細かな明示 ACL が重要なフォルダーでは、これを“復元”と捉えないほうが安全です。
| 状況 | まず選ぶ手段 | 判断のポイント |
|---|---|---|
| ACL ファイルがある | /restore | 最短で元の DACL に戻しやすい |
| バックアップはないが、親からの継承でよい | /reset | 既定の継承 ACL に置き換える |
| データ移行と権限保持を同時にやりたい | robocopy /copyall | ACL・owner・auditing までまとめて扱える |
| ドメイン移行で SID が変わる | /substitute | 旧 SID を新 SID に置き換える前提で考える |
この切り分けを最初にしておくと、icacls で戻すべきか、robocopy に切り替えるべきかで迷いにくくなります。 (Microsoft Learn)
icaclsよりRobocopyが向くケース
「同じ場所の ACL を戻す」のではなく、「別の場所へデータをコピーしながら権限も維持したい」なら、Robocopy のほうが自然です。Microsoft の仕様では、/sec は security を含めてコピーし、/copyall は DATSOU、つまり data・attributes・timestamps・security・owner・auditing をまとめてコピーします。ファイルサーバー移行やディスク更改では、この違いがそのまま作業方針になります。 (Microsoft Learn)
判断に迷ったら、次のように考えると整理しやすくなります。
| 目的 | まず選ぶコマンド | 理由 |
|---|---|---|
| 権限変更前の保険を作りたい | icacls /save | 同じツリーへ戻す前提に強い |
| 変更後の ACL を元へ戻したい | icacls /restore | 保存済み DACL を再適用できる |
| 継承 ACL に戻したい | icacls /reset | 既定の継承 ACL へ置き換える |
| 別サーバーへコピーしながら権限一式を持っていきたい | robocopy /copyall | ACL・owner・auditing を含めてコピーできる |
この 4 つを区別できるようになると、icacls を無理に使って遠回りする場面が減ります。 (Microsoft Learn)
まとめ
icacls でアクセス権をバックアップ・復元する最短ルートは、変更前に /save、問題発生時に /restore です。ここで戻せる中心は DACL で、バックアップがないときの /reset は既定の継承 ACL に置き換えるだけです。owner や auditing まで必要なら、最初から robocopy /copyall を検討したほうが、後で「戻したのに足りない」を避けやすくなります。 (Microsoft Learn)
次にやることは、検証用フォルダーで save → 変更 → restore を 1 回通し、そのまま本番のパスへ置き換えることです。手順が一度固まれば、icacls での権限変更はかなり安全に進められます。

コメント