O conceito por trás de senhas seguras é que, em scripts de produção, não devemos passar senhas importantes como se fossem de domínio público. Trata-se de uma grave falta de segurança. Usando o PowerShell, podemos proteger uma senha ou, pelo menos, reduzir a visibilidade dela. Primeiro, discutimos aspectos gerais da string segura e, em seguida, discutimos como o Dell Command PowerShell Provider (DCPP) aproveita o recurso inato do PowerShell para proteger a senha.
Considere que queremos ler o nome de usuário e a senha do usuário no console. Sabemos que o nome de usuário geralmente não requer nenhuma segurança e pode ser visível para todos. Mas no caso da senha, não devemos deixar estranhos saberem a senha do usuário. Podemos facilitar esse requisito com os comandos abaixo:
$user = Read-Host "Enter Username" $pass = Read-Host "Enter Password" -AsSecureString
O texto acima traz uma visão geral de como podemos aumentar a segurança quando precisamos proteger informações críticas, como uma senha. No exemplo acima, a variável $pass é de tipo System.Security.SecureString
. Temos uma introdução a dois outros cmdlets amplamente usados que o PowerShell fornece para facilitar campos seguros antes de abordar aspectos do DCPP.
Os dois comandos são ConvertTo-SecureString
e ConvertFrom-SecureString
. ConvertTo-SecureString
converte um texto sem formatação para tipo System.Security.SecureString
. Um exemplo é mostrado abaixo:
"P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
No exemplo acima, o texto sem formatação P@assword1
é convertido para tipo System.Security.SecureString
. Isso é mais uma informação e pode ou não ser amplamente utilizado.
O próximo cmdlet ConvertFrom-SecureString
é um cmdlet mais amplamente usado para converter strings seguras em strings padrão criptografadas. A principal limitação de ConvertTo-SecureString
é que sua saída não pode ser gravada diretamente em um arquivo para uso futuro. Temos que usar ConvertFrom-SecureString
que converte System.Security.SecureString
em uma string padrão criptografada que pode ser convenientemente salva em um arquivo, para superar essa limitação.
Estamos convertendo texto sem formatação P@ssword1
para proteger a string e, em então, canalizar sua saída para ConvertFrom-SecureString
para obter uma string criptografada que pode ser salva com segurança e conveniência em um arquivo.
Como exemplo, digamos que em um computador a senha de administrador tenha sido definida e que seja necessário salvá-la em um arquivo. Podemos fazer isso usando:
Read-Host "Enter Admin Password" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt"
Podemos recuperar essa senha de administrador em uma variável como um objeto seguro, como:
$pass = Get-Content "C:\Scripts\AdminPassword.txt" | ConvertTo-SecureString
Agora, vamos considerar como aproveitar uma senha segura para DCPP. No DCPP, se o computador do usuário tiver a senha do sistema ou de administrador definida, para todos os comandos set
temos que passar a respectiva senha. Portanto, fornecer essa senha como texto sem formatação viola a segurança. Temos que passar a senha como System.Security.SecureString
. Além disso, quando passamos uma senha SecureString
temos que passá-la com um switch -PasswordSecure
e não o switch normal –Password
. Um exemplo é exibido abaixo em que o usuário está tentando definir AdvancedBatteryChargeCfg
para Disabled
e passar a senha SecureString
.
Set-item AdvancedBatteryChargeCfg disabled –PasswordSecure $pass
Aqui $pass contém a senha do sistema e de administrador e é do tipo System.Security.SecureString
. Semelhante à discussão acima, podemos ler $pass
como:
$pass = Read-Host "Enter system/admin password" –AsSecureString
Podemos salvar $pass
para um arquivo, se necessário, como:
$pass| ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt
Artigos relacionados: