Delegation of Control ile OU Bazında Yetki Devri
Yardım masasına Domain Admins vermeden parola sıfırlama ve hesap kilidi açma yetkisi veriyoruz. Delegation of Control sihirbazı, dsacls, yetki denetimi ve geri alma adımları bu rehberde.
Önceki yazıda AD DNS'i, conditional forwarder'ları ve scavenging'i yapılandırmıştık. Altyapı oturdukça günlük işler artıyor: unutulan parolalar, kilitlenen hesaplar, domain'e eklenecek yeni bilgisayarlar. Bu işleri yapan yardım masası ekibine Domain Admins yetkisi vermek, en sık yapılan ve en tehlikeli güvenlik hatalarından biridir. Bu yazıda Delegation of Control ile yalnızca gerekli yetkileri, yalnızca gerekli OU'larda devredeceğiz.
En Az Yetki İlkesi
Yetki devrinin temelinde least privilege, yani en az yetki ilkesi vardır. Bir kişi yalnızca işini yapabileceği kadar yetkiye sahip olmalıdır. Active Directory'de her nesnenin bir ACL'i (erişim listesi) vardır ve OU'ya verilen izinler kalıtım yoluyla altındaki nesnelere geçer. Delegation of Control, bu ACL'leri güvenli şekilde düzenlemenin yoludur.
Yetkiyi her zaman gruplara verin, kişilere değil. Ekipten biri ayrıldığında yalnızca grup üyeliğini kaldırırsınız; ACL'lere dokunmanız gerekmez.
Grupları Hazırlamak
Önceki yazılarda oluşturduğumuz OU yapısına bir Gruplar OU'su ekleyip yetki gruplarını oluşturalım:
New-ADOrganizationalUnit -Name "Gruplar" -Path "OU=Firma,DC=firma,DC=local"
New-ADGroup -Name "GG-Helpdesk" -GroupScope Global -GroupCategory Security `
-Path "OU=Gruplar,OU=Firma,DC=firma,DC=local" -Description "Parola sifirlama ve kilit acma"
New-ADGroup -Name "GG-PC-Ekleme" -GroupScope Global -GroupCategory Security `
-Path "OU=Gruplar,OU=Firma,DC=firma,DC=local" -Description "Bilgisayarlari domain'e ekleme"
Add-ADGroupMember -Identity "GG-Helpdesk" -Members "destek01"
Add-ADGroupMember -Identity "GG-PC-Ekleme" -Members "destek01"
Sihirbaz ile Yetki Devri
En kolay yöntem, dsa.msc (Active Directory Users and Computers) içindeki sihirbazdır:
- Başlatma:
KullanicilarOU'suna sağ tıklayıp Delegate Control seçin. - Kullanıcı veya grup: Add ile
GG-Helpdeskgrubunu ekleyin. - Görevler: Reset user passwords and force password change at next logon seçeneğini işaretleyin.
- Bitirme: Özet ekranını kontrol edip Finish deyin.
Bu görev parola sıfırlamayı ve "sonraki oturumda parolayı değiştir" ayarını içerir, ancak kilitlenen hesabın kilidini açma yetkisini içermez. Bunun için sihirbazı tekrar çalıştırıp Create a custom task to delegate seçmeniz, nesne türü olarak User objects, izin olarak Property-specific altında Read lockoutTime ve Write lockoutTime işaretlemeniz gerekir. Bu tür ince ayarlar komut satırında çok daha hızlıdır.
dsacls ile Yetki Devri
dsacls, AD nesnelerinin izinlerini komut satırından görüntüleyen ve düzenleyen araçtır. Tekrarlanabilir ve belgelenebilir olduğu için üretim ortamlarında sihirbaza tercih edilir. Aynı yetkileri dsacls ile verelim:
set OU="OU=Kullanicilar,OU=Firma,DC=firma,DC=local"
dsacls %OU% /I:S /G "FIRMA\GG-Helpdesk:CA;Reset Password;user"
dsacls %OU% /I:S /G "FIRMA\GG-Helpdesk:RPWP;pwdLastSet;user"
dsacls %OU% /I:S /G "FIRMA\GG-Helpdesk:RPWP;lockoutTime;user"
Parametrelerin anlamı:
- /I:S: İzin OU'nun kendisine değil, yalnızca altındaki nesnelere uygulanır.
- CA;Reset Password: "Reset Password" genişletilmiş hakkını (control access) verir.
- RPWP;pwdLastSet:
pwdLastSetözelliğini okuma ve yazma izni verir. "Sonraki oturumda parolayı değiştir" ayarı bu özelliği kullanır. - RPWP;lockoutTime: Hesap kilidini açmak için
lockoutTimeözelliğini sıfırlama izni verir. - user: İznin yalnızca kullanıcı nesnelerine uygulanacağını belirtir.
Bilgisayar Ekleme Yetkisi
Varsayılan olarak her domain kullanıcısı domain'e 10 bilgisayar ekleyebilir. Bu, kontrolsüz bilgisayar hesaplarına yol açar. Önce bu kotayı sıfırlayın, ardından yetkiyi yalnızca GG-PC-Ekleme grubuna ve yalnızca Bilgisayarlar OU'suna verin:
Set-ADDomain -Identity "firma.local" -Replace @{"ms-DS-MachineAccountQuota" = 0}
set PCOU="OU=Bilgisayarlar,OU=Firma,DC=firma,DC=local"
dsacls %PCOU% /I:T /G "FIRMA\GG-PC-Ekleme:CCDC;computer"
dsacls %PCOU% /I:S /G "FIRMA\GG-PC-Ekleme:CA;Reset Password;computer"
dsacls %PCOU% /I:S /G "FIRMA\GG-PC-Ekleme:WP;Account Restrictions;computer"
dsacls %PCOU% /I:S /G "FIRMA\GG-PC-Ekleme:WS;Validated write to DNS host name;computer"
dsacls %PCOU% /I:S /G "FIRMA\GG-PC-Ekleme:WS;Validated write to service principal name;computer"
CCDC bilgisayar nesnesi oluşturma ve silme iznidir. Diğer satırlar, mevcut bir bilgisayar hesabını yeniden kullanarak katılma için gereken ACL izinleridir. Komutları uyguladıktan sonra dsacls %PCOU% çıktısında GG-PC-Ekleme için eklenen izinleri kontrol edin. Ancak Ekim 2022 güncellemelerinden (KB5020276) beri hesap yeniden kullanımı ek bir kontrole tabidir: hesabı oluşturan kişi siz değilseniz ve hesabı Domain Admins oluşturmadıysa katılma 0xaac hatasıyla reddedilir. Bu durumda DC'lere uygulanan bir GPO'da Domain controller: Allow computer account re-use during domain join ilkesine güvenilir bir grubu ekleyin veya eski hesabı silip katılmayı yeniden yapın. Kullanıcılar bilgisayarı domain'e eklerken OU'yu doğrudan belirtebilir:
Add-Computer -DomainName "firma.local" -OUPath "OU=Bilgisayarlar,OU=Firma,DC=firma,DC=local" `
-Credential (Get-Credential "FIRMA\destek01") -Restart
GPO Yönetimini Devretmek
Belirli bir GPO'yu yalnızca düzenleme yetkisiyle başka bir ekibe vermek için:
Set-GPPermission -Name "KUL-Masaustu-Kisitlama" -TargetName "GG-Helpdesk" -TargetType Group -PermissionLevel GpoEdit
Bu yetki GPO'yu düzenlemeye izin verir, ancak OU'lara bağlama veya silme izni vermez.
Yetkileri Test Etmek
Yetkiyi verdiğiniz grubun bir üyesiyle test yapın. Yönetici oturumunuzu kapatmadan, farklı bir kullanıcıyla PowerShell açabilirsiniz:
runas /user:FIRMA\destek01 powershell
Açılan pencerede parola sıfırlama ve kilit açmayı deneyin:
Set-ADAccountPassword -Identity "ahmet" -Reset -NewPassword (Read-Host -AsSecureString "Yeni parola")
Set-ADUser -Identity "ahmet" -ChangePasswordAtLogon $true
Unlock-ADAccount -Identity "ahmet"
Aynı kullanıcıyla Sunucular OU'sundaki bir hesabın parolasını sıfırlamayı deneyin; Access is denied hatası almalısınız. Bu, yetkinin doğru kapsamla sınırlandığını gösterir.
Yetkileri Denetlemek ve Geri Almak
Bir OU'ya kimin hangi yetkiye sahip olduğunu görmek için dsacls veya PowerShell'in AD: sürücüsünü kullanabilirsiniz:
Import-Module ActiveDirectory
(Get-Acl "AD:\OU=Kullanicilar,OU=Firma,DC=firma,DC=local").Access |
Where-Object { $_.IdentityReference -like "*GG-Helpdesk*" } |
Select-Object IdentityReference, ActiveDirectoryRights, ObjectType, InheritanceType
Verilen tüm yetkileri tek komutla kaldırmak için:
dsacls "OU=Kullanicilar,OU=Firma,DC=firma,DC=local" /R "FIRMA\GG-Helpdesk"
Konsolda ACL'leri görmek isterseniz dsa.msc içinde View > Advanced Features seçeneğini açın; OU özelliklerinde Security sekmesi görünür hale gelir.
Grupları Katmanlı Kullanmak
Ortam büyüdükçe yetki gruplarını iki katmanda tutmak yönetimi çok kolaylaştırır. Microsoft'un önerdiği AGDLP yaklaşımında kullanıcılar global gruplara, global gruplar ise izinlerin verildiği domain local gruplara üye yapılır:
- Rol grubu (Global):
GG-Helpdeskgibi, kişinin işini tanımlar. - Yetki grubu (Domain Local):
DL-Kullanicilar-ParolaSifirlamagibi, tek bir yetkiyi tanımlar ve ACL'de yalnızca bu grup görünür.
Bu yapıda yeni bir ekip aynı yetkiye ihtiyaç duyduğunda ACL'lere hiç dokunmadan, yalnızca rol grubunu yetki grubuna üye yaparsınız. Denetim sırasında da "bu OU'da parola sıfırlama yetkisi kimde?" sorusunun cevabı tek bir grubun üyelerine bakmaktır. Küçük ortamlarda tek katman yeterli olabilir, ancak grup adlandırmasını baştan tutarlı yapmak ileride büyük kolaylık sağlar.
Sık Karşılaşılan Hatalar
- Yönetici hesaplarının parolasının sıfırlanamaması: Domain Admins gibi korumalı grupların üyeleri AdminSDHolder tarafından korunur ve OU'dan gelen izinleri saatte bir kaybeder. Bu beklenen bir davranıştır; ayrıcalıklı hesapların parolalarını yardım masası değil, yalnızca Domain Admins sıfırlamalıdır. Yönetici hesaplarını ayrı bir OU'da tutmak düzeni korur, ancak SDProp'u etkilemez.
- Yetkiyi domain köküne vermek: İzin tüm domain'e yayılır. Yetkiyi her zaman en alt uygun OU'ya verin.
- Full Control vermek: Kullanıcı ACL'leri değiştirerek kendine daha fazla yetki verebilir. Yalnızca gereken izni verin.
- Kişilere yetki vermek: Zamanla kimin neden yetkili olduğu takip edilemez. Her zaman grup kullanın.
- Kalıtımı kapalı bir alt OU: Üst OU'dan verilen izinler bu OU'ya ulaşmaz. Security > Advanced ekranında kalıtımı kontrol edin.
- MachineAccountQuota'yı unutmak: Yetki devri yapılsa bile herkes 10 bilgisayar eklemeye devam eder.
Bir sonraki yazıda AD Recycle Bin ile yanlışlıkla silinen nesneleri geri getireceğiz.