2012年3月14日 星期三

用命令列修改 XP 目錄/檔案權限

參考引用
--

因根目錄之安全性標籤鎖住,用GPEDIT.MSC 找不到解法,只好用此方法

cacls.exe 是用來管理 ACL 的工具, ACL 翻成中文是「存取控制清單」。 ACL 的功用是列出哪些使用者對電腦上的哪些資源有哪些權限,當使用者要存取某個資源的時候,就可以透過 ACL 檢查這個存取動作是否合法。這個資源可能是檔案、資料夾或印表機……等,而權限可以是讀取、寫入、執行……等。在 ACL 裡面包含了許多 ACE ,而每個 ACE 就代表某個使用者對某項資源具有哪些權限。

在 Windows 平台上只有 NTFS 的磁區具有 ACL 的功能,如果在 NTFS 磁區上的某個檔案(資料夾)上按下滑鼠右鍵 → 內容 → 安全性,就可以看到這個檔案(資料夾)的 ACL

資料夾的權限種類比檔案多了一種「清單資料夾內容」。

使用方式
cacls.exe 的語法如下:

cacls filename [/T] [/E] [/C] [/G user:perm [...]] [/R user [...]]
[/P user:perm [...]] [/D user [...]]
參數說明如下:

/T
變更目錄及其子目錄下所有指定檔案的 ACL 。例如用

> cacls test/*.txt /t
可以指定 test 目錄及其子目錄下所有的純文字文件檔。

/E
編輯 ACL 而非取代。不加上 /E 的話會先將 ACL 清空,再將指定的使用者權限加上去。

/C
忽略錯誤並繼續執行。

/G user:perm
授與 (Grant) 使用者權限。 perm 的值可以是下面其中一個:

perm 描述 允許 拒絕
r 讀取 讀取及執行、清單資料夾內容、讀取 無
w 寫入 寫入 無
c 變更 修改、讀取及執行、清單資料夾內容、讀取、寫入 無
f 完全控制 完全控制、修改、讀取及執行、清單資料夾內容、讀取、寫入 無

/R user
撤銷 (Revoke) 指定使用者的權限,需和 /E 同時使用。

/P user:perm
取代 (Replace) 指定使用者的權限。 perm 的值可以是下面其中一個:

perm 描述 允許 拒絕
n 沒有權限 無 完全控制、修改、讀取及執行、清單資料夾內容、讀取、寫入
r 讀取 讀取及執行、清單資料夾內容、讀取 無
w 寫入 寫入 無
c 變更 修改、讀取及執行、清單資料夾內容、讀取、寫入 無
f 完全控制 完全控制、修改、讀取及執行、清單資料夾內容、讀取、寫入 無

/D user
拒絕 (Deny) 指定使用者存取,相當於 /P user:n

權限說明
完全控制
具有所有的權限。

修改
選擇「修改」會自動加上「讀取及執行」、「讀取」、「寫入」權限,此外「修改」還可以刪除、重新命名檔案。

讀取及執行
讀取與執行檔案,選擇這一個權限會自動加上「清單資料夾內容」與「讀取」這兩個權限。

清單資料夾內容
僅限瀏覽資料夾裡面的檔案清單。

讀取
讀取檔案/資料夾。

寫入
新增檔案或變更已存在的檔案內容(不包括重新命名)。

範例
新增權限
讓 Guest 帳號可以寫入 test 目錄:

> cacls test /e /g Guest:w
變更 ACL
將 test 目錄變更成只有 Administrators 可以完全控制:

> cacls test /g Administrators:f
顯示權限
顯示 ACL :

> cacls test
結果可能為

C:\\test BUILTIN\\Administrators:(OI)(CI)F
輸出結果裡面的 (OI) 、 (CI) 、 (IO) 代表意思如下:

輸出 ACE 套用到
OI 此資料夾及檔案。
CI 此資料夾及子資料夾。
IO ACE 不套用到目前的檔案/目錄。
無輸出訊息 只有此資料夾。
(IO)(CI) 此資料夾、子資料夾及檔案。
(OI)(CI)(IO) 只有子資料夾及檔案。
(CI)(IO) 只有子資料夾。
(OI)(IO) 只有檔案。

注意事項
永遠的控制者
擁有者的設定超越於 ACL ,也就是對於妳所建立的檔案或資料夾,妳永遠有所有的權限。那麼怎麼看檔案或擁有者是誰呢?在檔案或資料夾上按滑鼠右鍵 → 內容 → 安全性 → 進階 → 擁有者,就可以看到該項資源的擁有者。


誰可以變更 ACL
具有「完全控制」權限的使用者才可以變更 ACL 。

使用於批次檔
在沒有加上 /E 選項時,會出現以下詢問:

您是否確定 (Y/N)?
並等待使用者輸入 Y 或 N 並按下 Enter 。如果要在批次檔裡面使用的話,可以使用 pipe ,範例如下:

echo y cacls test /t /g "Administrators":f
值得注意的是 echo y 與 之間不可以有任何空白。

權限之繼承
一般來說資料夾 A 下的子資料夾或檔案會繼承 A 的 ACL 。例如下圖的「從父項繼承套用到子物件的權限項目,包括明確定義於此的項目」:


如果不想繼承,而想為該資料夾或檔案特別設定不一樣的 ACL ,可以將該選項取消掉

沒有留言:

張貼留言