Windows Server 使用ICACLS在命令列給檔案賦予許可權

James·wang發表於2024-07-01

有時候在共享資料夾或檔案時,檔案所有者許可權會丟失,造成賦予許可權時被拒絕,這樣我們可以先使用takeown.exe強制更改所有身份,希捷使用icacls新增相應許可權。

下面是一個示例,演示如何使用takeown命令來獲取一個資料夾及其所有子資料夾和檔案的所有權:

takeown /F "D:\Share\Offices" /R /A /D Y

 這裡,各引數的意義如下:

  • /F "D:\Share\Offices":指定你想要獲取所有權的資料夾路徑。路徑需要用雙引號包圍,特別是當路徑中包含空格時。
  • /R:表示遞迴執行,即不僅獲取指定資料夾的所有權,還包括其下所有子資料夾和檔案。
  • /A:自動賦予當前登入的使用者(即管理員賬戶)所有權,而無需手動指定使用者名稱。
  • /D Y:自動回答“Y”(Yes),用於在需要確認時自動同意操作,避免命令執行過程中因等待使用者輸入而暫停。

執行此命令後,系統會開始處理,將指定資料夾及其內容的所有權轉移給當前管理員賬戶。請注意,這一步驟僅改變了檔案的所有權,並不直接修改檔案的訪問許可權。如果還需要調整許可權,可以進一步使用icacls命令來設定具體的訪問控制列表。

icacls "D:\Share\Offices" /t /c /grant users:F
icacls "C:\example_folder\*" /grant "Users:(RX)" /T /C

這裡,各引數的意義如下:

  • "C:\example_folder\*":指定了要修改許可權的資料夾及其中所有檔案(星號*代表所有檔案)的路徑。
  • /grant "Users:(RX)":表示授予Users組讀取(R)和執行(X)許可權。這裡(RX)就是許可權程式碼,R代表讀取許可權,X代表執行許可權,兩者之間沒有逗號。/grant users:F表示賦予所有控制許可權
  • /T:表示該命令將遞回應用到指定目錄下的所有子檔案和子資料夾。
  • /C:繼續執行命令,即使遇到錯誤也不中斷。這對於大量檔案和資料夾尤其有用,可以確保命令嘗試處理所有物件,即使某些操作可能因為許可權問題失敗。

執行上述命令後,icacls將為C:\example_folder目錄下所有的檔案和子資料夾內的檔案賦予Users組讀取和執行的許可權。請記住,這會覆蓋現有的許可權設定,除非這些檔案已經擁有更寬鬆的許可權。如果需要更細緻地控制許可權,比如同時保留現有許可權並新增新的許可權條目,可以查閱icacls的更高階用法。

ICACLS name /save aclfile [/T] [/C] [/L] [/Q]
    將匹配名稱的檔案和資料夾的 DACL 儲存到 aclfile 中以便將來與 /restore 一起使用。請注意,未儲存 SACL、所有者或完整性標籤。

ICACLS directory [/substitute SidOld SidNew [...]] /restore aclfile
                 [/C] [/L] [/Q]
    將儲存的 DACL 應用於目錄中的檔案。

ICACLS name /setowner user [/T] [/C] [/L] [/Q]
    更改所有匹配名稱的所有者。該選項不會強制更改所有身份;使用 takeown.exe 實用程式可實現該目的。

ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]
    查詢包含顯式提及 SID 的 ACL 的所有匹配名稱。

ICACLS name /verify [/T] [/C] [/L] [/Q]
    查詢其 ACL 不規範或長度與 ACE計數不一致的所有檔案。

ICACLS name /reset [/T] [/C] [/L] [/Q]
    為所有匹配檔案使用預設繼承的 ACL 替換 ACL。

ICACLS name [/grant[:r] Sid:perm[...]]
       [/deny Sid:perm [...]]
       [/remove[:g|:d]] Sid[...]] [/T] [/C] [/L] [/Q]
       [/setintegritylevel Level:policy[...]]

    /grant[:r] Sid:perm 授予指定的使用者訪問許可權。如果使用 :r,這些許可權將替換以前授予的所有顯式許可權。如果不使用 :r,這些許可權將新增到以前授予的 所有顯式許可權。

    /deny Sid:perm 顯式拒絕指定的使用者訪問許可權。將為列出的許可權新增顯式拒絕 ACE,並刪除所有顯式授予的許可權中的相同許可權。

    /remove[:[g|d]] Sid 刪除 ACL 中所有出現的 SID。使用
        :g,將刪除授予該 SID 的所有許可權。使用
        :d,將刪除拒絕該 SID 的所有許可權。

    /setintegritylevel [(CI)(OI)]級別將完整性 ACE 顯式新增到所有匹配檔案。要指定的級別為以下級別之一:
             L[ow]
             M[edium]
             H[igh]
        完整性 ACE 的繼承選項可以優先於級別,但只應用於目錄。

    /inheritance:e|d|r
        e - 啟用繼承
        d - 禁用繼承並複製 ACE
        r - 刪除所有繼承的 ACE


注意:
    Sid 可以採用數字格式或友好的名稱格式。如果給定數字格式,
    那麼請在 SID 的開頭新增一個 */T 指示在以該名稱指定的目錄下的所有匹配檔案/目錄上執行此操作。

    /C 指示此操作將在所有檔案錯誤上繼續進行。仍將顯示錯誤訊息。

    /L 指示此操作在符號連結本身而不是其目標上執行。

    /Q 指示 icacls 應該禁止顯示成功訊息。

    ICACLS 保留 ACE 項的規範順序:顯式拒絕;顯式授予;繼承的拒絕;繼承的授予

    perm 是許可權掩碼,可以指定兩種格式之一:
        簡單許可權序列:
                N - 無訪問許可權;
                F - 完全訪問許可權;
                M - 修改許可權;
                RX - 讀取和執行許可權;
                R - 只讀許可權;
                W - 只寫許可權;
                D - 刪除許可權;
        在括號中以逗號分隔的特定許可權列表:
                DE - 刪除
                RC - 讀取控制
                WDAC - 寫入 DAC
                WO - 寫入所有者
                S - 同步
                AS - 訪問系統安全性
                MA - 允許的最大值
                GR - 一般性讀取
                GW - 一般性寫入
                GE - 一般性執行
                GA - 全為一般性
                RD - 讀取資料/列出目錄
                WD - 寫入資料/新增檔案
                AD - 附加資料/新增子目錄
                REA - 讀取擴充套件屬性
                WEA - 寫入擴充套件屬性
                X - 執行/遍歷
                DC - 刪除子項
                RA - 讀取屬性
                WA - 寫入屬性
        繼承許可權可以優先於每種格式,但只應用於
        目錄:
                (OI) - 物件繼承
                (CI) - 容器繼承
                (IO) - 僅繼承
                (NP) - 不傳播繼承
                (I) - 從父容器繼承的許可權

示例:

        icacls c:\windows\* /save AclFile /T
        - 將 c:\windows 及其子目錄下所有檔案的ACL 儲存到 AclFile。

        icacls c:\windows\ /restore AclFile
        - 將還原 c:\windows 及其子目錄下存在的 AclFile 內所有檔案的 ACL。

        icacls file /grant Administrator:(D,WDAC)
        - 將授予使用者對檔案刪除和寫入 DAC 的管理員許可權。

        icacls file /grant *S-1-1-0:(D,WDAC)
        - 將授予由 sid S-1-1-0 定義的使用者對檔案刪除和
          寫入 DAC 的許可權。

TAKEOWN [/S system [/U username [/P [password]]]]
        /F filename [/A] [/R [/D prompt]]

描述:
    該工具以重新分配檔案所有權的方式允許管理員重新獲取先前被拒絕訪問
    的檔案訪問權。

引數列表:
    /S           system          指定要連線到的遠端系統。

    /U           [domain\]user   指定使用者上下文,命令在此上下文中執行。

    /P           [password]      指定給定使用者上下文的密碼。如果省略,
                                 提示輸入。

    /F           filename        指定檔名或目錄名模式。可以用萬用字元 "*"
                                 指定模式。允許共享名\檔名。

    /A                           將所有權給於管理員組,而不是當前使用者。

    /R                           遞迴: 指示工具執行於指定的目錄和子目錄
                                 裡的檔案上。

    /D           prompt          當前使用者在一個目錄裡沒有“列出資料夾”
                                 許可權時,使用預設答案。當在子目錄裡進行
                                 遞迴 (/R) 操作時會發生這種情況。用有效
                                 值 "Y" 獲取所有權或用 "N" 跳過。

    /SKIPSL                      不遵循符號連結。
                                 僅適用於 /R。

    /?                           顯示此幫助訊息。

    注意: 1) 如果未指定 /A,檔案所有權會將被授予
             當前登入的使用者。

          2) 不支援用 "?" 和 "*" 的混合模式。

          3) /D 用於抑制確認提示。

示例:
    TAKEOWN /?
    TAKEOWN /F lostfile
    TAKEOWN /F \\system\share\lostfile /A
    TAKEOWN /F directory /R /D N
    TAKEOWN /F directory /R /A
    TAKEOWN /F *
    TAKEOWN /F C:\Windows\System32\acme.exe
    TAKEOWN /F %windir%\*.txt
    TAKEOWN /S system /F MyShare\Acme*.doc
    TAKEOWN /S system /U user /F MyShare\MyBinary.dll
    TAKEOWN /S system /U domain\user /P password /F share\filename
    TAKEOWN /S system /U user /P password /F Doc\Report.doc /A
    TAKEOWN /S system /U user /P password /F Myshare\*
    TAKEOWN /S system /U user /P password /F Home\Logon /R
    TAKEOWN /S system /U user /P password /F Myshare\directory /R /A

相關文章