Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

iCACLSコマンドでNTFSアクセス許可を表示・設定・バックアップ・復元する完全ガイド

Windowsには、NTFSアクセス許可を管理するための標準ツールiCACLSが組み込まれています。コマンドラインツールicacls.exeを使うことで、NTFSファイルシステム上のファイルやフォルダのアクセス制御リスト(ACL)を取得・変更できます。本記事では、iCACLSを使ってWindows上のNTFSアクセス許可を効率的に管理するための実用的なコマンドを詳しく解説します。

iCACLSでファイル・フォルダのアクセス許可を表示・設定する

NTFSボリューム上の任意のオブジェクトに対する現在のアクセス許可は、以下のコマンドで確認できます。

icacls 'C:\Share\Veteran\'

このコマンドを実行すると、アクセス許可が割り当てられているユーザーとグループの一覧が表示されます。アクセス許可は以下の略称で表されます。

  • F – フルアクセス(完全な制御)
  • M – 変更アクセス
  • RX – 読み取りと実行
  • R – 読み取り専用
  • W – 書き込み専用
  • D – 削除

継承フラグはアクセス許可の前に表示されます(継承フラグはフォルダにのみ適用されます)。

  • (OI) – オブジェクトの継承(Object Inherit)
  • (CI) – コンテナの継承(Container Inherit)
  • (IO) – 継承のみ(Inherit Only)
  • (I) – 親コンテナからアクセス許可を継承していることを示す

icaclsを使えば、フォルダのアクセス許可を変更することもできます。

例えば、「resource\mun-fs01_Auditors」グループにフォルダへの読み取りと実行(RX)権限を付与するには、次のコマンドを使用します。

icacls 'C:\Share\Veteran\' /grant resource\mun-fs01_Auditors:RX

ディレクトリのACLから特定のグループを削除する場合は、以下のようにします。

icacls 'C:\Share\Veteran\' /remove resource\mun-fs01_Auditors

また、親フォルダからのNTFSアクセス許可の継承を有効にすることも可能です。

icacls 'C:\Share\Veteran\' /inheritance:e

逆に、継承されたすべてのACE(アクセス制御エントリ)を削除して継承を無効化するには、次のコマンドを実行します。

icacls 'C:\Share\Veteran\' /inheritance:r

さらに、icacls.exeを使ってファイルやフォルダの所有者を変更することもできます。

icacls 'C:\Share\Veteran\' /setowner resource\j.smith /T /C /L /Q

NTFSアクセス許可をバックアップ(エクスポート)する方法

NTFSフォルダ(またはネットワーク共有フォルダ)に対して大きな変更を行う前(移動、ACLの更新、リソースの移行など)には、事前に既存のアクセス許可をバックアップしておくことをおすすめします。バックアップがあれば、元の設定に戻したり、特定のファイルやディレクトリの旧アクセス許可を確認したりできます。

icacls.exeツールを使えば、現在のNTFSディレクトリアクセス許可をエクスポート/インポートできます。特定のフォルダ(サブディレクトリとファイルを含む)のすべてのACLを取得し、テキストファイルに出力するには、次のコマンドを実行します。

icacls g:\veteran /save c:\backup\veteran_ntfs_perms.txt /t /c

ポイント: /tオプションはすべてのサブディレクトリとファイルのACLを取得するために使用し、/cオプションはアクセスエラーを無視して処理を続行します。/qオプションを追加すると、成功したオブジェクトに関する情報表示を無効化できます。

ファイルやフォルダの数によっては、エクスポートにかなりの時間がかかる場合があります。コマンドの実行後、成功または失敗したファイル数の統計が表示されます。

Successfully processed 3001 files; Failed processing 0 files

出力されたveteran_ntfs_perms.txtファイルをテキストエディタで開くと、ディレクトリ内の全ファイルとフォルダの一覧が含まれており、各項目にSDDL(Security Descriptor Definition Language)形式で現在のアクセス許可が記録されていることがわかります。

例えば、フォルダのルートに対する現在のNTFSアクセス許可は次のようになっています。

D:PAI(A;OICI;FA;;;BA)(A;OICIIO;FA;;;CO)(A;OICI;0x1200a9;;;S-1-5-21-2340243621-32346796122-2349433313-23777994)(A;OICI;0x1301bf;;;S-1-5-21-2340243621-32346796122-2349433313-23777993)(A;OICI;FA;;;SY)(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)S:AI

この文字列は、特定のグループやユーザーに対するアクセス権を記述しています。SDDL構文の詳細な説明は省略しますが、1つのオブジェクトだけを抜き出して見てみましょう。

(A;OICI;FA;;;S-1-5-21-2340243621-32346796122-2349433313-24109193)

A – アクセスの種類(Allow=許可)

OICI – 継承フラグ(OBJECT INHERIT + CONTAINER INHERIT)

FA – アクセス許可の種類(SDDL_FILE_ALL – すべて許可)

S-1-5-21-2340243621-32346796122-2349433313-24109193 – アクセス許可が設定されているアカウントまたはドメイングループのSID。SIDをアカウント名やグループ名に変換するには、次のPowerShellコマンドを使用します。

$objSID = New-Object System.Security.Principal.SecurityIdentifier ("S-1-5-21-2340243621-32346796122-2349433313-24109193")
$objUser = $objSID.Translate( [System.Security.Principal.NTAccount])
$objUser.Value

または、以下のコマンドのいずれかを使用しても構いません。
Get-ADUser -Identity SID
または
Get-ADGroup -Identity SID

これにより、ユーザーcorp\dvivarがこのディレクトリに対してフルコントロール権限を持っていたことが判明しました。

iCaclsでNTFSアクセス許可を復元する方法

事前に作成しておいたveteran_ntfs_perms.txtファイルを使えば、フォルダのNTFSアクセス許可を復元できます。バックアップファイルの値に従ってディレクトリ内のオブジェクトにNTFSアクセス許可を設定するには、次のコマンドを実行します。

icacls g:\ /restore c:\backup\veteran_ntfs_perms.txt /t /c

注意: ファイルからアクセス許可をインポートする際は、フォルダ名ではなく親ディレクトリへのパスを指定する必要がある点にご注意ください。

すべてのアクセス許可が復元されると、処理されたファイル数の統計も表示されます。

なお、バックアップACLファイルには絶対パスではなく相対パスが記録されています。つまり、フォルダを別のドライブやディレクトリに移動した後でも、アクセス許可を復元できるということです。

NTFSアクセス許可をデフォルト状態にリセットする

icaclsツールを使えば、フォルダ(およびネストされたファイルやサブディレクトリ)のアクセス許可をリセットできます。

icacls C:\share\veteran /reset /T /Q /C

このコマンドを実行すると、指定したオブジェクトに対して親からのNTFSアクセス許可の継承が有効になり、それ以外のACLはすべて削除されます。

あるフォルダから別のフォルダへNTFSアクセス許可をコピーする

ACLバックアップ用テキストファイルを利用すれば、あるディレクトリから別のディレクトリへNTFSアクセス許可をコピーできます。

まず、コピー元フォルダのNTFSアクセス許可をバックアップします。

icacls 'C:\Share\Veteran' /save C:\PS\save_ntfs_perms.txt /c

次に、保存したACLをコピー先フォルダに適用します。

icacls D:\Share /restore C:\PS\save_ntfs_perms.txt /c

この方法は、コピー元とコピー先のフォルダ名が同じである場合に機能します。では、コピー先のフォルダ名が異なる場合はどうすればよいのでしょうか? 例えば、D:\PublicDOCSフォルダにNTFSアクセス許可をコピーしたいケースを考えてみます。

最も簡単な方法は、save_ntfs_perms.txtファイルをメモ帳で開き、フォルダ名を編集することです。「置換」機能を使って、Veteranという名前をPublicDOCSに置き換えます。

その後、ファイルからNTFSアクセス許可をインポートし、コピー先フォルダに適用します。

icacls D:\ /restore C:\PS\save_ntfs_perms.txt /c

さらに、PowerShellを使えば、フォルダ間でNTFSアクセス許可をより簡単にコピーできます。

Get-Acl -Path 'C:\Share\Veteran' | Set-Acl -Path 'E:\PublicDOCS'

  1. Microsoft Edgeでパスワードをインポート・エクスポートする方法を徹底解説

    Microsoftの最新ニュースをチェックしている方なら、同社がMicrosoft Edgeをブラウザー市場の強力なライバルへと育て上げることに力を注いでいることをご存じでしょう。新しくなったEdgeを試してみたいけれど、これまで使ってきたパスワードを引き継げないのが不安——そんな方も多いはずです。実は、Edgeでは既存のパスワードを簡単にインポートできます。さらに、もし新しいEdgeが気に入らなければ、パスワードをエクスポートして元のブラウザーへ戻すことも可能です。この記事では、Microsoft Edgeを使ったパスワードのインポートとエクスポートの手順を、初心者の方にもわかりやすく解説

  2. PowerShellでドライバーを一括エクスポートする方法【Windows 10】

    PowerShellをご存じでしょうか?PowerShellは、Windowsのシステム管理のために設計されたコマンドラインシェルおよびスクリプト言語です。Windows 10には最新バージョンであるPowerShell 5.0が標準搭載されており、ハードディスクのパーティション分割やシステムイメージの作成など、非常に便利な操作を実行できる強力なツールです。 この記事では、PowerShellの具体的な活用例として、「システムにインストールされているすべてのドライバーを外部のUSBメモリやDVDなどにエクスポート(書き出し)する方法」をご紹介します。この方法を使えば、システム上の全ドライバーを