# önder online
Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri Yapay zekâ ve otomasyonun güvenliğe etkileri Microsoft 365 ve Active Directory güvenlik rehberleri Yazılım geliştirmede güvenlik odaklı yaklaşımlar Teknoloji ve siber güvenlik dünyasına hoş geldiniz Güncel siber tehditler ve korunma yöntemleri

Menu

Active Directory'de "User Must Change Password at Next Logon" Seçeneğini Değiştirememe Sorunu ve AdminSDHolder Etkisi

Active Directory'de "User Must Change Password at Next Logon" Seçeneğini Değiştirememe Sorunu ve AdminSDHolder Etkisi

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?

  1. Korunan Gruplar: Domain Admins, Enterprise Admins, Schema Admins, Backup Operators gibi kritik gruplar
  2. SDProp (Security Descriptor Propagator): Her 60 dakikada bir çalışan bir işlem
  3. İzin Sıfırlama: Bu grupların üyelerinin izinlerini AdminSDHolder nesnesindeki şablona göre sıfırlar
  4. adminCount Bayrağı: Bir kullanıcı bu gruplara eklendiğinde adminCount = 1 olarak 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-ADUser komutunu deneyin
  • [ ] Hata mesajını kontrol edin (Insufficient access rights?)
  • [ ] adminCount değerini kontrol edin (Get-ADUser -Identity "kullanici" -Properties adminCount)
  • [ ] adminCount = 1 ise, kullanıcının grup üyeliklerini kontrol edin
  • [ ] Domain Admin hesabıyla işlemi deneyin
  • [ ] Kullanıcı ayrıcalıklı grupta değilse adminCount değ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.