icaclsでアクセス権をバックアップ・復元する方法|基本コマンド、戻し方、失敗しやすい点まで解説

フォルダー権限を触る前は、「もし壊したら元に戻せるのか」がいちばん不安になりやすいものです。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 /copyallACL・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 /copyallACL・owner・auditing を含めてコピーできる

この 4 つを区別できるようになると、icacls を無理に使って遠回りする場面が減ります。 (Microsoft Learn)

まとめ

icacls でアクセス権をバックアップ・復元する最短ルートは、変更前に /save、問題発生時に /restore です。ここで戻せる中心は DACL で、バックアップがないときの /reset は既定の継承 ACL に置き換えるだけです。owner や auditing まで必要なら、最初から robocopy /copyall を検討したほうが、後で「戻したのに足りない」を避けやすくなります。 (Microsoft Learn)

次にやることは、検証用フォルダーで save → 変更 → restore を 1 回通し、そのまま本番のパスへ置き換えることです。手順が一度固まれば、icacls での権限変更はかなり安全に進められます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次