104.5 Lektion 1
Zertifikat: |
LPIC-1 |
---|---|
Version: |
5.0 |
Thema: |
104 Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard |
Lernziel: |
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten |
Lektion: |
1 von 1 |
Einführung
Als Mehrbenutzersystem muss Linux nachverfolgen können, wem einzelne Dateien gehören und ob ein Benutzer Aktionen an einer Datei durchführen darf oder nicht. Dies dient zum einen dem Schutz der Privatsphäre von Benutzern, die den Inhalt ihrer Dateien vertraulich halten möchten, und zum anderen der Zusammenarbeit, indem bestimmte Dateien für mehrere Benutzer zugänglich sind.
Dies wird durch ein dreistufiges Berechtigungssystem erreicht. Jede Datei auf der Festplatte ist Eigentum eines Benutzers und einer Benutzergruppe und hat drei Sätze von Berechtigungen: einen für den Eigentümer, einen für die Gruppe, der die Datei gehört, und einen für alle anderen. In dieser Lektion lernen Sie, wie Sie die Berechtigungen für eine Datei abfragen, die Bedeutung dieser Berechtigungen und wie Sie diese manipulieren.
Abfragen von Informationen über Dateien und Verzeichnisse
Der Befehl ls
liefert eine Liste des Inhalts eines Verzeichnisses. In der Grundform erhalten Sie nur die Dateinamen:
$ ls Another_Directory picture.jpg text.txt
Es gibt jedoch viel mehr Informationen zu jeder Datei, einschließlich Typ, Größe, Eigentümer und mehr. Um diese Informationen zu sehen, rufen Sie ls
mit dem Parameter -l
für eine “long form”-Liste auf:
$ ls -l total 536 drwxrwxr-x 2 carol carol 4096 Dec 10 15:57 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Jede Spalte in der obigen Ausgabe hat eine Bedeutung. Schauen wir uns die für diese Lektion relevanten an:
-
Die erste Spalte der Liste zeigt den Dateityp und die Berechtigungen an, zum Beispiel
drwxrwxr-x
:-
Das erste Zeichen (
d
) gibt den Dateityp an. -
Die nächsten drei Zeichen (
rwx
) geben die Berechtigungen für den Eigentümer der Datei an, auch als user oderu
bezeichnet. -
Die nächsten drei Zeichen (
rwx
) geben die Rechte der Gruppe an, der die Datei gehört, auch alsg
bezeichnet. -
Die letzten drei Zeichen (
r-x
) geben die Berechtigungen für alle anderen an, auch bekannt als others odero
.
-
Tip
|
Es ist auch üblich, den Satz der Berechtigungen für others als weltweite oder world Berechtigungen zu bezeichnen, im Sinne von: “Jeder andere auf der Welt hat diese Berechtigungen”. |
-
Die dritte und vierte Spalten geben die Eigentümerinformationen: den Benutzer bzw. die Gruppe, die Eigentümer der Datei sind.
-
Die siebte und letzte Spalte zeigt den Dateinamen.
Die zweite Spalte zeigt die Anzahl der harten Links, die auf diese Datei zeigen, die fünfte Spalte die Dateigröße. Die sechste Spalte nennt das Datum und die Uhrzeit, zu der die Datei zuletzt geändert wurde. Diese Spalten sind aber für das aktuelle Thema nicht relevant.
Was ist mit Verzeichnissen?
Wenn Sie versuchen, mit ls -l
Informationen über ein Verzeichnis abzufragen, erhalten Sie stattdessen eine Liste des Verzeichnisinhalts:
$ ls -l Another_Directory/ total 0 -rw-r--r-- 1 carol carol 0 Dec 10 17:59 another_file.txt
Um dies zu vermeiden und Informationen über das Verzeichnis selbst abzufragen, fügen Sie den Parameter -d
zu ls
hinzu:
$ ls -l -d Another_Directory/ drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory/
Versteckte Dateien anzeigen
Die Verzeichnisliste, die wir zuvor mit ls -l
abgerufen haben, ist unvollständig:
$ ls -l total 544 drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt
Es gibt noch drei weitere Dateien in diesem Verzeichnis, die jedoch versteckt sind. Unter Linux werden Dateien, deren Name mit einem Punkt (.
) beginnt, automatisch versteckt. Um sie zu sehen, müssen wir den Parameter -a
zu ls
hinzufügen:
$ ls -l -a total 544 drwxrwxr-x 3 carol carol 4096 Dec 10 16:01 . drwxrwxr-x 4 carol carol 4096 Dec 10 15:56 .. drwxrwxr-x 2 carol carol 4096 Dec 10 17:59 Another_Directory -rw------- 1 carol carol 539663 Dec 10 10:43 picture.jpg -rw-rw-r-- 1 carol carol 1881 Dec 10 15:57 text.txt -rw-r--r-- 1 carol carol 0 Dec 10 16:01 .thisIsHidden
Die Datei .thisIsHidden
ist lediglich versteckt, weil ihr Name mit .
beginnt.
Die Verzeichnisse .
und ..
sind jedoch speziell. .
ist ein Zeiger auf das aktuelle Verzeichnis — und ..
ist ein Zeiger auf das übergeordnete Verzeichnis, also dasjenige, das das aktuelle Verzeichnis enthält. Unter Linux enthält jedes Verzeichnis mindestens diese beiden Verzeichnisse.
Tip
|
Sie können mehrere Parameter für |
Dateitypen verstehen
Wir haben bereits erwähnt, dass der erste Buchstabe in jeder Ausgabe von ls -l
den Dateityp nennt. Die drei häufigsten Dateitypen sind:
-
(normale Datei)-
Eine Datei kann Daten jeglicher Art enthalten und hilft, diese Daten zu verwalten. Dateien können geändert, verschoben, kopiert und gelöscht werden.
d
(Verzeichnis)-
Ein Verzeichnis enthält andere Dateien oder Verzeichnisse und hilft bei der Organisation des Dateisystems. Technisch gesehen sind Verzeichnisse eine besondere Art von Datei.
l
(symbolischer Link)-
Diese “Datei” ist ein Zeiger auf eine andere Datei oder ein Verzeichnis irgendwo im Dateisystem.
Neben diesen gibt es drei weitere Dateitypen, die Sie zumindest kennen sollten, die aber im Rahmen dieser Lektion keine Rolle spielen:
b
(Block Device oder Blockgerät)-
Diese Datei steht für ein virtuelles oder physisches Gerät, in der Regel Festplatten oder andere Arten von Speichergeräten, z.B. die erste Festplatte, die durch
/dev/sda
repräsentiert werden könnte. c
(Character Device oder Zeichengerät)-
Diese Datei steht für ein virtuelles oder physisches Gerät. Terminals (wie das Hauptterminal auf
/dev/ttyS0
) und serielle Schnittstellen sind gängige Beispiele für zeichenbasierte Geräte. s
(Socket)-
Sockets dienen als “Kanäle”, die Informationen zwischen zwei Programmen austauschen.
Warning
|
Ändern Sie keine Berechtigungen für Blockgeräte, Zeichengeräte oder Sockets, wenn Sie nicht genau wissen, was Sie tun, denn dies kann dazu führen, dass Ihr System nicht mehr funktioniert! |
Berechtigungen verstehen
Die Ausgabe von ls -l
zeigt die Dateiberechtigungen direkt nach dem Dateityp — als drei Gruppen von jeweils drei Zeichen, in der Reihenfolge r
, w
und x
. Denken Sie daran, dass ein Strich -
für das Fehlen einer Berechtigung steht. Sehen wir uns die Bedeutung im Folgenden genauer an.
Dateiberechtigungen
r
-
Steht für read (lesen) und hat den oktalen Wert
4
(wir werden in Kürze Oktale besprechen). Das bedeutet die Erlaubnis, eine Datei zu öffnen und ihren Inhalt zu lesen. w
-
Steht für write (schreiben) und hat den oktalen Wert
2
. Dies bedeutet die Erlaubnis, eine Datei zu bearbeiten oder zu löschen. x
-
Steht für execute (ausführen) und hat den oktalen Wert
1
. Dies bedeutet, dass die Datei als Programm oder Skript ausgeführt werden kann.
So kann z.B. eine Datei mit den Rechten rw-
zwar gelesen und beschrieben, aber nicht ausgeführt werden.
Verzeichnisberechtigungen
r
-
Steht für read (lesen) und hat den oktalen Wert
4
. Dies steht für die Erlaubnis, den Inhalt des Verzeichnisses zu lesen, z.B. die Namen der darin enthaltenen Dateien. Das schließt aber nicht das Recht ein, die Dateien selbst zu lesen. w
-
Steht für write (schreiben) und hat den oktalen Wert
2
. Dies berechtigt, Dateien in einem Verzeichnis zu erstellen oder zu löschen.Beachten Sie, dass Sie diese Änderungen nicht allein mit Schreibrechten vornehmen können, sondern auch Ausführungsrechte (
x
) benötigen, um in das Verzeichnis zu wechseln. x
-
Steht für execute (ausführen) und hat den oktalen Wert
1
. Dies steht für die Erlaubnis, in ein Verzeichnis zu wechseln, aber nicht, die enthaltenen Dateien aufzulisten (dafür wirdr
benötigt).
Die Erläuterungen zu Verzeichnissen mögen ein wenig verwirrend klingen. Stellen wir uns darum zum Beispiel vor, es gibt ein Verzeichnis namens Another_Directory
mit folgenden Berechtigungen:
$ ls -ld Another_Directory/ d--x--x--x 2 carol carol 4,0K Dec 20 18:46 Another_Directory
Stellen Sie sich außerdem vor, dass in diesem Verzeichnis ein Shellskript hello.sh
liegt:
-rwxr-xr-x 1 carol carol 33 Dec 20 18:46 hello.sh
Wenn Sie carol
sind und versuchen, den Inhalt von Another_Directory
aufzulisten, erhalten Sie eine Fehlermeldung, da carol
nicht leseberechtigt für dieses Verzeichnis ist:
$ ls -l Another_Directory/ ls: cannot open directory 'Another_Directory/': Permission denied
carol
hat jedoch Ausführungsrechte, was bedeutet, dass sie in das Verzeichnis wechseln kann. Daher kann carol
auf Dateien innerhalb des Verzeichnisses zugreifen, solange sie die richtigen Rechte für die jeweilige Datei hat. Nehmen wir an, carol
hat alle Rechte (rwx
) für das Skript hello.sh
. In diesem Fall kann sie das Skript ausführen (sofern ihr dessen Name bekannt ist), obwohl sie den Inhalt des Verzeichnisses nicht lesen kann:
$ sh Another_Directory/hello.sh Hello LPI World!
Wie bereits erwähnt, werden die Berechtigungen nacheinander festgelegt: zuerst für den Eigentümer der Datei, dann für die Gruppe und dann für andere Benutzer. Wann immer jemand versucht, eine Aktion an einer Datei durchzuführen, werden die Berechtigungen auf diese Weise überprüft.
Zuerst wird geprüft, ob der aktuelle Benutzer Eigentümer der Datei ist. Ist das der Fall, kommt nur der erste Satz von Berechtigungen zur Anwendung. Andernfalls wird geprüft, ob der aktuelle Benutzer der Gruppe angehört, die Eigentümer der Datei ist. In diesem Fall gilt nur der zweite Satz von Berechtigungen. In allen anderen Fällen wendet das System den dritten Satz von Berechtigungen an.
Das bedeutet, dass, wenn der aktuelle Benutzer der Eigentümer der Datei ist, nur die Eigentümerberechtigungen wirksam sind, auch wenn die Gruppen- oder andere Berechtigungen freizügiger sind als die des Eigentümers.
Dateiberechtigungen ändern
Der Befehl chmod
dient dazu, die Berechtigungen für eine Datei zu ändern. Er benötigt mindestens zwei Parameter: Der erste Parameter beschreibt, welche Berechtigungen geändert werden sollen, und der zweite verweist auf die Datei oder das Verzeichnis, an dem die Änderung vorgenommen werden soll. Beachten Sie, dass nur der Eigentümer der Datei oder der Systemadministrator (root) die Dateiberechtigungen ändern kann.
Die zu ändernden Berechtigungen können auf zwei verschiedene Arten, oder “Modi”, beschrieben werden.
Der erste, der symbolische Modus , erlaubt eine detaillierte Steuerung, indem einzelne Berechtigungen hinzugefügt oder widerrufen werden, ohne andere Berechtigungen zu ändern. Der oktale Modus bietet sich an, wenn Sie alle Berechtigungswerte auf einmal setzen möchten.
Beide Modi führen zum selben Ergebnis: Die Befehle
$ chmod ug+rw-x,o-rwx text.txt
und
$ chmod 660 text.txt
führen zum gleichen Resultat, nämlich zu einer Datei mit den folgenden Berechtigungen:
-rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Sehen wir uns nun an, wie jeder Modus funktioniert.
Symbolischer Modus
Um die Rechte im symbolischen Modus zu ändern, gibt das oder geben die erste(n) Zeichen an, wessen Rechte Sie ändern wollen: die für den Benutzer (u
), für die Gruppe (g
), für andere (o
) und/oder für alle (a
).
Darüber hinaus geben Sie in dem Befehl an, was er tun soll: Sie können eine Berechtigung erteilen (+
), eine Berechtigung entziehen (-
) oder auf einen bestimmten Wert setzen (=
).
Zuletzt geben Sie an, welchen Berechtigungswert Sie setzen möchten: lesen (r
), schreiben (w
) oder ausführen (x
).
Nehmen wir eine Datei text.txt
mit folgenden Berechtigungen:
$ ls -l text.txt -rw-r--r-- 1 carol carol 765 Dec 20 21:25 text.txt
Um den Mitgliedern der Gruppe, der die Datei gehört, Schreibrechte zu gewähren, nutzen Sie den Parameter g+w
. Merken Sie es sich auf diese Weise: “Für die Gruppe (g
) erteile (+
) Schreibrechte (w
)”. Der Befehl würde also lauten:
$ chmod g+w text.txt
Lassen Sie uns das Ergebnis mit ls
überprüfen:
$ ls -l text.txt -rw-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Möchten Sie dem Eigentümer derselben Datei die Leseberechtigung entziehen? Dann stellen Sie sich folgendes vor: “Für den Benutzer (u
) entziehe (-
) Leserechte (r
)”. Der Parameter ist also u-r
:
$ chmod u-r text.txt $ ls -l text.txt --w-rw-r-- 1 carol carol 765 Dec 20 21:25 text.txt
Und wenn wir die Berechtigungen für alle auf rw-
setzen wollen? Dann stellen Sie sich das so vor: “Für alle (a
) genau einstellen auf (=
) lesen (r
), schreiben (w
) und ohne ausführen (-
)”. Also:
$ chmod a=rw- text.txt $ ls -l text.txt -rw-rw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Natürlich ist es möglich, mehrere Berechtigungen gleichzeitig zu ändern. Trennen Sie sie in diesem Fall mit einem Komma (,
):
$ chmod u+rwx,g-x text.txt $ ls -lh text.txt -rwxrw-rw- 1 carol carol 765 Dec 20 21:25 text.txt
Das obige Beispiel kann wie folgt gelesen werden: “Für den Benutzer (u
) erteile (+
) Lese-, Schreib- und Ausführungsrechte (rwx
), für die Gruppe (g
) entziehe (-
) Ausführungsrechte (x
)”.
Auf einem Verzeichnis ausgeführt, ändert chmod
nur die Berechtigungen des Verzeichnisses. chmod
hat auch einen rekursiven Modus, der nützlich ist, wenn Sie die Berechtigungen für “alle Dateien innerhalb eines Verzeichnisses und seiner Unterverzeichnisse” ändern wollen. Fügen Sie dazu den Parameter -R
nach dem Befehlsnamen und vor den zu ändernden Berechtigungen ein:
$ chmod -R u+rwx Another_Directory/
Dieser Befehl kann wie folgt gelesen werden: “Rekursiv (-R
) für alle Benutzer (u
) erteile (+
) Lese-, Schreib- und Ausführrechte (rwx
)”.
Warning
|
Seien Sie vorsichtig und überlegen Sie es sich gut, bevor Sie die Option |
Oktalmodus
Im oktalen Modus werden die Berechtigungen auf andere Weise angegeben: als dreistelliger Wert in oktaler Notation, also einem numerischen System mit der Basis 8.
Jede Berechtigung hat einen bestimmten Wert, und sie werden in der folgenden Reihenfolge angegeben: lesen (r
), was 4
entspricht, schreiben (w
), was 2
entspricht, und zuletzt ausführen (x
), was 1
entspricht. Für eine fehlende Berechtigung steht der Wert Null (0
). Die Berechtigung rwx
entspricht also 7
(4+2+1
), und r-x
entspricht 5
(4+0+1
).
Die erste der drei Ziffern des Berechtigungssatzes steht für die Berechtigungen für den Benutzer (u
), die zweite für die Gruppe (g
) und die dritte für alle anderen (o
). Um die Berechtigungen für eine Datei auf rw-rw----
zu setzen, lautet der oktale Wert 660
:
$ chmod 660 text.txt $ ls -l text.txt -rw-rw---- 1 carol carol 765 Dec 20 21:25 text.txt
Darüber hinaus ist die Syntax im oktalen Modus die gleiche wie im symbolischen Modus: der erste Parameter steht für die Berechtigungen, die Sie ändern möchten, und der zweite Parameter zeigt auf die Datei oder das Verzeichnis, für das die Änderungen gelten.
Tip
|
Ist ein Berechtigungswert ungerade ist, ist die Datei stets ausführbar! |
Welche Syntax sollten Sie verwenden? Der oktale Modus wird empfohlen, wenn Sie die Berechtigungen auf einen bestimmten Wert ändern wollen, zum Beispiel 640
(rw- r-- ---
).
Der symbolische Modus ist nützlicher, um nur einen bestimmten Wert umzuschalten, unabhängig von den aktuellen Berechtigungen für die Datei. So können Sie z.B. mit chmod u+x skript.sh
Ausführungsberechtigungen für den Benutzer hinzufügen, ohne die aktuellen Berechtigungen für die Gruppe und andere zu berücksichtigen oder gar zu ändern.
Eigentümer einer Datei ändern
Der Befehl chown
dient dazu, die Eigentümerschaft einer Datei oder eines Verzeichnisses zu ändern. Die Syntax ist einfach:
chown USERNAME:GROUPNAME FILENAME
Lassen Sie uns zum Beispiel eine Datei namens text.txt
überprüfen:
$ ls -l text.txt -rw-rw---- 1 carol carol 1881 Dec 10 15:57 text.txt
Die Benutzerin, der die Datei gehört, ist carol
, und die Gruppe ist ebenfalls carol
. Jetzt ändern wir die Gruppe in students
:
$ chown carol:students text.txt $ ls -l text.txt -rw-rw---- 1 carol students 1881 Dec 10 15:57 text.txt
Beachten Sie, dass der Eigentümer einer Datei nicht der Gruppe angehören muss, die diese Datei besitzt. Im obigen Beispiel muss carol
also nicht Mitglied der Gruppe students
sein.
Gesetzte Benutzer- oder Gruppenrechte können Sie weglassen, wenn diese nicht geändert werden sollen. Um also nur die Gruppe zu ändern, die eine Datei besitzt, genügt chown :students text.txt
. Um nur den Benutzer zu ändern, würde der Befehl chown carol: text.txt
oder einfach chown carol text.txt
lauten. Alternativ könnten Sie auch den Befehl chgrp students text.txt
verwenden.
Wenn Sie nicht der Systemadministrator (root) sind, können Sie Eigentumsrechte für eine Datei nicht auf einen anderen Benutzer oder eine Gruppe übertragen, der Sie nicht angehören. Bei einem solchen Versuch erhalten Sie die Fehlermeldung Operation not permitted
.
Gruppen abfragen
Bevor Sie die Eigentumsrechte einer Datei ändern, kann es nützlich sein zu wissen, welche Gruppen auf dem System existieren, welche Benutzer Mitglieder einer Gruppe sind und zu welchen Gruppen ein Benutzer gehört.
Um zu sehen, welche Gruppen auf Ihrem System existieren, geben Sie getent group
ein. Die Ausgabe wird ähnlich wie die folgende aussehen (Ausgabe gekürzt):
$ getent group root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4:syslog,rigues tty:x:5:rigues disk:x:6: lp:x:7: mail:x:8: news:x:9: uucp:x:10:rigues
Wenn Sie wissen wollen, zu welchen Gruppen ein Benutzer gehört, fügen Sie den Benutzernamen als Parameter zu groups
hinzu:
$ groups carol carol : carol students cdrom sudo dip plugdev lpadmin sambashare
Um zu sehen, welche Benutzer zu einer Gruppe gehören, verwenden Sie groupmems
. Der Parameter -g
gibt die Gruppe an, und -l
listet alle Mitglieder auf:
# groupmems -g cdrom -l carol
Tip
|
|
Standardberechtigungen
Machen wir ein Experiment! Öffnen Sie ein Terminalfenster und erstellen Sie eine leere Datei mit dem folgenden Befehl:
$ touch testfile
Werfen wir nun einen Blick auf die Berechtigungen für diese Datei. Sie können auf Ihrem System anders sein, aber nehmen wir an, dass sie wie folgt aussehen:
$ ls -lh testfile -rw-r--r-- 1 carol carol 0 jul 13 21:55 testfile
Die Berechtigungen lauten rw-r—r--
: Lesen und schreiben für den Benutzer, und lesen für die Gruppe und alle anderen — oder 644
im Oktalmodus. Legen Sie nun ein Verzeichnis an:
$ mkdir testdir $ ls -lhd testdir drwxr-xr-x 2 carol carol 4,0K jul 13 22:01 testdir
Nun lauten die Rechte rwxr-xr-x
: Lesen, schreiben und ausführen für den Benutzer, lesen und ausführen für die Gruppe und alle anderen — oder 755
im oktalen Modus.
Unabhängig davon, wo Sie sich im Dateisystem befinden, erhält jede Datei und jedes Verzeichnis, das Sie erstellen, dieselben Berechtigungen. Haben Sie sich jemals gefragt, woher diese Vorgaben stammen?
Sie stammen aus der Benutzermaske oder User Mask (kurz: umask
), die die Standardberechtigungen für jede erstellte Datei bestimmt. Die aktuellen Werte zeigt der Befehl umask
:
$ umask 0022
Aber das entspricht nicht rw-r—r--
oder 644
. Sehen wir uns mit dem Parameter -S
eine Ausgabe im symbolischen Modus an:
$ umask -S u=rwx,g=rx,o=rx
Das sind dieselben Berechtigungen, die unser Testverzeichnis in einem der obigen Beispiele erhalten hat. Aber warum waren die Berechtigungen andere, als wir eine Datei erstellt haben?
Es ist nicht sinnvoll, standardmäßig globale Ausführungsberechtigungen für alle auf jede Datei zu setzen, richtig? Verzeichnisse brauchen Ausführungsrechte (sonst kann man nicht in diese hineinwechseln), aber Dateien nicht — darum sind Dateien standardmäßig auch nicht ausführbar, also rw-r—r--
.
Neben der Anzeige der Standardberechtigungen kann umask
diese auch für die aktuelle Shell-Sitzung ändern:
$ umask u=rwx,g=rwx,o=
Jedes neue Verzeichnis erbt die Rechte rwxrwx---
, und jede Datei rw-rw----
(da sie keine Ausführungsrechte erhalten). Wenn Sie die obigen Beispiele wiederholen, um eine testdatei
und ein testdir
anzulegen und die Berechtigungen zu überprüfen, sollte das Ergebnis wie folgt aussehen:
$ ls -lhd test* drwxrwx--- 2 carol carol 4,0K jul 13 22:25 testdir -rw-rw---- 1 carol carol 0 jul 13 22:25 testfile
Und wenn Sie umask
ohne den Parameter -S
(symbolischer Modus) ausführen, erhalten Sie:
$ umask 0007
Das Ergebnis sieht nicht vertraut aus, weil die verwendeten Werte unterschiedlich sind. Hier ist eine Tabelle mit jedem Wert und seiner jeweiligen Bedeutung:
Wert | Berechtigung für Dateien | Berechtigung für Verzeichnisse |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wie Sie sehen, entspricht 007
rwxrwx---
, genau wie gewünscht. Die führenden Nullen können Sie ignorieren.
Besondere Berechtigungen
Neben den Lese-, Schreib- und Ausführungsrechten für Benutzer, Gruppe und alle anderen kann jede Datei drei weitere Sonderrechte haben, die die Arbeitsweise eines Verzeichnisses oder die Ausführung eines Programms beeinflussen. Sie können entweder im symbolischen oder oktalen Modus angegeben werden und lauten wie folgt:
Sticky Bit
Das Sticky Bit, auch Restricted Deletion Flag (eingeschränkte Löschkennzeichnung) genannt, hat den oktalen Wert 1
und wird im symbolischen Modus durch ein t
innerhalb der anderen Berechtigungen dargestellt. Es gilt nur für Verzeichnisse und hat keine Auswirkungen auf normale Dateien. Unter Linux verhindert es, dass Benutzer eine Datei in einem Verzeichnis entfernen oder umbenennen können, wenn sie selbst nicht Eigentümer dieser Datei oder dieses Verzeichnisses sind.
Verzeichnisse mit gesetztem Sticky Bit zeigen in der Ausgabe von ls -l
ein t
anstelle des x
bei den Berechtigungen für andere:
$ ls -ld Sample_Directory/ drwxr-xr-t 2 carol carol 4096 Dec 20 18:46 Sample_Directory/
Im oktalen Modus werden die Sonderrechte in 4-stelliger Notation angegeben, wobei die erste Ziffer für die Sonderberechtigung steht. Um z.B. das Sticky Bit (Wert 1
) für das Verzeichnis Another_Directory
im Oktalmodus mit der Berechtigung 755
zu setzen, lautet der Befehl:
$ chmod 1755 Another_Directory $ ls -ld Another_Directory drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory
SetGID
SetGID, auch SGID oder Set Group ID genannt, hat den oktalen Wert 2
und wird im symbolischen Modus durch ein s
auf den Gruppen-Berechtigungen dargestellt. Es kann auf ausführbare Dateien oder Verzeichnisse angewendet werden. Bei Dateien bewirkt es, dass der Prozess mit den Rechten der Gruppe ausgeführt wird, der die Datei gehört. Bei Anwendung auf Verzeichnisse erbt jede Datei oder jedes Verzeichnis, das darunter erstellt wird, die Gruppe des übergeordneten Verzeichnisses.
Dateien und Verzeichnisse mit SGID-Bit zeigen ein s
anstelle des x
bei den Berechtigungen für die Gruppe in der Ausgabe von ls -l
:
$ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Um SGID-Berechtigungen zu einer Datei im symbolischen Modus hinzuzufügen, lautet der Befehl:
$ chmod g+s test.sh $ ls -l test.sh -rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
Das folgende Beispiel hilft uns, die Wirkung von SGID auf ein Verzeichnis besser zu verstehen. Nehmen wir ein Verzeichnis namens Sample_Directory
, das der Benutzerin carol
und der Gruppe users
gehört, mit der folgenden Berechtigungsstruktur:
$ ls -ldh Sample_Directory/ drwxr-xr-x 2 carol users 4,0K Jan 18 17:06 Sample_Directory/
Wechseln wir nun in dieses Verzeichnis und legen mit dem Befehl touch
eine leere Datei darin an. Das Ergebnis lautet:
$ cd Sample_Directory/ $ touch newfile $ ls -lh newfile -rw-r--r-- 1 carol carol 0 Jan 18 17:11 newfile
Die Datei gehört also der Benutzerin carol
und der Gruppe carol
. Wäre für das Verzeichnis die SGID-Berechtigung gesetzt, wäre das Ergebnis ein anderes. Setzen wir also zunächst das SGID-Bit für Sample_Directory
und prüfen das Ergebnis:
$ sudo chmod g+s Sample_Directory/ $ ls -ldh Sample_Directory/ drwxr-sr-x 2 carol users 4,0K Jan 18 17:17 Sample_Directory/
Das s
bei den Gruppenberechtigungen zeigt an, dass das SGID-Bit gesetzt ist. Nun wechseln wir in dieses Verzeichnis und legen wieder eine leere Datei mit dem Befehl touch
an:
$ cd Sample_Directory/ $ touch emptyfile $ ls -lh emptyfile -rw-r--r-- 1 carol users 0 Jan 18 17:20 emptyfile
Die Gruppe, der die Datei gehört, lautet nun users
, weil die Datei durch das SGID-Bit den Gruppeneigentümer users
des übergeordneten Verzeichnisses erbt.
SetUID
SUID, auch bekannt als Set User ID, hat den oktalen Wert 4
und wird durch ein s
bei den user-Berechtigungen im symbolischen Modus dargestellt. Es gilt nur für Dateien und hat keine Auswirkungen auf Verzeichnisse. Es verhält sich ähnlich wie das SGID-Bit, aber der Prozess wird mit den Berechtigungen des Benutzers, der die Datei besitzt, ausgeführt. Dateien mit dem SUID-Bit haben in der Ausgabe von ls -l
ein s
anstelle des x
bei den Berechtigungen für den Benutzer:
$ ls -ld test.sh -rwsr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Sie können mehrere spezielle Berechtigungen in einem Parameter kombinieren. Um etwa SGID (Wert 2
) und SUID (Wert 4
) im oktalen Modus für das Skript test.sh
mit der Berechtigung 755
zu setzen, geben Sie ein:
$ chmod 6755 test.sh
Das Ergebnis lautet:
$ ls -lh test.sh -rwsr-sr-x 1 carol carol 66 Jan 18 17:29 test.sh
Tip
|
Wenn Ihr Terminal Farben unterstützt, und das tun heute die meisten, sehen Sie unmittelbar, ob die speziellen Berechtigungen gesetzt sind, indem Sie einen Blick auf die Ausgabe von |
Geführte Übungen
-
Erstellen Sie ein Verzeichnis namens
emptydir
mit dem Befehlmkdir emptydir
. Listen Sie nun mitls
die Berechtigungen für das Verzeichnisemptydir
auf. -
Erzeugen Sie eine leere Datei namens
emptyfile
mit dem Befehltouch emptyfile
. Fügen Sie nun mitchmod
im symbolischen Modus Ausführungsberechtigungen für den Eigentümer der Dateiemptyfile
hinzu und entfernen Sie Schreib- und Ausführungsberechtigungen für alle anderen. Erledigen Sie dies mit nur einemchmod
-Befehl. -
Wie lauten die Standardberechtigungen für eine Datei, wenn der Wert
umask
auf027
gesetzt ist? -
Nehmen wir an, eine Datei namens
test.sh
ist ein Shellskript mit den folgenden Berechtigungen und Besitzverhältnissen:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Welche Berechtigungen hat der Eigentümer der Datei?
-
Wie lautet die Syntax von
chmod
in Oktalschreibweise, um die für diese Datei gewährte Sonderberechtigung zu entfernen?
-
-
Betrachten Sie folgende Datei:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Von welchem Dateityp ist
sdb1
? Wer ist berechtigt, diese Datei zu schreiben? -
Betrachten Sie die folgenden 4 Dateien:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Notieren Sie die entsprechenden Berechtigungen für jede Datei und jedes Verzeichnis im Oktalmodus unter Verwendung der 4-stelligen Notation.
Another_Directory
foo.bar
HugeFile.zip
Sample_Directory
Offene Übungen
-
Versuchen Sie dies in einem Terminal: Erstellen Sie eine leere Datei namens
emptyfile
mit dem Befehltouch emptyfile
. Nun setzen Sie die Berechtigungen für die Datei mitchmod 000 emptyfile
zurück. Was passiert, wenn Sie die Berechtigungen füremptyfile
ändern, indem Sie nur einen Wert fürchmod
im oktalen Modus übergeben, wie beispielsweisechmod 4 emptyfile
? Und wenn Sie zwei verwenden, wie inchmod 44 emptyfile
? Was können wir über die Art und Weise lernen, wiechmod
den numerischen Wert interpretiert? -
Betrachten Sie die Berechtigungen für das temporäre Verzeichnis
/tmp
auf einem Linux-System:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Benutzer, Gruppe und andere haben volle Berechtigungen. Aber kann ein normaler Benutzer beliebige Dateien innerhalb dieses Verzeichnisses löschen? Warum ist dies der Fall?
-
Eine Datei namens
test.sh
hat die folgenden Berechtigungen:-rwsr-xr-x
, d. h. das SUID-Bit ist gesetzt. Führen Sie nun die folgenden Befehle aus:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Was haben wir getan? Was bedeutet der Großbuchstabe
S
? -
Wie würden Sie ein Verzeichnis mit dem Namen
Box
erstellen, in dem alle Dateien automatisch Eigentum der Gruppeusers
sind und nur von dem Benutzer gelöscht werden können, der sie erstellt hat?
Zusammenfassung
In dieser Lektion haben Sie gelernt, wie man mit ls
Informationen über Dateirechte erhält (und deutet), wie man mit chmod
kontrolliert oder ändert, wer eine Datei erstellen, löschen oder ändern darf (sowohl im oktalen als auch im symbolischen Modus), wie man mit chown
und chgrp
den Eigentümer von Dateien ändert und wie man mit umask
die Maske der Standardrechte für Dateien und Verzeichnisse abfragt und ändert.
Die folgenden Befehle wurden in dieser Lektion besprochen:
ls
-
Dateien auflisten, optional mit Details wie Berechtigungen.
chmod
-
Ändern der Berechtigungen einer Datei oder eines Verzeichnisses.
chown
-
Ändern des besitzenden Benutzers und/oder der Gruppe einer Datei oder eines Verzeichnisses.
chgrp
-
Ändern der Eigentümergruppe einer Datei oder eines Verzeichnisses.
umask
-
Abfragen bzw. Setzen der Standardberechtigungsmaske für Dateien und Verzeichnisse.
Lösungen zu den geführten Übungen
-
Erstellen Sie ein Verzeichnis namens
emptydir
mit dem Befehlmkdir emptydir
. Listen Sie nun mitls
die Berechtigungen für das Verzeichnisemptydir
auf.Fügen Sie den Parameter
-d
zuls
hinzu, um die Dateiattribute eines Verzeichnisses zu sehen statt dessen Inhalt aufzulisten. Die Antwort lautet also:ls -l -d emptydir
Bonuspunkte gibt es, wenn Sie die beiden Parameter in einem zusammenfassen, wie in
ls -ld emptydir
. -
Erzeugen Sie eine leere Datei namens
emptyfile
mit dem Befehltouch emptyfile
. Fügen Sie nun mitchmod
im symbolischen Modus Ausführungsberechtigungen für den Eigentümer der Dateiemptyfile
hinzu und entfernen Sie Schreib- und Ausführungsberechtigungen für alle anderen. Erledigen Sie dies mit nur einemchmod
-Befehl.Stellen Sie sich das so vor:
-
“Für den Benutzer (
u
), dem die Datei gehört, füge (+
) Ausführungsrechte (x
) hinzu”, alsou+x
. -
“Für die Gruppe (
g
) und andere Benutzer (o
), entferne (-
) Schreib- (w
) und Ausführungsrechte (x
)”, alsogo-wx
.Um die beiden Berechtigungssätze zu kombinieren, fügen wir ein Komma zwischen beiden ein. Das Ergebnis lautet also:
chmod u+x,go-wx emptyfile
-
-
Wie lauten die Standardberechtigungen für eine Datei, wenn der Wert
umask
auf027
gesetzt ist?Die Berechtigungen lauten:
rw-r-----
-
Nehmen wir an, eine Datei namens
test.sh
ist ein Shellskript mit den folgenden Berechtigungen und Besitzverhältnissen:-rwxr-sr-x 1 carol root 33 Dec 11 10:36 test.sh
-
Welche Berechtigungen hat der Eigentümer der Datei?
Die Berechtigungen für den Besitzer (zweites bis viertes Zeichen in der Ausgabe von
ls -l
) sindrwx
, also lautet die Antwort: “Berechtigt zum Lesen, zum Schreiben und zum Ausführen der Datei.”. -
Wie lautet die Syntax von
chmod
in Oktalschreibweise, um die für diese Datei gewährte Sonderberechtigung zu entfernen?Wir können die speziellen Berechtigungen aufheben, indem wir als vierte Ziffer
0
anchmod
übergeben. Die aktuellen Berechtigungen sind755
, also lautet der Befehlchmod 0755
.
-
-
Betrachten Sie folgende Datei:
$ ls -l /dev/sdb1 brw-rw---- 1 root disk 8, 17 Dec 21 18:51 /dev/sdb1
Von welchem Dateityp ist
sdb1
? Wer ist berechtigt, diese Datei zu schreiben?Das erste Zeichen in der Ausgabe von
ls -l
zeigt den Typ der Datei an.b
steht für ein Blockgerät, in der Regel eine (interne oder externe) Festplatte, die mit dem Rechner verbunden ist. Der Eigentümer (root
) und alle Mitglieder der Gruppedisk
können diese Festplatte beschreiben. -
Betrachten Sie die folgenden 4 Dateien:
drwxr-xr-t 2 carol carol 4,0K Dec 20 18:46 Another_Directory ----r--r-- 1 carol carol 0 Dec 11 10:55 foo.bar -rw-rw-r-- 1 carol carol 1,2G Dec 20 18:22 HugeFile.zip drwxr-sr-x 2 carol users 4,0K Jan 18 17:26 Sample_Directory
Notieren Sie die entsprechenden Berechtigungen für jede Datei und jedes Verzeichnis im Oktalmodus unter Verwendung der 4-stelligen Notation.
Die entsprechenden Berechtigungen lauten im Oktalmodus wie folgt:
Another_Directory
1755
.1
für das Sticky Bit,755
für die Standardberechtigungen (rwx
für den Eigentümer,r-x
für die Gruppe und alle anderen).foo.bar
0044
. Keine speziellen Berechtigungen (da das erste Zeichen0
ist), keine Berechtigungen für den Eigentümer (---
) und nur Leseberechtigungen (r—r--
) für die Gruppe sowie alle anderen.HugeFile.zip
0664
. Keine speziellen Berechtigungen, da das erste Zeichen0
lautet.6
(rw-
) für den Eigentümer und die Gruppe,4
(r--
) für alle anderen.Sample_Directory
2755
.2
für das SGID-Bit,7
(rwx
) für den Eigentümer,5
(r-x
) für die Gruppe und alle anderen.
Lösungen zu den offenen Übungen
-
Versuchen Sie dies in einem Terminal: Erstellen Sie eine leere Datei namens
emptyfile
mit dem Befehltouch emptyfile
. Nun setzen Sie die Berechtigungen für die Datei mitchmod 000 emptyfile
zurück. Was passiert, wenn Sie die Berechtigungen füremptyfile
ändern, indem Sie nur einen Wert fürchmod
im oktalen Modus übergeben, wie beispielsweisechmod 4 emptyfile
? Und wenn Sie zwei verwenden, wie inchmod 44 emptyfile
? Was können wir über die Art und Weise lernen, wiechmod
den numerischen Wert interpretiert?Erinnern Sie sich daran, dass wir die Berechtigungen für
emptyfile
“auf Null” gesetzt haben. Sein Anfangszustand wäre also:---------- 1 carol carol 0 Dec 11 10:55 emptyfile
Lassen Sie uns nun den ersten Befehl ausprobieren,
chmod 4 emptyfile
:$ chmod 4 emptyfile $ ls -l emptyfile -------r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Die Berechtigungen für andere wurden geändert. Was geschieht, wenn wir es mit zwei Ziffern versuchen, wie in
chmod 44 emptyfile
?$ chmod 44 emptyfile $ ls -l emptyfile ----r--r-- 1 carol carol 0 Dec 11 10:55 emptyfile
Nun waren die Berechtigungen für die Gruppe und den Rest der Welt betroffen. Daraus können wir schließen, dass
chmod
im Oktalmodus den Wert “rückwärts” liest, von der niederwertigsten Stelle (andere) zur höchstwertigen (Benutzer). Wenn Sie eine Ziffer übergeben, ändern Sie die Berechtigungen nur für den Rest der Welt. Mit zwei Ziffern ändern Sie die Berechtigungen für die Gruppe und den Rest der Welt, mit drei Ziffern ändern Sie die Berechtigungen für den Benutzer, die Gruppe und den Rest der Welt, und mit vier Ziffern ändern Sie die Berechtigungen für den Benutzer, die Gruppe, den Rest der Welt und die speziellen Berechtigungen. -
Betrachten Sie die Berechtigungen für das temporäre Verzeichnis
/tmp
auf einem Linux-System:$ ls -l /tmp drwxrwxrwt 19 root root 16K Dec 21 18:58 tmp
Benutzer, Gruppe und andere haben volle Berechtigungen. Aber kann ein normaler Benutzer beliebige Dateien innerhalb dieses Verzeichnisses löschen? Warum ist dies der Fall?
/tmp
ist das, was wir ein weltweit beschreibbares Verzeichnis nennen, was bedeutet, dass jeder Benutzer darauf schreiben kann. Aber wir wollen nicht, dass ein Benutzer die von anderen erstellten Dateien durcheinanderbringt, also ist das Sticky Bit gesetzt (wie durch dast
bei den Berechtigungen für den Rest der Welt angezeigt). Das bedeutet, dass ein Benutzer Dateien auf/tmp
löschen kann, aber nur solche, die er selbst angelegt hat. -
Eine Datei namens
test.sh
hat die folgenden Berechtigungen:-rwsr-xr-x
, d. h. das SUID-Bit ist gesetzt. Führen Sie nun die folgenden Befehle aus:$ chmod u-x test.sh $ ls -l test.sh -rwSr-xr-x 1 carol carol 33 Dec 11 10:36 test.sh
Was haben wir getan? Was bedeutet der Großbuchstabe
S
?Wir haben die Ausführungsrechte für den Benutzer, dem die Datei gehört, entfernt. Das
s
(odert
) ersetzt dasx
in der Ausgabe vonls -l
, also braucht das System eine Möglichkeit, um anzuzeigen, ob der Benutzer Ausführungsrechte hat oder nicht. Dies geschieht durch die Unterscheidung von Groß- und Kleinschreibung des Sonderzeichens.Ein kleines
s
in der ersten Gruppe von Berechtigungen bedeutet, dass der Benutzer, dem die Datei gehört, über Ausführungsberechtigungen verfügt und dass das SUID-Bit gesetzt ist. Ein großesS
bedeutet, dass der Benutzer, dem die Datei gehört, keine Ausführungsberechtigung hat und dass das SUID-Bit gesetzt ist.Dasselbe gilt für SGID. Ein kleines
s
in der zweiten Gruppe von Berechtigungen bedeutet, dass die Gruppe, der die Datei gehört, Ausführungsrechte hat und dass das SGID-Bit gesetzt ist. Ein großesS
bedeutet, dass die Gruppe, der die Datei gehört, keine Ausführungsberechtigung hat und dass das SGID-Bit gesetzt ist.Dies gilt auch für das Sticky Bit, das durch das
t
in der dritten Gruppe von Berechtigungen dargestellt wird. Ein kleingeschriebenest
bedeutet, dass das Sticky Bit gesetzt ist und dass andere Benutzer Ausführungsrechte haben. Ein großesT
bedeutet, dass das Sticky Bit gesetzt ist und der Rest der Welt keine Ausführungsrechte hat. -
Wie würden Sie ein Verzeichnis mit dem Namen
Box
erstellen, in dem alle Dateien automatisch Eigentum der Gruppeusers
sind und nur von dem Benutzer gelöscht werden können, der sie erstellt hat?Dies ist ein mehrstufiger Prozess. Der erste Schritt besteht darin, das Verzeichnis zu erstellen:
$ mkdir Box
Wir möchten, dass jede Datei, die in diesem Verzeichnis erstellt wird, automatisch der Gruppe
users
zugewiesen wird. Dies können wir erreichen, indem wir diese Gruppe als Eigentümer des Verzeichnisses festlegen und dann das SGID-Bit dafür setzen. Wir müssen auch sicherstellen, dass jedes Mitglied der Gruppe in dieses Verzeichnis schreiben kann.Da wir uns nicht um die anderen Berechtigungen kümmern und nur die speziellen Bits ändern wollen, ist es sinnvoll, den symbolischen Modus zu verwenden:
$ chown :users Box/ $ chmod g+wxs Box/
Beachten Sie, dass Sie, wenn Ihr aktueller Benutzer nicht zur Gruppe
users
gehört, den Befehlsudo
vor den obigen Befehlen setzen müssen, um die Änderung als root durchzuführen.Nun zum letzten Teil, in dem wir sicherstellen, dass nur der Benutzer, der eine Datei erstellt hat, diese löschen darf. Dies geschieht durch das Setzen des Sticky Bits (dargestellt durch ein
t
) für das Verzeichnis. Denken Sie daran, dass es bei den Berechtigungen für alle anderen (o
) gesetzt ist.$ chmod o+t Box/
Die Berechtigungen für das Verzeichnis
Box
sollten wie folgt lauten:drwxrwsr-t 2 carol users 4,0K Jan 18 19:09 Box
Natürlich können SGID und das Sticky Bit mit nur einem Aufruf von
chmod
gesetzt werden:$ chmod g+wxs,o+t Box/
Bonuspunkt, wenn Sie daran gedacht haben.