ไม่ว่าจะใช้ภาษา Windows ใดฉันจะทำให้คำสั่ง ICACLS ตั้งค่าโฟลเดอร์ให้เข้าถึงทุกคนได้อย่างสมบูรณ์ได้อย่างไร


9

พื้นหลัง

บอกว่าฉันมีคำสั่งนี้

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

สิ่งนี้ทำงานได้ดีใน Windows รุ่นภาษาอังกฤษ แต่ดูเหมือนจะไม่ทำงานในเวอร์ชันภาษาฝรั่งเศสทำให้เกิดข้อผิดพลาดดังต่อไปนี้เนื่องจากอาจUsersแตกต่างกันในภาษาฝรั่งเศส Everyoneได้รับการแปลTout le mondeใน Windows ดังนั้นจึงไม่ใช่วิธีแก้ปัญหาเช่นกัน

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

ซึ่ง Google แปลว่า

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

คำถาม

มีคำสั่งที่ฉันสามารถใช้เพื่อตั้งค่าโฟลเดอร์และเนื้อหาทั้งหมดของมันซ้ำ ๆ เพื่อให้มีสิทธิ์แบบเต็มสำหรับผู้ใช้ทุกคนในวิธีที่จะทำงานกับ Windows รุ่นภาษาอื่นหรือไม่

เนื้อหาจากในเว็บ

หน้านี้มีปัญหาคล้ายกันส่วนใหญ่พูดถึงวิธีที่Everyoneจะกลายเป็นJederภาษาเยอรมันและTout le mondeภาษาฝรั่งเศส


2
เพียงใช้ SID: icacls C:\FullyAccessibleFolder /grant S-1-5-32-545:(OI)(CI)F ทำงานได้ทุกที่
เบ็น

2
@Ben นั่นควรจะเป็น icacls C:\folder /grant *S-1-5-32-545:(OI)(CI)Fทิ้งเครื่องหมายดอกจันไว้
Harry Johnston

คำตอบ:


10

ไม่ทำงานในเวอร์ชันภาษาฝรั่งเศสน่าจะเกิดจากUsersความแตกต่าง

คุณมีสามตัวเลือกโดยมีรายละเอียดด้านล่าง:

  1. ใช้ใช้พอร์ทัลภาษาเพื่อรับชื่อที่แปลแล้ว

  2. ดึงชื่อที่แปลแล้วจากUsersSID

  3. ใช้ Users SID ด้วยicacls


ตัวเลือก 1: ใช้พอร์ทัลภาษา (ทรัพยากรมาตรฐานสำหรับคำศัพท์ของ Microsoft)

การค้นหาผู้ใช้ส่งคืน:

การแปลในผลิตภัณฑ์ Microsoft ที่แปลเป็นภาษาท้องถิ่น

    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

นี่เป็นการแนะนำคำสั่งต่อไปนี้ที่อาจใช้งานได้:

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

ตัวเลือก 2: ดึงชื่อที่แปลแล้วจาก Users SID ( S-1-5-32-545)

SID: S-1-5-32-545

ชื่อ: ผู้ใช้

คำอธิบาย: กลุ่มที่มีอยู่แล้ว หลังจากการติดตั้งครั้งแรกของระบบปฏิบัติการสมาชิกเท่านั้นคือกลุ่มผู้ใช้ที่ได้รับการรับรองความถูกต้อง เมื่อคอมพิวเตอร์เข้าร่วมโดเมนกลุ่มผู้ใช้โดเมนจะถูกเพิ่มไปยังกลุ่มผู้ใช้บนคอมพิวเตอร์

ซอร์สตัวบ่งชี้ความปลอดภัยที่รู้จักกันดีในระบบปฏิบัติการ Windows

ในการดึงUsersชื่อกลุ่มที่แปลเป็นภาษาท้องถิ่น:

สคริปต์ง่าย ๆ นี้จะให้ชื่อจริงของ(S-1-5-32-545)กลุ่ม'ผู้ใช้' บนพีซีที่ระบุ:

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

ใส่ลงในไฟล์ที่มีนามสกุล vbs (ลองสมมติ usersName.vbs)

ตอนนี้ทำงาน:

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

Caclsต้นฉบับ, Windows 7, การอนุญาตแบบเต็ม, ชื่อท้องถิ่นโดยwmz


ตัวเลือก 3: ใช้UsersSID ด้วยicacls

ใช้คำสั่งต่อไปนี้:

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

ความคิดเห็นแหล่งที่มาโดยHarry Johnston


ฉันยอมรับคำตอบจาก DavidPostill เช่นเดียวกับที่ใช้ในบรรทัดคำสั่งจริงซึ่งยอดเยี่ยมเมื่อใช้แบตช์หรือสคริปต์ PS ในที่สุดฉันก็สร้างไฟล์ปฏิบัติการเล็ก ๆ น้อย ๆ ใน C # ซึ่งใช้เส้นทางและทำสิ่งที่ฉันต้องการ มันไม่ได้ปรับแต่งได้เหมือนคำตอบที่นี่และมันต้องใช้. NET Framework แต่มันเหมาะกับวัตถุประสงค์เฉพาะของฉันเป็นอย่างดี หากใครสนใจนี่คือพื้นฐานของรหัส C # ที่ฉันลงเอยด้วย stackoverflow.com/a/35461832/1639615
Geesh_SO

xcaclsดูเหมือนจะเป็นสคริปต์ที่คุณสามารถดาวน์โหลดได้ ไม่จำเป็นต้องมี; icaclsสร้างขึ้นใน Windows และสามารถทำงานเดียวกันได้
Harry Johnston

@HarryJohnston ถูกต้อง แต่คำตอบของฉันแสดงวิธีดึงเวอร์ชันที่แปลเป็นภาษาท้องถิ่นของUsers... ฉันได้ชี้แจงคำตอบเนื่องจากเราไม่ต้องการxaclsส่วนหนึ่งของโซลูชันที่ยกมา
DavidPostill

@HarryJohnston ฉันได้เพิ่มการใช้งานicaclsโดยตรงพร้อมเครดิตให้คุณ
DavidPostill

7

คุณต้องระบุกลุ่มโฆษณาที่ไม่ได้ใช้ชื่อ แต่ตามหมายเลข SID
สำหรับกลุ่มมาตรฐานเช่น "EveryOne", "Domain Users" ฯลฯ มีหมายเลข SID ที่เป็นมาตรฐานซึ่งสามารถพบได้ในหน้า MSDN ตัวระบุความปลอดภัยที่รู้จักกันดี (SID)(sid)

ต่อไปนี้เป็นตัวระบุที่สัมพันธ์กันโดยทั่วไป

ป้อนคำอธิบายรูปภาพที่นี่

โครงสร้างของ SID มีการอธิบายดังต่อไปนี้:

ส่วนประกอบของ SID นั้นจะมองเห็นได้ง่ายขึ้นเมื่อ SID ถูกแปลงจากรูปแบบไบนารีเป็นสตริงโดยใช้สัญกรณ์มาตรฐาน:

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

ตัวอย่างเช่น SID สำหรับกลุ่มผู้ดูแลระบบในตัวจะแสดงในสัญกรณ์ SID มาตรฐานเป็นสตริงต่อไปนี้:

S-1-5-32-544

SID นี้มีสี่องค์ประกอบ:

  • ระดับการแก้ไข (1)

  • ค่าการระบุตัวตน (ผู้มีอำนาจ 5, NT Authority)

  • ตัวระบุโดเมน (32, Builtin)

  • ตัวบ่งชี้ที่เกี่ยวข้อง (544 ผู้ดูแลระบบ)

ตัวระบุความปลอดภัยทำงานอย่างไร


เป็นค่าชี้ให้เห็นว่าผู้ใช้ทั้งหมดเป็นส่วนหนึ่งของกลุ่มผู้ใช้โดยค่าเริ่มต้น ดังนั้นหากคุณต้องการให้ "การเข้าถึงแบบเต็ม: กับบัญชีผู้ใช้ทั้งหมดเพียงแค่ใช้ SID S-1-5-32-544จากนั้นแก้ไข ACL เพื่อให้สิทธิ์ทั้งหมดแก่กลุ่มสำหรับไฟล์หรือโฟลเดอร์ที่มีปัญหา
Ramhound

@Ramhound 544คือผู้ดูแลระบบ545คือผู้ใช้
DavidPostill

@DavidPostill - ใช่; คัดลอกและวางข้อผิดพลาด
Ramhound

@ Ramound ดีกว่ามาก มันเป็นสิ่งที่ดีที่สุดที่ฉันสามารถทำได้ในขณะที่ใช้โทรศัพท์ ขอบคุณสำหรับการแก้ไข
Tonny

3

หากคุณชอบสคริปต์ PowerShell แต่มีปัญหาในการจำหมายเลขสำหรับ 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

ฉันรู้ว่าดูเหมือนเป็นตัน แต่ตัวระบุแบบยาวเหล่านี้เสร็จสมบูรณ์ด้วยแท็บ:

  • System.Security.Principal.SecurityIdentifier จาก securityi
  • System.Security.Principal.WellKnownSidType จาก wellknownsi
  • System.Security.AccessControl.FileSystemAccessRule จาก filesystem

สตริงทั้งหมดเหล่านี้เป็น. NET identifiers ดังนั้นจึงไม่ได้รับการแปล

ถ้าคุณต้องการEveryoneSID แทนที่จะใช้ในสถานที่ของWorldSid BuiltinUsersSidในการรับรายการWellKnownSidTypeตัวเลือกทั้งหมดดู MSDNหรือเรียกใช้คำสั่งนี้:

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

FileSystemAccessRuleโดยไม่มีSidและใช้group names?
Kiquenet

@Kiquenet ฉันไม่แน่ใจทั้งหมดว่าคุณถามอะไร แต่ถ้าคุณต้องการระบุชื่อกลุ่มที่มนุษย์อ่านได้นั่นจะไม่เป็นภาษาอื่นอีกต่อไป หากคุณตกลงกับสิ่งนั้นคุณสามารถลบ$sid =บรรทัดและแทนที่$sidใน$rule =บรรทัดด้วยสตริงที่ระบุกลุ่ม
Ben N
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.