[[Vorlage(getestet, general)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Benutzer_und_Gruppen: Benutzer und Gruppen] [:sudo:Root-Rechte] }}} [[Inhaltsverzeichnis(2)]] Dieser Artikel beschreibt die Zugriffsrechte auf Dateien. Bei Linux -- und somit auch Ubuntu -- gehören die Zugriffsrechte zu den vom Kernel verwalteten Metadaten einer Datei. Der Kernel enthält ein virtuelles Dateisystem ([wikipedia:Virtuelles_Dateisystem:VFS], '''V'''irtual '''F'''ile '''S'''ystem), dies ist eine abstrahierende Schicht zur Vereinheitlichung der Eigenschaften [:Dateisystem:realer Dateisysteme]. Die Zugriffsrechte regeln zum Beispiel, welche Benutzer den Inhalt eines Verzeichnisses (ein Verzeichnis ist auch nur eine Datei) lesen darf. Neben dem Leserecht gibt es noch weitere Rechte, mit denen der Zugriff gesteuert werden kann. Die meisten Dateimanager bieten Möglichkeiten, sich über Dateieigenschaften zu informieren und diese auch zu verändern. Ein Ändern ist natürlich nur möglich, wenn man selber die notwendigen Rechte hat und das zugrunde liegende reale Dateisystem dies gestattet. Informationen dazu findet man im Artikel [:Rechte/Dateimanager:]. Für komplexere Anwendungen bietet Linux seit einiger Zeit auch die Möglichkeit, den Zugriff über ACL ('''A'''ccess '''C'''ontrol '''L'''ist) genauer festzulegen. Die ACL müssen explizit aktiviert werden. Ihre Erklärung würde hier zu weit führen; sie ist Gegenstand des Artikels [:ACL:]. Dieser Artikel beschränkt sich auf die durch das VFS realisierten Standardrechte. Die technischen Details des VFS bei Linux kann man in der verlinkten [#Links Dokumentation] des Kernels nachlesen. = Grundlagen = == Dateieigenschaften im VFS == Das VFS ordnet jeder Datei über eindeutig identifizierbare [wikipedia:Inode:Inodes] folgende Eigenschaften zu: * Dateityp (einfache Datei, Verzeichnis, Link, ...): Die Art der möglichen Zugriffsrechte kann vom Dateityp abhängen. * Zugriffsrechte, gegliedert in solche für den Eigentümer, für eine im lokalen System konkrete Arbeitsgruppe und für sonstige Benutzer, d.h. die abstrakte Gruppe „aller anderen Benutzer“ (engl. "others"). Jede Datei kann für jede der drei Benutzerklassen 3 Basisrechte und unabhängig von der Benutzerklasse 3 Sonderrechte vergeben oder verweigern. * Größe, Zeitstempel, Verweis auf Dateiinhalt und weiteres wird hier nicht thematisiert. Viele Eigenschaften einer Datei lassen sich mit dem Befehl [:stat:] abfragen. Reale Dateisysteme realisieren die von ihnen von von Unix-artigen Systemen erwarteten Eigenschaften in unterschiedlichem Umfang und auf unterschiedliche Weise oder auch gar nicht. Beispiele: * Jedes unter Linux gängige UNIX-[:Dateisystem:] (z.B. [:ext:ext2/3/4], [:Btrfs:], xfs usw.) unterstützt die vom VFS vorausgesetzten Eigenschaften. * Gar nicht umgesetzt werden z.B. die Rechte hingegen auf [wikipedia:VFAT:]-Dateisystemen; dort können Eigentümer und Zugriffsrechte lediglich beim Einhängen simuliert werden. * Partitionen mit dem Windows-Dateisystem [wikipedia:NTFS:] werden zwar in Linux standardmäßig ähnlich wie VFAT behandelt; mit speziellen Mount-Optionen lässt sich aber auch bei Dateisystemen des Typs NTFS eine echte Rechteverwaltung wie bei UNIX-Dateisystemen einrichten. Siehe hierzu [:Windows-Partitionen_unter_Linux/#Besitzer-und-Dateirechte:] sowie [:NTFS3/#Zugriffsrechte-unter-Linux:]. == Eigentümer und Arbeitsgruppe == Das VFS (und auch die für Linux üblichen realen Dateisysteme wie z.B. [:ext:ext2/3/4], jedoch nicht z.B. FAT oder [:exFAT:]) kennen die Konzepte des „Eigentümers einer Datei“ und der „Arbeitsgruppe einer Datei“ bzw. „Gruppe der Verwender einer Datei“: * Eigentümer einer Datei ist in der Regel der Ersteller der Datei, jedoch kann dies von einem [:Administrator:] des Systems auch (z.B. mit im Terminal[1][3] mit dem Befehl [:chown:]) verändert werden. * Die Gruppe der Verwender einer Datei ist in der Regel die Hauptgruppe des Erstellers. jedoch kann dies von einem [:Administrator:] des Systems auch (z.B. mit dem Befehl [:chgrp:] oder auch [:chown:]) verändert werden. Auch der Eigentümer einer Datei kann die Arbeitsgruppe ändern, aber nur auf eine, in der er selbst bereits Mitglied ist. Das VFS ermöglicht standardmäßig nur genau eine solche Gruppe; wenn man für mehr als eine Gruppe spezielle Zugriffsrechte vergeben möchte, kann dies mit Hilfe der [:ACL:] erfolgen. Die Zugriffsrechte können für den Eigentümer, die Arbeitsgruppe und für sonstige Benutzer jeweils unabhängig voneinander festgelegt werden, d.h. für den zugreifenden Benutzer[2] ergeben sich abhängig von der Situation jeweils unterschiedliche Ergebnisse: * Benutzer = `root` -> Jeder Zugriff immer möglich. * Benutzer ≠ `root`, aber Benutzer = Eigentümer -> Es gelten die Zugriffsrechte für den Eigentümer. * Benutzer ≠ `root` und Benutzer ≠ Eigentümer, aber Benutzer ∈ Arbeitsgruppe -> Es gelten die Zugriffsrechte für die Arbeitsgruppe. * Benutzer ≠ `root` und Benutzer ≠ Eigentümer und Benutzer ∉ Arbeitsgruppe -> Es gelten die Zugriffsrechte für sonstige Benutzer. Benutzer, Eigentümer und Arbeitsgruppe werden technisch durch numerische Kennungen realisiert. Von Dateimanagern und im Terminal benutzte Namen für Benutzer und Gruppen[2] sind lediglich „übersetzte“ Namen, die nur im lokalen System gelten. Im Dateisystem selber werden diese Klarnamen nicht gespeichert, sondern lediglich ihre mit UID für den Eigentümer und GID für die Arbeitsgruppe bezeichneten numerischen Entsprechungen. == Systemrechte == Jeder Benutzer des Systems hat im System einige Rechte, die bereits aus seiner Eigenschaft als Benutzer resultieren. Diese ergeben sich bei einem unixartigem Betriebssystem wie Linux aus folgendem Regelwerk: * '''''§1 Alles ist eine Datei oder Teil einer Datei.''''' Das gilt auch für Benutzer. Aus Sicht des Systems ist ein Benutzer ein Eintrag in der Benutzerdatenbank, z.B. eine Zeile in der Datei '''/etc/passwd'''. * '''''§2 Jeder Benutzer darf Dateien besitzen.''''' Das wird im VFS durch das Konzept des Eigentümers einer Datei realisiert. Das grundsätzliche Recht zum Besitz impliziert aber nicht, dass jeder Benutzer auch selbst Eigentum erwerben oder veräußern darf, vielmehr wird einem die Eigentümerschaft an einer Datei von der Obrigkeit verliehen und kann auch von und nur von ihr wieder entzogen werden. Der Eigentümer (und außer `root` nur dieser) hat aber das Recht, für seine Datei die Zugriffsrechte zu ändern und ebenso die Arbeitsgruppe, allerdings nur auf eine Gruppe, der er auch selbst angehört. * '''''§3 Der Benutzer `root` darf und kann alles.''''' Das sollte bekannt sein und umfasst natürlich auch die Macht, über das Eigentum anderer beliebig zu verfügen. * '''''§4 Andere Benutzer ≠ `root` dürfen und können jede Datei in genau dem Umfang verwenden, den die betreffende Datei dem jeweiligen Benutzer zugesteht.''''' Daraus ergibt sich die enorme Bedeutung der in diesem Artikel beschriebenen Zugriffsrechte. Nahezu alles, was ein Benutzer im System machen kann, beruht auf dieser Regel. [[Vorlage(Bildunterschrift,Eigenschaften-UNITY.png, 300, Rechteeinstellungen, right)]] [[Anker(Beispiel) ]] = Rechte in symbolischer Darstellung = Im Terminal lassen sich die Rechte mit dem Befehl [:ls:ls -l] anzeigen. Im Folgenden sind als Beispiel die Dateirechte des Verzeichnisses '''/var/mail/''' dargestellt (Befehl: `ls -ldh /var/mail/`): {{{ [mark]drwxrwsr-x[/mark] 2 [mark]root[/mark] [mark]mail[/mark] 4,0K Apr 23 2012 /var/mail/ }}} Für die Darstellung der Rechte sind die markierten Teile der Ausgabe relevant: {{{#!vorlage Tabelle <-4 rowclass="kopf":> Für Zugriffsrechte relevante Informationen von `ls -ldh /var/mail` +++ drwxrwsr-x root mail +++ Der erste Buchstabe kennzeichnet den [:ls#Dateitypen:Dateityp]. Danach folgen die Zugriffsrechte, gegliedert in 3 Teile von jeweils 3 Zeichen: Eigentümer der Datei Arbeitsgruppe sonstige Benutzer +++ d'''rwx'''rwsr-x = Zugriffsrechte des Eigentümers rwx +++ drwx'''rws'''r-x = Zugriffsrechte für Mitglieder der Arbeitsgruppe rws +++ drwxrws'''r-x''' = Zugriffsrechte für „sonstige Benutzer“ r-x }}} Die verschiedenen Zugriffsrechte werden durch unterschiedliche Buchstaben `r w x - s S t T` symbolisiert, deren Bedeutung in den Abschnitten [#Basisrechte Basisrechte] und [#Sonderrechte Sonderrechte] erklärt werden. = Darstellungsarten = Neben der symbolischen Darstellung (z.B. `rwxrwsr-x`) gibt es auch noch eine vierstellige oktale Darstellung (nach dem [wikipedia:Oktalsystem:]): * Die [#Basisrechte Basisrechte] (Lesen, Schreiben, Ausführen) und Kombinationen daraus werden hierbei durch eine einzelne Ziffer in den letzten 3 Stellen repräsentiert und dem Eigentümer, der Arbeitsgruppe und allen Anderen zugeordnet. * Die [#Sonderrechte Sonderrechte] werden in der oktalen Darstellung durch die erste der vier Stellen repräsentiert und haben in der symbolischen Darstellung keinen eigenen Platz, sondern werden durch andere Buchstaben als `x` an dessen Stelle angegeben. Wenn keine Sonderrechte vergeben wurden, verzichtet man bei der oktalen Darstellung oft auf die Angabe der führenden `0`. Je nach Anwendung wird bei Anzeige oder Änderung von unterschiedlichen Grundwerten ausgegangen und entweder Rechte gegeben oder entzogen. Dabei sind die die anzugebenden Werte je nach Anwendung unterschiedlich: * Das Programm [:chmod:] modifiziert für bestehende Dateien die vorgefundenen Dateirechte wie beim Aufruf angegeben. * Das Programm [:umask:] wirkt gar nicht auf existierenden Dateien, sondern geht von „alle Basisrechte vorhanden“ (`0777`) aus und entfernt daraus die beim Aufruf angegebenen Rechte für zukünftig erstellte Dateien. Siehe: [#Standard-Einstellung-und-Maskierung Abschnitt Standard Einstellung und Maskierung] {{{#!vorlage Tabelle Mögliche Werte für Kombinationen von Basisrechten bei regulären Dateien +++ Rechte chmod (oktal) umask (oktal) Symbolisch Binäre Entsprechung +++ Lesen, Schreiben und Ausführen 7 0 rwx 111 +++ Lesen und Schreiben 6 1 rw- 110 +++ Lesen und Ausführen 5 2 r-x 101 +++ Nur Lesen 4 3 r-- 100 +++ Schreiben und Ausführen 3 4 -wx 011 +++ Nur Schreiben 2 5 -w- 010 +++ Nur Ausführen 1 6 --x 001 +++ Keine Rechte 0 7 --- 000 }}} Bei Ordnern bzw. Verzeichnissen gilt vorstehende Tabelle für reguläre Dateien sinngemäß, lediglich ist das Wort „Ausführen“ zu ersetzen durch „Auswerten“, bzw. meistens „Durchsuchen“ genannt. Man benötigt dieses Recht, um in einem Ordner den bekannten Dateinamen in die Nummer des Inode der Datei übersetzen zu dürfen. Ohne Kenntnis des Inode ist Zugriff auf den Inhalt der Datei unmöglich. Wer den Inhalt eines Ordners ansehen will, benötigt das Leserecht für den Ordner; wer in einem Ordner eine neue Datei anlegen oder eine bestehende Datei umbenennen, verschieben oder löschen möchte, benötigt das Schreibrecht für den Ordner. Hier ein paar Beispiele: * `rwxrwxrwx` entspricht `0777` (`chmod`) oder `0000` (`umask`): Jeder darf lesen, schreiben und ausführen. * `rwxr-xr-x` entspricht `0755` (`chmod`) oder `0022` (`umask`): Jeder darf lesen und ausführen, aber nur der Eigentümer der Datei darf diese Datei (oder das Verzeichnis) auch verändern. Die folgenden Beispiele behandeln zusätzlich die [#Sonderrechte Sonderrechte]. Diese Rechte können nicht per `umask` vorherbestimmt werden: * `rwsr-xr-x` entspricht `4755` (`chmod`): Jeder darf lesen und ausführen, aber nur der Eigentümer darf diese Datei oder das Verzeichnis verändern. Zusätzlich ist noch das Sonderrecht SUID gesetzt. * `rwxrwx--T` entspricht `1770` (`chmod`): Nur sinnvoll bei Ordnern. Der Eigentümer und Mitglieder der Arbeitsgruppe dürfen lesen und schreiben. Zusätzlich ist das Sticky-Bit gesetzt (aber nicht das Auswerterecht für sonstige Benutzer, daher ein großes `T`). Diese Kombination führt dazu, dass jedes Mitglied der Arbeitsgruppe neue Dateien anlegen kann, die dem anlegenden Benutzer gehören und daher von anderen Mitgliedern der Arbeitsgruppe nicht gelöscht werden können. {{{#!vorlage Experten Alle Rechte werden durch entsprechend gesetzte Bits repräsentiert. Mit der Wertigkeit der gewünschten Bits kann dann entsprechend der oktale Wert errechnet werden. {{{#!vorlage Tabelle Recht Wert Recht Wert +++ Lesen 4 SUID 4 +++ Schreiben 2 SGID 2 +++ Ausführen 1 Sticky 1 \}}} }}} == Basisrechte == {{{#!vorlage Tabelle [[Bild(kde_rechte.jpeg,300)]] +++ <:>[[Bild(eigenschaften_kde_erw.png, 300)]] +++ <:>Rechteeinstellungen bei KDE }}} Die Basisrechte umfassen: * Lesen * Schreiben * Ausführen (nur bei regulären Dateien) mit den Systemrechten des zugreifenden Benutzers * Auswerten bzw. Durchsuchen (nur bei Ordnern) Nach dem Dateityp kommen drei Zeichengruppen zu je drei Zeichen. Diese kennzeichnen die Zugriffsrechte für die Datei bzw. das Verzeichnis. Ein bestehendes Recht wird als Buchstabe, und ein verweigertes Recht wird als „`-`“ angezeigt. Im [#Beispiel obigen Beispiel] teilt man nach dem Dateityp die Zeichenfolge `rwxrwsr-x` so auf: * `rwx`: Rechte des Eigentümers * `rws`: Rechte für Arbeitsgruppe * `r-x`: Rechte für sonstige Benutzer (others) Die folgende Tabelle erklärt die Bedeutung der einzelnen Buchstaben, Diese stehen immer in der gleichen Reihenfolge: {{{#!vorlage Tabelle <-4: rowclass=titel> Symbole für Basisrechte +++ Zeichen Bedeutung Beschreibung +++ 1 `r` Lesen ('''r'''ead) Erlaubt lesenden Zugriff auf die Datei. Bei einem Verzeichnis können damit die Namen der enthaltenen Dateien und Ordner abgerufen werden (nicht jedoch deren weitere Daten wie z.B. Eigentümer, Änderungszeitpunkte, Dateiinhalt etc.). +++ 2 `w` Schreiben ('''w'''rite) Erlaubt schreibenden Zugriff auf eine Datei. Für ein Verzeichnis gesetzt, können Dateien oder Unterverzeichnisse angelegt oder gelöscht werden, sowie die Eigenschaften der enthaltenen Dateien/Verzeichnisse verändert werden. +++ <|3>3 `x` Ausführen (e'''x'''ecute) Erlaubt das Ausführen, also Starten der Datei als Programm bzw. Durchsuchen eines Ordners. +++ `s` oder `t` auch Sonderrecht Ausführen/Auswerten wie `x`, zusätzlich besteht ein [#Sonderrechte Sonderrecht]. +++ `S` oder `T` nur Sonderrecht Es besteht ein Sonderrecht, aber kein Basisrecht zum Ausführen bzw. Auswerten. }}} In dem [#Beispiel Beispiel oben] darf der Eigentümer alles mit der Datei machen (Lesen, Schreiben, Ausführen); ebenso Mitglieder der Arbeitsgruppe. Jeder andere darf Lesen und Ausführen. Zusätzlich gilt [#Sonderrechte SGID]. {{{#!vorlage Warnung Außerhalb seines Heimverzeichnisses und des Verzeichnisses '''/tmp''' für temporäre Dateien sollte man mit dem Ändern von Dateirechten sehr vorsichtig sein. Dass viele Dateien und Verzeichnisse `root` gehören und sich deshalb mit Benutzerrechten nicht verändern lassen, hat seinen Grund. Gerade unerfahrene Benutzer ruinieren sich ihr System, wenn sie unvorsichtig die Rechte von solchen Dateien ändern. }}} == Sonderrechte == Für besondere Anwendungen gibt es noch drei zusätzliche Dateirechte: * Set-UID oder auch SUID-Bit oder auch SUID-Recht oder kurz SUID: Programm mit den Systemrechten des Eigentümers der Datei ausführen. * Set-GID oder auch SGID-Bit oder auch SGID-Recht oder kurz SGID: * bei Programmen: Ausführen mit den Rechten der Arbeitsgruppe der Datei. * bei Ordnern: Arbeitsgruppe des Ordners an darin neu erstellte Objekte vererben. * Sticky Bit: Vergabe dieser Sonderrechte kann zu Sicherheitsproblemen führen. {{{#!vorlage Tabelle <-4: rowclass=titel> Symbole für Sonderrechte +++ Zeichen Bedeutung Beschreibung +++ `s (S)` SUID Steht für „Setze Eigentümerkennung“ und sorgt bei einer Datei mit Ausführungsrechten dafür, dass dieses Programm __immer__ mit den Rechten des Eigentümers der Datei läuft. Bei Ordnern ist dieses Bit ohne Bedeutung, da es aus technischen Gründen nicht funktioniert. +++ `s (S)` SGID Steht für „Setze Gruppenkennung“ und sorgt bei einer Datei mit Ausführungsrechten dafür, dass dieses Programm __immer__ mit den Rechten der Arbeitsgruppe läuft. Bei einem Ordner sorgt es dafür, dass die Arbeitsgruppe an Unterordner und Dateien vererbt wird, die in diesem Ordner neu erstellt werden. +++ `t (T)` Sticky-Bit Das Sticky-Bit („Klebrig“) wird auf modernen Systemen nur noch bei Ordnern angewandt und erzwingt, dass darin erstellte Dateien oder Verzeichnisse nur vom jeweiligen Eigentümer gelöscht oder umbenannt werden können. Verwendet wird dies z.B. für '''/tmp'''. Der Eigentümer des Hauptordners behält allerdings das Recht zum Umbenennen und Löschen. In den meisten Fällen macht es nur Sinn bei Ordnern mit Schreibrecht für Arbeitsgruppe oder „sonstige Benutzer“ (z.B. `1777`), um zu verhindern, dass andere Benutzer untergeordnete „fremde“ Dateien oder Ordner löschen oder umbenennen. }}} Die Symbole für die Sonderrechte erscheinen an der dritten Stelle der Zugriffsrechte, die normalerweise dem Zeichen `x` (für executable) vorbehalten ist, und ersetzen ggf. dieses. SUID und SGID werden anstelle des `x` für den Eigentümer bzw. die Arbeitsgruppe angezeigt, das Sticky-Bit anstelle des `x` für sonstige Benutzer. Wenn das entsprechende Ausführungsrecht auch gesetzt ist, wird ein Kleinbuchstabe verwendet, ansonsten ein Großbuchstabe. Die Sonderrechte werden zwar bei der symbolischen Darstellung der Rechte jeweils innerhalb der Angaben für eine Benutzerklasse notiert, gelten jedoch für alle drei Benutzerklassen. Für weitere Einzelheiten zu den Sonderrechten siehe auch [wikipedia:Setuid:], [wikipedia:Setgid:] und [wikipedia:Sticky Bit:]. {{{#!vorlage Warnung Vor allem SUID sollte nur mit __äußerster Vorsicht__ angewandt werden! Bei Dateien im Eigentum von `root` ist SUID zu setzen besonders gefährlich, denn dann kann jeder diese mit dessen Rechten bzw. Fähigkeiten starten. Schwachstellen im jeweiligen Programm können dann dazu ausgenutzt werden, vollständigen Root-Zugriff auf das gesamte System zu bekommen. Nur bei wenigen Programmen, die darauf ausgelegt sind, ist dieses Bit gesetzt (z.B. `sudo` oder `su`). }}} {{{#!vorlage Hinweis Bei Shellskripten wird SUID aus Sicherheitsgründen ignoriert, vgl. auch [https://unix.stackexchange.com/a/2910/7775 Allow setuid on shell scripts] {en}. }}} [[Anker(umask)]] = Standard-Einstellung und Maskierung = In jedem Ubuntu-System gibt es für jeden Benutzer einen individuellen Standardwert für die Zugriffsrechte bei neu erstellten Ordnern und Dateien. Dieser wird bei der Anmeldung des Benutzers gesetzt. Er kann in einem Terminal mit dem Befehl [:umask:] abgefragt und auch temporär geändert werden. {{{#!vorlage Tabelle Befehl Ausgabe Beschreibung +++ umask {{{0002\}}} Darstellung als Oktalzahl. Die erste der vier Ziffern repräsentiert hierbei [#Sonderrechte Sonderrechte], die anderen drei die [#Basisrechte Basisrechte] für Eigentümer, Arbeitsgruppe und sonstige Benutzer. Dies ist eine Anzeige der für neue Dateien verweigerten (!) Rechte. +++ umask -S {{{u=rwx,g=rwx,o=rx\}}} Darstellung in symbolischer Form. Das „u=“ steht für "user" (Eigentümer), das „g=“ für "group" (Arbeitsgruppe) und das „o=“ für "other" (sonstige Benutzer). Hinter dem Gleichheitszeichen stehen die jeweiligen Rechte. Dies ist eine Anzeige der tatsächlich für neue Dateien vorgesehenen Rechte. }}} Der Artikel [:umask:] beschreibt Möglichkeiten zu temporären oder dauerhaften Änderung des Wertes. = Datei ausführbar machen = Mitunter muss man eine (heruntergeladene) Datei ausführbar machen. Am einfachsten geht das in einem [:Dateimanager:] mit [[Vorlage(Tasten, rmb)]] ''"Eigenschaften -> Zugriffsrechte (bzw. Berechtigungen)"''. Mehr Information in [:Rechte/Dateimanager:] und [:chmod:]. = Links = == Intern == * [:Benutzer und Gruppen:] {Übersicht} Grundlagenartikel * [:chmod:] -- Dateirechte ändern * [:chown:] -- Eigentümer einer Datei ändern * [:chgrp:] -- Arbeitsgruppe einer Datei ändern * [:umask:] -- Vorgabewert für die Dateirechte neuer Dateien anzeigen, ändern und bei der Anmeldung vorgeben * [:ACL:] -- Gezielte Festlegung ergänzender Rechte mittels ACL (für fortgeschrittene Benutzer) == Extern == * [wikipedia:Unix-Dateirechte:] * [https://www.kernel.org/doc/html/latest/filesystems/index.html Filesystems in the Linux kernel] {en} -- Dokumentation VFS bei Linux # tag: Einsteiger, Übersicht, Sicherheit, Grundlagen