Koncept bezpečných hesel spočívá v tom, že bychom v produkčních skriptech neměli předávat důležitá hesla v prostém zobrazení. Jedná se o vážný nedostatek zabezpečení. Pomocí prostředí PowerShell můžeme zabezpečit heslo nebo alespoň snížit jeho viditelnost. Nejprve probereme obecné aspekty zabezpečeného řetězce a poté to, jak nástroj Dell Command PowerShell Provider (DCPP) využívá vnitřní funkci prostředí PowerShell k zabezpečení hesla.
Představte si, že chceme přečíst uživatelské jméno a heslo od uživatele v konzoli. Víme, že uživatelské jméno obecně nevyžaduje žádné zabezpečení a může být viditelné pro všechny. Pokud však jde o uživatelské heslo, neměli bychom jej sdělovat cizím lidem. Splnění tohoto požadavku můžeme usnadnit pomocí níže uvedených příkazů:
$user = Read-Host "Enter Username" $pass = Read-Host "Enter Password" -AsSecureString
Výše je uvedený přehled toho, jak lze zvýšit zabezpečení důležitých informací, jako je heslo. Ve výše uvedeném příkladu je proměnná $pass typu System.Security.SecureString
. Než se zmíníme o aspektech DCPP, seznámíme se se dvěma dalšími široce využívanými rutinami, které prostředí PowerShell poskytuje pro usnadnění zabezpečených polí.
Těmito příkazy je ConvertTo-SecureString
a ConvertFrom-SecureString
. ConvertTo-SecureString
převádí prostý text na typ System.Security.SecureString
. Níže je uveden příklad:
"P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
Ve výše uvedeném příkladu je prostý text P@assword1
převeden na System.Security.SecureString
. Jedná se spíše o informaci a může, ale nemusí být široce využívána.
Další rutina ConvertFrom-SecureString
je široce využívaná a slouží k převodu zabezpečených řetězců na šifrované standardní řetězce. Hlavní omezení ConvertTo-SecureString
je, že výstup nelze přímo zapsat do souboru pro budoucí použití. Je třeba použít ConvertFrom-SecureString
, což převede System.Security.SecureString
do šifrovaného standardního řetězce, který lze pohodlně uložit do souboru, aby toto omezení nebylo překážkou.
Převádíme prostý text P@ssword1
, abychom zajistili řetězec, a poté převádíme jeho výstup na ConvertFrom-SecureString
, abychom získali šifrovaný řetězec, který lze bezpečně a pohodlně uložit do souboru.
Jako příklad uveďme, že v počítači bylo nastaveno heslo správce, které je třeba uložit do souboru. Můžeme to udělat pomocí:
Read-Host "Enter Admin Password" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt"
Toto heslo správce můžeme načíst zpět do proměnné jako zabezpečený objekt:
$pass = Get-Content "C:\Scripts\AdminPassword.txt" | ConvertTo-SecureString
Nyní se podívejme, jak využít bezpečné heslo pro nástroj DCPP. Pokud má počítač uživatele v nástroji DCPP nastaveno heslo systému nebo správce, pak pro všechny příkazy set
je třeba musíme předat příslušné heslo. Když tedy poskytnete toto heslo ve formě prostého textu, narušujete zabezpečení. Heslo je nutné předat jako System.Security.SecureString
. Zároveň když předáváme heslo SecureString
, je potřeba použít přepínač -PasswordSecure
, a nikoli normální přepínač –Password
. Níže je uveden příklad, kdy se uživatel pokouší nastavit AdvancedBatteryChargeCfg
na Disabled
a předává heslo SecureString
:
Set-item AdvancedBatteryChargeCfg disabled –PasswordSecure $pass
Zde část $pass obsahuje heslo systému a heslo správce a je typu System.Security.SecureString
. Podobně jako ve výše uvedené části můžeme přečíst $pass
jako:
$pass = Read-Host "Enter system/admin password" –AsSecureString
Můžeme uložit $pass
do souboru, pokud je to potřeba, jako:
$pass| ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt
Související články: