2009-05-17 11 views

Antwort

5

Unter Unix können Sie überprüfen, ob Sie root mit der os.getuid Funktion sind:

os.getuid() == 0 and "root" or "not root" 
7

Das Konzept der „admin-Privilegien“ in unseren Tagen von feinkörnigem Privileg Kontrolle schwer zu definieren ist immer. Wenn Sie mit einem "traditionellen" Zugriffssteuerungsmodell unter Unix arbeiten, können Sie die effektive Benutzer-ID (verfügbar im os-Modul) und die Überprüfung gegen root (0) nach dem suchen, wonach Sie suchen. Wenn Sie wissen, dass der Zugriff auf eine Datei auf dem System die Berechtigungen benötigt, die Ihr Skript haben soll, können Sie os.access() verwenden, um zu prüfen, ob Sie privilegiert genug sind.

Leider gibt es keine einfache und tragbare Methode zu geben. Sie müssen das verwendete Sicherheitsmodell ermitteln oder definieren, welche vom System bereitgestellten APIs zum Abfragen und Festlegen von Berechtigungen verfügbar sind und versuchen, die geeigneten Python-Module zu finden (oder möglicherweise selbst zu implementieren), die für den Zugriff auf die API verwendet werden können.

Die klassische Frage, warum müssen Sie herausfinden? Was ist, wenn Ihr Skript versucht, das zu tun, was es tun muss, und "nur" Fehler abfängt und ordnungsgemäß behandelt?

+0

+1. Alle gültigen Überlegungen. Manchmal ist es besser, einfach weiterzumachen und Fehler zu machen. – Stephan202

3

Wenn Sie nur versuchen, um zu sehen, wenn Sie den Zugriff auf eine bestimmte Datei, die Administratorrechte erfordert, eine gute Möglichkeit wäre zu prüfen zu sein:

import os 
print os.access("/path/to/file", os.W_OK) 
#replace W_OK with R_OK to test for read permissions 

Auf der anderen Seite, wenn Sie wirklich brauchen wissen, ob ein Benutzer ein Administratorkonto ist, können Sie auch diesen Code auf Windows 2000 verwenden und höher:

import ctypes 
print ctypes.windll.shell32.IsUserAnAdmin() 

daher ein besseren, plattformübergreifende Weg, um herauszufinden, ob ein Benutzer ein Administrator ist,:

Natürlich erkennt diese Methode nur, ob der Benutzer root auf Unix ist, oder ist ein Mitglied der Gruppe Administratoren unter Windows. Dies reicht meiner Meinung nach jedoch für die meisten Zwecke aus.

Beachten Sie auch, dass dies bei Windows-Versionen unter 2000 sowie Windows ME fehlschlagen wird, da diese DOS-basierte Versionen von Windows sind und keine Berechtigungen haben.