2009-05-17 13 views

Répondre

5

Sur Unix, vous pouvez vérifier si vous êtes root en utilisant la fonction os.getuid:

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

Le concept de « admin-privilèges » dans notre journée de contrôle de privilège à grain fin devient difficile à définir. Si vous utilisez unix avec un modèle de contrôle d'accès "traditionnel", obtenir l'identifiant d'utilisateur effectif (disponible dans le module os) et vérifier cela par rapport à root (0) pourrait être ce que vous cherchez. Si vous savez que l'accès à un fichier sur le système nécessite les privilèges que vous voulez que votre script ait, vous pouvez utiliser os.access() pour vérifier si vous avez assez de privilèges.

Malheureusement, il n'y a pas de méthode facile à utiliser. Vous devez trouver ou définir le modèle de sécurité utilisé, les API fournies par le système pour interroger et définir les privilèges et essayer de localiser (ou éventuellement de vous implémenter) les modules Python appropriés pouvant être utilisés pour accéder à l'API.

La question classique, pourquoi avez-vous besoin de savoir? Que faire si votre script essaie de faire ce qu'il doit faire et «juste» attrape et gère correctement les échecs?

+0

+1. Toutes les considérations valables. En effet, il est parfois préférable d'aller de l'avant et d'agir en cas d'échec. – Stephan202

3

Si vous êtes juste essayer de voir si vous avez accès à un certain fichier qui nécessite des droits d'administration, une bonne façon de vérifier serait:

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

D'autre part, si vous avez vraiment besoin de savoir si un utilisateur est un compte administratif, vous pouvez également utiliser ce code sur Windows 2000 et supérieur:

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

par conséquent, une meilleure façon multiplateforme pour savoir si un utilisateur est un administrateur est:

import ctypes, os 
try: 
is_admin = os.getuid() == 0 
except: 
is_admin = ctypes.windll.shell32.IsUserAnAdmin() 

print is_admin 

Bien sûr, cette méthode ne détectera que si l'utilisateur est racine sous Unix ou est membre du groupe Administrateurs sous Windows. Cependant, cela est suffisant pour la plupart des objectifs, à mon avis. Notez également que cela échouera sur les versions Windows inférieures à 2000, ainsi que Windows ME, car ce sont des versions DOS de Windows et n'ont aucune notion d'autorisations.