Linux/Unix Benutzer- und Datei-Berechtigungen

    • Official Post

    Hallo,


    heute erkläre ich euch anhand von Beispielen, wie das Rechtesystem für Linux/Unix Benutzer aufgebaut ist und funktioniert.


    Inhaltsverzeichnis

    • Benutzer und Gruppen
    • Datei-/Ordnerberechtigungen
    • su / sudo / whoami


    • Benutzer und Gruppen
      WIe bei Windows gibt es auch bei Linux Benutzer und Gruppen. Je nach Linux Distributation gibt es den ein oder anderen Befehl zum anlegen von neuen Benutzern und Gruppen mehr oder weniger.


      Die Befehle, die auf jeder Distributation verfügbar sein sollten, wären die nachfolgenen:

      Code
      useradd - Benutzer anlegen/hinzufügenusermod - Benutzer modifizieren/ändernuserdel - Benutzer löschen/entfernengroupadd - Gruppe anlegen/hinzufügengroupmod - Gruppe modifizieren/änderngroupdel - Gruppe löschen/entfernen


      Wenn man sich das jeweilige Handbuch dazu durchliest, sieht man, dass man sehr viele Parameter setzen kann. Prinzipiell reicht es aber, wenn man wie folgt einen neuen Benutzer anlegt:

      Code
      useradd max


      bzw. eine Gruppe:

      Code
      groupadd verwaltung


      Je nach Befehl, den ihr hier verwendet, fragt euch der Befehl noch ein paar Informationen ab.


      Wie bei Windows gibt es natürlich auch die Möglichkeit nach zu schauen, welches Verzeichnis welchem Benutzer gehört und vorallem welche Benutzer und Gruppen es gibt.


      Die Datei "/etc/passwd" beinhaltet sämtliche Benutzer mit ein paar Informationen, die während des Anlegens des Benutzers festgelegt wurden. Diese Datei sieht zum Beispiel so aus:

      Code
      $ cat /etc/passwdroot:x:0:0:root:/home:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/bin/shbin:x:2:2:bin:/bin:/bin/shsys:x:3:3:sys:/dev:/bin/shsync:x:4:65534:sync:/bin:/bin/syncman:x:6:12:man:/var/cache/man:/bin/shlp:x:7:7:lp:/var/spool/lpd:/bin/shmail:x:8:8:mail:/var/mail:/bin/shnews:x:9:9:news:/var/spool/news:/bin/shwww-data:x:33:33:www-data:/var/www:/bin/bash


      Aufgebaut ist diese Datei wie folgt:

      Code
      root:x:0:0:root:/home:/bin/bashBenutzername:Passwort:Benutzer-ID:Gruppen-ID:Beschreibung:Home-Verzeichnis:Default-Shell


      Da das Passwort gehasht in der /etc/shadow-Datei gespeichert wird, steht an der Stelle "Passwort" nur ein "x". Das soll ja nicht jeder einfach im Klartext rauslesen können. ;)


      Das selbe bzw. so ähnlich ist das mit den Gruppen - hier gibt es die Datei "/etc/group":

      Code
      $ cat /etc/grouproot:x:0:daemon:x:1:bin:x:2:sys:x:3:adm:x:4:tty:x:5:disk:x:6:lp:x:7:mail:x:8:news:x:9:uucp:x:10:man:x:12:proxy:x:13:kmem:x:15:


      Mit Hilfe von "usermod" und "groupmod" kann man zum Beispiel die einzelnen Benutzer bzw. Gruppen modifizieren, also ändern. Darunter fallen zum Beispiel folgende Punkte:

      • Ändern der GID eines Benutzers (GID = Hauptgruppe)
      • Benutzer weiteren zusätzlichen Gruppen hinzufügen
      • Benutzer aus einer oder mehreren Gruppen entfernen


      Gut... Soviel zu den Grundlagen der Benutzer und Gruppen. Jetzt schauen wir uns mal die Datei- und Ordnerberechtigungen an. :)


    • Datei-/Ordnerberechtigungen
      Egal ob es sich um einen Ordner oder eine Datei handelt: Mit dem Befehl "stat" kann man sich immer die detaillierten Eigenschaften des jeweiligen Objektes anschauen. Unter die Eigenschaften fallen zum Beispiel die Berechtigungen, Eigentümer, Gruppe, Ordner-/Dateiname, Typ (Ordner, Datei, Hard-Link, Sym-Link,...), diverse Zeitstempel. Da diese Ausgabe für Laien jedoch nicht verständlich ist, erkläre ich jetzt erstmal die Eigenschaften für ein Objekt, die ihr seht, wenn ihr euch den Inhalt eines Verzeichnisses einfach auflisten lasst. Das sieht zum Beispiel so aus:

      Code
      $ stat Templates  File: `Templates'  Size: 4096            Blocks: 8          IO Block: 4096   directoryDevice: fd00h/64768d    Inode: 2224078     Links: 4Access: (0755/drwxr-xr-x)  Uid: ( 2057/sebastian)   Gid: (  147/   users)Access: 2014-02-27 20:12:23.740932001 +0100Modify: 2013-08-25 16:11:36.987454822 +0200Change: 2013-10-07 22:34:08.627962552 +0200 Birth: -


      Eine normale Verzeichnisauflistung sieht zum Beispiel so aus:

      Code
      $ ls -ltotal 112drwxr-xr-x  4 sebastian users      4096 Aug 25  2013 Templates-rw-r--r--  1 sebastian users       555 Feb 23 22:58 ToDo-Liste


      Schauen wir uns doch mal eine solche Zeile genauer an:

      Code
      drwxr-xr-x  4 sebastian users      4096 Aug 25  2013 Templates


      Wenn wir es ganz normal von links nach rechts lese, sehen wir folgendes:

      • 10 Berechtigungsbits mit Typ
      • Anzahl der Hard-Links auf das Objekt
      • Eigentümer des Objekts
      • Gruppe des Objekts
      • Dateigröße
      • Zeitstempel der letzten Änderung
      • Objekt-Name


      Schön und gut... Mit dem ein oder anderen kann man direkt was anfangen, ohne etwas googlen zu müssen, aber was genau sagt jetzt was aus?!


      Die 10 Berechtigungsbits mit Typ zeigen die Rechte wie bei Windows mit Lesen, Schreiben, Ausführen an, wobei sich die 10 Bits wie folgt aufteilen:

      Quote

      drwxr-xr-x


      Der erste Bit gibt den Typ des Objektes an. Hier gibt es zum Beispiel folgende:

      • - bedeutet "Datei"
      • d bedeutet "Verzeichnis" (= Directory[/b])
      • l (= kleines L, wie Löwe) bedeutet "Sym-Link" (= bei Windows nennt sich sowas "Verknüpfung")


      Die nächsten drei Bits sind die Berechtigungen für den Eigentümer der Datei, wobei die Bits wie folgt interpretiert werden:

      • r bedeutet "read", also "Lesen" und kann mit dem Dezimalwert "4" gleich gestellt werden
      • w bedeutet "write", also "Schreiben" und kann mit dem Dezimalwert "2" gleich gestellt werden
      • x bedeutet "execute", also "ausführen" und kann mit dem Dezimalwert "1" gleich gestellt werden (bei Verzeichnissen steht dieses Bit für "wechseln", sprich ob man in das Verzeichnis rein darf oder nicht)


      So kann man zum Beispiel 3 Bits auch anders schreiben: rwx = 7 / rw- = 6 / r-x = 5 / --x = 1


      Wenn wir nun alle 10 Bits anschauen und unser Beispiel von oben hernehmen, kann man also "drwxr-xr-x" auch wie folgt darstellen: 755


      Okay... Die ersten 4 Bits haben wir jetzt. Folgen wieder 3 zusammenhängende: Diese gelten für die Gruppe des Objekts und haben die selbe Bedeutung wie eben erklärt. Die letzten drei Bits sind dann die Bits die entscheidend sagen, welche Berechtigungen es für die Benutzer hat, die weder Eigentümer noch Mitglied der Gruppe sind.


      Genau. Soviel zu den einzelnen Bits. Eigentümer und Gruppe sollten eigentlich selbsterklärend sein, daher erläre ich das jetzt nicht explizit. Der Rest der Ausgabe hat nichts mit den Rechten zu tun, daher lasse ich das jetzt auch mal weg. Wer jedoch Fragen dazu hat, kann diese gerne HIER als Kommentar/Beitrag stellen.


      Gut! Dann kennen wir uns jetzt also auch mit den Berechtigungen der Objekte aus. Jetzt schauen wir uns noch die Login-Befehle an. :)


    • su / sudo / whoami
      Mit Hilfe des Befehls "su" kann man sich als anderer Benutzer "einloggen". Einloggen steht deshalb in Anführungszeichen, weil in Wirklichkeit etwas anderes passiert. In Wirklichkeit öffnet dieser Befehl eine neue Shell als anderer Benutzer, welche mit Hilfe des Befehls "exit" oder der Tastenkombination "Strg" und "D" verlassen/geschlossen werden soll/kann. Man sollte mit dem Befehl aufpassen, weil man sich sonst sehr viele Shells stapeln kann und irgendwann auch nicht mehr weis, wie oft man noch "exit" eingeben muss. ;)


      Normalerweise wird im Prompt der Shell angezeigt als welcher Benutzer man eingeloggt ist. Sollte dies aber nicht der Fall sein, kann man sich mit Hilfe von "whoami" diese Info auch ausgeben lassen:

      Code
      $ whoamiroot


      Gute Linux/Unix Administratoren haben bestimmt schonmal vom nachfolgenden Satz gehört: "Ich versuch es zu vermeiden, dauerhaft als root zu arbeiten!"


      Daher gibt es das nette Paket "sudo", welches den Befehl "sudo" mit sich bringt und folgende Funktion aufweist: Mit einem vorangestelltem "sudo" vor dem auszuführenden Befehl führt man den gewünschten Befehl einmalig als bzw. mit root-Rechten aus. So muss man sich nicht extra als root einloggen und wieder ausloggen, nachdem der Befehl fertig ist. ;)


      So ein Befehl kann zum Beispiel so genutzt werden:

      Code
      $ sudo dpkg -i beispielPaket.deb


      Um zu überprüfen, dass man wirklich mit root Rechten arbeitet, kann man das ganze auch mit "whoami" überprüfen:

      Code
      $ whoami
      sebastian
      
      
      $ sudo whoami
      root


    So... Das war es dann auch schon wieder. Ich hoffe, ich konnte euch das Rechtesystem von Linux etwas näher bringen. :)

    Viele Grüße,
    Sebbo

    ---

    DevOps Engineer <3