Modul 3 · 3.1
Deutsch
Benutzer, Gruppen und Dateirechte
Modul 3: Benutzer, Rechte und sudo · Lesezeit: 12 Minuten
Lernziel: Nach dieser Lektion können Sie Benutzer und Gruppen anlegen und anzeigen, die Rechte einer Datei oder eines Verzeichnisses in ls -l lesen und sie mit chmod und chown richtig setzen, ohne alles weit zu öffnen.
Kernbegriffe: root (UID 0), normaler Benutzer, Systembenutzer, /etc/passwd, /etc/shadow, Gruppe, adduser, id, rwx, Eigentümer, Gruppe, andere, oktal (644, 755, 600), chmod, chown, umask, setuid, 777
Jeder ist eine Nummer
Linux wurde von Anfang an für mehrere Benutzer auf einer Maschine gebaut. Jeder laufende Prozess läuft im Namen eines Benutzers, und jede Datei hat einen Eigentümer. Für das System ist ein Benutzer vor allem eine Nummer, die UID:
- root hat die UID 0. Root darf alles: jede Datei lesen und ändern, jeden Dienst stoppen, jeden Benutzer anlegen. Ein "Sind Sie sicher?" gibt es nicht.
- Normale Benutzer wie
annaerhalten unter Debian und Ubuntu eine UID ab 1000. Sie dürfen in ihr eigenes Home-Verzeichnis schreiben und sonst wenig. - Systembenutzer haben eine niedrige Nummer und meist kein Passwort und keine Shell. Dienste laufen unter einem solchen Benutzer: nginx unter
www-data, PostgreSQL unterpostgres. Wird ein solcher Dienst gehackt, hat der Angreifer nur die Rechte dieses Benutzers, nicht die von root.
Wer Sie sind, sehen Sie mit id:
anna@web1:~$ id
uid=1000(anna) gid=1000(anna) groups=1000(anna),27(sudo),100(users)Anna hat die UID 1000, eine eigene Gruppe anna und ist außerdem Mitglied der Gruppen sudo und users.
Wo Benutzer gespeichert sind
Die Liste der Benutzer steht in /etc/passwd, eine Zeile pro Benutzer:
anna@web1:~$ grep -E '^(root|www-data|anna):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
anna:x:1000:1000:Anna,,,:/home/anna:/bin/bashDie Felder, getrennt durch Doppelpunkte: Name, x (das Passwort steht an anderer Stelle), UID, Hauptgruppe, Beschreibung, Home-Verzeichnis, Shell. Bei www-data steht als Shell /usr/sbin/nologin: Eine Anmeldung ist nicht möglich.
Die Passwörter selbst stehen verschlüsselt (gehasht) in /etc/shadow. Diese Datei kann nur root lesen. Ein ! oder * am Anfang des Passwortfelds bedeutet: Eine Anmeldung mit Passwort ist nicht möglich. So ist root unter Ubuntu standardmäßig gesperrt, und unter Debian dann, wenn Sie bei der Installation kein root-Passwort angegeben haben.
Benutzer und Gruppen anlegen
Unter Debian und Ubuntu verwenden Sie das benutzerfreundliche adduser:
root@web1:~# adduser anna
info: Adding user `anna' ...
info: Adding new group `anna' (1000) ...
info: Adding new user `anna' (1000) with group `anna (1000)' ...
info: Creating home directory `/home/anna' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
...adduser legt den Benutzer, eine eigene Gruppe mit demselben Namen und ein Home-Verzeichnis an und fragt nach einem Passwort. Das einfachere useradd gibt es auch (unter AlmaLinux und Rocky Linux ist es der übliche Befehl), es erledigt ohne Optionen aber weniger: kein Passwort und auf manchen Systemen kein Home-Verzeichnis.
Eine Gruppe ist eine Möglichkeit, mehreren Benutzern gleichzeitig Rechte zu geben. Einen Benutzer zu einer Gruppe hinzufügen:
root@web1:~# adduser anna www-data
root@web1:~# usermod -aG www-data anna # dasselbe, funktioniert überallAchten Sie auf das -a bei usermod: Ohne -a ersetzen Sie alle zusätzlichen Gruppen des Benutzers durch nur diese eine. Eine neue Gruppe gilt erst nach einer erneuten Anmeldung.
Ein Konto sperren, ohne es zu löschen (zum Beispiel das eines ehemaligen Kollegen):
root@web1:~# usermod -L -e 1 jan-L sperrt das Passwort, -e 1 lässt das Konto ablaufen. Achtung: Ein gesperrtes Passwort hält einen SSH-Schlüssel nicht immer auf. Entfernen Sie daher auch die Schlüssel in /home/jan/.ssh/authorized_keys (Lektion 2.3); das abgelaufene Konto (-e 1) weist sshd dagegen ab.
Rechte lesen
anna@web1:~$ ls -l /var/www/example.com
total 12
-rw-r--r-- 1 anna www-data 1520 Nov 9 10:12 index.html
-rw-r----- 1 anna www-data 412 Nov 9 10:14 config.php
drwxr-xr-x 2 anna www-data 4096 Nov 9 10:15 images
drwxrwxr-x 2 www-data www-data 4096 Nov 9 10:20 uploadsDer erste Block aus zehn Zeichen ist der Schlüssel zu allem:
- Zeichen 1: die Art.
-ist eine normale Datei,dein Verzeichnis (directory),leine Verknüpfung (Symlink). - Zeichen 2 bis 4: was der Eigentümer darf.
- Zeichen 5 bis 7: was die Gruppe darf.
- Zeichen 8 bis 10: was andere (alle Übrigen) dürfen.
Danach folgen die Anzahl der Verknüpfungen, der Eigentümer, die Gruppe, die Größe und das Datum.
Bei einer Datei bedeuten die Buchstaben:
| Buchstabe | Bedeutung bei einer Datei |
|---|---|
r | lesen |
w | ändern |
x | als Programm oder Skript ausführen |
Und bei einem Verzeichnis etwas anderes:
| Buchstabe | Bedeutung bei einem Verzeichnis |
|---|---|
r | die Namen der Dateien im Verzeichnis abfragen |
w | Dateien im Verzeichnis anlegen, umbenennen und löschen |
x | das Verzeichnis betreten und Dateien darin öffnen |
Letzteres überrascht viele. Ohne x auf einem Verzeichnis gelangen Sie nicht an die Dateien darin, auch wenn diese selbst lesbar sind. Und wer w auf einem Verzeichnis hat, kann darin Dateien löschen, auch wenn sie jemand anderem gehören.
Im Beispiel: index.html darf jeder lesen; config.php (mit dem Datenbankpasswort) darf Anna lesen und ändern, die Gruppe www-data (also der Webserver) nur lesen und alle anderen nichts. In uploads darf der Webserver schreiben, denn dort landen Uploads von Besuchern.
Rechte als Zahl
Rechte werden oft als drei Ziffern geschrieben, als oktale Zahl. Jeder Buchstabe hat einen Wert: r = 4, w = 2, x = 1. Addieren Sie die Werte pro Gruppe:
| Rechte | Zahl | Verwendung |
|---|---|---|
rw-r--r-- | 644 | normale Datei, die jeder lesen darf |
rw-r----- | 640 | Datei für Eigentümer und Gruppe, etwa eine Konfiguration mit Passwort |
rw------- | 600 | geheime Datei, etwa authorized_keys oder ein privater Schlüssel |
rwxr-xr-x | 755 | Verzeichnis oder Programm, das jeder nutzen darf |
rwx------ | 700 | privates Verzeichnis, etwa ~/.ssh |
Rechte ändern: chmod und chown
anna@web1:~$ chmod 640 /var/www/example.com/config.php
anna@web1:~$ chmod g+w /var/www/example.com/uploads
root@web1:~# chown anna:www-data /var/www/example.com/config.phpchmod ändert die Rechte, mit einer Zahl oder mit Buchstaben (u, g, o für Eigentümer, Gruppe, andere; + oder - und der Buchstabe). chown eigenaar:groep ändert Eigentümer und Gruppe; das darf nur root. Mit -R wirken beide auf ein ganzes Verzeichnis, und genau da geht es oft schief: chmod -R 644 auf einem Verzeichnis macht alle Unterverzeichnisse unbrauchbar, denn Verzeichnisse brauchen x. Verwenden Sie für einen ganzen Verzeichnisbaum besser find:
root@web1:~# find /var/www/example.com -type d -exec chmod 755 {} +
root@web1:~# find /var/www/example.com -type f -exec chmod 644 {} +Niemals 777
"Es funktioniert nicht, also habe ich einfach 777 gesetzt." 777 bedeutet: Jeder auf dem Server darf dies lesen, ändern und ausführen. Geht auf Ihrem Server jemals ein Dienst oder eine Website schief, kann der Angreifer überall dort schreiben, wo 777 gesetzt ist, auch in Ihre PHP-Dateien. Das eigentliche Problem ist fast immer der Eigentümer oder die Gruppe: Geben Sie dem Webserver über die Gruppe genau das Recht, das er braucht, und nur auf dem Verzeichnis, wo es nötig ist.
Standardrechte und spezielle Bits
Neue Dateien erhalten ihre Rechte über die umask. Mit der üblichen umask 022 erhalten neue Dateien 644 und neue Verzeichnisse 755. Ihre umask sehen Sie mit dem Befehl umask.
Manchmal sehen Sie ein s anstelle eines x, etwa bei /usr/bin/passwd (-rwsr-xr-x). Das ist das setuid-Bit: Das Programm läuft mit den Rechten des Eigentümers (root), auch wenn ein normaler Benutzer es startet. Das ist für einige Systemprogramme nötig, setzen Sie es aber nie selbst auf ein Skript. Eine unerwartete setuid-Datei ist ein bekanntes Anzeichen für einen Einbruch; mit find / -perm -4000 -type f 2>/dev/null sehen Sie alle.
Unter AlmaLinux und Rocky Linux
adduser ist dort ein anderer Name für useradd; verwenden Sie useradd -m anna und danach passwd anna. Gruppen fügen Sie mit usermod -aG hinzu. SELinux ergänzt die Rechte aus dieser Lektion um eine zusätzliche Ebene: Eine Datei mit den richtigen Rechten kann trotzdem abgewiesen werden, wenn sie das falsche SELinux-Label trägt (ls -Z zeigt es an).
Zusammenfassung
- Jeder Benutzer hat eine UID; root (0) darf alles, Dienste laufen unter eigenen Systembenutzern ohne Shell.
- Benutzer stehen in
/etc/passwd, die Passwort-Hashes in/etc/shadow. Legen Sie Benutzer mitadduseran und fügen Sie Gruppen mitusermod -aGhinzu. ls -lzeigt die Art, die Rechte von Eigentümer, Gruppe und anderen und danach Eigentümer und Gruppe. Bei einem Verzeichnis bedeutetxbetreten undwDateien anlegen und löschen.- Übliche Zahlen: 644 und 755 für Öffentliches, 640 für Konfiguration mit Geheimnissen, 600 und 700 für Privates. Niemals 777.
- Verwenden Sie
find, um Rechte auf einem ganzen Verzeichnisbaum zu setzen; achten Sie auf setuid-Dateien.
Quiz
Aufgabe
Aufgabe Z3.1: Rechte lesen. Öffnen Sie die Beispieldatei rechten-1.txt: die Ausgabe von id für drei Benutzer und von ls -l in einem Webverzeichnis. Beantworten Sie für jede Frage, wer was darf (zum Beispiel: "Kann der Webserver config.php ändern?", "Welche Datei hat zu großzügige Rechte?", "Welche Zahl gehört zu .env?"). Das Programm vergleicht Ihre Antworten mit dem festen Lösungsschlüssel und erklärt bei jeder Frage, warum.
Weiterführende Informationen
Die Schritte in diesen Artikeln gelten für die Hostingpakete und VPS von WebOké; bei anderen Anbietern funktioniert es ähnlich.
- **Forbidden (403):** Sie haben keine Berechtigung, um auf / auf diesem Server zuzugreifen.
- Per SSH auf Ihrem VPS anmelden (und einen SSH-Schlüssel erstellen)
- Im WordPress-Kurs: Lektion 7.4 "Die Website härten: Rechte, Header und Sicherheits-Plugins"
- Debian-Handbuchseite adduser: https://manpages.debian.org/trixie/adduser/adduser.8.en.html
- Debian-Handbuchseite chmod: https://manpages.debian.org/trixie/coreutils/chmod.1.en.html
