In der Welt der Linux-Systemadministration ist der Befehl chmod
allgegenwärtig. Er ist das Werkzeug der Wahl, wenn es darum geht, Dateiberechtigungen festzulegen. Doch chmod
, obwohl mächtig, hat seine Grenzen. Was ist, wenn Sie einer bestimmten Person Zugriff auf eine Datei gewähren müssen, ohne die Berechtigungen für die Gruppe zu ändern? Hier kommen Access Control Lists (ACLs) ins Spiel. ACLs bieten eine viel feinere und flexiblere Möglichkeit, Dateiberechtigungen in Linux zu verwalten.
Warum chmod manchmal nicht ausreicht
Bevor wir uns in die Details von ACLs stürzen, wollen wir verstehen, warum chmod
allein nicht immer die beste Lösung ist. Das traditionelle Berechtigungsmodell von Linux basiert auf drei Kategorien: dem Eigentümer der Datei, der Gruppe, der die Datei gehört, und allen anderen Benutzern. Für jede dieser Kategorien können Sie Lese-, Schreib- und Ausführungsberechtigungen festlegen.
Nehmen wir an, Sie haben eine Datei projekt_geheim.txt
. Der Eigentümer ist alice
und die Gruppe ist entwickler
. Sie möchten, dass bob
(der *nicht* Mitglied der Gruppe entwickler
ist) die Datei lesen kann, ohne aber die Berechtigungen für alle anderen Benutzer zu öffnen. Mit chmod
könnten Sie die Datei für alle lesbar machen, aber das ist ein Sicherheitsrisiko. Sie könnten auch bob
zur Gruppe entwickler
hinzufügen, aber das könnte ihm Zugriff auf andere sensible Dateien geben, die er nicht sehen sollte.
Hier erweisen sich ACLs als unschätzbar wertvoll. Sie ermöglichen es Ihnen, spezifische Berechtigungen für einzelne Benutzer oder Gruppen festzulegen, unabhängig von den standardmäßigen Eigentümer- und Gruppenberechtigungen.
Was sind Access Control Lists (ACLs)?
Eine ACL ist im Wesentlichen eine Liste von Zugriffsregeln, die einer Datei oder einem Verzeichnis zugeordnet sind. Jede Regel in der Liste definiert die Berechtigungen für einen bestimmten Benutzer oder eine bestimmte Gruppe. Diese Regeln werden *zusätzlich* zu den standardmäßigen Eigentümer- und Gruppenberechtigungen angewendet.
Denken Sie an ACLs als eine Art „Ergänzung” zu den traditionellen Dateiberechtigungen, die es Ihnen ermöglicht, das Berechtigungsmodell zu verfeinern und anzupassen.
ACLs verwenden: Die Befehle getfacl und setfacl
Die beiden wichtigsten Befehle für die Arbeit mit ACLs in Linux sind getfacl
und setfacl
.
getfacl: Anzeigen von ACLs
Der Befehl getfacl
dient dazu, die ACLs einer Datei oder eines Verzeichnisses anzuzeigen. Die Syntax ist einfach:
getfacl dateiname
Wenn Sie beispielsweise die ACLs der Datei projekt_geheim.txt
anzeigen möchten, würden Sie Folgendes eingeben:
getfacl projekt_geheim.txt
Die Ausgabe könnte so aussehen:
# file: projekt_geheim.txt
# owner: alice
# group: entwickler
user::rw-
user:bob:r--
group::r--
mask::r--
other::---
Lassen Sie uns die Ausgabe Zeile für Zeile durchgehen:
# file: projekt_geheim.txt
: Zeigt den Namen der Datei an.# owner: alice
: Zeigt den Eigentümer der Datei an.# group: entwickler
: Zeigt die Gruppe an, der die Datei gehört.user::rw-
: Definiert die Berechtigungen für den Eigentümer (alice
). In diesem Fall hat sie Lese- und Schreibrechte (rw-
).user:bob:r--
: Definiert die Berechtigungen für den Benutzerbob
. Er hat nur Leserechte (r--
).group::r--
: Definiert die Berechtigungen für die Gruppeentwickler
. Sie haben nur Leserechte (r--
).mask::r--
: Die Maske beschränkt die maximal zulässigen Berechtigungen für benannte Benutzer und Gruppen (außer dem Eigentümer). In diesem Fall beschränkt die Maske die Schreibberechtigung, die der Eigentümer ursprünglich hatte.other::---
: Definiert die Berechtigungen für alle anderen Benutzer, die weder der Eigentümer noch Mitglieder der Gruppe sind. Sie haben keine Berechtigungen (---
).
setfacl: Setzen von ACLs
Der Befehl setfacl
wird verwendet, um ACLs zu setzen oder zu ändern. Die Syntax ist etwas komplexer, da Sie angeben müssen, für welchen Benutzer oder welche Gruppe Sie die Berechtigungen ändern möchten und welche Berechtigungen Sie setzen möchten.
Die grundlegende Syntax ist:
setfacl -m [u|g]:benutzername|gruppenname:[rwx] dateiname
Wobei:
-m
: Steht für „modify” (ändern).u
: Gibt an, dass Sie die Berechtigungen für einen Benutzer ändern.g
: Gibt an, dass Sie die Berechtigungen für eine Gruppe ändern.benutzername|gruppenname
: Der Name des Benutzers oder der Gruppe, für den/die Sie die Berechtigungen ändern.rwx
: Die gewünschten Berechtigungen (lesen, schreiben, ausführen). Sie können eine beliebige Kombination ausr
,w
undx
verwenden oder-
für keine Berechtigung.dateiname
: Der Name der Datei oder des Verzeichnisses, für das Sie die ACL ändern.
Um bob
Lesezugriff auf projekt_geheim.txt
zu gewähren, würden Sie Folgendes eingeben:
sudo setfacl -m u:bob:r-- projekt_geheim.txt
Um bob
Lese- und Schreibzugriff zu gewähren, würden Sie Folgendes eingeben:
sudo setfacl -m u:bob:rw- projekt_geheim.txt
Um die Berechtigungen für die Gruppe webserver
auf Lese- und Ausführungszugriff zu setzen, würden Sie Folgendes eingeben:
sudo setfacl -m g:webserver:r-x projekt_geheim.txt
ACLs entfernen
Sie können ACLs auch entfernen. Um eine bestimmte ACL-Regel zu entfernen, verwenden Sie die Option -x
:
sudo setfacl -x u:bob projekt_geheim.txt
Dies entfernt die ACL-Regel für den Benutzer bob
.
Um *alle* ACLs einer Datei oder eines Verzeichnisses zu entfernen, verwenden Sie die Option -b
(remove all):
sudo setfacl -b projekt_geheim.txt
Die Maske: Ein wichtiger Aspekt
Wie bereits erwähnt, spielt die Maske eine wichtige Rolle bei der Verwaltung von ACLs. Die Maske beschränkt die maximal zulässigen Berechtigungen für benannte Benutzer und Gruppen (mit Ausnahme des Eigentümers). Wenn Sie beispielsweise einer Gruppe Schreibzugriff gewähren, die Maske aber Schreibzugriff nicht zulässt, erhält die Gruppe dennoch keinen Schreibzugriff. Sie müssen die Maske explizit anpassen, um die gewünschten Berechtigungen zu erhalten.
Um die Maske zu ändern, verwenden Sie den Befehl setfacl
mit der Option -m m::[rwx]
:
sudo setfacl -m m::rw- projekt_geheim.txt
Dadurch wird die Maske so eingestellt, dass Lese- und Schreibzugriff zulässig sind.
Standard-ACLs für Verzeichnisse
ACLs können auch für Verzeichnisse verwendet werden. Ein besonders nützliches Feature ist die Möglichkeit, Standard-ACLs für Verzeichnisse zu setzen. Eine Standard-ACL wird automatisch auf alle neuen Dateien und Unterverzeichnisse angewendet, die in diesem Verzeichnis erstellt werden. Dies ist ideal, um sicherzustellen, dass neue Dateien in einem bestimmten Verzeichnis automatisch die richtigen Berechtigungen haben.
Um eine Standard-ACL zu setzen, verwenden Sie die Option -d
(default):
sudo setfacl -d -m u:bob:rw- mein_verzeichnis
Dadurch wird sichergestellt, dass alle neuen Dateien, die bob
in mein_verzeichnis
erstellt, automatisch Lese- und Schreibzugriff für ihn haben.
ACLs und Dateimanager
Viele grafische Dateimanager in Linux-Desktopumgebungen bieten auch Unterstützung für ACLs. Sie können ACLs oft direkt über die Benutzeroberfläche des Dateimanagers anzeigen und ändern, was die Verwaltung von Berechtigungen für Benutzer erleichtert, die sich mit der Kommandozeile weniger wohl fühlen.
Fazit
ACLs sind ein mächtiges Werkzeug, um Dateiberechtigungen in Linux feiner zu steuern als mit chmod
allein. Sie ermöglichen es Ihnen, spezifische Berechtigungen für einzelne Benutzer und Gruppen festzulegen, Standardberechtigungen für neue Dateien in Verzeichnissen zu definieren und die Sicherheit Ihres Systems insgesamt zu verbessern. Obwohl die Syntax von setfacl
anfangs etwas einschüchternd wirken mag, lohnt es sich, die Grundlagen zu verstehen, um die volle Kontrolle über Ihre Dateiberechtigungen zu erlangen. Mit ACLs können Sie Dateiberechtigungen wie ein Profi verwalten!