Website-Suche

So legen Sie Zugriffskontrolllisten (ACLs) und Festplattenkontingente für Benutzer und Gruppen fest


Zugriffskontrolllisten (auch als ACLs bekannt) sind eine Funktion des Linux-Kernels, die es ermöglicht, detailliertere Zugriffsrechte für Dateien und Verzeichnisse zu definieren, als dies durch reguläre ugo/rwx-Berechtigungen festgelegt wird.

Die standardmäßigen ugo/rwx-Berechtigungen erlauben es beispielsweise 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 diese mit der Option acl gemountet wurden. Dazu verwenden wir tune2fs für ext2/3/4-Dateisysteme, 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 gemountet wurde, liegt dies höchstwahrscheinlich daran, dass die Option noacl in /etc/fstab vorhanden ist.

Entfernen Sie es in diesem Fall, unmounten Sie das Dateisystem und mounten Sie es dann erneut oder starten Sie Ihr System einfach neu, nachdem Sie die Änderungen in /etc/fstab gespeichert haben.

Einführung von ACLs in Linux

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

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 zur Entwicklergruppe hinzugefügt wurden:

id walterwhite
id saulgoodman

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

Dann setzen wir den Gruppeneigentümer auf developers und ändern seine standardmäßigen ugo/rwx-Berechtigungen rekursiv auf 770 (wodurch Lesen, Schreiben und Ausführen gewährt werden). Berechtigungen, die sowohl dem Eigentümer als auch dem Gruppeneigentümer 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 als walterwhite oder saulgoodman in /mnt/test/acl.txt 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, ist es gut. Wir werden jedoch bald auf ein Problem stoßen, wenn wir einem anderen Benutzer, der nicht zur Entwicklergruppe gehört, Schreibzugriff auf /mnt/test/acl.txt gewähren müssen.

Standardmäßige ugo/rwx-Berechtigungen würden erfordern, dass der neue Benutzer zur 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 zum Einsatz.

ACLs unter Linux festlegen

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 für die Datei, verwenden Sie u: gefolgt vom Benutzernamen und :rw, um Lese-/Schreibberechtigungen anzugeben:

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

Und führen Sie zum Vergleich erneut getfacl für die Datei aus. Das folgende Bild zeigt das „Vorher“ und das „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 normaler Benutzer für den Zugriff auf den Inhalt eines Verzeichnisses Ausführungsberechtigungen für dieses Verzeichnis benötigt.

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 (das dessen Inhalt erbt, sofern es nicht anderweitig überschrieben wird), fügen Sie d: vor der Regel hinzu 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 Eigentümergruppe 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-Sicherheitshandbuchs (auch kostenlos zum Download im PDF-Format verfügbar). ).

Legen Sie Linux-Festplattenkontingente für Benutzer und Dateisysteme fest

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

Somit wird die Festplattennutzung, die einem bestimmten Benutzer oder einer bestimmten Gruppe gestattet ist, begrenzt, und Sie können sicher sein, dass Ihre Festplatten nicht durch einen unvorsichtigen (oder böswilligen) Benutzer bis zur Kapazitätsgrenze gefüllt werden.

Das erste, was Sie tun müssen, um Kontingente für ein Dateisystem zu aktivieren, ist, es mit den Optionen usrquota oder grpquota (für Benutzer- bzw. Gruppenkontingente) in /etc/fstab bereitzustellen.

Aktivieren wir beispielsweise benutzerbasierte Kontingente für /dev/vg00/vol_backups und gruppenbasierte Kontingente für /dev/vg00/vol_projects.

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

Unmounten Sie beide Dateisysteme und mounten Sie sie erneut:

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 Hervorhebung unten):

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 zuvor erwähnten Benutzernamen und der Gruppe Kontingente zuweisen. Sie können Kontingente später mit quotaoff deaktivieren.

Festlegen von Linux-Festplattenkontingenten

Beginnen wir damit, eine ACL für /home/backups für den Benutzer gacanepa festzulegen, die ihm Lese-, Schreib- und Ausführungsberechtigungen für dieses Verzeichnis erteilt:

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

Dann mit,

edquota -u gacanepa

Wir werden die weichen Limit=900- und die harten Limit=1000-Blöcke erstellen (1024 Bytes/Block * 1000 Blöcke=1024000 Bytes=1 MB). ) der Speicherplatznutzung.

Wir können auch ein Limit von 20 und 25 als weiche und harte Begrenzung 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 genannten Grenzen festlegen können:

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

Wenn die Situation der Kontingentü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 nutzen oder mehr zu erstellen Dateien.

Zum Testen lassen wir 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, schlägt der Schreibvorgang der Datei fehl, weil das Festplattenkontingent überschritten wurde. Da nur die ersten 1000 KB auf die Festplatte geschrieben werden, wird das Ergebnis in diesem Fall höchstwahrscheinlich eine beschädigte Datei sein.

Ebenso 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 gemacht haben.

Der Kulanzzeitraum kann durch Ausführen auf eine beliebige Anzahl von Sekunden, Minuten, Stunden, Tagen, Wochen oder Monaten festgelegt werden.

edquota -t

und Aktualisieren der Werte unter Block-Kulanzzeitraum und Inode-Kulanzzeitraum.

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

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

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

Zusammenfassung

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

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

Selbstverständlich können Sie sich auch bei der Beantwortung Ihrer Fragen auf uns verlassen. Senden Sie sie einfach über das Kommentarformular unten und wir freuen uns, einen Blick darauf zu werfen.