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:
wer:
Special Bits:
Oktalzahlen:
setuid | 4000 |
setgid | 2000 |
sticky | 1000 |
Befehle:
Spezialattribute (0)644 (in Klammern=Spezialattribut)
Funktionsweise bei Dateien:
Funktionsweise bei Verzeichnissen:
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
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.
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 (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
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.
Ä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
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
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
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.
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.
# 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
(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.
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.
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.
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 ...
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