Permissions ändern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ich würde gerne die Permissions einer Datei/eines Ordners so ändern, dass es sich ohne Probleme löschen lässt. Ich bin auch derweil auf die Methode os.chmod(path, mode) gestoßen, jedoch bin ich mir nicht sicher, ob mir das weiterhelfen wird. Das gleiche suche ich für die Registry, da sich zum Beispiel Legacy Services nicht löschen lassen, da Berechtigungen gesetzt sind.

Beispiel für die Registry, wie ich mir das vorstelle (http://fstaal01.home.xs4all.nl/swreg-us.html):

Code: Alles auswählen

SWREG ACL "KEY" /GE:F
Was macht der Code? Er gibt jedem vollen Zugriff auf den Key. Und das will ich auch mit Python schaffen, wie geht das am Besten (für Files/Ordner + Registry - Permissions)?
Gary
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

`os.chmod()` ist grundsätzlich schonmal richtig. Bedenke aber, dass dein Skript ggf mit Root-Rechten ausgeführt werden muss, um diese Änderung durchführen zu können.

Und für Änderungen in der Registry gibt es _winreg bzw winreg (je nach Python-Version).
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Code: Alles auswählen

import os, stat

Adware = [
"C:\\Users\\Machiavelli\\Babylon",
"C:\\ProgramData\\Babylon",
"C:\\Babylon"
        ]


for bad in Adware:
    if os.path.isdir(bad):
        os.chmod(bad, stat.S_IWUSR)
        try:
            os.removedirs(bad)
            print bad + " was removed succesfully."
        except WindowsError:
            print bad + " wasn't succesfully removed. ['WINDOWSERROR']"
Liste mit paar Adwaredateien. (Wird später erweitert + verständlicherweise werden Environemental Variables benutzt!). Soweit ich das verstehe, wird, wenn eine Adwaredatei vorhanden ist gelöscht. Zuvor wird bei jeder Datei/Ordner die Permissions so geändert, dass der User vollen Zugriff hat (oder doch nicht?!). Wird das reichen, um Adwaredateien zu löschen (Nicht zu vergessen, dass sich sich Adwaredateien schützen, indem sie z.B. Permissions ändern etc.).
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hast du mal die Doku gelesen? Da gibt es einen Windows-spezifischen Hinweis:
Note: Although Windows supports chmod(), you can only set the file’s read-only flag with it (via the stat.S_IWRITE and stat.S_IREAD constants or a corresponding integer value). All other bits are ignored.
Demnach wird also die von dir angeforderte Operation ignoriert.

Sorry, dass es in meinem vorherigen Beitrag so klang, als könne man unter Windows ruhig auch auf `os.chmod()` setzen. Mir war bis gerade eben nicht bewusst, dass es in dem Bereich solche Unterschiede zwischen den Betriebssystemen gibt bzw dass es in Python nicht entsprechend abstrahiert wird...
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Deshalb auch die Frage. Ihr habt mir das denke auch mal früher gesagt, soweit ich mich noch errinern konnte, war mir aber nicht sicher. Gibt es eine andere Möglichkeit ausser os.chmod()?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Windows hat eine viel kompliziertere Dateizugriffsverwaltung, als daß man es auf ein einfaches Flagsystem ála chmod reduzieren könnte. Das ReadOnly-Flag stammt noch aus DOS- oder CP/M-Zeiten und ein Executable-Flag macht sowieso keinen Sinn.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Ich müsste vielleicht meine Idee etwas ausformulieren:

Ich möchte eine Art Scanner bauen, der nach Adware scannt und im Falle einer Adwareinfektion diese auch löscht. Das Problem ist, das oft reines Löschen mit Python nicht geht, da Python keine Permissions dazu hat. Ich würde halt bei jeder Datei/Ordner Python vollem Zugriff geben um den Ordner zu löschen. Wie kann das gehen? Mit der Registry ist das auch nicht so schwer, da kenn ich einem Befehl der das alles regelt (ACL). Ich wüsste auch wie man extern Permissions ändert (mit Hilfe eines kleines Zusatzprogrammes + Batch). Gibt es irgendwie eine Möglichkeit die Permissions zu ändern?
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Was spricht dagegen das Skirpt mit Administratorrechten zu starten? Dann kann dein Skript machen was es will.

Grüße,
anogayales
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

---
Zuletzt geändert von Gary123456 am Montag 26. August 2013, 18:00, insgesamt 1-mal geändert.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

anogayales hat geschrieben:Was spricht dagegen das Skirpt mit Administratorrechten zu starten?
Ganz einfach, weil ein Administrator nur beschränkte Rechte hat. Ich hatte man alle Rechte auf ein Verzeichnis gelöscht und somit konnte auch der Administrator diese Rechte nicht wieder setzen.

Das sagt Google zu Deinem Problem:

Code: Alles auswählen

import win32security
import ntsecuritycon as con

FILENAME = "whatever"

userx, domain, type = win32security.LookupAccountName ("", "User X")
usery, domain, type = win32security.LookupAccountName ("", "User Y")

sd = win32security.GetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION)
dacl = sd.GetSecurityDescriptorDacl()   # instead of dacl = win32security.ACL()

dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_GENERIC_READ | con.FILE_GENERIC_WRITE, userx)
dacl.AddAccessAllowedAce(win32security.ACL_REVISION, con.FILE_ALL_ACCESS, usery)

sd.SetSecurityDescriptorDacl(1, dacl, 0)   # may not be necessary
win32security.SetFileSecurity(FILENAME, win32security.DACL_SECURITY_INFORMATION, sd)
Wegen fehlendem Windows/Python kann ich dazu aber nichts weiteres sagen.
Antworten