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:
- 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.
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
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:
- 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
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.
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:
- 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.
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 ...
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
Cloud