ในบทความนี้ เราจะ看看วิธีมอบสิทธิ์การจัดการในโดเมน Active Directory การมอบสิทธิ์ (Delegation) ช่วยให้คุณมอบสิทธิ์ในการดำเนินการจัดการ AD บางอย่างให้กับผู้ใช้โดเมนทั่วไป (non-admin) โดยไม่ต้องทำให้พวกเขาเป็นสมาชิกของกลุ่มโดเมนที่มีสิทธิ์พิเศษ เช่น Domain Admins, Account Operators ฯลฯ ตัวอย่างเช่น คุณสามารถใช้การมอบสิทธิ์เพื่อให้กลุ่มความปลอดภัย AD เฉพาะ (เช่น Helpdesk) มีสิทธิ์เพิ่มผู้ใช้ในกลุ่ม สร้างผู้ใช้ใหม่ใน AD และรีเซ็ตรหัสผ่านบัญชี
การเข้าใจสิทธิ์ที่มอบหมายใน Active Directory
เพื่อมอบสิทธิ์ใน AD จะใช้ Delegation of Control Wizard ใน Active Directory Users and Computers (DSA.msc)
คุณสามารถมอบสิทธิ์การจัดการใน AD ได้ในระดับที่ค่อนข้างละเอียด คุณสามารถมอบสิทธิ์ให้กลุ่มหนึ่งมีสิทธิ์รีเซ็ตรหัสผ่านใน OU อีกกลุ่มหนึ่ง – สร้างและลบบัญชีผู้ใช้ และอีกกลุ่ม – สร้างและเปลี่ยนการเป็นสมาชิกกลุ่ม คุณสามารถกำหนดการสืบทอดสิทธิ์บน OU ที่ซ้อนกันได้ สิทธิ์สามารถมอบหมายใน Active Directory ได้ในระดับต่อไปนี้:
- ไซต์ AD
- โดเมนทั้งหมด
- Organizational Unit (OU) เฉพาะใน Active Directory
- ออบเจ็กต์ AD เฉพาะ
แนวทางปฏิบัติที่ดีที่สุดสำหรับการควบคุมการมอบสิทธิ์ใน Active Directory:
- ไม่แนะนำให้มอบ (กำหนด) สิทธิ์โดยตรงให้บัญชีผู้ใช้เฉพาะ สร้างกลุ่มความปลอดภัยใหม่ใน AD แทน เพิ่มผู้ใช้เข้าไป และมอบสิทธิ์บน OU ให้กลุ่มนั้น หากคุณต้องการมอบสิทธิ์เดียวกันให้ผู้ใช้อื่น คุณเพียงแค่เพิ่มเขาเข้าไปในกลุ่มความปลอดภัยนี้
- หลีกเลี่ยงการใช้สิทธิ์ Deny เนื่องจากมีลำดับความสำคัญสูงกว่าสิทธิ์ Allow
- ตรวจสอบสิทธิ์ที่มอบหมายในโดเมนเป็นระยะ (รายงานพร้อมรายการสิทธิ์ปัจจุบันต่อ OU สามารถสร้างได้โดยใช้ PowerShell)
- อย่ามอบสิทธิ์จัดการ OU ที่มีบัญชีผู้ดูแลระบบให้ใคร มิฉะนั้น สมาชิกฝ่ายสนับสนุนใดๆ ก็สามารถรีเซ็ตรหัสผ่านโดเมนแอดมินได้ บัญชีผู้ใช้และกลุ่มที่มีสิทธิ์พิเศษทั้งหมดควรวางไว้ใน OU แยกที่ไม่อยู่ภายใต้กฎการมอบสิทธิ์
การมอบสิทธิ์รีเซ็ตรหัสผ่านและปลดล็อกบัญชีใน AD
ลองจินตนาการว่างานของคุณคือการมอบสิทธิ์ให้กลุ่ม HelpDesk สามารถรีเซ็ตรหัสผ่านและปลดล็อกบัญชีผู้ใช้ในโดเมนได้ มาสร้างกลุ่มความปลอดภัยใหม่ใน AD โดยใช้ PowerShell:
New-ADGroup "HelpDesk" -path 'OU=Groups,OU=Paris,OU=Fr,dc=woshub,DC=com' -GroupScope Global
เพิ่มผู้ใช้ที่คุณต้องการเข้าไปในกลุ่มนี้:
Add-AdGroupMember -Identity HelpDesk -Members rdroz, jdupont
รันสแนปอิน MMC Active Directory Users and Computers (dsa.msc) คลิกขวาที่ OU ที่มีผู้ใช้ (ในตัวอย่างของเราคือ 'OU=Users,OU=Paris,OU=Fr,dc=woshub,DC=com') และเลือกเมนู Delegate Control
เลือกกลุ่มที่คุณต้องการมอบสิทธิ์การจัดการ
เลือกหนึ่งในชุดสิทธิ์ที่กำหนดค่าไว้ล่วงหน้า (Delegate the following common tasks):
- สร้าง ลบ และจัดการบัญชีผู้ใช้
- รีเซ็ตรหัสผ่านผู้ใช้และบังคับเปลี่ยนรหัสผ่านครั้งถัดไปที่ล็อกอิน
- อ่านข้อมูลผู้ใช้ทั้งหมด
- สร้าง ลบ และจัดการกลุ่ม
- แก้ไขการเป็นสมาชิกของกลุ่ม
- จัดการลิงก์ Group Policy
- สร้าง Resultant Set of Policy (Planning)
- สร้าง Resultant Set of Policy (Logging)
- สร้าง ลบ และจัดการบัญชี inetOrgPerson
- รีเซ็ตรหัสผ่าน inetOrgPerson และบังคับเปลี่ยนรหัสผ่านครั้งถัดไปที่ล็อกอิน
- อ่านข้อมูล inetOrgPerson ทั้งหมด
หรือ สร้างงานที่กำหนดเองเพื่อมอบสิทธิ์ ผมเลือกตัวเลือกที่สอง
เลือกประเภทของออบเจ็กต์ AD ที่คุณต้องการมอบสิทธิ์การจัดการ เนื่องจากเราต้องการมอบควบคุมบัญชีผู้ใช้ ให้เลือก項目 User Object หากคุณต้องการมอบสิทธิ์สร้างหรือลบผู้ใช้ใน OU ให้เลือกตัวเลือก Create/Delete selected objects in this folder ในตัวอย่างของเรา เราไม่ได้มอบสิทธิ์เช่นนั้น
ในรายการสิทธิ์ ให้เลือกสิทธิ์ที่คุณต้องการมอบหมาย ในตัวอย่างของเรา เราจะเลือกสิทธิ์ปลดล็อกบัญชีผู้ใช้ (Read lockoutTime และ Write lockoutTime) และรีเซ็ตรหัสผ่าน (Reset password)
เพื่อให้ทีม HelpDesk ระบุแหล่งที่มาของการล็อกบัญชีในโดเมน คุณต้องมอบสิทธิ์ให้พวกเขาค้นหาบันทึกความปลอดภัยบนโดเมนคอนโทรลเลอร์
คลิก Next และยืนยันการมอบสิทธิ์ที่เลือกในหน้าจอสุดท้าย
ตอนนี้ ภายใต้บัญชีผู้ใช้จากกลุ่ม HelpDesk ลองรีเซ็ตรหัสผ่านของผู้ใช้จาก OU เป้าหมายโดยใช้ PowerShell:
Set-ADAccountPassword gchaufourier -Reset -NewPassword (ConvertTo-SecureString -AsPlainText "P@ssdr0w1" -Force -Verbose) –PassThru
รหัสผ่านควรจะรีเซ็ตสำเร็จ (หากตรงตามนโยบายรหัสผ่านของโดเมน)
ตอนนี้ลองสร้างผู้ใช้ใน OU นี้โดยใช้คำสั่ง New-ADUser:
New-ADUser -Name gmicheaux -Path 'OU=Users,OU=Paris,OU=FR,DC=woshub,DC=com' -Enabled $true
ข้อผิดพลาด "Access denied" ควรปรากฏ เนื่องจากคุณไม่ได้มอบสิทธิ์การสร้างบัญชี AD ใหม่
คุณสามารถใช้บันทึกความปลอดภัยของโดเมนคอนโทรลเลอร์เพื่อตรวจสอบการกระทำของผู้ที่คุณมอบสิทธิ์การจัดการ ตัวอย่างเช่น คุณสามารถติดตามว่าใครรีเซ็ตรหัสผ่านผู้ใช้ในโดเมน ใครสร้างบัญชีผู้ใช้ใน AD หรือติดตามการเปลี่ยนแปลงในกลุ่ม AD ที่ละเอียดอ่อน
การมอบสิทธิ์ให้เข้าร่วมคอมพิวเตอร์เข้าสู่โดเมน AD
ตามค่าเริ่มต้น ผู้ใช้โดเมนใดๆ สามารถเข้าร่วมคอมพิวเตอร์เข้าสู่โดเมนได้สูงสุด 10 เครื่อง เมื่อเพิ่มคอมพิวเตอร์ที่ 11 ข้อผิดพลาดจะปรากฏ:
Your computer could not be joined to the domain. You have exceeded the maximum number of computer accounts you are allowed to create in this domain. Contact your system administrator to have this limit reset or increased.
คุณสามารถเปลี่ยนข้อจำกัดนี้ในระดับโดเมนโดยเพิ่มค่าของแอตทริบิวต์ ms-DS-MachineAccountQuota หรือ (ซึ่งถูกต้องและปลอดภัยกว่า) โดยการมอบสิทธิ์ให้เข้าร่วมคอมพิวเตอร์เข้าสู่ OU เฉพาะให้กลุ่มผู้ใช้เฉพาะ (helpdesk) เพื่อทำเช่นนี้ ให้มอบสิทธิ์สร้างออบเจ็กต์ประเภท Computer objects ใน Delegation of Control Wizard ให้เลือก Create selected objects in this folder
เลือก Create All Child Objects ในส่วน Permissions
หากคุณต้องการมอบสิทธิ์ย้ายออบเจ็กต์ระหว่าง Organizational Units ใน AD คุณต้องมอบสิทธิ์ต่อไปนี้: Delete User objects, Write Distinguished Name, Write name (**), Create User (or Computer) objects
วิธีดูและลบสิทธิ์ที่มอบหมายใน Active Directory
กฎการมอบสิทธิ์จำนวนไหนก็ตามสามารถกำหนดให้ OU ใน AD ได้ คุณสามารถรับรายการกลุ่มและสิทธิ์ที่มอบหมายให้พวกเขาในคุณสมบัติของ OU ในคอนโซล ADUC ไปที่แท็บ Security
นี่ประกอบด้วยรายการผู้บริโภค AD ที่ได้รับสิทธิ์สำหรับคอนเทนเนอร์นี้ คุณสามารถดูรายการสิทธิ์ที่มอบหมายบนแท็บ Advanced ตามที่คุณเห็น กลุ่ม HelpDesk ได้รับอนุญาตให้รีเซ็ตรหัสผ่าน
คุณสามารถเพิกถอนกลุ่มสิทธิ์การจัดการเฉพาะที่มอบหมายผ่านการมอบสิทธิ์ก่อนหน้านี้ได้ ค้นหาชื่อกลุ่มที่คุณมอบสิทธิ์และคลิก Remove
นอกจากนี้ บนแท็บ Security → Advanced คุณสามารถกำหนดสิทธิ์ที่มอบหมายให้กลุ่มความปลอดภัยต่างๆ ด้วยตนเองได้
วิธีมอบสิทธิ์ใน Active Directory ด้วย PowerShell
คุณสามารถรับรายการสิทธิ์ที่มอบหมายให้ OU หรือเปลี่ยนสิทธิ์ปัจจุบันโดยใช้ PowerShell คำสั่ง Get-ACL และ Set-ACL ใช้สำหรับดูและเปลี่ยนสิทธิ์ใน Active Directory (cmdlet PowerShell เดียวกันที่ใช้จัดการสิทธิ์ NTFS บนไฟล์และโฟลเดอร์)
สคริปต์ง่ายๆ ต่อไปนี้จะแสดงรายการสิทธิ์ที่ไม่ใช่มาตรฐานทั้งหมดที่มอบหมายให้ Organizational Unit เฉพาะใน AD:
# get the OU
$OUs = Get-ADOrganizationalUnit -Filter 'DistinguishedName -eq "OU=Users,OU=Paris,DC=woshub,DC=com"'| Select-Object -ExpandProperty DistinguishedName
$schemaIDGUID = @{}
$ErrorActionPreference = 'SilentlyContinue'
Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -LDAPFilter '(schemaIDGUID=*)' -Properties name, schemaIDGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.schemaIDGUID,$_.name)}
Get-ADObject -SearchBase "CN=Extended-Rights,$((Get-ADRootDSE).configurationNamingContext)" -LDAPFilter '(objectClass=controlAccessRight)' -Properties name, rightsGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.rightsGUID,$_.name)}
$ErrorActionPreference = 'Continue'
ForEach ($OU in $OUs) {
$report += Get-Acl -Path "AD:\$OU" |
Select-Object -ExpandProperty Access |
Select-Object @{name='organizationalUnit';expression={$OU}}, `
@{name='objectTypeName';expression={if ($_.objectType.ToString() -eq '00000000-0000-0000-0000-000000000000') {'All'} Else {$schemaIDGUID.Item($_.objectType)}}}, `
@{name='inheritedObjectTypeName';expression={$schemaIDGUID.Item($_.inheritedObjectType)}}, `
*
}
# report with assigned OU permissions
คุณสามารถรับรายงานสิทธิ์ที่มอบหมายพร้อม Out-GridView แบบกราฟิกได้:
$report| where {($_.IdentityReference -notlike "*BUILTIN*") -and ($_.IdentityReference -notlike "*NT AUTHORITY*") }| Out-GridView
หรือส่งออกรายการสิทธิ์ไปยังไฟล์ CSV เพื่อการวิเคราะห์ต่อไปใน Excel (คุณสามารถเขียนข้อมูลลงไฟล์ Excel โดยตรงจากสคริปต์ PowerShell):
$report | Export-Csv -Path "C:\reports\AD_OU_Permissions.csv" –NoTypeInformation
รายงานที่ได้แสดงว่ากลุ่ม HelpDesk ได้รับมอบสิทธิ์รีเซ็ตรหัสผ่านผู้ใช้ (ObjectTypeName=User-Force-Change-Password) ใน OU
คุณสามารถใช้เครื่องมือ dsacls เพื่อมอบสิทธิ์ให้ OU เช่น:
dsacls "ou=users,ou=paris,dc=woshub,dc=com" /I:S /G "WOSHUB\HELPDESK:CA;Reset Password;user" "WOSHUB\HELPDESK:WP;pwdLastSet;user" "WOSHUB\HELPDESK:WP;lockoutTime;user
คุณยังสามารถกำหนดสิทธิ์ให้คอนเทนเนอร์ Organizational Unit โดยใช้ PowerShell (ในตัวอย่างนี้ มอบสิทธิ์รีเซ็ตรหัสผ่าน):
$ou = "AD:\OU=users,OU=Paris,DC=woshub,DC=com"
$group = Get-ADGroup helpdesk
$sid = new-object System.Security.Principal.SecurityIdentifier $group.SID
$ResetPassword = [GUID]"00299570-246d-11d0-a768-00aa006e0529"
$UserObjectType = "bf967aba-0de6-11d0-a285-00aa003049e2"
$ACL = get-acl $OU
$RuleResetPassword = New-Object System.DirectoryServices.ActiveDirectoryAccessRule ($sid, "ExtendedRight", "Allow", $ResetPassword, "Descendents", $UserObjectType)
$ACL.AddAccessRule($RuleResetPassword)
Set-Acl -Path $OU -AclObject $ACL
เช่นเดียวกัน คุณสามารถมอบสิทธิ์อื่นๆ ให้คอนเทนเนอร์องค์กร AD โดยใช้ PowerShell