Domanda

Come posso controllare admin-privilegi per il mio script durante la corsa?

È stato utile?

Soluzione

In Unix è possibile controllare se si è root usando il os. funzione getuid:

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

Altri suggerimenti

Il concetto di "admin-privilegi" dei nostri giorni di avere un controllo privilegio grana sta diventando difficile da definire. Se si esegue su UNIX con il modello di controllo di accesso "tradizionale", ottenendo l'id effettivo dell'utente (disponibile nel modulo os) e controllando che contro root (0) potrebbe essere quello che stai cercando. Se si conosce l'accesso a un file sul sistema richiede i privilegi che si desidera lo script per avere, è possibile utilizzare l'os.access () per verificare se si è abbastanza privilegiata.

Purtroppo non esiste un metodo facile, né portatile da dare. Hai bisogno di trovare fuori o definire il modello di sicurezza utilizzato, quali sono a disposizione per eseguire query e impostare i privilegi e cercare di individuare (o forse implementare da soli) i moduli Python appropriate che possono essere utilizzati per accedere alle API API di sistema fornito.

La classica domanda, perché avete bisogno di scoprire? Che cosa succede se lo script cerca di fare quello che deve fare e "solo" le catture e correttamente gestisce fallimenti?

Se si sta solo cercando di vedere se si ha accesso a un determinato file che richiede diritti amministrativi, un buon modo per verificare potrebbe essere:

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

D'altra parte, se si ha realmente bisogno di sapere se un utente è un account amministrativo, è anche possibile utilizzare questo codice su Windows 2000 e superiori:

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

Di conseguenza, una migliore, modo cross-platform per scoprire se un utente è un amministratore è:

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

print is_admin

Naturalmente, questo metodo rileverà solo se l'utente è root su Unix, o è un membro del gruppo Administrators in Windows. Tuttavia, questo è sufficiente per la maggior parte degli scopi, a mio parere.

Si noti inoltre che questa avrà esito negativo su versioni di Windows al di sotto del 2000, così come Windows ME, dal momento che queste sono le versioni di Windows basate su DOS e non hanno alcuna nozione di permessi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top