====== Rechte ======
Linux bietet eine genaue Aufteilung von Zugriffsrechten auf Benutzer- und Dateiebene an. Außerdem werden mit den Dateisystemen ext2 und ext3 einige (selten benutzte) Attribute eingeführt.
===== Links =====
* [[http://polishlinux.org/console/file-permissions-in-linux/|File permissions in Linux]]
* [[http://www.linux-magazin.de/Artikel/ausgabe/1998/05/Einsteiger/einsteiger2.html|Rechteverwaltung]]
* [[http://forum.de.selfhtml.org/archiv/2006/4/t128177/#m827971|Software-installationen nur als root? (Forum-Diskussion)]]
* [[http://kris.koehntopp.de/artikel/unix/zugriffsrechte/|UNIX Zugriffsrechte aus Benutzersicht]]
* [[http://fbo.no-ip.org/cgi-bin/twiki/view/Linux/UnixPermissions| Datei-/Verzeichnisrechte unter Unix-Betriebssystemen]]
===== Benutzerrechte: =====
==== su / sudo ====
* mit ''su'' wird man dauerhaft zu einem Benutzer, z.B. root:
su
allgemein :
su user
Mit ''sudo'' kann man sich für eine einzelne Aktion mit root-Rechten ausstatten. Dazu muss in ''/etc/sudoers'' Erlaubnis erteilt sein:
* sudo für Benutzer mit Passwortabfrage: MeinBenutzer ALL=(ALL) ALL
* ohne Passwortabfrage MeinBenutzer ALL=(ALL) NOPASSWD:ALL
* ...ohne Passwortabfrage nur für einzelne Befehle freigeben: MeinBenutzer ALL = NOPASSWD: /sbin/reboot, /sbin/halt
* Für die Gruppe sudo alle Befehle ohne Passwort freigeben:%sudo ALL=(ALL:ALL) NOPASSWD:ALL
:!: Die Datei ''/etc/sudoers'' sollte man nur mit dem Kommando ''visudo'' editieren (um Konflikte zu vermeiden).
Besser ist es (auch im Sinne von Automatisierungen), **einzelne Dateien** unterhalb von ''/etc/sudoers.d/'' anzulegen.
=== Umgebungsvariablen ===
sudo räumt die Umgebungsvariablen des aufrufenden Benuzers nach bestimmten Regeln weg ((siehe man 5 sudo
)). Sollen einzelne Variablen erhalten bleiben (hier z.B. $SSH_ORIGINAL_COMMAND) muss dies explizit angeben werden:
* Für einen bestimmten Befehl: Defaults!/path/to/command env_keep=SSH_ORIGINAL_COMMAND
* Für alle Befehle des Benutzers "stefan":Defaults:stefan env_keep=SSH_ORIGINAL_COMMAND
hinzufügen: =+ oder wegnehmen: =-
siehe auch: https://unix.stackexchange.com/questions/13240/etc-sudoers-specify-env-keep-for-one-command-only
=== Links ===
[[http://linsec.ca/syshardening/sudo.php|Using Sudo to Limit Access]]
[[http://www.mandrivauser.de/index.php?option=com_openwiki&Itemid=97&id=advanced:system:visudo|Einrichten eines Root-Befehls für einen User per visudo]]
===== Dateirechte =====
==== Dateirechte setzen: chmod = Change Mode ====
''chmod'' setzt die Zugriffsrechte für Dateien und Verzeichnisse.
Allgemeine Syntax: ''chmod [Parameter] [Datei(en)'' bzw. ''Verzeichnis(se)]''
Die **Abkürzungen für die einzelnen Rechte** sind
^ Abkürzung ^ Bedeutung des Dateirechts ^ zählt oktal ^
| **r** | (read) für lesen | 4 |
| **w** | (write) für schreiben | 2 |
| **x** | (execute) für ausführen einer Datei bzw. hineinwechseln bei einem Verzeichnis | 1 |
| **X** | nur ausführen wenn es ein Verzeichnis ist oder schon ausführrechte für einen Benutzer hat. | - (wird nur relativ benutzt) |
| **s** | [[wpde>setuid]](=SUID) / [[wpde>setgid]] (=SGID): Beim Ausführen wird der Benutzer ([[wpde>setuid]]SUID) oder die Gruppe der Datei (SGID) gesetzt und nicht die des aufrufenden Benutzers/Gruppe) Anmerkung: Auf den meisten Systemen funktioniert dies **nur für ausführbare Binärdateien, nicht jedoch für interpretierte Scripts**. | SUID = 4 SGID = 2 |
| **t** | [[wpde>Sticky_Bit|sticky]]: auf ein Verzeichnis angewandt bedeutet es, dass jeder Benutzer nur seine Dateien lesen/ändern darf (Anwendung bei /tmp) | 1 |
Der **Wirkungsbereich** wird mit den Buchstaben
* **u** (user=Eigentümer)
* **g** (group=Gruppe)
* **o** (others=Andere) oder
* **a** (all=alle: wirkt auf Eigentümer, Gruppe und Andere gleichermaßen)
festgelegt.
chmod akzeptiert Parameter in **drei verschiedenen Formen**:
* **Relativ:** [**u**ser/**g**roup/**o**ther]+/-/=rwx z.B. ''chmod g-r [Datei]'' entzieht der Gruppe das Leserecht für die angegebene Datei
* man kann auch mehrere solcher Strings eingeben: ''chmod ug+r,a-x [Datei]'' gibt dem **u**ser (Besitzer) und der **g**roup (Gruppe) Leserechte, entzieht jedoch allen (**a**ll)die Ausführrechte
* **Absolut in Oktalschreibweise:**
- 3stellig: ''chmod 640 Datei'' wäre ''rwxr-----'' oder
- 4stellig: ''chmod 6640 Datei'' wäre ''-rwSr-S---'' (SUID+SGUID = 6 und 644 normale Recht wie vorher)
* **Vergleichend:** ''--reference=Datei'' setzt dieselben Zugriffssrechte wie die angegebene Datei.
=== Beispiel ===
^ Recht(e) ^ Besitzer ^ Gruppe ^ Andere ^
| lesen | r- - | r- - | r- - |
| lesen und schreiben | rw- | rw- | rw- |
| lesen und ausführen | r-x | r-x | r-x |
| lesen, schreiben und ausführen | rwx | rwx | rwx |
wird zu
^ Recht(e) ^^^^ Berechnung ^^
^ Bezeichnung ^ Besitzer ^ Gruppe ^ Andere ^ Binär ^ Addition der Stellen + Umwandlung in Oktalzahlschreibweise ^
| lesen | 4 | 4 | 4 | r - - => 100 | 1x 22 + 0x 21 + 0x 20 = 4+0+0 = 4 |
| lesen und schreiben | 6 | 6 | 6 | rw- => 110 | 1x 22 + 1x 21 + 0x 20 = 4+2+0 = 6 |
| lesen und ausführen | 5 | 5 | 5 | r-x => 101 | 1x 22 + 0x 21 + 1x 20 = 4+0+1 = 5 |
| lesen, schreiben und ausführen | 7 | 7 | 7 | rwx => 111 | 1x 22 + 1x 21 + 1x 20 = 4+2+1 = 7 |
**Es zählen also: read=4 write=2 execute=1**
=== Sonderrechte SUID, SGID, Sticky ===
^ ^ Auswirkung auf... ^^^
^ Sonderrecht ^ reguläre Dateien ^ ausführbare Dateien ^ Verzeichnisse ^
^ [[wpde>setuid|SUID]] | keine | ausführen mit den Rechten des Eigentümers | keine |
^ [[wpde>setgid|SGID]] | keine | ausführen mit den Rechten der Gruppe | Vererbung der Gruppeneigentümerschaft |
^ [[wpde>Sticky_Bit|sticky]] | keine | keine | löschen von Dateien nur durch ihren Eigentümer |
==== umask ====
Mit der Angabe der umask wird dem Benutzer eine (sichere) Standardberechtigungsmaske für neue Dateien vorgegeben. Alle erstellten Dateien werden dann mit der angegeben umask erstellt. Die umask arbeitet als Subtrahend: Von den ursprünglich vollen Rechten wird die umask abgezogen, so dass eine sichere Einstellung übrig bleibt. Mit der Angabe ''umask = 027'' habe alle neu-erstellten Verzeichnisse die Rechtemaske 750 (entspricht rwxr-x---) bzw. 640 (''rw-r-----'') bei Dateien.
^ umask ^ Auswirkung ^
| 002 | Jeder kann die Dateien lesen und Gruppenmitglieder sogar verändern. |
| 022 | Jeder kann die Dateien lesen aber kein anderer kann sie verändern. |
| 027 | Nur Gruppenmitglieder können die Dateien lesen, kein anderer kann sie verändern. |
| 077 | Kein anderer auf dem System kann die Dateien lesen oder verändern. |
Man trägt sie **benutzerspezifisch** in der Konfigurationsdatei der jeweils verwendeten Shell (z.B. ''.bashrc'' bei der Shell [[linux:Bash]]) oder **systemweit** in der Datei ''/etc/profile'' ein.
==== POSIX-ACLs / Erweiterte ACLs ====
[[wpde>POSIX]]-[[wpde>Access_Control_List|ACL]]s sind Zugangskontrolllisten, die die Berechtigungen für Dienste und Dateien regeln. Sie werden eingesetzt wenn das normale Schema (siehe oben) nicht mehr ausreicht, z.B. im Zusammenhang mit [[samba:Samba]].
:!: Erweiterte ACLs funktionieren nur mit mount-Option "acl" (fallweiser Aufruf mit "mount -o acl ..."), ein Beispieleintrag in der /etc/fstab:
/dev/sda2 /srv ext4 defaults,acl,noatime 0 2
Ausgabe von mount:
/dev/sda2 on /srv type ext4 (rw,noatime,acl)
Anzeige von ls wenn erweiterte ACLs (hier auf "Verzeichnis") aktiv sind:
drwxrws---+ 2 root users 4096 27. Aug 19:22 Verzeichnis
Beispiele:
* Benutzer User1 bekommt rwx auf "Verzeichnis": setfacl -m user:User1:rwx Verzeichnis
* User1 darf überhaupt nichts lesen auch wenn seine Gruppe dürfte: setfacl -m user:User1:--- Verzeichnis
* alle erweiterten ACLs von "Verzeichnis" löschen: setfacl -b Verzeichnis
* erweiterte ACL von "Verzeichnis" anzeigen: getfacl Verzeichnis
Unter [[linux:Linux]] können der Besitzer (Benutzer) und root ACL für Verzeichnisse und Dateien setzen.
=== Links ===
* [[http://beginlinux.com/index.php/server_training/acls/| Access Control LIsts]]
* [[http://www.matthiess.de/freie-software/linux/posix-acl-erste-schritte/|POSIX ACL: Erste Schritte]]
* [[http://www.oreilly.de/catalog/netsechacksger/chapter/hack04.html|POSIX-ACLs]]
* [[http://www.suse.de/~agruen/acl/linux-acls/online/|POSIX Access Control Lists on Linux]]
* [[http://acl.bestbits.at/problems.html|Known Problems and Bugs]]
* [[http://gentoo-wiki.com/HOWTO_Use_filesystem_ACLs|HOWTO Use filesystem ACLs]]
==== Attribute in ext2/3 ====
Das ext2-/ext3-Dateisystem kennt neben den Dateirechten noch so genannte Dateiattribute.
Folgende Dateiattribute sind definiert:
^ Attribut ^ Bedeutung ^
| **a** (//a//ppend only) | Die Datei kann beschrieben werden, jedoch nur durch anhängen von Daten. Bereits vorhandene Daten können nicht mehr geändert, gelöscht oder überschrieben werden. Sinnvoll ist dies beispielsweise bei Logdateien. |
| **c** (//c//ompressed) | nicht implementiert: Die Datei wird komprimiert geschrieben (und beim Auslesen wieder dekomprimiert). |
| **i** (//i//mmutable) | Die Datei ist unveränderbar: Sie kann weder gelöscht, umbenannt noch in ihrem Inhalt verändert werden, nicht einmal ein Link zu ihr darf erstellt werden. Nur root hat die capability CAP_LINUX_IMMUTABLE um dieses Attribut zu setzen. |
| **s** (//s//ecure deletion) | Beim Löschen werden die festplattensektoren dieser Datei mit Zufallsdaten überschrieben, und damit ist sie (mit normalen Mitteln) nicht wieder zu retten. |
| **S** (//s//ynchronous update) | Die Datei wird grundsätzlich sofort geschrieben und nicht durch den Festplatten-Cache des Kernels schreibgepuffert. |
| **u** (//u//ndeleteable) | nicht implementiert: Die Datei soll nicht überschrieben werden und somit wiederherstellbar sein. |
Diese können mit dem Befehl ''chattr'' geändert und mit ''lsattr'' angezeigt werden.
Vollständige Liste der Attribute: append only (a), compressed (c), no dump (d), extent format (e), immutable (i), data journalling (j), secure deletion (s), no tail-merging (t), undeletable (u), no atime updates (A), no copy on write (C), synchronous directory updates (D), synchronous updates (S), and top of directory hierarchy (T).
Folgende Attribute sind nicht änderbar von chattr, könnten aber von lsattr angezeigt werden: huge file (h), compression error (E), indexed directory (I), compression raw access (X), and compressed dirty file (Z).