Trong bài viết này, chúng ta sẽ xem cách ủy quyền quyền quản trị trong domain Active Directory. Ủy quyền cho phép bạn cấp quyền thực hiện một số tác vụ quản trị AD cho người dùng domain thông thường (non-admin) mà không cần làm cho họ thành viên của các nhóm domain đặc quyền, như Domain Admins, Account Operators, v.v. Ví dụ, bạn có thể dùng ủy quyền để cấp cho một nhóm bảo mật AD nhất định (ví dụ, Helpdesk) quyền thêm người dùng vào nhóm, tạo người dùng mới trong AD, và đặt lại mật khẩu tài khoản.
Hiểu về quyền ủy quyền Active Directory
Để ủy quyền trong AD, Delegation of Control Wizard trong Active Directory Users and Computers (DSA.msc) được sử dụng.
Bạn có thể ủy quyền đặc quyền quản trị trong AD ở mức độ khá chi tiết. Bạn có thể cấp cho một nhóm quyền đặt lại mật khẩu trong OU, nhóm khác – tạo và xóa tài khoản người dùng, và nhóm thứ ba – tạo và thay đổi thành viên nhóm. Bạn có thể cấu hình kế thừa quyền trên các OU lồng nhau. Quyền có thể được ủy quyền trong Active Directory ở các cấp sau:
- AD site;
- Toàn bộ domain;
- Một Organizational Unit (OU) cụ thể trong Active Directory;
- Một đối tượng AD cụ thể.
Các phương pháp hay nhất cho kiểm soát ủy quyền trong Active Directory:
- Không khuyến khích ủy quyền (gán) quyền trực tiếp cho tài khoản người dùng cụ thể. Hãy tạo nhóm bảo mật mới trong AD thay vào đó, thêm người dùng vào nó, và ủy quyền quyền trên OU cho nhóm đó. Nếu bạn muốn cấp cùng quyền cho người dùng khác, bạn chỉ cần thêm họ vào nhóm bảo mật này;
- Tránh sử dụng quyền Deny (Từ chối), vì chúng có độ ưu tiên cao hơn quyền Allow (Cho phép);
- Kiểm tra định kỳ các quyền ủy quyền trong domain (báo cáo với danh sách quyền hiện tại cho mỗi OU có thể được tạo bằng PowerShell);
- Không cấp cho bất kỳ ai quyền quản lý OU chứa tài khoản quản trị viên. Nếu không, bất kỳ nhân viên hỗ trợ nào cũng có thể đặt lại mật khẩu domain administrator. Tất cả người dùng và nhóm đặc quyền nên được đặt vào một OU riêng biệt không bị áp dụng quy tắc ủy quyền.
Ủy quyền quyền đặt lại mật khẩu và mở khóa tài khoản trong AD
Hãy tưởng tượng nhiệm vụ của bạn là cấp cho nhóm HelpDesk quyền đặt lại mật khẩu và mở khóa tài khoản người dùng trong domain. Hãy tạo nhóm bảo mật mới trong AD bằng PowerShell:
New-ADGroup "HelpDesk" -path 'OU=Groups,OU=Paris,OU=Fr,dc=woshub,DC=com' -GroupScope Global
Thêm người dùng bạn muốn vào nhóm này:
Add-AdGroupMember -Identity HelpDesk -Members rdroz, jdupont
Chạy snap-in mmc Active Directory Users and Computers (dsa.msc), nhấp chuột phải vào OU chứa người dùng (trong ví dụ của chúng ta là 'OU=Users,OU=Paris,OU=Fr,dc=woshub,DC=com'), và chọn mục menu Delegate Control.

Chọn nhóm bạn muốn cấp đặc quyền quản trị.

Chọn một trong các bộ đặc quyền được cấu hình sẵn (Delegate the following common tasks):
- Create, delete, and manage user accounts (Tạo, xóa và quản lý tài khoản người dùng);
- Reset user passwords and force password change at next logon (Đặt lại mật khẩu người dùng và buộc thay đổi mật khẩu tại lần đăng nhập tiếp theo);
- Read all user information (Đọc tất cả thông tin người dùng);
- Create, delete and manage groups (Tạo, xóa và quản lý nhóm);
- Modify the membership of a group (Sửa đổi thành viên nhóm);
- Manage Group Policy links (Quản lý liên kết Group Policy);
- Generate Resultant Set of Policy (Planning) (Tạo Kết quả chính sách kết quả - Lập kế hoạch);
- Generate Resultant Set of Policy (Logging) (Tạo Kết quả chính sách kết quả - Ghi log);
- Create, delete, and manage inetOrgPerson accounts (Tạo, xóa và quản lý tài khoản inetOrgPerson);
- Reset inetOrgPerson passwords and force password change at next logon (Đặt lại mật khẩu inetOrgPerson và buộc thay đổi mật khẩu tại lần đăng nhập tiếp theo);
- Read all inetOrgPerson information (Đọc tất cả thông tin inetOrgPerson).
Hoặc tạo tác vụ tùy chỉnh để ủy quyền. Tôi chọn tùy chọn thứ hai.

Chọn loại đối tượng AD bạn muốn cấp quyền quản trị. Vì chúng ta muốn cấp kiểm soát đối với tài khoản người dùng, chọn mục User Object. Nếu bạn muốn cấp quyền tạo hoặc xóa người dùng trong OU, chọn tùy chọn Create/Delete selected objects in this folder. Trong ví dụ của chúng ta, chúng ta không cấp đặc quyền như vậy.

Trong danh sách quyền, chọn những quyền bạn muốn ủy quyền. Trong ví dụ của chúng ta, chúng ta sẽ chọn đặc quyền mở khóa tài khoản người dùng (Read lockoutTime và Write lockoutTime) và đặt lại mật khẩu (Reset password).
Để đội HelpDesk xác định nguồn khóa tài khoản trong domain, bạn phải cấp cho họ quyền tìm kiếm log bảo mật trên bộ điều khiển domain.

Nhấn Next, và xác nhận ủy quyền các quyền đã chọn trên màn hình cuối cùng.

Bây giờ, dưới tài khoản người dùng từ nhóm HelpDesk, thử đặt lại mật khẩu của người dùng từ OU đích bằng PowerShell:
Set-ADAccountPassword gchaufourier -Reset -NewPassword (ConvertTo-SecureString -AsPlainText “P@ssdr0w1” -Force -Verbose) –PassThru
Mật khẩu nên được đặt lại thành công (nếu nó khớp với chính sách mật khẩu domain).
Bây giờ thử tạo người dùng trong OU này bằng cmdlet New-ADUser:
New-ADUser -Name gmicheaux -Path 'OU=Users,OU=Paris,OU=FR,DC=woshub,DC=com' -Enabled $true
Lỗi truy cập bị từ chối nên xuất hiện vì bạn chưa ủy quyền quyền tạo tài khoản AD mới.
Bạn có thể dùng log bảo mật bộ điều khiển domain để kiểm tra hành động của người dùng mà bạn đã ủy quyền quyền quản trị. Ví dụ, bạn có thể theo dõi ai đã đặt lại mật khẩu người dùng trong domain, ai đã tạo tài khoản người dùng trong AD, hoặc theo dõi thay đổi trong nhóm AD nhạy cảm.
Ủy quyền quyền tham gia máy tính vào domain AD
Mặc định, bất kỳ người dùng domain nào cũng có thể tham gia tối đa 10 máy tính vào domain. Khi thêm máy tính thứ 11, lỗi sẽ xuất hiện:
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.

Bạn có thể thay đổi hạn chế này ở cấp domain-wide bằng cách tăng giá trị thuộc tính ms-DS-MachineAccountQuota. Hoặc (đúng và an toàn hơn) bằng cách ủy quyền quyền tham gia máy tính vào một OU cụ thể cho một nhóm người dùng cụ thể (helpdesk). Để làm điều này, ủy quyền quyền tạo đối tượng loại Computer objects. Trong Delegation of Control Wizard, chọn Create selected objects in this folder.

Chọn Create All Child Objects trong phần Permissions.

Nếu bạn muốn ủy quyền quyền di chuyển đối tượng giữa các Organizational Unit trong AD, bạn phải cấp các quyền sau: Delete User objects, Write Distinguished Name, Write name (**), Create User (hoặc Computer) objects.
Cách xem và xóa quyền ủy quyền trong Active Directory?
Bất kỳ số lượng quy tắc ủy quyền nào cũng có thể được gán cho một OU trong AD. Bạn có thể lấy danh sách nhóm và quyền được ủy quyền cho chúng trong thuộc tính OU trong bảng điều khiển ADUC. Đi đến tab Security.
Đây chứa danh sách chủ thể AD đã được cấp quyền cho container này. Bạn có thể thấy danh sách quyền được cấp trên tab Advanced. Như bạn thấy, nhóm HelpDesk được phép đặt lại mật khẩu.

Bạn có thể thu hồi một nhóm quyền quản trị cụ thể đã được gán trước đó qua ủy quyền. Tìm tên nhóm bạn đã ủy quyền và nhấn Remove.
Ngoài ra, trên tab Security -> Advanced bạn có thể gán thủ công quyền ủy quyền cho các nhóm bảo mật khác nhau.
Cách ủy quyền trong Active Directory bằng PowerShell?
Bạn có thể lấy danh sách quyền được ủy quyền cho OU hoặc thay đổi quyền hiện tại bằng PowerShell. Cmdlet Get-ACL và Set-ACL được dùng để xem và thay đổi quyền trong Active Directory (cùng cmdlet PowerShell này được dùng để quản lý quyền NTFS trên file và thư mục).
Script đơn giản sau sẽ liệt kê tất cả quyền phi tiêu chuẩn được ủy quyền cho một organizational unit cụ thể trong 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
Bạn có thể lấy báo cáo quyền ủy quyền với cmdlet Out-GridView đồ họa:
$report| where {($_.IdentityReference -notlike "*BUILTIN*") -and ($_.IdentityReference -notlike "*NT AUTHORITY*") }| Out-GridView
Hoặc xuất danh sách quyền ra file CSV để phân tích thêm trong Excel (bạn có thể ghi dữ liệu trực tiếp vào file Excel từ script PowerShell):
$report | Export-Csv -Path "C:\reports\AD_OU_Permissions.csv" –NoTypeInformation
Báo cáo kết quả cho thấy nhóm HelpDesk đã được ủy quyền đặt lại mật khẩu người dùng (ObjectTypeName=User-Force-Change-Password) trong OU.

Bạn có thể dùng công cụ dsacls để ủy quyền quyền cho OU. Ví dụ:
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
Bạn cũng có thể gán quyền cho container Organizational Unit bằng PowerShell (trong ví dụ này, quyền đặt lại mật khẩu được ủy quyền):
$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
Tương tự, bạn có thể ủy quyền các quyền khác cho container tổ chức AD bằng PowerShell.