Dateirechte


Linux und Unix Systeme verwalten die Dateien in einem Virtual File System (VFS). Im Virtual File System werden Dateien und Verzeichnissen die Eigenschaften, Dateityp, Besitzer, Gruppe und Zugriffsrechte zugewiesen. Unter Windows werden die Linux VFS 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




Special Bits:

  • 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 Gruppe ausgefü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.




Beim Löschen einer Datei wird ist nur Schreibrecht im Verzeichnis, nicht für die Datei erforderlich. Ein Benutzer mit Schreibzugriff auf ein Verzeichnis kann also Dateien löschen, auch wenn er an der Datei selbst kein Recht hat.





chmod


Mit chmod können die Zugriffsrechte auf Dateien und Verzeichnisse (9 Zugriffs Bits) geändert werden. Die 9 Zugriffs Bits legen fest, wer Dateien lesen, schreiben oder ausführen darf.


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 Bits 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 Skript 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 angewendet, 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 angewendett 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 Skript 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


Mit chgrp kann die Gruppenzugehörigkeit von Dateien und Verzeichnissen geändert werden. Der Besitzer einer Datei darf die Zugehörigkeit auf Gruppen ändern, vorausgesetzt der Besitzer ist Mitglied der Gruppe. Ansonsten muss dieses Kommando root durchführen.


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


Mit umask wird festgelegt, welche Rechte für neu erstellte Dateien und Verzeichnisse standardmässig gesetzt werden. Um den Wert von umask dauerhaft zu verändern, muss 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, damit die Änderungen wirksam werden.


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 bei 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ässig 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 mit chattr Spezialattribute auf Dateien und Verzeichnisse gesetzt werden.


Syntax:

  • lsattr [Datei|Verzeichnis] ⇒ Zeigt gesetzte Spezialattribute.
  • chattr [opt] [+,-,=attr] [Datei|Verzeichnis] ⇒ 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 den 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.



Dateizugriffsrechte im /home Verzeichnis ändern




Andere dürfen Benutzerverzeichnis lesen



# aktuelles homeverzeichnis wird benutzer und gruppe zugewiesen
root@home:~# chown benutzer:benutzer ~benutzer -R
# homeverzeichnis bekommt rekursiv lese, schreib und ausführungsrechte
root@home:~# chmod -R u+rwX ~benutzer
root@home:~# chmod 600 ~benutzer/.dmrc
root@home:~# chmod 755 ~benutzer





Andere dürfen in Benutzerverzeichnis eintauchen



(echo; echo "umask 027") | tee --append ~/.bash_profile >> ~/.profile
root@home:~# chmod -R o-rwx $HOME
root@home:~# chmod o+x $HOME


Durch umask 027 wird festgelegt, dass neu angelegte Dateien keine lese, schreib und Ausführungsrechte für andere Benutzer bekommen. Als nächstes werden rekursiv auf alle Dateien im Homeverzeichnis für others die Rechte genommen. Zuletzt wird das x-Bit gesetzt, um anderen Benutzern das eintauchen, nicht aber das Betrachten des Verzeichnisinhalts ermöglicht.


Die Änderungen werden erst nach einer Neuanmeldung wirksam.





Dateien aller neu angelegten Benutzer dürfen von anderen nicht gelesen werden



root@home:~# sed -ie 's/^umask.*$/umask 027/' /etc/profile
root@home:~# dpkg-reconfigure adduser


Hier wird umask 027 global für alle neuen Benutzer gesetzt.




md5sum


Mit md5sum können Prüfsummen für Dateien erstellt und überprüft werden. Beim erstellen der Prüfsumme wird ein Hash Wert generiert, der aus einem 32 Zeichen (aus den Ziffern 0-9 und a-f besteht). Mit diesem Wert lassen sich Dateien auf Veränderungen oder Beschädigung überprüfen.


Syntax:

  • md5sum [opt.] [datei] [datei2] [*]




Optionen:

  • -b ⇒ Im Binärmodus lesen.
  • -c [md5sum] ⇒ Prüfsumme aus Datei einlesen und überprüfen.
  • -t ⇒ Im Textmodus einlesen (default).
  • --quiet ⇒ Nicht für jede erfolgreich geprüfte Datei Ok ausgeben.
  • -w ⇒ Bei ungeeignet formatierten Prüfsummenzeilen warnen.
  • --help ⇒ Hilfe anzeigen und Ende.
  • --version ⇒ Versionsinformationen ausgeben.




Beispiel:


hans@home:~$ md5sum datei > MD5SUM




hans@home:~$ ls -l
insgesamt 8
-rw-r--r-- 1 hans hans 59 14. Okt 14:47 datei
-rw-r--r-- 1 hans hans 40 14. Okt 14:48 MD5SUM




hans@home:~$ cat MD5SUM 
1e5321725fbf0477b2dee7594d0603fb  datei




hans@home:~$ md5sum -c MD5SUM 
datei: OK




Wird die Datei [datei] verändert.


hans@home:~$ md5sum -c MD5SUM 
datei: FEHLSCHLAG
md5sum: Warnung: die berechnete Prüfsumme passte NICHT




olga@home:~$ md5sum /dev/sr0


Ermittelt die Prüfsumme einer CD.




Mit Access Control Lists kann man Benutzer und Gruppen Rechte an Dateien geben oder entziehen. ACLs ergänzen das Linux Rechte System, denn man kann mit ihnen Rechte für neu anzulegende Dateien eines Verzeichnisses erzwingen. Als Nachteil von ACLs kann gesehen werden, dass es Shell Befehle gibt, die ACLs ignorieren oder Probleme verursachen können.

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

Die 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 Datei /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



FIXME



Cloud