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


75

Warum ist der chownBefehl nur root? Warum können Benutzer ohne Rootberechtigung chown nicht verwenden, um ihre eigenen Dateien weiterzugeben?


kippe verstehe Ihre Frage chown - Befehl kann auch von Nicht Root - Benutzer verwendet werden
harish.venkat

Vielleicht habe ich es falsch ausgedrückt. Nun , die genaue Frage meiner Proffesor war: „Warum der Umzug von Rechten von einem normalen Benutzer in UNIX - Systemen nicht erlaubt?“ ...
phleg

19
Ich denke , die wirkliche Frage ist: Warum kann nicht Nicht-Root - Benutzer verwenden chownzu verschenken Dateien , die sie besitzen. (Ich habe Systeme gesehen, bei denen es je nach Dateisystemkonfiguration möglich ist.)
Keith Thompson

Antworten:


96

Die meisten Unix-Systeme verhindern, dass Benutzer Dateien „verraten“. Das heißt, Benutzer können nur ausgeführt werden, chownwenn sie über die Zielbenutzer- und Gruppenrechte verfügen. Da für die Verwendung chownder Datei der Besitz der Datei oder der Root-Status erforderlich ist (Benutzer können niemals die Dateien anderer Benutzer übernehmen), kann nur root ausgeführt werden chown, um den Eigentümer einer Datei in einen anderen Benutzer zu ändern.

Der Grund für diese Einschränkung ist, dass die Weitergabe einer Datei an einen anderen Benutzer in seltenen, aber immer noch wichtigen Situationen zu schlechten Ergebnissen führen kann. Zum Beispiel:

  • Wenn auf einem System Datenträgerkontingente aktiviert sind, kann Alice in einem Verzeichnis, auf das nur sie Zugriff hat, eine Datei mit weltweiter Schreibberechtigung erstellen (sodass niemand anderes auf diese Datei mit weltweiter Schreibberechtigung zugreifen kann) und chowndiese Datei dann ausführen , um den Besitz eines anderen Benutzers Bill zu erlangen. Die Datei würde dann unter Bills Datenträgerkontingent zählen, obwohl nur Alice die Datei verwenden kann.
  • Wenn Alice Bill eine Datei übergibt, gibt es keine Spur, dass Bill diese Datei nicht erstellt hat. Dies kann ein Problem sein, wenn die Datei ungültige oder auf andere Weise gefährdende Daten enthält.
  • Einige Programme erfordern, dass ihre Eingabedatei einem bestimmten Benutzer gehört, um eine Anforderung zu authentifizieren (die Datei enthält beispielsweise einige Anweisungen, die das Programm für diesen Benutzer ausführt). Dies ist normalerweise kein sicheres Design, da Bill, selbst wenn er eine Datei mit syntaktisch korrekten Anweisungen erstellt hat, möglicherweise nicht beabsichtigt hat, diese zu diesem bestimmten Zeitpunkt auszuführen. Trotzdem kann es die Sache nur verschlimmern, wenn Alice die Möglichkeit hat, eine Datei mit beliebigen Inhalten zu erstellen und als Eingabe von Bill nehmen zu lassen.

3
Bei einem früheren Job habe ich ein Softwaresystem erstellt, das von der Unfähigkeit abhing, Dateien weiterzugeben. Mithilfe des Dateieigentums wurde überprüft, ob eine Anforderung von einem bestimmten Benutzer gesendet wurde. Während der Installation wurde überprüft, ob die Weitergabe von Dateien zulässig ist, und in diesem Fall wurde die Weitergabe verweigert.
Keith Thompson

2
Ein weiteres kritischeres Problem besteht darin, dass ein Benutzer es kopieren /bin/bash, festlegen und dann chownan den gewünschten Benutzer senden kann . Jetzt haben sie als diese Person Shell-Zugriff.
Patrick

18
@Patrick chownlöscht immer die Bits setuid und setgid.
Gilles

1
@Gilles und aus gutem Grund ... Wenn Sie eine Shell-Binärdatei irgendwo kopieren könnten, könnten Sie darauf zugreifen, die setuid / gid-Bits darauf setzen und sie auf root setzen (oder eine beliebige Reihenfolge davon, die Ihnen 6755/0: 0-Perms einbringt) / owner) können Sie root auf diesem System erhalten. Oh, genau, ich habe Patricks Kommentar verpasst.
Hanetzer

Ok, aber wenn ich die dir (besitzen drwxr-xr-x ring0 ring0 .) , in der Wurzel hat eine normale Datei ( -rw-r--r-- root root file), warum kann ich nicht tun , chown ring0 fileda es trotzdem zu tun erlaubt, wie ring0, cp file x ; rm file ; mv x file(und einige optional touch sometime file...)?
Ring Ø

15

Unter Linux benötigen Sie die Funktion CAP_CHOWN, um chown auszuführen. root wird so gewährt. Weitere Erklärungen 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 wie folgt: http://vouters.dyndns.org/tima/Linux-PAM-C-Pluggable_Authentication_Modules_programming_example.html, wobei Sie CAP_AUDIT_WRITE einfach ersetzen müssen mit CAP_CHOWN.


1
+1 für Sie müssen nicht root sein. Weil du nicht mehr root sein musst.
Strg-Alt-Delor

1
Manchmal brauchen Sie nicht einmal CAP_CHOWN: unix.stackexchange.com/questions/399975/… Nach meinem Lesen der Kernelquelle ist jede Dateisystemimplementierung damit beauftragt, die Berechtigungen für chown zu überprüfen. Und es scheint, dass mit NFS die Berechtigungen auf der Serverseite überprüft werden. Und wenn der Server ... seltsam ist ... dann ist es möglich.
Mike S

0

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


12
Sie können das setuid-Bit nicht zu einer Datei hinzufügen, die Sie nicht besitzen, und Implementierungen, die das Weitergeben von Dateien ermöglichen, löschen das setuid-Bit.
Gilles

Ich denke, Doms Antwort lautet: Stellen Sie sich vor, Sie könnten. Dann würde es Ärger geben. Dein Punkt, den du nicht kannst, ist richtig. Aber das OP fragt "warum?" Das Löschen des Setuid-Bits ist ein weiteres Sicherheitsmerkmal, das erneut die Frage "Warum?" Aufwirft. Was ich dann auf Doms Antwort verweisen würde: Wenn ein Benutzer chown und ein Benutzer setuid könnte, wäre diese Kombination katastrophal. Ich denke, er macht einen guten Punkt, auch wenn er ein bisschen fehlt.
Mike S
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.