Sunday, April 22, 2007

Distribuir configuracion de seguridad de .NET 2.0 sin usar SDK o caspol

Este articulo aplica a: Seguridad en Microsoft .NET Framework 2.0
keywords: CAS, full, trust, assembly, security, policy, mscorcfg.msc caspol.exe

Cuando quieres ajustar la configuracion de seguridad en .NET 2.0 usas la herramienta mscorcfg.msc (Control Panel/Administrative Tools/Microsoft .NET Framework 2.0 Configuration)

Peeeeero, algunas veces uno necesita distribuir esa misma configuracion a (muchas o algunas) otras maquinas en produccion, y el problema es que la herramienta mscorcfg.msc solo esta incluida como parte del SDK el cual mide como 354MB, otra opcion es usar la linea de comando, pero eso como que asusta a la mayoria de la gente, hay mucha gente que tiene este problema, asi que decidi poner aqui una solucion facil para este problema.

Les menti en el titulo del articulo, si necesitas el SDK, pero solo en una maquina, y como eres un desarrollador (cierto?), supongo que tienes Visual Studio instalado en al menos una maquina, y ahi esta incluido el SDK, si no tienes el mentado SDK en ninguna maquina pues vas a tener que bajarlo e instalarlo al menos en una maquina.

Una vez que ya tengas la herramienta mscorcfg, configura la maquina con los permisos que quieras distribuir, asigna confianza a los assemblies (trust assemblies), ajusta las zonas de seguridad (adjust zone security settings), etc, cuando hallas terminado de hacer los ajustes necesarios, usa esta opcion

Configure Code Access Security Policy (configurar politicas de seguridad que definen que tantos permisos le damos al codigo)







Create Deployment Package (crear paquete de distribucion)






Veras un dialogo el cual no tiene muchas opciones


Este dialogo es un poco extraño y buggy*, pero solo tienes que especificar un nombre de archivo (que sera creado) en un folder valido (existente), por ejemplo c:\SecuritySettings

La otra cosa que seguro querras cambiar es "security policy level to deploy" (nivel de la politica de seguridad que deseas distribuir), si vas a distribuir a maquinas en produccion querras usar "machine" (aplica a todos los usuarios de la maquina) o "user" (solo al usuario bajo el que lo instales, click Next, luego finish.

Lo que este programita hace es que nos crea un paquete que contiene toda la configuracion de seguridad de .net en esa maquina, y lo pone en un simple y pequeño programita de instalacion que puedes correr en cualquier maquina para ajustar la configuracion de seguridad facil y rapido.

Asi que ahora lo unico que necesitas hacer es llevar ese programita a todas las maquinas a donde quieras distribuir la configuracion de seguridad, correrlo y listo

Cuando corres ese programita naturalmente estaras esperando un dialogo que te pregunte darle click en next, next, next, finish, pero no habra ningun dialogo, veras una ventanita aparecer por un segundo y luego desaparece y eso es todo lo que hace (es posible que necesites correr el programa con privilegios mas elevados que los que tengas en cada maquina), si pudiste correr el programita, la configuracion de seguridad ha sido cambiada exitosamente.

asi que ahora si "corre en mi maquina!", puedes hacer que corra en otras maquinas tambien =o)

16 comments:

Anonymous said...

Muy bueno, fue de mucha ayuda, buscaba justamente eso.

Anonymous said...

Por fin encontré la solución, gracias!!!

Alejandro B said...

Muchas gracias por este articulo, era exactamente lo que andaba buscando.

BlackTigerX said...

me alegro mucho que os halla sido de utilidad

salu2

Anonymous said...

Perfecto, muchisimas gracias !

Anonymous said...

Muchas gracias por la ayuda, muy útil.

Anonymous said...

Muy buen aporte!
Ahora, ¿de donde puedo bajar este programa que comentas? Gracias.-

Anonymous said...

y si con esto tampoco se soluciona, qué pasa? qué hay que hacer?!?!?

s2

BlackTigerX said...

el SDK lo pueden bajar aqui http://www.microsoft.com/downloads/details.aspx?familyid=fe6f2099-b7b4-4f47-a244-c96d69c35dec&displaylang=en

BlackTigerX said...

y eso de que no te funciono que quieres decir?

Anonymous said...

después de seguir tus instrucciones sigue dando el mismo error...
System.Security.Permissions.FileIOPermission

BlackTigerX said...

y en tu maquina no da ese error?

Anonymous said...

pues no, no me lo dá. Ni en mi máquina ni en las que tienen instalado el visual studio. Curioso, verdad?
lo raro de todo esto, es que estaba convencido que con tu solución funcionaría :(

gracias por tu atención!

BlackTigerX said...

oh ya veo, este articulo no cubre como arreglar ese problema, este articulo es para cuando ya tengas todo funcionando en tu maquina, puedas hacerlo funcionar en las demas maquinas creando el paquete que distribuye la configuracion de seguridad.

Primero tendrias que hacerlo funcionar en tu maquina, luego podrias usar el articulo para hacer que funcione en las demas.

Lo que necesitas hacer entonces es dar mas permisos a tu aplicacion, lo puedes hacer en la opcion de "increase assembly trust" (despues de entrar a la opcion de "configure code access security")

Anonymous said...

hola, soy el mismo :)

me debo haber explicado mal.
En mi máquina la aplicación funciona perfecta pero en las que no tienen el visual studio instalado tengo que copiarla al equipo; desde la intranet directo, arroja el error que he dicho antes.
Tiene toda la pinta de derechos de la intranet, que se debería solucionar con tu post. Sin embargo, no es así y no entiendo el porqué...


saludos

BlackTigerX said...

aah!, correr aplicaciones .NET desde intranet es otra historia, aqui puedes encontrar detalles sobre eso