Làm cách nào để cấp quyền cho người dùng cho một thư mục sử dụng dòng lệnh trong Windows?


Câu trả lời:


419

Kể từ Vista, caclskhông được dùng nữa. Đây là vài dòng trợ giúp đầu tiên:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.

Displays or modifies access control lists (ACLs) of files

Bạn nên sử dụng icaclsthay thế. Đây là cách bạn cấp cho John toàn quyền kiểm soát D:\testthư mục và tất cả các thư mục con của nó:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

Theo tài liệu MS:

  • F = Kiểm soát hoàn toàn
  • CI = Kế thừa vùng chứa - Cờ này biểu thị rằng các thùng chứa cấp dưới sẽ kế thừa ACE này.
  • OI = Đối tượng kế thừa - Cờ này biểu thị rằng các tệp cấp dưới sẽ kế thừa ACE.
  • /T= Áp dụng đệ quy cho các tệp và thư mục con hiện có. ( OICIchỉ áp dụng cho các tệp mới và thư mục con). Tín dụng: nhận xét của @AlexSpence.

Để có tài liệu đầy đủ, bạn có thể chạy " icacls" không có đối số hoặc xem tài liệu Microsoft tại đâyđây


4
Felipe: Các tham số (OI) và (CI) tạo ra đệ quy này
Chris Miller

22
Tôi gặp vấn đề với quyền truy cập bị từ chối khi cố gắng thay đổi quyền trong giao diện người dùng windows explorer. Thêm cờ / T vào cuối thay thế các đối tượng hiện có và có thể giải quyết vấn đề cho tôi. C:> icacls "D: \ test" / cấp John: (OI) (CI) F / T
Alex Spence

9
@AlexSpence Điểm tuyệt vời! Các / T là cần thiết để cập nhật các điều khoản của các tập tin và thư mục hiện hành . (OI) và (CI) chỉ áp dụng cho các tệp và thư mục được tạo trong tương lai.
Jesse

5
Đến từ thế giới * nix và được sử dụng để 'chown / chmod' để cấp quyền truy cập và đặt quyền thông qua CLI, chủ đề này rất hữu ích.
bgarlock

5
Nếu bạn chạy cái này trong Powershell trong Windows 10, bạn sẽ gặp lỗi về "OI không được nhận dạng". Giải pháp: Đặt đối số người dùng + perms trong dấu ngoặc kép. Ví dụ:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

Bạn cũng có thể sử dụng ICACLS.

Để cấp cho nhóm Người dùng toàn quyền kiểm soát vào một thư mục:

>icacls "C:\MyFolder" /grant Users:F

Để cấp quyền Sửa đổi cho người dùng IIS cho C:\MyFolder(nếu bạn cần IIS của bạn có khả năng R / W tệp vào thư mục cụ thể):

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

Nếu bạn làm ICACLS /? bạn sẽ có thể thấy tất cả các tùy chọn có sẵn.


Và cho rằng điều đó caclsđã biến mất, đó là lý do nhiều hơn để sử dụng icacls .
Ian Boyd

2
Thêm toàn quyền kiểm soát đã không làm việc cho tôi cho đến khi /grant Users:(OI)(CI)Fđược sử dụng
Jan Zahradník

Tôi có cần thay thế Usersbằng thứ khác hay KHÔNG? Theoicacls "C:\MyFolder" /grant Users:F
iori

Nếu người dùng hiện tại là thành viên của nhóm người dùng có tên "Người dùng" (trong Windows 7, thông thường là như vậy), thì việc cấp quyền cho nhóm đó sẽ ảnh hưởng đến quyền truy cập của người dùng hiện tại. Trong mọi trường hợp khác, thay thế tên Người dùng bằng tên thật của người dùng hiện tại (ví dụ: John), do đó: /
Grant

23

Mở một Dấu nhắc lệnh, sau đó thực hiện lệnh này:

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F cung cấp quyền truy cập đầy đủ.

/q /c /t áp dụng các quyền cho các thư mục con.

Lưu ý: Đôi khi "Chạy với tư cách Quản trị viên" sẽ giúp ích.


"Chạy như quản trị viên" là cần thiết, chỉ đơn giản là câu trả lời tốt nhất!
Jeb50

20

Sử dụng caclslệnh. Xem thông tin ở đây .

Tệp CACLS / e / p {USERNAME}: {PERMISSION}

Ở đâu,

/ p: Đặt quyền mới

/ e: Chỉnh sửa quyền và giữ quyền cũ vì đó là chỉnh sửa ACL thay vì thay thế.

{USERNAME}: Tên người dùng

{PERMISSION}: Quyền có thể là:

R - Đọc

W - Viết

C - Thay đổi (viết)

F - Kiểm soát hoàn toàn

Ví dụ: cấp quyền kiểm soát Rocky Full (F) bằng lệnh sau (gõ tại dấu nhắc lệnh của Windows):

C:> tệp CACLS / e / p rocky: f

Đọc trợ giúp hoàn chỉnh bằng cách gõ lệnh sau:

C:> cacls /?


Câu trả lời chính xác! Điều duy nhất cần lưu ý, đó là các tệp là các tệp thực tế bạn muốn thay đổi quyền trên. Có lẽ [files] hoặc {files} sẽ là một lời giải thích tốt hơn.
Connor Ross

14
Cacls bị phản đối!
Hardik Thaker

caclslà có liên quan; nó vẫn có sẵn trong Windows 10; Microsoft cũng sẽ không cmd.exeủng hộ Powershell.

1
@ Chinggis6 "vẫn còn" không có nghĩa là một ý tưởng tốt để sử dụng hoặc đề nghị người khác sử dụng. Ngoài ra, cmd.exekhông bị phản đối và không có khả năng, vì vậy đó không phải là một điểm có lợi cho icaclstất cả, hoàn toàn ngược lại.
gạch dưới

1
Tôi biết. Tôi đã không nói nếu đó là một ý tưởng tốt để sử dụng hoặc đề nghị cacls.exe. Tôi cũng không đề cập đến điều đó cmd.exeđã bị phản đối. Tôi nghĩ mọi người ít nhất nên nhận thức được sự sẵn có của nó trong các phiên bản cao hơn thậm chí chỉ để tương thích ngược hoặc bất kỳ lý do nào khác.

12

Tôi thử cách dưới đây và nó hoạt động với tôi:
1. mở cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q

Để các tệp có thể trở thành quyền truy cập của riêng tôi và nó gán cho "Xóa" và sau đó tôi có thể xóa các tệp và thư mục.


7

Quyền hỏng: Lấy lại quyền truy cập vào một thư mục và các đối tượng phụ của nó

Mặc dù hầu hết các câu trả lời được đăng trong câu trả lời cho câu hỏi đều có một số giá trị, IMHO không ai trong số họ đưa ra một giải pháp hoàn chỉnh. Sau đây (có thể) là một giải pháp hoàn hảo cho Windows 7 nếu bạn bị khóa thư mục do cài đặt quyền bị hỏng:

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T  

Đối với Windows 10 , người dùng / SID phải được chỉ định sau /remove:dtùy chọn:

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T  

.
Ghi chú :

  1. Lệnh được áp dụng cho thư mục được chỉ định.

  2. Chỉ định người dùng "Mọi người" đặt quyền rộng nhất có thể, vì nó bao gồm mọi người dùng có thể.

  3. Tùy chọn "/ remove: d" xóa mọi cài đặt DENY rõ ràng có thể tồn tại, vì các cài đặt ALLOW rõ ràng này: một bước sơ bộ cần thiết để tạo cài đặt ALLOW mới. Đây chỉ là một biện pháp phòng ngừa, vì thường không có cài đặt DENY, nhưng an toàn tốt hơn là xin lỗi.

  4. Tùy chọn "/ Grant" tạo ra cài đặt ALLOW mới, quyền rõ ràng thay thế (": r") bất kỳ và tất cả các cài đặt ALLOW rõ ràng có thể tồn tại.

  5. Tham số "F" (nghĩa là quyền được tạo) làm cho điều này được cấp quyền kiểm soát FULL.

  6. Tham số "/ T" thêm đệ quy, áp dụng các thay đổi này cho tất cả các đối tượng con hiện tại trong thư mục được chỉ định (ví dụ: tệp và thư mục con), cũng như chính thư mục.

  7. Các tham số "(OI)" và "(CI)" cũng thêm đệ quy, áp dụng các thay đổi này cho các đối tượng phụ được tạo sau đó.
    .

ĐỊA CHỈ (2019/02/10) -

Dòng lệnh Windows 10 ở trên đã được đề xuất cho tôi hôm nay, vì vậy đây là. Tôi chưa có Windows 10 để kiểm tra, nhưng vui lòng dùng thử nếu bạn có (và sau đó bạn vui lòng gửi bình luận bên dưới).

Thay đổi chỉ liên quan đến việc xóa cài đặt DENY làm bước đầu tiên. Có thể không có bất kỳ cài đặt DENY nào, vì vậy tùy chọn đó có thể không có sự khác biệt. Hiểu biết của tôi là, trên Windows 7, bạn không cần chỉ định người dùng sau / xóa: d nhưng tôi có thể sai về điều đó!

.

ĐỊA CHỈ (2019/11/21) -

Người dùng astark khuyên nên thay thế Mọi người bằng thuật ngữ * S-1-1-0 để lệnh độc lập với ngôn ngữ. Tôi chỉ có một bản cài đặt tiếng Anh của Windows, vì vậy tôi không thể kiểm tra đề xuất này, nhưng có vẻ hợp lý.


Không có điều khoản nào là cần thiết cho các quyền của INHERITED, vì các quyền EXPLICIT ghi đè lên chúng. Vì vậy, việc tạo cài đặt rõ ràng mới sẽ vô hiệu hóa mọi cài đặt được kế thừa có thể tồn tại (vì cài đặt rõ ràng mới bao gồm đệ quy).
Ed999

Invalid parameter "/remove:d"
DFSFOT

Tôi đang chạy (chỉ có thể chạy) icacls.exe trên Windows 7. Tôi không thể nhận xét, cũng không thể kiểm tra, bất kỳ thay đổi nào có thể tồn tại trên Windows 8 hoặc 10. Theo thử nghiệm của tôi trên Windows 7 64-bit, hãy xóa tùy chọn có hiệu quả để xóa cài đặt DENY. Việc sử dụng nó có thể dẫn đến một thông báo lỗi nếu KHÔNG có cài đặt từ chối, nhưng nếu không có cài đặt nào thì không thể xóa chúng.
Ed999

Việc không tái tạo chính xác dòng lệnh trong câu trả lời ban đầu của tôi (lưu cho đường dẫn thư mục) sẽ dẫn đến lỗi lệnh. Cụ thể, KHÔNG thêm bất kỳ dấu ngoặc kép nào không có trong câu trả lời của tôi. Nếu bạn bao gồm (ví dụ) tùy chọn / remove: d trong dấu ngoặc kép, tất nhiên lệnh sẽ thất bại.
Ed999

1
@DFSFOT Vâng, tôi thông cảm. Nhưng tôi sử dụng Windows 7. Với ân sủng của Chúa, tôi sẽ không bao giờ sử dụng Windows 10. Tôi muốn chuyển sang Ubuntu! Tôi nghi ngờ rằng / remove: g có thể sẽ xóa tất cả các quyền, cả các mục ALLOW và DENY (mặc dù với khả năng 'được cấp' trong ngữ cảnh này có nghĩa là chỉ ALLOW và vì vậy nó sẽ không xử lý bất kỳ mục DENY nào); trong khi đó / remove: d có lẽ sẽ chỉ xóa các mục DENY, không để lại bất kỳ mục ALLOW nào. Nhưng tất nhiên tôi không thể chắc chắn.
Ed999

5

Tôi vật lộn với điều này trong một thời gian và chỉ kết hợp các câu trả lời trong chủ đề này làm việc cho tôi (trên Windows 10):
1. Mở cmd hoặc PowerShell và đi đến thư mục với các file
2. takeown / R / F .
3. icacls * / T / cấp dan: F

Chúc may mắn!


3

Chỉ trong trường hợp có bất kỳ ai khác vấp ngã trên trang này, nếu bạn muốn xâu chuỗi các quyền khác nhau trong một lệnh, tôi đã sử dụng điều này:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

Lưu ý chuỗi csv cho các quyền khác nhau.


Cảm ơn bạn rất nhiều. Nó giúp tôi đặt quyền cho RX & RD. Trong hầu hết các ví dụ được đưa ra trong Internet đã được giải thích với / F toàn quyền, Điều này không nên xảy ra.
Mani

2

Với tập lệnh vba Excel để cung cấp và tạo tài khoản. Tôi cần cấp quyền đầy đủ cho thư mục và các thư mục con được tạo bởi công cụ bằng tài khoản 'x' của quản trị viên cho người dùng mới của chúng tôi.

cacls trông giống như thế này: cacls \ FileServer \ Users \ Username / e / g Domain \ Username: C

Tôi cần phải di chuyển mã này sang Windows 7 và hơn thế nữa. Giải pháp của tôi hóa ra là:

icacls \ FileServer \ Users \ Username / Grant: r Tên miền \ Tên người dùng: (OI) (CI) F / t

/ Grant: r - Cấp quyền truy cập người dùng được chỉ định. Quyền thay thế quyền được cấp rõ ràng trước đây. Không có: r, quyền được thêm vào bất kỳ quyền rõ ràng nào được cấp trước đó

(OI) (CI) - Thư mục này, thư mục con và tệp.

F - Truy cập đầy đủ

/ t - Di chuyển tất cả các thư mục con để khớp với tệp / thư mục.

Thứ này mang lại cho tôi là một thư mục trên máy chủ này mà người dùng chỉ có thể nhìn thấy thư mục đó và tạo các thư mục con, rằng họ có thể đọc và ghi tệp. Cũng như tạo các thư mục mới.


1

XCACLS.VBS là một tập lệnh rất mạnh sẽ thay đổi / chỉnh sửa thông tin ACL. c: \ windows \ system32 \ cscript.exe xcacls.vbs giúp trả về tất cả các công tắc và tùy chọn.

Bạn có thể nhận phân phối chính thức từ Trang hỗ trợ của Microsoft


3
Bạn có thể cung cấp một tài liệu tham khảo nơi XCACLS.VBScó thể được tìm thấy?
Jeremy J Starcher

1

Tạo thư mục hàng loạt và cấp quyền cho tôi hoạt động bằng cách sử dụng tập lệnh powershell bên dưới.

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
    $username = $_.foldername 

    # foldername is the header of csv file

    $domain = “example.com”

    $folder= "D:\Users"

    $domainusername = $domain+“\”+$username

    New-Item $folder\$username –Type Directory

    Get-Acl $folder\$username  

    $acl = Get-Acl $folder\$username

    $acl.SetAccessRuleProtection($True, $False)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    $rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
    $acl.AddAccessRule($rule)

    Set-Acl $folder\$username $acl
}

Lưu ý: Bạn phải tạo cùng tên người dùng trong tệp csv nếu không bạn sẽ gặp sự cố về quyền


0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide

2
Đó là các thuộc tính của tệp (chỉ đọc, lưu trữ, hệ thống, ẩn) không phải là quyền, được liên kết với tài khoản người dùng.
Robin Bennett

0

điểm tuyệt vời Călin Darie

Tôi đã có rất nhiều tập lệnh để sử dụng cacls Tôi chuyển chúng sang icacls bao giờ tôi không thể tìm thấy tập lệnh để thay đổi ví dụ về khối lượng gốc: d: \ datafolder. Cuối cùng tôi đã viết kịch bản bên dưới, gắn kết âm lượng như một ổ đĩa tạm thời sau đó áp dụng giây. sau đó ngắt kết nối nó Đó là cách duy nhất tôi thấy rằng bạn có thể cập nhật bảo mật root.

1 lấy thư mục gắn GUID vào tệp tạm thời sau đó đọc GUID để gắn âm lượng dưới dạng ổ tạm thời X: áp dụng giây và ghi lại các thay đổi sau đó ngắt kết nối Âm lượng từ ổ X: để thư mục được gắn không bị thay đổi hoặc bị gián đoạn khác sau đó giây áp dụng.

đây là mẫu kịch bản của tôi:

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I 
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**

0

Tôi là Quản trị viên và một số tập lệnh đã cho phép "Từ chối" tên của tôi trên tất cả các tệp và thư mục con trong một thư mục. Thực thi icacls "D:\test" /grant John:(OI)(CI)F /Tlệnh không hoạt động, vì dường như nó không xóa "Từ chối" ngay từ tên của tôi khỏi danh sách này.

Điều duy nhất làm việc cho tôi là đặt lại tất cả các quyền với icacls "D:\test" /reset /Tlệnh.


Có thể khắc phục sự cố mà không cần sử dụng lệnh đặt lại, bằng cách chỉ định '' / remove: d '' để xóa mọi cài đặt DENY rõ ràng có thể tồn tại - xem giải pháp hoàn hảo của tôi (ở trên).
Ed999

-1

trong windows 10 hoạt động mà không có "c:>" và ">"

Ví dụ:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

cacls "đường dẫn tệp hoặc thư mục" / e / p Tên người dùng: F

(cũng sửa lỗi này 2502 và 2503)

cacls "C: \ Windows \ Temp" / e / p Tên người dùng: F


-5

Đây là những gì làm việc cho tôi:

  1. Mở thủ công thư mục truy cập bị từ chối.

  2. Chọn tập tin thực thi / ứng dụng trong thư mục đó.

  3. Nhấp chuột phải vào nó và đi đến Properties->Compatibility

  4. Bây giờ hãy xem Privilege Levelvà kiểm tra nó choRun As Administrator

  5. Bấm vào Change Settings for all users.

Vấn đề được giải quyết ngay bây giờ.


Câu hỏi là để thực hiện các máng trên dòng lệnh. Mặc dù đề xuất của bạn có thể hoạt động tốt, nhưng nó không thể áp dụng nếu bạn chỉ có quyền truy cập đầu cuối (ssh) đến một máy chủ cần được thiết lập, do đó bạn sẽ cần sử dụng tập lệnh cmd
Ivaylo Slavov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.