2009-12-07 17 views
46

Sto scrivendo uno script per controllare le autorizzazioni dei file nelle directory degli utenti e se non sono accettabili li avvertirò, ma voglio controllare le autorizzazioni non solo del login utente, ma anche gruppo e altri. Come posso fare questo? Mi sembra che .access() in Python possa solo controllare le autorizzazioni per l'utente che esegue lo script.Verifica dei permessi dei file in Linux con Python

risposta

78

Hai ragione che il os.access, come il sottostante access syscall, verifica la presenza di un utente specifico (ID reale piuttosto che effettivo, per aiutare con situazioni suid).

os.stat è il modo giusto per ottenere informazioni più generali su un file, incluse le autorizzazioni per utente, gruppo e altro. L'attributo st_mode dell'oggetto restituito da os.stat contiene i bit di autorizzazione per il file.

Per facilitare l'interpretazione di questi bit, è possibile utilizzare il modulo stat. Nello specifico, vorrai che le maschere di bit siano definite here e utilizzerai l'operatore & (bit e) per utilizzarle per mascherare i bit rilevanti in quell'attributo st_mode, ad esempio se hai solo bisogno di Vero/Falso verificare se un certo file è il gruppo-leggibile, un approccio è: cura

import os 
import stat 

def isgroupreadable(filepath): 
    st = os.stat(filepath) 
    return bool(st.st_mode & stat.S_IRGRP) 

prendere: la chiamata os.stat può essere un po 'costosa, quindi assicuratevi di estrarre tutte le informazioni che ti interessano con una singola chiamata, piuttosto che continua a ripetere le chiamate per ogni bit di interesse ;-).

+0

Meraviglioso, questo è esattamente quello che speravo di trovare. Grazie mille. Ho appena iniziato a prendere in mano python per un piccolo progetto al lavoro, quindi puoi dire che sto ancora imparando. Grazie mille! – jphenow

+0

Utilità molto bella. Grazie! – zerocog

7

Utilizzare os.access() con bandiere os.R_OK, os.W_OK e os.X_OK.

Edit: Partenza this related question se si sta testando le autorizzazioni di directory su Windows.

+5

voi non ha ancora leggere la domanda, os.access controlla solo autorizzazioni per l'utente corrente. –

8

È possibile verificare le autorizzazioni dei file tramite os.stat(path) insieme al modulo stat per interpretare i risultati.

1

solo per aiutare altre persone come me che sono venuti qui per qualcosa di un po 'diverso:

import os 
import stat 

st = os.stat(yourfile) 
oct_perm = oct(st.st_mode) 
print(oct_perm) 
>>> 0o100664 //the last 3 or 4 digits is probably what you want. 

vedere questo per maggiori dettagli: https://stackoverflow.com/a/5337329/1814774

Problemi correlati