it-swarm.com.de

Warum kann ein normaler Benutzer eine Datei nicht "chown"?

Warum ist der Befehl chown nur root? Warum können Nicht-Root-Benutzer chown nicht verwenden, um Dateien zu verschenken, die sie besitzen?

82
phleg

Die meisten Unix-Systeme verhindern, dass Benutzer Dateien "verschenken". Das heißt, Benutzer dürfen chown nur ausführen, wenn sie über die Zielbenutzer- und Gruppenberechtigungen verfügen. Da für die Verwendung von chown die Datei besessen oder root sein muss (Benutzer können niemals die Dateien anderer Benutzer verwenden), kann nur root chown ausführen, um den Eigentümer einer Datei in einen anderen Benutzer zu ändern.

Der Grund für diese Einschränkung ist, dass das Weitergeben einer Datei an einen anderen Benutzer dazu führen kann, dass in ungewöhnlichen, aber immer noch wichtigen Situationen schlimme Dinge passieren. Zum Beispiel:

  • Wenn auf einem System Festplattenkontingente aktiviert sind, kann Alice eine weltweit beschreibbare Datei in einem Verzeichnis erstellen, auf das nur sie zugreifen kann (sodass niemand sonst auf diese weltweit beschreibbare Datei zugreifen kann), und dann chown ausführen, um diese Datei zu erstellen im Besitz eines anderen Benutzers Bill. Die Datei würde dann unter Bills Festplattenkontingent zählen, obwohl nur Alice die Datei verwenden kann.
  • Wenn Alice eine Datei an Bill weitergibt, gibt es keine Spur, dass Bill diese Datei nicht erstellt hat. Dies kann ein Problem sein, wenn die Datei illegale oder anderweitig kompromittierende Daten enthält.
  • Einige Programme erfordern, dass ihre Eingabedatei einem bestimmten Benutzer gehört, um eine Anforderung zu authentifizieren (z. B. enthält die Datei einige Anweisungen, die das Programm für diesen Benutzer ausführt). Dies ist normalerweise kein sicheres Design, denn selbst wenn Bill eine Datei mit syntaktisch korrekten Anweisungen erstellt hätte, hätte er möglicherweise nicht beabsichtigt, diese zu diesem bestimmten Zeitpunkt auszuführen. Dennoch kann es nur noch schlimmer werden, wenn Alice eine Datei mit beliebigem Inhalt erstellen und als Eingabe von Bill verwenden kann.

Unter Linux benötigen Sie die CAP_CHOWN-Funktion zum Chown. root wird solche gewährt. Erläuterungen finden Sie unter: http://vouters.dyndns.org/tima/Linux-OpenVMS-C-Implementing_chown.html . Wenn Sie die CAP_CHOWN-Funktion bereitstellen möchten, erstellen Sie Ihren Code mit libcap-ng oder libcap. Dies wird wie folgt demonstriert: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html Hier müssen Sie einfach CAP_AUDIT_WRITE durch CAP_CHOWN ersetzen.

15
user1910461

Sie können den Befehl starten, aber er funktioniert nicht, wenn Sie nicht root sind. Es ist einfach: Stellen Sie sich einen Benutzer vor, der eine Software in einen Root-Benutzer ändern kann. Es kann das Setuid-Bit hinzufügen und, voilà, der Typ ist root! Die Verwendung kann also das Bit mit chmod hinzufügen, aber keine Chance, den Eigentümer von Dateien zu ändern.

0
Dom