Sitemap
Turknet Technology

Turknet teknoloji ekibi paylaşımları.

Active Directory’de Kullanıcı Hesaplarındaki Kilit Durumunu Attribute Üzerinden PowerShell Kullanarak Yönetme

3 min readNov 20, 2024

--

Kullanıcı hesapları, genellikle bir dizi güvenlik mekanizmasıyla korunur ve bir hesap kilitlenmesi durumunda, bu genellikle hesaba erişimin kısıtlanması veya tamamen engellenmesi anlamına gelir.
“Lock” durumu farklı sebeplerden kaynaklanabilir. İşte olası nedenler:

  1. Hatalı Şifre Girişleri: Kullanıcılar belirli bir süre içerisinde birden fazla yanlış şifre denemesi yaparsa, hesap otomatik olarak kilitlenebilir. Bu, yetkisiz erişimi önlemek ve güvenliği artırmak için yaygın bir yöntemdir.
  2. Güvenlik İhlalleri: Hesapta şüpheli bir etkinlik veya yetkisiz erişim tespit edilmesi durumunda, güvenlik amacıyla hesap derhal kilitlenebilir. Bu, hesabın daha fazla zarar görmesini engellemeyi hedefler.
  3. Uzun Süreli İnaktiflik: Bazı sistemlerde, uzun süre kullanılmayan hesaplar otomatik olarak kilitlenir. Bu uygulama, kullanılmayan hesapların potansiyel risklerini azaltmayı amaçlar.
  4. Yönetici Müdahalesi: Sistem yöneticileri, güvenlikle ilgili bir durumun gerektirdiği hallerde hesapları manuel olarak kilitleyebilir. Bu genellikle güvenlik açıklarının kapatılması veya belirli bir sorunun çözülmesi için uygulanır.

Kullanıcı Hesaplarında ki kilit durumunu tespit etmek için;

Bir kullanıcının kilitli olduğu durumu kontrol etmek ve gerektiğinde kilitli hesabı açmak için kullanılan attribute “lockoutTime” dır.

lockoutTime sıfır veya <notset> değilse hesap kilitlidir yorumu yapılabilir.

Aşağıdaki komut Active Directory’de belirli bir OU’da bulunan tüm kullanıcı hesaplarını listeleyerek ve bu hesaplar arasında lockoutTime özniteliğine sahip olanları filtreleyerek, adlarını ve kilitlenme zamanlarını gösterir.

Bu filtre, lockoutTime özniteliğine sahip ve sıfırdan farklı bir değere sahip olan kullanıcıları seçer, [datetime]::FromFileTime() ile dönüştürülen lockoutTime, .ToString("dd/MM/yyyy HH:mm:ss") kullanılarak gün/ay/yıl saat:dakika:saniye formatına dönüştürülür ve görüntülemeyi düzgün bir tablo haline getirir.

Bu durum, kilitlenmiş olan kullanıcıları belirlemek içindir.

# OU'yu belirleyin (örneğin, "OU=Kullanicilar,DC=domain,DC=com")
$OUPath = "OU=Kullanicilar,DC=domain,DC=com"

# Belirli bir OU'daki kullanıcıları filtreleyerek kilitlenmiş hesapları listeleyin
Get-ADUser -Properties lockoutTime -SearchBase $OUPath -Filter * |
Where-Object { $_.lockoutTime -ne $null -and $_.lockoutTime -ne '0' } |
Select-Object Name, @{Name="LockoutTime"; Expression={[datetime]::FromFileTime($_.lockoutTime).ToString("dd/MM/yyyy HH:mm:ss")}} |
Format-Table -AutoSize

Kilitli olan hesaba müdahale etmek için;

Aşağıdaki komut ile kilitlenmiş kullanıcılar için lockoutTimeözniteliği 0 olarak set edilebilir ve kullanıcının kilidi kaldırılabilir.

Set-ADUser -Identity <user> -Replace @{lockoutTime=0}

Güvenlik ihlal durumları göz önünde bulundurularak belirli bir OU’daki kullanıcıların kilitlenme durumlarını toplu olarak kaldırmak için aşağıdaki komutu kullanabilirsiniz.

# OU'yu belirleyin (örneğin, "OU=Kullanicilar,DC=domain,DC=com")
$OUPath = "OU=Kullanicilar,DC=domain,DC=com"

# Belirli bir OU'daki kilitli kullanıcıları listeleyip lock durumlarını kaldır
Get-ADUser -Properties lockoutTime -SearchBase $OUPath -Filter * |
Where-Object { $_.lockoutTime -ne $null -and $_.lockoutTime -ne '0' } |
ForEach-Object {
# Kullanıcının adı ve lockoutTime'ını yazdır (kontrol için)
Write-Output "Unlocking user: $($_.Name), Locked at: $([datetime]::FromFileTime($_.lockoutTime).ToString('dd/MM/yyyy HH:mm:ss'))"

# Lock durumunu kaldır
Set-ADUser -Identity $_.SamAccountName -Replace @{lockoutTime=0}
}

Write-Output "All locked users in the specified OU have been unlocked."

Aşağıdaki yöntem ile de kullanıcıyı unlock yapabilirsiniz. Ancak tercihinize göre attribute üzerinden değişiklik yaparak unlock işlemi yukarıdaki yöntemler ile sağlanabilir.

--

--

No responses yet