miércoles, 4 de agosto de 2010

Directiva de ejecución y firma de scripts

Por defecto, PowerShell no permite la ejecución de ningún Script. Esto es debido a la directiva de ejecución.

La directiva de ejecución dispone de 6 niveles:

Restricted. No permite la ejecución de scripts (.ps1, .psm1, .ps1.xml) (Directiva predeterminada)
Allsigned. Permite solo la ejecución de scripts firmados.
RemoteSigned. Permite la ejecución de scripts locales sin firmar. Los remotos tienen que estar firmados.
Unrestricted. Permite la ejecución de scripts sin firmar, pero da advertencias si el script se ha descargado de Internet.
Bypass. Permite la ejecución de scripts sin firmar sin dar advertencias.
Undefined. No hay definida una directiva de ejecución. Se aplica la directiva Restricted.

Vamos a cambiar la directiva de ejecución al nivel AllSigned:

Set-ExecutionPolicy AllSigned

A partir de ahora, cualquier script que queramos ejecutar, tendrá que estar firmado por un editor de confianza.

¿Cómo se firma un script?

Primero, la persona que va a firmar los scripts, debe obtener un certificado con propósito Firma de Código.Lo podemos solicitar a nuestra CA usando el navegador de Internet.

Segundo, debemos almacenar el certificado en una variable:

$cert = Get-ChildItem -path cert:\CurrentUser\my -CodeSigningCert

Tercero, firmamos el script:

Set-AuthenticodeSignature script.ps1 -cert $cert

Cuarto, en la máquina en la que vamos a ejecutar el script, tiene que estar dado de alta el editor de confianza usado para la firma. El editor de confianza se puede distribuir a toda la organización a través de una directiva de grupo. Agregamos a la directiva de grupo, la exportación del certificado sin la clave privada, lógicamente.

Ahora ya podemos ejecutar scripts que hayan sido firmados digitalmente por la persona que solicitó el certificado de firma de código.

Notas

Si no hacemos el paso cuatro, al ejecutar el script firmado, dará una advertencia de seguridad, pero nos dejará ejecutarlo.

Para ver la directiva actual de ejecución, usaremos el cmdlet Get-ExecutionPolicy.

Para ver la ayuda de los diferentes niveles de ejecución y más ayuda, usaremos Help about_Execution_Policies.

Para ver quién ha firmado un script: Get-AuthenticodeSignature script.ps1 | Format-List

Para más información en: Help about_signing

No hay comentarios:

Publicar un comentario