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 chown
ist jedoch nur für zulässig root
. Das Ändern des Gruppenbesitzes mit chgrp
ist für zulässig root
und 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 chown
und chgrp
, und darüber hinaus kann der Eigentümer , chgrp
solange 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 chmod
Befehl 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_FOWNER
entsprechende Berechtigung verfügen).Wenn der aufrufende Prozess nicht privilegiert ist (Linux: verfügt nicht über die
CAP_FSETID
Berechtigung) und die Gruppe der Datei nicht mit der effektiven Gruppen-ID des Prozesses oder einer seiner zusätzlichen Gruppen-IDs übereinstimmt,S_ISGID
wird 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_FOWNER
Berechtigung nicht gelöscht hat.
Interessant ist auch chown
; die Manpage für chown(2)
sagt:
Nur ein privilegierter Prozess (Linux: einer mit der
CAP_CHOWN
Berechtigung) 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: mitCAP_CHOWN
) kann die Gruppe beliebig ändern.