linux:rechte

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
linux:rechte [2018/07/09 15:57] – [su / sudo] stlinux:rechte [2018/12/14 17:43] (aktuell) – [su / sudo] st
Zeile 1: Zeile 1:
 +====== 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: <file>MeinBenutzer ALL=(ALL) ALL</file>
 +  * ohne Passwortabfrage <file>MeinBenutzer ALL=(ALL) NOPASSWD:ALL</file>
 +  * ...ohne Passwortabfrage nur für einzelne Befehle freigeben: <file>MeinBenutzer ALL = NOPASSWD: /sbin/reboot, /sbin/halt</file>
 +  * Für die Gruppe sudo alle Befehle ohne Passwort freigeben:<file>%sudo   ALL=(ALL:ALL) NOPASSWD:ALL</file>
 +
 +:!: 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 ((<code bash>siehe man 5 sudo</code>)). Sollen einzelne Variablen erhalten bleiben (hier z.B. $SSH_ORIGINAL_COMMAND) muss dies explizit angeben werden:
 +
 +  * Für einen bestimmten Befehl: <file>Defaults!/path/to/command env_keep=SSH_ORIGINAL_COMMAND</file>
 +  * Für alle Befehle des Benutzers "stefan":<file>Defaults:stefan env_keep=SSH_ORIGINAL_COMMAND</file>
 +
 +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 ''<nowiki>rwxr-----</nowiki>'' oder
 +    - 4stellig: ''chmod 6640 Datei'' wäre ''<nowiki>-rwSr-S---</nowiki>'' (SUID+SGUID = 6 und 644 normale Recht wie vorher)
 +  * **Vergleichend:** ''<nowiki>--</nowiki>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 2<sup>2</sup> + 0x 2<sup>1</sup> + 0x 2<sup>0</sup> = 4+0+0 = 4 |
 +| lesen und schreiben | 6 | 6 | 6 | rw- => 110 | 1x 2<sup>2</sup> + 1x 2<sup>1</sup> + 0x 2<sup>0</sup> = 4+2+0 = 6 |
 +| lesen und ausführen | 5 | 5 | 5 | r-x => 101 | 1x 2<sup>2</sup> + 0x 2<sup>1</sup> + 1x 2<sup>0</sup> = 4+0+1 = 5 |
 +| lesen, schreiben und ausführen | 7 | 7 | 7 | rwx => 111 | 1x 2<sup>2</sup> + 1x 2<sup>1</sup> + 1x 2<sup>0</sup> = 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 <nowiki>rwxr-x---</nowiki>) bzw. 640 (''<nowiki>rw-r-----</nowiki>'') 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:
 +
 +<file>/dev/sda2 /srv            ext4    defaults,acl,noatime        0       2</file>
 +
 +Ausgabe von mount:
 +<file>/dev/sda2 on /srv type ext4 (rw,noatime,acl)</file>
 +
 +Anzeige von ls wenn erweiterte ACLs (hier auf "Verzeichnis") aktiv sind:
 +<file>drwxrws---+ 2 root users       4096 27. Aug 19:22 Verzeichnis</file>
 +
 +Beispiele:
 +  * Benutzer User1 bekommt rwx auf "Verzeichnis": <file>setfacl -m user:User1:rwx Verzeichnis</file>
 +  * User1 darf überhaupt nichts lesen auch wenn seine Gruppe dürfte: <code bash>setfacl -m user:User1:--- Verzeichnis</code>
 +  * alle erweiterten ACLs von "Verzeichnis" löschen: <code bash>setfacl -b Verzeichnis</code>
 +  * erweiterte ACL von "Verzeichnis" anzeigen: <code bash>getfacl Verzeichnis</code>
 +
 +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).