OU ları “Accidental Deletion” a karşı nasıl koruyabilirim? Powershell’den bu konuda faydalanabilirmiyim?

Merhaba, IT yapiniz her ne kadar kusursuz bir saat gibi isliyor olsa da, bu saatin yanlis ayarlanamayacagi anlamina gelmiyor, hele ki engelleyebileceginiz anlamina hiç gelmiyor. Yazima böyle bir analoji ile baslamayi uygun gördüm çünkü IT yapinizin omurgasi konumunda olan Active Directory “Human Mistake” dedigimiz kullanici hatalarina çok açik. Microsoft olarak yillardir Active Directory için delegasyon ve security konusunda “Best Practice” ler, “Planning Guide” lar yayinliyoruz. Yine burada en çok vurguladigimiz konulardan bir tanesi domain de “Administrator” yetkisine sahip kullanici hesaplari ile çalisma yapmamaniz gerektigi, yetkili bir hesabi ancak ihtiyaç durumunda “Run As” gibi yöntemler ile kullanmaniz gerektigini her platformda söylüyoruz.

Bu bahsettigim yöntemleri uygulamanin kesinlikle mümkün olmayacagina dair yüzlerce yorum duyar gibiyim, gözlemlerim ve tecrübelerime dayanarak bunlarin %90 gibi bir oranda kesinlikle mantikli açiklamasi olmayan ve sadece aliskanliklar sebebiyle böyle gelmis, böyle gidiyor kalibinda bahaneler oldugunu söyleyebilirim. Yazimin asil amaci delegasyon ve security konusunda “Best Practice” ler, “Planning Guide” lar olmadigi için konuyu burada kapatiyorum ve asil konuya geçiyorum. Yine de  delegasyon ve security konusunda asagidaki linklerden detayli bilgi bulmaniz mümkün.

Best Practices for Delegating Active Directory Administration
The Administrator Accounts Security Planning Guide

En çok karsilastigimiz insan kaynakli hatalardan biri Active Directory de yanlislikla yapilan silme islemi (Accidental Deletion). Active Directory Users and Computers konsolundan bir kullanici, bir bilgisayar veya bir OU (Organizational Unit) silmek ne kadar zor? Tecrübelerime dayanarak bunun çok kolay oldugunu söyleyebilirim ve bu konuda benimle hemfikir oldugunuza eminim, silinen bir kullanici veya bilgisayar objesi olmasi durumunda kendimizi sansli sayabiliriz ancak silinen içerisinde binlerce kullanici barindiran bir OU ise yeni bir is aramaya baslamak kötü bir fikir olmayabilir.

Windows Server 2008 ve sonrasinda yasdiginiz veya yasayabileceginiz bu “Accidental Deletion” a karsi bir önlem mevcut.

Yapimizda bulunan Windows Server 2008 veya Windows Server 2008 R2 Domain Controller a baglanip “Active Directory Users and Computers” (ADUC veya dsa.msc) konsolunu açiyoruz. Menü de bulunan “View” seçeneginden “Advanced Features” seçenegine tik atiyoruz. (bu islemi RSAT kurulu bir client üzerinden de yapabiliriz.)

image

Bu islemi yaptiktan sonra artik objelerin (OU, user, computer) özelliklerini açtigimizda, sekmelerden Object sekmesine bastigimizda “Protect object from accidental deletion” seçenegi ile karsilasiyoruz.

image

Gördügümüz bu kutucugu isaretlememiz durumunda artik bu obje hatali silinmelere karsi korunmus oluyor. Peki bu seçenek arka planda ne yapiyor? bu sorunun cevabi basit, ACL. Bu seçenegi isaretlemeniz durumunda obje üzerinde “everyone” a “delete“ ve “delete subtree” ACE lerine DENY koyuyoruz.

image

Böylece binlerce kullanici içeren bir OU yu yanlislikla silmek istemis olsak bile asagidaki uyari ile karsilasiyoruz.

image

NOT: Bu özelligi kullanicilar ve bilgisayarlar üzerinde açmak yerine OU lar üzerinde açmanizi öneririm, bu özellik ile asil hedeflenen zaten OU lar. Özelligi bir OU üzerinde açmaniz durumunda  bu OU nun altinda daha önceden bulunan hiçbir objeye inherit etmemekte, sonradan yaratilan her yeni OU otomatik olarak inherit etmekte, sonradan yaratilan diger objeler (kullanici, bilgisayar, vs.) yine inherit etmemekte.

Gelelim uygulama kismina eger yapinizda yüzlerce OU varsa elbette tek tek bu ayari yapmak kolay olmayacak. Bu islem için de kolay bir yöntem mevcut ve burada Powershell devreye giriyor. Bu islem için ya “Active Directory Module for Windows PowerShell” i çalistiracagiz yada “Windows Powershell” I çalistirip daha sonra ActiveDirectory modülünü yükleyecegiz.

Bu islem için birinci yöntemi kullanalim, “Active Directory Module for Windows PowerShell” i çalistirmak için bir DC üzerinde Administrative Tools a gitmeniz yeterli (RSAT kurulu client larda da ayni yöntem geçerli).

image

 

Bu yöntem ile açilan Powershell ekraninda Active Directory için yaratilmis cmdlet ler otomatik olarak import edilir böylece bu islemde ihtiyaç duydugumuz komutlari sorunsuz kullanabiliriz. Önce “Protect object from accidental deletion” özelliginin hangi OU larda set edilmemis oldugunu bir görelim. Bunun için çalistirmamiz gereken komut:

Get-ADOrganizationalUnit -filter * -Properties ProtectedFromAccidentalDeletion | where {$_.ProtectedFromAccidentalDeletion -eq $false} | ft

Komutun sonuçlarini gösteren örnek bir ekran çiktisi:

image

Çikti üzerinden görebildigimiz üzere 4 tane OU bu koruma için ayarlanmamis ve örnek olarak “Computers” OU suna bakacak olursak bunun dogru oldugunu görebiliriz.

image

Gösterdigim örnek 4 OU üzerinde ve bu örnekte “Protect object from accidental deletion”ayarini elle set etmek oldukça basit ve zaman gerektirmeyen bir durum ancak OU sayisi 4 yerine 40 veya 400 olsaydi isler biraz daha zor bir hal alacakti. Bu ihtiyacimizi karsilama konusunda Powershell bize yine büyük bir kolaylik sagliyor, Poweshell sayesinde bir satirlik bir komut sayesinde bütün OU larimizi koruma altina almak mümkün, bunun için çalistirmamiz gereken komut (iki komutun pipe edilmesi sonucunda istedigimizi basariyoruz):

Get-ADOrganizationalUnit -filter * | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $true

Komutun sonuçlarini gösteren örnek bir ekran çiktisi:

image

Komutun hemen sonrasinda “Protect object from accidental deletion” özelliginin hangi OU larda set edilmemis oldugunu gösteren komutu çalistirdigimizda sonuç artik bos gelecek. Örnek olarak tekrar “Computers” OU suna bakacak olursak komutun sonucunu buradan da dogrulayabiliriz.

image

 

/Tuna Gezer