Buscar..


Observaciones

Firmar un script hará que sus scripts cumplan con todas las políticas de ejecución en PowerShell y garantizará la integridad de un script. Los scripts firmados no se ejecutarán si se han modificado después de firmarlos.

La firma de scripts requiere un certificado de firma de código. Recomendaciones:

  • Pruebas / scripts personales (no compartidos): certificado de una autoridad certificada de confianza (interna o de terceros) O un certificado autofirmado.
  • Organización interna compartida: Certificado de la autoridad certificada de confianza (interna o de terceros)
  • Organización externa compartida: Certificado de la autoridad certificadora de terceros de confianza

Lea más en about_Signing @ TechNet

Políticas de ejecución

PowerShell tiene políticas de ejecución configurables que controlan qué condiciones se requieren para que se ejecute un script o una configuración. Se puede establecer una política de ejecución para múltiples ámbitos; Computadora, usuario actual y proceso actual. Las políticas de ejecución se pueden omitir fácilmente y no están diseñadas para restringir a los usuarios, sino protegerlos de violar las políticas de firma involuntariamente.

Las políticas disponibles son:

Ajuste Descripción
Restringido No se permiten scripts
AllSigned Todos los scripts necesitan ser firmados
RemoteSigned Todos los scripts locales permitidos; solo scripts remotos firmados
Irrestricto No hay requisitos. Todos los scripts están permitidos, pero avisarán antes de ejecutar los scripts descargados de Internet.
Derivación Se permiten todos los scripts y no se muestran advertencias
Indefinido Eliminar la política de ejecución actual para el ámbito actual. Utiliza la política de los padres. Si todas las políticas no están definidas, se utilizará la restricción.

Puede modificar las políticas de ejecución actuales utilizando Set-ExecutionPolicy -cmdlet, Group Policy o el parámetro -ExecutionPolicy cuando -ExecutionPolicy un proceso powershell.exe .

Lea más en about_Execution_Policies @ TechNet

Firmando un guion

La firma de un script se realiza mediante el uso del Set-AuthenticodeSignature -cmdlet y un certificado de firma de código.

#Get the first available personal code-signing certificate for the logged on user
$cert = @(Get-ChildItem -Path Cert:\CurrentUser\My -CodeSigningCert)[0]
    
#Sign script using certificate
Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1

También puede leer un certificado de un archivo .pfx usando:

$cert = Get-PfxCertificate -FilePath "C:\MyCodeSigningCert.pfx"

El guión será válido hasta que caduque el certificado. Si utiliza un servidor de marca de tiempo durante la firma, la secuencia de comandos seguirá siendo válida después de que caduque el certificado. También es útil agregar la cadena de confianza para el certificado (incluida la autoridad raíz) para ayudar a la mayoría de las computadoras a confiar en el certificado utilizado para firmar el script.

Set-AuthenticodeSignature -Certificate $cert -FilePath c:\MyScript.ps1 -IncludeChain All -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll"

Se recomienda utilizar un servidor de marca de tiempo de un proveedor de certificados de confianza como Verisign, Comodo, Thawte, etc.

Cambiando la política de ejecución usando Set-ExecutionPolicy

Para cambiar la política de ejecución para el ámbito predeterminado (LocalMachine), use:

Set-ExecutionPolicy AllSigned

Para cambiar la política para un alcance específico, use:

Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy AllSigned

Puede suprimir las indicaciones agregando el interruptor -Force .

Omitir la política de ejecución para un solo script

A menudo es posible que necesite ejecutar un script sin firmar que no cumpla con la política de ejecución actual. Una forma fácil de hacer esto es omitir la política de ejecución para ese proceso único. Ejemplo:

powershell.exe -ExecutionPolicy Bypass -File C:\MyUnsignedScript.ps1

O puedes usar la taquigrafía:

powershell -ep Bypass C:\MyUnsignedScript.ps1

Otras políticas de ejecución:

Política Descripción
AllSigned Solo se pueden ejecutar scripts firmados por un editor de confianza.
Bypass Sin restricciones; Se pueden ejecutar todos los scripts de Windows PowerShell.
Default Normalmente RemoteSigned , pero se controla a través de ActiveDirectory
RemoteSigned Los scripts descargados deben estar firmados por un editor de confianza antes de que puedan ejecutarse.
Restricted No se pueden ejecutar scripts. Windows PowerShell solo se puede utilizar en modo interactivo.
Undefined N / A
Unrestricted * Similar a la bypass

Unrestricted* Advertencia: si ejecuta una secuencia de comandos sin firmar que se descargó de Internet, se le solicitará permiso antes de que se ejecute.


Más información disponible aquí .

Obtener la política de ejecución actual.

Obtención de la política de ejecución efectiva para la sesión actual:

PS> Get-ExecutionPolicy
RemoteSigned

Listar todas las políticas de ejecución efectivas para la sesión actual:

PS> Get-ExecutionPolicy -List

        Scope ExecutionPolicy
        ----- ---------------
MachinePolicy       Undefined
   UserPolicy       Undefined
      Process       Undefined
  CurrentUser       Undefined
 LocalMachine    RemoteSigned

Listar la política de ejecución para un alcance específico, ej. proceso:

PS> Get-ExecutionPolicy -Scope Process
Undefined

Obteniendo la firma de un script firmado

Obtenga información sobre la firma Authenticode de un script firmado utilizando el Get-AuthenticodeSignature -cmdlet:

Get-AuthenticodeSignature .\MyScript.ps1 | Format-List *

Creación de un certificado de firma de código autofirmado para pruebas

Al firmar scripts personales o al probar la firma de código, puede ser útil crear un certificado de firma de código autofirmado.

5.0

A partir de PowerShell 5.0, puede generar un certificado de firma de código autofirmado mediante el certificado de New-SelfSignedCertificate Self:

New-SelfSignedCertificate -FriendlyName "StackOverflow Example Code Signing" -CertStoreLocation Cert:\CurrentUser\My -Subject "SO User" -Type CodeSigningCert

En versiones anteriores, puede crear un certificado autofirmado utilizando la herramienta makecert.exe que se encuentra en .NET Framework SDK y Windows SDK.

Solo las computadoras que tengan instalado el certificado confiarán en un certificado autofirmado. Para los scripts que se compartirán, se recomienda un certificado de una autoridad de certificados de confianza (interna o de terceros de confianza).



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow