Kann ich Benutzern erlauben, eine Datei zu ändern, die ihnen nicht gehört?

15

Ich möchte Benutzern erlauben, eine Datei zu ändern, die root gehört, oder einem Benutzer, der nicht selbst ist. Ich habe die Datei auf 777 geändert und bekomme "Operation nicht erlaubt". Ich habe den Benutzer zur Gruppe der Datei hinzugefügt und erhalte dieselbe. Warum kann ein Benutzer eine Datei, auf die er Schreibzugriff hat, nicht ändern?

ashleysmithgpu
quelle
1
Warum nicht einfach alles als root ausführen? Wenn ein Benutzer einen Modus ändern kann, zerstören Sie im Grunde das gesamte Unix-Berechtigungsmodell ...
Chris Down
1
Was möchten Sie tun? Vielleicht sollten Sie einen Blick darauf werfen sudo: linux.die.net/man/8/sudo & linux.die.net/man/5/sudoers
xx4h
Die Datei hat die Berechtigungen 777, ein Benutzer könnte "mv file file.old; cat file.old> file" gehen und sie würde nun die Datei besitzen und kann sie chmodieren. Warum können sie nicht "chmod 777 file"?
ashleysmithgpu
5
Nein, das können sie nur, wenn sie Schreibrechte für das Verzeichnis haben. Wenn der Benutzer das Recht hätte, die Berechtigungen von Dateien zu ändern, die er nicht besitzt, indem er den 04777-Modus einstellt und / usr / bin / env in ihn kopiert, könnte er jeden Befehl als dieser Benutzer ausführen.
Stéphane Chazelas
@StephaneChazelas Das ist ein seltsames Argument, da der Kernel leicht entscheiden könnte (und tut!), Nicht-Besitzern solche Änderungen zu erlauben, ohne an diese Entscheidung gebunden zu sein, alle Arten von Änderungen zuzulassen . Immerhin wird SUID sogar zurückgesetzt, wenn ein Nicht-Besitzer die Datei schreibt.
Hauke ​​Laging

Antworten:

7

Warum kann ein Benutzer eine Datei, auf die er Schreibzugriff hat, nicht ändern?

Für die normalen Zugriffsrechte ist dies eine Entwurfsentscheidung. Sie brauchen richacls : WRITE_ACLund vielleicht WRITE_OWNER.

Hauke ​​Laging
quelle
Und Sie sollten warnen, dass richacls nicht allgemein verfügbar ist.
sendmoreinfo
@sendmoreinfo Der Wikipedia-Artikel sagt das und es muss natürlich gelesen werden, da meine Antwort nicht erklärt, was richacls sind und wie sie verwendet werden. Es ist lächerlich, eine richtige Antwort aus diesem Grund als "nicht nützlich" zu betrachten. Zumal es keine gleichwertige Alternative gibt. Nehmen Sie das nächste Mal eine Bearbeitung vor, wenn Sie der Meinung sind, dass solche Informationen erforderlich sind.
Hauke ​​Laging
Ich
verstehe
2
Sie haben die Funktion offensichtlich verwendet. Erklären Sie sie also selbst mit Ihren eigenen Worten.
sendmoreinfo
10

Unix-Berechtigungen sind so konzipiert, dass sie einfach sind. Sie benötigen die Leseberechtigung zum Lesen aus einer Datei, die Schreibberechtigung zum Schreiben in eine Datei und die Ausführungsberechtigung zum Ausführen einer Datei. Sie müssen über eine Datei verfügen, um deren Metadaten zu ändern¹.

Das Zulassen, dass ein Benutzer, der eine Datei lesen kann, anderen die Leseberechtigung erteilt, oder das Zulassen, dass ein Benutzer, der eine Datei schreiben kann, anderen die Schreibberechtigung erteilt, würde das Sicherheitsmodell nicht wesentlich ändern. Dies liegt daran, dass Unix-Berechtigungen frei sind: Ein Benutzer, der eine Datei lesen kann, kann ihren Inhalt anderen Benutzern zur Verfügung stellen, auch wenn diese anderen Benutzer die Datei sonst nicht lesen könnten (und ähnlich wie beim Schreiben könnte der Benutzer als Proxy fungieren und im Namen anderer schreiben).

Wenn Sie einem Benutzer andererseits die Erteilung einer Berechtigung erlauben, über die er nicht verfügt, wird das Berechtigungssystem vollständig zerstört: Der Benutzer kann sich selbst alle Berechtigungen erteilen.

Es ist ziemlich selten, dass Sie die Berechtigungen einer Datei ändern müssen, die Sie nicht besitzen. Normalerweise sollten Sie dafür sorgen, dass die Datei die richtigen Berechtigungen hat, sobald sie erstellt wird. Wenn Sie das wirklich brauchen, können Sie dem Benutzer sudo chmodRechte für einen bestimmten Modus und eine bestimmte Datei (z joe: ALL = (ALL) chmod g+r /path/to/file. B. ) erteilen .

¹ Mit Ausnahme der Zugriffs- und Änderungszeiten, die insbesondere durch das Lesen oder Schreiben in die Datei festgelegt werden.

Gilles 'SO - hör auf böse zu sein'
quelle
In meinem Anwendungsfall gibt es sowohl einen Webprozess (von www-data) als auch einen Cli-Prozess (von mir), die Berechtigungen für eine Datei festlegen möchten. Ich habe mich der www-Datengruppe hinzugefügt, aber das reicht nicht aus.
donquixote
Sogar den Besitzer / die Gruppe für mich zu ändern: www-Daten helfen nicht. (Ich habe nicht den Mechanismus entworfen, der versucht, die Berechtigungen
festzulegen