Ich verwende ConvertStringSecurityDescriptorToSecurityDescriptor
, um eine Sicherheitsbeschreibung zu erstellen, die ich dann mit CreateFile
verwenden kann, da es viel einfacher und viel lesbarer ist.Sicherheits-Deskriptor einrichten, um Lesezugriff auf erhöhten Benutzer zu geben
Meine Absicht ist, dass die Datei von ihrem Besitzer/Ersteller vollständig steuerbar und nur durch erhöhte Prozesse lesbar ist.
Ich kam also mit dem folgenden SSDL Strings:
SSDL :=
'O:'+ SIDAsString + // owner is user
'D:' + // Discretionary ACL
'P' + // protected
'(A;NP;FA;;;' + SIDAsString + ')' + // Full control to owner
// Read only access to administrators
'(A;NP;FR;;;LA)' +
'(A;NP;FR;;;BA)';
SIDAsString
ein gültiges SID
, wie S-1-5-18
zum Beispiel enthält.
ConvertStringSecurityDescriptorToSecurityDescriptor
gibt eine gültige Sicherheitsbeschreibung zurück und die Datei wird mit den erwarteten Rechten erstellt.
Allerdings können erhöhte Prozesse (z. B. ein Deinstallationsprogramm) die Datei nicht lesen, sie erhalten einen Zugriff verweigert-Fehler. Wenn der Prozess, der versucht, die Datei zu lesen, über die Option run as administrator
gestartet wird, erhält er den erwarteten Zugriff.
Ich versuchte auf der Suche nach dem erhöhten Benutzer SID
, aber ich konnte keine Erwähnung finden, die mich zu der Annahme führt, dass es so etwas nicht gibt.
Gibt es keine Möglichkeit, einen SSDL-String anzugeben, der Lesezugriff auf einen Prozess gewährt, der mit erhöhten Rechten ausgeführt wird?
Elevation ändert nicht die SID- oder Gruppenzuordnungen eines Benutzers, sondern nur seine Token-Berechtigungen. Derselbe Benutzer kann erhöhte und nicht erhöhte Prozesse ausführen. AFAIK, Sie können keinen Sicherheitsdeskriptor verwenden, um den Zugriff basierend auf dem Elevationsstatus zu gewähren/zu widerrufen. Ich denke, du musst darüber nachdenken, was die Höhe ist und wie sie funktioniert. Vielleicht kann die Lese-App versuchen, die Berechtigung "SE_BACKUP_NAME" für sich selbst zu aktivieren und dann die Datei mit dem aktivierten Flag "FILE_FLAG_BACKUP_SEMANTICS" zu öffnen. Das könnte den Lesezugriff gewähren, nach dem Sie suchen. –
@RemyLebeau - wenn der Prozess nicht unter UAC ausgeführt wurde - er hat 'Administratoren' (' S-1-5-32-544') aber mit 'SE_GROUP_USE_FOR_DENY_ONLY' Attribut. wenn der Prozess erhöht gestartet wurde - er hat 'Administratoren' (' S-1-5-32-544') mit 'SE_GROUP_ENABLED' - also existieren wirklich andere Gruppenverbände. wenn wir Zugriff nur für 'Administratoren' erlauben (' S-1-5-32-544') - der erhöhte Prozess wird Zugriff haben, aber nicht erhöht sein - nein – RbMm
"Allerdings können erhöhte Prozesse die Datei nicht lesen" - vs "Wenn die Prozess wurde über die Option Als Administrator ausführen gestartet, er erhält den Zugriff wie erwartet. " - Kann also Prozess lesen Datei lesen oder nicht? und '(A; NP; FR ;;; LA)' oder kann Notwendigkeit sein '(A; NP; FRFX ;;; LA) 'für die Aktivierung des Zugriffs auf die Datei auch? – RbMm