Beim Betrieb von Linux denken die Benutzer oft nicht darüber nach, wem eine Datei gehört. Wenn es jedoch darum geht, einen Server zu betreiben, ändert sich die Situation. Um die Sicherheit zu erhöhen, erhält der Server seinen eigenen Benutzer. Es ist nicht ungewöhnlich, dass Server dieselbe Gruppe verwenden, z. B. www-data
. Als Nächstes wollen wir uns ansehen, wie diese Funktion mit Dateien und Verzeichnissen funktioniert. Besonderes Augenmerk werden wir auf symbolische Links legen, da diese bei unsicheren Einstellungen Probleme verursachen können.
Der Standard für Dateiberechtigungen kam von Unix zu Linux. So hat jedes Objekt einen Benutzer
, die Gruppe
beschreibt darüber hinaus die Rechteanderer
Benutzer(other
). Die Berechtigungen bestehen aus drei Elementen: Lesen, Schreiben, Ausführen. Der Befehl umask
wird verwendet, um die Berechtigungen zu ändern, aber die Befehle chown
werden verwendet, um den Besitzer und die Gruppe direkt zu ändern. Der Befehl ls
kann verwendet werden, um die aktuellen Berechtigungen anzuzeigen.
Allgemeine Ansicht des Befehls chgrp
:
$ chgrp [options] new_group file_name
Liste der üblichen Optionen für den Befehl chgrp
:
-h
- arbeitet direkt mit den symbolischen Links selbst;--dereference
- arbeitet mit Dateien, nicht mit symbolischen Links selbst. Wird standardmäßig verwendet;-R
- rekursive Verarbeitung eines Verzeichnisses mit seinem gesamten Inhalt;-H
- folgt dem symbolischen Link und ändert die Attribute der Datei/des Verzeichnisses. Wird in Verbindung mit dem Parameter -R
verwendet;-L
- folgt dem symbolischen Link und setzt die rekursive Verarbeitung fort. Wird in Verbindung mit dem Parameter -R
verwendet;-P
- wenn ein symbolischer Link gefunden wird, wird nur dieser verarbeitet. Wird zusammen mit dem Parameter -R
verwendet und ist der Standardwert;--reference=file_name
- verwendet die Beispielgruppe;-c
- gibt nur Änderungen bei der Verarbeitung aus;-v
- Ausgabe von Informationen über jedes verarbeitete Objekt.Das einfachste Beispiel für die Verwendung des Befehls chgrp
. Das folgende Beispiel ändert das gesamte www-data-Objekt
für die Datei
im aktuellen Ordner:
$ sudo chgrp www-data file.txt
Und dieses Beispiel ändert die Gruppe www-data
für den Ordner folder
:
$ sudo chgrp www-data folder
Der Befehl funktioniert auf eine sehr vorhersehbare Weise, indem er die Gruppe ändert. Die Objekte im Ordner bleiben unverändert. Wenn symbolische Links behandelt werden, bleiben ihre Attribute unverändert, aber das Objekt erhält eine neue Gruppe. Dieses Verhalten ähnelt dem Umgang mit dem Parameter --dereference
.
Wenn diese Befehle beispielsweise auf symbolische Links angewendet werden, funktionieren sie wie im Screenshot gezeigt:
$ sudo chgrp www-data sym_file.txt
Schauen wir uns an, wie der Parameter -h
, der die Attribute eines symbolischen Links ändert, funktionieren würde:
$ sudo chgrp -h www-data sym_file
Die Gruppe wurde nicht nur auf das Verzeichnis, sondern auch auf alle darin enthaltenen Dateien gesetzt. Beachten Sie, dass sich das Verhalten geändert hat: Bei der Verarbeitung eines symbolischen Links werden nun die Attribute für den Link selbst gesetzt, nicht für das Objekt.
Um den Unterschied zwischen den Parametern -H
und -L
zu verdeutlichen, sehen wir uns ein paar weitere Beispiele an. Erinnern Sie sich, dass sie zusammen mit -R
verwendet werden müssen :
$ sudo chgrp -RH www-data folder
Mit -H
hat sich das Verhalten bei der Verarbeitung von symbolischen Links geändert, sie werden nun so behandelt, als ob die Funktionen separat ausgeführt würden. Die Attribute der Verweise ändern sich nicht, wohl aber die Attribute der Objekte selbst, und die rekursive Verarbeitung stoppt, wenn Sie in ein Verzeichnis wechseln.
$ sudo chgrp -RL www-data folder
Die rekursive Verarbeitung endet, wenn Sie in ein Verzeichnis wechseln. Sie führt nur eine Funktion aus - sie ändert die Gruppe der Dateien und Verzeichnisse.
Bei der Verarbeitung symbolischer Links sollten Sie äußerst vorsichtig sein, um das System nicht zu beschädigen.