Windows ACL "Löschen verweigern" greift nicht - Datei lässt sich immer löschen
Hallo (hoffentlich) Wissende,
ich habe ein Problem bezüglich der Rechtevergabe bzw. dessen Entzug.
Eine Software schreibt seine Lizenzprüfung (license.zip) in sein Programmverzeichnis, entpackt sie und löscht sie anschliessend wieder.
Ich möchte dem Nutzer gerne verweigern in dem Programmverzeichnis zu schreiben, muss allerdings eben jene License.zip erlauben.
Meine Idee war daher die Datei sowie die beiden entpackten Dateien als schreibbar zu deklarieren (den Rest halt nicht). Soweit so gut.
Leider löscht das Programm die Datei immer wieder - daher die Idee dem Nutzer das löschen der Datei zu verweigern (Änderung aber zu erlauben), so dass die eingestellten Rechte erhalten bleiben.
Kurz also drei schreibbare Dateien in einem nicht schreibbaren Verzeichnis welche nicht gelöscht werden können.
Leider greift das "Löschen verweigern" nicht. Ich kann einen Rechteeintrag setzen für die Benutzergruppe bei der Löschen auf Verweigert steht, allerdings kann der Nutzer die Datei sofort löschen Sobald die Nutzergruppe auch ändern hat. Normalerweise sollte ein "Verweigern" Eintrag doch immer vorrangig sein?
Systeminfo: Windows 2008R2 - Dateifreigabe mit den vollen Rechten für fragliche Benutzergruppe und Admins
Client: Windows 7 / Windows 10 - spielt keine Rolle
Rechte des übergeordneten Ordners:
System (Voll - geerbt)
Benutzergruppe (lesen, ausführen - geerbt)
Administratoren (Voll - geerbt)
Besitzer: Administratoren
Rechte der Datei:
System und Admins - Voll
Benutzer (lesen, ausführen - geerbt) (ändern - einzeln) (löschen verweigert - einzeln)
Besitzer: Administratoren
Bei Prüfung der effektiven Rechte wird angezeigt das dem Nutzer das löschen verweigert wird - Löschen kann er die Datei trotzdem.
Was mache ich falsch?
PS: Testweise habe ich auch das ganze für Admins probiert - selbst wenn ich Admins und System "Löschen verweigere" kann ich die Datei problemlos löschen. Beiden habe ich vorher den Vollzugriff (nur ändern) auf Überordner und Datei entzogen
ich habe ein Problem bezüglich der Rechtevergabe bzw. dessen Entzug.
Eine Software schreibt seine Lizenzprüfung (license.zip) in sein Programmverzeichnis, entpackt sie und löscht sie anschliessend wieder.
Ich möchte dem Nutzer gerne verweigern in dem Programmverzeichnis zu schreiben, muss allerdings eben jene License.zip erlauben.
Meine Idee war daher die Datei sowie die beiden entpackten Dateien als schreibbar zu deklarieren (den Rest halt nicht). Soweit so gut.
Leider löscht das Programm die Datei immer wieder - daher die Idee dem Nutzer das löschen der Datei zu verweigern (Änderung aber zu erlauben), so dass die eingestellten Rechte erhalten bleiben.
Kurz also drei schreibbare Dateien in einem nicht schreibbaren Verzeichnis welche nicht gelöscht werden können.
Leider greift das "Löschen verweigern" nicht. Ich kann einen Rechteeintrag setzen für die Benutzergruppe bei der Löschen auf Verweigert steht, allerdings kann der Nutzer die Datei sofort löschen Sobald die Nutzergruppe auch ändern hat. Normalerweise sollte ein "Verweigern" Eintrag doch immer vorrangig sein?
Systeminfo: Windows 2008R2 - Dateifreigabe mit den vollen Rechten für fragliche Benutzergruppe und Admins
Client: Windows 7 / Windows 10 - spielt keine Rolle
Rechte des übergeordneten Ordners:
System (Voll - geerbt)
Benutzergruppe (lesen, ausführen - geerbt)
Administratoren (Voll - geerbt)
Besitzer: Administratoren
Rechte der Datei:
System und Admins - Voll
Benutzer (lesen, ausführen - geerbt) (ändern - einzeln) (löschen verweigert - einzeln)
Besitzer: Administratoren
Bei Prüfung der effektiven Rechte wird angezeigt das dem Nutzer das löschen verweigert wird - Löschen kann er die Datei trotzdem.
Was mache ich falsch?
PS: Testweise habe ich auch das ganze für Admins probiert - selbst wenn ich Admins und System "Löschen verweigere" kann ich die Datei problemlos löschen. Beiden habe ich vorher den Vollzugriff (nur ändern) auf Überordner und Datei entzogen
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 305793
Url: https://administrator.de/contentid/305793
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
28 Kommentare
Neuester Kommentar
The Delete permission allows or denies the user from deleting the file or folder. If you do not have a Delete permission on a file or folder, you can delete the file or folder if you are granted Delete Subfolders and Files permissions on the parent folder
Gruß skybird
Die Software benötigt Admin-Rechte zum starten
Da haben wird den Knackpunkt, die Software läuft mit lokalen Admin-Rechten, und deswegen kann sie das File auch löschen Leider löscht das Programm die Datei immer wieder - daher die Idee dem Nutzer das löschen der Datei zu verweigern (Änderung aber zu erlauben), so dass die eingestellten Rechte erhalten bleiben.
Das bringt absolut garnichts, wenn das Programm im Kontext eines Admins läuft, da müsstest du schon den Zugriff für die Admins entziehen.
Und ich schätze, das mit dem "Löschen verweigern" hast Du nicht wirklich im Benutzerkontext getestet. (ein Nicht-Admin)
Wenn ein Benutzer für einen Ordner nur die effektiven Rechte (über den User + über alle seine Gruppen)
- Löschen -- verweigern
- Ordner durchsuchen / Datei ausführen -- erlauben
- Ordner auflisten / Daten lesen -- erlauben
- Attribute lesen -- erlauben
- erweiterte Attribute lesen -- erlauben
- Dateien erstellen / Daten schreiben -- erlauben
- Ordner erstellen / Daten anhängen -- erlauben
dann kan er
- Ordner erstellen
- Dateien erstellen (beachte: Nicht über Explorer-Kontextmenü, aber über Kopieren oder z.B. "Speichern unter" aus einem Programm heraus.)
- Ornder nicht löschen
- Dateien nicht löschen
- Dateien ändern
Habe ich eben nochmal getestet.
Edit:
Es fehlen noch ... (dann gehts auch mit Ändern der Datei)
- Attribute schreiben -- erlauben
- Erweiterte Attribute schreiben -- erlauben
Für die vorhandenen Dateien (EXE, DLL usw.), welche nicht geändert werden dürfen, die beiden letztgenannten Rechte je Datei einzeln verweigern.
Wenn ein Benutzer für einen Ordner nur die effektiven Rechte (über den User + über alle seine Gruppen)
- Löschen -- verweigern
- Ordner durchsuchen / Datei ausführen -- erlauben
- Ordner auflisten / Daten lesen -- erlauben
- Attribute lesen -- erlauben
- erweiterte Attribute lesen -- erlauben
- Dateien erstellen / Daten schreiben -- erlauben
- Ordner erstellen / Daten anhängen -- erlauben
dann kan er
- Ordner erstellen
- Dateien erstellen (beachte: Nicht über Explorer-Kontextmenü, aber über Kopieren oder z.B. "Speichern unter" aus einem Programm heraus.)
- Ornder nicht löschen
- Dateien nicht löschen
- Dateien ändern
Habe ich eben nochmal getestet.
Edit:
Es fehlen noch ... (dann gehts auch mit Ändern der Datei)
- Attribute schreiben -- erlauben
- Erweiterte Attribute schreiben -- erlauben
Für die vorhandenen Dateien (EXE, DLL usw.), welche nicht geändert werden dürfen, die beiden letztgenannten Rechte je Datei einzeln verweigern.
Es ist so warm hier...
Das löschen der Dateien wirst du nicht verhindern können - das Programm würde deswegen wahrscheinlich eh meckern.
Schreibe dir doch ein kleines Batch, welches die Dateien beim herunterfahren des Rechners mit 1 Byte Größe erstellt (fsutil) und setze dann die Rechte der Dateien neu.
Das löschen der Dateien wirst du nicht verhindern können - das Programm würde deswegen wahrscheinlich eh meckern.
Schreibe dir doch ein kleines Batch, welches die Dateien beim herunterfahren des Rechners mit 1 Byte Größe erstellt (fsutil) und setze dann die Rechte der Dateien neu.
Er hat das ursprünglich über die File-ACLs versucht nicht über die Ordner ACLs, da ist klar das das so nicht gehen kann, wenn er die Vererbung nicht unterbricht und die Ordner ACLs entsprechend customized.
Und genau das ist das wichtige:
Löschen einer Datei ist eine Operation auf dem Verzeichnis.
Bei der Datei das Löschen zu verweigern ist uninteressant und wird nicht beachtet (wie festgestellt wurde und auch im Zitat von skybird so drinsteht).
Ergo: Löschen im Ordner erlauben und auf einer einzelnen Datei verweigern geht nicht.
Wenn ein Benutzer für einen Ordner ...
Löschen einer Datei ist eine Operation auf dem Verzeichnis.
Bei der Datei das Löschen zu verweigern ist uninteressant und wird nicht beachtet (wie festgestellt wurde und auch im Zitat von skybird so drinsteht).
you can delete the file or folder if you are granted Delete Subfolders and Files permissions on the parent folder
Im Ordner muß man das Löschen verweigern (wie emeriks auch erfolgreich getestet hat).Ergo: Löschen im Ordner erlauben und auf einer einzelnen Datei verweigern geht nicht.
Wenn er es getestet hätte - hat er aber nicht.
Redest Du jetzt von Dir selbst in der Dritten Person?Du hast sicherlich folgendes überlesen:
Für die vorhandenen Dateien (EXE, DLL usw.), welche nicht geändert werden dürfen, die beiden letztgenannten Rechte je Datei einzeln verweigern.
Da das i.A. begrenzt viele sind, ist das von Hand oder mit einer Batch schnell erledigt.Schon mal über Symbolic Links nachgedacht? Hiermit könnte Er z.B. Sub-Ordner an andere Stellen auslagern, wo die Vererbung nicht mehr greift. Aber dazu müsste Er testen ...
Was ja auch klar ist, denn das "Ändern" Recht beinhaltet das Löschen, habe ich ja schon ganz oben gepostet, man sehe sich doch bitte mal folgende Tabelle an:
https://technet.microsoft.com/en-us/library/cc732880(v=ws.11).aspx
p.s. Du kannst einzelne Rechte granular vergeben, das "Ändern" ist ein ganzer "Satz" an Berechtigungen.
https://technet.microsoft.com/en-us/library/cc732880(v=ws.11).aspx
p.s. Du kannst einzelne Rechte granular vergeben, das "Ändern" ist ein ganzer "Satz" an Berechtigungen.
Was Du eingestellt hast, ist mir eigentlich egal. Ich habe Dir ein Beispiel genannt, welches genauso funktioniert, wie ich es geschrieben habe. Das habe ich gestern extra für Dich getestet (obwohl schon 100mal gemacht), ob Du mir das nun glaubst oder nicht. Auch egal.
Aber das Programm kann dann die Lizenzdatei schreiben, nur diese nicht wieder löschen. Aber immer wieder überschreiben (neu füllen), sofern es nicht "löschen und neu erstellen" anwendet. Dann würde es wieder nicht gehen.
Wie Du alle anderen Dateien vor Überschreiben schützen kannst, habe ich schon geschrieben.
Vielleicht hilft Dir aber auch das weiter. (Lass Dich nicht von "Vista" abschrecken. Das Prinzip gilt immer noch.) Dort wird u.a. beschrieben, wie über die Virtualsierung der Schreibzugriffe bei aktiviertem UAC ein Benutzer ohne Adminrechte auch in Ordner unterhalb von Programme schreiben kann.
Kannst gerne auch mal den Disput zwischen DerWoWusste und mir zu UAC in diesem Thread lesen. Vielleicht bringts was.
Eine Software schreibt seine Lizenzprüfung (license.zip) in sein Programmverzeichnis, entpackt sie und löscht sie anschliessend wieder.
Ich möchte dem Nutzer gerne verweigern in dem Programmverzeichnis zu schreiben, muss allerdings eben jene License.zip erlauben.
Das Schreiben aller Dateien kann man damit nicht verhindern. Korrekt.Ich möchte dem Nutzer gerne verweigern in dem Programmverzeichnis zu schreiben, muss allerdings eben jene License.zip erlauben.
Aber das Programm kann dann die Lizenzdatei schreiben, nur diese nicht wieder löschen. Aber immer wieder überschreiben (neu füllen), sofern es nicht "löschen und neu erstellen" anwendet. Dann würde es wieder nicht gehen.
Wie Du alle anderen Dateien vor Überschreiben schützen kannst, habe ich schon geschrieben.
Vielleicht hilft Dir aber auch das weiter. (Lass Dich nicht von "Vista" abschrecken. Das Prinzip gilt immer noch.) Dort wird u.a. beschrieben, wie über die Virtualsierung der Schreibzugriffe bei aktiviertem UAC ein Benutzer ohne Adminrechte auch in Ordner unterhalb von Programme schreiben kann.
Kannst gerne auch mal den Disput zwischen DerWoWusste und mir zu UAC in diesem Thread lesen. Vielleicht bringts was.
Ich weiß nicht genau was dich motiviert
Niemals aufgeben! Mal im Ernst. Der Vorschlag mit den Symbolic Links, Umleitungen auf Share und/oder andere Platte, möglicherweise auch im Zusammenhang mit Windows 2012 und FSRM, könnte Deinem Traum verdammt nah kommen.
Einfach so, wie Du es schreibst, geht es definitiv nicht. Und wenn Dir das klar ist, Du an keinen anderen Lösungswegen interessiert bist, dann kannst Du diese Frage doch schließen?
Nochmal der Vollständigkeit halber. Ein Ordner ohne Schreibrechte soll drei Dateien enthalten die geändert, aber nicht gelöscht werden können. Andere in dem Ordner enthaltene Dateien sollen ausschliesslich gelesen werden können.
Ich weiß nicht wo dein Problem liegt. Das geht hier absolut problemlos. Ich hatte dir ja oben schon den Hinweis zum Ändern Recht gegeben.
Hier mein Test:
OrdnerX
|__ DateiA
OrdnerX = (Alle Benutzer haben nur Lese- und Ausführrechte, alles normale Berechtigungen nur die also nur die Vererbten Rechte)
DateiA = (User Z gebe ich hier nun explizit nicht "Ändern" Rechte sondern nur die Schreibrechte ohne das Löschrecht in den erweiterten Einstellungen!! Also nur Lesen, Schreiben, Ausführen nicht Ändern)
Klappt einwandfrei. User Z kann die Datei beschreiben aber die Datei selbst nicht löschen. Andere ändern sowieso erst recht nicht.
Hi @129413,
ich kann das so aber auch nicht bestätigen. Das funktioniert nur solange, wie ich das mit einem Admin-User teste, der aber laut ACL auch gar keine anderen Rechte explizit für Admins oder für Ihn bekommt.
Teste ich das mit einem Benutzer, der kein Admin ist, dann geht das schon nicht mehr.
Der Haken ist der, dass der Nicht-Admin die Datei zwar öffnen kann, bearbeiten und dann auch wieder speichern. Er kann aber diese Datei nicht mit einer neuen Datei etwa via "speichern unter" aus einem Programm überschreiben. Er kann auch keine mit gleichem Namen drüber kopieren.
Ein Admin-User kann diese beiden Aktionen. Habe die Rechte so eingeschränkt, dass auch der Admin dort nicht erstellen kann. Keine Dateien ändern oder löschen. Nur für die eine explit Schreiben ohne Löschen erlaubt. Er kann sie öffnen, bearbeiten, abspeichern. Er kann sie durch Kopie ersetzen. Er kann sie via "speichern unter" mit einer anderen Datei überschreiben. Der Nicht-Admin kann das alles nicht. Nur wenn er die Datei direkt zum Bearbeiten öffnet.
Es hängt also jetzt davon ab, wie ein Programm sich verhält, wenn eine Datei bereits vorhanden ist, welche nicht da sein sollte, weil das Programm diese ja immer gleich wieder löschen will. Und wie es sich verhält, wenn es diese Datei nicht löschen kann.
Getestet mit Notepad.exe
ich kann das so aber auch nicht bestätigen. Das funktioniert nur solange, wie ich das mit einem Admin-User teste, der aber laut ACL auch gar keine anderen Rechte explizit für Admins oder für Ihn bekommt.
Teste ich das mit einem Benutzer, der kein Admin ist, dann geht das schon nicht mehr.
Der Haken ist der, dass der Nicht-Admin die Datei zwar öffnen kann, bearbeiten und dann auch wieder speichern. Er kann aber diese Datei nicht mit einer neuen Datei etwa via "speichern unter" aus einem Programm überschreiben. Er kann auch keine mit gleichem Namen drüber kopieren.
Ein Admin-User kann diese beiden Aktionen. Habe die Rechte so eingeschränkt, dass auch der Admin dort nicht erstellen kann. Keine Dateien ändern oder löschen. Nur für die eine explit Schreiben ohne Löschen erlaubt. Er kann sie öffnen, bearbeiten, abspeichern. Er kann sie durch Kopie ersetzen. Er kann sie via "speichern unter" mit einer anderen Datei überschreiben. Der Nicht-Admin kann das alles nicht. Nur wenn er die Datei direkt zum Bearbeiten öffnet.
Es hängt also jetzt davon ab, wie ein Programm sich verhält, wenn eine Datei bereits vorhanden ist, welche nicht da sein sollte, weil das Programm diese ja immer gleich wieder löschen will. Und wie es sich verhält, wenn es diese Datei nicht löschen kann.
Getestet mit Notepad.exe
Teste ich das mit einem Benutzer, der kein Admin ist, dann geht das schon nicht mehr.
Geht hier einwandfrei mit einem unprivilegierten Nutzer (Windows 7/8/10) bei "einfachem" schreiben in die Datei (ohne Umbenenn/oder Lösch-Methodik -> Notepad)Es hängt also jetzt davon ab, wie ein Programm sich verhält,
Genau, z.B. bei Office-Dateien verhält es sich ja das diese erst die Daten in eine temporäre Datei speichern dann die originale Löschen und die temporäre wieder umbenennen.Kommt also drauf an wie sich sein Programm verhält, bzw. was dieses mit den Files anstellen will.
Geht hier einwandfrei mit einem unprivilegierten Nutzer (Windows 7/8/10) bei "einfachem" schreiben in die Datei (ohne Umbenenn/oder Lösch-Methodik -> Notepad)
Du fängst eine neue, leere Datei an, und kannst sie dann mit "speichern unter" auf die vorhandene Datei speichern? (bei der, wo es erlaubt ist)Oder öffnest Du die vorhandene, bearbeitest sie, uns speicherst dann?
Oder öffnest Du die vorhandene, bearbeitest sie, uns speicherst dann?
Genau das, ich vergebe die Rechte auf eine existierende Datei die der User dann beschreiben aber nicht aus dem Dateisystem löschen kann, mehr wollte der TO laut seinem Statement doch nicht.Ich zitiere:
Ein Ordner ohne Schreibrechte soll drei Dateien enthalten die geändert, aber nicht gelöscht werden können.
Daraus leite ich jetzt ab das sie schon existieren.Jetzt kommt's ja nur noch drauf an wie geht sein Programm mit den Berechtigungen um, reichen sie ihm oder eben nicht, wie du ja auch schon geschrieben hast.