コマンドプロンプトで権限を確認する方法|whoami・icaclsと一覧出力

結論:対象ファイル/フォルダーに設定されたDACLはicacls "C:\Data"、現在のコマンドプロンプトを動かすユーザーとトークンの情報はwhoami /allで確認します。調べたい「権限」がどちらかを先に決めてください。ファイルの許可を変更する場合は、以下の/saveによる退避と/grant、継承の意味を確認し、テスト用フォルダーから始めます。

目次

コマンドプロンプトの「権限確認」は、ユーザーとファイルを分ける

確認したいことコマンド結果の意味
今のcmdを実行するユーザー/SIDwhoami /user別ユーザーとして起動した場合も、現在の実行者を確認
現在のトークンのグループと特権whoami /all(または/groups、/priv)現在のプロセスで使うトークン情報。全フォルダーへの許可一覧ではない
対象ファイル/フォルダーに設定されたDACLicacls “対象パス”その対象の許可/拒否と継承情報。特定ユーザーの全アクセス可否計算ではない
whoami /user
whoami /groups
whoami /priv
whoami /all

whoamiの公式仕様に従い、必要な情報を選んで確認します。/userは実行ユーザー名とSID、/groupsはグループ、/privは特権、/allは現在のアクセストークンの情報です。名前がAdministratorだったりAdministratorsに所属していたりすることだけで、今のcmdが昇格済みとは判断しません。

MicrosoftのUACの説明では、管理者にも標準ユーザー用と管理者用のトークンがあり、通常のアプリは標準ユーザーのコンテキストで動作します。必要な操作のために管理者として開いたcmdと通常のcmdでは、実行ユーザーやグループ/特権の状態が違うことがあります。特権一覧のDisabledも、ファイルへのアクセスが全面的に禁止という意味ではありません。

まず現在の実行ユーザーと対象パスを確定し、読み取り確認から進めます。DACLの表示と現在のトークン情報は別の確認結果として保存してください。ユーザー名、SID、組織のグループ名を含むため、共有時は必要な範囲に限定します。

最初に確認するポイント

症状・条件主な原因最初の確認
icaclsの結果に(I)(OI)(CI)(F)などが並び、意味が分からない権限本体と継承フラグが同じ行に表示されています。(I)は親から継承、(OI)は子ファイル、(CI)は子フォルダへの継承指定、Fはフルコントロールとして分けて読みます。
権限を付けたのにサブフォルダやファイルへ反映されない対象フォルダだけに権限を付け、子要素向けの(OI)(CI)または既存項目への再帰処理を指定していない可能性があります。親フォルダのACEに(OI)(CI)があるか、既存の子要素が継承を有効にしているかを確認します。
管理者として実行しても「アクセスが拒否されました」と表示される昇格だけでは対象のDACL、所有権、組織ポリシー、ファイル使用中などの制約を必ずしも回避できません。対象パス、現在の所有者、明示的な拒否ACE、親からの継承、ファイルを使用中のプロセスを確認します。
設定後にアプリやサービスが起動しなくなった/reset、/remove、継承解除、または再帰指定により、必要なサービスアカウントのACEまで変更した可能性があります。変更を止め、事前に保存したACLと変更対象一覧を確認します。システム領域なら自己判断で追加変更せず、復旧手順へ切り替えます。

安全な対処手順

1. 対象と実行環境を確認する

Windows 11 22H2以降では、コマンドプロンプトを起動してもWindows Terminal内に表示されるのが標準です。これはコマンドが廃止されたという意味ではありません。読み取りだけなら通常権限で始め、変更時に必要な場合だけ[管理者として実行]を使います。パスとアカウント名を確定し、空白を含むパスは必ず引用符で囲みます。

  1. スタートで「cmd」を検索するか、Windows Terminalで[コマンド プロンプト]プロファイルを開きます。
  2. 対象はテスト用フォルダで先に確認します。
  3. 個人ユーザーよりも、管理されたセキュリティグループへ権限を付ける方が運用しやすい場合があります。
whoami
icacls "C:\Data"

注意:管理者として実行しても、所有権やDACLを自動的に無視できるわけではありません。

2. 現在のACLを読み解く

icaclsの結果では、Fがフルコントロール、Mが変更、RXが読み取りと実行、Rが読み取り、Wが書き込み、Dが削除です。(I)は親から継承されたACE、(OI)は子ファイル、(CI)は子フォルダーへ継承する指定です。公式のACE順序は明示的な拒否、明示的な許可、継承された拒否、継承された許可です。ユーザー自身に加えて該当グループのACEも確認し、許可行を1行見ただけで実際のアクセス可否を断定しないでください。

  1. 権限記号と継承記号を別々に読みます。
  2. ユーザー名だけでなくSIDでも指定できます。数値SIDは先頭にアスタリスクを付けます。
  3. 共有フォルダではNTFS権限に加えて共有権限も確認します。
icacls "C:\Data"
icacls "C:\Data" /verify

注意:Fを安易に付けると、削除や権限変更まで許可します。通常はR、RX、Mのどれで足りるかを先に検討してください。

アクセス権の一覧をテキストへ出力する場合

一覧を読み返したい場合は、コマンドプロンプトの出力をファイルへ保存できます。次はC:\Data配下のDACLを表示し、結果を保存する例です。C:\AclReportsは事前に作成済みで、対象ツリー外の書き込めるフォルダーにしてください。対象範囲が広いほど時間がかかるため、まず小さいフォルダーで確認します。

icacls "C:\Data" /t /c > "C:\AclReports\Data-acl-list.txt"

cmdの出力リダイレクトの>は、同名ファイルがあれば上書きします。新しい名前を選び、実行後は保存結果と画面のエラー、処理/失敗件数を確認してください。icaclsの/cはエラーがあっても続行する指定で、出力ファイルができたことだけで全件取得できたとは判断しません。読み取れなかったパスを残し、必要な確認権限を持つ管理者へ相談します。

このテキストは、人が読む表示結果です。以下の/saveによる復元用DACLファイルと役割が違い、/restoreへそのまま渡すファイルではありません。また、ユーザー/グループごとの実効アクセス一覧やCSVへ自動変換したものでもありません。

ファイルサーバーの共有経由の確認では、保存したDACLだけでSMB共有側の許可まで一覧にしたとは判断しません。Get-SmbShareAccessの公式資料は共有自体のACLを取得する別のPowerShellコマンドです。サーバー側の管理者が共有名、NTFS側の設定、実際に接続するユーザーを照合してください。

3. 変更前にACLを保存する

再帰変更を行う前に、対象配下のDACLをファイルへ保存します。保存先は対象フォルダの外に置き、変更日時、対象パス、実行者も記録してください。/c を付けると一部でエラーが出ても処理を続けるため、終了後にエラー行を必ず確認します。

  1. バックアップ先フォルダを事前に作成します。
  2. 保存ファイルを対象ツリーの外に置きます。
  3. 本番変更前に復元コマンドをテスト用コピーで確認します。
icacls "C:\Data\*" /save "C:\AclBackup\Data-acl.txt" /t /c
icacls "C:\Data" /restore "C:\AclBackup\Data-acl.txt" /c

注意:/save が保存するのはDACLです。データ本体のバックアップや、すべてのセキュリティ情報を置き換えるものではありません。

4. 必要最小限の許可を付与または置換する

新しい明示的な許可を追加する場合は /grant、同じSIDの既存の明示的な許可を置き換える場合だけ /grant:r を使います。フォルダ自体と配下のファイル・サブフォルダに継承させる例では (OI)(CI) を付けます。実行後は、対象ユーザーで読み取り・作成・更新・削除のどこまで可能かを実地確認してください。

  1. 閲覧だけならRXまたはRを検討します。
  2. ファイルの作成・変更・削除が必要ならMを検討します。
  3. Fは所有権やACL変更まで含むため、管理者用途以外では慎重にします。
  4. /grant:r は明示的な許可を置き換えますが、明示的な拒否や継承ACEまで消す操作ではありません。
icacls "C:\Data" /grant "CONTOSO\User1:(OI)(CI)M"
icacls "C:\Data" /grant:r "CONTOSO\User1:(OI)(CI)RX"
icacls "C:\Data"

注意:ここではコマンドプロンプトでの例を示しています。/grantの引数は、アカウントと:(OI)(CI)権限まで全体を引用符で囲み、括弧をシェルの構文と混同しないようにしています。cmdの特殊文字と引用符の説明も確認してください。

5. 削除と継承設定は意味を確認してから行う

許可ACEだけを外すなら /remove:g、拒否ACEだけを外すなら /remove:d を使えます。継承は /inheritancelevel:e で有効、d で無効化しつつ継承ACEを明示ACEとしてコピー、r で継承を無効化して継承ACEを削除します。r はリセットではありません。結果が大きく変わるため、対象フォルダ単位で確認しながら進めます。

  1. 削除前に、そのSIDがサービスや共有アクセスに使われていないか確認します。
  2. 継承を無効にする必要が本当にあるかを見直します。
  3. 再帰指定 /t は対象件数を把握した後だけ使います。
icacls "C:\Data" /remove:g "CONTOSO\User1"
icacls "C:\Data" /inheritancelevel:e
icacls "C:\Data" /inheritancelevel:d

注意:/inheritancelevel:r、/reset /t、/deny はアクセス不能を生みやすい操作です。C:\Windows、C:\Program Files、ユーザープロファイルのルート、本番共有へ例示どおり実行しないでください。

よくある質問

icaclsは管理者として実行しないと使えませんか?

表示だけなら、現在のユーザーがACLを読み取れる範囲で通常権限でも使えます。変更には対象の権限を変更できる権利が必要です。管理者として実行すると可能になる場合はありますが、所有権、明示的な拒否、組織ポリシーなどにより拒否されることもあります。

/grantと/grant:rの違いは何ですか?

/grant は指定SIDの明示的な許可へ権限を追加し、/grant:r はそのSIDに対する既存の明示的な許可を指定内容で置き換えます。どちらも明示的な拒否や親から継承されたACEを自動的に消す操作ではありません。変更後は必ずicaclsで結果を読み直してください。

/inheritancelevel:rは権限を初期状態へ戻すコマンドですか?

いいえ。r は継承を無効にし、継承されたACEだけを削除します。結果として必要なアクセス権まで消える可能性があります。継承を有効に戻すなら e、継承ACEを明示ACEとして残して無効化するなら d です。

公式情報

画面や仕様が異なる場合は、利用中の製品・契約・管理ポリシーを確認したうえで公式情報を参照してください。

まとめ

原因を一つずつ切り分け、変更前の状態と結果を記録しながら進めることが重要です。操作後は同じ症状が再発しないか確認し、組織管理の端末ではポリシー変更を管理者へ確認してください。

既存記事から引き継いだ画面例

画面はWindowsやアプリの更新で変わることがあります。名称が異なる場合は、前述の現行手順を優先してください。

Windowsのコマンドプロンプトでアクセス権限を表示・管理する方法 手順画面 1
旧画面の例です。現行UIは本文の手順を優先してください。
Windowsのコマンドプロンプトでアクセス権限を表示・管理する方法 手順画面 2
旧画面の例です。現行UIは本文の手順を優先してください。
Windowsのコマンドプロンプトでアクセス権限を表示・管理する方法 手順画面 3
旧画面の例です。現行UIは本文の手順を優先してください。
Windowsのコマンドプロンプトでアクセス権限を表示・管理する方法 手順画面 4
旧画面の例です。現行UIは本文の手順を優先してください。
Windowsのコマンドプロンプトでアクセス権限を表示・管理する方法 手順画面 5
旧画面の例です。現行UIは本文の手順を優先してください。
Windowsのコマンドプロンプトでアクセス権限を表示・管理する方法 手順画面 6
旧画面の例です。現行UIは本文の手順を優先してください。

関連コンテンツ

この記事を書いた人

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

コメント

コメントする

目次