Active Directory Users and Computers (ADUC) konsolunda bir kullanıcı hesabının özelliklerini düzenlemeye çalışırken, "User must change password at next logon" seçeneğinin işaretini kaldıramama veya değiştirememe durumu ile karşılaşabilirsiniz
Active Directory Users and Computers (ADUC) konsolunda bir kullanıcı hesabının özelliklerini düzenlemeye çalışırken, "User must change password at next logon" seçeneğinin işaretini kaldıramama veya değiştirememe durumu ile karşılaşabilirsiniz. Bu sorun genellikle yetki eksikliğinden kaynaklanır, ancak arka planda çok daha karmaşık bir güvenlik mekanizması çalışıyor olabilir.
Bu yazıda, böyle bir sorunla karşılaştığımızda nasıl teşhis edeceğimizi ve çözeceğimizi adım adım inceleyeceğiz.
İlk Teşhis: PowerShell ile Deneme
GUI üzerinden değişiklik yapamadığınızda, PowerShell kullanarak sorunu daha detaylı teşhis edebilirsiniz:
Set-ADUser -Identity "jdoe" -ChangePasswordAtLogon $false
Bu komutu çalıştırdığınızda şu hatayı alıyorsanız, sorun yetki eksikliğidir:
Set-ADUser : Insufficient access rights to perform the operation
At line:1 char:1
+ Set-ADUser -Identity "jdoe" -ChangePasswordAtLogon $false
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (jdoe:ADUser) [Set-ADUser], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8344,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Derin Teşhis: AdminCount Kontrolü
"Insufficient access rights" hatası aldığınızda, kullanıcının özel bir koruma altında olup olmadığını kontrol etmelisiniz. Bunun için aşağıdaki komutu kullanın:
Get-ADUser -Identity "jdoe" -Properties ProtectedFromAccidentalDeletion, adminCount
Örnek çıktı:
adminCount : 1
DistinguishedName : CN=John Doe,OU=IT,OU=Headquarters,DC=company,DC=local
Enabled : True
GivenName : John
Name : John Doe
ObjectClass : user
ObjectGUID : c70338ac-0a5e-4f12-8852-d56596ccdb57
ProtectedFromAccidentalDeletion : False
SamAccountName : jdoe
SID : S-1-5-21-938383202-2505302177-1015948312-13583
Surname : Doe
UserPrincipalName : jdoe@company.local
Kritik Nokta: adminCount = 1
Eğer adminCount : 1 değerini görüyorsanız, işte sorunun asıl kaynağı budur!
AdminSDHolder Nedir?
AdminSDHolder, Active Directory'de ayrıcalıklı (privileged) kullanıcıları ve grupları korumak için tasarlanmış otomatik bir güvenlik mekanizmasıdır.
Nasıl Çalışır?
- Korunan Gruplar: Domain Admins, Enterprise Admins, Schema Admins, Backup Operators gibi kritik gruplar
- SDProp (Security Descriptor Propagator): Her 60 dakikada bir çalışan bir işlem
- İzin Sıfırlama: Bu grupların üyelerinin izinlerini AdminSDHolder nesnesindeki şablona göre sıfırlar
- adminCount Bayrağı: Bir kullanıcı bu gruplara eklendiğinde
adminCount = 1olarak işaretlenir
Sorun Neden Oluşuyor?
AdminSDHolder mekanizması, korumalı kullanıcıların izinlerini kısıtlar ve sadece Domain Admin gibi en yüksek yetkili hesapların bu kullanıcılar üzerinde değişiklik yapmasına izin verir. Bu, güvenlik için tasarlanmış bir özelliktir, ancak bazen istenmeyen sonuçlar doğurabilir.
Sorunun Çözümü
Çözüm 1: Domain Admin Hesabıyla İşlem Yapın
En basit ve en güvenli çözüm, tam yetkili bir Domain Admin hesabı kullanmaktır:
# Domain Admin hesabıyla oturum açın ve tekrar deneyin
Set-ADUser -Identity "jdoe" -ChangePasswordAtLogon $false
Çözüm 2: Kullanıcının Grup Üyeliklerini Kontrol Edin
Kullanıcının hangi ayrıcalıklı gruplarda olduğunu kontrol edin:
Get-ADUser -Identity "jdoe" -Properties MemberOf | Select-Object -ExpandProperty MemberOf
Eğer kullanıcı artık kritik gruplardan birinde değilse (örneğin daha önce Domain Admins'te iken çıkarılmışsa) ancak adminCount hala 1 ise, manuel düzeltme yapabilirsiniz.
Çözüm 3: adminCount Değerini Sıfırlayın (DİKKATLİ!)
⚠️ UYARI: Bu işlemi yapmadan önce mutlaka kullanıcının gerçekten ayrıcalıklı bir grupta olup olmadığını kontrol edin!
# adminCount değerini temizle
Set-ADUser -Identity "jdoe" -Clear adminCount
# Varsayılan DACL'i geri yükle
dsacls "CN=John Doe,OU=IT,OU=Headquarters,DC=company,DC=local" /resetDefaultDACL
Bu işlemlerden sonra tekrar deneyin:
Set-ADUser -Identity "jdoe" -ChangePasswordAtLogon $false
Çözüm 4: Kimlik Doğrulama ile PowerShell Kullanımı
Eğer farklı kimlik bilgileri kullanmanız gerekiyorsa:
$cred = Get-Credential
Set-ADUser -Identity "jdoe" -ChangePasswordAtLogon $false -Credential $cred
Yetki Kontrolü Nasıl Yapılır?
Mevcut oturumunuzun yetkilerini kontrol etmek için:
# Hangi hesapla oturum açtığınızı göster
whoami
# Domain Admins grubunda olup olmadığınızı kontrol et
whoami /groups | findstr "Domain Admins"
# Tüm grup üyeliklerinizi listele
whoami /groups
En İyi Uygulama Önerileri
1. Least Privilege Prensibi
Normal kullanıcıları gereksiz yere ayrıcalıklı gruplara eklemeyin. Geçici yetki gerekiyorsa, işlem bittiğinde gruptan çıkarın.
2. adminCount Temizliği
Ayrıcalıklı gruplardan çıkarılan kullanıcıların adminCount değerlerini periyodik olarak kontrol edin ve temizleyin:
# adminCount = 1 olan ancak ayrıcalıklı grupta olmayan kullanıcıları bul
$protectedGroups = @(
"Domain Admins",
"Enterprise Admins",
"Schema Admins",
"Administrators",
"Account Operators",
"Server Operators",
"Print Operators",
"Backup Operators",
"Replicator"
)
$users = Get-ADUser -Filter {adminCount -eq 1} -Properties adminCount, MemberOf
foreach ($user in $users) {
$isProtected = $false
foreach ($group in $user.MemberOf) {
$groupName = (Get-ADGroup $group).Name
if ($protectedGroups -contains $groupName) {
$isProtected = $true
break
}
}
if (-not $isProtected) {
Write-Host "Kullanıcı artık korunmuyor: $($user.SamAccountName)" -ForegroundColor Yellow
# İsterseniz burada adminCount'u temizleyebilirsiniz
# Set-ADUser -Identity $user -Clear adminCount
}
}
3. Delegated Permissions Kullanımı
Her durumda Domain Admin yetkisi kullanmak yerine, belirli OU'lar için delegate edilmiş yetkiler kullanın:
- Active Directory Users and Computers'da ilgili OU'ya sağ tıklayın
- Delegate Control seçeneğini seçin
- Gerekli izinleri ilgili IT personeline verin
4. Audit ve Dokümantasyon
- Ayrıcalıklı grup değişikliklerini audit edin
- adminCount değişikliklerini logla
- Düzenli olarak ayrıcalıklı grup üyeliklerini gözden geçirin
Özet ve Kontrol Listesi
Bir kullanıcı hesabında "User must change password at next logon" seçeneğini değiştiremiyorsanız:
- [ ] PowerShell ile
Set-ADUserkomutunu deneyin - [ ] Hata mesajını kontrol edin (Insufficient access rights?)
- [ ]
adminCountdeğerini kontrol edin (Get-ADUser -Identity "kullanici" -Properties adminCount) - [ ]
adminCount = 1ise, kullanıcının grup üyeliklerini kontrol edin - [ ] Domain Admin hesabıyla işlemi deneyin
- [ ] Kullanıcı ayrıcalıklı grupta değilse
adminCountdeğerini temizleyin - [ ] DACL'i sıfırlayın (
dsacls ... /resetDefaultDACL) - [ ] Değişikliği tekrar deneyin
Active Directory'deki AdminSDHolder mekanizması, kritik hesapları korumak için tasarlanmış güçlü bir güvenlik özelliğidir. Ancak, yanlış yapılandırma veya geçmiş grup üyelikleri nedeniyle bazen beklenmeyen sorunlara yol açabilir. adminCount = 1 değerini gördüğünüzde, kullanıcının neden korunduğunu anlamak ve uygun çözümü uygulamak önemlidir.
Bu sorunu çözerken her zaman güvenlik ve least privilege prensiplerine sadık kalın. Gerekmedikçe kullanıcıları ayrıcalıklı gruplardan çıkarın ve periyodik olarak adminCount değerlerini temizleyin.
Faydalı Kaynaklar:
- Microsoft Docs: AdminSDHolder ve Protected Groups
- Active Directory Security Best Practices
- PowerShell Active Directory Module Documentation
Yazar Notu: Bu yazıda ele alınan senaryolar gerçek production ortamlarından alınmıştır. Üretim ortamında değişiklik yapmadan önce mutlaka test ortamında deneyin ve gerekli backup'ları alın.