2009-12-07 12 views
46

Ich schreibe ein Skript, um die Berechtigungen von Dateien in Benutzerverzeichnissen zu überprüfen, und wenn sie nicht akzeptabel sind, werde ich sie warnen, aber ich möchte die Berechtigungen nicht nur der eingeloggten überprüfen Benutzer, aber auch Gruppe und andere. Wie kann ich das machen? Es scheint mir, dass .access() in Python nur die Berechtigungen für den Benutzer überprüfen kann, der das Skript ausführt.Überprüfen von Dateiberechtigungen in Linux mit Python

Antwort

78

Sie haben Recht, dass os.access, wie der zugrunde liegende access syscall, nach einem bestimmten Benutzer (echte statt effektive IDs, um mit suid Situationen zu helfen) überprüft.

ist der richtige Weg, um allgemeinere Informationen über eine Datei zu erhalten, einschließlich Berechtigungen pro Benutzer, Gruppe und andere. Das st_mode Attribut des Objekts, das os.stat zurückgibt, hat die Berechtigungsbits für die Datei.

Um die Interpretation dieser Bits zu erleichtern, können Sie das Modul stat verwenden. Insbesondere möchten Sie die Bitmasken definiert here, und Sie verwenden die &-Operator (Bit-und), um sie verwenden, um die relevanten Bits in diesem st_mode Attribut maskieren - zum Beispiel, wenn Sie nur eine True/False benötigen überprüfen, ob eine bestimmte Datei ist gruppen lesbar, ein Ansatz ist:

import os 
import stat 

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

pflegen: der os.stat Anruf kann etwas teuer sein, so stellen Sie sicher, dass alle Informationen, die Sie über mit einem einzigen Anruf kümmern zu extrahieren, anstatt Wiederhole die Anrufe für jedes Bit von Interesse ;-).

+0

Wunderbar, genau das habe ich mir erhofft. Vielen Dank. Ich habe gerade damit begonnen, Python für ein kleines Projekt bei der Arbeit aufzuheben, also kann ich sagen, dass ich noch lerne. Vielen Dank! – jphenow

+0

Sehr nettes Dienstprogramm. Vielen Dank! – zerocog

7

Verwenden Sie os.access() mit Flags os.R_OK, os.W_OK und os.X_OK.

Bearbeiten: Überprüfen Sie this related question, wenn Sie Verzeichnisberechtigungen unter Windows testen.

+5

Sie die Frage nur knapp sein Ziel zu lesen, prüft os.access nur Berechtigungen für der aktuelle Benutzer. –

8

Sie können die Dateiberechtigungen über os.stat(path) in Verbindung mit dem Modul stat überprüfen, um die Ergebnisse zu interpretieren.

1

Gerade andere Leute wie mich zu helfen, die für etwas ein bisschen anders hier kam:

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. 

dies Siehe für weitere Informationen: https://stackoverflow.com/a/5337329/1814774

Verwandte Themen