AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi MS AuthZ Technologie AuthZAccessCheck Problem.
Thema durchsuchen
Ansicht
Themen-Optionen

MS AuthZ Technologie AuthZAccessCheck Problem.

Ein Thema von Dezipaitor · begonnen am 2. Jan 2008 · letzter Beitrag vom 6. Jan 2008
 
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#1

MS AuthZ Technologie AuthZAccessCheck Problem.

  Alt 2. Jan 2008, 15:32
AuthZ ist eine MS Technologie, mit der man unter anderem ein AccessCheck machen kann, ohne ein Token verwenden zu müssen. "AuthZAccessCheck" kann eine Sid verwenden, um Zugriff zu testen.

Das folgende Programm und alle Units kann man auch hier laden:
jedi-apilib-rev136.zip.

Dieses Programm demonstriert MS AuthZ mit JWSCL.
Delphi-Quellcode:
program AuthCtx2;

{$APPTYPE CONSOLE}

uses
  dialogs,
  JwaWindows,
  jwsclConstants,
  jwsclTypes,
  JwsclMapping,
  JwsclSid,
  JwsclToken,
  JwsclResource,
  JwsclDescriptor,
  JwsclACL,
  JwsclUtils,
  JwsclSecureObjects,
  JwsclKnownSid,
  JwsclAuthCtx;


const
  GUID_1: TGUID = (D1: 1; D2: 2; D3: 1; D4: (1, 2, 3, 4, 5, 6, 7, 8));
  GUID_2: TGUID = (D1: 1; D2: 2; D3: 1; D4: (1, 34, 3, 4, 5, 6, 7, 8));

var
    RMCtx : TJwAuthResourceManager;
    AuthZCtx : TJwAuthContext;

    Reply: TJwAuthZAccessReply;
    AuthZHandle: TAuthZAccessCheckResultHandle;
    Request: TJwAuthZAccessRequest;
    SD : TJwSecurityDescriptor;
    SDArray : TJwSecurityDescriptorArray;
    ObjectTypeArray: TJwObjectTypeArray;
    i : Integer;
begin
  JwInitWellKnownSIDs;

  RMCtx := TJwAuthResourceManager.Create('',
    [authRM_NoAudit],nil,nil,nil);

  AuthZCtx := TJwAuthContext.CreateBySid(
      RMCtx,//const ResourceManager: TJwAuthResourceManager;
      [authZSF_Default],//const Flags : TAuthZSidContextFlags;
      JwAdministratorsSID,//
      0,//const ExpirationTime: Int64;
      nil//const DynamicGroupArgs: Pointer
      );

  SD := TJwSecurityDescriptor.Create; //CreateDefaultByToken();
  SD.Owner := JwNullSID;
  SD.PrimaryGroup := JwNullSID;

  SD.DACL.Clear;
  SD.DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(
                  nil,[], FILE_READ_EA, JwAdministratorsSID, false));
  {SD.DACL.Add(TJwDiscretionaryAccessControlEntryDeny.Create(
                  nil,[], FILE_READ_DATA, JwAdministratorsSID, false));
  }

  SetLength(SDArray,2);

    SDArray[0] := TJwSecurityDescriptor.CreateDefaultByToken();
    SDArray[0].DACL.Clear;
    SDArray[0].DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(
                  nil,[], FILE_READ_ATTRIBUTES, JwAdministratorsSID, false));

    SDArray[1] := TJwSecurityDescriptor.CreateDefaultByToken();
    SDArray[1].DACL.Clear;
    SDArray[1].DACL.Add(TJwDiscretionaryAccessControlEntryAllow.Create(
                  nil,[], FILE_WRITE_DATA, JwAdministratorsSID, false));



  SetLength(ObjectTypeArray, 2);
  ZeroMemory(@ObjectTypeArray[0], sizeof(ObjectTypeArray[0]));
  ObjectTypeArray[0].Level := ACCESS_OBJECT_GUID;
  ObjectTypeArray[0].ObjectType := @GUID_1;

  ZeroMemory(@ObjectTypeArray[1], sizeof(ObjectTypeArray[1]));
  ObjectTypeArray[1].Level := ACCESS_OBJECT_GUID;
  ObjectTypeArray[1].ObjectType := @GUID_2;
  

  Request := TJwAuthZAccessRequest.Create(
    MAXIMUM_ALLOWED,//FILE_READ_EA,//DesiredAccess: TJwAccessMask;
    JwNullSID, //PrincipalSelfSid: TJwSecurityID;
    ObjectTypeArray,//ObjectTypeArray,//ObjectTypeArray: TJwObjectTypeArray;
    nil,//Data: Pointer
    shOwned
    );

  AuthZCtx.AccessCheck(
    1,//Flags: Cardinal;
    Request,//const Request: TJwAuthZAccessRequest;
    0,//const AuditInfo: TAuthZAuditInfoHandle;
    SD,//const SecurityDescriptor: TJwSecurityDescriptor;
    SDArray,//const OptionalSecurityDescriptorArray: TJwSecurityDescriptorArray;
    Reply,//out Reply: TJwAuthZAccessReply;
    AuthZHandle//out AuthZHandle: TAuthZAccessCheckResultHandle
  );

  writeln(JwFormatAccessRights(Reply.GrantedAccessMask[0], FileMapping));

  Reply.Free;

  //readln;

  AuthZCtx.Free;
  RMCtx.Free;

end.
Was ist das Problem?
1. SDArray ist ein Array von Sicherheitsdeskriptoren, die einfach ein SD sind, jedoch hintereinandergeschrieben. Die DACL wird also zu einer riesigen DACL verschmolzen. Die Reihenfolge ist logisch, also 1,2,3,4... (zuerst der erste, dann der zweite, usf.)
Das Problem ist, dass nur der erste SD in SDArray gehör findet. Das Recht "FILE_WRITE_DATA" müsste in der Ausgabe von JwFormatAccessRights auch vorkommen.

2.
AuthZCtx.AccessCheck hat als Eingabe eine Klasse "Request", welche eine Reihe von Objekteigenschaften entgegen nehmen kann. Das sind Eigenschaften eines Objektes, welche auch gesichert werden wollen. Z.b. ist eine (fiktive) Eigenschaft "Visible", welche nur von Administratoren verändert werden kann, aber sonst jeder lesen darf.
Gebe ich diesen Array an, wirft AuthZAccessCheck jedesmal einen Fehler.

Delphi-Quellcode:
 Request := TJwAuthZAccessRequest.Create(
    MAXIMUM_ALLOWED,//FILE_READ_EA,//DesiredAccess: TJwAccessMask;
    JwNullSID, //PrincipalSelfSid: TJwSecurityID;
    ObjectTypeArray, //<--- wichtig!!
    nil,//Data: Pointer
    shOwned
    );
Vorsicht, das Beispiel im Download funktioniert nur, weil es nil statt ObjectTypeArray an den Konstruktor übergibt. Das Beispiel hier bringt jedoch den Fehler.


Alles klar?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz