Website-Suche

Festlegen von Zugriffssteuerungslisten (ACLs) und Festplattenkontingenten für Benutzer und Gruppen


Access Control Lists (auch bekannt als ACLs) sind eine Funktion des Linux-Kernels, die es ermöglicht, feinere Zugriffsrechte für Dateien und Verzeichnisse zu definieren, als sie durch reguläre ugo/rwx-Berechtigungen angegeben sind.

Zum Beispiel erlauben die Standardberechtigungen ugo/rwx nicht, unterschiedliche Berechtigungen für verschiedene einzelne Benutzer oder Gruppen festzulegen. Mit ACLs ist dies relativ einfach zu bewerkstelligen, wie wir in diesem Artikel sehen werden.

Überprüfen der Dateisystemkompatibilität mit ACLs

Um sicherzustellen, dass Ihre Dateisysteme derzeit ACLs unterstützen, sollten Sie überprüfen, ob sie mit der Option acl gemountet wurden. Um dies zu tun, werden wir tune2fs für ext2/3/4-Dateisysteme verwenden, wie unten angegeben. Ersetzen Sie /dev/sda1 durch das Gerät oder Dateisystem, das Sie überprüfen möchten:

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

Hinweis: Mit XFS werden Zugriffskontrolllisten standardmäßig unterstützt.

Im folgenden ext4-Dateisystem können wir sehen, dass ACLs für /dev/xvda2 aktiviert wurden:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"

Wenn der obige Befehl nicht anzeigt, dass das Dateisystem mit Unterstützung für ACLs eingehängt wurde, liegt dies höchstwahrscheinlich daran, dass die Option noacl in /etc/fstab vorhanden ist.

In diesem Fall entfernen Sie es, hängen das Dateisystem aus und mounten es dann erneut, oder starten Sie einfach Ihr System neu, nachdem Sie die Änderungen in /etc/fstab gespeichert haben.

Einführung von ACLs in Linux

Um zu veranschaulichen, wie ACLs funktionieren, werden wir eine Gruppe namens developers verwenden und die Benutzer walterwhite und saulgoodman (ja, ich bin ein Breaking Bad-Fan!) hinzufügen.:

# groupadd developers
useradd walterwhite
useradd saulgoodman
usermod -a -G developers walterwhite
usermod -a -G developers saulgoodman

Bevor wir fortfahren, überprüfen wir, ob beide Benutzer der Entwicklergruppe hinzugefügt wurden:

# id walterwhite
id saulgoodman

Erstellen wir nun ein Verzeichnis mit dem Namen test in /mnt und eine Datei mit dem Namen acl.txt darin (/mnt/test/acl.txt).

Dann setzen wir den Gruppenbesitzer auf developers und ändern seine standardmäßigen ugo/rwx-Berechtigungen rekursiv auf 770 (wodurch Lese-, Schreib- und Ausführungsberechtigungen gewährt werden, die sowohl dem Eigentümer als auch dem Gruppenbesitzer der Datei gewährt werden):

# mkdir /mnt/test
touch /mnt/test/acl.txt
chgrp -R developers /mnt/test
chmod -R 770 /mnt/test

Wie erwartet können Sie in /mnt/test/acl.txt als walterwhite oder saulgoodman schreiben:

# su - walterwhite
echo "My name is Walter White" > /mnt/test/acl.txt
exit
su - saulgoodman
echo "My name is Saul Goodman" >> /mnt/test/acl.txt
exit

So weit so gut. Wir werden jedoch bald ein Problem sehen, wenn wir Schreibzugriff auf /mnt/test/acl.txt für einen anderen Benutzer gewähren müssen, der nicht in der Entwicklergruppe ist.

Standardmäßige ugo/rwx-Berechtigungen würden erfordern, dass der neue Benutzer der Entwicklergruppe hinzugefügt wird, aber das würde ihm/ihr die gleichen Berechtigungen für alle Objekte geben, die der Gruppe gehören. Genau hier kommen ACLs ins Spiel.

Festlegen von ACLs unter Linux

Es gibt zwei Arten von ACLs: Zugriffs-ACLs (die auf eine Datei oder ein Verzeichnis angewendet werden) und Standard-ACLs (optional), die nur auf ein Verzeichnis angewendet werden können.

Wenn Dateien in einem Verzeichnis, in dem eine Standard-ACL festgelegt wurde, keine eigene ACL haben, erben sie die Standard-ACL ihres übergeordneten Verzeichnisses.

Geben wir dem Benutzer gacanepa Lese- und Schreibzugriff auf /mnt/test/acl.txt. Bevor wir das tun, werfen wir einen Blick auf die aktuellen ACL-Einstellungen in diesem Verzeichnis mit:

# getfacl /mnt/test/acl.txt

Ändern Sie dann die ACLs in der Datei, verwenden Sie u: gefolgt vom Benutzernamen und :rw, um Lese-/Schreibberechtigungen anzugeben:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

Führen Sie getfacl erneut für die Datei aus, um sie zu vergleichen. Die folgende Abbildung zeigt das "Vorher" und "Nachher":

# getfacl /mnt/test/acl.txt

Als nächstes müssen wir anderen Ausführungsberechtigungen für das Verzeichnis /mnt/test erteilen:


chmod +x /mnt/test

Beachten Sie, dass ein regulärer Benutzer Ausführungsberechtigungen für dieses Verzeichnis benötigt, um auf den Inhalt eines Verzeichnisses zugreifen zu können.

Der Benutzer gacanepa sollte nun in der Lage sein, in die Datei zu schreiben. Wechseln Sie zu diesem Benutzerkonto und führen Sie zur Bestätigung den folgenden Befehl aus:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Um eine Standard-ACL auf ein Verzeichnis festzulegen (dessen Inhalt geerbt wird, sofern nicht anders überschrieben), fügen Sie d: vor die Regel und geben Sie ein Verzeichnis anstelle eines Dateinamens an:

# setfacl -m d:o:r /mnt/test
getfacl /mnt/test/

Die obige ACL ermöglicht Benutzern, die nicht zur Besitzergruppe gehören, Lesezugriff auf den zukünftigen Inhalt des Verzeichnisses /mnt/test. Beachten Sie den Unterschied in der Ausgabe von getfacl /mnt/test vor und nach der Änderung:

Um eine bestimmte ACL zu entfernen, ersetzen Sie -m in den obigen Befehlen durch -x. Zum Beispiel

# setfacl -x d:o /mnt/test

Alternativ können Sie auch die Option -b verwenden, um ALLE ACLs in einem Schritt zu entfernen:

# setfacl -b /mnt/test

Weitere Informationen und Beispiele zur Verwendung von ACLs finden Sie in Kapitel 10, Abschnitt 2 des openSUSE Security Guide (auch zum kostenlosen Download im PDF-Format verfügbar).

Festlegen von Linux-Festplattenkontingenten für Benutzer und Dateisysteme

Speicherplatz ist eine weitere Ressource, die sorgfältig genutzt und überwacht werden muss. Zu diesem Zweck können Quotas auf Dateisystembasis festgelegt werden, entweder für einzelne Benutzer oder für Gruppen.

Auf diese Weise wird die für einen bestimmten Benutzer oder eine bestimmte Gruppe zulässige Festplattennutzung begrenzt, und Sie können sicher sein, dass Ihre Festplatten nicht von einem unvorsichtigen (oder böswilligen) Benutzer bis zur Kapazitätsgrenze gefüllt werden.

Das erste, was Sie tun müssen, um Quotas auf einem Dateisystem zu aktivieren, ist, es mit den Optionen usrquota oder grpquota (für Benutzer- bzw. Gruppenquoten) in /etc/fstab zu mounten.

Lassen Sie uns beispielsweise benutzerbasierte Kontingente für /dev/vg00/vol_backups und gruppenbasierte Kontingente für /dev/vg00/vol_projects aktivieren.

Beachten Sie, dass die UUID zur Identifizierung jedes Dateisystems verwendet wird.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Hängen Sie beide Dateisysteme aus, und hängen Sie sie erneut ein:

# umount /home/projects
umount /home/backups
mount -o remount /home/projects
mount -o remount /home/backups 

Überprüfen Sie dann, ob die Optionen usrquota und grpquota in der Ausgabe von mount vorhanden sind (siehe unten hervorgehoben):

# mount | grep vg00

Führen Sie abschließend die folgenden Befehle aus, um Kontingente zu initialisieren und zu aktivieren:

# quotacheck -avugc
quotaon -vu /home/backups
quotaon -vg /home/projects

Lassen Sie uns nun dem Benutzernamen und der Gruppe, die wir zuvor erwähnt haben, Kontingente zuweisen. Sie können Kontingente später mit quotaoff deaktivieren.

Festlegen von Linux-Festplattenkontingenten

Beginnen wir mit dem Festlegen einer ACL auf /home/backups für den Benutzer gacanepa, die ihm Lese-, Schreib- und Ausführungsberechtigungen für dieses Verzeichnis gibt:

# setfacl -m u:gacanepa:rwx /home/backups/

Dann mit,

# edquota -u gacanepa

Wir werden das weiche Limit=900 und das harte Limit=1000 Blöcke (1024 Bytes/Block * 1000 Blöcke=1024000 Bytes=1 MB) für die Speicherplatznutzung festlegen.

Wir können auch ein Limit von 20 und 25 als weiche und harte Limits für die Anzahl der Dateien festlegen, die dieser Benutzer erstellen kann.

Der obige Befehl startet den Texteditor ($EDITOR) mit einer temporären Datei, in der wir die zuvor erwähnten Limits festlegen können:

Diese Einstellungen führen dazu, dass dem Benutzer gacanepa eine Warnung angezeigt wird, wenn er entweder die Grenzwerte von 900 Blöcken oder 20 Inode für einen Standard-Kulanzzeitraum von 7 Tagen erreicht hat.

Wenn die Quotenüberschreitung bis dahin nicht behoben wurde (z. B. durch Entfernen von Dateien), wird das weiche Limit zum harten Limit und dieser Benutzer wird daran gehindert, mehr Speicherplatz zu verwenden oder mehr Dateien zu erstellen.

Lassen Sie uns zum Testen den Benutzer gacanepa versuchen, eine leere 2-MB-Datei mit dem Namen test1 in /home/backups zu erstellen:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
ls -lh /home/backups/test1

Wie Sie sehen können, schlägt die Schreibvorgangsdatei fehl, da das Festplattenkontingent überschritten wurde. Da nur die ersten 1000 KB auf die Festplatte geschrieben werden, ist das Ergebnis in diesem Fall höchstwahrscheinlich eine beschädigte Datei.

Auf ähnliche Weise können Sie eine ACL für die Entwicklergruppen erstellen, um Mitgliedern dieser Gruppe rwx-Zugriff auf /home/projects zu gewähren:

# setfacl -m g:developers:rwx /home/projects/

Und legen Sie die Kontingentgrenzen fest mit:

# edquota -g developers

Genau wie wir es zuvor mit dem Benutzer gacanepa getan haben.

Der Kulanzzeitraum kann für eine beliebige Anzahl von Sekunden, Minuten, Stunden, Tagen, Wochen oder Monaten angegeben werden, indem ausgeführt wird.

# edquota -t

und Aktualisieren der Werte unter "Kulanzfrist für Block" und "Inode-Kulanzfrist".

Im Gegensatz zur Block- oder Inode-Nutzung (die auf Benutzer- oder Gruppenbasis festgelegt werden) wird die Kulanzfrist systemweit festgelegt.

Um Quoten zu melden, können Sie quota -u [user] oder quota -g [group] für eine Schnellliste oder repquota -v [/path/to/filesystem] für einen detaillierteren (ausführlicheren) und schön formatierten Bericht verwenden.

Natürlich möchten Sie [user], [group] und [/path/to/filesystem] durch bestimmte Benutzer-/Gruppennamen und das Dateisystem ersetzen, das Sie überprüfen möchten.

Zusammenfassung

In diesem Artikel haben wir erklärt, wie Sie Zugriffskontrolllisten und Festplattenkontingente für Benutzer und Gruppen festlegen. Mit beiden können Sie Berechtigungen und Festplattennutzung effektiver verwalten.

Wenn Sie mehr über Quoten erfahren möchten, können Sie sich auf das Quota Mini-HowTo im Linux Documentation Project beziehen.

Selbstverständlich können Sie sich auch auf unsere Fragen verlassen. Reichen Sie sie einfach über das untenstehende Kommentarformular ein und wir werfen gerne einen Blick darauf.

Verwandte Artikel: