Aktualisieren der Sicherheitsrichtlinien

Die Standardsicherheitsrichtlinien enthalten keine Informationen über das Vorhandensein benutzerdefinierter Berechtigungen. Der benannte Berechtigungssatz Everything enthält z. B. sämtliche integrierten Codezugriffsberechtigungen, die von der Laufzeit bereitgestellt werden, jedoch keine benutzerdefinierten Berechtigungen. Um die Sicherheitsrichtlinien mit den Informationen über die benutzerdefinierten Berechtigungen zu aktualisieren, müssen Sie drei Schritte ausführen:

  • Stellen Sie für die Richtlinien Informationen über die benutzerdefinierte Berechtigung bereit.

  • Fügen Sie die Assembly der Liste vertrauenswürdiger Assemblys hinzu.

  • Teilen Sie den Sicherheitsrichtlinien mit, welchem Code die benutzerdefinierte Berechtigung erteilt werden soll.

Wichtiger HinweisWichtig

In .NET Framework, Version 4 ist es nicht mehr die Aufgabe der CLR (Common Language Runtime), Sicherheitsrichtlinien für Computer bereitzustellen.Microsoft empfiehlt die Verwendung von Windows-Richtlinien für die Softwareeinschränkung anstelle der CLR-Sicherheitsrichtlinie.Die Informationen in diesem Thema gelten für .NET Framework, Version 3.5 oder früher, nicht für .NET Framework 4 oder höher.Weitere Informationen über diese und andere Änderungen finden Sie unter Änderungen der Sicherheit in .NET Framework 4.

Informieren der Richtlinien über die benutzerdefinierte Berechtigung

Um die Richtlinie über die benutzerdefinierte Berechtigung zu informieren, müssen Sie folgende Schritte ausführen:

  • Erstellen Sie einen neuen benannten Berechtigungssatz, der die benutzerdefinierte Berechtigung enthält. (Sie können einen vorhandenen benannten Berechtigungssatz ändern, anstatt einen neuen zu erstellen.)

  • Weisen Sie dem Berechtigungssatz einen Namen zu.

  • Informieren Sie die Sicherheitsrichtlinie darüber, dass der benannte Berechtigungssatz vorhanden ist.

Weitere Informationen finden Sie unter Sicherheitsrichtlinientool für den Codezugriff (Caspol.exe) und .NET Framework-Konfigurationstool (Mscorcfg.msc). Sie können einen neuen Berechtigungssatz auf verschiedene Weise hinzufügen. Bei der Verwendung des Sicherheitsrichtlinientools für den Codezugriff (Caspol.exe) können Sie eine XML-Datei erstellen, die eine XML-Darstellung eines benutzerdefinierten Berechtigungssatzes enthält, und diese Datei anschließend den Sicherheitsrichtlinien auf dem Computer hinzufügen, auf dem der Code ausgeführt wird. Bei Verwendung des .NET Framework-Konfigurationstools (Mscorcfg.msc) können Sie einen vorhandenen Berechtigungssatz kopieren und dem neuen Berechtigungssatz eine XML-Darstellung einer Berechtigung hinzufügen.

Um zu gewährleisten, dass die XML-Darstellung gültig ist und die Berechtigung fehlerfrei darstellt, können Sie die XML-Darstellung mit Code ähnlich dem folgenden Beispiel erstellen. Beachten Sie, dass mit diesem Code die mit dem uneingeschränkten Zustand initialisierte benutzerdefinierte Berechtigung MyCustomPermission erstellt wird. Wenn die benutzerdefinierte Berechtigung IUnrestrictedPermission nicht implementiert oder Sie die Richtlinien nicht so festlegen möchten, dass die Berechtigung uneingeschränkt erteilt wird, initialisieren Sie die Berechtigung unter Verwendung des Konstruktors mit dem gewünschten Status.

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();
   }
}

Wenn Sie die XML-Datei erstellt haben, die den Berechtigungssatz enthält, können Sie diese den Sicherheitsrichtlinien hinzufügen. Wenn Sie Caspol.exe verwenden möchten, geben Sie in der Befehlszeile Folgendes ein:

caspol –machine –addpset mypermissionset.xml

Wenn Caspol.exe fragt, ob Sie die Assembly mit der benutzerdefinierten Berechtigung der Liste der vertrauenswürdigen Assemblys hinzufügen möchten, geben Sie yes ein.

Um die XML-Datei, die den Berechtigungssatz enthält, mithilfe des .NET Framework-Konfigurationstools (Mscorcfg.msc) hinzuzufügen, wählen Sie den Knoten Laufzeitsicherheitsrichtlinie und anschließend die zu ändernde Richtlinienebene. Klicken Sie mit der rechten Maustaste auf Berechtigungssätze, und wählen Sie Neu aus. Fügen Sie den Berechtigungssatz mithilfe des Assistenten hinzu.

Hinzufügen der Assembly zur Liste der vertrauenswürdigen Assemblys

Da die benutzerdefinierte Berechtigung Bestandteil des Sicherheitssystems von .NET Framework sein soll, muss sie vollständig vertrauenswürdig sein, wie dies bei Code grundsätzlich der Fall ist, auf dem das Sicherheitssystem beruht. Wenn Sie die Assembly der Liste vollständig vertrauenswürdiger Assemblys hinzugefügt haben, ist sie vollständig vertrauenswürdig. Nachdem Sie die Assembly mit der benutzerdefinierten Berechtigung unter Verwendung des Sicherheitsrichtlinientools für den Codezugriff (Caspol.exe) der Liste wie bereits beschrieben hinzugefügt haben, müssen Sie außerdem alle Assemblys hinzufügen, auf die die Berechtigungsklasse verweist. Um der Liste mit Caspol.exe weitere Assemblys hinzuzufügen, geben Sie in der Befehlszeile Folgendes ein:

caspol -addfulltrust mypermissionset.dll

Geben Sie folgenden Befehl ein, um sich die Liste der vollständig vertrauenswürdigen Assemblys anzeigen zu lassen:

caspol -listfulltrust

Da die Assembly mit der benutzerdefinierten Berechtigung sowie alle Assemblys, auf die sie verweist, vollständige Vertrauenswürdigkeit durch das Sicherheitssystem erhält, müssen diese Dateien mit einem kryptografisch starken Namen signiert werden. Wenn eine Assembly keinen starken Namen aufweist, fügt Caspol.exe sie nicht der Liste vollständig vertrauenswürdiger Assemblys hinzu.

Um eine Assembly mit dem .NET Framework-Konfigurationstool (Mscorcfg.msc) zur Liste vollständig vertrauenswürdiger Assemblys hinzuzufügen, klicken Sie mit der rechten Maustaste auf den Knoten Laufzeitsicherheitsrichtlinie und wählen Einer Assembly vertrauen aus. Definieren Sie die Assembly mithilfe des Assistenten als vertrauenswürdig.

Vorsicht Wenn die Assembly, die das benutzerdefinierte Sicherheitsobjekt implementiert, auf andere Assemblys verweist, müssen Sie der Liste der vollständig vertrauenswürdigen Assemblys zunächst die Assemblys hinzufügen, auf die verwiesen wird. Benutzerdefinierte Sicherheitsobjekte, die mit Visual Basic, Visual C++ oder JScript erstellt wurden, verweisen auf Microsoft.VisualBasic.dll, Microsoft.VisualC.dll bzw. Microsoft.JScript.dll. In der Standardeinstellung befinden sich diese Assemblys nicht in der Liste der vollständig vertrauenswürdigen Assemblys. Sie müssen die entsprechende Assembly zur Liste der vollständig vertrauenswürdigen Assemblys hinzufügen, bevor Sie ein benutzerdefiniertes Sicherheitsobjekt hinzufügen. Wenn Sie dies unterlassen, wird das Sicherheitssystem beschädigt, und sämtliche Assemblys können nicht mehr geladen werden. In diesem Fall wird die Sicherheit nicht durch die Option -all -reset von Caspol.exe repariert. Zum Wiederherstellen der Sicherheit müssen Sie die Sicherheitsdateien manuell bearbeiten und das benutzerdefinierte Sicherheitsobjekt entfernen.

Einrichten der Richtlinien zum Erteilen der benutzerdefinierten Berechtigung

Sie müssen dem neuen Berechtigungssatz die entsprechenden Codegruppen zuordnen, sodass die Sicherheitsrichtlinien die benutzerdefinierte Berechtigung dem Code erteilen, für den sie vorgesehen ist. Hierzu ändern Sie eine vorhandene Codegruppe, oder Sie fügen eine neue Codegruppe hinzu, die den Code angibt, dem die benutzerdefinierte Berechtigung erteilt werden soll. Weitere Informationen über Codegruppen finden Sie unter Sicherheitsrichtlinie. Verwenden Sie den folgenden Caspol.exe-Befehl, um mypermissionset als Berechtigungssatz festzulegen, der Code erteilt wird, der die Mitgliedschaftsbedingung der Codegruppe LocalIntranet erfüllt:

caspol -user -chggroup 1.2. mypermissionset

In diesem Beispiel stellt die Bezeichnung 1.2 die Codegruppe LocalIntranet dar. Verwenden Sie den folgenden Befehl, um alle Codegruppen und die zugeordneten Bezeichnungen anzuzeigen:

caspol -list

Mit folgendem Befehl zeigen Sie die Liste der Berechtigungssätze an:

caspol -listpset

Um mypermissionset mithilfe des .NET Framework-Konfigurationstools (Mscorcfg.msc) als Berechtigungssatz festzulegen, der Mitgliedern der Codegruppe LocalIntranet erteilt wird, wählen Sie den Knoten Laufzeitsicherheitsrichtlinie und anschließend die Richtlinie Computer aus. Klicken Sie mit der rechten Maustaste auf den Knoten LocalIntranet_Zone, und wählen Sie Eigenschaften aus. Ändern Sie den Berechtigungssatz mithilfe der Registerkarte Berechtigungssatz.

Siehe auch

Referenz

Caspol.exe (Richtlinientool für die Codezugriffssicherheit)

Mscorcfg.msc (.NET Framework-Konfigurationstool)

IUnrestrictedPermission

Konzepte

Codezugriffssicherheit

Erstellen von eigenen Codezugriffsberechtigungen

.NET Framework-Sicherheitsrichtlinie