Linux/Zugriffsrechte: Unterschied zwischen den Versionen

Aus Foxwiki
Subpages:
K Textersetzung - „Kurzbeschreibung“ durch „Beschreibung“
 
(43 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== UNIX-Zugriffsrechte ==
'''topic''' - Beschreibung
== Beschreibung ==
; UNIX-Zugriffsrechte
Um den Zugriff auf Dateien zu regeln, können die Rechte an den Besitzer, die Gruppe und alle anderen vergeben werden.


[[Image:Grafik2.png|right]]Um den Zugriff auf Dateien zu regeln, können die Rechte an den Besitzer, die Gruppe und alle anderen vergeben werden.
{|class="wikitable"
 
 
{| style="border-spacing:0;margin:auto;width:8.227cm;"
|-
|-
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''r'''</tt>
| | '''r'''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | read (Lesen)
| | read (Lesen)
|-
|-
| align=center style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''w'''</tt>
| | '''w'''
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | write (Schreiben)
| | write (Schreiben)
|-
|-
| align=center style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''x'''</tt>
| | '''x'''
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | e'''x'''ecute (Ausführen)
| | e'''x'''ecute (Ausführen)
|-
|-
|}
|}
<div style="text-align:center;"></div>


{| style="border-spacing:0;margin:auto;width:8.227cm;"
{|class="wikitable"
|-
|-
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''R'''</tt>
| '''R'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''W'''</tt>
| | '''W'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''X'''</tt>
| | '''X'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''R'''</tt>
| | '''R'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''W'''</tt>
| | '''W'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''X'''</tt>
| | '''X'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''R'''</tt>
| | '''R'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''W'''</tt>
| | '''W'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''X'''</tt>
| | '''X'''
|-
|-
| colspan="3"  align=center style="border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | '''u'''ser
| colspan="3"  | '''u'''ser
| colspan="3"  align=center style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | '''g'''roup
| colspan="3"  | '''g'''roup
| colspan="3"  align=center style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0cm;padding-left:0.3cm;padding-right:0.3cm;" | '''o'''thers
| colspan="3"  | '''o'''thers
|-
|-
|}
|}
Diese können mit dem Befehl ls -l angezeigt werden.
<div style="margin-left:0cm;margin-right:0cm;">> ls -l
-rw-r-----  1 dirkw privat  2374 2006-10-16 16:15 addressbook.odb</div>


Die Datei <tt>'''addressbook.odb'''</tt> wurde am 16.10.2006 um 16:15 erstellt. Sie ist 849093 Bytes groß und ge­hört dem Benutzer "<tt>'''dirkw'''</tt>" sowie der Gruppe "<tt>'''privat'''</tt>". Das Rechtefeld schlüsselt sich wie folgt auf:
; Beispiel
$ '''ls -l '''
-rw-r-----  1 dirkw privat  2374 2006-10-16 16:15 addressbook.odb


Die Datei '''addressbook.odb''' wurde am 16.10.2006 um 16:15 erstellt. Sie ist 849093 Bytes groß und ge­hört dem Benutzer "'''dirkw'''" sowie der Gruppe "'''privat'''". Das Rechtefeld schlüsselt sich wie folgt auf:


{| style="border-spacing:0;margin:auto;width:17.501cm;"
{|class="wikitable"
|-
|-
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''-'''
| | '''-'''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''rw-'''
| | '''rw-'''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''r--'''
| | '''r--'''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''---'''
| | '''---'''
|-
|-
| style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Dateityp'''
| | '''Dateityp'''
| style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Eigentümers'''
| | '''Eigentümers'''
| style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Gruppe'''
| | '''Gruppe'''
| style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''alle Anderen'''
| | '''alle Anderen'''
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Es handelt sich um eine normale Datei.
| | Es handelt sich um eine normale Datei.
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Der Eigentümer darf die Datei lesen, ändern, aber nicht ausführen  
| | Der Eigentümer darf die Datei lesen, ändern, aber nicht ausführen  
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Die Gruppe darf die Da­tei nur lesen
| | Die Gruppe darf die Da­tei nur lesen
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Alle anderen haben kei­nen Zugriff auf die Datei
| | Alle anderen haben kei­nen Zugriff auf die Datei
 
 
|-
|-
|}
|}
== Zugriffsrechte ändern mit chmod  ==


'''chmod·Modus·Dateiliste'''
== Zugriffsrechte ändern  ==
'''chmod·Modus·Dateiliste'''


Einstellen der Zugriffsrechte einer Datei. Dies kann im symbolischen oder numerischen Modus durchgeführt werden.
Einstellen der Zugriffsrechte einer Datei. Dies kann im symbolischen oder numerischen Modus durchgeführt werden.


=== Symbolischer Modus  ===
=== Symbolischer Modus  ===
'''Modus''' = BereichOperandBerechtigung


<tt>'''Modus'''</tt> = BereichOperandBerechtigung
{|class="wikitable"
 
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
|-
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Bereich '''
| | '''Bereich '''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''u'''</tt> (user) Eigentümer <tt>'''g'''</tt> (group) Gruppe <tt>'''o'''</tt> (others) Übrige Benutzer <tt>'''a'''</tt>(all) oder keine Angabe ändert alle Bereiche
| | '''u''' (user) Eigentümer '''g''' (group) Gruppe '''o''' (others) Übrige Benutzer '''a'''(all) oder keine Angabe ändert alle Bereiche
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Operand '''
| | '''Operand '''
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''+'''</tt> Recht hinzufügen <tt>'''-'''</tt> Recht wegnehmen <tt>'''<nowiki>=</nowiki>'''</tt> Setzt neue Rechte und löscht alle bisherigen  
| | '''+''' Recht hinzufügen '''-''' Recht wegnehmen '''=''' Setzt neue Rechte und löscht alle bisherigen  
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | '''Berechtigung '''
| | '''Berechtigung '''
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''r'''</tt> Read <tt>'''w'''</tt> Write <tt>'''x'''</tt> eXecute  
| | '''r''' Read '''w''' Write '''x''' eXecute  


<tt>'''t'''</tt>(sTicky bit) schützt Datei oder verhindert das löschen einer Datei von Nicht-Eigentümern
'''t'''(sTicky bit) schützt Datei oder verhindert das löschen einer Datei von Nicht-Eigentümern


<tt>'''s'''</tt>(Set user id) setzt Benutzer- oder Gruppen-ID bei der Ausführung
'''s'''(Set user id) setzt Benutzer- oder Gruppen-ID bei der Ausführung
|-
|-
|}
|}
'''Beispiele'''


 
; Beispiele
{| style="border-spacing:0;margin:auto;width:17.501cm;"
{|class="wikitable"
|-
|-
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''chmod·+x·datei'''</tt>
| | '''chmod·+x·datei'''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Ausführungsrecht für alle hinzufügen
| | Ausführungsrecht für alle hinzufügen
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''chmod·go-w·datei'''</tt>
| | '''chmod·go-w·datei'''
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Schreibrecht nur noch für User
| | Schreibrecht nur noch für User
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''chmod·g+rwx·datei'''</tt>
| | '''chmod·g+rwx·datei'''
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Volle Rechte für Gruppe
| | Volle Rechte für Gruppe
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | <tt>'''chmod·ugo-rwx·datei'''</tt>
| | '''chmod·ugo-rwx·datei'''
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0.3cm;padding-right:0.3cm;" | Allen alle Rechte entziehen
| | Allen alle Rechte entziehen
|-
|-
|}
|}
Kombinationen mit verschiedenen Zugriffsrechten für verschiedene Rollen können kommagetrennt ange­geben werden:
Kombinationen mit verschiedenen Zugriffsrechten für verschiedene Rollen können kommagetrennt ange­geben werden:
 
$ '''chmod '''u=rw,g=rw,o=r ktoNr
$ '''chmod '''u=rw,g=rw,o=r ktoNr
  $ ls -l
  $ ls -l
  -rw-rw-r-- 1 anna users 9 18. Okt 13:20 ktoNr
  -rw-rw-r-- 1 anna users 9 18. Okt 13:20 ktoNr


=== Numerischer Modus ===
=== Numerischer Modus ===
Systemintern werden die Zugriffsrechte numerisch verwaltet
* Diese Methode kann auch zum Setzen der Rechte verwendet werden
* Die erste Ziffer bezeichnet die Schutzbit, die zweite Rech­te des Eigentümers, die dritte die Gruppenrechte und vierte Ziffer die Rechte aller anderen Benutzer.


 
Die Zahl errechnet sich durch addieren folgender Okalwerte
{| style="border-spacing:0;margin:auto;width:17.501cm;"
{|class="wikitable"
|-
|-
|| Systemintern werden die Zugriffsrechte numerisch verwaltet.
| | SUID
 
| | SGID
Diese Methode kann auch zum Setzen der Rechte verwendet werden. Die erste Ziffer Bezeichnet die Schutzbit, die zweite Rech­te des Eigentümers, die dritte die Gruppenrechte und vierte Ziffer die Rechte aller anderen Benutzer.
| | STI
 
| | R
[[Image:Grafik1.png]]
| | W
 
| | X
Die Zahl errechnet sich durch addieren folgender Okalwerte:
| | R
 
| | W
|| [[Image:Grafik5.png|right]]
| | X
 
| | R
 
| | W
|-
| | X
|}
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>SUID</tt>
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>SGID</tt>
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>STI</tt>
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>R</tt>
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>W</tt>
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>X</tt>
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>R</tt>
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>W</tt>
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>X</tt>
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>R</tt>
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>W</tt>
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | <tt>X</tt>
|-
|-
| align=center style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''4'''
| | '''4'''
| align=center style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''2'''
| | '''2'''
| align=center style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''1'''
| | '''1'''
| align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''4'''
| | '''4'''
| align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''2'''
| | '''2'''
| align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''1'''
| | '''1'''
| align=center style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''4'''
| | '''4'''
| align=center style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''2'''
| | '''2'''
| align=center style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''1'''
| | '''1'''
| align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''4'''
| | '''4'''
| align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''2'''
| | '''2'''
| align=center style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | '''1'''
| | '''1'''
|-
|-
| colspan="3"  align=center style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | special rights
| colspan="3"  | special rights
| colspan="3"  align=center style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | User
| colspan="3"  | User
| colspan="3"  align=center style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | Group
| colspan="3"  | Group
| colspan="3"  align=center style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.25cm;padding-right:0.25cm;" | Others
| colspan="3"  | Others
|-
|-
|}
|}
'''Beispiel'''
'''Beispiel'''
'''chmod 777·datei '''
'''rwx rwx rwx'''


'''chmod 750 '''
'''rwx r-x ---'''


{| align="center" style="border-spacing:0;width:17.501cm;"
'''chmod 1750 '''
|-
'''rwx r-w --t
| style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''chmod 777·datei </tt>'''
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''rwx rwx rwx'''</tt>
|-
| style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''chmod 750 </tt>'''
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''rwx r-x ---'''</tt>
|-
| style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''chmod 1750 </tt>'''
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''rwx r-w --t'''</tt>
 
 
|-
|}


== Special Rights ==
== Special Rights ==
 
; Um den Zugriff noch genauer zu regeln, gibt es drei weiter Schutzbit
<div style="margin-left:1.501cm;margin-right:0cm;">Um den Zugriff noch genauer zu regeln, gibt es drei weiter Schutzbit:</div>
{|class="wikitable"
 
 
{| align="center" style="border-spacing:0;width:17.501cm;"
|-
|-
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''SUID'''</tt>
| | '''SUID'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''SGID'''</tt>
| | '''SGID'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''STI'''</tt>
| | '''STI'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''R'''</tt>
| | '''R'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''W'''</tt>
| | '''W'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''X'''</tt>
| | '''X'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''R'''</tt>
| | '''R'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''W'''</tt>
| | '''W'''
| align=center style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''X'''</tt>
| | '''X'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''R'''</tt>
| | '''R'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''W'''</tt>
| | '''W'''
| align=center style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | <tt>'''X'''</tt>
| | '''X'''
|-
|-
| colspan="3"  align=center style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | '''special rights'''
| colspan="3"  | '''special rights'''
| colspan="3"  align=center style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | '''User'''
| colspan="3"  | '''User'''
| colspan="3"  align=center style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | '''Group'''
| colspan="3"  | '''Group'''
| colspan="3"  align=center style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.101cm;padding-bottom:0.101cm;padding-left:0cm;padding-right:0cm;" | '''Others'''
| colspan="3"  | '''Others'''
|-
|-
|}
|}
'''Set User ID (SUID)'''
Wenn das <tt>'''SUID'''</tt>-Bit (Set User ID) gesetzt ist, behält das Programm für die Dauer der Ausführung die Rechte des Programmeigentümers und nicht jene dessen, der die Programme aufruft.
'''Setzen'''


'''chmod·u+s·datei'''
=== Set User ID (SUID) ===
Wenn das '''SUID'''-Bit (Set User ID) gesetzt ist, behält das Programm für die Dauer der Ausführung die Rechte des Programmeigentümers und nicht jene dessen, der die Programme aufruft.


'''Anzeige'''
; Setzen
'''chmod·u+s·datei'''


"<tt>'''S'''</tt>" statt "<tt>'''X'''</tt>" bei den User-Rechten:
; Anzeige
-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd


-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd
"'''S'''" statt "'''X'''" bei den User-Rechten:


Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 's' angezeigt, ansonsten ein großes 'S'.
Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 's' angezeigt, ansonsten ein großes 'S'.


'''Beispiel'''
; Beispiel
 
* Alle Benutzer sind in einer speziellen Datei gespeichert, die nur der Superuser ändern darf - sonst könnte ja jeder einen neuen Benutzer eintragen.
Alle Benutzer sind in einer speziellen Datei gespeichert, die nur der Superuser ändern darf - sonst könnte ja jeder einen neuen Benutzer eintragen.
* Jeder Benutzer kann aber sein Passwort ändern, das auch in dieser Datei steht. Dazu muss er schreibend auf die Datei zugreifen - obwohl er dazu keine Berechtigung besitzt.
* Das Programm "'''passwd'''" gehört dem Superuser, hat das '''SUID'''-Bit gesetzt und kann so auf die User-Datei schreibend zugreifen.  


Jeder Benutzer kann aber sein Passwort ändern, das auch in dieser Datei steht. Dazu muss er schreibend auf die Datei zugreifen - obwohl er dazu keine Berechtigung besitzt.  
=== Set Group ID (SGID) ===
* Wenn das '''SGID'''-Bit (Set Group ID) gesetzt ist, hat das Programm die Rechte der Gruppe, zu der es gehört. Dieses Feature wird z.&nbsp;B.&nbsp;beim Drucker-Spooling verwendet.
* Bei Dateien ohne Ausführungsrecht sorgt dieses Bit dafür, dass die Datei nur von einem Prozess geöffnet werden kann.
* Bei Verzeichnissen hat das '''SGID'''-Bit eine andere Aufgabe. Dateien, die in das Verzeichnis kopiert oder erstellt werden, automatisch die Gruppe des Verzeichnisses erhalten (man muss also nicht mehr explizit die Gruppe setzen, um den Mitgliedern einer Gruppe Zugriff zu ermöglichen).  


Das Programm "<tt>'''passwd'''</tt>" gehört dem Superuser, hat das <tt>'''SUID'''</tt>-Bit gesetzt und kann so auf die User-Datei schreibend zugreifen.
; Setzen
$ '''chmod·g+s·datei'''


'''Set Group ID (SGID)'''
; Anzeige
 
drwxrws--- 2 tux archive 48 Nov 19 17:12  backup
Wenn das <tt>'''SGID'''</tt>-Bit (Set Group ID) gesetzt ist, hat das Programm die Rechte der Gruppe, zu der es gehört. Dieses Feature wird z. B. beim Drucker-Spooling verwendet.
"'''s'''" statt "'''x'''" bei den Gruppen-Rechten
 
Bei Dateien ohne Ausführungsrecht sorgt dieses Bit dafür, dass die Datei nur von einem Prozess geöffnet werden kann.
 
Bei Verzeichnissen hat das <tt>'''SGID'''</tt>-Bit eine andere Aufgabe. Dateien, die in das Verzeichnis kopiert oder erstellt werden, automatisch die Gruppe des Verzeichnisses erhalten (man muss also nicht mehr explizit die Gruppe setzen, um den Mitgliedern einer Gruppe Zugriff zu ermöglichen).
 
'''Setzen'''
 
'''chmod·g+s·datei'''
 
'''Anzeige'''
 
"<tt>'''s'''</tt>" statt "<tt>'''x'''</tt>" bei den Gruppen-Rechten
 
drwxrws--- 2 tux archive 48 Nov 19 17:12  backup


Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 's' angezeigt, ansonsten ein großes 'S'.
Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 's' angezeigt, ansonsten ein großes 'S'.


'''STICKY Bit'''
=== STICKY Bit ===
 
* Das '''STICKY'''-Bit sollte früher den Systemdurchsatz verbessern. Programme, bei denen dieses Bit gesetzt ist, verbleiben nach dem ersten Aufruf im Speicher und starten bei den folgenden Aufrufen schneller. Heute ist das nicht mehr nötig.  
Das <tt>'''STICKY'''</tt>-Bit sollte früher den Systemdurchsatz verbessern. Programme, bei denen dieses Bit gesetzt ist, verbleiben nach dem ersten Aufruf im Speicher und starten bei den folgenden Aufrufen schneller. Heute ist das nicht mehr nötig.  
* Bei Verzeichnissen dient dieses Bit der Systemsicherheit.  
 
Bei Verzeichnissen dient dieses Bit der Systemsicherheit.  


Auch wenn im Verzeichnis für alle User Schreibrecht existiert (= Löschen und Anlegen von Dateien), können bei gesetztem <tt>'''Sticky'''</tt>-Bit nur Dateien gelöscht werden, die einer folgenden Bedingungen genügen: # die Datei gehört dem Benutzer, der sie löschen will  
Auch wenn im Verzeichnis für alle User Schreibrecht existiert (= Löschen und Anlegen von Dateien), können bei gesetztem '''Sticky'''-Bit nur Dateien gelöscht werden, die einer folgenden Bedingungen genügen: # die Datei gehört dem Benutzer, der sie löschen will  
# das Verzeichnis, in dem die Datei liegt, gehört dem Benutzer  
# das Verzeichnis, in dem die Datei liegt, gehört dem Benutzer  
# der Benutzer hat Schreibrecht für die Datei  
# der Benutzer hat Schreibrecht für die Datei  
# der Superuser will die Datei löschen  
# der Superuser will die Datei löschen  


; Setzen
$ '''chmod·+t·datei'''


; Anzeige
drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp


'''Setzen'''
'''t'''" statt "'''x'''" bei den "Others"-Rechten
 
'''chmod·+t·datei'''
 
'''Anzeige'''
 
<tt>'''t'''</tt>" statt "<tt>'''x'''</tt>" bei den "Others"-Rechten
 
drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp


Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 't' angezeigt, ansonsten ein großes 'T'.
Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 't' angezeigt, ansonsten ein großes 'T'.


== Vorgaben setzen mit umask ==
== Vorgaben setzen mit umask ==
$ '''umask''' Modus


'''umask''' Modus
Das Kommando umask setzt Standardeinstellung für Zugriffsrechte für alle Dateien, die nach Aufruf von '''umask''' erzeugt werden.  
 
Das Kommando umask setzt Standardeinstellung für Zugriffsrechte für alle Dateien, die nach Aufruf von <tt>'''umask'''</tt> erzeugt werden.  
 
So muss nicht jedesmal des <tt>'''chmod'''</tt>-Kommando aufrufen, wenn einen Datei erstellt wurde. Auf bestehende Dateien hat das Kommando keinen Einfluss.
 
Der dreistellige Zahlenwert (für <tt>'''User'''</tt>, <tt>'''Group'''</tt> und <tt>'''Others'''</tt>) ist das Komplement der Angabe von <tt>'''chmod'''</tt>, d. h. hier wird festgelegt, welches Bit nicht gesetzt werden soll.
 
Stellen Sie sich vor, sie ziehen den Wert des <tt>'''umask'''</tt>-Modus vom Maximalwert 777 ab. Sie erhalten dann die Zugriffsrechte.
 
'''Beispiele'''
 
 
{| align="center" style="border-spacing:0;width:17.501cm;"
|-
| style="background-color:#cccccc;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''umask 022'''</tt>
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''7 7 7<u>- 0 2 2</u><nowiki>= 7 5 5</nowiki>'''</tt>
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''rwx r-x r-x'''</tt>
|-
| style="background-color:#cccccc;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''umask 027'''</tt>
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''7 7 7<u>- 0 2 7</u><nowiki>= 7 5 0</nowiki>'''</tt>
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''rwx r-x ---'''</tt>
|-
| style="background-color:#cccccc;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''umask 177'''</tt>
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''7 7 7<u>- 1 7 7</u><nowiki>= 6 0 0</nowiki>'''</tt>
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''rw- --- ---'''</tt>
 
 
|-
|}
== Zugriffskontrolllisten (ACLs) ==
* In der Unixwelt versteht man unter Access Control List eine Erweiterung der „normalen“ Zugriffssteuerung auf Ebene des Benutzer-Gruppe-Welt-Modells.
* Bei Access Control Lists lassen sich Zugriffsrechte spezifisch für einzelne Benutzer zuteilen oder verbieten.
* Als erstes Unix unterstützte HP-UX dieses Modell der erweiterten Zugriffssteuerung.
* Mittlerweile bieten auch Linux, FreeBSD (TrustedBSD) und Solaris (TrustedSolaris) native Unterstützung für ACLs.
* Unter Linux unterstützen dabei die Dateisysteme ext2, ext3, JFS, XFS und ReiserFS ACLs vollständig.
* Mit der KDE-Version 3.5 steht auch der Dateimanager Konqueror mit nativer ACL-Unterstützung zur Verfü­gung. Für den GNOME-Desktop beherrscht der Dateimanager Nautilus seit Version 2.16 nativ ACLs.
* ACLs werden in Linux statisch vererbt, d.h. die Berechtigungen pflanzen sich in neu angelegte Unterverzeichnis­se und Dateien je nach Bedarf fort.
* Wird die ACL eines übergeordneten Verzeichnisses geändert, hat dies keinen Einfluss auf die darunterliegende Struktur.
 
=== Vorteile von ACLs ===
* Traditionell sind für jedes Dateiobjekt unter Linux drei Berechtigungsgruppen definiert.
* Diese Gruppen ent­halten die Berechtigungen zum Lesen (<tt>r</tt>), Schreiben (<tt>w</tt>) und Ausführen (<tt>x</tt>) für den Eigentümer der Datei, die Gruppe und andere Benutzer.
* Zusätzlich können noch die bit für ''set user id'', ''set group id'' und das ''sticky''-Bit gesetzt werden.
* Dieses schlanke Konzept ist für die meisten in der Praxis auftretenden Fälle völ­lig ausreichend.
* Für komplexere Szenarien oder erweiterte Anwendungen mussten Systemadministratoren früher eine Reihe von Tricks anwenden, um die Einschränkungen des traditionellen Berechtigungskonzepts zu umgehen.
* ACLs können als Erweiterung des traditionellen Berechtigungskonzepts verwendet werden.
* Sie ermögli­chen es, einzelnen Benutzern oder Gruppen, bei denen es sich nicht um den ursprünglichen Eigentümer oder die ursprüngliche Eigentümergruppe handelt, Berechtigungen zuzuweisen.
* ACLs sind eine Funktion des Linux-Kernels und werden derzeit von ReiserFS, Ext2, Ext3, JFS und XFS unterstützt.
* Mithilfe von ACLs können komplexe Szenarien umgesetzt werden, ohne dass auf Anwendungsebene komplexe Berechti­gungsmodelle implementiert werden müssen.
* Die Vorzüge von ACLs zeigen sich, wenn Sie einen Windows-Server durch einen Linux-Server ersetzen möchten.
* Einige der angeschlossenen Arbeitsstationen können auch nach der Migration weiter unter Win­dows betrieben werden.
* Das Linux-System stellt den Windows-Clients Datei- und Druckdienste über Sam­ba zur Verfügung.
* Da Samba ACLs unterstützt, können Benutzerberechtigungen sowohl auf dem Linux-Server als auch über eine grafische Benutzeroberfläche unter Windows (nur Windows NT und höher) kon­figuriert werden.
* Über '''winbindd''', einem Teil der Samba-Suite, ist es sogar möglich, Benutzern, die nur in der Windows-Domäne existieren und über kein Konto auf dem Linux-Server verfügen, Berechtigungen zu gewähren.
 
=== Definitionen ===
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
| style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | '''Benutzerklasse'''
| style="background-color:transparent;border:0.05pt solid #000000;padding:0.101cm;" | Das traditionelle POSIX-Berechtigungskonzept verwendet drei ''Klassen'' von Benutzern für das Zu­weisen von Berechtigungen im Dateisystem: den Eigentümer (owner), die Eigentümergruppe (owning group) und andere Benutzer (other). Pro Benutzerklasse können jeweils die drei Berech­tigungsbit zum Lesen (<tt>r</tt>), Schreiben (<tt>w</tt>) und Ausführen (<tt>x</tt>) gesetzt werden.
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | '''Zugriffs-ACL'''
| style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | Die Zugriffsberechtigungen für Benutzer und Gruppen auf beliebige Dateisystemobjekte (Dateien und Verzeichnisse) werden über Access ACLs (Zugriffs-ACLs) festgelegt.
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | '''Standard-ACL'''
| style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | Standard-ACLs können nur auf Verzeichnisse angewendet werden. Diese legen fest, welche Be­rechtigungen ein Dateisystemobjekt übernimmt, wenn das Objekt von seinem übergeordneten Verzeichnis erstellt wird.
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | '''ACL-Eintrag'''
| style="border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | Jede ACL besteht aus mehreren ACL-Einträgen. Ein ACL-Eintrag enthält einen Typ, einen Be­zeichner für den Benutzer oder die Gruppe, auf den bzw. die sich der Eintrag bezieht, und Be­rechtigungen. Für einige Eintragstypen ist der Bezeichner für die Gruppe oder die Benutzer nicht definiert.
 
 
|-
|}
 
=== Arbeiten mit ACLs ===
* Die Tabelle „Typen von ACL-Einträgen“ fasst die sechs möglichen Typen von ACL-Einträgen zusammen und beschreibt die für einen Benutzer oder eine Gruppe von Benutzern verfügbaren Berechtigungen.
* Der Ein­trag ''owner'' definiert die Berechtigungen des Benutzers, der Eigentümer der Datei oder des Verzeichnisses ist.
* Der Eintrag ''owning group'' definiert die Berechtigungen der Gruppe, die Eigentümer der Datei ist.
* Der Superuser kann den Eigentümer (owner) oder die Eigentümergruppe (owning group) mit '''chown''' oder '''chgrp''' ändern, in welchem Fall die Einträge „owner“ und „owning group“ sich auf den neuen Eigentümer bzw. die neue Eigentümergruppe beziehen.
* Die Einträge des Typs ''named user'' definieren die Berechtigun­gen des Benutzers, der im Bezeichnerfeld des Eintrags angegeben ist. Die Einträge des Typs ''named group'' definieren die Berechtigungen der im Bezeichnerfeld des Eintrags angegebenen Gruppe.
* Nur die Einträge des Typs „named user“ und „named group“ verfügen über ein Bezeichnerfeld, das nicht leer ist.
* Der Ein­trag ''other'' definiert die Berechtigungen aller anderen Benutzer.
* Der Eintrag ''mask'' schränkt die durch die Einträge „named user“, „named group“ und „owning group“ ge­währten Berechtigungen ein, indem durch ihn festgelegt werden kann, welche der Berechtigungen in die­sen Einträgen wirksam und welche maskiert sind.
* Sind Berechtigungen sowohl in einem der oben genann­ten Einträge als auch in der Maske vorhanden, werden sie wirksam. Berechtigungen, die nur in der Maske oder nur im eigentlichen Eintrag vorhanden sind, sind nicht wirksam, d. h., die Berechtigungen werden nicht gewährt.
* Die in den Einträgen „owner“ und „owning group“ gewährten Berechtigungen sind immer wirksam. Dieser Mechanismus wird mit dem Beispiel in Tabelle „Maskierung von Zugriffsberechtigungen“ verdeutlicht.
* Es gibt zwei grundlegende Klassen von ACLs: Eine ''minimale'' ACL enthält nur die Einträge für die Typen „owner“, „owning group“ und „other“, die den traditionellen Berechtigungsbit für Dateien und Verzeich­nisse entsprechen.
* Eine ''erweiterte'' ACL geht über dieses Konzept hinaus. Sie muss einen Eintrag des Typs „mask“ enthalten und kann mehrere Einträge des Typs „named user“ und „named group“ haben.
 
'''Typen von ACL-Einträgen'''
{| style="border-spacing:0;width:17.501cm;"
|-
| style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | '''Typ'''
| style="background-color:transparent;border:0.05pt solid #000000;padding:0.101cm;" | '''Textformat'''
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | owner
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>user::rwx</tt>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | named user
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>user:name:rwx</tt>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | owning group
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>group::rwx</tt>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | named group
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>group:name:rwx</tt>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | mask
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>mask::rwx</tt>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | other
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>other::rwx</tt>
|-
|}
 
'''Maskierung von Zugriffsberechtigungen'''
{| style="border-spacing:0;width:17.501cm;"
|-
| style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | '''Eintragstyp'''
| style="background-color:transparent;border-top:0.05pt solid #000000;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | '''Textformat'''
| style="background-color:transparent;border:0.05pt solid #000000;padding:0.101cm;" | '''Berechtigungen'''
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | named user
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | <tt>user:geeko:r-x</tt>
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>r-x</tt>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | mask
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | <tt>mask::rw-</tt>
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>rw-</tt>
|-
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" |
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:none;padding:0.101cm;" | wirksame Berechtigungen:
| style="background-color:transparent;border-top:none;border-bottom:0.05pt solid #000000;border-left:0.05pt solid #000000;border-right:0.05pt solid #000000;padding:0.101cm;" | <tt>r--</tt>
 
 
|-
|}
 
=== ACL-Einträge und Berechtigungsbit ===
* Die Abbildung „Minimale ACL: ACL-Einträge vs. Berechtigungsbit“ und Abbildung „Erweiterte ACL: ACL-Einträge vs. Berechtigungsbit“ zeigen eine minimale und eine erweiterte ACL.
* Die Abbildungen sind in drei Blöcke gegliedert.
* Der linke Block zeigt die Typspezifikationen der ACL-Einträge, der mittlere Block zeigt ein Beispiel einer ACL und der rechte Block zeigt die entsprechenden Berechtigungsbit gemäß dem her­kömmlichen Berechtigungskonzept, wie sie beispielsweise auch '''ls''' <tt>-l</tt> anzeigt.
* In beiden Fällen werden die Berechtigungen ''owner class'' dem ACL-Eintrag „owner“ zugeordnet. ''Other class''-Berechtigungen werden dem entsprechenden ACL-Eintrag zugeordnet.
* Die Zuordnung der Berechtigungen des Typs ''group class'' ist in den beiden Fällen jedoch unterschiedlich.
 
'''Minimale ACL: ACL-Einträge vs. Berechtigungsbit'''
 
[[Image:Grafik3.png]]
 
* Im Fall einer minimalen ACL – ohne „mask“ – werden die „group class“-Berechtigungen dem ACL-Eintrag „owning group“ zugeordnet.
* Dies ist in [../../../material/linux/aaa_projekte/skript/tmp/sec.acls.handle.html#fig.acls.map.mini Abbildung „Minimale ACL: ACL-Einträge vs. Berechtigungsbit“] dargestellt. Im Fall einer erweiterten ACL – mit „mask“ – werden die „group class“-Berechtigungen dem „mask“-Eintrag zugeordnet.
* Dies ist in Abbildung „Erweiterte ACL: ACL-Einträge vs. Berechtigungsbit“ dargestellt.
 
'''Erweiterte ACL: ACL-Einträge vs. Berechtigungsbit'''
[[Image:Grafik4.png]]
* Durch diese Art der Zuordnung ist die reibungslose Interaktion von Anwendungen mit und ohne ACL-Un­terstützung gewährleistet.
* Die Zugriffsberechtigungen, die mittels der Berechtigungsbit festgelegt wur­den, sind die Obergrenze für alle anderen „Feineinstellungen“, die per ACL vorgenommen werden.
* Werden Berechtigungsbit geändert, spiegelt sich dies in der ACL wider und umgekehrt.
 
=== Verzeichnis mit einer Zugriffs-ACL ===
* Mit '''getfacl''' und '''setfacl''' in der Befehlszeile können Sie auf ACLs zugreifen. Die Verwendung dieser Befehle wird im folgenden Beispiel erläutert:
* Bevor Sie das Verzeichnis erstellen, können Sie mit dem Befehl '''umask''' festlegen, welche Zugriffsberechti­gungen gleich beim Erstellen von Dateiobjekten maskiert werden sollen.
* Der Befehl '''umask''' <tt>027</tt> legt die Standardberechtigungen fest, wobei er dem Eigentümer sämtliche Berechtigungen (<tt>0</tt>) gewährt, der Grup­pe den Schreibzugriff (<tt>2</tt>) verweigert und allen anderen Benutzern überhaupt keine Berechtigungen erteilt (<tt>7</tt>).
* Die entsprechenden Berechtigungsbit werden von '''umask''' maskiert oder deaktiviert. Weitere Infor­mationen hierzu finden Sie auf der Manualpage '''umask'''.
* '''mkdir mydir''' erstellt das Verzeichnis <tt>mydir</tt> mit den durch '''umask''' festgelegten Standardberechtigungen.
* Mit dem Befehl '''ls '''<tt>-dl mydir</tt> können Sie prüfen, ob alle Berechtigungen ordnungsgemäß zugewiesen wurden. Die Ausgabe für dieses Beispiel sieht wie folgt aus:
drwxr-x--- ... tux project3 ... mydir
 
Mit dem Befehl '''getfacl '''<tt>mydir</tt> prüfen Sie den anfänglichen Status der ACL. Es werden ähnliche Informa­tionen wie im folgenden Beispiel zurückgegeben:
<nowiki># file: mydir </nowiki>
<nowiki># owner: tux </nowiki>
<nowiki># group: project3 </nowiki>
user::rwx
group::r-x
other::---
 
Die ersten drei Zeilen der Ausgabe nennen Namen, Eigentümer und Eigentümergruppe des Verzeichnisses.
 
Die drei nächsten Zeilen enthalten die drei ACL-Einträge „owner“, „owning group“ und „other“. Insgesamt liefert Ihnen der Befehl '''getfacl''' im Fall dieser minimalen ACL keine Informationen, die Sie mit '''ls''' nicht auch erhalten hätten.
 
Ändern Sie die ACL so, dass Sie dem zusätzlichen Benutzer <tt>geeko</tt> und der zusätzlichen Gruppe <tt>mascots</tt> Lese-, Schreib- und Ausführberechtigungen gewähren, indem Sie folgenden Befehl eingeben:
 
setfacl -m user:geeko:rwx,group:mascots:rwx mydir
 
Mit der Option <tt>-m</tt> kann per '''setfacl''' die vorhandene ACL geändert werden. Das nachfolgende Argument gibt an, welche ACL-Einträge geändert werden (mehrere Einträge werden durch Kommas voneinander ge­trennt).
 
Im letzten Teil geben Sie den Namen des Verzeichnisses an, für das diese Änderungen gelten sol­len. Mit dem Befehl '''getfacl''' können Sie sich die resultierende ACL ansehen.
 
<nowiki># file: mydir </nowiki>
<nowiki># owner: tux </nowiki>
<nowiki># group: project3 </nowiki>
user::rwx
user:geeko:rwx
group::r-x
group:mascots:rwx
mask::rwx
other::---
 
Zusätzlich zu den von Ihnen erstellten Einträgen für den Benutzer <tt>geeko</tt> und die Gruppe <tt>mascots</tt> wurde ein „mask“-Eintrag generiert.
 
Der mask-Eintrag wird automatisch gesetzt, sodass alle Berechtigungen wirk­sam sind. Außerdem passt '''setfacl''' vorhandene mask-Einträge automatisch an die geänderten Einstellun­gen an, es sei denn, Sie deaktivieren diese Funktion mit <tt>-n</tt>. „mask“ legt die maximal wirksamen Zugriffs­berechtigungen für alle Einträge innerhalb der „group class“ fest.
 
Dazu gehören „named user“, „named group“ und „owning group“. Die Berechtigungsbit des Typs „group class“, die mit '''ls''' <tt>-dl mydir</tt> ausge­geben werden, entsprechen jetzt dem <tt>mask</tt>-Eintrag.
 
drwxrwx---+ ... tux project3 ... mydir
   
 
Die erste Spalte der Ausgabe enthält ein zusätzliches <tt>+</tt>, um darauf hinzuweisen, dass für dieses Objekt eine ''erweiterte'' ACL vorhanden ist.
 
Gemäß der Ausgabe des Befehls '''ls''' beinhalten die Berechtigungen für den mask-Eintrag auch Schreibzu­griff. Solche Berechtigungsbit würden normalerweise bedeuten, dass die „owning group“ (hier <tt>projec­t3</tt>) ebenfalls Schreibzugriff auf das Verzeichnis <tt>mydir</tt> hätte.
 
Allerdings sind die wirklich wirksamen Zu­griffsberechtigungen für die „owning group“ als die Schnittmenge aus den für „owning group“ und den für „mask“ gesetzten Berechtigungen definiert, in unserem Beispiel also <tt>r-x</tt> (siehe [../../../material/linux/aaa_projekte/skript/tmp/sec.acls.handle.html#tab.mask Tabelle „Maskierung von Zugriffsberechtigungen“]).
 
Was die wirksamen Berechtigungen der „owning group“ in diesem Beispiel betrifft, hat sich also nach dem Hinzufügen der ACL-Einträge nichts geändert.
 
Bearbeiten Sie den mask-Eintrag mit '''setfacl''' oder '''chmod'''. Geben Sie beispielsweise '''chmod '''<tt>g-w mydir</tt> ein. '''ls '''<tt>-dl mydir</tt> gibt dann Folgendes aus:
 
drwxr-x---+ ... tux project3 ... mydir
 
'''getfacl '''<tt>mydir</tt> erzeugt folgende Ausgabe:
 
<nowiki># file: mydir </nowiki>
<nowiki># owner: tux </nowiki>
<nowiki># group: project3 </nowiki>
user::rwx
user:geeko:rwx          <nowiki># effective: r-x</nowiki>
group::r-x
group:mascots:rwx      <nowiki># effective: r-x </nowiki>
mask::r-x
other::---
 
* Nachdem Sie mit dem Befehl '''chmod''' den Schreibzugriff über die „group class“-Bit deaktiviert haben, lie­fert Ihnen bereits die Ausgabe des Befehls '''ls''' den Hinweis darauf, dass die mask-bit entsprechend ange­passt wurden: 
* Die Schreibberechtigung ist wieder auf den Eigentümer von <tt>mydir</tt> beschränkt. Dies wird durch die Ausgabe des Befehls '''getfacl''' bestätigt. 
* Dieser Befehl fügt allen Einträgen Kommentare hinzu, deren tatsächlich wirksame Berechtigungsbit nicht mit den ursprünglich gesetzten übereinstimmen, weil sie vom mask-Eintrag herausgefiltert werden. 
* Die ursprünglichen Berechtigungen können jederzeit mit dem Befehl '''chmod '''<tt>g+w mydir</tt> wiederhergestellt werden.
 
=== Verzeichnis mit einer Standard-ACL ===
* Verzeichnisse können über eine Standard-ACL verfügen. Dabei handelt es sich um einen speziellen Typ von ACL, der festlegt, welche Zugriffsberechtigungen neue Unterobjekte dieses Verzeichnisses bei ihrer Er­stellung erben.
* Eine Standard-ACL wirkt sich sowohl auf Unterverzeichnisse als auch auf Dateien aus.
 
==== Auswirkungen einer Standard-ACL ====
* Die Zugriffsberechtigungen in der Standard-ACL eines Verzeichnisses werden an Dateien und Unterver­zeichnisse unterschiedlich vererbt:* Ein Unterverzeichnis erbt die Standard-ACL des übergeordneten Verzeichnisses sowohl als seine ei­gene Standard-ACL als auch als Zugriffs-ACL.
* Eine Datei erbt die Standard-ACL als ihre eigene Zugriffs-ACL.
* Alle Systemaufrufe, die Dateisystemobjekte anlegen, verwenden einen <tt>'''mode'''</tt>-Parameter, der die Zugriffs­berechtigungen für das neu erstellte Dateisystemobjekt definiert.
* Hat das übergeordnete Verzeichnis keine Standard-ACL, werden die mit <tt>'''umask'''</tt> definierten Berechtigungsbit mit dem <tt>'''mode'''</tt>-Parameter von den Be­rechtigungen abgezogen und das Ergebnis wird dem neuen Objekt zugewiesen.
* Existiert eine Standard-ACL für das übergeordnete Verzeichnis, entsprechen die dem neuen Objekt zugewiesenen Berechtigungs­bit der Schnittmenge aus den Berechtigungen des <tt>'''mode'''</tt>-Parameters und den in der Standard-ACL festge­legten Berechtigungen.
*  <tt>'''umask'''</tt> wird in diesem Fall nicht beachtet.
 
==== Standard-ACLs in der Praxis ====
* Die drei folgenden Beispiele führen Sie an die wichtigsten Operationen an Verzeichnissen und Standard-ACLs heran:# Fügen Sie dem vorhandenen Verzeichnis <tt>mydir</tt> eine Standard-ACL hinzu, indem Sie folgenden Be­fehl eingeben:<br/>setfacl -d -m group:mascots:r-x mydir<br/>Die Option <tt>-d</tt> des Befehls '''setfacl''' weist '''setfacl''' an, die folgenden Änderungen (Option <tt>-m</tt>) an der Standard-ACL vorzunehmen.<br/>Sehen Sie sich das Ergebnis dieses Befehls genauer an:<br/>getfacl mydir
<nowiki># file: mydir </nowiki>
<nowiki># owner: tux </nowiki>
<nowiki># group: project3 </nowiki>
user::rwx
user:geeko:rwx
group::r-x
group:mascots:rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:mascots:r-x
default:mask::r-x
default:other::---
 
'''getfacl''' gibt sowohl die Zugriffs-ACL als auch die Standard-ACL zurück.
* Die Standard-ACL setzt sich aus allen Zeilen zusammen, die mit <tt>default</tt> beginnen.
* Obwohl Sie den Befehl '''setfacl''' nur mit einem Eintrag für die Gruppe <tt>mascots</tt> für die Standard-ACL ausgeführt haben, hat '''setfacl''' automatisch alle anderen Einträge aus der Zugriffs-ACL kopiert, um so eine gültige Standard-ACL zu bilden.
* Standard-ACLs haben keine direkten Auswirkungen auf Zugriffsberechtigungen. Sie wir­ken sich nur beim Erstellen von Dateisystemobjekten aus.
* Diese neuen Objekte übernehmen Be­rechtigungen nur aus der Standard-ACL ihres übergeordneten Verzeichnisses.
 
Im nächsten Beispiel wird mit '''mkdir''' ein Unterverzeichnis in <tt>mydir</tt> angelegt, das die Standard-AC übernimmt.<br/>mkdir mydir/mysubdir
getfacl mydir/mysubdir
<nowiki># file: mydir/mysubdir </nowiki>
<nowiki># owner: tux </nowiki>
<nowiki># group: project3 </nowiki>
user::rwx
group::r-x
group:mascots:r-x
mask::r-x
other::---
default:user::rwx
default:group::r-x
default:group:mascots:r-x
default:mask::r-x
default:other::---
 
Wie erwartet, hat das neu angelegte Unterverzeichnis <tt>mysubdir</tt> die Berechtigungen aus der Standard-ACL des übergeordneten Verzeichnisses geerbt.
Die Zugriffs-ACL von <tt>mysubdir</tt> ist ein exaktes Abbild der Standard-ACL von <tt>mydir</tt>.
Die Standard-ACL, die dieses Verzeichnis an ihre un­tergeordneten Objekte weitervererbt, ist ebenfalls dieselbe.
 
# Legen Sie mit '''touch''' eine Datei im Verzeichnis <tt>mydir</tt> an.
 
Beispiel: '''touch '''<tt>mydir/myfile</tt>. '''ls '''<tt>-l mydir/myfile</tt> gibt dann Folgendes zurück: <br/>-rw-r-----+ ... tux project3 ... mydir/myfile <br/>Die Ausgabe von '''getfacl '''<tt>mydir/myfile</tt> lautet wie folgt: <br/><nowiki># file: mydir/myfile </nowiki>
<nowiki># owner: tux </nowiki>
<nowiki># group: project3</nowiki>
user::rw-
group::r-x          <nowiki># effective:r-- </nowiki>
group:mascots:r-x  <nowiki># effective:r-- </nowiki>
mask::r--
other::--- <br/>'''touch''' übergibt <tt>mode</tt> mit dem Wert <tt>0666</tt>. Dies bedeutet, dass neue Dateien mit Lese- und Schreibberechtigungen für alle Benutzerklassen angelegt werden, vorausgesetzt, '''umask''' oder die Standard-ACL enthalten keine weiteren Einschränkungen (siehe [../../../material/linux/aaa_projekte/skript/tmp/sec.acls.handle.html#sec.acls.handle.defacl.eff Abschnitt „Auswirkungen einer Standard-ACL“]). <br/>Am konkreten Beispiel heißt dies, dass alle Zugriffsberechtigungen, die nicht im <tt>mode</tt>-Wert enthalten sind, aus den entsprechenden ACL-Einträgen entfernt werden. <br/>Aus dem ACL-Eintrag der „group class“ wurden keine Berechtigungen entfernt, allerdings wurde der mask-Eintrag dahin gehend angepasst, dass Berechtigungsbit, die nicht mit <tt>mode</tt> gesetzt werden, mas­kiert werden. <br/>Auf diese Weise ist sichergestellt, dass Anwendungen, zum Beispiel Compiler, reibungslos mit ACLs interagieren können. <br/>Sie können Dateien mit beschränkten Zugriffsberechtigungen erstellen und diese anschließend als ausführbar markieren. <br/>Über den '''mask'''-Mechanismus ist gewährleistet, dass die richtigen Benutzer und Gruppen die Dateien wie gewünscht ausführen können.
 
 
 
=== ACL-Auswertungsalgorithmus ===
 
Bevor ein Prozess oder eine Anwendung Zugriff auf ein durch eine ACL geschütztes Dateisystemobjekt er­hält, wird ein Auswertungsalgorithmus angewendet.
 
Die ACL-Einträge werden grundsätzlich in der folgen­den Reihenfolge untersucht: „owner“, „named user“, „owning group“ oder „named group“ und „other“.
 
Über den Eintrag, der am besten auf den Prozess passt, wird schließlich der Zugriff geregelt. Berechtigun­gen werden nicht akkumuliert.
 
Komplizierter werden die Verhältnisse, wenn ein Prozess zu mehr als einer Gruppe gehört, also potenziell auch mehrere group-Einträge dazu passen können.
 
Aus den passenden Einträgen mit den erforderlichen Berechtigungen wird per Zufallsprinzip ein Eintrag ausgesucht.
 
Für das Endresultat „Zugriff gewährt“ ist es natürlich unerheblich, welcher dieser Einträge den Ausschlag gegeben hat.
 
Ähnliches gilt, wenn keiner der passenden group-Einträge die erforderlichen Berechtigungen enthält. In diesem Fall löst ein per Zufalls­prinzip ausgewählter Eintrag das Ergebnis „Zugriff verweigert“ aus.
 
=== ACL-Unterstützung in Anwendungen ===
 
Mit ACLs können sehr anspruchsvolle Berechtigungsszenarien umgesetzt werden, die den Anforderungen moderner Anwendungen gerecht werden.
 
Das traditionelle Berechtigungskonzept und ACLs lassen sich ge­schickt miteinander kombinieren.
 
Die grundlegenden Dateibefehle ('''cp''', '''mv''', '''ls''' usw.) unterstützen ACLs ebenso wie Samba und Konqueror.
 
Viele Editoren und Dateimanager bieten jedoch keine ACL-Unterstützung.
 
Beim Kopieren von Dateien mit Emacs gehen die ACLs der entsprechenden Dateien beispielsweise noch verloren.
 
Wenn Dateien mit einer Zugriffs-ACL im Editor bearbeitet werden, hängt es vom Backup-Modus des verwendeten Editors ab, ob die Zugriffs-ACL nach Abschluss der Bearbeitung weiterhin vorliegt.
 
Schreibt der Editor die Änderungen in die Originaldatei, bleibt die Zugriffs-ACL erhalten.
 
Legt der Editor eine neue Datei an, die nach Abschluss der Änderungen in die alte umbenannt wird, gehen die ACLs möglicherweise verloren, es sei denn, der Editor unterstützt ACLs.
 
Mit Ausnahme von Star Archiver gibt es derzeit keine Backup-Anwendungen, bei deren Verwendung die ACLs erhalten bleiben.
 
=== Weitere Informationen ===


Ausführliche Informationen zu ACLs finden Sie unter [http://acl.bestbits.at/ http://acl.bestbit.at/].  
So muss nicht jedesmal des '''chmod'''-Kommando aufrufen, wenn einen Datei erstellt wurde. Auf bestehende Dateien hat das Kommando keinen Einfluss.  


Weitere Informationen finden Sie außerdem auf den Manualpages für '''getfacl(1)''', '''acl(5)''' und '''setfacl(1)'''.
Der dreistellige Zahlenwert (für '''User''', '''Group''' und '''Others''') ist das Komplement der Angabe von '''chmod''', d. h. hier wird festgelegt, welches Bit nicht gesetzt werden soll.  


== Vererbung von Gruppenrechten ==
Stellen Sie sich vor, sie ziehen den Wert des '''umask'''-Modus vom Maximalwert 777 ab. Sie erhalten dann die Zugriffsrechte.


Wie können Dateien oder Unterverzeichnisse unterhalb eines bestimmten ext3- oder ext4-Verzeichnisses auf einem Linux-System immer mit der gleichen Gruppe und (!) immer mit den gleichen Gruppen-Rechten erzeugt werden.
; Beispiele


=== Problemstellung ===
{|class="wikitable"
 
Das Problem der Vererbung von GIDs und Gruppenrechten tritt z.B. immer dann auf, wenn mehrere Entwickler einer Gruppe auf einem Verzeichnis arbeiten und neu erzeugte Dateien auch allen anderen Benutzern der Entwicklergruppe mit gleichen Rechten zugänglich gemacht werden sollen. Und das, ohne dass man beim Erzeugen der neuen Dateien und Verzeichnisse spezielle Rechteänderungen über das "chmod"-Kommando vornehmen müsste.
 
Offenbar ist das Thema weniger trivial, als man meinen möchte. Denn manchmal liest man in Tutorials, dass es genügen würde, das SetGID-Bit für das betroffene Directory zu setzen. Das stimmt so leider nicht - und so mancher beginnt dann mit
 
<div style="margin-left:0cm;margin-right:0cm;">"chgrp -R" &nbsp; &nbsp; und &nbsp; &nbsp; "chmod -R" </div>
 
zu experimentieren. Was auch nicht hilft, weil das nur einmalige - wenn auch rekursive - Änderungen im betroffenen Zweig des Dateibaums herbeiführt. Das eigentliche Ziel ist aber, die richtige Gruppenzugehörigkeit und die notwendigen Rechte (meist Schreibrechte) schon beim Erzeugen einer Datei zu erhalten.
 
Liegen die Dateien auf einem Fremdrechner, so kann man eine Lösung über Samba erreichen. Wir wollen hier aber eine native Lösung für beschreiben.
 
Die richtige Antwort auf dieses Problem ist eine Kombination aus ACLs und dem SetGID-Bit.
 
=== Vorgehen ===
 
Wir nehmen zwei User eines Systems - "alpha" (uid 1001; dieser User wird der Entwicklunsgleiter) und "beta" (uid 1002). Beide seine Mitglieder der Gruppe "users" (gid 100). umask habe den Standardwert
 
umask 022
 
Was ist nun zu tun?
 
'''Schritt 1: Anlegen einer gemeinsamen Usergruppe '''Als root: Anlegen einer neuen Gruppe "entwickler" (gid: 101) und Zuordnen der beiden User zu dieser Gruppe. (Unter Opensuse z.B. mit Hilfe von Yast; ansonsten mit "groupadd" und "usermod -A" - siehe die man-Seiten).
 
'''Schritt 2: Check, ob ACLs für das Filesystem aktiviert sind'''Als root: Prüfe, ob das Filesystems, in dem das Verzeichnis für die Gruppenarbeit angelegt wird, mit der option "acl" gemounted wird. In der Datei "/etc/fstab" sollte sich dafür ein Eintrag der Form
 
<div style="margin-left:0cm;margin-right:0cm;">/dev/myFileSystem &nbsp; &nbsp; /myMountPoint &nbsp; &nbsp; ext4 &nbsp; &nbsp; acl,user_xattr &nbsp; &nbsp; 1 2</div>
 
finden. "myFileSystem" steht hier für das betroffene Filesystem. "/myMountPoint" steht dagegegen für das Verzeichnis, auf dem das Filesystem gemounted wird. Entscheidend ist die Option "acl".
 
'''Schritt 3: Anlegen des Verzeichnisses für die gemeinsame Entwicklungsarbeit'''Als root oder Entwicklungsleiter "alpha": Anlegen des Arbeitsverzeichnisses, unter dem die gemeinsame Projektarbeit vor sich gehen soll. Z.B.:
 
<div style="margin-left:0cm;margin-right:0cm;">mkdir &nbsp; /myMountPoint/Entwicklung </div>
 
Danach Ändern der Gruppe und der Rechte
 
<div style="margin-left:0cm;margin-right:0cm;">chgrp &nbsp; entwicklung &nbsp; &nbsp; /myMountPoint/Entwicklung
chmod &nbsp; 775 &nbsp; &nbsp; /myMountPoint/Entwicklung</div>
 
'''Schritt 4: Setzen des SetGID-Bits'''Als Entwicklungsleiter "alpha":
 
<div style="margin-left:0cm;margin-right:0cm;">chmod &nbsp; g+s &nbsp; &nbsp; /myMountPoint/Entwicklung</div>
 
Von nun an erben alle Verzeichnisse und Dateien, die unterhalb des Verzeichnisses "/myMountPoint/Entwicklung" angelegt werden, die die Gruppenzugehörigkeit zur Gruppe "entwicklung".
 
'''Schritt 5: Setzen der ACL-Maske'''Als Entwicklungsleiter "alpha":
 
<div style="margin-left:0cm;margin-right:0cm;">cd &nbsp;/myMountPoint4
setfacl -m &nbsp; &nbsp; m::rwx &nbsp; &nbsp; Entwicklung</div>
 
Diese Maske setzt die maximal möglichen Rechte für das Verzeichnis "Entwicklung".
 
'''Schritt 6: Setzen der Default-Rechte für künftige Dateien und Unterverzeichnisse'''Als Entwicklungsleiter "alpha":
 
<div style="margin-left:0cm;margin-right:0cm;">cd &nbsp; /myMountPoint
setfacl -dm &nbsp; &nbsp; g:entwicklung:rwx &nbsp; &nbsp; Entwicklung</div>
 
'''Schritt 7: Prüfen der Rechte für neue Dateien und Unterverzeichnisse'''Als Gruppenmitglied "beta":
 
<div style="margin-left:0cm;margin-right:0cm;">cd &nbsp; /myMountPoint/Entwicklung
touch &nbsp; test
ls -l
-rw-rw-r--+ 1 &nbsp; &nbsp; beta &nbsp; &nbsp; entwicklung &nbsp; &nbsp; 0 &nbsp; &nbsp; 20. Jul 20:18 &nbsp; &nbsp; test
mkdir &nbsp; testdir
ls -l
drwxrwsr-x+ 2 &nbsp; &nbsp; beta &nbsp; &nbsp; entwicklung &nbsp; &nbsp; 4096 &nbsp; &nbsp; 20. Jul &nbsp; &nbsp; 21:20 &nbsp; &nbsp; testdir
touch &nbsp; testdir/test2
ls -l &nbsp; testdir
-rw-rw-r--+ 1 &nbsp; &nbsp; beta &nbsp; &nbsp; entwicklung &nbsp; &nbsp; 0 &nbsp; &nbsp; 20. Jul &nbsp; &nbsp; 21:22 &nbsp; &nbsp; test2</div>
 
=== Links ===
 
[http://wiki.ubuntuusers.de/chmod#SGID-Bit http://wiki.ubuntuusers.de/chmod#SGID-Bit][http://wiki.ubuntuusers.de/ACL#Verzeichnisse http://wiki.ubuntuusers.de/ACL#Verzeichnisse]
 
== ext3-/ext4-Dateiattribute<div style="margin-left:0cm;margin-right:0cm;">aktualisieren</div>
 
<div style="margin-left:0cm;margin-right:0cm;">+ e</div>
 
 
<div style="margin-left:0cm;margin-right:0cm;">Status?</div> ==
 
Zusätzlich zu der aus dem Dateisystemkonzept von Unix übernommenen Methode, die Datensicherheit durch Reglementierung der Zugriffsrechte zu erhöhen, bietet das ext2fs mit seinen Dateiattributen weitere Mechanismen an, die den Datenschutz in verschiedenen Richtungen verbessern.
 
Dateien lassen sich seit ext2-0.5a durch die Attribute <tt>'''a'''</tt> (append) und <tt>'''i'''</tt> (immutable) zusätzlich vor Verän­derungen schützen. In den I-Nodes des ext2fs steht ein vier Bytes großes Feld für „Flags'' zur Verfügung.
 
Von diesem 32 Bit großen Bereich ist zur Zeit nur die Bedeutung der ersten sieben bit für bestimmte Dateiattribute definiert, der Rest des Feldes steht für zukünftige Erweiterungen bereit. Selbst der erfahrene Linuxer ist vor Fehlern nicht gefeit. Man stelle sich nur vor, man wollte alle Dateien aus einem Unterverzeichnis löschen:
 
rm -rf ~/DirToDelete/ *
 
Das Beispiel sieht harmlos aus, birgt aber einen fatalen Fehler in sich: das Leerzeichen zwischen Pfadangabe und dem <tt>'''<nowiki>*</nowiki>'''</tt>. Verschwunden sind nicht die gewünschten Daten, sondern der komplette Inhalt des aktuellen Verzeichnisses (falls man die Berechtigung dazu besaß).
 
Linux bietet bekannterweise keine zuverlässige Methode des Wiederherstellens gelöschter Daten.
 
Dafür ermöglicht das Linux-Dateisystem ext2 die Vergabe von Attributen für Dateien und Verzeichnisse. Sicher wird man aus Bequemlichkeit meist auf diese verzichten, aber essentielle Daten lassen sich somit zuverlässig schützen.
 
Zum Setzen von Attributen dient das Kommando <tt>'''chattr'''</tt>, anzeigen lassen sie sich mittels <tt>'''lsattr'''</tt>.
 
'''Übersicht Datei-Attribute'''
 
 
{| style="border-spacing:0;margin:auto;width:17.501cm;"
|-
| style="background-color:transparent;border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''a'''</tt>
| style="border-top:2.5pt solid #000000;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | (append) Eine mit diesem Attribut gekennzeichnete Datei kann nur durch Anhängen zusätzlicher Daten ver­ändert werden. Das überschreiben der bereits gespeicherter Daten, das Löschen, Umbenennen oder Ver­schieben ist nicht möglich.
|-
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''d'''</tt>
| style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | (dump) Mit diesem Attribut können Dateien markiert werden, die von der inkrementellen Sicherung durch dump ausgenommen werden sollen.
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''i'''</tt>
| | '''umask 022'''
| style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | (immutable) Eine Datei, die mit diesem Attribut ausgestattet ist, läßt sich in keiner Weise verändern. Sie kann nicht gelöscht oder umbenannt werden, es können keine Links auf sie erzeugt werden und der Inhalt der Datei lässt sich nicht überschreiben oder erweitern. Zum Setzen oder Löschen dieses Attributs sind Rootprivilegien erforderlich.
|  | '''7 7 7<u>- 0 2 2</u>= 7 5 5'''
| | '''rwx r-x r-x'''
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''s'''</tt>
| | '''umask 027'''
| style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | (secure) Durch dieses Attribut können Dateien, deren Inhalt besonders vor dem unberechtigten Zugriff an­derer Systembenutzer geschützt werden soll, zum sicheren Löschen markiert werden. Die Datenblöcke wer­den dann beim Löschen durch zufällige Daten überschrieben.
|  | '''7 7 7<u>- 0 2 7</u>= 7 5 0'''
| | '''rwx r-x ---'''
|-
|-
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''S'''</tt>
| | '''umask 177'''
| style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | (Sync) Dieses Attribut veranlaßt den Kernel, jede Veränderung der I-Node synchron durchzuführen. Die ver­änderten Daten werden ungepuffert sofort auf das Speichermedium geschrieben.
| | '''7 7 7<u>- 1 7 7</u>= 6 0 0'''
|-
|  | '''rw- --- ---'''
| style="background-color:transparent;border-top:none;border-bottom:0.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''u'''</tt>
| style="border-top:none;border-bottom:0.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | (undelete) Noch ohne Funktion. Durch dieses Attribut soll eine Datei zukünftig auch nach dem Löschen noch intakt gehalten werden, damit das Retten der Daten durch die noch zu entwickelnde <tt>'''undelete'''</tt>-Funktion möglich ist.
|-
| style="background-color:transparent;border-top:none;border-bottom:2.5pt solid #000000;border-left:2.5pt solid #000000;border-right:none;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | <tt>'''c'''</tt>
| style="border-top:none;border-bottom:2.5pt solid #000000;border-left:0.5pt solid #000000;border-right:2.5pt solid #000000;padding-top:0.15cm;padding-bottom:0.15cm;padding-left:0.349cm;padding-right:0.349cm;" | (compressed) Noch ohne Funktion. Dieses Attribut wird einmal den Kernel veranlassen, die entsprechende Datei komprimiert zu speichern.
|-
|-
|}
|}
Veränderungen an den Dateiat­tributen können nur die Benutzer vornehmen, die auch die Datei selbst ver­ändern dürfen (also schreibbe­rechtigt sind).
=== Nur Anhängen ===
Beim traditionellen System der Zugriffsregelung wird das Schreiben ganz allgemein entweder erlaubt oder verboten.
Die Erlaubnis erstreckt sich uneingeschränkt auf das Schreiben an jeder beliebigen Stelle der Datei.
Damit bedeutet Schreiben in diesem Sinne sowohl Schreiben als auch Überschreiben.
Das Betriebssystem kann, dem POSIX-Standard entsprechend, zwischen wahlfreiem Schreiben und dem ausschließlichen Schreiben am Ende einer Datei, also dem Anhängen von Daten, unterscheiden.
Das ext2-Dateisystem unterstreicht diese Unterscheidung und führt damit ein zusätzliches Sicherheits­merkmal ein. Durch das append-Attribut <tt>'''a'''</tt> wird jeder Schreibzugriff automatisch am Ende der Datei aus­geführt; es gibt dann keine Möglichkeit, die Schreibposition an eine andere Stelle zu setzen.
Zusätzlich kann eine durch dieses Attribut gesicherte Datei nicht gelöscht, gelinkt, umbenannt oder ver­schoben werden. Dieser Schutz läßt sich auch durch Rootprivilegien nicht umgehen.
Das append-Attribut kann jeder Benutzer für seine eigenen Dateien ändern. Mit Rootprivilegien ist auch das Ändern fremder Dateiattribute möglich.
=== Einfrieren ===
Allein die Superuserin kann eine Datei im ext2-Dateisystem völlig einfrieren.
Das immutable-Attribut ver­bietet jeden Schreibzugriff auf eine Datei. Zusätzlich sind wie beim append-Attribut Löschen, Linken, Um­benennen und Verschieben der Datei unmöglich.
Der normale Eigentümer einer Datei kann das immutable-Attribut nicht verändern.
Damit kann ihm durch dieses Attribut jede Veränderung wirksam verboten werden. Diese Restriktion macht für natürliche Sys­tembenutzer keinen Sinn.
Für news, mail und ähnliche Systemaccounts, die sich dadurch auszeichnen, daß viele Programme zur Laufzeit mit den Rechten dieser ``Eigentümer'' arbeiten, bietet immutable wirksam zusätzliche Sicherheit vor Mißbrauch.
Das immutable-Attribut selbst kann mit Rootprivilegien wieder gelöscht werden.
Einen absoluten Schutz vor unberechtigter Veränderung einer Datei bietet also auch dieses Attribut nicht.
=== Sicheres Löschen ===
Beim Löschen einer Datei wird in den Linux-Dateisystemen normalerweise der Verzeichniseintrag gelöscht und die Inode sowie die Datenblöcke freigegeben, wenn der Verzeichniseintrag der letzte für diese Datei war.
Die freigegebenen Datenblöcke werden bei irgendeiner Gelegenheit durch einen anderen Prozeß wieder belegt.
Es ist kein Geheimnis, daß der Inhalt solcher Datenblöcke von dem Prozeß, dem sie zugeteilt wor­den sind, auch gelesen werden kann.
Wenn ein Prozeß den Datenblock liest, bevor er eigene Daten hin­eingeschrieben hat, kann er fremde Daten darin finden.
Um diese unbeabsichtigte Weitergabe von Daten zu verhindern, bietet das ext2-Dateisystem die Möglich­keit, alle von einer Datei belegten Datenblöcke durch zufällige Zeichen zu überschreiben, bevor sie beim Löschen für andere Prozesse freigegeben werden.
Das secure-Attribut schickt die Dateien beim Löschen also durch einen elektronischen Reißwolf.
Sie sollten allerdings bedenken, daß häufig bei der Bearbeitung von Dateien durch andere Programme Ko­pien angelegt werden, die nicht automatisch mit dem secure-Attribut ausgestattet sind.
=== Synchrones Schreiben ===
Indem Linux einen Großteil des freien Arbeitsspeichers als Puffer für die relativ langsamen Festplattenzu­griffe nutzt, wird die Geschwindigkeit des System spürbar erhöht.
Diese erhebliche Leistungssteigerung geht zu Lasten der Datensicherheit. Wenn das System nämlich aus irgendeinem Grund abstürzen sollte, sind die im Puffer veränderten, aber noch nicht auf die Festplatte zu­rückgeschriebenen Daten verloren.
Besonders unangenehm wird es, wenn es sich bei den verlorenen Daten um Strukturinformation handelt.
In diesem Fall kann auch die bereits sicher auf der Festplatte befindliche Information unzugänglich wer­den.
Der Verzicht auf die Datenpufferung kommt nicht ernsthaft in Betracht.


Ein Betriebssystem, das mehrere Benutzer und viele Prozesse gleichzeitig bedienen soll, braucht ein sehr schnelles Dateisystem.
<noinclude>


Um wenigstens die Sicherheit der bereits auf Festplatte gespeicherten Daten zu optimieren, bietet das ext2-Dateisystem die Möglichkeit, mit dem synchron-Attribut die ungepufferte Verwaltung der Metadaten einer Datei zu erreichen.
== Anhang ==
=== Siehe auch ===
{{Special:PrefixIndex/{{BASEPAGENAME}}}}
==== Links ====
===== Weblinks =====


Verzeichnis und Inode werden unmittelbar nach ihrer Veränderung auf die Festplatte geschrieben.
[[Kategorie:Linux/Zugriffsrechte]]
</noinclude>

Aktuelle Version vom 19. Oktober 2024, 13:37 Uhr

topic - Beschreibung

Beschreibung

UNIX-Zugriffsrechte

Um den Zugriff auf Dateien zu regeln, können die Rechte an den Besitzer, die Gruppe und alle anderen vergeben werden.

r read (Lesen)
w write (Schreiben)
x execute (Ausführen)
R W X R W X R W X
user group others
Beispiel
$ ls -l 
-rw-r-----  1 dirkw privat  2374 2006-10-16 16:15 addressbook.odb

Die Datei addressbook.odb wurde am 16.10.2006 um 16:15 erstellt. Sie ist 849093 Bytes groß und ge­hört dem Benutzer "dirkw" sowie der Gruppe "privat". Das Rechtefeld schlüsselt sich wie folgt auf:

- rw- r-- ---
Dateityp Eigentümers Gruppe alle Anderen
Es handelt sich um eine normale Datei. Der Eigentümer darf die Datei lesen, ändern, aber nicht ausführen Die Gruppe darf die Da­tei nur lesen Alle anderen haben kei­nen Zugriff auf die Datei

Zugriffsrechte ändern

chmod·Modus·Dateiliste

Einstellen der Zugriffsrechte einer Datei. Dies kann im symbolischen oder numerischen Modus durchgeführt werden.

Symbolischer Modus

Modus = BereichOperandBerechtigung 
Bereich u (user) Eigentümer g (group) Gruppe o (others) Übrige Benutzer a(all) oder keine Angabe ändert alle Bereiche
Operand + Recht hinzufügen - Recht wegnehmen = Setzt neue Rechte und löscht alle bisherigen
Berechtigung r Read w Write x eXecute

t(sTicky bit) schützt Datei oder verhindert das löschen einer Datei von Nicht-Eigentümern

s(Set user id) setzt Benutzer- oder Gruppen-ID bei der Ausführung

Beispiele
chmod·+x·datei Ausführungsrecht für alle hinzufügen
chmod·go-w·datei Schreibrecht nur noch für User
chmod·g+rwx·datei Volle Rechte für Gruppe
chmod·ugo-rwx·datei Allen alle Rechte entziehen

Kombinationen mit verschiedenen Zugriffsrechten für verschiedene Rollen können kommagetrennt ange­geben werden:

$ chmod u=rw,g=rw,o=r ktoNr
$ ls -l
-rw-rw-r-- 1 anna users 9 18. Okt 13:20 ktoNr

Numerischer Modus

Systemintern werden die Zugriffsrechte numerisch verwaltet

  • Diese Methode kann auch zum Setzen der Rechte verwendet werden
  • Die erste Ziffer bezeichnet die Schutzbit, die zweite Rech­te des Eigentümers, die dritte die Gruppenrechte und vierte Ziffer die Rechte aller anderen Benutzer.

Die Zahl errechnet sich durch addieren folgender Okalwerte

SUID SGID STI R W X R W X R W X
4 2 1 4 2 1 4 2 1 4 2 1
special rights User Group Others

Beispiel

chmod 777·datei 
rwx rwx rwx
chmod 750 
rwx r-x ---
chmod 1750 

rwx r-w --t

Special Rights

Um den Zugriff noch genauer zu regeln, gibt es drei weiter Schutzbit
SUID SGID STI R W X R W X R W X
special rights User Group Others

Set User ID (SUID)

Wenn das SUID-Bit (Set User ID) gesetzt ist, behält das Programm für die Dauer der Ausführung die Rechte des Programmeigentümers und nicht jene dessen, der die Programme aufruft.

Setzen
chmod·u+s·datei
Anzeige
-rwsr-xr-x  1 root shadow 80036 2004-10-02 11:08 /usr/bin/passwd

"S" statt "X" bei den User-Rechten:

Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 's' angezeigt, ansonsten ein großes 'S'.

Beispiel
  • Alle Benutzer sind in einer speziellen Datei gespeichert, die nur der Superuser ändern darf - sonst könnte ja jeder einen neuen Benutzer eintragen.
  • Jeder Benutzer kann aber sein Passwort ändern, das auch in dieser Datei steht. Dazu muss er schreibend auf die Datei zugreifen - obwohl er dazu keine Berechtigung besitzt.
  • Das Programm "passwd" gehört dem Superuser, hat das SUID-Bit gesetzt und kann so auf die User-Datei schreibend zugreifen.

Set Group ID (SGID)

  • Wenn das SGID-Bit (Set Group ID) gesetzt ist, hat das Programm die Rechte der Gruppe, zu der es gehört. Dieses Feature wird z. B. beim Drucker-Spooling verwendet.
  • Bei Dateien ohne Ausführungsrecht sorgt dieses Bit dafür, dass die Datei nur von einem Prozess geöffnet werden kann.
  • Bei Verzeichnissen hat das SGID-Bit eine andere Aufgabe. Dateien, die in das Verzeichnis kopiert oder erstellt werden, automatisch die Gruppe des Verzeichnisses erhalten (man muss also nicht mehr explizit die Gruppe setzen, um den Mitgliedern einer Gruppe Zugriff zu ermöglichen).
Setzen
$ chmod·g+s·datei
Anzeige
drwxrws--- 2 tux archive 48 Nov 19 17:12  backup

"s" statt "x" bei den Gruppen-Rechten

Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 's' angezeigt, ansonsten ein großes 'S'.

STICKY Bit

  • Das STICKY-Bit sollte früher den Systemdurchsatz verbessern. Programme, bei denen dieses Bit gesetzt ist, verbleiben nach dem ersten Aufruf im Speicher und starten bei den folgenden Aufrufen schneller. Heute ist das nicht mehr nötig.
  • Bei Verzeichnissen dient dieses Bit der Systemsicherheit.

Auch wenn im Verzeichnis für alle User Schreibrecht existiert (= Löschen und Anlegen von Dateien), können bei gesetztem Sticky-Bit nur Dateien gelöscht werden, die einer folgenden Bedingungen genügen: # die Datei gehört dem Benutzer, der sie löschen will

  1. das Verzeichnis, in dem die Datei liegt, gehört dem Benutzer
  2. der Benutzer hat Schreibrecht für die Datei
  3. der Superuser will die Datei löschen
Setzen
$ chmod·+t·datei
Anzeige
drwxrwxrwt 2 root root 1160 2002-11-19 17:15 /tmp

t" statt "x" bei den "Others"-Rechten

Ist zugleich das Ausführungsrecht (x) gesetzt, wird ein kleines 't' angezeigt, ansonsten ein großes 'T'.

Vorgaben setzen mit umask

$ umask Modus

Das Kommando umask setzt Standardeinstellung für Zugriffsrechte für alle Dateien, die nach Aufruf von umask erzeugt werden.

So muss nicht jedesmal des chmod-Kommando aufrufen, wenn einen Datei erstellt wurde. Auf bestehende Dateien hat das Kommando keinen Einfluss.

Der dreistellige Zahlenwert (für User, Group und Others) ist das Komplement der Angabe von chmod, d. h. hier wird festgelegt, welches Bit nicht gesetzt werden soll.

Stellen Sie sich vor, sie ziehen den Wert des umask-Modus vom Maximalwert 777 ab. Sie erhalten dann die Zugriffsrechte.

Beispiele
umask 022 7 7 7- 0 2 2= 7 5 5 rwx r-x r-x
umask 027 7 7 7- 0 2 7= 7 5 0 rwx r-x ---
umask 177 7 7 7- 1 7 7= 6 0 0 rw- --- ---


Anhang

Siehe auch

Links

Weblinks