Group Policy Object (GPO) İle Yerel Kullanıcı Hesabı Oluşturma Scripti
  1. Anasayfa
  2. GPO

Group Policy Object (GPO) İle Yerel Kullanıcı Hesabı Oluşturma Scripti

3

Çeşitli nedenlerle tüm istemci bilgisayarlarda kullanmak üzere bir yerel kullanıcı hesabına ihtiyacımız olabilir. İstemci bilgisayar sayınız az ise, yada tüm pc leri ilk kez formatlıyorsanız her bilgisayar için elle de yerel kullanıcı hesabı açabilirsiniz. Ancak çok önceden kurulmuş çok sayıda pc de ihtiyacınız olduğunda bunu GPO ile yapayım diyenler için bu yazıyı yazmayı düşündüm

GPO Preferences İle Yerel Kullanıcı Ekleme (Aslında ekleyememe)

GPO Editörde “Computer Configuration\Preferences\Control Panel Settings\Local Users and Groups” bölümünde sağ tarafa sağ tıklayarak aşağıdaki gibi bir yerel kullanıcı oluşturma ekranını görebilirsiniz.

group-policy-object-gpo-ile-yerel-kullanici-hesabi-olusturma-1
GPO Editör

Local User ı seçtiğinizde aşağıdaki gibi ekran gelecek

group-policy-object-gpo-ile-yerel-kullanici-hesabi-olusturma-2
GPO Yeni Kullanıcı Ekranı

Ancak burada parola kısımlarının pasif olduğunu göreceksiniz. Bunun nedeni sizin GPO da yaptığınız ayarlar aslında \\domainadiniz\SYSVOL\domainadiniz\Policies dizini içinde xml dosyaları olarak tutulur ve istemciler bu xml leri okuyarak GPO ayarlarını alırlar. Her ne kadar bu ekranda girdiğiniz parola xml e hash lenerek kaydedilecek olsa da Domain Users olan bir kullanıcı bu xml in içindeki hash li parolayı basit bir şekilde çözebilir. Bunu yapan web siteleri bile mevcut. Bu nedenle Microsoft bu özelliği kapattı.

Peki bizde parola vermeden kullanıcıyı oluşturmayı deneyelim bakalım ne olacak? Sonuçta yukarıdaki gibi tanımlayıp OK bastığımızda kabul ediyor.

group-policy-object-gpo-ile-yerel-kullanici-hesabi-olusturma-3
Local Users and Groups GPO ekranı

Bu GPO nun uygulandığı bilgisayardaki sonuca bakalım.

group-policy-object-gpo-ile-yerel-kullanici-hesabi-olusturma-4
İstemcideki Yerel Kullanıcı Listesi

Gördüğünüz gibi yerel kullanıcı oluşmamış. Neden oluşmamış diye Event Viewer dan loglara bakalım. GPO ile ilgili hatalar için aşağıdaki gibi “Administrative Events” kısmına bakalım.

group-policy-object-gpo-ile-yerel-kullanici-hesabi-olusturma-5
Event Viewer Ekranı

Hatadan da anlaşılacağı üzere, Domain ortamımızda bir parola politikamız var ve parolasız hesaplara izin verilmiyor. Bu nedenle kullanıcı oluşmuyor.

Bu durumda script kullanarak kullanıcı oluşturabiliriz. Ancak bunda da şöyle bir risk var kullanacağımız bu scriptin içine de şifreyi açık seçik yazamayız çünkü yine domain users kullanıclar erişebilir.

Aşağıdaki script uygulandığı bilgisayarda içinde tanımlanan kullanıcı adını oluşturacak, şifre olarak ise yine içindeki fonksiyon sayesinde 9 karakterli rastgele bir şifre üretecek ve kullanıcı hesabın atayacak. Hal böyleyken de oluşturulan yerel kullanıcının şifresini bilmiyor olacağız. Bunun içinde Microsoftun ücretsiz aracı olan LAPS ı kullanarak lokal kullanıcı hesabının şifresini yönetebilirsiniz.

Yada şifre görünsün birşey olmaz derseniz strPass = RandomString() kısmını strPass = “12345QWERTY” gibi olarak değiştirebilirsiniz.

Ayrıca açılacak kullanıcı adını belirleyeceğiniz  strUser = “yerelkullanıcıadı  satırını değiştirmeyi unutmayın.

Script aynı bilgisayara ikinci kez uygulandığında kullanıcı zaten var uyarısı alarak yeniden şifre tahsisi yapmayacak.

Aşağıdaki scripti *.vbs olarak kaydedip GPO ile Startup Script olarak istemcilere uygulayabilirsiniz.

Hatta script biraz daha geliştirilip şifre üretilip yerel kullanıcıya atandıktan hemen sonra kurum mail sunucularından belirtilen adminlere eposta atılması yada paylaşımdaki, sadece adminlerin okuma yetkisinin olduğu bir dosyaya yazdırılabilir. Varsa yaparım diyen scripti geliştirebilir.

Script

'----------------------------------------------------------------------Random String Oluşturma Başlangıç------------------------------
function RandomString()
Randomize()
dim CharacterSetArray
CharacterSetArray = Array(_
Array(6, "abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNOPRSTUVYZ"), _
Array(2, "0123456789"), _
Array(1, "!@#$+-*?:") _
)
dim i
dim j
dim Count
dim Chars
dim Index
dim Temp

for i = 0 to UBound(CharacterSetArray)

Count = CharacterSetArray(i)(0)
Chars = CharacterSetArray(i)(1)

for j = 1 to Count

Index = Int(Rnd() * Len(Chars)) + 1
Temp = Temp & Mid(Chars, Index, 1)

next

next

dim TempCopy

do until Len(Temp) = 0

Index = Int(Rnd() * Len(Temp)) + 1
TempCopy = TempCopy & Mid(Temp, Index, 1)
Temp = Mid(Temp, 1, Index - 1) & Mid(Temp, Index + 1)

loop

RandomString = TempCopy

end function
'----------------------------------------------------------------------Random String Oluşturma Bitiş------------------------------

'-------------------------------------------------------------Lokal Kullanıcı Oluşturma Başlangıç------------------------------

On Error Resume Next
' ...
' Other Code Here (that may have raised an Error)
Set objShell = CreateObject("Wscript.Shell")

Set objEnv = objShell.Environment("Process")
strComputer = objEnv("COMPUTERNAME")
strUser = "yerelkullanıcıadı"
strPass = RandomString()
Set colAccounts = GetObject("WinNT://" & strComputer & ",computer")
' ...
Err.Clear ' Clear any possible Error that previous code raised
Set objUser = colAccounts.Create("user", strUser)
objUser.SetPassword strPass

Const ADS_UF_DONT_EXPIRE_PASSWD = &h10000
objPasswordExpirationFlag = ADS_UF_DONT_EXPIRE_PASSWD
objUser.Put "userFlags", objPasswordExpirationFlag
objUser.SetInfo
If Err.Number = 0 Then
Set Group = GetObject("WinNT://" & strComputer & "/Administrators,group")
Group.Add(objUser.ADspath)
End If

'-------------------------------------------------------------Lokal Kullanıcı Oluşturma Bitiş------------------------------
On Error Goto 0
'--------------------------------------------------------------------------------------------------------------

 

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumlar (3)

  1. merhaba, Bu scripte oluşturduğu kullanıcıyı devre dışı yapması için uğraştım ancak olmadı. Yardımcı olabilir misiniz lütfen.

  2. Merhaba bilgi için çok teşekkürler. Bir sorum olacak local user (sam) veritabanındaki hesapları Nasil gpo dan devre dışı bırakabiliriz ve isimlerini bilmiyorsak.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir