Zugriffsrecht: Unterschied zwischen den Versionen

Aus Mikiwiki
Wechseln zu: Navigation, Suche
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
Ein <b>Zugriffsrecht</b> (auch: Dateirecht) bezeichnet in der elektronischen Datenverarbeitung normalerweise eine Regel der administrativen Zugriffskontrolle, nach der entschieden wird, ob und wie Benutzer, Programme oder Programmteile, Operationen auf Objekten (etwa Netzwerke, Drucker, Dateisysteme) ausführen dürfen. Am geläufigsten ist dieses Konzept bei Dateisystemberechtigungen, wo festgelegt wird, welche Benutzer welche Dateien und Verzeichnisse lesen, schreiben, ändern oder ausführen dürfen.
 
Ein <b>Zugriffsrecht</b> (auch: Dateirecht) bezeichnet in der elektronischen Datenverarbeitung normalerweise eine Regel der administrativen Zugriffskontrolle, nach der entschieden wird, ob und wie Benutzer, Programme oder Programmteile, Operationen auf Objekten (etwa Netzwerke, Drucker, Dateisysteme) ausführen dürfen. Am geläufigsten ist dieses Konzept bei Dateisystemberechtigungen, wo festgelegt wird, welche Benutzer welche Dateien und Verzeichnisse lesen, schreiben, ändern oder ausführen dürfen.
  
Das bis in alle Einzelheiten mögliche Setzen von Zugriffsrechten macht [[Linux]] zu einem besonderen [[Betriebssystem]]: Weil genau festgelegt ist, wer Daten lesen, verändern oder bestimmte Programme ausführen darf, ist ein guter Schutz vor unbefugtem Zugriff sowie vor versehentlich oder absichtlich herbeigeführten Fehlkonfigurationen möglich.
+
[[Linux]] ermöglicht bis in alle Einzelheiten das Setzen von Zugriffsrechten und verschafft so guten Schutz vor unbefugtem Zugriff sowie vor versehentlich oder absichtlich herbeigeführten Fehlkonfigurationen:
 +
* das <b>Leserecht</b> legt fest, wer Daten lesen darf
 +
* das <b>Schreibrecht</b> legt fest, wer Daten verändern darf
 +
* das <b>Ausführrecht</b> legt fest, wer bestimmte Programme ausführen darf
  
Der Systemverwalter "root" darf alles und verteilt die Rechte zum Lesen, Schreiben und Ausführen systemweit an die anderen Benutzer. Als Eigentümer von Dateien oder Verzeichnissen können diese bei Bedarf für andere Benutzer freigegeben werden.
+
Der Systemverwalter "root" darf alles und verteilt die Lese-, Schreib- und Ausführrechte systemweit an die anderen Benutzer. Als Eigentümer von Dateien oder Verzeichnissen können diese bei Bedarf für andere Benutzer freigegeben werden.
  
Unter Linux ist für jede Datei (also auch für [[Verzeichnis]]se, [[Gerätedatei]]en usw.) genau festgelegt, wer sie lesen, schreiben und ausführen darf. Jede Datei gehört ausserdem einen Benutzer sowie zu einer Gruppe.
+
Unter Linux ist für jede [[Datei]] (also auch für [[Verzeichnisse]], [[Gerätedateien]] usw.) genau festgelegt, wer sie lesen, schreiben und ausführen darf. Jede Datei gehört ausserdem einem Eigentümer sowie zu einer Gruppe.
  
 
Zum Setzen und Verändern der Zugriffsrechte dienen folgende Befehle:
 
Zum Setzen und Verändern der Zugriffsrechte dienen folgende Befehle:
 
* [[chgrp]] zum Ändern der Gruppenzugehörigkeit
 
* [[chgrp]] zum Ändern der Gruppenzugehörigkeit
 
* [[chmod]] zum Ändern der die Zugriffsrechte von Dateien und Verzeichnissen
 
* [[chmod]] zum Ändern der die Zugriffsrechte von Dateien und Verzeichnissen
* [[chown]]
+
* [[chown]] zum Ändern des Eigentümers
 
* [[groups]] zum Anzeigen der eigenen Gruppenzugehörigkeit
 
* [[groups]] zum Anzeigen der eigenen Gruppenzugehörigkeit
 
* [[umask]]
 
* [[umask]]
Zeile 19: Zeile 22:
  
 
{| class=wikitable width=100%
 
{| class=wikitable width=100%
| width=10% | <tt>r</tt> || (read) lesen || <b>Leserecht:</b> Der Benutzer darf den Inhalt einer Datei oder eines Verzeichnisses auf dem Bildschirm anzeigen oder kopieren und anderes mehr.
+
| width=5% | <tt>r</tt> || (read) lesen || <b>Leserecht:</b> Der Benutzer darf den Inhalt einer Datei oder eines Verzeichnisses auf dem Bildschirm anzeigen oder kopieren und anderes mehr.
 
|-
 
|-
 
| <tt>w</tt> || (write) schreiben || <b>Schreibrecht:</b> Der Benutzer darf die Dateien und Verzeichnisse veränderun und die Änderungen auch speichern. Ebenso ist das Löschen erlaubt.
 
| <tt>w</tt> || (write) schreiben || <b>Schreibrecht:</b> Der Benutzer darf die Dateien und Verzeichnisse veränderun und die Änderungen auch speichern. Ebenso ist das Löschen erlaubt.
Zeile 29: Zeile 32:
  
 
{| class=wikitable width=100%
 
{| class=wikitable width=100%
| width=10% | <tt>l</tt> || (locking) sperren || Lesen und schreiben dieser Datei sind gesperrt.
+
| width=5% | <tt>l</tt> || (locking) sperren || Lesen und schreiben dieser Datei sind gesperrt.
 
|-
 
|-
 
| <tt>s</tt> || setUID-bit (oktal 4000) || Das Programm wird mit den Rechten des Eigentümers und/oder der Gruppe ausgeführt. Ein Programm, das auf SUID "root" gesetzt ist, wird also immer als Benutzer "root" ausgeführt, selbst wenn ein normaler Benutzer es verwendet. Viele Programme (z. B. [[mount]], [[passwd]], [[su]], [[sudo]]) benötigen das setUID-Bit.
 
| <tt>s</tt> || setUID-bit (oktal 4000) || Das Programm wird mit den Rechten des Eigentümers und/oder der Gruppe ausgeführt. Ein Programm, das auf SUID "root" gesetzt ist, wird also immer als Benutzer "root" ausgeführt, selbst wenn ein normaler Benutzer es verwendet. Viele Programme (z. B. [[mount]], [[passwd]], [[su]], [[sudo]]) benötigen das setUID-Bit.
Zeile 49: Zeile 52:
 
=== Beispiele ===
 
=== Beispiele ===
  
Datei "/usr/bin/passwd".
+
<b>Datei "/usr/bin/passwd".</b> "passwd" läuft hier unter der UID von Benutzer "root" und schreibt in die Datei "/etc/shadow". Benutzer "root" hat dort also Schreibrecht.
  
 
  -rwsr-xr-x root shadow
 
  -rwsr-xr-x root shadow
  
"passwd" läuft hier unter der UID von Benutzer "root" und schreibt in die Datei "/etc/shadow". Benutzer "root" hat dort also Schreibrecht. Datei "/etc/shadow".
+
<b>Datei "/etc/shadow".</b>
  
 
  -rw-r----- root shadow
 
  -rw-r----- root shadow
Zeile 71: Zeile 74:
 
Das Programm soll von mehreren Benutzern genutzt werden können. Der Benutzer "xyz" lässt das Programm also unter seiner UID laufen. Das Programm läuft während der Programmausführung unter SGID (also unter Gruppe "appl" - ohne das setGID-bit würde es unter UID und GID des Benutzers laufen). Das x-bit am Ende wird benötigt, damit der Benuter "xyz" das Programm überhaupt ausführen kann.
 
Das Programm soll von mehreren Benutzern genutzt werden können. Der Benutzer "xyz" lässt das Programm also unter seiner UID laufen. Das Programm läuft während der Programmausführung unter SGID (also unter Gruppe "appl" - ohne das setGID-bit würde es unter UID und GID des Benutzers laufen). Das x-bit am Ende wird benötigt, damit der Benuter "xyz" das Programm überhaupt ausführen kann.
  
<tt>drwxrwxrwx </tt>- enthaltene Dateien dürfen von jedem Benutzer gelöscht werden
+
Enthaltene Dateien dürfen von jedem Benutzer gelöscht werden.
  
<tt>drwxrwxrw<b>t</b> </tt>- enthaltene Dateien dürfen ausschliesslich vom Dateibesitzer gelöscht werden. Dieses flag (sog. "sticky bit") kann mit "chmod 1777" ausschliesslich durch den Verzeichnisbesitzer gesetzt oder verändert werden.
+
drwxrwxrwx
 +
 
 +
Enthaltene Dateien dürfen ausschliesslich vom Dateibesitzer gelöscht werden. Dieses flag (sog. "sticky bit") kann mit "chmod 1777" ausschliesslich durch den Verzeichnisbesitzer gesetzt oder verändert werden.
 +
 
 +
drwxrwxrw<b>t</b>
  
 
== Tipps ==
 
== Tipps ==
Zeile 106: Zeile 113:
 
* kann Links nicht behandeln, diese gehen also verloren
 
* kann Links nicht behandeln, diese gehen also verloren
  
Dieser Befehl ist also insbesondere für Systembereiche unbrauchbar. Ein besserer Befehl ist der folgende.
+
Dieser Befehl ist also insbesondere für Systembereiche unbrauchbar.
 +
 
 +
Ein besserer Befehl ist der folgende. Er behält die bestehenden Zugriffsrechte bei (Option "p"), schreibt nach [[stdout]] und kopiert dabei ausschliesslich Dateien, die nicht mit Punkt anfangen (um diese zu kopieren muss "tar cpf - ." verwendet werden). Der zweite Teil des Befehls behält die bestehenden Zugriffsrechte bei (Option "p") und liest von [[stdin]].
  
 
  $ <b>(cd /source; tar cpf - *) | (cd /target; tar xpf -)</b>
 
  $ <b>(cd /source; tar cpf - *) | (cd /target; tar xpf -)</b>
 
Dieser Befehl behält die bestehenden Zugriffsrechte bei (Option "p"), schreibt nach [[stdout]] und kopiert dabei ausschliesslich Dateien, die nicht mit Punkt anfangen (um diese zu kopieren muss "tar cpf - ." verwendet werden). Der zweite Teil des Befehls behält die bestehenden Zugriffsrechte bei (Option "p") und liest von [[stdin]].
 
  
 
== Weblinks ==
 
== Weblinks ==
  
{{dewi|Zugriffsrecht|Zugriffsrecht}}
+
{{Weblinks}}
 +
{{url_dewikipedia|Zugriffsrecht|Zugriffsrecht}}
 +
{{Fuss}}
  
  

Aktuelle Version vom 3. Oktober 2011, 12:21 Uhr

Ein Zugriffsrecht (auch: Dateirecht) bezeichnet in der elektronischen Datenverarbeitung normalerweise eine Regel der administrativen Zugriffskontrolle, nach der entschieden wird, ob und wie Benutzer, Programme oder Programmteile, Operationen auf Objekten (etwa Netzwerke, Drucker, Dateisysteme) ausführen dürfen. Am geläufigsten ist dieses Konzept bei Dateisystemberechtigungen, wo festgelegt wird, welche Benutzer welche Dateien und Verzeichnisse lesen, schreiben, ändern oder ausführen dürfen.

Linux ermöglicht bis in alle Einzelheiten das Setzen von Zugriffsrechten und verschafft so guten Schutz vor unbefugtem Zugriff sowie vor versehentlich oder absichtlich herbeigeführten Fehlkonfigurationen:

  • das Leserecht legt fest, wer Daten lesen darf
  • das Schreibrecht legt fest, wer Daten verändern darf
  • das Ausführrecht legt fest, wer bestimmte Programme ausführen darf

Der Systemverwalter "root" darf alles und verteilt die Lese-, Schreib- und Ausführrechte systemweit an die anderen Benutzer. Als Eigentümer von Dateien oder Verzeichnissen können diese bei Bedarf für andere Benutzer freigegeben werden.

Unter Linux ist für jede Datei (also auch für Verzeichnisse, Gerätedateien usw.) genau festgelegt, wer sie lesen, schreiben und ausführen darf. Jede Datei gehört ausserdem einem Eigentümer sowie zu einer Gruppe.

Zum Setzen und Verändern der Zugriffsrechte dienen folgende Befehle:

  • chgrp zum Ändern der Gruppenzugehörigkeit
  • chmod zum Ändern der die Zugriffsrechte von Dateien und Verzeichnissen
  • chown zum Ändern des Eigentümers
  • groups zum Anzeigen der eigenen Gruppenzugehörigkeit
  • umask
  • getfacl - get file access control lists
  • setfacl - set file access control lists

Die Zeichen 2 bis 10 der Ausgabe von "ls -l" bezeichnen in Dreiergruppen die Zugriffsrechte des Eigentümers (user), Gruppe (group) und allen anderen Benutzern (other).

r (read) lesen Leserecht: Der Benutzer darf den Inhalt einer Datei oder eines Verzeichnisses auf dem Bildschirm anzeigen oder kopieren und anderes mehr.
w (write) schreiben Schreibrecht: Der Benutzer darf die Dateien und Verzeichnisse veränderun und die Änderungen auch speichern. Ebenso ist das Löschen erlaubt.
x (execute) ausführen Ausführrecht: Für Programme heisst das, dass der Benutzer sie ausführen darf. Im Fall eines Verzeichnisses bedeutet dieses Recht, dass der Benutzer in es hineinwechseln darf - zusätzlich muss hier das Leserecht bestehen, damit auch der Verzeichnisinhalt angesehen werden darf.

Folgende Zusatzangaben gelten nur für ausführbare Dateien (setzbar für Benutzer und/oder Gruppe).

l (locking) sperren Lesen und schreiben dieser Datei sind gesperrt.
s setUID-bit (oktal 4000) Das Programm wird mit den Rechten des Eigentümers und/oder der Gruppe ausgeführt. Ein Programm, das auf SUID "root" gesetzt ist, wird also immer als Benutzer "root" ausgeführt, selbst wenn ein normaler Benutzer es verwendet. Viele Programme (z. B. mount, passwd, su, sudo) benötigen das setUID-Bit.

4755 entspricht den Zugriffsrechten rwsr-xr-x.

S setGID-bit (oktal 2000) Beispielsweise können die Benutzer "video" und "audio" in der Gruppe "media" zusammengefasst werden. Wird nun ein neues Verzeichnis angelegt, so kann dies der Gruppe "media" zugeordnet werden. Wird dazu auch das setGID-bit gesetzt, so gehören alle neu angelegten Verzeichnisse in diesem Verzeichnis danach zu dieser Gruppe.

6551 entspricht den Zugriffsrechten r-sr-s--x.

t sticky bit (oktal 1000) Zusatzangabe für ausführbare Dateien (setzbar für Eigentümer und/oder Gruppe). Eine mit diesem Bit versehenes Programm bleibt auch nach der Ausführung im Arbeitsspeicher, anstatt wie üblich den Speicher wieder freizugeben. Das beschleunigt den Start von oft benutzten Programmen.

Für Verzeichnisse hat das Sticky Bit eine andere Bedeutung: Gewöhnlich kann ein Benutzer jede Datei in einem Verzeichnis, für das er Schreibrechte besitzt, löschen, auch wenn die Datei einem anderen Benutzer gehört. Für Sammelverzeichnisse (z. B. "/tmp") wird deshalb das Sticky Bit gesetzt: trotz Schreibrecht im Verzeichnis können nun alle Benutzer nur noch ihre eigenen Dateien löschen. Der Eigentümer eines Verzeichnisses kann die enthaltenen Dateien aber in jedem Fall löschen.

$ ls -ld /tmp
drwxrwxrwt 18 root root 4096 2007-06-15 07:35 /tmp

Inhaltsverzeichnis

Beispiele

Datei "/usr/bin/passwd". "passwd" läuft hier unter der UID von Benutzer "root" und schreibt in die Datei "/etc/shadow". Benutzer "root" hat dort also Schreibrecht.

-rwsr-xr-x root shadow

Datei "/etc/shadow".

-rw-r----- root shadow

Vorhanden ist Benutzer "xyz" in Gruppe "abc".

Dateien:

-rw-rw--- progx appl

Andere Benutzer haben also keinen Zugriff (z. B. "/var/mail/mik").

Programme:

-r-x--s--x

Das Programm soll von mehreren Benutzern genutzt werden können. Der Benutzer "xyz" lässt das Programm also unter seiner UID laufen. Das Programm läuft während der Programmausführung unter SGID (also unter Gruppe "appl" - ohne das setGID-bit würde es unter UID und GID des Benutzers laufen). Das x-bit am Ende wird benötigt, damit der Benuter "xyz" das Programm überhaupt ausführen kann.

Enthaltene Dateien dürfen von jedem Benutzer gelöscht werden.

drwxrwxrwx

Enthaltene Dateien dürfen ausschliesslich vom Dateibesitzer gelöscht werden. Dieses flag (sog. "sticky bit") kann mit "chmod 1777" ausschliesslich durch den Verzeichnisbesitzer gesetzt oder verändert werden.

drwxrwxrwt

Tipps

Anzeige aller Dateien, deren setUID-bit gesetzt ist.

# find / -perm +4000

Anzeige aller Dateien im Verzeichnis "/usr", die dem Benutzer "root" gehören und deren setUID-bit gesetzt ist. Fehlermeldungen werden unterdrückt.

# find /usr \( -perm -4000 -a -user root \) -print 2>/dev/null

Anzeige aller Dateien im Verzeichnis "/usr", die dem Benutzer "root" gehören und deren setUID-bit gesetzt ist. Anzeige aller Informationen. Fehlermeldungen werden unterdrückt.

find /usr \( -perm -4000 -a -user root \) -ls 2>/dev/null

Anzeige aller Dateien in $PATH, deren setUID-bit gesetzt ist.

# find $(echo $PATH | tr ':' ' ') -type f -perm +4000

Um sich vor SUID- und SGID-basierten Angriffen zu schützen:

  • Nur wenige Programme müssen SUID-gesetzt sein. Diesen Programmen sollte eine eigene Gruppe zugewiesen werden.
  • SUID-Dateien sollen keinesfalls schreibbar sein.
  • Der Modus von SUID-Programmen, die nicht unbedingt SUID-gesetzt sein müssen, sollte geändert werden ("chmod -s program").
  • Unnütze oder unwichtige SUID-Programme sollten deinstalliert oder gelöscht werden.

Zugriffsrechte können beim Kopieren mit cp oder beim Packen mit zip (unabsichtlich) verändert werden!

Der Befehl "cp -r source destination" ist unbrauchbar: er kopiert rekursiv, wobei

  • die umask zählt (fällt weg bei "cp -pr source destination")
  • ändert die Dateibesitzer und -gruppen (fällt mit "cp -pr source destination" nur teilweise weg)
  • kann Links nicht behandeln, diese gehen also verloren

Dieser Befehl ist also insbesondere für Systembereiche unbrauchbar.

Ein besserer Befehl ist der folgende. Er behält die bestehenden Zugriffsrechte bei (Option "p"), schreibt nach stdout und kopiert dabei ausschliesslich Dateien, die nicht mit Punkt anfangen (um diese zu kopieren muss "tar cpf - ." verwendet werden). Der zweite Teil des Befehls behält die bestehenden Zugriffsrechte bei (Option "p") und liest von stdin.

$ (cd /source; tar cpf - *) | (cd /target; tar xpf -)

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger Zugriffsrechtwbm Enzyklopädischer Artikel