Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 電腦軟體介紹

CMD 修改檔案/資料夾存取控制權限 (Cacls/Xcacls/ICacls 完整教學)

編輯:電腦軟體介紹

命令列掌控 NTFS 權限:從 Cacls 到 ICacls 的進化與實戰

圖形介面 (右鍵屬性→安全性) 設定權限直觀但效率低、難以批次/自動化。命令列工具 **Cacls** (舊)、**Xcacls** (資源工具包增強版)、**ICacls** (Vista/Win 7+ 內建現代標準) 能在腳本、遠端管理、無人值守安裝、權限修復中發揮不可替代的作用。本文系統講解三代工具語法、參數、實戰範例與避坑指南。

前置條件

  • **檔案系統必須為 NTFS**。FAT32/exFAT 不支援 ACL (存取控制清單)。
  • 需 **管理員權限** 執行命令提示字元 (CMD) 或 PowerShell。
  • 理解權限代碼:
    `F`=完全控制、`M`=修改、`RX`=讀取與執行、`R`=唯讀、`W`=寫入、`D`=刪除、`S`=同步、`N`=無權限 (僅 ICacls/Xcacls)。
  • 繼承旗標 (僅 ICacls/Xcacls):
    • `(OI)` 物件繼承 (檔案繼承)
    • `(CI)` 容器繼承 (資料夾繼承)
    • `(IO)` 僅繼承 (不套用至當前物件)
    • `(NP)` 不傳播繼承

一、 Cacls.exe (Windows 2000/XP/2003 時代遺產,現仍相容)

語法: `CACLS 檔案/資料夾路徑 [/T] [/E] [/C] [/G 使用者:權限] [/R 使用者...] [/P 使用者:權限...] [/D 使用者...]`

參數說明
(無參數)顯示指定路徑 ACL
/T遞歸處理目前目錄及所有子目錄/檔案
/E編輯 ACL (而非替換),**保留現有 ACE**
/C遇到「拒絕存取」錯誤繼續處理下一個
/G 用戶:權限授予指定使用者權限 (權限: R/W/C/F)
/R 用戶撤銷指定使用者存取權限 (**需配合 /E**)
/P 用戶:權限替換指定使用者權限 (權限含 N=無)
/D 用戶明確拒絕指定使用者存取 (產生 Deny ACE)

實戰範例

# 1. 查看權限
cacls C:\Data

# 2. 遞歸授予 Users 群組 讀取/執行 權限 (編輯模式,保留原有)
cacls C:\Data /T /E /C /G Users:R

# 3. 遞歸授予 Administrators 完全控制
cacls C:\Data /T /E /C /G Administrators:F

# 4. 撤銷 User1 的權限 (需 /E)
cacls C:\Data /T /E /C /R User1

# 5. 明確拒絕 Guest 存取
cacls C:\Data /T /E /C /D Guest

# 6. 批次處理系統關鍵檔案 (需極度謹慎!)
cacls.exe C:\Windows\System32\net.exe /C /E /T /G Administrators:F
cacls.exe C:\Windows\System32\dllcache\net.exe /C /E /T /G Administrators:F
# ... 類似操作給 SYSTEM、Administrator、Everyone 完全控制 (風險極高,僅修復權限損壞時使用)

Cacls 缺點

  • 不支援繼承旗標控制 (無法精確設定「僅此資料夾」、「此資料夾及子資料夾」、「此資料夾、子資料夾及檔案」等繼承模式)。
  • 修改權限時預設提示確認 (Y/N),難以在批次檔中靜默執行 (無 `/Y` 參數)。
  • 無法設定「修改 (M)」權限 (只有 R/W/C/F)。
  • 處理長路徑/特殊字元檔名易出錯。

二、 Xcacls.exe (Windows 2000 Resource Kit 增強版,需額外下載安裝)

微軟官方增強工具,功能接近 ICacls,但部署麻煩 (需安裝 Resource Kit 或單獨複製 exe),現已被 ICacls 取代。**了解即可,實戰建議直接用 ICacls。**

關鍵增強: 支援 `/Y` (抑制確認提示,適合批次)、`/G` 含 `S` (特殊/自訂權限)、繼承旗標控制 (CI/OI/IO/NP)。

三、 ICacls.exe (Windows Vista/Server 2008 至今內建標準,**強烈推薦主力工具**)

語法: `ICACLS 路徑 [/grant[:r] 用戶:權限] [/deny 用戶:權限] [/remove[:g|:d] 用戶] [/setintegritylevel Level] [/inheritance:e|d|r] [/T] [/C] [/L] [/Q]`

核心參數詳解

參數說明
/grant 用戶:權限授予權限 (保留現有 ACE)。權限可用簡寫 (F,M,RX,R,W,D) 或具體存取權 (OI)(CI)F
/grant:r 用戶:權限**替換**該用戶現有 ACE (而非新增)
/deny 用戶:權限明確拒絕權限 (產生 Deny ACE,優先級最高)
/remove 用戶移除該用戶所有 ACE (Allow+Deny)
/remove:g 用戶僅移除 Allow ACE
/remove:d 用戶僅移除 Deny ACE
/T遞歸處理子目錄/檔案
/C繼續處理錯誤 (忽略拒絕存取)
/Q安靜模式 (不顯示成功訊息)
/L對符號連結本身操作而非目標
/inheritance:e|d|re=啟用繼承、d=停用繼承並複製現有 ACE、r=移除所有繼承 ACE

權限表示法 (ACE 權限字串)

  • **簡寫權限:** `F`(完全控制) `M`(修改) `RX`(讀取和執行) `R`(讀取) `W`(寫入) `D`(刪除) `S`(同步) `N`(無權限/僅用於 /remove? 實際 N 用於 /grant 表示無權限)
  • **詳細權限 (可組合):** `DE`(刪除) `RC`(讀取控制) `WDAC`(寫入 DACL) `WO`(寫入擁有者) `S`(同步) `AS`(存取系統安全性) `MA`(最大允許) `GR`(一般讀取) `GW`(一般寫入) `GE`(一般執行) `GA`(一般所有) `RD`(讀取資料/列出目錄) `AD`(附加資料/建立檔案) `WD`(寫入資料/建立檔案) `EA`(擴充屬性) `RA`(讀取屬性) `WA`(寫入屬性) `X`(執行/周遊) `DC`(刪除子項) `KA`(最大允許? 實際為 0x100000)
  • **繼承旗標 (加在權限前,括號內):** `(OI)` `(CI)` `(IO)` `(NP)`。
    例:`(OI)(CI)F` = 此資料夾、子資料夾、檔案 完全控制 (完全繼承)。
    `(CI)F` = 此資料夾、子資料夾 完全控制 (檔案不繼承)。
    `(OI)F` = 此資料夾、檔案 完全控制 (子資料夾不繼承)。

黃金實戰範例集

# 1. 查看完整 ACL (含繼承旗標)
icacls C:\Data

# 2. 遞歸授予 "Users" 群組 "讀取和執行" (此資料夾、子資料夾、檔案繼承)
icacls C:\Data /grant Users:(OI)(CI)RX /T /C /Q

# 3. 遞歸授予 "Administrators" 完全控制 (替換現有 ACE,確保乾淨)
icacls C:\Data /grant:r Administrators:(OI)(CI)F /T /C /Q

# 4. 遞歸授予 "SYSTEM" 完全控制
icacls C:\Data /grant:r SYSTEM:(OI)(CI)F /T /C /Q

# 5. 明確拒絕 "Guest" 所有存取
icacls C:\Data /deny Guest:(OI)(CI)F /T /C /Q

# 6. 移除 "OldUser" 所有 ACE (Allow+Deny)
icacls C:\Data /remove OldUser /T /C /Q

# 7. 停用繼承並複製現有 ACE 為顯性 ACE (斷開繼承鏈,獨立管理)
icacls C:\Data /inheritance:d /T /C /Q

# 8. 啟用繼承 (移除所有顯性 ACE,恢復從父系繼承)
icacls C:\Data /inheritance:e /T /C /Q

# 9. 移除所有繼承 ACE (保留顯性 ACE,斷開繼承)
icacls C:\Data /inheritance:r /T /C /Q

# 10. 取得擁有權 (配合 takeown)
takeown /F C:\Data /R /D Y
icacls C:\Data /grant Administrators:(OI)(CI)F /T /C /Q

# 11. 重設為預設權限 (系統預設繼承 + 明確 ACE)
icacls C:\Data /reset /T /C /Q

# 12. 備份/還原 ACL (極其實用!)
icacls C:\Data /save ACL_Backup.txt /T /C   # 備份至文字檔
icacls C:\Data /restore ACL_Backup.txt       # 還原 (需相同路徑結構)

四、 進階場景與最佳實踐

1. 修復系統檔案/資料夾權限損壞 (如 Windows Update 失敗、程式無法啟動)


# 以管理員身分執行
icacls C:\Windows /reset /T /C /Q
icacls C:\Program Files /reset /T /C /Q
icacls C:\Program Files (x86) /reset /T /C /Q
icacls C:\Users /reset /T /C /Q
# 配合 sfc /scannow、DISM 修復更完整

2. 共享資料夾精細權限設定 (資料夾層級權限)


# 需求: 共享資料夾 D:\Share
# Administrators: 完全控制
# BackupOperators: 修改 (讀寫刪)
# Users: 讀取和執行 (唯讀)
# Guest: 拒絕存取

icacls D:\Share /grant:r Administrators:(OI)(CI)F /T /C /Q
icacls D:\Share /grant:r "Backup Operators":(OI)(CI)M /T /C /Q
icacls D:\Share /grant:r Users:(OI)(CI)RX /T /C /Q
icacls D:\Share /deny Guest:(OI)(CI)F /T /C /Q
# 停用繼承並複製 (確保不受父系干擾)
icacls D:\Share /inheritance:d /T /C /Q

3. 批次檔/腳本自動化部署權限


@echo off
set TARGET=D:\AppData
set LOG=%TARGET%\ACL_Set.log

echo [%(date%) %(time%)] Starting ACL configuration... > %LOG%
takeown /F %TARGET% /R /D Y >> %LOG% 2>&1
icacls %TARGET% /grant:r Administrators:(OI)(CI)F /T /C /Q >> %LOG% 2>&1
icacls %TARGET% /grant:r SYSTEM:(OI)(CI)F /T /C /Q >> %LOG% 2>&1
icacls %TARGET% /grant:r Users:(OI)(CI)RX /T /C /Q >> %LOG% 2>&1
icacls %TARGET% /inheritance:d /T /C /Q >> %LOG% 2>&1
echo [%(date%) %(time%)] Completed. >> %LOG%

4. 處理「拒絕存取」頑固檔案/資料夾

  1. 先 `takeown /F 路徑 /R /D Y` 取得擁有權。
  2. 再 `icacls 路徑 /grant Administrators:(OI)(CI)F /T /C /Q` 授予完全控制。
  3. 若仍失敗,檢查是否被進程鎖定 (用 Resource Monitor/Handle.exe/Unlocker 釋放)、或檔案系統錯誤 (`chkdsk /f`)、或位於受保護系統目錄 (需 TrustedInstaller 權限,極不建議強行修改)。

五、 PowerShell 替代方案 (物件導向、功能更強)

現代管理首選 PowerShell `Get-Acl`、`Set-Acl`、`icacls` 仍可在 PS 中直接呼叫。


# 取得 ACL 物件
$acl = Get-Acl C:\Data

# 定義新規則 (允許 Users 讀取執行,繼承)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users","ReadAndExecute","ContainerInherit,ObjectInherit","None","Allow")
$acl.AddAccessRule($rule)

# 套用
Set-Acl C:\Data $acl

# 移除規則
$acl.RemoveAccessRule($rule)
Set-Acl C:\Data $acl

六、 避坑指南與安全警示

  • 絕不對 C:\Windows、C:\Program Files、C:\Users\Default 等系統關鍵目錄進行大規模權限重設 (/reset 除外),極易導致系統服務啟動失敗、更新中斷、安全機制失效。
  • Deny (拒絕) ACE 優先級高於 Allow,濫用 `/deny` 會導致連 Administrators 也無法存取,修復極其麻煩。原則:**寧用移除權限 (/remove)、不輕易用拒絕 (/deny)**。
  • 繼承旗標 (OI)(CI) 易混淆,設定前先用 `icacls 路徑` 觀察現有 ACE 格式,模仿現有模式修改。
  • 長路徑 (>260 字元) 問題: Win 10 1607+ 可啟用「啟用 Win32 長路徑」群組原則 (`gpedit.msc` → 電腦設定 → 管理範本 → 系統 → 檔案系統 → 啟用 Win32 長路徑),或用 `\\?\` 前綴路徑 (如 `\\?\C:\Very\Long\Path`)。
  • 備份 ACL 習慣: 任何批量修改前,執行 `icacls 目標 /save backup.txt /T`,出錯可秒還原。
  • 區分「檔案」與「資料夾」權限: 用 `(OI)` 針對檔案、`(CI)` 針對資料夾,避免「資料夾可進入但檔案不可讀」或反之。

總結

**ICacls 是現代 Windows 管理 NTFS 權限的命令列標準**。掌握 `/grant:r` (替換授予)、`/deny` (拒絕)、`/remove` (移除)、`/inheritance:d|e|r` (繼承控制)、`/T` (遞歸)、`/save|/restore` (備份還原) 核心參數,配合 `takeown` 取得擁有權,即可應對 99% 權限管理場景:從共享資料夾精細授權、系統權限修復、自動化部署腳本、到頑固檔案強制接管。拋棄 Cacls/Xcacls,擁抱 ICacls (與 PowerShell ACL 物件),讓權限管理從「點點點」進化為「碼碼碼」。

Copyright © Windows教程網 All Rights Reserved