Actualizar la directiva de seguridad

La directiva de seguridad predeterminada no conoce la existencia de ningún permiso personalizado. Por ejemplo, el conjunto de permisos con nombre Everything contiene todos los permisos de acceso a código integrados que proporciona el motor en tiempo de ejecución, pero no incluye los permisos personalizados. Para actualizar la directiva de seguridad de modo que sepa de la existencia de un permiso personalizado, debe seguir tres procedimientos:

  • Hacer que la directiva reconozca el permiso personalizado.

  • Agregar el ensamblado a la lista de ensamblados de confianza.

  • Indicar a la directiva de seguridad a qué código se debe conceder el permiso personalizado.

Hacer que la directiva reconozca el permiso personalizado

Para que la directiva reconozca el permiso personalizado, es necesario:

  • Crear un nuevo conjunto de permisos con nombre que incluya el permiso personalizado. (En lugar de crear un conjunto de permisos con nombre, también puede modificar uno existente).

  • Asignar un nombre al conjunto de permisos.

  • Indicar a la directiva de seguridad que el conjunto de permisos con nombre existe.

Para obtener más información, vea Herramienta de la directiva de seguridad de acceso a código (Caspol.exe) o Herramienta Configuración de .NET Framework (Mscorcfg.msc). Para agregar un nuevo conjunto de permisos, puede utilizar uno de varios métodos. Si utiliza la herramienta de la directiva de seguridad de acceso a código (Caspol.exe), puede crear un archivo .xml que contenga una representación XML de un conjunto de permisos personalizados y, a continuación, agregar este archivo a la directiva de seguridad del equipo donde se va a ejecutar el código. Si utiliza la herramienta Configuración de .NET Framework (Mscorcfg.msc), puede copiar un conjunto de permisos existente y agregar una representación XML de un permiso al nuevo conjunto de permisos.

Para garantizar que la representación XML es válida y representa correctamente el permiso, puede generarla mediante código similar al del ejemplo siguiente. Observe que este código crea un permiso personalizado denominado MyCustomPermission que se inicializa en el estado no restringido. Si el permiso personalizado no implementa IUnrestrictedPermission o si no desea establecer directivas para conceder el permiso en un estado no restringido, use el constructor para inicializar el permiso en el estado que desea que tenga.

Imports System
Imports System.IO
Imports System.Security
Imports System.Security.Permissions

Class PSetXML
   Public Shared Sub Main()
      Dim perm As New MyCustomPermission(PermissionState.Unrestricted)
      Dim pset As New NamedPermissionSet("MyPermissionSet", PermissionState.None)
      pset.Description = "Permission set containing my custom permission"
      pset.AddPermission(perm)
      Dim file As New StreamWriter("mypermissionset.xml")
      file.Write(pset.ToXml())
      file.Close()
   End Sub
End Class
using System;
using System.IO;
using System.Security;
using System.Security.Permissions;

class PSetXML {
   public static void Main() 
   {
   MyCustomPermission perm = 
    new MyCustomPermission(PermissionState.Unrestricted);
   NamedPermissionSet pset = 
    new NamedPermissionSet("MyPermissionSet", PermissionState.None);
   pset.Description = "Permission set containing my custom permission";
   pset.AddPermission(perm);
   StreamWriter file = new StreamWriter("mypermissionset.xml");
   file.Write(pset.ToXml());
   file.Close();
   }
}

Tras crear el archivo .xml que contiene el conjunto de permisos, puede agregarlo a la directiva de seguridad. Para utilizar Caspol.exe, escriba lo siguiente en la línea de comandos:

caspol –machine –addpset mypermissionset.xml

Cuando Caspol.exe pregunte si desea agregar el ensamblado que contiene el permiso personalizado a la lista de ensamblados de confianza, escriba yes.

Para agregar el archivo .xml que contiene el conjunto de permisos mediante la herramienta Configuración de .NET Framework, seleccione el nodo Runtime Security Policy y, a continuación, seleccione el nivel de directiva que desee modificar. Haga clic con el botón secundario del mouse en Conjuntos de permisos y seleccione Nuevo. Para agregar el conjunto de permisos, utilice el asistente.

Agregar el ensamblado a la lista de ensamblados de confianza

Dado que el permiso personalizado va a participar en el sistema de seguridad de .NET Framework, debe ser de total confianza (como cualquier código en el que se base el sistema de seguridad). Para obtener un ensamblado de total confianza, es preciso agregarlo a la lista de ensamblados de confianza. Tras agregar el ensamblado del permiso personalizado a la lista mediante Caspol.exe (tal como se ha descrito anteriormente), debe agregar también todos los ensamblados a los que haga referencia la clase de permiso. Para agregar ensamblados adicionales a la lista mediante Caspol.exe, escriba lo siguiente en la línea de comandos:

caspol -addfulltrust mypermissionset.dll

Para ver la lista de ensamblados de total confianza, use el siguiente comando:

caspol -listfulltrust

Como el sistema de seguridad va a confiar plenamente en el ensamblado del permiso personalizado (y en todos los ensamblados a los que haga referencia), es importante que esos archivos se firmen con un nombre criptográficamente seguro. Caspol.exe no agregará ningún ensamblado a la lista de total confianza si no tiene un nombre seguro.

Para agregar un ensamblado a la lista de ensamblados de total confianza mediante la herramienta Configuración de .NET Framework, haga clic con el botón secundario del mouse en el nodo Runtime Security Policy y seleccione Trust Assembly. Para convertir el ensamblado en un ensamblado de confianza, utilice el asistente.

Precaución Si el ensamblado que implementa el objeto de seguridad personalizado hace referencia a otros ensamblados, debe agregar primero los ensamblados a los que se hace referencia a la lista de ensamblados de confianza total. Los objetos de seguridad personalizados creados con Visual Basic, Visual C++ o JScript hacen referencia a Microsoft.VisualBasic.dll, Microsoft.VisualC.dll o Microsoft.JScript.dll, respectivamente. Estos ensamblados no se encuentran en la lista de ensamblados de confianza total de forma predeterminada. Debe agregar el ensamblado adecuado a la lista de confianza total antes de agregar un objeto de seguridad personalizado. Si se produce un error al realizar esta operación, el sistema de seguridad se interrumpirá y los ensamblados no se cargarán. En caso de que se produzca esta situación, la opción -all -reset de la herramienta Caspol.exe no reparará la seguridad. Para reparar la seguridad, debe editar manualmente los archivos de seguridad a fin de quitar el objeto de seguridad personalizado.

Configurar la directiva para que conceda el permiso personalizado

Debe asociar el nuevo conjunto de permisos a los grupos de código correspondientes para que la directiva de seguridad conceda el permiso personalizado al código que deba disponer de él. Para ello, modifique un grupo de código existente o agregue un nuevo grupo de código que identifique el conjunto de código al que se debe conceder el permiso personalizado. Para obtener más información sobre los grupos de código, vea Directiva de seguridad. Utilice el siguiente comando de Caspol.exe para convertir mypermissionset en el conjunto de permisos que se concederá al código que cumpla la condición de pertenencia del grupo de código LocalIntranet:

caspol -user -chggroup 1.2. mypermissionset

En este ejemplo, la etiqueta 1.2 representa el grupo de código LocalIntranet. Para mostrar todos los grupos de código y las etiquetas asociadas, utilice el comando siguiente:

caspol -list

Para ver la lista de conjuntos de permisos, use el siguiente comando:

caspol -listpset

Para convertir mypermissionset en el conjunto de permisos que se concederá a los miembros del grupo de código LocalIntranet mediante la herramienta Configuración de .NET Framework, seleccione el nodo Runtime Security Policy y, a continuación, seleccione la directiva Machine. Haga clic con el botón secundario del mouse en el nodo LocalIntranet_Zone y seleccione Properties. Cambie el conjunto de permisos en la ficha Permission Set.

Vea también

Referencia

Herramienta de la directiva de seguridad de acceso a código (Caspol.exe)
Herramienta Configuración de .NET Framework (Mscorcfg.msc)
IUnrestrictedPermission Interface

Conceptos

Crear permisos de acceso a código propios
Directiva de seguridad

Otros recursos

Seguridad de acceso a código