Linux-Kurs : Benutzer, Gruppen und Zugriffsrechte unter Linux
Multi-User
Linux ist ein Mulituser-System, das heiß es können mehrere Benutzer gleichzeitig an Linux arbeiten. Das mag dich nun etwas verwundern, denn wie sollte so etwas gehen, bei nur einer Tastatur, Maus und Monitor? Ganz einfach, vor ca. 20 Jahren gab es nur große teure Computer und an diesem waren mehrere Terminals (meist nur eine Tastatur mit Monitor) angeschlossen und so arbeiteten alle Benutzer gleichzeitig an einem Rechner.
Aber dieses Verfahren ist auch einem normalen PC sehr gut, du kannst als Benutzer arbeiten und gleichzeitig als root irgendwas einstellen. Auf einem Server sind sowieso meist mehrere Benutzer eingeloggt und das ist auch Multi-User ;-))
So, damit nun nicht das totale Chaos ausbricht, und jeder bei dem anderen in den Dateien rumschreibt, werden für alle Dateien und Verzeichnisse Rechte fest gesetzt. Das heißt, User_1 kann in seine Datei schreiben, während User_2 diese nur lesen kann und User_3 sieht gar keine Datei. Daraus folgt, das sich jeder User an das System anmelden muß, denn sonst wüßte das System ja nicht wer du bist.
Jedes Unix (also auch Linux) hat einen speziellen Benutzer, den Systemverwalter. Dieser darf alles, also alles löschen, überall drauf zugreifen und alles kaputt machen. Dieser Benutzer ist root, im Windows-Umfeld ist es der Administrator. Wenn du nun denkst, he prima, ich mache alles als root, vergiß es, als root kannst du dein System sehr schnell zerstören. Also immer schön als normale Benutzer anmelden und als root den Rechner administrieren. Denn, root weiß was er tut ;-)
Gruppen
Eben hatten wir schon mal kurz die Rechte angesprochen die jeder Benutzer hat. Möchte man nun für mehrere Benutzer die selben Rechte einstellen, packt man diese in eine Gruppe und weist der Gruppe spezielle Rechte zu. Damit kannst du die Zugriffsrechte besser verteilen.
Damit die Sache noch etwas einfacher wird, kann jeder Benutzer in mehreren Gruppen Mitglied sein.
Benutzer anlegen und verwalten
Benutzer anlegen
Nur der Benutzer root darf neue Benutzer anlegen und alte löschen. Das Paßwort kann natürlich jeder Benutzer selber ändern.
Um einen Benutzer anzulegen gibt es wiedermal verschiedene Möglichkeiten:
- ein Tool deiner Distribution (z.B. yast bei SuSE)
- ein Programm unter X zum Beispiel kuser
- das Tool adduser, dieses fragt alle Eingaben interaktiv ab
- useradd ist eher für Skripte zu gebrauchen, da es alle Angaben als Parameter haben will
Benutze nun einfach mal adduser als root auf einer Konsole und legen Benutzer "testi" an:
| [root] # adduser #Neuen Benutzer anlegen |
Noch ein Paar Tips:
- einige Distributionen (RedHat, Debian) legen mit jedem neuen Benutzer eine neue Gruppe an, diese nennt sich wie der Benutzer, andere (SuSE) packen alle neuen Benutzer eine vorhandene Gruppe
- wird ein neues Home-Verzeichnis für den Benutzer erstellt, werden einige Beispiel-Dateien aus /etc/skel in das neue Home-Verzeichnis kopiert. Bei größeren Installationen evtl. einige Einstellung schon direkt in /etc/skel anpassen..
- Jeder Benutzer hat eine Standard-Einlog-Shell, meist sollte es wohl die
bash sein. Für Benutzer die nur einen Daemon steuern (etwa http-run für
den Apache) sollte die Standard-Einlog-Shell /bin/false sein, dadurch kann sich der Benutzer, oder besser der Cracker der das Passwort hat, nicht aktiv einloggen.
Benutzer verwalten
Tja, da zu gibt es das Benutzer-Anlege-Tool deiner Distri oder verschiedene (Konsolen) Programme:
| id |
zeigt Informationen über einen User an |
| chsh |
ändert die Standard-Einlog-Shell des Users (Das kann nur root) |
| passwd |
damit kann der Benutzer sein eigens Paßwort ändern |
Wenn du schnell mehrere Dinge ändern willst, solltest du die Datei /etc/passwd von Hand editieren. Eine Zeile sieht dort so aus:
tux:x:501:100:Der kleine Tux:/home/tux:/bin/bash |
Eigentlich ganz einfach zu lesen:
| tux: |
x: |
501: |
100: |
Der kleine Tux: |
/home/tux: |
/bin/bash |
der
Benutzername |
das Paßwort
hier shadow-System |
die
Benutzer-
Nummer |
die Gruppen-
Nummer |
Beschreibung |
Homeverzeichnis |
Standard-Einlog-Shell |
Hinweise:
- Das Paßwort steht normal verschlüsselt in der /etc/passwd, benutzt du aber (und das solltest du) das shadow-Paßwort-System steht dort nur ein "x" und das Paßwort selber steht verschlüsselt in der Datei /etc/shadow. Mit dem shadow-System kannst du auch Zugänge sperren (anstelle des
verschlüsselten Paßwortes einen "*" eintragen), die
Länge der Gültigkeit bestimmen ...
- Die Benutzer- und Gruppennummer sollte ich noch etwas erklären: Das
Filesystem speichert zu jeder Datei nur diese Nummern ab, diese werden
erst beim Ansehen mit ls oder sowas in die Namen gewandelt und diese Namen werden aus der /etc/passwd und /etc/group gelesen.
Gruppen
Zu den Gruppen gibt es weniger zu sagen. Im Wesentlichen reichen diese Befehle aus:
| groups |
zeigt die Gruppen des Benutzers an |
| groupadd |
Gruppe hinzufügen. Als root |
| groupdel |
Gruppe löschen. Als root |
| groupmod |
Gruppen-Name oder Gruppen-Nummer ändern. Als root |
Die Gruppen stehen in der Datei /etc/group und lassen sich dort schnell und einfach editieren. Hier mal ein Beispiel aus dieser Datei:
Und hier die Auflösung:
| users: |
x: |
100: |
tux,tuxi |
der
Gruppen-Name |
das
Paßwort |
die Gruppen-
Nummer |
Mitglieder der Gruppe |
Hinweise:
- Das Paßwort ist auch hier mit dem shadow-System gesichert. Die dazu gehörige Datei ist /etc/gshadow.
- Jeder Benutzer kann Mitglied mehrere Gruppen sein. Einfach den Benutzer zu den Gruppen-Namen schreiben.
Rechte an Dateien und Verzeichnissen
Zuerst schauen wir uns mal eine Datei an:
[tux] $ touch datei
[tux] $ ls -l datei
....
-rw-r--r-- 1 tux users 1246 Mär 28 13:46 datei
....
|
Das heißt nun folgendes: Die Datei datei gehört dem Benutzer tux und der Gruppe users (zu der tux auch gehört). Wichtig sind aber die ersten Buchstaben, diese
geben die Rechte der Datei an. Und zwar :
| - |
rw- |
r-- |
r-- |
Typ:
d = directory
- = datei |
Rechte des
Eigentümers |
Rechte der
Gruppe |
Rechte für
alle anderen |
Dabei sind:
| r |
read = lesen |
| w |
write = schreiben, (auch löschen) |
| x |
execute = ausführen des Befehls |
So und nun zeige ich dir wie du die Rechte ändert, dazu mußt du der Eigentümer der Datei sein (oder root), der Befehl lautet chmod (CHangeMODus) :
[tux] $ chmod u-w datei #Rechte ändern
[tux] $ ls -l datei
....
-r--r--r-- 1 tux users 1246 Mär 28 13:46 datei
....
|
Und schon kann der Eigentümer nicht mehr in die Datei schreiben (ok,
ist eine doofe Idee); die Syntax ist einfach: chmod wer +/- was:
- wer = bei wem werden die Rechte geändert; u=user (Eigentümer), g=group (Gruppe) o=other(alle anderen) oder a=all (user, group, other)
- +/- = + Recht setzen, - Recht wegnehmen
- was = Datei, für Verzeichnisse ein "-R" und alle drunterliegenden Verzeichnisse werden auch geändert
Für unser Beispiel von oben hieße das: Der User (u) bekommt das Schreibrecht(w) abgenommen (-).
Am besten probierst du ein Paar Sachen aus, dann ist es einfacher zu verstehen ...
Besonderheiten bei Verzeichnissen
Die Rechte haben bei Verzeichnissen eine etwas andere Bedeutung:
| r |
read = lesen => Verzeichnis ansehen (z.B.: mit ls) |
| w |
write = schreiben, (auch löschen) => Dateien ins Verzeichnis schreiben |
| x |
execute = in das Verzeichnis wechseln (z.B.: mit cd ) |
Auch hier, ist ausprobieren der beste Weg es zu verstehen ...
Sonderrechte
Neben den bereits bekannten Rechten (rwx) gibt es noch zwei besondere Rechte:
| SUID = set user ID on execution |
Das Programm wird beim Aufruf mit den Rechten des Eigentümers gestartet |
chmod u+s datei #SUID setzen |
| GUID = set group ID on execution |
Das Programm wird beim Aufruf mit den Rechten der Gruppe gestartet |
chmod g+s datei #GUID setzen |
ACHTUNG !! SUID und GUID können extrem gefährlich sein!! Wenn das Programm
root gehört, wird jeder der es ausführt für das Programm
root !!!
Möchtest du das auch andere Benutzer ein Programm mit root-Rechten ausführen können, solltest du das Programm sudo benutzen. Dort stellst du in einer zentralen Datei die Rechte der anderen
Benutzer ein, das sorgt für mehr Überblick.
Eigentümer und Gruppe ändern
Manchmal möchte man nicht die Rechte der Datei ändern, sondern
den Eigentümer oder die Gruppe. Dafür gibt es die Programm chown (CHange OWNner = Eigentühmer wechseln) und chgrp (CHange GRouP = Gruppe wechseln). Den Eigentümer wechseln kann nur root, während die Gruppe vom Eigentümer gewechselt werden kann. Die Syntax ist recht einfach:
[root] # chown neuer_owner datei #datei gehört nun dem Benutzer neuer_owner
[tux] $ chgrp neue_gruppe datei #datei gehört nun der Gruppe neue_gruppe |
ACL - Access Control Lists
Diese Rechtevergabe ist der Standard unter den UNIXen, leider reicht das aber vielfach einfach nicht mehr. Manchmal mußt du mehr als drei verschiedene Rechte vergeben. und dann?
Dann kommen Filesystem ins Spiel die ACL (Access Control Lists) beherschen, das gute alte ext2 kann das mit einem Pach auch, aber ich würde hierbei eher XFS oder JFS empfehlen.
Dazu mehr in diesem Tuxhausen-Artikel: Erweiterte Zugriffsrechte mit Access Control Lists