Das Microsoft Interix Unix-Subsystem (inzwischen eingestellt) für seinen NT-Kernel hat mit Benutzer- und Gruppenberechtigungen etwas anders umgegangen als einige andere:
Benutzer- und Gruppeninformationen werden in der Security Access-Datenbank gespeichert . Sowohl Benutzer als auch Gruppen werden in derselben Datenbank gespeichert, aber Gruppen- und Benutzernamen müssen eindeutig sein. Keine Gruppe kann einen Benutzernamen haben und umgekehrt. (Diese Datenbank ersetzt die /etc/passwd
und /etc/groups
-Dateien in UNIX.) Benutzer und Gruppen werden mit der entsprechenden Windows-Methode (Benutzermanager, Active Directory-Benutzer und -Computer oder Lokale Benutzer und Gruppen) oder mit dem Win32- net user
Befehl erstellt. (Beispielshellskripte zum Erstellen und Entfernen von Benutzern sind im Verzeichnis enthalten /usr/examples/admin
.) Benutzer können vielen Gruppen angehören.
Hier sind einige spezifischere manuelle Auszüge:
In Windows kann entweder ein Benutzer oder eine Gruppe ein Objekt besitzen. Dies unterscheidet sich von UNIX, bei dem nur ein Benutzer ein Objekt besitzt.
Windows identifiziert alle Benutzer und Gruppen intern mithilfe einer Sicherheitskennung (SID) . Ein Hashing-Algorithmus generiert eindeutige SID-Werte. Keine zwei Benutzer oder Gruppen haben dieselbe SID.
Benutzer und Gruppen, die zum Zugriff auf ein Objekt berechtigt sind, werden anhand ihrer SID identifiziert. Alle Objekte, die von Windows gesichert werden können, verfügen über eine DACL (Discretionary Access Control List), die aus separaten Einträgen (Access Control Entries, ACEs) besteht. Ein ACE enthält zwei wichtige Informationen: eine Benutzer- oder Gruppen-SID und eine Beschreibung, wie viel Zugriff der einzelne Benutzer oder die Gruppe auf ein Objekt hat.
CHGRP
... Ändern Sie die Gruppen-ID für die Datei ... Der Benutzer, der chgrp (1) aufruft, muss der angegebenen Gruppe angehören und der Eigentümer der Datei sein oder über die entsprechenden Berechtigungen verfügen.
CHOWN
... Die Operanden owner und group sind beide optional. es muss jedoch einer angegeben werden. Wenn der Gruppenoperand angegeben ist, muss ein Doppelpunkt (:) vorangestellt werden.
Der Eigentümer kann entweder durch eine numerische Benutzer-ID oder einen Benutzernamen angegeben werden. Wenn ein Benutzername auch eine numerische Benutzer-ID ist, wird der Operand als Benutzername verwendet. Die Gruppe kann entweder eine numerische Gruppen-ID oder ein Gruppenname sein. Wenn ein Gruppenname auch eine numerische Gruppen-ID ist, wird der Operand als Gruppenname verwendet.
Aus Sicherheitsgründen kann der Besitz einer Datei nur durch einen Prozess mit entsprechenden Berechtigungen geändert werden.
Wie ich gelesen habe, bedeutet dies, dass, wenn Ihr Benutzerkonto zu einer Windows-Gruppe gehört, die über ausreichende Berechtigungen verfügt, um die Berechtigungen einer Datei zu ändern, deren Eigentümer diese Gruppe ist, diese chgrp
Datei möglicherweise außerhalb der Kontrolle Ihres Benutzerkontos gespeichert wird. Dies bedeutet weniger Kontrolle als Sie möglicherweise mit chown
expliziten user:group
Parametern haben. In diesem Zusammenhang ohne die Möglichkeit zu deklarieren user:
und :group
Sie könnten nie die gleichen Ergebnisse wie sonst erzielen.
Hier finden Sie einen Link zu einem detaillierten Einblick in die Interaktion von Interix mit Windows-ACLs, wobei der Schwerpunkt darauf liegt, wie sich diese Kenntnisse auf Samba-Dateisysteme in anderen Unix-Varianten auswirken können.
Hier ist ein Link zu einem inzwischen veralteten Solaris-Dokument, in dem rstchown
das ...
Gibt an, ob die POSIX-Semantik für den chown(2)
Systemaufruf wirksam ist.
Anscheinend, wenn der Parameter auf einen Wert von 0
... gesetzt ist
... das Ausschalten der POSIX-Semantik eröffnet das Potenzial für verschiedene Sicherheitslücken. Es eröffnet auch die Möglichkeit, dass ein Benutzer den Besitz einer Datei auf einen anderen Benutzer ändert und die Datei nicht ohne Eingreifen des Benutzers oder des Systemadministrators zurückrufen kann.
Eine solche Option macht die POSIX-Konformität von Solaris nicht ungültig . Nur dass es eine Option ist, qualifiziert es als konform :
Obwohl alle Implementierungen gemäß POSIX.1-2008 alle unten beschriebenen Funktionen unterstützen, gibt es möglicherweise systemabhängige oder dateisystemabhängige Konfigurationsverfahren, mit denen einige
oder alle dieser Funktionen entfernt oder geändert werden können. Solche Konfigurationen sollten nicht vorgenommen werden, wenn eine strikte Einhaltung erforderlich ist.
Die folgenden symbolischen Konstanten müssen mit einem anderen Wert als -1 definiert werden. Wenn eine Konstante mit dem Wert Null festgelegt wird, sollen die Anwendungen verwenden sysconf()
, pathconf()
oder fpathconf()
Funktionen, oder das
getconf
Dienstprogramm, um zu bestimmen , welche Funktionen sind auf dem System zu diesem Zeitpunkt oder für die jeweiligen Pfadnamen in Frage.
_POSIX_CHOWN_RESTRICTED
Die Verwendung von chown()
ist auf einen Prozess mit entsprechenden Berechtigungen beschränkt. Die Gruppen-ID einer Datei darf nur in die effektive Gruppen-ID des Prozesses oder in eine der zusätzlichen Gruppen-IDs geändert werden.
Die chown()
Systemfunktion - die der dokumentierten Systemaufruf von beiden hergestellt ist chown
und chgrp
Shell - Utilities - wird angegeben scheitern aus mehreren Gründen. Darunter:
EACCES
Die Suchberechtigung wird für eine Komponente des Pfadpräfixes verweigert.
ELOOP
In symbolischen Links, die während der Auflösung des Pfadarguments auftreten, ist eine Schleife vorhanden.
EPERM
Die effektive Benutzer-ID stimmt nicht mit dem Eigentümer der Datei überein, oder der aufrufende Prozess verfügt nicht über die entsprechenden Berechtigungen, und _POSIX_CHOWN_RESTRICTED gibt an, dass diese Berechtigungen erforderlich sind.
Das Verhalten beim Gewähren von Rechten zum Ändern von Berechtigungen für Benutzer ohne Rootberechtigung war jedoch noch nie in Solaris einzigartig. Es gibt eine sehr gute - wenn auch etwas veraltete - Abdeckung der Unix-Dateiberechtigungen in diesem Forumsbeitrag, in dem der Autor Folgendes angibt:
Ursprünglich erlaubte Unix einem Dateieigentümer, eine Datei weiterzugeben. Der Eigentümer einer Datei kann den Eigentümer in einen anderen ändern. Es gab keine Möglichkeit für einen Nicht-Root-Benutzer, diese Operation rückgängig zu machen ... BSD [später] wurde chown
von Nicht-Root-Benutzern entfernt ... [zum Teil, weil] ... Festplattenkontingente implementiert wurden, die die Größe des Festplattenspeichers einschränken konnten Benutzer könnte in einem Dateisystem haben ... Freche Benutzer könnten große Dateien verschenken, um hinter die Quoten zu schauen.
Heutzutage ist es nicht einfach zu sagen, ob chown
eine Datei von einem Nicht-Root-Benutzer erstellt werden kann . Viele Versionen von Unix erlauben beide Verhaltensweisen ...
Ein anderer guter - und neuerer - Mailinglisten-Beitrag zitiert dies und fährt fort:
Die Standardeinstellung bei den meisten Betriebssystemen ist chown
, dass sie nur auf root beschränkt sind. Und es besteht Einigkeit darüber, dass dies aus Sicherheitsgründen auch so bleiben sollte. Wenn ein Nicht-Root - Benutzer den Besitzer einer Datei ändert und jeder Execute - Bit ist auf den SUID
und SGID
müssen Bits gelöscht werden. Dies kann passieren oder auch nicht root
.
Ich denke, dass der letzte Absatz es schön sagt.
In diesem Artikel wird auch CAP_CHOWN
auf die Steuerung dieser Funktion unter Linux verwiesen (dies sollte sich nur auf das POSIX_CHOWN_RESTRICTED
Verhalten auswirken ) . Es gibt auch die CAP_FOWNER
Fähigkeit, die im Verhalten etwas anders ist.
Und wie Sie 2003 hervorheben :
Beachten Sie, dass Sie zumindest unter HPUX den Eigentümer Ihrer Dateien ändern können (zum root
Beispiel), auch wenn Sie kein privilegierter Benutzer sind ...
... die von einem Konfigurationsparameter abhängt setprivgroup
.
In jedem Fall, in dem ein Benutzer ohne Rootberechtigung Dateiberechtigungen manipulieren kann, ist es denkbar, wie in der in Ihrer Frage angeführten Begründung erwähnt , dass ein Benutzer chown
eine Datei sein könnte , die diesem Benutzer gehört, sodass sie einem anderen Benutzer gehört. Wenn der Gruppenbesitz der Datei und die chown
Gruppen des Benutzers nicht übereinstimmen, kann der Benutzer diese Datei nicht mehr ändern.
In diesem Szenario chown
dann chgrp
, wenn der Benutzer würden Berechtigungen fehlschlagen würde hat nicht mehr die Datei der Berechtigungen zu ändern, während chown user:group
- solange Gruppe unter dem Benutzer eigenen - gelingen würde.
Es gibt wahrscheinlich zahlreiche andere Nischensituationen, die sich in ähnlicher Weise ergeben könnten, darunter Verzeichnis- Sticky- und / oder Setgid- Bits, Dateisystem- und / oder implementierungsspezifische Zugriffssteuerungslisten. Dieser Thread ist zum Beispiel interessant. Die unzähligen Permutationen liegen weit jenseits meiner eigenen Vorstellungskraft - weshalb diese Antwort mit Füßen getreten ist. Wenn Sie dies lesen, glauben Sie, dass es wert ist, verbessert zu werden, und Sie glauben, dass Sie wissen, wie - bitte .
Es gibt auch eine ausführliche Dokumentation zu den verschiedenen möglichen Auswirkungen von Dateiberechtigungen, Tree Traversal und symbolischen Links, die hier einen ähnlichen Fehler in Bezug auf -R
Ecursive- chown
Anwendungen verursachen können:
Aus den POSIX XRAT- Abschnittsüberschriften Dritte und Vierte Domäne :
Im Allgemeinen werden Benutzer, die die Option für eine Dateihierarchieüberquerung angeben, ignoriert, um eine einzelne physische Hierarchie zu bearbeiten, und daher werden symbolische Verknüpfungen, die auf Dateien außerhalb der Hierarchie verweisen können, ignoriert. Chown owner file ist beispielsweise eine andere Operation als derselbe Befehl mit der angegebenen Option -R. In diesem Beispiel wird das Verhalten des Befehls chown
owner
file
hier beschrieben, während das Verhalten der Befehlseignerdatei chown -R
in der dritten und vierten Domäne beschrieben wird.
... Es gibt ein Sicherheitsproblem bei der Standardeinstellung eines logischen Ablaufs. In der chown -R
Vergangenheit war die Befehlsbenutzerdatei für den Superuser sicher, da die Bits setuid und setgid verloren gingen, als der Besitz der Datei geändert wurde. Wenn der Spaziergang logisch wäre, wäre ein Eigentümerwechsel nicht mehr sicher, da ein Benutzer möglicherweise einen symbolischen Link eingefügt hat, der auf eine Datei in der Baumstruktur verweist. Dies würde wiederum die Hinzufügung einer Option zu den Befehlen erfordern, die die Hierarchie so durchlaufen, dass sie nicht indirekt über die symbolischen Verknüpfungen erfolgen, und historische Skripten, die rekursive Durchläufe ausführen, würden sofort zu Sicherheitsproblemen. Dies ist zwar hauptsächlich ein Problem für Systemadministratoren, es ist jedoch vorzuziehen, für verschiedene Benutzerklassen keine unterschiedlichen Standardeinstellungen festzulegen.
...
In 4.3 BSD wurde chgrp
beim Durchlaufen des Baums die Gruppe der symbolischen Verknüpfung geändert, nicht das Ziel. Symbolische Links in 4.4 BSD hatten keine Eigentümer-, Gruppen-, Modus- oder anderen Standard-UNIX-Systemdateiattribute.
Und von der eigentlichen POSIX- chgrp
Seite gibt es diese, die auf eine mögliche unvollständige -R
ecursive Aktion hinweist, oder zumindest auf das, was früher war :
Die Versionen System V und BSD verwenden unterschiedliche Beendigungsstatuscodes. Bei einigen Implementierungen wurde der Exit-Status als Anzahl der aufgetretenen Fehler verwendet. Diese Vorgehensweise ist nicht praktikabel, da sie den Bereich der gültigen Exit-Statuswerte überschreiten kann. Die Standardentwickler haben diese maskiert, indem sie nur 0 und> 0 als Exit-Werte angegeben haben.