icacls コマンドで、”削除” 拒否のアクセス権設定する場合の設定方法と注意点について

こんにちは、Windows プラットフォーム サポート担当の頂です。

今回は、ファイルやフォルダーを削除されないようにするためのアクセス権設定をコマンドから実行する方法についてご紹介いたします。
ファイルやフォルダーを削除されないようにするためには、フォルダーやファイルの [プロパティ] の [セキュリティ] タブから、削除を拒否するためのアクセス権設定を変更することでできますが、今回は、同様の設定を icacls コマンドを使用して行う場合の手順と注意点について、ご紹介いたします。

icacls コマンドとは
----------------------------------------------------
フォルダーやファイルのアクセス権について設定へ変更などを行う事ができるコマンドです。
Windows Server 2003 SP2 で提供され、Windows Vista ( Windows Server 2008 ) 以降では、標準のコマンドとして実装されました。

- 設定方法
まずは、ファイルやフォルダーについて、削除や読み取りなどを拒否する場合に利用できる、”拒否” のアクセス権を設定するコマンドについてご紹介いたします。

“拒否” のアクセス権を設定する際のコマンド基本型
--------------------------
icacls "<対象のファイルまたはフォルダーのパス>" /deny "<ユーザー名>":(拒否対象の権限)

ファイルやフォルダーについて、削除させないようにするために、"削除 (DELETE)" の権限を拒否に設定する場合には以下コマンドを利用します。

"削除 (DELETE)" の権限を拒否に設定する場合のコマンド
--------------------------
ファイルやフォルダーを削除されないように、"削除 (DELETE)" の権限を拒否に設定する場合には、“(拒否対象の権限)” 設定を必ず、(DE) と設定します。

icacls "<ファイルまたはフォルダーのパス>" /deny <ユーザー名>:(DE)

コマンド例図

  - 注意点
icacls コマンドのヘルプでは、"D -削除のアクセス権" と記載されておりますが、下記コマンド例のように、"削除 (DELETE)" の権限を拒否設定する場合に、(D) を使用すると、/deny <ユーザー名> に指定したユーザーが、コマンド実行対象のファイルやフォルダーにアクセスできなくなります。
これは、“(拒否対象の権限)” に (D) を指定することで、"削除 (DELETE)" の権限だけで無く、"同期 (SYNCHRONIZE)" の権限も拒否されることによる動作となります。

コマンド例
icacls "<ファイルまたはフォルダーのパス>" /deny <ユーザー名>:(D)

"同期 (SYNCHRONIZE)" の権限が拒否された場合には、以下手順でファイルやフォルダーにアクセス出来なくなります。

・ コンピューターにログオンした状態で、フォルダーやファイルにアクセスする。
・ SMB2 を利用したネットワーク経由でフォルダーやファイルにアクセスする。

現在設定されているアクセス権を確認する場合にも、icacls コマンドは利用できますが、コマンド プロンプト上には、"同期 (SYNCHRONIZE)" の権限は表示されないため、 /Save オプションを利用して、ファイルへSDDL形式での出力、もしくは PowerShell の Get-Acl コマンドレッド での確認が必要となります。
そのため、ファイルへの出力をせずに、アクセス権の確認が必要な場合には、PowerShell の Get-Acl コマンドレッドをご利用ください。

PowerShell Get-Acl コマンドレッドの実行結果

icacls "<ファイルまたはフォルダーのパス>" /deny <ユーザー名>:(D) コマンドを利用した場合には、"同期 (SYNCHRONIZE)" の権限が、DENY (拒否のアクセス権) に、設定されていることを確認できます。

  

なお、icacls コマンドのオプション設定により、アクセスが拒否される動作については、以下技術文書で公開いたしております。

文書番号: 2784859
icacls コマンドで、オブジェクトに削除拒否の設定を行うと、リモートからの接続時にアクセスが拒否されることがあります
https://support.microsoft.com/kb/2784859/ja

- 参考情報

Windows Server 2008 のアクセス制御の新機能
https://technet.microsoft.com/ja-jp/library/cc731677(v=WS.10).aspx

Get-Acl コマンドレットの使用
https://technet.microsoft.com/ja-jp/library/ee176838.aspx