Frage

Da die Frage Titel könnte darauf hindeuten, würde ich sehr gerne die Möglichkeit wissen, die NTFS-Berechtigungen der angegebenen Datei oder einen Ordner zu prüfen (Hinweis: Das sind die, die Sie in der Registerkarte „Sicherheit“ zu sehen). Im Grunde, was ich brauche, ist ein Pfad zu einer Datei oder ein Verzeichnis zu nehmen (auf einem lokalen Rechner oder, bevorzugt, auf einer Freigabe auf einem entfernten Rechner) und erhalten Sie die Liste der Benutzer / Gruppen und die entsprechenden Berechtigungen für diese Datei / Ordner . Schließlich wird die Anwendung gehen einen Verzeichnisbaum zu durchlaufen, für jede Objektberechtigungen zu lesen und zu verarbeiten sie entsprechend.

Jetzt kann ich von einer Reihe von Möglichkeiten denken, dies zu tun:

  • Parse cacls.exe Ausgang - leicht gemacht, aber, es sei denn, im etwas fehlt, cacls.exe gibt nur die Berechtigungen in Form von R | W | C | F (Lesen / Schreiben / Änderung / Voll), die unzureichend (ich brauche auch die Berechtigungen wie „Ordnerinhalt auflisten“, erweiterte Rechte zu erhalten)
  • xcacls.exe oder xcacls.vbs Ausgang - ja, sie geben uns alle Berechtigungen ich brauche, aber sie arbeiten fürchterlich langsam, es dauert xcacls.vbs etwa eine Sekunde lang Berechtigungen auf einer lokalen System-Datei zu erhalten. Eine solche Geschwindigkeit ist nicht akzeptabel
  • win32security (es umschlingt winapi, nicht wahr?) - Ich bin sicher, es kann so behandelt werden, aber ich möchte lieber das Rad nicht neu erfinden

Gibt es noch etwas fehle ich hier?

War es hilfreich?

Lösung

Wenn Sie Ihre eigene Fantasie rollen, ist win32security der Weg zu gehen. Es gibt die Anfänge ein Beispiel hier:

http://timgolden.me. uk / python / win32_how_do_i / get-the-Inhaber-of-a-file.html

Wenn Sie etwas gefährlich leben wollen (!) Meine in-progress WINSYS Paket genau das tun konzipiert ist, was Sie wollen. Sie können einen MSI der Entwickler-Version erhalten Sie hier:

http://timgolden.me.uk/ python / downloads / WINSYS-0.4.win32-py2.6.msi

oder Sie können nur den svn trunk Kasse:

svn co http://winsys.googlecode.com/svn/trunk WINSYS

Zu tun, was Sie beschreiben (erraten leicht an den genauen Anforderungen), könnten Sie dies tun:

import codecs
from winsys import fs

base = "c:/temp"
with codecs.open ("permissions.log", "wb", encoding="utf8") as log:
  for f in fs.flat (base):
  log.write ("\n" + f.filepath.relative_to (base) + "\n")
  for ace in f.security ().dacl:
    access_flags = fs.FILE_ACCESS.names_from_value (ace.access)
    log.write (u"  %s => %s\n" % (ace.trustee, ", ".join (access_flags)))

TJG

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top