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/)
-   -   Delphi Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen (XP) (https://www.delphipraxis.net/151118-gemeinsame-dokumente-zugriffsrechte-setzen-und-erkennen-xp.html)

messie 6. Mai 2010 11:46


Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen (XP)
 
Moin,

ich habe ein Problem, das offensichtlich nur unter XP auftritt. Ein Programm erstellt im Administratormodus ein Verzeichnis und eine Textdatei in "Gemeinsame Dokumente" (Mit AssignFile).

Wenn nun aber ein eingeschränkter user in diese Datei (einfaches Logfile, mit AssignFile, Reset und Append) schreiben möchte, knallt es (I/O 103).

Dabei ist Folgendes merkwürdig: das Programm wird laut Manifest als "AsInvoker" gestartet, das sollte also der Datei auch die niedrigst möglichen Rechte für andere user mitgeben. Unter Vista lief es in unseren Tests problemlos (da wurde nur die Datei, nicht aber das Verzeichnis angelegt).

Ist das ein Problem von XP? Oder gibt es ein Problem mit Filemode? Das sieht doch aber nach den Zugriffen von Prozessen, nicht von usern oder liege ich da falsch?

Nebenbei versuche ich gerade die Rechte auszulesen, das ist aber gar nicht so leicht so dass ich noch kein Ergebnis habe :?

Das Programm wird in Delphi 6 gepflegt.

Grüße, Messie

Edit: kann man irgendwie die DACL löschen, nachdem die Datei erstellt wurde?

Dezipaitor 6. Mai 2010 11:59

Re: Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen
 
Das ist schon okay so, denn ein Benutzer soll ja nicht eine Datei eines anderen Benutzers einsehen dürfen (oder sogar löschen).
Die Frage ist, was willst du einen anderne Benutzer erlauben? Soll der andere Benutzer lesen dürfen? Oder soll er auch schreiben dürfen. Letzteres könnte ein Sicherheitsrisiko darstellen (z.B. weil die Datei durch ein Virus ersetzt wird).

Eine NULL-DACL erlaubt für alle den vollen Zugriff. MS rät davon tunlichst ab.

Ich kann mich erinnern, dass es in der JCL eine Funktion gibt, die das macht.
Mit der JWSCL geht es auch einfach:
http://blog.delphi-jedi.net/2010/03/...lder-security/

messie 6. Mai 2010 13:16

Re: Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen
 
Zitat:

Zitat von Dezipaitor
Das ist schon okay so, denn ein Benutzer soll ja nicht eine Datei eines anderen Benutzers einsehen dürfen (oder sogar löschen).
Die Frage ist, was willst du einen anderne Benutzer erlauben? Soll der andere Benutzer lesen dürfen? Oder soll er auch schreiben dürfen. Letzteres könnte ein Sicherheitsrisiko darstellen (z.B. weil die Datei durch ein Virus ersetzt wird).

Wozu habe ich denn einen Ordner "Gemeinsame Dokumente" (oder "Öffentlich" bei Vista), wenn nicht mehrere user da rein schreiben können. Eine Textdatei, in der einer nur Lesen kann, ist kein gemeinsames Dokument. Ich bin auch am überlegen, ob es das Unterverzeichnis ist, auf das nicht zugegriffen werden darf.

Zitat:

Zitat von Dezipaitor
Eine NULL-DACL erlaubt für alle den vollen Zugriff. MS rät davon tunlichst ab.

Das mache ich sonst auch so. Nur kann ich das noch nicht programmtechnisch. Ich benutze Installshield dazu, da kann ich den Zugriff auf everyone mit vollen Rechten setzen. Nur kennt der Windows Installer keine "Gemeinsame Dokumente".

Die JWSCL schaue ich mir mal an. Hoffentlich läuft das auch mit D6.

Das müsste ja die ganzen API-Sachen kapseln, oder?

Grüße, Messie

Dezipaitor 6. Mai 2010 13:49

Re: Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen
 
Zitat:

Zitat von messie
Zitat:

Zitat von Dezipaitor
Das ist schon okay so, denn ein Benutzer soll ja nicht eine Datei eines anderen Benutzers einsehen dürfen (oder sogar löschen).
Die Frage ist, was willst du einen anderne Benutzer erlauben? Soll der andere Benutzer lesen dürfen? Oder soll er auch schreiben dürfen. Letzteres könnte ein Sicherheitsrisiko darstellen (z.B. weil die Datei durch ein Virus ersetzt wird).

Wozu habe ich denn einen Ordner "Gemeinsame Dokumente" (oder "Öffentlich" bei Vista), wenn nicht mehrere user da rein schreiben können. Eine Textdatei, in der einer nur Lesen kann, ist kein gemeinsames Dokument. Ich bin auch am überlegen, ob es das Unterverzeichnis ist, auf das nicht zugegriffen werden darf.

Gemeinsame Dokumente sind für normale Benutzer, damit diese untereinander Daten schnell austauschen können! Es ist nicht dafür gedacht, dass Programme es als Kommunikation für ihre Zwecke nutzen. Dazu gibt es bessere und sichere Mittel (z.B. IPC und COM).
Lies mal, was Raymond Chen, ein langjähriger MS Mitarbeiter, dazu schreibt.
Du machst nämlich genau das was Chen anprangert.

Dein Programm schreibt als Administrator die Datei in "Gemeinsame Dokumente" und gibt diese Datei für alle frei. Chen listet diese Problempunkte auf, die daraus resultieren:
  • Jeder kann diese Datei beschreiben und somit das Programm eines anderen Benutzers zum Absturz bringen.
  • Viren einschleusen, denn jeder kann die Datei umbenennen, z.b. in "Dein geforderter Bericht, John.pdf.exe"
  • NTFS Alternate Data Streams benutzen, um zusätzliche Daten zu speichern.
  • Admindateien sind nicht an die Speicherplatzbeschränkung gebunden. D.h. jeder Benutzer kann beliebig vielen Speicher verbrauchen und das System zu Stillstand bringen.

Du siehst, dass du im Begriff bist ein Sicherheitslücke zu entwickeln!

Zitat:

Zitat von messie
Zitat:

Zitat von Dezipaitor
Eine NULL-DACL erlaubt für alle den vollen Zugriff. MS rät davon tunlichst ab.

Das mache ich sonst auch so. Nur kann ich das noch nicht programmtechnisch. Ich benutze Installshield dazu, da kann ich den Zugriff auf everyone mit vollen Rechten setzen. Nur kennt der Windows Installer keine "Gemeinsame Dokumente".

Die JWSCL schaue ich mir mal an. Hoffentlich läuft das auch mit D6.

Das müsste ja die ganzen API-Sachen kapseln, oder?

Grüße, Messie

Nein, nicht alle API Sachen. Nur eine Untermenge
D6 wird noch unterstützt.

messie 6. Mai 2010 14:09

Re: Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen
 
Zitat:

Zitat von Dezipaitor
Dein Programm schreibt als Administrator die Datei in "Gemeinsame Dokumente" und gibt diese Datei für alle frei. Chen listet diese Problempunkte auf, die daraus resultieren:
  • Jeder kann diese Datei beschreiben und somit das Programm eines anderen Benutzers zum Absturz bringen.
  • Viren einschleusen, denn jeder kann die Datei umbenennen, z.b. in "Dein geforderter Bericht, John.pdf.exe"
  • NTFS Alternate Data Streams benutzen, um zusätzliche Daten zu speichern.
  • Admindateien sind nicht an die Speicherplatzbeschränkung gebunden. D.h. jeder Benutzer kann beliebig vielen Speicher verbrauchen und das System zu Stillstand bringen.
Du siehst, dass du im Begriff bist ein Sicherheitslücke zu entwickeln!

Dann habe ich wohl die Rechtevergabe falsch verstanden. Nach allem, was ich weiß, sollte die Datei nicht als Administratordatei angelegt werden.
Ich starte das Programm als AsInvoker, also das niedrigste verfügbare Rechtelevel. Nach dem was ich weiß, ist das unabhängig vom Login-Status als Administrator.
Wieso sind dann Dateien, die das Programm schreibt, mit einem Mal wieder Admin-Dateien? :gruebel:

Deshalb steht das hier auch in API: ich muss irgendwie rausbekommen, mit welchen Rechten tatsächlich geschrieben wird. Da es unter Vista (ohne das Löschen des DACL!) geht, scheint bei XP etwas schief zu gehen...

Grüße vom verwirrten Messie

Dezipaitor 6. Mai 2010 19:35

Re: Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen
 
Ich habe mich darauf bezogen.
Zitat:

Ein Programm erstellt im Administratormodus ein Verzeichnis und eine Textdatei in "Gemeinsame Dokumente" (Mit AssignFile).
Das sagt für mich aus, dass du unter XP mit Administratorenrechten arbeitest. Der Teil "asInvoker" im Manifest wird unter XP ignoriert.

messie 7. Mai 2010 07:55

Re: Gemeinsame Dokumente:Zugriffsrechte setzen und erkennen
 
Zitat:

Zitat von Dezipaitor
Der Teil "asInvoker" im Manifest wird unter XP ignoriert.

Ok, das hatte ich anders verstanden. Hab es jetzt nochmal im MSDN nachgelesen: wenn man die Information schon hat, versteht man es richtig :lol:
Es steht nämlich nicht deutlich drin, dass das execution level unter XP ignoriert wird.

Bleibt immer noch die Frage, warum Dokumente nicht von verschiedenen usern mit Schreibzugriff genutzt werden dürfen. Dafür war "Gemeinsame Dokumente" doch eigentlich gedacht...

Grüße, Messie


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:48 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-2025 by Thomas Breitkreuz