Verwendung von Dateisystem-ACLs (Access Control Lists) unter Linux


Linux
2024-01-19T17:00:13Z

Wichtigste Erkenntnisse

  • Um alle ACL-Einträge für eine Datei anzuzeigen, verwenden Sie den Befehl "getfacl filename", wobei Sie "filename" durch den Namen Ihrer Datei ersetzen.
  • Um einen neuen ACL-Eintrag für eine Datei zu setzen, verwenden Sie den Befehl 'setfacl -m u:username:rwx filename'
  • Um einen Standard ACL-Eintrag für ein Verzeichnis zu setzen, verwenden Sie den Befehl 'setfacl -d -m u:username:rwx dirname'

Sind Sie für einen gemeinsam genutzten Dateiserver verantwortlich, auf den mehrere Personengruppen mit unterschiedlichen Zugriffsrechten zugreifen müssen? In diesem Tutorial werden wir die Grundlagen von ACLs besprechen und sie in einem fiktiven Büroszenario anwenden.

Was sind ACLs?

Zugriffskontrolllisten (Access Control Lists, ACLs) ergänzen das Standardmodell für Dateisystemberechtigungen unter Linux und Unix. Kurz gesagt ermöglichen sie es Ihnen, über das Konzept "Benutzer/Gruppe/Andere" hinauszugehen und zusätzliche Berechtigungssätze für Dateien und Verzeichnisse zu erstellen. Sie ermöglichen auch so nette Dinge wie die automatische Anwendung von Berechtigungen auf neue Dateien und Verzeichnisse. Doch zunächst wollen wir uns mit einigen grundlegenden Konzepten für Linux-Dateisystemberechtigungen befassen, mit denen ACLs zusammenarbeiten.

Standard-Dateisystem-Berechtigungen

Um Dateisystemberechtigungen unter Linux zu verstehen, müssen Sie zunächst wissen, dass Linux ein "Mehrbenutzer-Betriebssystem" ist. Das bedeutet, dass es mehrere Benutzerkonten gibt, die es im Wesentlichen mehreren Personen erlauben, sich beim System anzumelden, wobei jede Person ihre eigenen Freiheiten und Einschränkungen hat.

Einige Benutzerkonten sind "Systemkonten", die nicht von einer Person, sondern beispielsweise von einer Software verwendet werden. Prozesse laufen unter diesen speziellen Konten, um ihnen den Zugriff auf verschiedene Teile des Betriebssystems zu ermöglichen oder einzuschränken, genau wie bei einem normalen Benutzerkonto.

Nachdem wir nun die Benutzer verstanden haben, kann ich Ihnen die "Gruppen" vorstellen Gruppen sind ziemlich einfach zu verstehen - sie sind einfach Sammlungen von bestehenden Benutzern. Um vielen Benutzern gleichzeitig die Berechtigung für eine Ressource zu erteilen, können Sie eine neue Gruppe erstellen und bestimmten Benutzern die Mitgliedschaft in dieser Gruppe gewähren. Dann weisen Sie die Berechtigung für die Ressource der Gruppe zu, anstatt jedem einzelnen Benutzer. Das macht die Verwaltung einfacher und rationeller.

OK, lassen Sie uns über Dateien und Verzeichnisse sprechen. Das sind die Ressourcen, auf die wir Zugriff gewähren und schützen wollen.

Die meisten Linux-Dateisysteme (z. B. EXT4, XFS und ZFS) ermöglichen es Ihnen, drei primäre Berechtigungen auf Dateien und Verzeichnisse anzuwenden. Diese Berechtigungen sind:

  • Lesen: Erlaubt das Lesen einer Datei (oder das Auflisten von Inhalten in einem Verzeichnis)
  • Schreiben: Erlaubt das Schreiben oder Ändern einer Datei (oder das Erstellen von Dateien und Unterverzeichnissen innerhalb eines Verzeichnisses)
  • Ausführen: Erlaubt die Ausführung eines Programms oder Skripts (oder den Eintritt in ein Verzeichnis, z. B. mit dem cd-Befehl)

Alle Dateien und Verzeichnisse in einem Dateisystem haben Standardberechtigungen, die drei verschiedenen Entitäten zugewiesen sind: dem Benutzer, dem sie gehören, dem Gruppenbesitzer und allen anderen Benutzern. Jeder Entität kann eine Kombination von Lese-, Schreib- und Ausführungsrechten (r/w/x) zugewiesen werden. Sie können den Befehl ls verwenden, um alle diese Informationen einzusehen:

ls -l mysupersecretfile.txt

A terminal window showing standard file permissions of a sample file on Linux.

  1. [U]ser (Eigentümer)-Berechtigungen
  2. [G]roupenberechtigungen
  3. Alle [O]ther-Benutzer-Berechtigungen
  4. Besitzender Nutzername
  5. Eigener Gruppenname

Standardmäßig wird jeder neu angelegte Benutzer auch einer neuen primären Gruppe mit demselben Namen zugewiesen. Im obigen Beispiel ist #4 der Benutzername "user" und #5 der Gruppenname "user". Behalten Sie dies im Hinterkopf, wenn Sie sich diese Ausgabe ansehen, da sie zunächst verwirrend sein kann.

Welche Dateien und Verzeichnisse ein Benutzer ändern darf, hängt von mehreren Faktoren ab, unter anderem davon, ob der Benutzer "Eigentümer" der Datei ist oder ob er über eine Gruppenmitgliedschaft die entsprechenden Rechte hat. Beachten Sie, dass der Root-Benutzer jede Datei auf dem System ändern kann, unabhängig vom Eigentümer.

Dieser Ansatz für Dateisystemberechtigungen eignet sich gut für die meisten Heim- und Einzelplatzinstallationen. Wenn Sie mit Systemen arbeiten, in denen mehrere Benutzer auf dieselbe Dateihierarchie zugreifen, und Sie bestimmten Personen Zugriff auf bestimmte Bereiche gewähren (und sie von anderen ausschließen) müssen, werden Sie verstehen, dass die Standardmethode "1 Eigentümer, 1 Gruppe" nicht ausreicht.

Wie ACLs das Standard-Berechtigungsmodell erweitern

Zugriffskontrolllisten bieten die Möglichkeit, Berechtigungseinträge für mehrere Benutzer und Gruppen für Dateien und Verzeichnisse zu vergeben. ACLs sind beispielsweise eine gute Option, wenn Sie einer Datei, die bereits bestimmte Eigentümer- und Gruppeneigentümerrechte hat, eine bestimmte Benutzerberechtigung zuweisen möchten.

ACLs für Verzeichnisse folgen dem Standardmodell der Rechte r/w/x, indem sie Ihnen die Möglichkeit geben, das Verzeichnis zu(r)lesen (Inhalte aufzulisten, aber nicht zu betreten),(w)rite (neue Dateien und Verzeichnisse innerhalb des Verzeichnisses zu erstellen) und e(x)ecute (das Verzeichnis zu betreten).

Wie wäre es mit einem Beispiel? Nehmen wir an, Sie haben eine Datei, report.pdf, die dem Benutzer peter gehört und für die er Lese- und Schreibrechte besitzt. Zusätzlich haben Sie der Buchhaltungsgruppe das Gruppenrecht für diese Datei erteilt. Nun haben Sie eine Anfrage erhalten, dem Benutzer lumberg Lesezugriff zu gewähren.

Gehen wir davon aus, dass Sie das Standardberechtigungsmodell verwenden. Hier sind ein paar (vergebliche) Ideen, wie Sie diese Anforderung erfüllen können:

  • Sie können lumberg nicht die Mitgliedschaft in der Buchhaltungsgruppe gewähren (das würde ihm Zugriff auf alle möglichen anderen Dateien geben, die er nicht sehen sollte).
  • Sie wollen auch nicht, wie es sich für eine gute Verwaltungspraxis gehört, eine ganz neue Gruppe mit Benutzern aus der Buchhaltungsgruppe plus lumberg nur für diese Datei erstellen.
  • Vor allem wollen Sie aus offensichtlichen Sicherheitsgründen nicht allen anderen Benutzern die Rechte freigeben.

ls -l bericht.pdf

A terminal window showing file listing output on Debian.

Was ist nun zu tun? Nun, Sie könnten einfach eine frühe Mittagspause einlegen. Aber lassen Sie uns stattdessen ACLs verwenden!

Prüfen Sie, ob Ihr System ACLs unterstützt

Die meisten modernen Linux-Distributionen unterstützen ACLs bereits von Haus aus. Die meisten gängigen Dateisysteme unterstützen sie, ihre Standard-Einhängeoptionen enthalten ACL-Unterstützung und die Standardinstallationen sollten die entsprechenden Pakete enthalten.

Um dies bei ext2/3/4-Dateisystemen zu überprüfen, verwenden Sie tune2fs. Wenn Sie zum Beispiel /dev/sda1 (das ein ext4-Dateisystem enthält) überprüfen wollen:

sudo tune2fs -l /dev/sda1 | grep "Default mount options"

A terminal window showing output of tune2fs command, and acl default mount option circled.

Als Referenz finden Sie hier eine Liste der verschiedenen Dateisysteme, die ACLs unterstützen, gruppiert nach Plattformen, geschrieben von IBM.

Der Befehl getfacl

Der Befehl getfacl zeigt Zugriffskontrolllisten für Dateien und Verzeichnisse an (holt sie). Wenn Sie getfacl auf unsere Berichtsdatei von oben anwenden, sehen Sie

getfacl report.pdf

A terminal window showing getfacl command and its output on a file.

Im Moment zeigt die Ausgabe die minimale ACL der Datei an. Die minimale ACL umfasst die Standardberechtigungen für den Eigentümer, die besitzende Gruppe und alle anderen Benutzer.

Wenn es einen erweiterten ACL-Eintrag für einen anderen Benutzer, nennen wir ihn Michael, gäbe, würden wir dies sehen:

getfacl-bericht.pdf

A terminal window showing getfacl command and its output.

Zusätzlich zu den minimalen ACLs haben wir nun einen erweiterten ACL-Eintrag für den Benutzer michael (Lese- und Schreibrechte). Wenn Sie die Datei erneut mit erweiterten ACLs auflisten, sehen Sie ein Pluszeichen ( ) rechts neben den Berechtigungen für "andere Benutzer", das anzeigt, dass erweiterte ACL-Einträge existieren:

ls -l report.pdf

A terminal window showing ls command output with ACL entry flag.

Der Befehl setfacl

Mit dem Befehl setfacl werden ACLs für Dateien und Verzeichnisse festgelegt. Er fügt Benutzer- und Gruppeneinträge hinzu und entfernt sie, ändert Berechtigungen und andere Aufgaben wie das Setzen von Standard-ACLs für Verzeichnisse und die Arbeit mit Masken. Wir verwenden es, um die obige Anforderung zu erfüllen, indem wir dem Benutzer lumberg Lesezugriff auf report.pdf gewähren.

Um den neuen Benutzer-ACL-Eintrag hinzuzufügen, verwenden Sie setfacl mit dieser Syntax (die ich weiter unten erläutern werde):

sudo setfacl -m u:lumberg:r report.pdf

A terminal window showing the setfacl command modifying a file's ACL entry.

  • -m bedeutet, dass wir einen ACL-Eintrag für die Datei ändern
  • u: bedeutet, dass wir einen Benutzer hinzufügen, gefolgt von einem Doppelpunkt (:) als Trennzeichen (ein g: fügt eine Gruppe hinzu und o: fügt alle anderen Benutzerrechte hinzu)
  • lumberg: ist der Benutzername, den wir hinzufügen, gefolgt von einem weiteren Doppelpunkt als Trennzeichen
  • r bedeutet, dass wir dem Eintrag (nur) Leserechte hinzufügen
  • report.pdf ist der Name der Datei, zu der wir den ACL-Eintrag hinzufügen

Nun, da dies eingestellt ist, können wir mit getfacl noch einmal einen Blick darauf werfen:

getfacl Bericht.pdf

A terminal window showing output of getfacl command on our sample file.

Haben Sie unseren neuen Eintrag entdeckt?

Standard-ACLs

Standard-ACLs gelten nur für Verzeichnisse (Ordner). Wenn Sie eine Standard-ACL für ein Verzeichnis festlegen, wird der von Ihnen angegebene Eintrag automatisch auf alle neuen Dateien und Verzeichnisse in diesem Verzeichnis angewendet, unabhängig davon, wer sie erstellt. Dies ist eine Art rekursiver Ansatz, der sehr nützlich ist, wenn Sie Ihre Dateisystemhierarchie planen.

Stellen wir sicher, dass Lumberg in der Lage ist, neue Dateien zu lesen und neue Verzeichnisse einzugeben, die unter Accounting erstellt werden. Wir werden die Option -d verwenden, um eine Standard-ACL hinzuzufügen:

sudo setfacl -d -m u:lumberg:rX Buchhaltung

A terminal window showing setfacl command to set permissions, then getfacl to show them.

Ein großes X wendet die Ausführungsberechtigung nur auf neue Unterverzeichnisse an, nicht auf Dateien.

Zugriffskontrolllisten sind ideal, wenn Sie Ihre Dateisystemberechtigungen auf die nächste Stufe heben wollen. Mit normalen Benutzer-/Gruppen-/Sonstige-Berechtigungen können Sie viel erreichen, aber es wird wahrscheinlich ein Punkt in Ihrem Leben kommen, an dem die Verwendung von ACLs viel sinnvoller ist.