Güvenli parolaların arkasındaki mantık, üretim komut dosyalarında önemli parolaları düz görünüm olarak geçirmememiz gerektiğidir. Bu önemli bir güvenlik eksikliğidir. PowerShell kullanarak bir parolayı güvenli hale getirebilir veya en azından parola görünürlüğünü azaltabiliriz. Öncelikle güvenli dizenin genel yönlerini tartışacağız ve ardından Dell Command PowerShell Provider'ın (DCPP) parolayı güvenli hale getirmek için PowerShell'in entegre özelliğinden nasıl yararlandığını tartışacağız.
Konsol kullanıcılarından kullanıcı adını ve parolayı okumak istediğimizi düşünün. Kullanıcı adının genellikle herhangi bir güvenlik gerektirmediğini ve herkes tarafından görülebileceğini biliyoruz. Ancak parola için yabancıların kullanıcı parolasını bilmesine izin vermemeliyiz. Bu gereksinimi aşağıdaki gibi komutlarla yerine getirebiliriz:
$user = Read-Host "Enter Username" $pass = Read-Host "Enter Password" -AsSecureString
Yukarıda, parola gibi kritik bilgileri güvence altına almamız gerektiğinde nasıl daha fazla güvenlik ekleyebileceğimize genel bakış sunulmuştur. Yukarıdaki örnekte $pass değişkeni şu tiptedir: System.Security.SecureString
. DCPP'nin özelliklerine değinmeden önce PowerShell'in güvenli alanları sağlamak için yaygın olarak kullanılan diğer iki cmdlet ile giriş yapıyoruz.
Bu iki komut şunlardır: ConvertTo-SecureString
ve ConvertFrom-SecureString
. ConvertTo-SecureString
düz metni şuna dönüştürür: System.Security.SecureString
. Aşağıda bir örnek gösterilmiştir:
"P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
Yukarıdaki örnekte, düz metin P@assword1
şuna dönüştürülür: System.Security.SecureString
. Bu daha teknik bir bilgidir ve yaygın olarak kullanılmayabilir.
Bir sonraki cmdlet ConvertFrom-SecureString
güvenli dizeleri şifrelenmiş standart dizelere dönüştürmek için kullanılan daha yaygın bir cmdlet'tir. Burada ConvertTo-SecureString
ile ilgili ana sınırlama, çıktısının ileride kullanılmak üzere doğrudan bir dosyaya yazılamamasıdır. Bunun için ConvertFrom-SecureString
kullanarak System.Security.SecureString
değerini, bu sınırlamanın üstesinden gelmek için bir dosyaya rahatça kaydedilebilen şifrelenmiş standart dizeye dönüştürür.
Şu anda P@ssword1
düz metnini dizeyi güvence altına almak ve çıktısını ConvertFrom-SecureString
türüne dönüştürerek güvenli ve rahat bir şekilde dosyaya kaydedilebilen şifreli bir dize elde ediyoruz.
Örnek olarak, bir bilgisayarda yönetici parolası belirlendi ve bunu bir dosyaya kaydetmemiz gerekiyor. Bunu şu şekilde yapabiliriz:
Read-Host "Enter Admin Password" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt"
Bu yönetici parolasını güvenli bir nesne olarak bir değişkene geri alabiliriz:
$pass = Get-Content "C:\Scripts\AdminPassword.txt" | ConvertTo-SecureString
Şimdi DCPP için güvenli bir paroladan nasıl yararlanılacağını ele alalım. DCPP'de, kullanıcının bilgisayarında Sistem veya Yönetici parolası ayarlanmışsa o zaman tüm set
komutları için ilgili şifreyi geçmemiz gerekir. Dolayısıyla, bu parolayı düz metin olarak vermek güvenliği ihlal eder. Parolayı şu şekilde iletmeliyiz: System.Security.SecureString
. Ayrıca, bir SecureString
parolası ilettiğimizde bunu -PasswordSecure
anahtarı ile iletmemiz gerekir, normal –Password
anahtarı ile değil. Aşağıda kullanıcının AdvancedBatteryChargeCfg
öğesini Disabled
olarak ayarlamaya çalıştığı ve SecureString
parolasını ilettiği bir örnek gösterilmektedir:
Set-item AdvancedBatteryChargeCfg disabled –PasswordSecure $pass
Burada $pass sistem ve yönetici parolasını tutar ve şu tiptedir: System.Security.SecureString
. Yukarıdaki tartışmaya benzer şekilde $pass
öğesini şu şekilde okuyabiliriz:
$pass = Read-Host "Enter system/admin password" –AsSecureString
Ardından $pass
öğesini bir dosyaya şu şekilde kaydedebiliriz:
$pass| ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt
İlgili Makaleler: