Koncepcja bezpiecznych haseł polega na tym, że w skryptach produkcyjnych nie powinniśmy przekazywać ważnych haseł w widoczny sposób. Jest to poważny brak zabezpieczenia. Zatem za pomocą PowerShell możemy zabezpieczyć hasło lub przynajmniej zmniejszyć jego widoczność. Najpierw omówimy ogólne aspekty bezpiecznego ciągu, a następnie sposób, w jaki Dell Command PowerShell Provider (DCPP) wykorzystuje wrodzoną funkcję PowerShell do zabezpieczania hasła.
Powiedzmy, że chcemy odczytać nazwę użytkownika i hasło użytkownika w konsoli. Wiemy, że nazwa użytkownika na ogół nie wymaga żadnych zabezpieczeń i może być widoczna dla wszystkich. Nie powinniśmy natomiast ujawniać nieznajomym hasła użytkownika. Spełnienie tego wymagania możemy ułatwić za pomocą poniższych poleceń:
$user = Read-Host "Enter Username" $pass = Read-Host "Enter Password" -AsSecureString
Powyżej przedstawiono sposoby zwiększenia bezpieczeństwa, gdy konieczne jest zabezpieczenie krytycznych informacji, takich jak hasło. W powyższym przykładzie zmienna $pass jest typu System.Security.SecureString
. Zapoznamy się z wprowadzeniem do dwóch innych powszechnie używanych poleceń cmdlet programu PowerShell, które ułatwiają bezpieczne pola, zanim przejdziemy do aspektów DCPP.
Te dwa polecenia to ConvertTo-SecureString
i ConvertFrom-SecureString
. ConvertTo-SecureString
konwertuje zwykły tekst na typ System.Security.SecureString
. Poniżej przedstawiono przykład:
"P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
W powyższym przykładzie zwykły tekst P@assword1
jest konwertowany na typ System.Security.SecureString
. Jest to jedynie informacja, która może, ale nie musi być powszechnie stosowana.
Następne polecenie cmdlet ConvertFrom-SecureString
jest szerzej używanym poleceniem cmdlet, które służy do konwertowania bezpiecznych ciągów na zaszyfrowane ciągi standardowe. Główne ograniczenie ConvertTo-SecureString
jest takie, że jego dane wyjściowe nie mogą być bezpośrednio zapisane w pliku do wykorzystania w przyszłości. Musimy użyć ConvertFrom-SecureString
które konwertuje System.Security.SecureString
na zaszyfrowany standardowy ciąg, który można wygodnie zapisać w pliku, aby pokonać to ograniczenie.
Konwertujemy zwykły tekst P@ssword1
aby zabezpieczyć ciąg, a następnie przesłać jego dane wyjściowe do ConvertFrom-SecureString
aby uzyskać zaszyfrowany ciąg znaków, który można bezpiecznie i wygodnie zapisać w pliku.
Załóżmy na przykład, że na komputerze ustawiono hasło administratora i musimy zapisać je w pliku. Możemy to zrobić za pomocą:
Read-Host "Enter Admin Password" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt"
Możemy odzyskać to hasło administratora do zmiennej jako bezpieczny obiekt w następujący sposób:
$pass = Get-Content "C:\Scripts\AdminPassword.txt" | ConvertTo-SecureString
Zastanówmy się teraz, jak wykorzystać bezpieczne hasło dla DCPP. W DCPP, jeśli komputer użytkownika ma ustawione hasło systemowe lub hasło administratora, dla wszystkich set
poleceń musimy przekazać odpowiednie hasło. Zatem podanie tego hasła w postaci zwykłego tekstu powoduje naruszenie zabezpieczeń. Musimy przekazać hasło jako System.Security.SecureString
. Ponadto gdy przekazujemy SecureString
hasło, musimy je przekazać za pomocą -PasswordSecure
przełącznika, ale nie normalnego –Password
przełącznika. Poniżej pokazano przykład, w którym użytkownik próbuje ustawić AdvancedBatteryChargeCfg
na Disabled
i przekazuje SecureString
hasło:
Set-item AdvancedBatteryChargeCfg disabled –PasswordSecure $pass
W tym miejscu $pass przechowuje hasło systemowe i hasło administratora oraz jest typu System.Security.SecureString
. Podobnie jak w powyższym omówieniu możemy odczytać $pass
jako:
$pass = Read-Host "Enter system/admin password" –AsSecureString
Możemy zapisać $pass
w pliku, jeśli jest to wymagane, jako:
$pass| ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt
Artykuły pokrewne: