
Quotas, Rechte und Verknüpfungen sind elementare Komponenten beim Umgang mit Linux. Was die Kandidaten in der LPI-Prüfung 101 über diese Themen wissen müssen, vermittelt dieser Artikel.
In der vorigen Ausgabe beschäftigte sich die LPI-Reihe des Linux-Magazins mit dem Dateisystem - von außen betrachtet. Diese Folge informiert über die Interna der Datenspeicher und gibt Aufschluss über Verknüpfungen, Quotas, das Suchen nach Dateien sowie die Rechtevergabe.
Links, auch Verknüpfungen oder Verweise genannt, sind ein fester Bestandteil jedes Unix-Systems. Es handelt sich dabei um Zeiger, die auf Dateien verweisen. Das Erstellen eines symbolischen Links (auch Symlink genannt) erzeugt eine neue Datei, die einen eigenen Inode besitzt. An welcher Stelle sich die Zieldatei im Dateisystem befindet, spielt keine Rolle.
Der Befehl »ln -s« (oder »ln --symbolic«) erstellt einen Symlink. Am Beispiel von »initrd« lautet die Syntax:
# ln s initrd-2.6.16.13-4- default initrd
Zwei Eigenschaften im gelisteten Dateinamen (»ls -l«) kennzeichnen einen symbolischen Link: das kleine »l« als erster Buchstabe vor den Dateiberechtigungen sowie der Verweis auf die entsprechende Originaldatei:
lrwxrwxrwx 1 root root [..] initrd ->initrd-2.6.16.13 -4-default
Wird die Datei, auf die der symbolische Link verweist, gelöscht, zeigt dieser ins Leere. Umgekehrt wirkt sich das Entfernen des Links in keiner Weise auf die Zieldatei aus.
Eine andere Variante, die Hardlinks, erzeugt der Befehl »ln« ohne weitere Parameter. Diese dürfen nur auf Dateien, nicht jedoch auf Verzeichnisse zeigen. Den Inhalt einer Datei speichert das Betriebssystem in Blöcken auf der Festplatte. Auf diese Blöcke verweisen Inodes, die Zusatzinformationen wie Dateiberechtigungen, Dateibesitzer und Zeitstempel der Datei enthalten.
Ein Hardlink erstellt einen zusätzlichen Namen, der auf den vorhandenen Inode verweist. Daher behalten diese auch nach dem Verschieben der Zieldatei innerhalb einer Partition ihre Gültigkeit. Da Dateisysteme Inodes pro Partition separat verwalten, dürfen Hardlinks nur auf Dateien innerhalb derselben Partition zeigen.
Der Befehl »ls -li« listet den Verzeichnisinhalt in Langform inklusive der Inode-Nummer jeder Datei auf. Da sie eine identische Inode-Nummer besitzen, zeigen in dem folgenden Beispiel die Namen »mkfs.ext2« und »mkfs.ext3« auf dieselbe Datei:
# ls -li 42616 -rwxr-xr-x 3 root root [...] /sbin/mkfs.ext2 42616 -rwxr-xr-x 3 root root [...] /sbin/mkfs.ext3
Wie viele Namen eine Datei besitzt, zeigt die Zahl hinter den Dateiberechtigungen - der ebenfalls in den Inodes gespeicherte Link Counter. Bei einer Datei steht er standardmäßig auf 1, jeder zusätzliche Name erhöht diese Zahl um den Wert eins. Bei den Dateien »mkfs.ext2« und »mkfs.ext3« aus dem Beispiel steht dieser Counter auf »3«. Das heißt: Es zeigen drei Namen auf den gleichen Inode, also dieselbe Datei.
Bei einem Verzeichnis steht der Link Counter immer mindestens auf 2, da ein Verzeichnis auch über die Abkürzung ».« (sie steht für das lokale Verzeichnis, in dem sich der Benutzer gerade befindet) zu erreichen ist. Jedes Unterverzeichnis erhöht den Counter ebenfalls um einen Zähler-Wert, da es den Namen »..« enthält, der das übergeordnete Verzeichnis anspricht.
Das Löschen eines Hardlinks entfernt lediglich den Namen einer Datei. Erst das Löschen des letzten Namens entfernt auch deren Inhalt beziehungsweise markiert den Inode als frei und damit als beschreibbar. Es gibt keine Originaldatei und auch keinen Verweis wie bei symbolischen Links, sondern nur mehrere gleichwertige Namen.
| LPI-Aufgabengruppen |
|---|
| Das Linux Professional Institute gliedert die Prüfungsfragen in Aufgabengruppen ([1], [2]). Dieser Artikel erklärt die Abschnitte:
|
Quotas beschränken den Platz, den ein Benutzer oder eine Gruppe auf einer Partition belegen darf. Das Einrichten von Quotas beginnt mit dem Einfügen der passenden Mountoptionen für die Partition in der Datei »/etc/fstab«.
Der Eintrag in dieser Konfigurationsdatei sieht wie folgt aus:
/dev/sda6 /var reiserfs usrquota,grpquota 1 2
Um die Partition ohne Reboot mit den neuen Parametern zu mounten, genügt der Befehl:
mount -o remount /var
Der Aufruf »mount« ohne weitere Parameter liefert als Ergebnis die derzeit gemounteten Partitionen. Wurde eine Partition mit Quotas versehen, zeigt der Aufruf, wie in Abbildung 1 zu sehen, die entsprechenden Parameter. Der Aufruf »quotacheck -avugm« überprüft alle in der Datei »/etc/fstab« mit Quota-Mountoptionen eingetragenen Partitionen. Die Option »v« sorgt für eine ausführliche Ausgabe, das »m« erzwingt das Prüfen einer gemounteten Partition. Die Erweiterung »u« erzeugt die Konfigurationsdatei »aquota.user«, während »g« die Datei »aquota.group« generiert, im Beispiel direkt im Verzeichnis »/var/«.
Diese Dateien enthalten eine genaue Auflistung darüber, welche Benutzer und Gruppen aktuell wie viel Festplattenplatz und wie viele Inodes belegen. Der Admin legt die Größe der Quotas entweder über Inodes (Zahl der möglichen Dateien) oder über die Zahl der zu belegenden Datenblöcke fest, wobei ein Block 1 KByte entspricht.
Der Befehl »edquota« ändert die Benutzer- oder Gruppenwerte mit dem voreingestellten Editor, meist Vim. Abbildung 2 zeigt, dass für den Benutzer »tux«, der zurzeit 2243 Blöcke von je 1 KByte belegt, ein Soft-Limit von 150000 (150 MByte) und ein Hard-Limit von 200000 Blöcken (200 MByte) gesetzt ist.
Ein Soft-Limit erlaubt das Überschreiten der Beschränkung für einen Zeitraum von voreingestellt sieben Tagen (Grace Period), ein Hard-Limit verbietet beim Erreichen des gesetzten Werts das weitere Schreiben auf die Partition. Der Befehl »quotaon«, als Benutzer Root ausgeführt, aktiviert die Quota-Begrenzung. Der Aufruf »repquota« zeigt einen vollständigen Bericht über die gesetzten Quotas und den belegten Platz der einzelnen Benutzer.
Die Eingabe von »quota« liefert jedem Benutzer eine Übersicht über den belegten Platz und seine Beschränkung. Der Befehl »du« (disk usage) listet verzeichnisweise den belegten Platz auf. Der Aufruf »du -sh«, zeigt die Summe des belegten Platzes in »G« (GByte) oder »M« (MByte) Einheiten.
Bei Quotas gilt das zuerst erreichte Limit: Gehört ein Benutzer zu einer Gruppe, die das Limit für eine Partition erreicht hat, kann er als Mitglied dieser Gruppe keine Dateien mehr ablegen, auch wenn sein Benutzerlimit noch nicht erreicht ist.
Beim Anlegen einer Datei gehört diese dem erzeugenden Benutzer und dessen Default-Gruppe. Nur Root darf mit dem Befehl »chown« den Besitzer einer Datei ändern. Ein normaler Benutzer darf zwar deren Gruppenzugehörigkeit ändern, jedoch nur als Besitzer der Datei und Mitglied der neuen Gruppe. Zum Ändern der Gruppe dienen die Befehle »chown« oder »chgrp«. Beide erzielen im folgenden Beispiel den Effekt, dass die Datei danach der Gruppe »lpi« gehört:
# chown .lpi topic204.txt # chgrp lpi topic204.txt
Mit »chown« ändert Root den Besitzer und die Gruppe einer Datei in einem Arbeitsgang. Er gibt dabei den neuen Benutzer und die neue Gruppe durch einen Doppelpunkt oder Punkt getrennt an, also »tux.lpi«3 oder »tux:lpi«. Zum Ändern der Gruppe ohne Ändern des Besitzers ist das Trennzeichen dem Namen der neuen Gruppe voranzustellen, wie das Beispiel mit »chown« zeigt.
Die Ausgabe von »ls -l« zeigt an der ersten Stelle der Ausgabe den Dateityp, gefolgt von den Dateiberechtigungen, die aus drei Blöcken mit jeweils drei Zeichen (»rwx«) bestehen:
# ls -l topic204.txt -rw-r--r-- 1 tux users ... topic204.txt
Die ersten drei Stellen legen die Rechte des Dateibesitzers fest, die nächsten die der besitzenden Gruppe und die letzten die Zugriffsrechte für alle anderen. Ein »r« (read) zeigt das gesetzte Leserecht an, das es erlaubt, den Inhalt einer Datei zu lesen oder bei Verzeichnissen deren Inhalt anzuzeigen. Das Zeichen »w« (write) ermöglicht das Ändern einer Datei. Auf Verzeichnisse angewendet ermöglicht es das Anlegen neuer Dateien oder Unterverzeichnisse sowie das Löschen von darin enthaltenen Dateien und Verzeichnissen.
Das »x« (execute) gestattet das Ausführen der Datei. Nur bei gesetztem Execute-Recht darf ein Benutzer mit »cd« in das Verzeichnis wechseln oder mit »ls -l« dessen Inhalt auflisten. Aus diesem Grund besitzen Verzeichnisse üblicherweise die Rechte »r« und »x«. Die Write-Permission für eine Datei erteilt lediglich das Recht, diese zu verändern. Zum Löschen muss der Benutzer für das Verzeichnis, in dem sie sich befindet, ebenfalls Schreibrechte besitzen.
Das so genannten Sticky Bit ermöglicht hier jedoch als zusätzliches Dateirecht weitere Einschränkungen. Für ein Verzeichnis bedeutet es, dass dort nur der Besitzer einer Datei diese löschen darf, auch wenn andere ein Schreibrecht besitzen. Meist ist das »/tmp/«-Verzeichnis mit einem Sticky Bit versehen, erkennbar am kleinen »t« hinter den Rechten für Others:
drwxrwxrwt 62 root root [...] /tmp/
Für Gruppenverzeichnisse eignet sich das so genannte Set Group ID Bit (SGID), zu erkennen am »s« statt des »x« hinter den Gruppenrechten:
drwxrwsr-x 2 anke lpi [...] lpi/
Es sorgt dafür, dass alle neuen Dateien des Verzeichnisses nicht der Gruppe des erzeugenden Benutzers, sondern der besitzenden Gruppe des Verzeichnisses gehören. Auf Dateien angewendet sorgt das »sgid«-Recht dafür, dass beim Ausführen der Datei als Befehl der gestartete Prozess nicht unter der Gruppenidentität des aufrufenden Benutzers läuft, sondern unter der Gruppenidentität der besitzenden Gruppe der Datei.
Das Set User ID Bit (SUID) sorgt bei Dateien für das gleiche Verhalten auf Besitzer-Ebene: Beim Ausführen einer Datei als Befehl läuft der gestartete Prozess nicht unter der Identität des aufrufenden Benutzers, sondern unter der des Dateibesitzers, zu erkennen am »s« statt des »x« bei den Besitzer-Rechten:
-rwsr-xr-x 1 root shadow [...] /usr/bin/passwd
Sind die Attribute »s« oder »t« mit großen Buchstaben geschrieben, bedeutet dies, dass kein Recht für das Ausführen vorhanden ist. In der Praxis kommt das jedoch selten vor.
Das Ändern von Zugriffsberechtigungen (»chmod«) erfolgt entweder mit symbolischen oder numerischen Werten, wie in Abbildung 3 zu sehen ist. Das »u« (user) ändert die Besitzerrechte, »g« (group) das der Gruppen und »o« (others) für die Rechte aller anderen. Die Ergänzung »a« (all) ändert die Rechte aller Benutzer auf einmal. Die Eingabe von »chmod a+w Datei« erteilt beispielsweise allen das Schreibrecht auf die betreffende Datei.
Numerische Werte setzen Dateirechte immer absolut, das heißt, es muss immer der vollständige Rechtesatz angegeben sein. Ein einfaches Hinzufügen des Schreibrechts wie im vorigen Beispiel ist nicht möglich. Die Attribute besitzen die folgenden numerischen Werte:
Durch das Addieren dieser Werte ergeben sich für jede einzelne Rechte-Gruppe neue Permissions. Als Beispiel setzt sich die Zahl 750 wie folgt zusammen: 7 ist die Summe aus 4+2+1, der Besitzer der Datei erhält also alle Rechte. Die 5 besteht aus 4+1, die Gruppe hat also die Rechte »r-x«, alle anderen besitzen 0 (keine) Rechte. Die voreingestellten Rechte beim Anlegen von Dateien und Verzeichnissen sind 666 für Dateien und 777 für Verzeichnisse.
Die Umask ändert diese Grundinstellung. Jedoch erlaubt sie nur das Beschränken von Rechten, nicht deren Erweiterung. Den aktuellen Wert von Umask zeigt der Befehl »umask« ohne die Angabe weiterer Parameter an. Auch das Setzen der Umask ist mit diesem Befehl möglich, allerdings gilt die Einstellung dann nur für die aktuelle Shell.
Um die Umask global beziehungsweise dauerhaft zu ändern, muss sie in eine der Bash-Konfigurationsdateien aufgenommen werden, also für die systemweite Einstellung »/etc/profile«, für benutzerbezogene zum Beispiel »~/.bashrc«. Wie Abbildung 4 zeigt, ändert der Wert 0022 die Dateirechte auf 644, die von Verzeichnissen auf 755. Das Setzen der Umask auf 023 ändert an den Dateirechten nichts, denn dort ist das Recht zum Ausführen (»x«) standardmäßig nicht gesetzt, ein neues Verzeichnis hat damit jedoch die Berechtigungen »rwxr-xr--«, also 754.
|
Fragen zu |
|---|
|
Die erste Stelle der vierstelligen Ausgabe von Umask legt die Zusatzrechte Sticky Bit, SGID oder SUID fest. Sie ist immer auf 0 gesetzt, da das System diese Rechte beim Anlegen von Verzeichnissen und Dateien nie setzt und sie entsprechend nicht durch Umask verändert werden dürfen. Doch beim Vergeben von Sonderrechten mit »chmod« spielt diese erste Stelle eine Rolle. Dabei steht eine 1 für das Sticky Bit, die 2 für SGID und die 4 für SUID. Das folgende Beispiel zeigt ein gesetztes SGID-Recht auf ein Verzeichnis:
# chmod 2770 verzeichnis # ls -ld verzeichnis/ drwxrws--- 2 anke users [...] verzeichnis/ # chmod 7 verzeichnis d------rwx 2 anke users [...] verzeichnis/
Zahlen mit weniger als vier Stellen erhalten vorangestellte Nullen. Daher hat das Verzeichnis im zweiten Beispiel nach Aufruf von »chmod« die Rechte 0007.
Der Befehl »chattr« setzt für Dateien und Verzeichnisse in Ext-2-Dateisystemen erweiterte Rechte. Einige dieser Permissions, beispielsweise das Immutable Bit, darf nur Root setzen. Es sorgt für die Unveränderbarkeit einer Datei:
# chattr +i datei # rm -f datei rm: remove write-protected regular empty file `datei'? y rm: cannot remove `datei': Operation not permitted
Die Ausgabe »ls -l« zeigt diese Art von Zusatzattributen nicht an. Erst der Befehl »lsattr« gibt Aufschluss:
# ls -l datei -rw-r--r-- 1 root root [...] datei # lsattr datei ----i-------- datei # chattr -i datei # lsattr datei ------------- datei
Standard-Dateirechte legen neben Einstellungen für Besitzer und besitzende Gruppe nur noch Rechte für alle anderen fest. Sollen einzelne Benutzer und Gruppen darüber hinaus spezielle Rechte erhalten, kommen erweiterte Berechtigungsstrukturen, die so genannten Posix-ACLs, zum Einsatz.
Die Suche in einem Linux-System unterscheidet zwischen jener nach Befehlen und der allgemeinen Suche nach Dateien oder Verzeichnissen mit bestimmten Eigenschaften. Der Befehl »which« zeigt an, wo im Dateisystem sich eine bestimmte Datei befindet, die einen angegebenen Befehl ausführt:
# which ls /bin/ls # which ifconfig
Allerdings forscht »which« nur im Suchpfad des Benutzers, weshalb »which ifconfig« erfolglos bleibt. Den Suchpfad definiert die Shellvariable »PATH«, sie enthält die Verzeichnisse, in denen die Shell beim Eintippen eines Befehls nach der passenden auszuführenden Datei suchen soll. Der Befehl »whereis« ist hier aussagekräftiger, da er unabhängig vom Suchpfad des Benutzers den Pfad zum Befehl und - falls vorhanden - auch die passende Manual-Page anzeigt:
# whereis ifconfig ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
Der Aufruf des Suchprogramms »find« erfordert als Parameter den zu durchsuchenden Pfad, die gesuchte Datei-Eigenschaft und optional eine passende Aktion. Der folgende Befehl sucht im gesamten System (Pfadangabe »/«) nach den Dateien (»-type f») mit dem Namen »ifconfig»:
# find / -type f -name ifconfig
Im zweiten Beispiel sucht »find« auf dem gesamten System nach Dateien mit der Endung »mp3«, ohne auf die Groß- und Kleinschreibung zu achten (»-iname«). Die gefundenen Dateien (»{}«) löscht der Befehl »rm«:
# find / -type f -iname "*.mp3" -exec rm {} ;Unzählige Parameter spezifizieren die Suchkriterien für »find«, beispielsweise »-inum« für die Suche nach Dateien mit einer bestimmten Inode-Nummer. Allerdings dauert eine solche Suche auch schon mal etwas länger, da der Aufruf das Dateisystem direkt durchsucht.
Geht es darum, Dateien oder Verzeichnisse anhand ihrer Namen zu finden, erledigt das »locate«-Kommando diesen Job deutlich schneller, da es die Einträge einer Datenbank verwendet und nicht auf dem Dateisystem sucht. Zur Suche mit Locate genügt als Suchkriterium ein Teil des Pfad- oder Dateinamens. So listet ein »locate ping« neben der Datei »/bin/ping« auch die Files des Verzeichnisses »/pinguin/« auf, da »ping« Teil des absoluten Pfads ist.
Der Aufruf »updatedb« aktualisiert die Datenbank. Ruft ein normaler Benutzer den Befehl auf, enthält sie lediglich die Inhalte der Verzeichnisse, für die dieser Benutzer Leserechte besitzt. Nur von Root aufgerufen indiziert das Programm alle Dateien und Verzeichnisse des Systems. Was genau in die Datenbank aufgenommen wird, steht in der Datei »/etc/updatedb.conf«.
Mit »locate« findet auch ein normaler Benutzer Dateinamen, zum Beispiel aus dem Heimatverzeichnis von Root. Das sicherere »slocate«, wie es auf Red-Hat-Systemen zum Einsatz kommt (»locate« ist dort nur ein Link auf »slocate«), beschränkt die Suche des normalen Benutzers auf Inhalte, für die er auch Leserechte besitzt. (tle)
| Infos |
|---|
| [1] LPI-Webseite mit Objectives: [http://www.lpi.org/de/obj_101.html] [2] "Willkommen im Club": Linux-Magazin 05/06. S. 84, [http://www.linux-magazin.de/Artikel/ausgabe/2006/05/lpi/lpi.html] |
| Die Autorin |
|---|
|
Anke Börnig arbeitet als freiberufliche Trainerin für Linux-Kurse. Neben offiziellen Suse- und Red-Hat-Trainings leitet sie regelmäßig Workshops zur Vorbereitung auf die Stufe 2 der LPI-Zertifizierung. Vor kurzem erschien ihr Buch zur Vorbereitung auf die LPIC-2-Prüfung im Verlag Open Source Press. |