Merhaba bu makalemde Aktif Dizin üzerinde Dinamik Güvenlik Gruplar?n? (Dynamic Security Groups) anlataca??m. Türkçe bir isim koymak gerekirse “Belli bir kritere göre üyeleri otomatik düzenlenen gruplar” ismi uygun olabilir. Kolayl?k olsun diye bundan sonra Dynamic Security Group yerine DSG k?saltmas?n? kullanaca??m. “Bu DSG de nerden ç?kt??”,”Dynamic Distribution Group olmas?n o ?” dedi?inizi duyar gibiyim. Hay?r DSG’den bahsediyorum. Bu ?u an için (2012 R2) aktif dizinde var olan bir teknoloji de?il. Biraz ak?l, biraz ilham ve biraz da powershell gücü ile kendimizin olu?turaca?? bir obje olacak.
Malum üzere Aktif Dizin üzerindeki Security Gruplar? aktif dizin var oldu?undan bu yana hayat?n? sürdürmekte. Bizler yani sistem yöneticileri security gruplar?n? severiz ve i?imiz gere?i çok kullan?r?z. Dosya payla??m sunucular?nda, grup politikalar?nda ve benzeri yetki i?lemlerinde security gruplar?na çokça ba?vururuz; çünkü yetki alma ve verme i?lemlerinde yapaca??m?z tek i? aktif dizin üzerinden gruba kullan?c? ekleme ve kullan?c? ç?karma i?lemi olacakt?r. Zira her i?lem için ilgili dosya sunucusundaki payla??ma veya grup politikas? üzerindeki ayara gidiyor olmak can s?k?c? hale gelmektedir. Duruma göre i?imizi kolayla?t?ran sevgili dostlar?m?z security gruplar?n?n önemli bir sorunu vard?r. Bu sorun bu dostlar?m?z?n üyelik i?lemlerinin manuel olmas? yani grup üyelerinin statik olmas?d?r. ??te bu makalede üyeleri belirli bir k?s?ta göre otomatik olarak eklenen veya ç?kar?lan yani üyeleri dinamik olarak de?i?en gruplar? inceleyece?iz. Üyelerinin dinamik olarak de?i?mesi nedeniyle bu gruplara Dinamic Distribution Group (DSG) ismi verilmektedir.
Biraz önce de söyledi?im gibi DSG bir ?arta göre üyeleri otomatik olarak de?i?en gruptur. Bu ?art ?u ?ekillerde olabilir: “?sminde Ahmet geçen kullan?c?lar”,“Job Title’?nda admin geçen kullan?c?lar”,”Department’i Network olan kullan?c?lar”, “Job Title’? Master olan ve Department’i Software olan kullan?c?lar”, “Department’i insan kaynaklar? olan veya department’inde kaynak geçen kullan?c?lar”, vb. Bu örnekleri uzatabiliriz. DSG’yi olu?turmak için ihtiyac?m?z olan iki ?ey var. Bunlar bir grup ve grubun üyelerini belirleyecek bir k?s?t’t?r. Aktif dizin kullan?c? objesinin Attribute’lerinin herbiri tek tek veya kombinasyonlu ?ekilde k?s?t olarak kullan?labilmektedir.
Gelelim i?in yap?l?? k?sm?na. Test ortam?m?n domain ad? akd.local. Yukar?da bahsetti?im i?lemleri yapmay? iki powershell scripti ile yapabildim. Biri DGS’leri olu?turmak için kullan?lacak biri de DSG yap?s?n? yönetmek için kullan?lacak script’tir. Öncelikle Create_DSG.ps1 yani DSG’leri olu?turmak için kulland???m powershell script’inden bahsedece?im. Script ?u ?ekilde:
cript’i çal??t?rd???m?zda s?ras?yla öncelikle olu?turulacak grup ismini, grup üyeleri için istenilen ?art? sormakta ve bir do?rulamadan sonra grubu olu?turmaktad?r. Scripti çal??t?ral?m.
Grup ismine Admins veriyoruz.
Condition olarak (title=*admin*) yaz?yoruz.
Yani Job title’?nda admin geçen kullan?c?lar?n bu grubun üyesi olmas?n? istiyoruz. Script bu a?amada bize faydal? olabilecek ba?ka örnekleri sunuyor.
Açmak üzere oldu?umuz grubun ad?n? ve ?art?n? görüyoruz ve i?leme devam ediyoruz.
Script ba?ar?l? bir ?ekilde çal??t???nda belirtti?imiz isimde bir grubu Aktif dizinde Dynamic Security Groups OU’su alt?nda olu?turmaktad?r. Bu i?lemden önce belirtilen OU’yu aktif dizinde yaratmak gerekecektir. Script grup için belirtti?imiz Condition’u grubun Description k?sm?na yazd?. Grup üyeliklerini düzenleyecek olan ikinci scriptimiz bu k?sm? okuyup grup üyeliklerini düzenleyecek. Grupla ilgili k?s?t? sonradan de?i?tirmek istedi?inizde tek yapman?z gereken Description’daki “Condition is ” den sonraki k?sm? de?i?tirmek olacakt?r.
Grubumuzun henüz üyesi bulunmamakta.
Sistemin çal??ma mant???n? daha iyi anlatmak için iki yeni grup daha olu?turuyoruz. Asl?nda sistemin çal??ma mant???n? anlad?ktan sonra grup olu?turma i?lemini elle de yapabiliriz. Ancak kar???kl??a neden olmamak için bunu ?u an tavsiye etmiyorum. Scripti text olarak makalenin sonunda sizlerle payla?aca??m.
Gelelim as?l i?i yapacak scriptimize: Bu script DSG’leri yönetme i?ini yapt??? için DSG_Manager.ps1 ismine sahip. ?çeri?i ?u ?ekilde:
K?saca anlatmak gerekirse scriptin yapt??? i?lem ad?mlar? ?öyle:
· DSG’lerin bulundu?u OU alt?ndaki bütün gruplar? oku.
· Her grup için grubun Conditon’unu grubun description k?sm?ndan oku
· Aktif dizinden bu Condition’a uyan kullan?c?lar? çek.
· Grubun üyelerinden bir önceki ad?mda çekilen listede olmayan kullan?c?lar? gruptan ç?kar.
· Son olarak iki önceki ad?mda çekilen kullan?c? listesini gruba ekle. Burada zaten grupta olan kullan?c?lar için bir sorun olmamaktad?r. Sadece iki önceki ad?mda çekilen listede olup da gruba üye olmayan kullan?c?lar için i?lem yap?lmaktad?r.
Bu script’i de text olarak makalenin sonunda sizlerle payla?aca??m.
Scripti çal??t?rd?ktan sonra grup üyelikleri otomatik olarak yap?lmaktad?r.
SystemAdmins grubunun üyelerinden SystemAdmin11 kullan?c?s?n?n Job Title’? ve Department bilgisi incelendi?inde belirtilen ?arta uygun oldu?u görülmektedir.
Grup üyelerini silelim, gruba ?arta uymayan kullan?c? ekleyelim, kullan?c?lar? grubun ?art?na uygun hale getirelim, grubun ?art?na uyan kullan?c?lar?m?z? grubun ?art?na uymaz hale getirelim. DSG_Manager.ps1 i çal??t?rd?ktan sonra her ?ey düzelecek DSG’ler ?artlar?na uygun hale gelecektir. Bu a?amada “Bu nas?l dinamik i?lem ben ikide bir komut mu çal??t?raca??m?” dedi?inizi duyar gibiyim. Cevab?m Hay?r.
Komutu otomatik çal???r hale getirmek için Task Scheduler’i kullanaca??z.
Task Scheduler’a yeni görevimiz için h?zl?ca göz atal?m.
DSG_Manager.ps1 scripti her 5 dakikada bir çal??acak ?ekilde ayarland?. Yani DSG’lerin grup üyelikleri en geç 5 dakika içerisinde kendi condition’una göre düzeltilecektir.
Bu i?lemi tamamlad?ktan sonra DSG i?lemini tamamlam?? bulunuyoruz. Bu sayece, aktif dizinde kullan?c? bilgileri düzgün girilerek, birimi de?i?en bir kullan?c?n?n dosya payla??mlar?na otomatik olarak eri?mesini sa?layabiliriz. Ya da bir grup bilgisayar üzerinde yetkili olmas? için grup politikas? üzerinden yetki verdi?imiz bir gruba yeni sistem yöneticisi olan birisinin otomatik olarak dahil edilmesini sa?layabiliriz. Ben DSG’nin 2012 R2 sonras?ndaki Server i?letim sistemlerinde Microsoft taraf?ndan yap?laca??n? dü?ünüyorum. Ancak ?u an için DSG mevcut olmad???ndan yukar?da anlatt???m yakla??mla DSG’nin gerçekle?tirilmesi mümkün. Gelelim Scriptlerimize:
Create_DSG.ps1________________________________________________________
$domainDN=”DC=akd,DC=local”
cls
Write-Host ” ”
Write-Host “Please enter the NAME of Dynamic Security Group to Create Group”
Write-Host ” ”
Write-Host “EX: Admins, Managers, SoftwareGroup”
Write-Host ” ”
$groupName=Read-Host “GroupName”
cls
Write-Host ” ”
Write-Host “Please enter the CONDITION of Dynamic Security Group ”
Write-Host ” ”
Write-Host “For Group of Users whoose Job Title equals Master Enter:(title=Master)”
Write-Host “For Group of Users whoose Job Title starts with Master Enter:(title=*Master)”
Write-Host “For Group of Users whoose Job Title ends with Master Enter:(title=Master*)”
Write-Host ” ”
Write-Host “For Group of Users whoose department equals System AND Job title contains admin Enter:(&(department=System)(title=*admin*))”
Write-Host ” ”
Write-Host “For Group of Users whoose department equals System OR Job title ends with user Enter:(|(department=System)(title=*user))”
Write-Host ” ”
$condition=Read-Host “Condition”
cls
Write-Host “You are about to creat DSG with name $groupName and with condition $condition”
Write-Host ” ”
Write-Host “Do you want to continue?”
Write-Host ” ”
$Answer=Read-Host “Y/N”
if(($Answer -eq “Y”) -or($Answer -eq “y”))
{
New-ADGroup -Name “$groupName” -Path “OU=Dynamic Security Groups,$domainDN” -Description “Dynamic Security Group (Managing By System) Condition is $condition” -GroupScope Global
}
else
{
Write-Host “Dynamic Security Group Creation Process is Cancelled”
}
_________________________________________________________________________
DSG_Manager.ps1
_________________________________________________________________________
cls
$dsgOU=”OU=Dynamic Security Groups”
$domainDN=”DC=akd,DC=local”
$dsgs = Get-ADGroup -SearchBase “$dsgOU,$domainDN” -Filter * -Properties description
foreach($dsg in $dsgs)
{
$text = $dsg.description
$groupName=$dsg.Name
$condition=$text.Substring($text.IndexOf(“Condition is”)+13)
$users = Get-ADUser -LDAPFilter “((objectCategory=user)(objectClass=user)$condition)”
$Groupusers = Get-ADGroupMember $groupName
foreach($Groupuser in $Groupusers)
{
$flag=$false
foreach($user in $users)
{
if($Groupuser.DistinguishedName -eq $user.DistinguishedName)
{
$flag=$true
}
}
if($flag -eq $false)
{
Remove-ADGroupMember -Identity $groupName -members $Groupuser -Confirm:$false
}
}
Add-ADGroupMember -Identity $groupName -Members $users
}
_________________________________________________________________________