Ç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.
Local User ı seçtiğinizde aşağıdaki gibi ekran gelecek
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.
Bu GPO nun uygulandığı bilgisayardaki sonuca bakalım.
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.
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 '--------------------------------------------------------------------------------------------------------------
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.
Devre dışı bırakmayı GPO ile yaptırabilirsiniz.
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.