開始前先了解

先準備 NTFS 資料磁碟與本機低權限帳號 tutorial-reader. 它不應是 Administrators 成員. 示例資料夾是 D:\TutorialAccess, 請換成自己的空白測試位置; 不修改磁碟根目錄, Windows, 使用者設定檔或正式網站的權限.

全程保留系統管理員與 SYSTEM 的必要管理權限, 並保留另一個可管理主機的登入方式. 本篇只討論本機 NTFS 存取, 不建立網路共用或網域授權.

本系列使用 Windows Server 2022 Datacenter 繁體中文真實操作畫面. 帳號, 網路設定, 磁碟與示範數值請換成自己的環境; 選項名稱可能因版本與語言不同而異.

01建立專用資料夾與測試內容

以系統管理員建立 D:\TutorialAccess 與無害的 example.txt. 資料夾若已存在或含重要資料, 請改用另一個空白測試位置, 不直接套用本篇步驟.

確認 tutorial-reader 是本機帳號, 並核對它所屬的群組. NTFS 權限會受到帳號及其群組授權共同影響, 不能只看帳號名稱那一列.

接下來只改這個測試資料夾. 操作前先記錄現有權限與可復原方式, 不把其他資料夾的權限當成可以直接複製的範本.

New-Item D:\TutorialAccess -ItemType Directory
'Tutorial read-only sample' |
  Set-Content D:\TutorialAccess\example.txt
Get-LocalUser -Name tutorial-reader
icacls D:\TutorialAccess
專用 NTFS 測試資料夾內容的安全性頁面與目前權限 放大圖片
先確認這是可重建的測試資料夾, 再查看目前 NTFS 權限.

02查看繼承來源並保留原設定

在檔案總管開啟資料夾內容的安全性頁面, 再進入進階權限設定. 查看目前擁有者, 權限項目與繼承來源, 分清從上層繼承的項目與直接設定的項目.

變更前可將這個測試資料夾的 DACL 存到資料夾外. 下方只保存此資料夾及測試內容的存取清單, 不是檔案內容備份, 也不包含所有擁有者或稽核設定.

保存後先確認檔案存在. 若發現權限與預期不同, 先停止並釐清用途, 不直接以重設整顆磁碟的方式處理.

New-Item C:\TutorialLab -ItemType Directory -Force
Push-Location D:\
icacls TutorialAccess /save C:\TutorialLab\TutorialAccess-before.acl /t
Pop-Location
Get-Item C:\TutorialLab\TutorialAccess-before.acl
測試資料夾進階安全性設定中的繼承來源與存取項目 放大圖片
進階安全性設定顯示權限項目與繼承來源, 變更前先核對管理權限.

03停用繼承並授予指定帳號讀取權限

只針對 D:\TutorialAccess 停用繼承, 選擇把既有繼承項目轉成明確權限的方式. 不要選擇一次移除全部繼承項目後才尋找管理帳號.

確認 Administrators 與 SYSTEM 仍保有完全控制. 然後核對 Users 等一般群組在這個測試資料夾的允許項目, 移除會讓測試帳號取得額外寫入能力的廣泛授權; 不修改整個群組或上層磁碟.

新增本機 tutorial-reader 的允許項目, 只授予讀取與執行所需權限, 不授予修改或完全控制. 核對套用範圍包含本資料夾, 子資料夾與檔案.

本次演練由管理員透過 PowerShell 套用 ACL, 儲存變更後重新讀取並核對最終清單. 截圖顯示繼承防護與實際權限, 不是從 GUI 送出變更的紀錄; 也可用前一步的安全性頁面檢查相同設定.

不要用拒絕 Everyone 來達成唯讀. 拒絕可能同時影響需要管理資料的帳號, 也會讓後續排查變得複雜. 如果無法確定某一項用途, 先保留並釐清.

PowerShell 顯示測試資料夾已保護繼承, Administrators 與 SYSTEM 為完全控制, tutorial-reader 為讀取與執行 放大圖片
PowerShell 重新讀回已保存的 ACL, 確認管理權限與指定帳號的讀取及執行權限.

04用低權限帳號實際測試讀寫

改用 tutorial-reader 的一般登入工作階段或以該帳號啟動的 PowerShell, 先執行 whoami 確認身分. 不要仍在管理員的提升權限視窗中測試後就判定一般帳號的結果.

先讀取 example.txt, 再嘗試建立全新的 should-not-exist.txt. 預期讀取成功, 新建檔案因權限不足被拒絕. 請核對錯誤原因確實是存取遭拒, 不是磁碟不存在或檔案原本已存在.

本次截圖由管理員讀回 tutorial-reader 實際執行後的結果記錄. 記錄顯示讀取成功, 寫入遭 System.UnauthorizedAccessException 拒絕; 測試身分為低權限帳號, 不是開啟結果視窗的管理員.

# 在 tutorial-reader 的一般 PowerShell 中執行
whoami
[IO.File]::ReadAllText("D:\TutorialAccess\example.txt")
[IO.File]::WriteAllText("D:\TutorialAccess\should-not-exist.txt", "write test")
核對低權限 tutorial-reader 的實際身分與測試資料夾讀寫結果 放大圖片
讀回低權限帳號的實際測試記錄, 讀取成功而新建檔案被拒絕.

05核對最終權限並保留復原方式

由管理員再次查詢資料夾與 example.txt 的 ACL. 確認資料夾已停用繼承, 管理員與 SYSTEM 仍具必要管理權限, tutorial-reader 為讀取與執行, 沒有另留下不必要的廣泛寫入授權. 同時確認 should-not-exist.txt 不存在, 避免只看錯誤訊息就判定測試完成.

有效存取查詢可協助判讀, 但實際帳號的測試仍不可省略. 若帳號還屬於其他有寫入權限的群組, 只有新增一條唯讀允許規則不會抵消那些授權.

若仍能寫入, 回頭檢查群組, 明確權限與子項目繼承. 需要復原時由管理員依原本保存位置還原 DACL, 並再次核對管理存取與測試帳號結果; 不對其他資料夾執行批次重設.

Get-Acl D:\TutorialAccess | Format-List Owner,AreAccessRulesProtected,AccessToString
icacls D:\TutorialAccess
icacls D:\TutorialAccess\example.txt
Test-Path D:\TutorialAccess\should-not-exist.txt

保留需要的測試結果後, 若要復原本篇 DACL, 由管理員依原存檔的相對路徑執行 icacls D:\ /restore C:\TutorialLab\TutorialAccess-before.acl. 先確認這份檔案確實只包含自己的測試資料夾, 不載入來路不明的 ACL 檔案.

最終資料夾與檔案 NTFS 存取清單及測試寫入檔不存在的結果 放大圖片
核對原檔權限與測試寫入檔不存在, 確認未留下額外的寫入結果.

完成後如何確認

本次以 tutorial-reader 的實際身分驗證 example.txt 讀取成功, 新建檔案被拒絕且 should-not-exist.txt 不存在. 最終資料夾只保留 Administrators 與 SYSTEM 的完全控制, 以及 tutorial-reader 的讀取與執行權限, 沒有繼承的存取項目. 本篇 DACL 保存與復原指令供操作前規劃使用, 不代表已完成資料內容的還原演練.

這個本機 NTFS 演練不等於已設定網路共用或正式網站的完整權限. 套用到其他資料時, 仍需依實際帳號, 群組與服務需求重新確認.

常見問題

我給帳號唯讀, 為什麼它仍可以寫入?

它可能同時屬於另一個具有寫入權限的群組, 或從上層繼承其他授權. 請核對有效權限與實際登入身分, 不要直接用拒絕 Everyone 取代排查.

保存 ACL 就等於已備份資料嗎?

不是. DACL 檔案保存存取清單, 不保存原始檔案內容. 正式資料仍需要內容備份與另外的還原演練.

操作時需要協助?

告訴我們您停在哪個步驟, 由客服協助您確認.

聯絡客服