En aquest tema, explorarem les millors pràctiques de seguretat en PowerShell per assegurar que els teus scripts i entorns siguin segurs. La seguretat és un aspecte crític en qualsevol entorn de programació, especialment quan es treballa amb eines potents com PowerShell que poden tenir accés a recursos sensibles del sistema.
Continguts
Execució de Polítiques
PowerShell té diverses polítiques d'execució que determinen quins scripts es poden executar en el sistema. Les polítiques d'execució són:
- Restricted: No es permet l'execució de cap script.
- AllSigned: Només es poden executar scripts signats per un editor de confiança.
- RemoteSigned: Es poden executar scripts locals sense signar, però els scripts descarregats d'Internet han d'estar signats.
- Unrestricted: Es poden executar tots els scripts, però es mostra un avís per als scripts descarregats d'Internet.
Exemple de Codi
# Comprovar la política d'execució actual Get-ExecutionPolicy # Establir la política d'execució a RemoteSigned Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Explicació
Get-ExecutionPolicy
: Mostra la política d'execució actual.Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
: Estableix la política d'execució aRemoteSigned
per a l'usuari actual.
Signatura de Scripts
Signar scripts és una manera de garantir que el codi no ha estat alterat des que va ser signat per l'autor. Això ajuda a prevenir l'execució de scripts maliciosos.
Exemple de Codi
# Signar un script amb un certificat Set-AuthenticodeSignature -FilePath .\myscript.ps1 -Certificate (Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)
Explicació
Set-AuthenticodeSignature
: Afegeix una signatura digital a un script.-FilePath .\myscript.ps1
: Especifica el camí del script a signar.-Certificate (Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)
: Utilitza un certificat de signatura de codi del magatzem de certificats de l'usuari actual.
Gestió de Credencials
És important gestionar les credencials de manera segura per evitar exposar informació sensible.
Exemple de Codi
# Emmagatzemar credencials de manera segura $cred = Get-Credential # Utilitzar les credencials emmagatzemades Invoke-Command -ComputerName Server01 -Credential $cred -ScriptBlock { Get-Process }
Explicació
Get-Credential
: Mostra una finestra de diàleg per introduir les credencials de manera segura.Invoke-Command -ComputerName Server01 -Credential $cred -ScriptBlock { Get-Process }
: Executa un bloc de codi en un equip remot utilitzant les credencials emmagatzemades.
Ús de SecureString
SecureString
és una classe que proporciona una manera segura d'emmagatzemar dades sensibles com contrasenyes.
Exemple de Codi
# Convertir una contrasenya a SecureString $securePassword = ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force # Crear un objecte PSCredential amb un nom d'usuari i una contrasenya segura $credential = New-Object System.Management.Automation.PSCredential ("username", $securePassword)
Explicació
ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force
: Converteix una contrasenya en text pla a un objecteSecureString
.New-Object System.Management.Automation.PSCredential ("username", $securePassword)
: Crea un objectePSCredential
utilitzant un nom d'usuari i una contrasenya segura.
Auditoria i Registre
L'auditoria i el registre són essencials per monitoritzar l'activitat dels scripts i detectar possibles problemes de seguretat.
Exemple de Codi
# Habilitar el registre de transcripcions Start-Transcript -Path "C:\Logs\PowerShell_transcript.txt" # Executar comandes Get-Process # Aturar el registre de transcripcions Stop-Transcript
Explicació
Start-Transcript -Path "C:\Logs\PowerShell_transcript.txt"
: Inicia el registre de totes les comandes i la seva sortida en un fitxer de transcripció.Stop-Transcript
: Atura el registre de transcripcions.
Consells Addicionals
- Evita l'ús de contrasenyes en text pla: Utilitza
SecureString
iPSCredential
per emmagatzemar contrasenyes de manera segura. - Revisa els scripts abans d'executar-los: Especialment si provenen de fonts desconegudes.
- Utilitza polítiques d'execució restrictives: Configura la política d'execució a
AllSigned
oRemoteSigned
per augmentar la seguretat. - Mantén PowerShell actualitzat: Assegura't d'utilitzar la versió més recent de PowerShell per beneficiar-te de les últimes millores de seguretat.
Conclusió
En aquesta secció, hem explorat diverses pràctiques de seguretat que pots implementar en els teus scripts de PowerShell per protegir el teu entorn i les teves dades. Des de la configuració de polítiques d'execució fins a la gestió segura de credencials i l'auditoria, aquestes pràctiques t'ajudaran a mantenir un entorn segur i fiable.
Curs de PowerShell
Mòdul 1: Introducció a PowerShell
- Què és PowerShell?
- Instal·lació i Configuració de PowerShell
- Consola i ISE de PowerShell
- Comandes i Sintaxi Bàsiques
- Sistema d'Ajuda en PowerShell
Mòdul 2: Scripting Bàsic
- Variables i Tipus de Dades
- Operadors en PowerShell
- Sentències Condicionals
- Bucles en PowerShell
- Funcions i Scripts
Mòdul 3: Treballant amb Objectes
- Comprensió dels Objectes
- Propietats i Mètodes dels Objectes
- Pipelines i Manipulació d'Objectes
- Filtratge i Selecció d'Objectes
- Ordenació i Agrupació d'Objectes
Mòdul 4: Tècniques Avançades de Scripting
- Gestió d'Errors
- Depuració de Scripts
- Expressions Regulars
- Treballant amb Fitxers i Directoris
- Ús de Mòduls i Snap-ins
Mòdul 5: Automatització i Programació de Tasques
- Introducció a l'Automatització
- Creació de Tasques Programades
- Ús de PowerShell per a l'Administració del Sistema
- Automatització de Tasques d'Active Directory
- Automatització de Tasques de Xarxa
Mòdul 6: Remotització amb PowerShell
- Introducció a la Remotització
- Configuració de la Remotització
- Ús d'Invoke-Command
- Gestió de Sessions
- Consideracions de Seguretat
Mòdul 7: Funcions Avançades de PowerShell
- Perfils de PowerShell
- Personalització de l'Entorn de PowerShell
- Creació i Ús de Classes
- Treballant amb XML i JSON
- Ús de PowerShell amb REST APIs
Mòdul 8: PowerShell i DevOps
- Introducció a DevOps
- Ús de PowerShell amb Pipelines CI/CD
- Infraestructura com a Codi (IaC)
- Gestió de Recursos al Núvol amb PowerShell
- PowerShell i Docker