2013年7月23日 星期二

資料來源‧

用指令來增加檔案或資料夾的權限

C:\Documents and Settings\users>cacls

顯示或修改檔案的存取控制清單 (ACLs)

CACLS filename [/T] [/E] [/C] [/G user:perm] [/R user [...]][/P user:perm [...]] [/D user [...]]
filename 顯示 ACL。

/T 變更指定檔案的 ACL 於
現有的目錄或所有子目錄中。

/E 編輯 ACL 而非將它取代。

/C 拒絕存取的錯誤繼續發生。

/G user:perm 授與指定的使用者存取權限。
Perm 的值可以是:
R 讀取
C 變更 (寫入)
F 完全控制

/R user 撤銷已指定的使用者存取權限 (只有當 /E 存在時才有效)。

/P user:perm 取代已指定的使用者存取權限。
Perm 的值可以是:
N 沒有權限
R 讀取
C 變更 (寫入)
F 完全控制

/D user 拒絕已指定的使用者存取。

您可以在命令中使用萬用字元一次指定數個檔案。

您可以在命令中指定數個使用者。

縮寫:
CI - 容器繼承。
ACE 將被目錄繼承。
OI - 物件繼承。
ACE 將被檔案繼承。
IO - 僅供繼承。
ACE 不可套用到目前的檔案/目錄。

舉例說明
查詢目前權限

C:\Documents and Settings\USERS>cacls "Exchange Server 2003 部署手冊.pdf"
C:\Documents and Settings\USERS\Exchange Server 2003 部署手冊.pdf DOMAIN\aesop:F
NT AUTHORITY\SYSTEM:F
BUILTIN\Administrators:F

假設C:\TEST 保持原有權限並加入DOMAIN DOM的user2可以修改

CACLS C:\TEST /E /T /P DOM/USER2:C

有些是預設的domain帳號或群組如 Authenticated Users 或Domain Users

就必須用

CACLS C:\TEST /E /T /P "NT AUTHORITY\Authenticated Users":C

注意要加引號,並且是用 NT AUTHORITY 並不是您Domain的名稱

也可以增加多帳號並給不同權限
CACLS C:\TEST /E /T /P DOM/USER2:F "NT AUTHORITY\Authenticated Users":C

以上
DOM/USER2:F

"NT AUTHORITY\Authenticated Users":C
是有空一格的

雖然說可以多檔案多帳號
但是我通常只用到單一檔案多帳號
多個檔案時我都寫成batch
例如
CACLS C:\TEST /E /T /P DOM/USER2:F "NT AUTHORITY\Authenticated Users":C
CACLS C:\TEST1 /E /T /P DOM/USER2:F "NT AUTHORITY\Authenticated Users":C

用這看起來很麻煩
其實最終目的是要寫成batch
因為如果電腦及檔案的數量很多需要修改時
就可以放入GPO裡面
不用一台一去改
而且不會遺漏




例子:
rem ------------------------------------------------------------
rem  1' 目的:建立個人P槽,並且設定(寫入)讀取權限
rem ------------------------------------------------------------

set mapdirve=P:
set hostname=FW-FILE_SVR
set sourceDir=MyData
set networkdrive=%sourceDir%$\%username%

rem 刪除網路磁碟機
echo "create networking dirve z:"
net use %mapdirve% /delete /y

rem 檢查目錄是否存在
if not exist %hostname%\%sourceDir%\%username% md %hostname%\%sourceDir%\%username%

rem 設定目錄權限
if not exist %hostname%\%sourceDir%\%username% CACLS E:\%sourceDir%\%username% /T /E /G fwgroup\%username%:C

rem 建立網路磁碟機
if not exist %mapdirve% net use %mapdirve% \\%hostname%\%networkdrive% 

echo "執行完成:
echo End : "%date%-%time%"     
echo.


pause


沒有留言: