El concepto detrás de las contraseñas seguras es que en los scripts de producción no debemos dejar contraseñas importantes a simple vista. Se trata de una falta de seguridad grave. Por lo tanto, con PowerShell podemos proteger una contraseña o, al menos, reducir su visibilidad. En primer lugar, analizaremos los aspectos generales de la cadena segura y, luego, cómo Dell Command PowerShell Provider (DCPP) aprovecha la característica inherente de PowerShell para proteger la contraseña.
Tenga en cuenta que deseamos leer el nombre de usuario y la contraseña del usuario en la consola. Sabemos que el nombre de usuario generalmente no requiere ninguna seguridad y puede ser visible para todos. Pero no debemos permitir que extraños conozcan la contraseña del usuario. Podemos facilitar este requisito con los comandos que se indican a continuación:
$user = Read-Host "Enter Username" $pass = Read-Host "Enter Password" -AsSecureString
Lo anterior es una visión general de cómo podemos agregar más seguridad cuando debemos proteger información importante, como una contraseña. En el ejemplo anterior, la variable $pass es del tipo System.Security.SecureString
. Obtenemos una introducción de otros dos cmdlets ampliamente utilizados que PowerShell proporciona para facilitar la protección de los campos antes de abordar aspectos de DCPP.
Los dos comandos son ConvertTo-SecureString
y ConvertFrom-SecureString
. ConvertTo-SecureString
convierte texto sin formato al tipo System.Security.SecureString
. A continuación, se muestra un ejemplo:
"P@ssword1" | ConvertTo-SecureString -AsPlainText -Force
En el ejemplo anterior, el texto sin formato P@assword1
se convierte al tipo System.Security.SecureString
. Esto es informativo y puede o no ser ampliamente utilizado.
El siguiente cmdlet ConvertFrom-SecureString
es un cmdlet más utilizado que se usa para convertir cadenas seguras en cadenas estándar cifradas. La principal limitación de ConvertTo-SecureString
es que su resultado no se puede escribir directamente en un archivo para su uso futuro. Tenemos que usar ConvertFrom-SecureString
que convierte System.Security.SecureString
en una cadena estándar cifrada que se puede guardar convenientemente en un archivo, para superar esta limitación.
Estamos convirtiendo texto sin formato P@ssword1
para proteger la cadena y luego canalizar su resultado a ConvertFrom-SecureString
para obtener una cadena cifrada que se puede guardar de manera segura y conveniente en un archivo.
Por ejemplo, en una computadora, si se ha establecido la contraseña de administrador y debemos guardarla en un archivo. Podemos hacer esto usando:
Read-Host "Enter Admin Password" -AsSecureString | ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt"
Podemos recuperar esta contraseña de administrador en una variable como un objeto seguro, como:
$pass = Get-Content "C:\Scripts\AdminPassword.txt" | ConvertTo-SecureString
Ahora consideremos cómo aprovechar una contraseña segura para DCPP. En DCPP, si la computadora del usuario tiene configurada una contraseña de administrador o de sistema, para todos set
los comandos tenemos que aplicar la contraseña respectiva. Por lo tanto, proporcionar esta contraseña como texto sin formato infringe la seguridad. Tenemos que pasar la contraseña como System.Security.SecureString
. Además, cuando pasamos una contraseña SecureString
tenemos que pasarla con un switch -PasswordSecure
y no el switch –Password
normal. A continuación, se muestra un ejemplo en el que el usuario intenta establecer AdvancedBatteryChargeCfg
como Disabled
y pasar la contraseña SecureString
:
Set-item AdvancedBatteryChargeCfg disabled –PasswordSecure $pass
Aquí $pass contiene la contraseña del sistema y de administrador, y es del tipo System.Security.SecureString
. De manera similar a la discusión anterior, podemos leer $pass
como:
$pass = Read-Host "Enter system/admin password" –AsSecureString
Podemos guardar $pass
en un archivo, si es necesario, como:
$pass| ConvertFrom-SecureString | Out-File "C:\Scripts\AdminPassword.txt
Artículos relacionados: