Dateirechte


Linux und Unix Systeme verwalten die Dateien in einem Virtual File System (VFS). Dieses weist jeder Datei die Eigenschaften, Dateityp, Besitzer, Gruppe und Zugriffsrechte zu. Unter Windows werden diese Rechte nicht umgesetzt.




Den Verzeichnissen und Dateien sind Benutzer und Gruppen zugeordnet, dabei ist der Benutzer der Eigentümer. Das (x) bit eines Verzeichnisses beschreibt, ob auf das Verzeichnis z.B. mit cd zugegriffen werden darf. Legt man in einem Verzeichnis neue Dateien oder Unterverzeichnisse an, werden die Rechte nicht vererbt. Sie müssen ggf. angepasst werden. Dies beruht darauf, dass keine ACL verwendet wird.


Die Datei und Verzeichnisrechte lassen sich auslesen z.B mit ls -l.

root@home:/etc# ls -l
insgesamt 1384
drwxr-xr-x  4 root     root     4096 24. Feb 2010  acpi
-rw-r--r--  1 root     root     2986 23. Feb 2010  adduser.conf
-rw-r--r--  1 root     root       44 15. Mär 09:45 adjtime
...




Zugriffsrechte auf Dateien und Verzeichnisse werden in einer Binären Zeichenkette von 12 Bit definiert. Die Zeichenkette wird entweder symbolisch oder Oktal dargestellt.

Oktalzahlen User/Besitzer Gruppe Andere
0
1 x
2 w
3 w x
4 r
5 r x
6 r w
7 r w x




Rechte auf:

  • r ⇒ read
  • w ⇒ write
  • x ⇒ execute
  • X ⇒ Execute Special – Setzt x nur bei Verzeichnissen oder wenn bereits ein x-Recht gesetzt ist




wer:

  • u ⇒ user
  • g ⇒ group
  • o ⇒ others
  • a ⇒ all




Specialbits:

  • u+s ⇒ setuid (x bit für Besitzer muß gesetzt sein (z.B. u+x))
  • g+s ⇒ setgid (x bit für Gruppe muß gesetzt sein (z.B. g+x))
  • +t ⇒ stickybit
  • o+t ⇒ stickybit bzw. Oktal 1000 (z.B. 1777 statt 777)




Oktalzahlen:

setuid 4000
setgid 2000
sticky 1000




Befehle:

  • + ⇒ Attribute hinzufügen.
  • - ⇒ Attribute entfernen.
  • = ⇒ Attribute zuweisen, bestehende Attribute werden entfernt.




Spezialattribute (0)644 in Klammern=Spezialattribut

  • Setuid-Bit ⇒ ausführbare Datei wird so ausgeführt, als hätte der Eigentümer sie gestartet.
    • * Beispiel: drwsrwxrwx
  • Setgid-Bit ⇒ ausführbare Datei wird mit Rechten der Gruppeausgeführt.
    • * Beispiel: drwxrwsrwx
  • sticky-Bit ⇒ erlaubt in einem Verzeichnis das löschen eines Eintrags nur dem Eigentümer
    • * Beispiel: drwxrwxrwt




Funktionsweise bei Dateien:

  • Sticky: Wird nicht benutzt.
  • Setuid: Die ausführbare Datei wird nicht mit als der User ausgeführt, der das Programm startet, sondern als der User, dem die Datei gehört. Damit kann man Diensten bestimmte Rechte geben, auch wenn ein normaler Benutzer sie startet.
  • Setgid: Wie Setuid, jedoch bezogen auf die Gruppe.




Funktionsweise bei Verzeichnissen:

  • Sticky: In dem Verzeichnis dürfen Dateien nur gelöscht werden, wenn man Besitzer der Datei oder des Verzeichnisses ist oder selbst Schreibrechte für die Datei hat. Es genügt nicht, nur Schreibrechte am Verzeichnis zu haben. Dies ist Sinnvoll, damit sich Benutzer Dateien nicht gegenseitig weglöschen können, z.B. in /tmp.
  • Setuid: Wird nicht benutzt.
  • Setgid: Neu angelegte Dateien in diesem Verzeichnis erhalten nicht die Gruppe des Benutzers, sondern die Gruppe, der aktuell auch das Verzeichnis gehört. Damit lassen sich z.B. Team-Ordner erstellen.



Wichtig zu wissen ist, dass beim Löschen einer Datei nur Schreiberecht im Verzeichnis, nicht jedoch für die Datei erforderlich ist. Ein Benutzer mit Schreibzugriff auf ein Verzeichnis kann also Dateien löschen, auch wenn er an der Datei selbst kein Recht hat.





chmod


chmod“ ändert die Zugriffsrechte auf Dateien und Verzeichnisse (9 Zugriffsbits). Diese legen fest, wer Dateien lesen, schreiben oder ausführen darf. (Siehe oben).


Syntax:

  • chmod [opt] [modus] <datei/verzeichnis>




Optionen:

  • -R ⇒ Dateien und Verzeichnisse rekursiv ändern.
  • -c ⇒ Changes, Zeige an, was geändert wurde.
  • -f ⇒ Die meisten Fehlermeldungen unterdrücken.
  • -v ⇒ Eine Diagnose für jede verarbeitete Datei ausgeben.
  • --help ⇒ Hilfe anzeigen und beenden.
  • --version ⇒ Versionsinformation anzeigen und beenden.




Beispiele:

Datei kann von allen Benutzern ausgeführt werden.

chmod a+rx datei




Sticky Bit für datei setzen.

chmod +t datei




Zugriffsrechte für [datei] rekursiv setzen auf „Besitzer (lesen, schreiben, ausführen), Gruppe (lesen, schreiben, ausführen), alle Anderen (lesen, ausführen)“.

chmod -R 775 datei




Die Datei [datei] wird mit Rechten der Gruppe ausgeführt.

chmod g+s datei





suid


Eine Datei mit gesetzten SUID Bit (s), Oktal (4000) wird immer mit den rechten des Besitzers ausgeführt. Zu erkennen ist das an dem Symbol [s] bei den Ausführungsberechtigungen des Besitzers der Datei. Setzen kann man dieses Bit mit „chmod“.

root@home:~# ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 34740 15. Feb 2011  /usr/bin/passwd

Diese Dateien werden mit „root“ Rechten ausgeführt.


root@home:~# find / -perm -u+s

Mit diesen Befehl kann man das System nach Dateien mit gesetzten SUID Bit durchsuchen.



root@home:~# chmod 4755 script.sh


uta@jupiter:~$ ls -l
insgesamt 0
-rwsr-xr-x 1 root root 0 17. Okt 18:47 script.sh

Dieses Script ist jetzt durch jeden als root ausführbar.



sgid


SGID (s), Oktal (2000) verhält sich auf ausführbare Dateien ähnlich wie SUID nur wird die Datei mit den Rechten der Gruppe ausgeführt. Wird das SGID Bit auf ein Verzeichnis angewandt, werden alle neu erstellten Dateien in diesem Verzeichnis der Gruppe zugeordnet, der das Verzeichnis gehört. Setzen kann man dieses Bit mit „chmod“.

root@home:~# ls -l /usr/bin/procmail
-rwsr-sr-x 1 root mail 75896 26. Apr 2010  /usr/bin/procmail





sticky bit


Bei gesetzten Sticky Bit (t), Oktal (1000) auf ein Verzeichnis, kann nur der Eigentümer der Datei oder root diese umbenennen oder löschen. Auf Dateien angewandt hat das keinen Einfluss.

root@home:~# ls -l /
...
drwxrwxrwt  14 root root  4096 16. Okt 05:17 tmp
...



Diese Spezialbits verdecken mit dem ls -l Kommando die Ausführungsberechtigungen, deshalb werden diese Bits (s), (t) für ausführbar oder (S), (T) nicht ausführbar dargestellt.

-rwxr-Sr-- 1 uta vertrieb 0 17. Okt 18:47 script.sh

Dieses Script ist für die Gruppe vertrieb nicht ausführbar.



chown


Ändert Besitzer und (oder) Gruppenzugehörigkeit von Dateien und Verzeichnissen. Der Besitzer kann nur von „root“, die Gruppe auch von anderen verändert werden.


Syntax:

  • chown [opt] [user][:gruppe] <datei>




Optionen:

  • -R ⇒ Dateien und Verzeichnisse rekursiv ändern.
  • -c ⇒ Changes, Zeigt an, was geändert wurde.
  • -f ⇒ Die meisten Fehlermeldungen unterdrücken.
  • --preserve-root ⇒ Rekursive Bearbeitung von [/] ablehnen.
  • -v ⇒ Eine Diagnose für jede verarbeitete Datei ausgeben.
  • --help ⇒ Hilfe anzeigen und beenden.
  • --version ⇒ Versionsinformation anzeigen.


  • user bzw. uid
  • user:
  • user:group
  • :group




Beispiele:

Datei bekommt Besitzer [user].

chown [user] datei




Datei wird dem Besitzer [user] und der Gruppe [group] zugewiesen.

chown user:group datei





chgrp


Ändert die Gruppenzugehörigkeit von Dateien und Verzeichnisse. Der Besitzer einer Datei darf Zugehörigkeit auf Gruppen ändern, vorausgesetzt Besitzer ist Mitglied der Gruppe, ansonsten ist dieses Kommando „root“ vorbehalten.


Syntax:

  • chgrp [opt] [group] [datei]




Optionen:

  • -R ⇒ Rekursiv
  • -c ⇒ Changes, Zeige an, was geändert wurde.




Beispiel:

Datei wird der Gruppe [root] zugewiesen.

chgrp root datei





umask


umask“ legt fest, welche Rechte für neu erstellte Dateien und Verzeichnisse Standardmäßig gesetzt werden. Um den Wert von „umask“ dauerhaft zu verändern muß der Wert für Systemweite Änderung in der Datei „/etc/profile“ oder bei Debian in der Datei „/etc/login.defs“ und auf Benutzerebene in der Datei „~/.bash_profile“ angepasst werden. Danach ist eine Neuanmeldung nötig.


Die aktuellen Einstellungen kann man mit dem Kommando „umask“ einsehen. Neue „umask“ Werte lassen sich mit „umask [wert]“ setzen.

uta@home:~$ umask
0022



Beim erstellen einer Datei wird der „umask“ Wert von „0666“, bei Verzeichnissen von „0777“ subtrahiert. Das ergibt bei einem „umask“ Wert von „0022“ bei neu erstellten Dateien die Rechte „0644“ und neuen Verzeichnissen „0755“. Für neue Dateien gibt es grundsätzlich kein Ausführungsrecht.

0644 = 000 110 100 100    0755 = 000 111 101 101
       --- rw- r-- r--           --- rwx r-x r-x


Standardmäßig wird oft der „umask“ Wert von „0022“ eingesetzt, also ein Leserecht für alle. Will man diese Rechte weiter einschränken, kann der „umask“ Wert auf „0027“ gesetzt werden, dadurch wird bei neuen Dateien und Verzeichnissen „others“ das Leserecht entzogen.



Beispiel:

root@home:~# umask 0027
root@home:~# umask 27
root@home:~# umask u=rwx,g=rx,o=

Diese drei Befehle setzen jeweils den „umask“ Wert auf „0027“.



chattr


Für ext2, ext3 und ext4 Dateisysteme können Spezialattribute auf Dateien und Verzeichnisse angewandt werden.


Syntax:

  • lsattr [datei|verz] ⇒ Zeigt gesetzte Spezialattribute.
  • chattr [opt] [+,-,=attr] [datei|verz] ⇒ Setzen von Spezialattributen.




Optionen:

  • -R ⇒ chattr rekursiv aufrufen.
  • -V ⇒ Verbose.
  • -v ⇒ Version.




Für die Verschiedenen Attribute können folgende Operatoren verwendet werden.

  • + ⇒ Attribute hinzufügen.
  • - ⇒ Attribute entfernen.
  • = ⇒ Attribute zuweisen. Alle bestehenden Attribute werden entfernt.




Attribute:

  • a ⇒ append only. Datei darf nur anhängend erweitert werden.
  • c ⇒ compressed. Datei wird durch den Kernel komprimiert.
  • d ⇒ no dump. Datei kann nicht durch dump gesichert werden.
  • i ⇒ immutable. Datei kann nicht modifiziert, umbenannt oder gelöscht werden.
  • j ⇒ data journaling. Dateien werden ins ext3 Journal geschrieben, bevor sie ins Dateisystem geschrieben wird.
  • s ⇒ secure deletion. Wird die Datei gelöscht, wird der Datenbereich mit nullen überschrieben.
  • u ⇒ undeletable. Datei kann gelöscht, jedoch auch wieder hergestellt werden.
  • A ⇒ no atime updates. Die Zugriffzeit wird nicht aktualisiert.
  • D ⇒ synchronuous directory updates. Verzeichnisänderungen werden Synchron auf die Festplatte geschrieben.
  • S ⇒ synchronuous updates. Dateiänderungen werden Synchron auf die Festplatte geschrieben.
  • T ⇒ top of directory hierachy. Verzeichnis wird als Top der Verzeichnishierarchie angesehen.




Beispiele:

root@home:~# chattr -V +adAS datei1 datei2 datei3
chattr 1.41.12 (17-May-2010)
Flags von datei1 wie folgt gesetzt: --S--adA-----------
Flags von datei2 wie folgt gesetzt: --S--adA-----------
Flags von datei3 wie folgt gesetzt: --S--adA-----------

Bei dateien 1-3 darf schreibend nur angehängt (a) werden, die letzte Zugriffszeit wird nicht aktualisiert (A), die Dateien können nicht mit „dump“ gesichert werden (d) und Dateiänderungen werden sofort auf die Festplatte geschrieben (S).


root@home:~# lsattr
--S--adA----------- ./datei3
--S--adA----------- ./datei1
--S--adA----------- ./datei2

Spezialattribute anzeigen.




FIXME
Mit Access Control Lists kann man Benutzer und Gruppen Rechte an Dateien geben oder entziehen. ACLs ergänzen das Linux Rechtesystem, denn man kann mit ihnen z.B. Rechte für neu anzulegende Dateien eines Verzeichnisses erzwingen. Als nachteil von ACLs kann gesehen werden dass es Shellbefehle gibt, die ACL ignorieren oder Probleme verurachen können.

ACLs können bei den Dateisystemen jfs, xfs standardmäßig gesetzt werden. Bei ext3, ext4 und reiserfs Dateisysteme muß ACL zuvor aktiviert werden.

Diese Aktivierung kann in der Datei „/etc/fstab“ vorgenommen werden.

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
...
# /home was on /dev/sda6 during installation
UUID=b34cd82d-4d4e-46za-a014-cd781239c7ed /home           ext3    defaults,nodev,acl     0       2
...



Sind in der „/etc/fstab“ die Optionen „acl“ oder „noacl“ gesetzt, so stehen diese hierarchisch über den Einträgen im Dateisystem. Mit „noacl“ wird die Nutzung von ACLs verboten.




Bei ext2 und ext3 kann man auch im Dateisystem eintragen um mit ACL gemountet zu werden.

root@home:~# tune2fs -o acl /dev/sda3


root@home:~# tune2fs -l /dev/sda3
...
Default mount options:    acl
...




root@home:~# tune2fs -o ^acl /dev/sda3

ACL Eintrag aus Dateisystem entfernen:
FIXME


Mehr Infos zu tune2fs.



Cloud