Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Ordner-Rechte entziehen (https://www.delphipraxis.net/174096-ordner-rechte-entziehen.html)

grasshopper 3. Apr 2013 11:26

Ordner-Rechte entziehen
 
Hi!

Ich arbeite für meine Firma gerade an einem selbstgemachten Installer.

Dort habe ich mit der Jedi WSCL einem Ordner (und Unterordner und -Dateien) alle Rechte für "Jeden" gegeben.
Das sieht (als Test-Funktion) so aus:
Code:
procedure TfrmMain.Button1Click(Sender: TObject);
var
  UserToken : TJwSecurityToken;
  SD : TJwSecurityDescriptor;
  FileObject : TJwSecureFileObject;
  Owner : TJwSecurityId;
  DACL : TJwDAccessControlList;
begin
  if DirectoryExists('D:\test2') then
  begin
    JwInitWellKnownSIDs;
    UserToken := TJwSecurityToken.CreateTokenEffective(MAXIMUM_ALLOWED);
    Owner := UserToken.GetTokenOwner;
    try
      FileObject := TJwSecureFileObject.Create('D:\test2');

      DACL := FileObject.DACL;
      DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce, afContainerInheritAce], GENERIC_ALL, JwWorldSID, false));
      FileObject.SetDACL(DACL);
    finally
      FileObject.Free;
      Owner.Free;
      UserToken.Free;
    end;
  end;
end;
Jedoch besteht bei mir die Befürchtung, dass die Rechte der anderen Benutzer einen höheren Stellenwert haben, und so zum Beispiel ein anderer Nutzer trotzdem nicht schreibend darauf zugreifen kann.

Deswegen sollen jetzt alle Rechte für alle anderen Benutzer weg.
Allerdings scheitert es bei mir schon beim Entziehen der Rechte.

Ich habe versucht, beim Erstellen des DACL's die AccessMask durch eine leere zu erstzen, also statt:
Code:
DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce, afContainerInheritAce], [B]GENERIC_ALL[/B], JwWorldSID, false));
dann das hier:
Code:
DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(nil, [afObjectInheritAce, afContainerInheritAce], [B]$00000000[/B], JwWorldSID, false));
Aber das funktioniert nicht. :(

In der JWSCL habe ich nichts gefunden.
Nur die Klasse TJwDiscretionaryAccessControlEntryDeny (statt TJwDiscretionaryAccessControlEntryAllow), allerdings verweigert das dann die Rechte, anstatt sie nur zu entziehen.


Kann mir jemand helfen?
Danke!:-D

PS: Über die Sinnhaftigkeit vom Geben aller Rechte brauchen wir nicht zu diskutieren. Ist vielleicht nicht die Beste Möglichkeit, aber in unserem Anwendungsfall zumindest akzeptabel. :wink:

p80286 3. Apr 2013 12:00

AW: Ordner-Rechte entziehen
 
Okay wir wollen jetzt nicht diskutieren....
Wenn Du alle Rechte an jeden vergeben hast, dann mußt Du nur aufpassen, daß es keine deny-Rechte gibt, dann ist der Käse gegessen.

Grundsätzlich gilt für jeden Benutzer, daß sich seine Berechtigungen summieren, wenn sie nicht verboten werden.
Es soll ja Adminstratoren geben, die einen wilden Mix aus Berechtigungen und Verboten generieren, die haben wohl nichts anderes zu tun.
Unter Umständen mußt Du auch die Berechtigungen der darüber liegenden Verzeichnisse ändern.
Und Vererbung könnte auch ein Thema sein.

Gruß
K-H

Dalai 3. Apr 2013 13:28

AW: Ordner-Rechte entziehen
 
@grasshopper: Du denkst zu kompliziert.

Zitat:

Zitat von p80286 (Beitrag 1209819)
Grundsätzlich gilt für jeden Benutzer, daß sich seine Berechtigungen summieren, wenn sie nicht verboten werden.

Dem ist nichts hinzuzufügen.

MfG Dalai

grasshopper 3. Apr 2013 14:25

AW: Ordner-Rechte entziehen
 
Seid ihr euch sicher, dass das funktioniert?

Angenommen, wir haben einen Ordner, wo "Jeder" alle Rechte hat, und ein Benutzer nur Lese-Rechte.
Will der Benutzer nun schreibend auf den Ordner zugreifen, geht das nicht. (korrigiert mich bitte, falls ich hier falsch liege..)
Das soll geändert werden, indem alle Rechte für den Benutzer entfernt werden, und somit die Rechte von "Jeder" übernommen wird.

Dalai 3. Apr 2013 14:33

AW: Ordner-Rechte entziehen
 
"Jeder" ist ein Pseudobenutzer (ein sogenannter "Well Known SID"), der für wirklich alle Benutzer gilt*. Stell dir das vor wie eine Benutzergruppe. Hat die Benutzergruppe "Büro" auf ein Verzeichnis keine Rechte, die Gruppe "Produktion" aber schon und ist der Benutzer "Willi" in beiden Gruppen vertreten: Was meinst du, darf Willi? Richtig, er hat Rechte auf das Verzeichnis, weil er in "Produktion" ist (natürlich unter der von p80286 genanntenn Voraussetzung, dass weder für eine der Gruppen noch Willi selbst die Rechte auf "verweigern" gestellt sind).

*) Deshalb sollte man hiermit auch ganz vorsichtig sein und von "Vollzugriff" für diesen Benutzer weiten Abstand nehmen, denn Vollzugriff schließt das Anpassen von Zugriffsrechten mit ein.

MfG Dalai

p80286 3. Apr 2013 15:17

AW: Ordner-Rechte entziehen
 
Zitat:

Zitat von Dalai (Beitrag 1209843)
Deshalb sollte man hiermit auch ganz vorsichtig sein und von "Vollzugriff" für diesen Benutzer weiten Abstand nehmen, denn Vollzugriff schließt das Anpassen von Zugriffsrechten mit ein.

Und das jetzt bitte in Großschrift und fett!

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz