Neu in .NET 8.0 [10]: Plattformneutrale Abfrage der Privilegien

In der Klasse System.Environment hat Microsoft in .NET 8.0 die Eigenschaft IsPrivilegedProcess hinzugefügt.

In Pocket speichern vorlesen Druckansicht

(Bild: Alexey_Erofejchev/Shutterstock.com)

Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Mit der Eigenschaft IsPrivilegedProcess der statischen Klasse System.Environment können Entwicklerinnen und Entwickler nun endlich auf einfache Weise abfragen, ob der aktuelle Prozess erhöhte Rechte (Administrator bzw. root) besitzt und berechtigt ist, sicherheitsrelevante Funktionen auszuführen.

Der Dotnet-Doktor – Holger Schwichtenberg

Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.

IsPrivilegedProcess funktioniert nicht nur unter Windows, sondern auch unter Unix-basierten Systemen (also Linux und macOS). IsPrivilegedProcess liefert laut dem zugehörigen Issue auf GitHub true in diesen Fällen:

Die Serie zu den Neuerungen in .NET 8.0

Windows:

  • NT AUTHORITY\LocalSystem
  • BUILTIN\Administrator
  • Jedes Administratorkonto in einem erhöhten Kontext
  • Falls die Benutzerkontensteuerung deaktiviert ist: jedes Administratorkonto

Die Windows-Implementierung findet man in der Klasse Environment.Windows.cs in der DLL (siehe den zugehörigen Code auf GitHub)

Unix-basierte Systeme wie Linux und macOS:

  • geteuid() == 0

Die Unix-Implementierung findet man in der Klasse Environment.Unix.cs (siehe Code auf GitHub).

Bisher war diese Rechteabfrage User-seitig plattformspezifisch zu implementieren, beispielsweise unter Windows folgendermaßen:

bool IsPrivilegedProcess()
 {
  WindowsIdentity identity = WindowsIdentity.GetCurrent();
  WindowsPrincipal principal = new WindowsPrincipal(identity);
  return principal.IsInRole(WindowsBuiltInRole.Administrator);
 }

Die neue Implementierung von IsPrivilegedProcess für Windows verwendet direkt die Advanced Windows 32 Base API (Advapi32) via GetTokenInformation().

(rme)