Inhaltsverzeichnis

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.



Dateizugriffsrechte und Dateieigentum


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:




wer:




Special Bits:




Oktalzahlen:

setuid 4000
setgid 2000
sticky 1000




Befehle:




Spezialattribute (0)644 (in Klammern=Spezialattribut)




Funktionsweise bei Dateien:




Funktionsweise bei Verzeichnissen:




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:




Optionen:




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





Datei und Verzeichnisrechte rekursiv ändern



find . -type f -print0 | xargs -0 chmod 644


Mit „find“ und „.“ (für die darunter liegende Verzeichnisse) können mit der Option „-type f“ (Files), alle Dateierechte im darunter liegenden Verzeichnis geändert werden.


find . -type d -print0 | xargs -0 chmod 755


Das funktioniert auch mit der Option „-type d“ (Directory), für alle darunter liegende Verzeichnisse.



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:




Optionen:





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:




Optionen:




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:




Optionen:




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




Attribute:




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.



Prüfsummen erstellen


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:




Optionen:




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.



Access Control Lists (ACL)


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