Seite 1 von 1
Permissions ändern
Verfasst: Montag 26. August 2013, 10:38
von Gary123456
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):
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
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 12:50
von snafu
`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).
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 14:52
von Gary123456
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.).
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 16:21
von snafu
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...
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 16:27
von Gary123456
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()?
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 17:24
von Sirius3
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.
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 17:31
von Gary123456
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?
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 17:38
von anogayales
Was spricht dagegen das Skirpt mit Administratorrechten zu starten? Dann kann dein Skript machen was es will.
Grüße,
anogayales
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 17:40
von Gary123456
---
Re: Permissions ändern
Verfasst: Montag 26. August 2013, 17:44
von Sirius3
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.