Bất kể ngôn ngữ Windows, làm cách nào tôi có thể tạo lệnh ICACLS đặt thư mục để có toàn quyền truy cập cho mọi người?


9

Lý lịch

Nói rằng tôi có lệnh này

icacls C:\FullyAccessibleFolder /grant Users:(OI)(CI)F

Điều này hoạt động tốt trong các phiên bản tiếng Anh của Windows, nhưng dường như không hoạt động trong các phiên bản tiếng Pháp, gây ra lỗi sau, có lẽ là do Userstiếng Pháp khác nhau. Everyoneđược dịch như Tout le mondetrong Windows, vì vậy đó cũng không phải là một giải pháp.

Users: Le mappage entre les noms de compte et les ID de sécurité n'a pas été effectué.

Google dịch là

Users: The mapping between account names and security IDs was not performed.

Câu hỏi

Có lệnh nào tôi có thể sử dụng để đặt thư mục và đệ quy tất cả nội dung của nó để có toàn quyền cho tất cả người dùng theo cách có thể hoạt động trên các phiên bản ngôn ngữ khác nhau của Windows không?

Nội dung từ khắp nơi trên web

Trang này với một vấn đề phần lớn tương tự nói về cách Everyonetrở thành Jedertiếng Đức và Tout le mondetiếng Pháp.


2
Chỉ cần sử dụng SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F Hoạt động ở mọi nơi.
Ben

2
@Ben, lẽ ra icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)F, bạn đã bỏ dấu hoa thị.
Harry Johnston

Câu trả lời:


10

Không hoạt động trong phiên bản tiếng Pháp, có lẽ do Userskhác biệt

Bạn có ba tùy chọn, chi tiết dưới đây:

  1. Sử dụng Cổng thông tin ngôn ngữ để lấy tên dịch

  2. Lấy tên được bản địa hóa từ UsersSID

  3. Sử dụng UsersSID vớiicacls


Tùy chọn 1: Sử dụng Cổng thông tin ngôn ngữ (tài nguyên chính cho thuật ngữ Microsoft)

Một tìm kiếm cho người dùng trả về:

Bản dịch trong các sản phẩm của Microsoft được bản địa hóa

    English Translation         Product
    Users   Utilisateurs        Windows 7
    Users   des utilisateurs    Windows 7
    Users   Utilisateurs        Windows 8 Modern Voice
    Users   Utilisateurs        Windows 8
    Users   Utilisateurs        Windows 8.1
    USERS   UTILISATEURS        Windows 8.1
    Users   Utilisateurs        Windows 10
    Users   des utilisateurs    Windows 10
    Users   Utilisateurs        Windows 10 Anniversary Update
    users   utilisateurs        Windows 10 Anniversary Update

Điều này cho thấy lệnh sau có thể hoạt động:

icacls C:\FullyAccessibleFolder /grant Utilisateurs:(OI)(CI)F

Tùy chọn 2: Truy xuất tên được bản địa hóa từ UsersSID ( S-1-5-32-545)

SID: S-1-5-32-545

Tên: Người dùng

Mô tả: Một nhóm tích hợp. Sau khi cài đặt ban đầu hệ điều hành, thành viên duy nhất là nhóm Người dùng xác thực. Khi máy tính tham gia một tên miền, nhóm Người dùng miền được thêm vào nhóm Người dùng trên máy tính.

Nguồn Định danh bảo mật nổi tiếng trong các hệ điều hành Windows

Để lấy Userstên nhóm được bản địa hóa :

Tập lệnh đơn giản này sẽ cung cấp cho bạn tên thật của (S-1-5-32-545)nhóm 'Người dùng' trên một PC nhất định:

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set objAccount = objWMIService.Get ("Win32_SID.SID='S-1-5-32-545'")
    Wscript.Echo objAccount.AccountName

Đặt nó vào một tệp có phần mở rộng vbs (Giả sử usersName.vbs).

Bây giờ chạy:

echo Y|for /f "delims=" %i in ('cscript -Nologo usersName.vbs') do cacls foldername /G "%i":F

Nguồn Cacls, Windows 7, quyền đầy đủ, tên địa phương bởi wmz


Tùy chọn 3: Sử dụng UsersSID vớiicacls

Sử dụng lệnh sau:

icacls C:\FullyAccessibleFolder /grant *S-1-5-32-545:(OI)(CI)F

Nguồn bình luận của Harry Johnston


Tôi đã chấp nhận câu trả lời từ DavidPostill vì nó thực hiện theo cách dòng lệnh thực sự, rất tuyệt khi sử dụng các tập lệnh PS hoặc PS. Cuối cùng, tôi thực sự đã tạo ra một chút thực thi trong C #, nó chỉ cần một đường dẫn và thực hiện chính xác những gì tôi cần. Nó không thể tùy biến như các câu trả lời ở đây và nó yêu cầu .NET Framework, nhưng nó rất phù hợp với mục đích cụ thể của tôi. Nếu bất cứ ai quan tâm, đây là cơ sở của mã C # mà tôi đã kết thúc. stackoverflow.com/a/35461832/1639415
Geesh_SO

xcaclsdường như là một kịch bản bạn có thể tải về. Không cần; icaclsđược tích hợp vào Windows và có thể thực hiện cùng một công việc.
Harry Johnston

@HarryJohnston Đúng, nhưng câu trả lời của tôi là chỉ ra cách lấy lại phiên bản đã bản địa hóa của Users... Tôi đã làm rõ câu trả lời vì chúng tôi không cần xaclsmột phần của giải pháp được trích dẫn.
DavidPostill

@HarryJohnston Tôi cũng đã thêm sử dụng icaclstrực tiếp bằng tín dụng cho bạn.
DavidPostill

7

Bạn cần chỉ định nhóm AD không phải bằng tên của nó, mà bằng số SID.
Đối với các nhóm tiêu chuẩn như "EveryOne", "Người dùng tên miền", v.v., có các số SID được tiêu chuẩn hóa, có thể tìm thấy trên trang MSDN Số nhận dạng bảo mật nổi tiếng (SID) .

Sau đây là các định danh tương đối phổ biến nhất.

nhập mô tả hình ảnh ở đây

Cấu trúc của SID được mô tả như sau:

Các thành phần của SID dễ hình dung hơn khi SID được chuyển đổi từ định dạng nhị phân sang định dạng chuỗi bằng cách sử dụng ký hiệu chuẩn:

SRX-Y1-Y2-Yn-1-Yn

    Component                   Definition

    S                         Indicates that the string is a SID
    R                         Revision level
    X                         Identifier authority value
    Y            A series of subauthority values, where n is the number of values

Ví dụ: SID cho nhóm Quản trị viên tích hợp được trình bày theo ký hiệu SID được tiêu chuẩn hóa dưới dạng chuỗi sau:

S-1-5-32-544

SID này có bốn thành phần:

  • Cấp sửa đổi (1)

  • Giá trị thẩm quyền định danh (5, Cơ quan NT)

  • Mã định danh miền (32, Nội dung)

  • Một định danh tương đối (544, Quản trị viên)

Cách nhận dạng bảo mật hoạt động


Theo mặc định, tất cả người dùng là một phần của nhóm Người dùng. Vì vậy, nếu bạn muốn cung cấp "quyền truy cập đầy đủ: cho tất cả các tài khoản người dùng, chỉ cần sử dụng SID S-1-5-32-544, sau đó sửa đổi ACL để cung cấp tất cả các quyền cho nhóm cho tệp hoặc thư mục được đề cập
Ramhound

@Ramhound 544là Quản trị viên, 545là Người dùng.
DavidPostill

@DavidPostill - Có; Sao chép và dán lỗi.
Ramhound

@Ramhound Tốt hơn nhiều. Đó là điều tốt nhất tôi có thể làm khi đang dùng điện thoại. Cảm ơn đã chỉnh sửa.
Tonny

3

Nếu bạn thích tập lệnh PowerShell nhưng gặp khó khăn khi nhớ số cho SID:

$acl = Get-Acl .\myfolder
$sid = New-Object System.Security.Principal.SecurityIdentifier ([System.Security.Principal.WellKnownSidType]::BuiltinUsersSid, $null)
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule ($sid, 'FullControl', 'ObjectInherit,ContainerInherit', 'None', 'Allow')
$acl.AddAccessRule($rule)
Set-Acl .\myfolder $acl

Tôi biết rằng trông giống như một tấn gõ, nhưng những số nhận dạng dài này đã được hoàn thành tab:

  • System.Security.Principal.SecurityIdentifier từ securityi
  • System.Security.Principal.WellKnownSidType từ wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule từ filesystem

Tất cả các chuỗi này là định danh .NET, vì vậy chúng không được bản địa hóa.

Nếu bạn muốn EveryoneSID thay thế, sử dụng WorldSidthay thế BuiltinUsersSid. Để có danh sách tất cả các WellKnownSidTypetùy chọn, xem MSDN hoặc chạy lệnh này:

[System.Security.Principal.WellKnownSidType].DeclaredFields | select Name

FileSystemAccessRule không có Sid và sử dụng group names?
Kiquenet

@Kiquenet Tôi không hoàn toàn chắc chắn về những gì bạn đang hỏi, nhưng nếu bạn muốn chỉ định một tên nhóm có thể đọc được thì con người đó sẽ không còn độc lập với ngôn ngữ nữa. Nếu bạn ổn với điều đó, bạn có thể xóa $sid =dòng và thay thế $sidtrong $rule =dòng bằng một chuỗi xác định nhóm.
Ben N
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.