ฉันจะให้สิทธิ์แก่ผู้ใช้ในไดเรกทอรี (อ่านเขียนแก้ไข) โดยใช้บรรทัดคำสั่ง Windows ได้อย่างไร
ฉันจะให้สิทธิ์แก่ผู้ใช้ในไดเรกทอรี (อ่านเขียนแก้ไข) โดยใช้บรรทัดคำสั่ง Windows ได้อย่างไร
คำตอบ:
ตั้งแต่ Vista เป็นต้นcacls
ไป นี่คือคู่ของบรรทัดช่วยเหลือแรก:
C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.
Displays or modifies access control lists (ACLs) of files
คุณควรใช้icacls
แทน นี่คือวิธีที่คุณอนุญาตให้ John ควบคุมD:\test
โฟลเดอร์และโฟลเดอร์ย่อยทั้งหมดอย่างสมบูรณ์:
C:\>icacls "D:\test" /grant John:(OI)(CI)F /T
ทำตามเอกสาร MS:
F
= การควบคุมทั้งหมดCI
= สืบทอดคอนเทนเนอร์ - แฟล็กนี้บ่งชี้ว่าคอนเทนเนอร์ย่อยจะสืบทอด ACE นี้OI
= Object Inherit - แฟล็กนี้บ่งชี้ว่าไฟล์ย่อยจะรับช่วง ACE/T
= ใช้ซ้ำกับไฟล์และโฟลเดอร์ย่อยที่มีอยู่ ( OI
และCI
นำไปใช้กับไฟล์ใหม่และโฟลเดอร์ย่อยเท่านั้น) เครดิต: ความคิดเห็นโดย @AlexSpenceสำหรับเอกสารฉบับสมบูรณ์คุณสามารถเรียกใช้ " icacls
" โดยไม่มีอาร์กิวเมนต์หรือดูเอกสาร Microsoft ที่นี่และที่นี่
C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
คุณยังสามารถใช้ ICACLS
วิธีให้สิทธิ์กลุ่มผู้ใช้ควบคุมทั้งหมดไปยังโฟลเดอร์:
>icacls "C:\MyFolder" /grant Users:F
หากต้องการให้สิทธิ์การปรับเปลี่ยนแก่ผู้ใช้ IIS สำหรับC:\MyFolder
(หากคุณต้องการ IIS ของคุณมีความสามารถในไฟล์ R / W ในโฟลเดอร์เฉพาะ):
>icacls "C:\MyFolder" /grant IIS_IUSRS:M
ถ้าคุณทำICACLS / คุณจะสามารถเห็นตัวเลือกที่มีทั้งหมด
cacls
หายไปก็จะยิ่งมากขึ้นเหตุผลที่จะใช้icacls
/grant Users:(OI)(CI)F
ใช้แล้ว
Users
ด้วยอย่างอื่นหรือไม่? ตามที่icacls "C:\MyFolder" /grant Users:F
เปิดพรอมต์คำสั่งจากนั้นดำเนินการคำสั่งนี้:
icacls "c:\somelocation\of\path" /q /c /t /grant Users:F
F
ให้สิทธิ์การเข้าถึงแบบเต็ม
/q /c /t
ใช้การอนุญาตกับโฟลเดอร์ย่อย
หมายเหตุ: บางครั้ง "เรียกใช้ในฐานะผู้ดูแลระบบ" จะช่วยได้
ไฟล์ CACLS / e / p {USERNAME}: {PERMISSION}
ที่ไหน
/ p: ตั้งค่าการอนุญาตใหม่
/ e: แก้ไขการอนุญาตและเก็บสิทธิ์แบบเดิมไว้เช่นแก้ไข ACL แทนที่จะทำการแทนที่
{USERNAME}: ชื่อผู้ใช้
{PERMISSION}: การอนุญาตสามารถ:
R - อ่าน
W - เขียน
C - เปลี่ยน (เขียน)
F - การควบคุมเต็มรูปแบบ
ตัวอย่างเช่นให้สิทธิ์ควบคุม Rocky Full (F) ด้วยคำสั่งต่อไปนี้ (พิมพ์ที่ command prompt Windows):
C:> ไฟล์ CACLS / e / p rocky: f
อ่านวิธีใช้ที่สมบูรณ์โดยการพิมพ์คำสั่งต่อไปนี้:
C:> cacls /?
cmd.exe
ไม่ได้ถูกคัดค้านและไม่น่าจะเป็นดังนั้นจึงไม่ใช่ประเด็นที่เห็นicacls
ด้วยเลย
ฉันลองวิธีด้านล่างและใช้งานได้กับฉัน:
1. เปิดcmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4del *.* /S /Q
เพื่อให้ไฟล์สามารถเข้าใช้งานของตัวเองและมันถูกกำหนดเป็น "ลบ" จากนั้นฉันสามารถลบไฟล์และโฟลเดอร์
สิทธิ์ที่เสียหาย: การเข้าถึงโฟลเดอร์และวัตถุย่อยอีกครั้ง
แม้ว่าคำตอบส่วนใหญ่ที่โพสต์เพื่อตอบคำถามนั้นมีข้อดีอยู่บ้าง แต่ IMHO ก็ไม่มีคำตอบใดที่สมบูรณ์ ต่อไปนี้ (อาจ) โซลูชั่นที่สมบูรณ์แบบสำหรับWindows 7หากคุณถูกล็อคโฟลเดอร์โดยการตั้งค่าสิทธิ์ที่เสียหาย:
icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T
สำหรับWindows 10ต้องระบุ user / SID หลังจาก/remove:d
ตัวเลือก:
icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T
.
หมายเหตุ :
คำสั่งถูกนำไปใช้กับไดเรกทอรีที่ระบุ
การระบุผู้ใช้ "ทุกคน" ตั้งค่าการอนุญาตที่เป็นไปได้มากที่สุดเนื่องจากมีผู้ใช้ทุกคน
ตัวเลือก "/ remove: d" ลบการตั้งค่า DENY ใด ๆ ที่อาจมีอยู่เนื่องจากการแทนที่การตั้งค่า ALLOW อย่างชัดเจน: สิ่งที่จำเป็นเบื้องต้นสำหรับการสร้างการตั้งค่า ALLOW ใหม่ นี่เป็นข้อควรระวังเท่านั้นเนื่องจากไม่มีการตั้งค่า DENY อยู่บ่อยครั้ง แต่ปลอดภัยกว่าดีกว่าขออภัย
ตัวเลือก "/ Grant" สร้างการตั้งค่า ALLOW ใหม่การอนุญาตที่ชัดเจนที่จะแทนที่ (": r") การตั้งค่า ALLOW ALLOW และชัดเจนทั้งหมดที่อาจมีอยู่
พารามิเตอร์ "F" (เช่นการอนุญาตให้สร้าง) ทำให้การควบคุมแบบเต็ม
พารามิเตอร์ "/ T" เพิ่มการสอบถามซ้ำใช้การเปลี่ยนแปลงเหล่านี้กับวัตถุย่อยปัจจุบันทั้งหมดในไดเรกทอรีที่ระบุ (เช่นไฟล์และโฟลเดอร์ย่อย) เช่นเดียวกับโฟลเดอร์เอง
พารามิเตอร์ "(OI)" และ "(CI)" ยังเพิ่มการสอบถามซ้ำโดยใช้การเปลี่ยนแปลงเหล่านี้กับวัตถุย่อยที่สร้างขึ้นในภายหลัง
.
ADDENDUM (2019/02/10) -
บรรทัดคำสั่งของ Windows 10 ด้านบนได้รับการแนะนำให้ฉันวันนี้ดังนั้นนี่คือ ฉันไม่มี Windows 10 เพื่อทดสอบ แต่โปรดลองใช้ถ้าคุณมี (แล้วคุณจะโปรดโพสต์ความคิดเห็นด้านล่าง)
การเปลี่ยนแปลงนี้เกี่ยวข้องกับการนำการตั้งค่า DENY ออกเป็นขั้นตอนแรกเท่านั้น อาจไม่มีการตั้งค่า DENY ใด ๆ ดังนั้นตัวเลือกนั้นอาจไม่สร้างความแตกต่าง ความเข้าใจของฉันคือบน Windows 7 ที่คุณไม่จำเป็นต้องระบุผู้ใช้หลังจาก/ ลบ: dแต่ฉันอาจจะผิดเกี่ยวกับเรื่องนี้!
.
เพิ่ม (2019/11/21) -
ผู้ใช้astarkแนะนำให้แทนที่ทุกคนด้วยคำว่า * S-1-1-0 เพื่อให้คำสั่งเป็นภาษาที่เป็นอิสระ ฉันมี Windows ภาษาอังกฤษเท่านั้นฉันจึงไม่สามารถทดสอบข้อเสนอนี้ได้ แต่ดูเหมือนว่าสมเหตุสมผล
Invalid parameter "/remove:d"
ฉันต่อสู้กับในขณะนี้และมีเพียงการรวมคำตอบในหัวข้อนี้ทำงานให้ฉัน (บน Windows 10):
1. เปิด cmd หรือ PowerShell และไปที่โฟลเดอร์ที่มีไฟล์
2. takeown / R / F
3. icacls * / T / Grant และ: F
โชคดี!
ในกรณีที่มีคนอื่นที่สะดุดในหน้านี้ถ้าคุณต้องการสตริงสิทธิ์ต่างๆเข้าด้วยกันในคำสั่งเดียวฉันใช้สิ่งนี้:
icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)
หมายเหตุสตริง csv สำหรับสิทธิ์ต่าง ๆ
ด้วยสคริปต์ Excel vba เพื่อจัดทำและสร้างบัญชี ฉันต้องการให้สิทธิ์แบบเต็มกับโฟลเดอร์และโฟลเดอร์ย่อยที่สร้างขึ้นโดยเครื่องมือโดยใช้บัญชีผู้ดูแลระบบของเราเพื่อผู้ใช้ใหม่ของเรา
cacls มีลักษณะเช่นนี้: cacls \ FileServer \ Users \ ชื่อผู้ใช้ / e / g โดเมน \ ชื่อผู้ใช้: C
ฉันต้องการโยกย้ายรหัสนี้ไปยัง Windows 7 ขึ้นไป โซลูชันของฉันกลายเป็น:
icacls \ FileServer \ Users \ ชื่อผู้ใช้ / สิทธิ์: r โดเมน \ ชื่อผู้ใช้: (OI) (CI) F / t
/ Grant: r - ให้สิทธิ์การเข้าถึงของผู้ใช้ที่ระบุ สิทธิ์แทนที่ได้รับสิทธิ์ที่ชัดเจนก่อนหน้านี้ หากไม่มี: r การอนุญาตจะถูกเพิ่มไปยังการอนุญาตที่ชัดแจ้งใด ๆ ก่อนหน้านี้
(OI) (CI) - โฟลเดอร์โฟลเดอร์ย่อยและไฟล์
F - การเข้าถึงแบบเต็ม
/ t - ข้ามโฟลเดอร์ย่อยทั้งหมดเพื่อจับคู่ไฟล์ / ไดเรกทอรี
สิ่งนี้ทำให้ฉันมีโฟลเดอร์บนเซิร์ฟเวอร์นี้ที่ผู้ใช้สามารถเห็นโฟลเดอร์นั้นและสร้างโฟลเดอร์ย่อยเท่านั้นที่พวกเขาสามารถอ่านและเขียนไฟล์ รวมถึงสร้างโฟลเดอร์ใหม่
XCACLS.VBS เป็นสคริปต์ที่มีประสิทธิภาพมากที่จะเปลี่ยน / แก้ไขข้อมูล ACL c: \ windows \ system32 \ cscript.exe xcacls.vbs ช่วยส่งคืนสวิตช์และตัวเลือกทั้งหมด
คุณสามารถรับการแจกจ่ายอย่างเป็นทางการได้จากหน้าสนับสนุนของ Microsoft
XCACLS.VBS
สามารถพบได้?
การสร้างโฟลเดอร์จำนวนมากและการอนุญาตให้ใช้งานได้โดยใช้สคริปต์ PowerShell ด้านล่าง
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
}
หมายเหตุ: คุณต้องสร้างชื่อผู้ใช้โดเมนเดียวกันในไฟล์ csv มิฉะนั้นคุณจะได้รับปัญหาการอนุญาต
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
จุดที่ยอดเยี่ยมCălin Darie
ฉันมีสคริปต์จำนวนมากที่จะใช้ cacls ฉันย้ายพวกเขาไปที่ icacls ฉันไม่สามารถหาสคริปต์เพื่อเปลี่ยนตัวอย่างปริมาณการติดตั้งรูทเมาท์: d: \ datafolder ในที่สุดฉันก็สร้างสคริปต์ด้านล่างซึ่งเมานต์ไดรฟ์เป็นไดรฟ์ชั่วคราวจากนั้นก็ใช้วินาที จากนั้นเลิกเมานท์ เป็นวิธีเดียวที่ฉันพบว่าคุณสามารถอัพเดตความปลอดภัยของการติดตั้งรูท
1 รับโฟลเดอร์ mount GUID ไปที่ไฟล์ temp จากนั้นอ่าน GUID เพื่อเมานต์ไดรฟ์เป็นไดรฟ์ temp X: ใช้วินาทีและบันทึกการเปลี่ยนแปลงจากนั้น unmounts ไดรฟ์ข้อมูลจาก X: ไดรฟ์เท่านั้นดังนั้นโฟลเดอร์ที่เมาท์จะไม่เปลี่ยนแปลง จากนั้นวินาทีที่ใช้
นี่คือตัวอย่างของสคริปต์ของฉัน:
**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**
ฉันเป็นผู้ดูแลระบบและบางสคริปต์วางสิทธิ์ "ปฏิเสธ" ในชื่อของฉันในทุกไฟล์และโฟลเดอร์ย่อยในไดเรกทอรี การใช้icacls "D:\test" /grant John:(OI)(CI)F /T
คำสั่งไม่ทำงานเนื่องจากดูเหมือนว่าไม่ได้ลบ "ปฏิเสธ" ออกจากชื่อของฉันจากรายการนี้
สิ่งเดียวที่ใช้ได้ผลสำหรับฉันคือการรีเซ็ตสิทธิ์ทั้งหมดด้วยicacls "D:\test" /reset /T
คำสั่ง
ใน windows 10 ทำงานโดยไม่มี "c:>" และ ">"
ตัวอย่างเช่น:
F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission
cacls "เส้นทางไฟล์หรือโฟลเดอร์" / e / p ชื่อผู้ใช้: F
(เช่นนี้แก้ไขข้อผิดพลาด 2502 และ 2503)
cacls "C: \ Windows \ Temp" / e / p ชื่อผู้ใช้: F
นี่คือสิ่งที่ได้ผลสำหรับฉัน:
เปิดโฟลเดอร์ที่ปฏิเสธการเข้าถึงด้วยตนเอง
เลือกไฟล์ปฏิบัติการ / แอปพลิเคชันในโฟลเดอร์นั้น
คลิกขวาที่ภาพแล้วไปที่Properties->Compatibility
ตอนนี้ดูPrivilege LevelและตรวจสอบRun As Administrator
Change Settings for all usersคลิกที่
ปัญหาได้รับการแก้ไขแล้ว