Lệnh icacls trong CMD: Hướng dẫn chi tiết từ cơ bản đến nâng cao cho quản trị viên Windows

lệnh icacls trong cmd

Lệnh icacls trong cmd là công cụ dòng lệnh mạnh mẽ của Windows dùng để xem và thay đổi danh sách kiểm soát truy cập (ACL) của tệp và thư mục. Đây là giải pháp thay thế hiện đại cho lệnh cacls cũ, cung cấp nhiều tùy chọn hơn để quản lý quyền NTFS. Nếu bạn là quản trị viên hệ thống hoặc chuyên viên bảo mật, việc thành thạo lệnh icacls sẽ giúp bạn kiểm soát chính xác quyền truy cập, khắc phục lỗi phân quyền và bảo vệ dữ liệu nhạy cảm. Bài viết này sẽ giải thích toàn bộ cú pháp, các tham số và các kịch bản ứng dụng thực tế của lệnh icacls.

Tóm Tắt Nội Dung

Lệnh icacls trong cmd là gì? Bản chất và lịch sử phát triển

lệnh icacls trong cmd - Hình 5

Icacls là viết tắt của “Integrity Control Access Control Lists”. Lệnh này xuất hiện lần đầu trong Windows Server 2003 SP2 và Windows Vista, được thiết kế để thay thế lệnh cacls đã lỗi thời. So với cacls, icacls hỗ trợ các quyền đặc biệt như quyền kế thừa, quyền kiểm toán và quyền dành cho các đối tượng cụ thể (như service account). Khác biệt chính: icacls sử dụng cú pháp mới với dấu hai chấm để chỉ định quyền, cho phép thao tác trên nhiều tệp cùng lúc và hiển thị trạng thái kế thừa quyền.

Xem thêm:  Cách sử dụng Start Menu bằng phím tắt: Bí kíp điều khiển Windows tốc độ cao

Lệnh icacls hoạt động dựa trên mô hình bảo mật Windows: mỗi đối tượng (tệp/thư mục) có một ACL (Access Control List) chứa các ACE (Access Control Entry). Mỗi ACE xác định một người dùng hoặc nhóm và quyền được cấp hoặc từ chối. Icacls cho phép bạn đọc, sửa, xóa và thêm ACE vào ACL này.

Cú pháp cơ bản của lệnh icacls trong cmd

Cú pháp tổng quát: icacls [tên_đường_dẫn] [/tùy_chọn]

Hiển thị quyền hiện tại (icacls )

Khi bạn chạy lệnh icacls C:Folder mà không có tùy chọn, nó sẽ hiển thị ACL của thư mục đó. Kết quả trả về gồm các dòng, mỗi dòng có cấu trúc: tên người dùng/nhóm:(quyền). Ví dụ: BUILTINAdministrators:(OI)(CI)(F) có nghĩa là quyền Full Control áp dụng cho thư mục con (CI) và tệp trong đó (OI).

Các ký hiệu quyền thông dụng

    • F – Full Control
    • M – Modify
    • RX – Read & Execute
    • R – Read
    • W – Write
    • D – Delete
    • OI – Object Inherit (áp dụng cho tệp con)
    • CI – Container Inherit (áp dụng cho thư mục con)
    • IO – Inherit Only
    • NP – Not Propagate Inherit
    • I – Inherited (quyền được kế thừa từ thư mục cha)

    Các tham số thường dùng của lệnh icacls trong cmd

    lệnh icacls trong cmd - Hình 4

    Bảng dưới đây liệt kê các tham số phổ biến và chức năng của chúng:

    Tham số Chức năng Ví dụ
    /grant Cấp quyền cho người dùng/nhóm (ghi đè quyền hiện có) icacls Data /grant User1:F
    /grant:r Cấp quyền và thay thế tất cả quyền hiện tại của người dùng đó icacls Data /grant:r User1:(OI)(CI)F
    /deny Từ chối quyền (ưu tiên hơn /grant) icacls Data /deny User1:F
    /remove Xóa tất cả ACE của một đối tượng khỏi ACL icacls Data /remove User1
    /setowner Thay đổi chủ sở hữu (owner) icacls Data /setowner Administrator
    /find Tìm tệp/thư mục có ACL khớp với điều kiện icacls C: /find “User1”
    /reset Đặt lại quyền kế thừa mặc định (loại bỏ quyền rõ ràng) icacls Data /reset
    /save Lưu ACL của thư mục vào tệp để phục hồi sau icacls Data /save backup.acl
    /restore Phục hồi ACL từ tệp đã lưu icacls Data /restore backup.acl
    /T Áp dụng đệ quy cho tất cả thư mục con và tệp icacls Data* /grant User1:R /T
    /L Thao tác trên liên kết tượng trưng thay vì đích icacls Link /L
    /Q Chạy ở chế độ im lặng (không hiển thị thông báo thành công) icacls Data /grant User1:F /Q

    Cách cấp quyền bằng lệnh icacls trong cmd – Ví dụ thực tế

    Cấp quyền Full Control cho người dùng trên một thư mục

    Để cấp toàn quyền cho tài khoản “User1” trên thư mục “C:Project”, bạn chạy: icacls C:Project /grant User1:F. Nếu muốn áp dụng cho tất cả thư mục con và tệp bên trong, thêm tham số /T: icacls C:Project /grant User1:F /T.

    Cấp quyền Read & Execute cho nhóm Domain Users

    Sử dụng: icacls C:Public /grant "Domain Users":RX. Để chỉ áp dụng cho các tệp trong thư mục (OI) và thư mục con (CI), kết hợp: icacls C:Public /grant "Domain Users":(OI)(CI)RX.

    Từ chối quyền Write cho một user cụ thể

    Lệnh sau sẽ chặn User2 ghi vào thư mục Data dù các quyền khác vẫn còn: icacls C:Data /deny User2:W. Lưu ý: deny luôn được ưu tiên cao hơn grant nếu có xung đột.

    Xóa tất cả quyền của một user khỏi ACL

    Để xóa mọi ACE của User3 trên thư mục và tất cả bên trong: icacls C:Data /remove User3 /T. Lệnh này không ảnh hưởng đến quyền kế thừa.

    Đặt lại quyền kế thừa từ thư mục cha

    Khi bạn muốn loại bỏ các quyền rõ ràng (explicit permissions) và đặt lại quyền giống thư mục cha: icacls C:Data /reset /T. Rất hữu ích khi sửa lỗi do thay đổi quyền sai.

    Thay đổi chủ sở hữu thư mục

    Để chuyển quyền sở hữu cho Administrator: icacls C:Data /setowner BUILTINAdministrators /T. Cần quyền Take Ownership (thường có sẵn cho Admin).

    Lưu và phục hồi ACL

    Sao lưu toàn bộ ACL của thư mục Data vào tệp: icacls C:Data /save C:BackupData_ACL.txt. Sau đó phục hồi: icacls C:Data /restore C:BackupData_ACL.txt. Rất hữu ích khi cần áp dụng cùng bộ quyền cho nhiều máy.

    So sánh lệnh icacls với cacls và GUI Security tab

    lệnh icacls trong cmd - Hình 3
    Tiêu chí Icacls Cacls GUI (Security Tab)
    Hỗ trợ quyền kế thừa Có (hiển thị rõ OI, CI, IO) Không hiển thị đầy đủ
    Thao tác hàng loạt Rất mạnh (đệ quy, filter) Hạn chế Khó, tốn thời gian
    Kiểm toán (audit) Hỗ trợ /audit Không Có nhưng phức tạp
    Tốc độ Nhanh, tối ưu cho script Chậm hơn Chậm nếu có nhiều đối tượng
    Khả năng phục hồi /save và /restore Không Không có chức năng backup tích hợp

    Icacls vượt trội hơn cacls ở mọi khía cạnh, đặc biệt là trong môi trường có nhiều máy chủ và chính sách bảo mật phức tạp. GUI thì trực quan hơn nhưng không thể tự động hóa.

    Ứng dụng thực tế của lệnh icacls trong công việc quản trị

    Khắc phục lỗi Access Denied do quyền sai

    Khi người dùng báo lỗi “Access Denied”, bạn dùng icacls để kiểm tra ACL hiện tại: icacls "C:UsersTargetUserFolder". Nếu thấy quyền bị thiếu, cấp bổ sung bằng /grant. Nếu quyền kế thừa bị vô hiệu hóa, dùng /reset để khôi phục.

    Triển khai quyền chuẩn cho thư mục chia sẻ

    Ví dụ: Tạo thư mục “CompanyData” với quyền: Admin toàn quyền, Nhân viên chỉ đọc. Script: icacls CompanyData /grant "Domain Admins":(OI)(CI)F /Ticacls CompanyData /grant "Domain Users":(OI)(CI)RX /T.

    Phát hiện tệp có quyền bất thường

    Sử dụng /find: icacls C: /find "Everyone:F" để tìm các tệp/thư mục mà nhóm Everyone có Full Control – đây là rủi ro bảo mật cần xử lý ngay.

    Sao chép ACL giữa các thư mục

    Dùng /save và /restore: đầu tiên lưu ACL của thư mục nguồn: icacls Source /save acl.txt, sau đó áp dụng lên thư mục đích: icacls Destination /restore acl.txt. Lưu ý: cần cấu trúc thư mục tương tự để tránh lỗi.

    Sai lầm thường gặp khi sử dụng lệnh icacls trong cmd

    lệnh icacls trong cmd - Hình 2

    Quên tham số /T dẫn đến chỉ áp dụng cho thư mục gốc

    Nếu chỉ chạy icacls Folder /grant User1:F mà không có /T, các tệp và thư mục con không được thay đổi quyền. Luôn kiểm tra và thêm /T nếu cần áp dụng đệ quy.

    Hiểu sai ký hiệu quyền (OI)(CI)

    Nhiều người nhầm rằng (OI)(CI) áp dụng cho chính thư mục đó. Thực tế: (OI) có nghĩa là quyền áp dụng cho các tệp con, (CI) áp dụng cho thư mục con. Để áp dụng luôn cho thư mục hiện tại, cần thêm quyền cơ bản (không có OI/CI) hoặc dùng /grant trực tiếp.

    Sử dụng /remove không đúng cách

    /remove chỉ xóa quyền rõ ràng (explicit), không xóa quyền kế thừa. Để loại bỏ hoàn toàn ảnh hưởng của người dùng, cần dùng /deny trước khi /remove, hoặc vô hiệu hóa kế thừa trước.

    Đặt quyền cho tài khoản nhưng sai tên hoặc sai loại đối tượng

    Ví dụ: “BUILTINAdministrators” khác với “DOMAINAdministrator”. Luôn dùng lệnh whoami /groups để kiểm tra tên chính xác. Với tên có khoảng trắng, đặt trong dấu ngoặc kép.

    Lưu ý quan trọng khi làm việc với lệnh icacls trong cmd

    • Quyền Administrator: Để chạy icacls thành công, bạn cần mở Command Prompt với quyền Run as Administrator. Nếu không, các lệnh thay đổi quyền sẽ báo lỗi “Access denied”.
    • Thứ tự ưu tiên quyền: Deny luôn được ưu tiên hơn Grant, dù Grant có ở mức cao hơn. Nếu bạn vừa grant Full Control vừa deny Write, kết quả là Write vẫn bị từ chối.
    • Quyền kế thừa: Khi dùng /grant trực tiếp, quyền mới sẽ được ghi đè lên quyền kế thừa? Không. Icacls thêm quyền rõ ràng, quyền kế thừa vẫn còn. Muốn loại bỏ quyền kế thừa, bạn phải dùng icacls /inheritance:r (xóa kế thừa).
    • Backup ACL trước khi thay đổi: Sai lầm có thể làm mất quyền và gây hỏng hệ thống. Luôn chạy icacls đường_dẫn /save backup.txt trước khi điều chỉnh.
    • Giới hạn ký tự đường dẫn: Icacls hỗ trợ đường dẫn dài tối đa 260 ký tự, tương tự giới hạn của Windows. Với đường dẫn quá dài, dùng ký hiệu \? để bỏ qua giới hạn (ví dụ: icacls \?C:VeryLongPath).

FAQ – Câu hỏi thường gặp về lệnh icacls trong cmd

lệnh icacls trong cmd - Hình 1

Làm thế nào để xem quyền của một tệp duy nhất bằng icacls?

icacls "đường_dẫn_tệp". Ví dụ: icacls C:UsersAdminDocumentsreport.docx.

Icacls có thể cấp quyền cho nhiều user cùng lúc không?

Có,

/grant thêm quyền mới vào các quyền hiện có của người dùng. /grant:r thay thế hoàn toàn tất cả quyền của người dùng đó bằng quyền mới (xóa các quyền cũ).

Tôi muốn xóa kế thừa quyền và chỉ dùng quyền rõ ràng, làm sao?

Sử dụng lệnh: icacls Data /inheritance:r. Lệnh này xóa tất cả quyền kế thừa và giữ lại quyền rõ ràng. Sau đó

Thử thay đổi quyền trên một thư mục kiểm tra (không quan trọng), sau đó dùng icacls thư_mục_đó để xác nhận kết quả. Dùng tham số /Q để bỏ qua thông báo nếu script.

Có thể dùng icacls để sửa quyền registry hay không?

Không. Icacls chỉ dùng cho tệp và thư mục. Để quản lý quyền registry, dùng lệnh subinacl hoặc PowerShell.

Kết luận

Lệnh icacls trong cmd là một công cụ không thể thiếu đối với bất kỳ quản trị viên Windows nào muốn kiểm soát quyền truy cập một cách chính xác và tự động. Với khả năng cấp, từ chối, xóa quyền, quản lý kế thừa, và hỗ trợ backup ACL, nó giúp bạn tiết kiệm thời gian và giảm sai sót so với thao tác thủ công qua GUI. Tuy nhiên, cần nắm vững cú pháp, đặc biệt là các ký hiệu OI, CI, IO và sự khác biệt giữa /grant và /grant:r. Hãy luôn sao lưu ACL trước khi thay đổi và test trên môi trường không sản xuất để tránh rủi ro. Khi thành thạo, bạn sẽ dễ dàng xử lý các vấn đề phân quyền phức tạp trong doanh nghiệp.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *