chmod und chown

Heute ein sehr wichtiges Thema: Zugriffsrechte ("permissions"). Unix ist seit je her ein Multiuser-System. D.h., dass das System verschiedene Benutzer kennt, die voneinander abgeschottet sind, sich also nicht gegenseitig Dateien beschreiben oder lesen können...

Das Unix Permission System ist relativ einfach aufgebaut und daher auch leicht zu verstehen.

Grundlagen:

* Es gibt User. Der Username ist gleich dem Loginnamen.

* Es gibt Gruppen. Jeder User kann einer oder mehreren Gruppen angehören. (z.B. kann man allen Usern die auf einem Computer die Soundkarte benutzten dürfen der Gruppe "audio" zuordnen.. )

* Für jede Datei und jedes Verzeichnis ist festgelegt, welchem User und welcher Gruppe sie gehört. (Und zwar immer genau EINEM User und EINER Gruppe.)

* Für jede Datei ist festgelegt, ob der User dem die Datei gehört diese schreiben, lesen und/oder ausführen darf. Ebenso, ob Mitglieder der Gruppe der diese Datei gehört die Datei lesen, schreiben oder ausführen dürfen. Weiters kann man allen anderen, die nicht dieser Gruppe angehören ebenfalls Rechte auf die Datei geben. Und zwar wieder lesen, schreiben und ausführen.

* Für Verzeichnisse kann man festlegen wer die Verzeichnisse lesen kann (sieht welche Dateien dort drinnen sind). Wer die Verzeichnisse schreiben kann (in diesem Verzeichnis eigene Dateien anlegen darf). "Ausführen" kann man Verzeichnisse nicht, diese Eigenschaft wird daher für einen anderen Zweck verwendet: mit den "Ausfuehrrechten" für ein Verzeichnis kann man mit einem Schlag den Zugriff auf alle darunterliegenden Dateien sprerren.


Soweit zur Theorie. Sehen wir uns das mal an:

ls -l /bin/cat

Das -l zeigt uns auch die Zugriffsrechte für die Dateien "cat". (Das ist das Programm, das aufgerufen wird, wenn wir cat eintippen). Die Rechte könnten etwa so aussehen:

-rwxr-xr-x    1 root     root         9668 Mar  8  2001 /bin/cat
 \ /\ /\ /      |         |
  |  |  |       |         \_> gruppe
  |  |  |       \__> user
  |  |  \_> others
  |  \__> gruppen rechte
  \_> user rechte

Das erste Stricherl gibt an, ob es eine normale Datei ist (-) oder ein Verzeichniss (dann würde ein "d" für Directory dort stehen). Oder eine Spezialdatei (darüber lernen wir später)

Die nächsten 3 Punke (hier rwx) geben die Rechte des Users an. Der User dem diese Datei gehört, darf sie also r....lesen (read) und w... schreiben (write) und auch x...ausführen (execute)

Die Gruppe, der diese Datei gehört, darf sie nur lesen und ausführen (r-x). Alle anderen ebenso nur lesen und ausführen (r-x).

Im obigen Fall gehört die Datei dem User "root" und auch einer Gruppe namens "root".

Schauen wir uns mal eine Datei in unserem Homverzeichniss an. Wir können ja z.b. bla.txt anlegen (falls sie noch nicht existiert):

touch bla.txt
ls -l bla.txt
-rw-r----- 1 mond users 0 Nov 27 14:55 bla.txt

Hier heisst der User dieser Datei "mond". Die Gruppe heisst "users". Und die Zugriffsrechte erlauben dem User mond das lesen und schreiben und den Mitgliedern der Gruppe "users" das lesen. Alle anderen dürfen gar nichts.

Um den Eigentümer einer Datei zu ändern, gibt es den Befehl "chown". Eigentümer ändern darf aber im Allgemeinen nur der Superuser (root).

chown sonne bla.txt

würde den Eigentuemer der Datei bla.txt auf "sonne" ändern. (Falls es einen User mit diesem Namen am System gibt)

chown sonne.gestirne bla.txt

würde zusätzlich noch die Gruppe auf den Namen "gestirne" ändern. (Falls es so eine Gruppe auf deinem System überhaupt gibt)

Welche Gruppen angelegt sind, kannst du dir mit

less /etc/group

ansehen. Dort ist jeder Gruppe eine interne Gruppennummer ("groupid" oder
kurz "gid") zugeordnet.

Zum Ändern der Zugriffsrechte dient der Befehl "chmod" (change mode).

Bei chmod kann man entweder in einer 3stelligen Oktalzahl das rwxr-xr-- Muster angeben. (Wäre in diesem Falle 754); aber einfacher ist folgende Verwendung des chmod Befehls:

chmod u+rx bla.txt

würde dem User (u) Schreib und Ausführungsrechte geben (+rx)

chmod go+w bla.txt

würde der Gruppe (g) und allen anderen (o für others) ein Schreibrecht gewähren.

chmod o-w bla.txt

würde allen anderen (o) die Schreibrechte entziehen.

chmod ugo-x bla.txt

entzieht allen (user group und others) die Ausführungsrechte.

etc...etc..

Legen wir jetzt ein Verzeichnis an:

mkdir blabla

Mit

chmod ug+rx blabla

erlauben wir dem User und der Gruppe das lesen des blabla Verzeichnisses (diese Leute können also ein "ls" in diesem Verzeichnis machen.

Mit

chmod o-rx blabla

sperren wir das Lesen des Verzeichnisses für alle anderen (-r) und mit dem (-x) sperren wir auch den Zugriff auf alle unterhalb des Verzeichnisses liegenden Dateien (unabhängig davon, ob der Zugriff bei diesen Dateien eventuell dort erlaubt wäre)

ACHTUNG beim "w" für Directories: jemand der das "w" Recht auf ein Verzeichnis hat, darf auch Dateien in diesem Verzeichnis löschen, unabhängig davon, ob er Rechte auf die Datei selbst hat.

Es gibt dann noch einige Sonderrechte (s und t), darüber lernen wir aber später mehr..

Nützlich in diesem Zusammenhang sind auch noch die Befehle:

groups

zeigt dir an, in welcher oder welchen Gruppen du momentan selbst bist.

su - sonne

macht dich zum User "sonne", falls es einen solchen auf deinem System gibt, vorausgesetzt du kennst das Passwort dafür.


EXERCISES:

* Schau dir mit ls -l die Zugriffsrechte von verschieden Dateien in deinem Homeverzeichniss und in anderen Verzeichissen des Systems an. Versuche zu interpretieren, was diese Rechte bedeuten (wem gehört die Datei? Welcher Gruppe gehört die Datei?) Was dürfen die Mitglieder der Gruppe? Was darf der Eigentümer?

* Lege dir in deinem Homeverzeichniss ein Verzeichnis und eine Datei an und vergieb verschiedene Zugriffsrechte mithilfe des chmod-Befehls an andere. Schau dir mit ls -l an, ob der chmod-Befehl erfolgreich war. Frage andere User, ob sie die Datei wirklich lesen oder schreiben können, so wie du es geplant hast. Wenn du selbst einen anderen User auf dem System hast dann kannst du mit su - auf diesen User hinwechseln.


REFERENCES:

man chmod
man chown
man groups
man su