Seitdem mit Windows Vista die sogenannte „Benutzerkontensteuerung“ (UAC) eingeführt wurde, ist die Programmierung einer zuverlässigen und dynamischen Anwendung komplexer geworden. Denn zuvor waren ein wenig mehr „Klicks“ notwendig um einen Prozess unter einem anderen Benutzer, als dem der gerade angemeldet ist, zu starten.
Da Windows selbst mit der „Installationsprogrammerkennungs-Technologie“ einige Anwendungen unter einem anderen Benutzer startet und ein Benutzer relativ leicht selbst die Möglichkeit hat, dies mit einfachen Mitteln zu erreichen, ist ein Problem, das bisher eher selten auftrat, ganz plötzlich sehr häufig anzutreffen.
Die Rede ist hier von einem Fehler der dem LUA-Bug¹ sehr ähnlich ist. Laut Definition von Aaron Margosis wird als LUA-Bug ein Fehler bezeichnet den eine Anwendung hat wenn sie nicht mit Admin-Rechten ausgeführt wird. In diesem Fall handelt es sich jedoch um Fehler die erst auftreten wenn eine Anwendung mit „anderen“ Rechten gestartet wird.
Welche Gründe auch immer dafür vorliegen, das Resultat ist, dass bestimmte Daten wie z.B. Benutzereinstellungen/-pfade nicht mehr mit denen des angemeldeten Benutzers übereinstimmen. Allerdings muss man hier nun genau abwägen, wann dies tatsächlich ein Problem darstellt, denn letztlich ist ja genau das die erwartete Konsequenz.
Ebenfalls kann es sein, dass dies ein großes Sicherheitsrisiko darstellt. Angenommen die Anwendung startet einen Browser weil der Benutzer auf einen Link oder ähnliches innerhalb der Anwendung geklickt hat. Falls es sich nun, wie vermutlich in der Mehrzahl der Fälle, bei diesem „anderen“ Benutzer um einen Administrator handelt kann das sehr schnell sehr gefährlich werden.
Um aber nun endlich einen Bezug zum Titel herzustellen, stelle ich euch ein kleines Python-Modul vor, welches ich irgendwann einmal für ein persönliches Projekt erstellt habe. Es ist eine Portierung des Vorschlags² von Aaron Margosis zur Lösung dieser Probleme.
humbler.py
1.
2. http://blogs.msdn.com/b/aaron_margosis/archive/2009/06/06/
Johannes Meyer
Johannes Meyer
Lead Developer

Johannes ist seit 2011 bei uns und inzwischen, seit er 2014 die Ausbildung abgeschlossen hat, als Lead Developer für Icinga Web 2, Icinga DB Web sowie alle möglichen anderen Module und Bibliotheken im Web Bereich zuständig. Arbeitet er gerade mal nicht, macht er es sich bei schlechtem Wetter am liebsten zum zocken oder Filme/Serien schauen auf dem Sofa gemütlich. Passt das Wetter, geht's auch mal auf eines seiner Zweiräder. Motorisiert oder nicht.