Wer kann die Berechtigungen einer Datei/eines Verzeichnisses ändern?

Wer kann die Berechtigungen einer Datei/eines Verzeichnisses ändern?

Ich bin mir nicht sicher, ob der Eigentümer einer Datei/eines Verzeichnisses und der Root-Benutzer die einzigen Benutzer sind, die die Berechtigungen einer Datei/eines Verzeichnisses ändern dürfen. Habe ich Recht oder gibt es auch andere Benutzer, die die Berechtigungen ändern dürfen?

Antwort1

Nur der Eigentümer und root(Superuser) dürfen die Berechtigung einer Datei oder eines Verzeichnisses ändern. Das bedeutet, dass der Eigentümer und der Superuser die Berechtigungen Lesen ( r), Schreiben ( w) und Ausführen ( x) festlegen können. Das Ändern des Benutzerbesitzes von Dateien und Verzeichnissen mit dem Befehl chownist jedoch nur für zulässig root. Das Ändern des Gruppenbesitzes mit chgrpist für zulässig rootund den Eigentümer der Datei, wenn der Benutzer Mitglied der neuen Gruppe ist.

Antwort2

Für den Normalbetrieb können nur Root und der Eigentümer chmod. Darüber hinaus können Root chownund chgrp, und darüber hinaus kann der Eigentümer , chgrpsolange dieser ein Mitglied der Zielgruppe ist.

Aus Sicherheitsgründen gibt es jedoch einen anderen Fall: Jeder Benutzer mit Schreibberechtigung für das Verzeichnis, das die Datei enthält, kann die Datei durch eine Kopie ersetzen und so zum Eigentümer werden und die Befugnis erhalten, die Berechtigungen und den Inhalt zu ändern.

So:

14:14 mybox:~ mkdir mydir
14:14 mybox:~ cd mydir/
14:14 mybox:mydir echo foo | sudo tee yourfile
foo
14:14 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  3 me    staff  102 Apr 11 14:14 .
-rw-r--r--  1 root  staff    4 Apr 11 14:14 yourfile

Wir haben ein Verzeichnis erstellt und als Root eine Datei geschrieben. Da Root die Datei besitzt, können wir weder darin schreiben, noch können wir chmod ausführen:

14:15 mybox:mydir echo bar > yourfile 
-bash: yourfile: Permission denied
14:15 mybox:mydir chmod a+x yourfile
chmod: Unable to change file mode on yourfile: Operation not permitted

Da wir jedoch Schreibberechtigung für das Verzeichnis haben, können wir die Datei ersetzen, um den Besitz zu erhalten:

14:15 mybox:mydir mv yourfile yourfile2
14:15 mybox:mydir cp yourfile2 yourfile
14:15 mybox:mydir ls -ld . yourfile 
drwxr-xr-x  4 me   staff  136 Apr 11 14:15 .
-rw-r--r--  1 me   staff    4 Apr 11 14:15 yourfile

Und da wir nun der Eigentümer sind, können wir mit der Datei natürlich machen, was wir wollen:

14:15 mybox:mydir echo bar > yourfile 
14:15 mybox:mydir chmod a+x yourfile
14:16 mybox:mydir cat yourfile
bar

Ebenso kann jeder Benutzer mit Schreibberechtigung fürbeliebigVerzeichnis im vollständigen Pfad, der zur Datei führt, kann ab diesem Punkt die Verzeichnisstruktur ersetzen und so den Besitz der Datei mit dem angegebenen Namen erlangen. Der Besitz oder die Berechtigungen der tatsächlichen Originaldatei (die wir in „IhreDatei2“ umbenannt haben) werden natürlich nicht geändert.

14:17 mybox:mydir ls -l yourfile2
-rw-r--r--  1 root  staff  4 Apr 11 14:14 yourfile2

Antwort3

Der chmodBefehl ruft ziemlich direkt den gleichnamigen Systemaufruf auf. Die Manpage für den chmod(2)Systemaufruf (unter Linux 4.10) lautet:

Die effektive UID des aufrufenden Prozesses muss mit dem Eigentümer der Datei übereinstimmen, oder der Prozess muss über entsprechende Berechtigungen verfügen (Linux: er muss über die CAP_FOWNERentsprechende Berechtigung verfügen).

Wenn der aufrufende Prozess nicht privilegiert ist (Linux: verfügt nicht über die CAP_FSETIDBerechtigung) und die Gruppe der Datei nicht mit der effektiven Gruppen-ID des Prozesses oder einer seiner zusätzlichen Gruppen-IDs übereinstimmt, S_ISGIDwird das Bit deaktiviert, dies führt jedoch nicht zur Rückgabe eines Fehlers.

Also ja, ein als Root ausgeführter Prozess kann die Berechtigungen jeder Datei ändern, sofern er die CAP_FOWNERBerechtigung nicht gelöscht hat.


Interessant ist auch chown; die Manpage für chown(2)sagt:

Nur ein privilegierter Prozess (Linux: einer mit der CAP_CHOWNBerechtigung) kann den Besitzer einer Datei ändern. Der Besitzer einer Datei kann die Gruppe der Datei in jede beliebige Gruppe ändern, deren Mitglied er ist. Ein privilegierter Prozess (Linux: mit CAP_CHOWN) kann die Gruppe beliebig ändern.

verwandte Informationen