Wie bestimmt und speichert cygwin (vergangene 2015) die Gruppenzugehörigkeit in NTFS?

388
Peter A. Schneider

Soweit ich weiß, hat NTFS nicht das Konzept eines Gruppendateibesitzers wie POSIX. (Bitte korrigieren Sie mich, wenn ich falsch liege.) Ein Benutzer kann Mitglied einer oder (normalerweise) mehrerer Gruppen sein, und eine Datei kann separate Berechtigungen für jede Gruppe haben, aber eine Datei hat nicht zusätzlich zu ihrer einfachen Vanille einen Gruppeneigentümer "Inhaber". Der "normale Besitzer" kann jedoch möglicherweise verwirrend eine Gruppe sein.

Wenn ich nun ls -lin einem cygwin 2.8.0-bash unter Windows 7 eine Datei in einem NTFS-Laufwerk durchführe (der Computer und das Konto befinden sich in einer Active Directory-Umgebung), sehe ich eine Gruppe:

$ ll -n cleartool golden-dev-val.cfgspec -rwxrwxrwx+ 1 2736485 1049089 277 9. Mai 12:34 cleartool -rwxrwxrwx+ 1 1493656 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec 

(Die lange GID stammt aus einer anderen Domäne.) Zuerst dachte ich, dass Cygwin die Gruppe aus der primären Gruppe des Inhabers leitet. Dadurch würde sich die Gruppe immer zusammen mit dem Benutzer ändern. Die beiden scheinen jedoch unabhängig zu sein:

$ chown 2736485 golden-dev-val.cfgspec  $ ll -n cleartool golden-dev-val.cfgspec -rwxrwxrwx+ 1 2736485 1049089 277 9. Mai 12:34 cleartool -rwxrwxrwx+ 1 2736485 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec  $ chgrp 3556770305 cleartool  $ ll -n cleartool golden-dev-val.cfgspec -rwxrwxrwx+ 1 2736485 3556770305 277 9. Mai 12:34 cleartool -rwxrwxrwx+ 1 2736485 3556770305 9159 19. Mai 16:25 golden-dev-val.cfgspec 

Ich habe https://cygwin.com/cygwin-ug-net/ntsec.html gelesen. Dort wird beschrieben, wie Posix-UIDs und GIDs aus Windows-SIDs berechnet werden. Ich kann jedoch nicht erkennen, wie cygwin die Gruppenzugehörigkeit für Dateien speichert (dies ist keine Windows / NTFS-Funktion, daher ist ein Cygwin-Add-On erforderlich), getrennt von der Benutzereigenschaft (die eine Windows / NTFS-Funktion ist und daher verfügbar ist) .

Es gibt einen Hinweis zum Speichern von Kommentaren dieser Art <cygwin key="value" key="value" [...] />für lokale Benutzerkonten net user ..., einschließlich eines "Gruppentasters"; Dies gilt jedoch für lokale Konten und ist nicht pro Datei. Daher kann ich meine Frage nicht beantworten.

Wie speichert und / oder erhält cygwin die Gruppenzugehörigkeit von Dateien? Ist es ein Windows-Mechanismus? Wenn ja, gibt es Windows-Tools, um sie zu bearbeiten?

0
verwende `cacls `, um zu sehen, wie NTFS alle ACL-Dateiberechtigungen speichert matzeri vor 6 Jahren 0
Schauen Sie sich den Quellcode an. DavidPostill vor 6 Jahren 0
@matzeri Ich habe das gemacht und kann sehen, welche Berechtigungen die verschiedenen Benutzer oder Gruppen haben. Was ich nicht sehen kann, ist ein Hinweis, welche der verschiedenen Gruppen als "Gruppeneigentümer" der Datei angezeigt würde, wenn ich eine Statistik oder ein ls-l in cygwin mache. Peter A. Schneider vor 6 Jahren 0
@DavidPostill Ich dachte zuerst, du trollst, aber wenn du ein Mod bist, nehme ich an, du meinst es ernst. (Bei anderen Gelegenheiten fand ich ähnliche Codebasen für einen gelegentlichen Besucher undurchlässig, sodass ich den Ort, an dem bestimmte Berechnungen durchgeführt wurden, nicht einmal identifizieren konnte, geschweige denn, sie zu untersuchen.) Haben Sie einen Hinweis, wo Sie suchen müssen? (Ich meine nicht, dass Sie meine Arbeit erledigen, aber Sie sind möglicherweise mit der Cygwin-Codebasis vertraut, obwohl Cygwin nicht in Ihren Tags angezeigt wird.) Was Sie sicherlich bestätigen können, ist, dass NTFS kein Konzept von ein "Gruppeneigentümer" im Sinne von POSIX. Peter A. Schneider vor 6 Jahren 0
@ PeterA.Schneider Soweit ich feststellen kann, befindet sich der ACL-Code in [newlib] (https://cygwin.com/cgi-bin2/package-cat.cgi?file=x86_64%2Fcygwin%2Fcygwin-2.8.0-1 -src & grep = newlib). Ich habe mich nicht tiefer damit beschäftigt. DavidPostill vor 6 Jahren 0
Wenn ich gesagt habe, schauen Sie sich den Quellcode an, weil es das ist, was andere tun müssen, um Ihre Frage zu beantworten (es sei denn, sie kennen die Antwort bereits, was unwahrscheinlich ist). Cygwin verwendet die POSIX.1e-ACL-API und ordnet diese irgendwo Win32-API-Aufrufen zu. Das ist das Bit, das Sie im Quellcode finden müssen. DavidPostill vor 6 Jahren 0

1 Antwort auf die Frage

1
dhvu

Nachdem ich den Quellcode von cygwin oberflächlich durchsucht hatte, glaube ich, dass er chgrp.exenur indirekt anruft RtlSetGroupSecurityDescriptor()- via chown(2)und fhandler_disk_file::set_posix_access().

Diese Funktionalität wird auf CLI-Ebene von subinacl.exe angeboten :

subinacl /file testfile /setprimarygroup=groupname 

In meinem Test benötigt das Tool jedoch SeSecurityPrivilege, um erfolgreich zu sein, und SeBackupPrivilege, um keine Warnung anzuzeigen.