(0) exportieren Drucken
Alle erweitern
Erweitern Minimieren

Full Trust für Assemblies mit caspol.exe

Veröffentlicht: 13. Mai 2005
Von Mathias Schiffer

In diesem MSDN Quickie erfahren Sie, wie Sie Ihren .NET-Anwendungen auf Anwendermaschinen Rechte zuordnen können, ohne dass der Anwender Administrationsaufgaben vornehmen muss.

Jahrzehntelang konnten wir Softwareentwickler rein technisch betrachtet so ungefähr alles machen, was wir wollten. Das ist mit .NET vorbei. Denn nunmehr kontrolliert das .NET Framework als Ausführungsumgebung, welche Rechte eine .NET-Anwendung erhält. Da reicht das Spektrum von keinerlei Rechten bis zum allumfassenden „Full Trust“ – dem uneingeschränkten Vertrauen in eine Anwendung in der Form, wie es vor .NET schlicht der Normalzustand war.

Dieser MSDN Quickie beschreibt, wie Sie programmatisch mithilfe des .NET Framework-Utilities „caspol.exe“ dafür Sorge tragen können, dass Ihre Anwendung mit „Full Trust“ ablaufen kann. Im MSDN Quickie „Full Trust für Assemblies per Sourcecode“ erfahren Sie, wie sie den gleichen Zweck mit auszuführendem Sourcecode erreichen können.

Evidence-Kriterium: Strong Name

Im Beispielfall wird aus dem Reigen verschiedener Möglichkeiten des „Evidence“ (vereinfacht: der unfälschbaren Eindeutigkeit einer zu prüfenden Datei) die Anwendung mit einem „Starken Namen“ (Strong Name) versehen. Damit wird sie eindeutig erkennbar. Um Ihre EXE mit einem solchen Strong Name zu versehen, erzeugen Sie mithilfe des .NET-Tools sn.exe ein neues Schlüsselpaar in einer Datei: sn.exe –k C:\schluessel.snk

Um Ihre EXE mit dieser Datei in Verbindung zu bringen und dem Compiler das Erzeugen eines Strong Names somit zu ermöglichen, fügen Sie Ihrer Projektdatei AssemblyInfo.vb neben den standardmäßigen Attributen noch das Attribut AssemblyKeyFileAttribute mit entsprechender Pfadangabe hinzu:

<Assembly: AssemblyKeyFileAttribute("c:\schluessel.snk")>

Beim nächsten Kompilieren ist Ihre Anwendung mit einem Strong Name versehen, der Voraussetzung z.B. auch für die Registrierung im Global Assembly Cache (GAC) ist, hier aber als Kriterium für die Rechtevergabe genutzt wird.

Rechtevergabe per Systemsteuerung

Auf Basis dieses Strong Name können Sie nun über die Framework-Konfiguration, die Sie in der Systemsteuerung in der Untergruppe „Verwaltung“ vorfinden, im Optionsast „Laufzeitrichtlinie“ eine neue Codegruppe für das Unternehmen, den Computer oder den Benutzer einrichten. Dabei wird als Bedingung für eine Mitgliedschaft in der Gruppe der ausgewiesene Strong Name verwendet. Die Berechtigungen für Elemente dieser Gruppe werden entsprechend zugewiesen.

Die Einstellungen werden im config-Unterverzeichnis des .NET Framework-Verzeichnisses (C:\Windows\Microsoft.NET\Framework\v1.1.4322\config) in den XML-Dateien enterprisesec.config (Unternehmen) und/oder security.config (Computer) bzw. für Benutzer im Benutzerprofil unter C:\Dokumente und Einstellungen\ANMELDENAME\Anwendungsdaten\Microsoft\CLR Security Config\v1.1.4322\security.config verwaltet.

Rechtevergabe mit caspol.exe

Statt aber den Anwender oder dessen Administrator damit zu betreuen, diese Sicherheitseinstellungen über die Systemsteuerungsassistenten vorzunehmen, können Sie diese Aufgaben auch programmatisch vornehmen. Dabei hilft Ihnen das im .NET Framework vorhandene Hilfsprogramm „caspol.exe“ (der Dateiname steht für „Code Access Security Policy“), das hier in der deutschsprachigen MSDN Bibliothek umfassend dokumentiert ist.

Im Beispiel wird der Strong Name der vorhandenen Programmdatei D:\Programmpfad\MeineExe.exe als Kriterium für eine neue Codegruppe auf Maschinenebene verwendet, die zusätzlich möglichen Kriterien Name und Version werden hier nicht vorausgesetzt. Die neue Gruppe befindet sich unterhalb der obersten Ebene der Codegruppen, die die Nummer 1 trägt. Sie erhält den schnöden Namen „Meine Codegruppe“, der wie alle Parameterwerte mit Leerzeichen in Anführungszeichen gesetzt werden muss. Der Parameter „FullTrust“ spezifiziert den existierenden Berechtigungssatz mit dem Namen „FullTrust“. Zuletzt wird der Codegruppe noch eine kurze Beschreibung zur Anzeige im Konfigurationsprogramm der Systemsteuerung beigefügt.

Umrahmt wird der Aufruf vom Aus- und Wiedereinschalten der Kommandozeilen-Ausgabe des Utilities. Grund: caspol stellt im Normalfall eine Rückfrage, ob die neu anzulegende Codegruppe tatsächlich erzeugt werden soll. Da diese Abfrage für Installationszwecke und Batch-Dateien störend ist, sollte sie in solchen Fällen unterdrückt werden.

Es ergibt sich zur Problemlösung ohne Zuhilfenahme eines Administrators eine dreizeilige Batch-Datei:

caspol -pp off
caspol -machine -addgroup 1 -strong -file "D:\Programmpfad\MeineExe.exe" -noname -noversion FullTrust -n "Meine Codegruppe" -description "Meine eigene Codegruppe mit FullTust!"
caspol -pp on

Tipp: Achten Sie darauf, dass die Datei caspol.exe auf dem Zielrechner für Sie zugänglich ist, da der Pfad zum .NET Framework standardmäßig nicht in den sog. „Pfad“ aufgenommen wird, in dem zu startende Dateien gesucht werden. Das .NET Framework 1.1 und mit ihm die Datei caspol.exe finden Sie im Pfad C:\Windows\Microsoft.NET\Framework\v1.1.4322.

Mathias Schiffer widmet sich als freier Softwareentwickler und Technologievermittler größeren Projekten ebenso wie arbeitserleichternden Alltagslösungen. Seit Jahren gibt er sein Wissen in unzähligen Publikationen auch an andere Entwickler und Entscheider weiter. Sie erreichen ihn per E-Mail an die Adresse Schiffer@mvps.org.


Anzeigen:
© 2014 Microsoft