Zugriffsrechte: Unterschied zwischen den Versionen

Aus Linupedia.org
Wechseln zu: Navigation, Suche
K (Verzeichnisse)
(Verzeichnissberechtigungen erweitert)
Zeile 83: Zeile 83:
 
* '''Schreibrecht''', Dateien dürfen im Verzeichnis angelegt, umbenannt und gelöscht werden, (Dateinamen dürfen verändert werden)
 
* '''Schreibrecht''', Dateien dürfen im Verzeichnis angelegt, umbenannt und gelöscht werden, (Dateinamen dürfen verändert werden)
 
* '''Ausführungsrecht''', in das Verzeichnis darf gewechselt (betreten) werden
 
* '''Ausführungsrecht''', in das Verzeichnis darf gewechselt (betreten) werden
 +
 +
Will man in ein durch einen Pfad angegebenes Verzeichnis wechseln, so muss man das Ausführungsrecht für alle Verzeichnisse in diesem Pfad besitzen. Ist das Ausführungsrecht nicht gegeben, kann in diesem Verzeichniss auch keine Zuordnung von Dateinamen zur Inode erfolgen und somit auch kein Lesen, Schreiben oder Ausführen der Dateien in diesem Verzeichniss erfolgen, egal wie die Zugriffsrechte der dortigen Dateien gesetzt ist. Ähnliches gilt für fehlendes Leserecht im Verzeichniss, ist es nicht gesetzt kommt man eventuell über das Ausführungsrecht in das Verzeichniss, kann dort aber die Dateinamen nicht auflösen. Auch ein '''find''' Befehl würde hier mit einer Fehlermeldung abgewiesen. Allerdings wenn man dort den Namen eines Verzeichnisses kennt ''(mit '''ls''' anzeigen geht ja nicht)'' kann man in dieses Verzeichniss wechseln, sofern dort die Ausführungsrechte gesetzt sind und auch auf Dateien unterhalb dieses Verzeichnisses hat man wieder vollen Zugriff entsprechend der gesetzten Zugriffsrechte der Dateien. Man kann also so ganze Dateibäume vor neugierigen Blicken verstecken, ohne den Zugang zu bekannten Dateien innerhalb dieses Dateibaumes zu verbauen. ''(Linuxneulingen ist aber dringend anzuraten auf solche Methoden bei Verzeichnissen zu verzichten, wenn sie nicht wirklich sicher sind, welche weiteren Nebenwirkungen zB auf ein Backup damit verbunden sind)''   
  
 
Dieses zeigt, die Zugriffsrechte der Verzeichnisse sind ebenso wichtig, wie die Zugriffsrechte auf die Dateien selbst. ZB kann wer Schreibrechte in einem Verzeichnis hat, dort auch jede Datei löschen, auch wenn er für diese Dateien sonst überhaupt keine Rechte hat. Wer aber nur das Schreibrecht auf eine Datei hat, aber nicht das Schreibrecht im Verzeichniss, kann zwar in einer Datei Zeilen oder den gesammten Inhalt löschen, den Dateinamen mit dessen Bezug auf die Inode allerdings nicht.
 
Dieses zeigt, die Zugriffsrechte der Verzeichnisse sind ebenso wichtig, wie die Zugriffsrechte auf die Dateien selbst. ZB kann wer Schreibrechte in einem Verzeichnis hat, dort auch jede Datei löschen, auch wenn er für diese Dateien sonst überhaupt keine Rechte hat. Wer aber nur das Schreibrecht auf eine Datei hat, aber nicht das Schreibrecht im Verzeichniss, kann zwar in einer Datei Zeilen oder den gesammten Inhalt löschen, den Dateinamen mit dessen Bezug auf die Inode allerdings nicht.

Version vom 23. Oktober 2006, 01:19 Uhr

Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.

Robi 23:23, 20. Okt 2006 (CEST)


Die Zugriffsrechte unter Linux/Unix sind im Grunde recht einfach aufgebaut. Einfach heißt hier aber auf keinen Fall wenig wirkungsvoll und wenig variabel. Der prinzipielle Aufbau und die Anwendung der Zugriffsrechte auf Dateien gehört zum absolutem Grundwissen für alle, die sich mit Linux beschäftigen und sollte daher im Schlaf beherrscht werden. Zugriffsrechte besitzen aber nicht nur Dateien, sondern auch Prozesse. Die Zugriffsrechte der Prozesse sind vom Grundprinzip ähnlich, wenn auch in der Gesamtheit etwas komplizierter aufgebaut, wie die Zugriffsrechte auf Dateien.


Aufbau der Zugriffsrechten für Dateien

Jede einzelne Datei in einem Linux oder UNIX-System - also nicht nur normale Dateien sondern auch Verzeichnisse, Gerätedateien, Pipes und Sockets besitzen in ihrer Inode neben der Kennung zum Dateitype und verschiedene Zeitstempel auch zwingend die Einträge über die Eigentumsrechte und Zugriffsrechte auf die Datei. Die Eigentumsverhältisse einer Datei sind spezifiziert in genau einem Eigentümer und genau einer Benutzergruppe. Die Zugriffsrechte sind 3 teilig gestaffelt und beziehen sich auf

  • Eigentümer (User) genau dieser Datei
  • Gruppenmitglieder (Gruppe) Angehörige der Gruppe genau dieser Datei
  • alle Anderen die nicht User oder Gruppe sind also auf den Rest der Welt (Andere)

User haben genau eine Primäre Gruppe, können aber zusätzlich noch mehreren Sekundären Gruppen angehören. Für die Gruppen-Zugriffsrechte auf die Dateien ist es nicht von Bedeutung ob der User primär oder sekundär über die Gruppenrechte verfügt.


Der Befehl ls -l Dateiname zeigt für jede einzelne Datei die Angaben über Besitz und Zugriffsrechte

-rw-rw-r--   1 otto     wiki         1916 Jul 29  2006 ftp.wiki

Das erste Zeichen der Ausgabe der Zugriffsrechte mittels ls zeigt, um was für eine Datei es sich handelt. Folgende Dateiarten sind definiert:

-	Reguläre (normale) Datei
d	Verzeichnis (directory)
l	Symbolischer Link (symlink)
b	Blockorientierte Gerätedatei (block device)
c	Zeichenorientierte Gerätedatei (character device)
p	Feste Programmverbindung (named pipe)
s	Netzwerk Kommunikationsendpunkt (socket)

Dem ersten Zeichen folgende 9 Zeichen sind die genaue Beschreibung der Zugriffsrechte.

  • die ersten drei Zeichen beschreiben die Rechte des Eigentümers der Datei
  • die nächsten drei die Rechte eines Gruppenmitglieds der Gruppe
  • die letzten drei die Rechte aller Anderen

Für diese drei Kategorien (User, Gruppe, Andere) existiert jeweils die Angabe über die Berechtigung zum

  • lesen (read -> r)
  • schreiben (Write -> w )
  • ausführen (execute -> x)


Das obrige Beispiel bedeutet also:

-rw-rw-r-- 	die Datei ftp.wiki ist eine normale Datei 
otto 		der Eigentümer ist User otto
wiki 		die Gruppe ist wiki
-rw-rw-r-- 	User otto darf diese Datei lesen und schreiben
-rw-rw-r-- 	User die der Gruppe wiki angehören dürfen die Datei lesen und schreiben
-rw-rw-r-- 	Alle anderen dürfen diese Datei nur lesen


Octale Zuweisung der Zugriffsrechte

Diese Rechte können numerisch (octal) dargestellt werden. Dazu werden die Rechte wie folgt bezeichnet:

Octale Zuordnung der Zugriffsrechte
User Gruppe Rest
r w x r w x r w x
4 2 1 4 2 1 4 2 1

Die Nummern werden für jede der drei Kategorien einzeln addiert. Ein Zugriffsrecht von rwxrw-r-- wäre so also numerisch darstellbar als 764.

  • die 7 errechnet sich aus dem r (4) + w (2) + x (1) des Eigentümers
  • die 6 aus dem r (4) + w (2) + - (0) für die Gruppenmitglieder
  • die 4 stammt vom r (4) + 0 + 0 für den Rest der Welt

Für alle die noch etwas unsicher sind und gerne mal etwas mit den Zugriffsrechten üben möchten ein interaktives Helferlein zum spielen.

Interpretation der Zugriffsrechte

normale Dateien

Für normale (reguläre) Dateien sind diese Rechte recht einfach zu interpretieren.

  • Leserecht bedeutet, der Inhalt der Datei kann gelesen und damit zB auch durchsucht werden.
  • Schreibrecht bedeutet, daß der Inhalt der Datei darf verändert werden. Somit kann zB eine Datei erweitert und verändert aber auch eine Datei auf Länge Null, also Leer geändert werden (Inhalt gelöscht)
  • Ausführungsrecht bedeutet, diese Datei kann, sollte es sich um ein Script oder ein Executabel Binär Programm handeln, ausgeführt werden, dazu ist jedoch bei Scripten zusätzlich noch Leserecht erforderlich. (Leserecht wird normaler weise auch für ausführbare Binarprogramme gewährt, damit kann dann jeder User zB. mit dem Befehl file feststellen, um welchen Dateitype es sich handelt oder mit ldd welche shared Librarys zur Ausführung benötigt werden)


Verzeichnisse

Bei Verzeichnissen ist es besonders für den Linuxneuling schwieriger zu verstehen. Die andere Interpretation ist begründet im Aufbau der Verzeichnisdateien, die im Grunde genommen nur normale Textdateien sind, in denen in einer Art Tabelle jeweils ein Dateiname einer Inode zugeordnet ist (Dentry). Bei Verzeichnissen bedeutet:

  • Leserecht, der Inhalt dieses Verzeichnisses darf aufgelistet werden, (also die Dateinamen dürfen gelesen werden)
  • Schreibrecht, Dateien dürfen im Verzeichnis angelegt, umbenannt und gelöscht werden, (Dateinamen dürfen verändert werden)
  • Ausführungsrecht, in das Verzeichnis darf gewechselt (betreten) werden

Will man in ein durch einen Pfad angegebenes Verzeichnis wechseln, so muss man das Ausführungsrecht für alle Verzeichnisse in diesem Pfad besitzen. Ist das Ausführungsrecht nicht gegeben, kann in diesem Verzeichniss auch keine Zuordnung von Dateinamen zur Inode erfolgen und somit auch kein Lesen, Schreiben oder Ausführen der Dateien in diesem Verzeichniss erfolgen, egal wie die Zugriffsrechte der dortigen Dateien gesetzt ist. Ähnliches gilt für fehlendes Leserecht im Verzeichniss, ist es nicht gesetzt kommt man eventuell über das Ausführungsrecht in das Verzeichniss, kann dort aber die Dateinamen nicht auflösen. Auch ein find Befehl würde hier mit einer Fehlermeldung abgewiesen. Allerdings wenn man dort den Namen eines Verzeichnisses kennt (mit ls anzeigen geht ja nicht) kann man in dieses Verzeichniss wechseln, sofern dort die Ausführungsrechte gesetzt sind und auch auf Dateien unterhalb dieses Verzeichnisses hat man wieder vollen Zugriff entsprechend der gesetzten Zugriffsrechte der Dateien. Man kann also so ganze Dateibäume vor neugierigen Blicken verstecken, ohne den Zugang zu bekannten Dateien innerhalb dieses Dateibaumes zu verbauen. (Linuxneulingen ist aber dringend anzuraten auf solche Methoden bei Verzeichnissen zu verzichten, wenn sie nicht wirklich sicher sind, welche weiteren Nebenwirkungen zB auf ein Backup damit verbunden sind)

Dieses zeigt, die Zugriffsrechte der Verzeichnisse sind ebenso wichtig, wie die Zugriffsrechte auf die Dateien selbst. ZB kann wer Schreibrechte in einem Verzeichnis hat, dort auch jede Datei löschen, auch wenn er für diese Dateien sonst überhaupt keine Rechte hat. Wer aber nur das Schreibrecht auf eine Datei hat, aber nicht das Schreibrecht im Verzeichniss, kann zwar in einer Datei Zeilen oder den gesammten Inhalt löschen, den Dateinamen mit dessen Bezug auf die Inode allerdings nicht.

Symbolische Links

Symbolische Links haben immer alle Zugriffsrechte also numerisch 777 und dieses läßt sich auch nicht ändern. Der Zugriff auf Dateien die so verlinkt sind wird damit einzig durch die Zugriffsrechte der eigentlichen Datei bestimmt.


Hard Links

Da Hard Links logisch gesehen nur ein weiterer Name für ein und die selbe Inode sind, die Zugriffsrechte jedoch in der Inode gespeichert sind, können Hardlinks niemals unterschiedliche Besitz oder Zugriffsrechte haben.


Spezielle Rechte

Neben diesen 3x3 Rechten existieren noch drei weitere, die sich numerisch als weitere (führende) Octalziffer darstellt. Dabei handelt es sich um das Set UserID Bit (4), das Set GroupID Bit (2) und das Sticky Bit (1).


Set UserID Bit (SUID)

Dieses Recht gilt ausschließlich für ausführbare Dateien. ( in modernen Linuxsystemen nicht für Scripte ) Hat eine ausführbare Datei dieses Recht gesetzt, so erscheint in der Darstellung durch das ls -l Kommando statt dem x beim Eigentümerrecht ein s. Wird dieses Programm von einem User ausgeführt, bekommt der Prozess die effektive UserID des Users, dem die Datei gehört und nicht wie normal die UserID des Users der das Programm ausführt. Sollte diese Recht gesetzt werden, ohne das auch das Ausführungsrecht des Eigentümers gesetzt ist, erscheint hier ein S, dieses deutet auf logisch unvollständig gesetzte Ausführungsrechte hin.

Das klassische Beispiel: das Programm /usr/bin/passwd hat die Aufgabe, daß auch normale User damit ihr eigenes Passwort ändern können. Dieses Passwort befindet sich jedoch in einer Datei, die nur von root selbst beschrieben werden darf. Somit hat das Programm /usr/bin/passwd deren Eigentümer root ist, das Set UserID Bit gesetzt. Jeder User, der dieses Programm ausführt tut dies jetzt also unter der effektiven UserID von root und hat daher die Rechte von root mit diesem einem Prozess. Das ermöglicht es dem Programm, das Passwort auch zu wirklich zu ändern.

Das ist beim Passwort-Programm nicht problematisch, jedoch können mit diesem Zugriffsrecht richtige Sicherheitslücken entsteht, wenn zB eine Shell mit diesem Bit ausgestattet würde und der Eigentümer root ist, hätte jeder User mit dieser Shell uneingeschränktes Rootrecht. Es gehört zu den Aufgaben des Systemadministrators das System regelmäßig nach derart riskant gesetzten SUID-Bits oder riskanten Kombinationen mit Schreibrechten auf diese Dateien zu durchsuchen.


Set GroupID Bit (SGID)

bei normalen ausführbaren Dateien

Dieses Recht gilt einerseits für ausführbare Dateien und andererseits für Verzeichnisse. Hat ein ausführbares Programm dieses Recht gesetzt, so gilt das Gleiche, wie beim Set UserID Bit, diesmal betrifft es aber die effektive Gruppenmitgleidschaft des Prozesses. Der Prozess bekommt während der Laufzeit die effektive GruppenID der Gruppe, der dieses Programm zugeordnet ist, anstatt seiner eigentlichen GruppenID. Er hat also die Rechte eines Gruppenmitglieds dieser Gruppe, auch wenn er selbst nicht Mitglied in dieser Gruppe ist. Statt dem x beim Gruppenrecht stellt das ls -l Kommando hier ein s dar. Es gilt ebenfalls, sollte das Ausführungsrecht der Gruppe nicht gesetzt sein, erscheint ein S und deutet auf logisch unvollständig gesetzte Berechtigungen hin. Auch diese SGID-Bit sollte im Linux-System unter regelmäßiger Beobachtung des Administrators stehen.


bei Verzeichnissen

Ist dieses Recht auf ein Verzeichnis gesetzt, bewirkt es etwas ganz anders. Legt ein User, der Schreibrecht auf ein Verzeichnis hat, in diesem Verzeichnis eine neue Datei an, so erhält diese Datei im Normalfall immer die Gruppenmitgliedschaft der primären Gruppe dieses Users, der sie angelegt hat. Wenn jedoch zB mehrere User an einem gemeinsamen Projekt arbeiten aber unterschiedliche primären Gruppen angehören, ist das sehr unpraktisch, da der Zugriff auf die gemeinsamen Dateien dann über "Rest der Welt" geregelt werden müssten. Wird auf ein Verzeichnis jedoch dieses SGID gesetzt, dann erhält eine neu angelegte Datei immer die Gruppenzugehörigkeit des Verzeichnisses, unabhängig von der Gruppenzugehörigkeit des Users, der diese Datei anlegt. Mit diesem Mechanismus sind also Arbeitsverzeichnisse für bestimmte Projektgruppen realisierbar. Diese Eigenschaft gilt rekursiv auch für die Unterverzeichnisse, soweit dort nichts anderes konfiguriert ist.


Sticky Bit

Das Sticky Bit hat nur noch eine Bedeutung für Verzeichnisse. (In frühen Linuxversionen gab es auch Funktionen für normale Dateien mit Sticky Bit die spezielle Behandlung solcher Dateien bewirkten) Weiter oben wurde schon ein Problem erwähnt, daß ein User, mit Schreibrecht auf ein Verzeichnis, auch Datein löschen kann, auf die er sonst keine Rechte hat. Hier setzt jetzt dieses Sticky Bit an und verhindert genau das. In einem Verzeichnis in dem dieses Bit gesetzt ist, kann nur der Besitzer dieser Datei und natürlich Root diese Datei löschen. Auch dieses Bit wirkt rekursiv auf alle Unterverzeichnisse. Das Sticky Bit kann nur von Root gesetzt werden und wird bei ls -l als t anstatt des x beim Rest der Welt angezeigt. Ein logisch unvollständig gesetztes Bit wird als T angezeigt.

In einem Verzeichnis, in dem jeder User Schreibrecht haben muß oder soll, wie etwa /tmp , sollte unbedingt dieses Bit gesetzt werden.


Octale Zuweisung der speziellen Zugriffsrechte

Um die speziellen Rechte auch numerisch darzustellen, wird vor den oben genannten "normalen" Rechten noch eine vierte Oktalziffer am Anfang angefügt, so daß sich das folgende Logik ergibt:

Octale Zuordnung der Zugriffs- und Sonderrechte
Sonderrechte User Gruppe Rest
SUID SGID Sticky r w x r w x r w x
4 2 1 4 2 1 4 2 1 4 2 1


Ein Recht von 4755 bedeutet demnach, das Set UserID Bit ist gesetzt (4), der Eigentümer hat Lese-, Schreib- und Ausführungsrechte (1+2+4=7), während sowohl Gruppenmitglieder, als auch der Rest der Welt nur Lese- und Ausführungsrecht (1+4=5) besitzen. Wenn ein User dieses Programm ausführt, erhält dieser Prozess während der Laufzeit die Rechte des Besitzers dieser Datei.


Befehle rund um die Zugriffsrechte

chmod

chmod (change mode) ist der Befehl mit dem Zugriffsrechte von Dateien und Verzeichnissen direkt geändert werden können. Das Recht zum Ändern der Zugriffsrechte hat neben Root nur der Besitzer der Datei.

Die prinzipielle Anwendung ist einfach:

chmod [Optionen] Modus Datei(en)

Als Modus kann entweder ein numerischer (octaler), oder ein symbolischer Modus angegeben werden. Der numerische Modus entspricht dem, was im letzten Abschnitt beschrieben wurde, er kann sowohl 3 als auch 4 stellig angegeben werden. (häufig wird er auch 5 Stellig angegeben mit einer führenden 0 als Kennzeichen für die Shell, daß es sich um einen Octalzahl handelt).

Ein typisches Beispiel für den Aufruf

 chmod 644 foo.txt

würde der Datei foo.txt ein Zugriffsrecht von rw-r--r-- geben. Mit numerischem Modus wird grundsätzlich immer ein absoluter Wert gesetzt, unabhängig, welche Rechte vorher auf die Datei gesetzt waren.


Der symbolische Modus ist mehrteilig und besteht aus einer Angabe

  • für wen die Rechte geändert werden sollen Form von Buchstaben
  • einem Zuweisungszeichen mit dem bestimmt wird, wie die neuen Rechte logisch aus den ursprünglichen und den innerhalb des Befehl verwendeten zusammensetzen sollen
  • und der Rechte die gesetzt oder geändert werden sollen auch in Buchstaben.

Die Grundsätzliche Form ist:

[ugoa]+|-|=[rwxstugo],...

Das führende Zeichen steht für die zu verändernde Kategorie,

  • u steht für User (Eigentümer)
  • g für group (Gruppenmitglied)
  • o für other (Andere)
  • a steht für all (Alle) Wird dieses führende Zeichen weggelassen, dann wird a angenommen.

Es können auch mehrere führende Zeichen kombiniert werden. zB. ug würde interpretiert als Änderen der Rechte von User und Gruppe.

Vorsicht: häufiger Fehler die interpretation von o mit dem Begriff Owner (Eigentümer). Das kann fatale Folgen haben, weil man dann die Rechte, die man eigentlich dem Eigentümer geben will, dem Rest der Welt verleiht!


Das folgende Zuweisungszeichen +, - oder = beschreibt wie die Rechte den schon bestehenden Rechten

  • hinzugefügt (+) werden soll
  • davon abgezogen (-) werden soll
  • oder absolut (=) also genau so gesetzt werden soll

Dem Zuweisungszeichen folgt die Angabe der zu setzenden (oder addierenden oder subtrahierenden) Rechte in der Form einer Zeichenkette, die aus den Buchstaben r,w,x,X,s,t,u,g,o bestehen kann.

  • r Read (lesen)
  • w Write (schreiben)
  • x Execute (ausführen)
  • X Execute (ausführen) wird nur für Verzeichnisse gesetzt, für normale Dateien nicht
  • s SUID und SGID je nach Stellung bei User oder Gruppe
  • t Sticky Bit bei Zuweisung zu Rest der Welt


Folgen dieser Angabe noch ein u, g oder o, so bedeutet dies ein Ausschlußkriterium in Verbindung mit dem a am Anfang. Das nachgestellte u, g oder a schützt so die Rechte der User, Gruppenmitglieder bzw. Anderen vor Veränderung. Dieses ist jedoch eine sehr unübersichtliche Schreibweise, und sollte nur in Ausnahmefällen verwendet werden.

Diese Angaben können auch mehrmals, jeweils mit Komma getrennt, in einem Befehl angewandt werden, wichtig jedoch der gesamte symbolische String darf keine Leerzeichen enthalten.

Ein typischer Beispielaufruf:

 chmod u=rwx,g=rx,o-rwx foo

setzt für User rwx und für die Gruppe r-x und nimmt allen Anderen eventuell gesetzte Rechte. Als Ergebniss resultiert in Jedem Fall das Recht rwxr-x---. Oftmals einfacher ist hier die Benutzung der Octalwerte (hier 750)

Praktisch an der symbolischen Angabe der Modi ist die Fähigkeit, bestimmte Rechte auf die bestehenden Rechte aufzuaddieren bzw. sie von den bestehenden Rechten abzuziehen. Ein einfaches +x bedeutet z.B., daß allen drei Kategorien User, Group und Other ein Ausführungsrecht zu den schon vorhandenen Rechten gegeben wird.

Eine Wichtige Option von chmod ist -R oder --recursive, damit kann chmod die Rechte eines ganzen Verzeichnisbaumes mit nur einem Befehl ändern.


umask

Mit umask werden die Zugriffsberechtigungen für neue Dateien bestimmt. Damit wird abgefragt bzw. festgelegt, welche Zugriffsberechtigungen beim Anlegen einer Datei verwendet werden. Die Anwendung ist aber auf den ersten Blick verwirrend und etwas merkwürdig.

  • Der Befehl umask ist ein Shellbuildin, er ist also fest in die Shell eingebaut. Obwohl die prinzipielle Funktion in allen Shell gleich ist, sprechen wir hier von umask der bash.

Zum Setzen der Zugriffsberechtigung erwartet umask eine Maske als Parameter. Das Wort Maske bedeutet hier jedoch, es werden nicht die Werte des Zugriffsmodus angegeben, die gesetzt werden sollen, sondern, sondern umgekehrt, die Werte, die nicht gesetzt (maskiert) werden sollen. Die Maske ist der invertierte Wert der gewünschten Zugriffsrechte.

Die einfachste Möglichkeit die Maske zu ermitteln, besteht darin, die gewünschten oktalen Werte jeweils von 7 abzuziehen.

  • Beispiel : es soll das Zugriffrecht rw-r----- für neue Dateien gesetzt werden.
Diffenz zu 777
7 7 7
Zugriffsrecht 6 4 0
Maske 1 3 7

Die folgende Tabelle soll die Zusammenhänge zwischen Zugriffsrecht und Maske verdeutlichen

Berechnung umask am Beispiel
Zugriffsrechte
User Gruppe Rest
symbolisch r w - r - - - - -
octal einzeln 4 2 0 4 0 0 0 0 0
octal 6 4 0
Maske
User Gruppe Rest
octal 1 3 7
octal einzeln 0 0 1 0 2 1 4 2 1
symbolisch - - x - w x r w x

Hier ist noch kleinen Haken, die Verzeichnisse. Würden wir diese mit dem Modus 640 erstellen, wäre für uns selbst das Durchsuchungs-/Betretungs-Recht (x) nicht gesetzt. Linux hat aus diesem Grund dafür den Mechanismus entwickelt, daß selbst wenn im umask-Kommando das x-Recht gesetzt ist, beim Erzeugen von normalen Dateien dieses Recht nicht gesetzt wird, beim Erzeugen von Verzeichnissen hingegen schon. ( es gibt einige wenige Ausnahmen, zB Kompiler, die ja auführbare binäre Dateien erstellen, diese werden für ausführbare Dateien auch das (x) entsprechend der umask Maske richtig setzen )

Ein vernünftiges umask-Kommando setzt also zumindestens für den Eigentümer auch das x-Recht.
Damit wäre ein typischer Wert für umask z.B. 022 (rwxr-xr-x) oder 027 (rwxr-x---).

Neben der octalen Form gibt es aber auch die symbolische Form, die die Rechte direkt bezeichnet, also nicht invertiert.
Sie wird in der Form u=...,g=...,o=... eingegeben, wobei für ... immer die entsprechenden Rechte eingesetzt werden. Also würde der Befehl

umask u=rwx,g=rx,o=

die gleiche Wirkung haben wie

umask 027

Typischerweise steht eine umask-Anweisung in einer der Shell-Startdateien wie z.B. /etc/profiles oder ~/.profile. Jeder User kann somit seine Voreinstellung also auch selbst einstellen. Eine der wenigen Möglichkeiten, mit denen der User dem Systemverwalter ins Handwerk pfuschen kann, wenn dieser versucht, sein System sicher zu machen. Allerdings bezieht sich diese Einstellung ja dann nur auf die neu anzulegenden Dateien des jeweiligen Users.

Zum Abrufen der aktuelle gesetzten Maske für umask einfach das Komando ohne Maske oder mit der Option -S für den symbolischen Modus aufrufen.

LINUX:/ # umask
0022
LINUX:/ # umask -S
u=rwx,g=rx,o=rx


mount

Der mount Befehl mit den Zugriffsrechte eine besondere Beziehung. Einerseits müssen über das Mounten der Filesysteme auch nicht LINUX-kompatible Zugriffssteuerungen von verschiedenen Filesystemen für Linux kompatibel gemacht werden, andererseits muss über das Mounten verhindert werden, daß zB. Programme und Zugriffsregelungen von den gemounteten Filesystemen ein Sicherheitsrisiko für das System darstellen könnten. Neben den Zugriffsrechten des Mountpointes , spielen hier einige Optionen von mount eine besondere Bedeutung.

  • einige wichtige Optionen von mount in Verbindung mit Zugriffsrechten: selbstverständlich gibt es zu einigen Optionen auch das genaue Gegenteil, die hier allerdings nicht extra aufgeführt werden:
ro 
(read only) egal was für Zugriffsrechte auf dem gemounteten Filesystem gesetzt sind, es kann in diesem Filesystem nur gelesen werden
nodev 
(no devices) eventuell auf dem Filesystem befindliche Geräteknoten werden vom System nicht unterstützt
nosuid 
(no SUID) eventuell auf dem Filesystem befindliche SUID oder SGID werden ignoriert
noexec 
(no execute) eventuell auf dem Filesystem befindliche ausführbare Binärdateien können nicht ausgeführt werden.


  • Für einige Filesystem deren Zugriffsteuerung nicht Linuxkompatibel ist gibt es noch spezielle Optionen:
uid= 
setzt die UserID als Eigentümer der Dateien im Filesystem
gid= 
setzt die GruppenID als Gruppe der Dateien im Filesystem
umask= 
setzt die universal mask mit der die für den jeweiligen Mountpoint gesamten Dateirechte und Verzeichnisrechte vererbbar logisch Nicht-Und verknüft werden
dmask= 
setzt die directorymask mit der die für den jeweiligen Mountpoint gesamten Dateirechte vererbbar logisch Nicht-Und verknüft werden
fmask= 
setzt die filemask mit der die für den jeweiligen Mountpoint gesamten Verzeichnisrechte vererbbar logisch Nicht-Und verknüpft werden
  • Dabei werden die Masken analog zum umask-Befehl auf den jeweiligen Mountpoint und alle darunterliegenden Verzeichnise bzw. Dateien angewandt(=Vererbbarkeit von Rechten) in der Form, daß die mit chmod setzbaren Rechte einfach mit der jeweiligen Maske logisch Nicht-Und verknüpft werden. Ein Beispiel dafür ist eine Datei mit den oktalen Ausgangsberechtigungen 0700 die kombiniert mit umask=0022 nach einem chmod 1777 <Dateiname> die effektiven oktalen Dateirechte 1755 erhält.

Zugriffsrechte beim kopieren und verschieben

Zugriffsrechte bei Eigentumswechsel

Erweiterte Dateiattribute im EXT2-Dateisystem

Access Control Lists unter Linux

Robi 23:23, 20. Okt 2006 (CEST)