Das Konto, an das niemand mehr dachte
Ein kleiner Laden hatte das Konto eines Lieferanten behalten, der vor einem Jahr ging. Es verlangte kein Passwort, und der Server ließ root über das Netz herein.
Niemand griff es an. Ein Scanner fand es zuerst. Die Reparatur dauerte fünf Minuten, aber sie gehörte an den ersten Tag.
Diese Lektion zeigt, wie man diese Arbeit erledigt, bevor jemand angreift.
Am Ende dieser Lektion
Notiz
Ich kann schwache Konten, SSH-Einstellungen und Dateimodi eines Servers finden und beheben.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Härten | entfernen, was ein Server nicht braucht, damit es weniger anzugreifen gibt | |
| Konto | ein Name, mit dem das System die Anmeldung erlaubt, mit eigenen Rechten | |
| Dateimodus | drei Ziffern, die sagen, wer eine Datei lesen, schreiben und ausführen darf | 640 |
| Für alle schreibbar | eine Datei, die jeder Benutzer der Maschine ändern darf | |
| SSH | das Werkzeug, mit dem man sich über ein Netz an einem Server anmeldet | |
| Einstellung | eine Zeile einer Konfigurationsdatei: ein Name und ein Wert |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Konten auflisten, dann fragen, wer sie braucht
Ein Konto, das man nicht kennt, kann man nicht schützen. Das Härten beginnt deshalb mit einer Liste.
Normale Personen haben eine Kontonummer ab 1000, die UID. Root hat die UID 0, und nur root soll sie haben.
Normale Konten und ihre Shell auflisten
awk -F: '$3 >= 1000 && $3 < 65534 {print $1, $7}' /etc/passwdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Welche Konten haben die UID 0?
awk -F: '$3 == 0 {print $1}' /etc/passwdHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die beiden Listen lesen
Der erste Run schreibt eine Zeile je normalem Konto: seinen Namen und seine Login-Shell, zum Beispiel /bin/bash. Fragen Sie bei jeder Zeile: Braucht das noch jemand?
Der zweite Run schreibt ein einziges Wort, root. Ein zweiter Name wäre ein zweites root und ein Grund, einen Vorfall zu eröffnen.
Ein Modus sagt, wer was darf
Jede Datei hat einen Modus aus drei Ziffern: der Besitzer, die Gruppe und alle anderen. Jede Ziffer addiert 4 für Lesen, 2 für Schreiben und 1 für Ausführen.
Die Kontenliste ist öffentlich, alle dürfen sie lesen. Die Datei mit den Passwort-Hashes darf es nicht sein.
Den Modus zweier Dateien zeigen
stat -c '%a %U:%G %n' /etc/passwd /etc/shadowHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Konten mit leerem Passwort zählen
sudo awk -F: '$2 == "" {print $1}' /etc/shadow | wc -lHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beispiel: Was vier Modi bedeuten
| Modus | Besitzer | Gruppe | Alle anderen |
|---|---|---|---|
| 644 | lesen und schreiben | lesen | lesen |
| 640 | lesen und schreiben | lesen | nichts |
| 2770 | lesen, schreiben und betreten | lesen, schreiben und betreten | nichts |
| 777 | alles | alles | alles, also für alle schreibbar |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Was das Terminal ausgab
Der stat-Run schrieb zwei Zeilen: 644 root:root /etc/passwd und 640 root:shadow /etc/shadow. Jeder darf die Kontenliste lesen. Nur root und die Gruppe shadow dürfen die Hashes lesen.
Der Zähl-Run schrieb 0. Jede andere Zahl wären Konten, an denen man sich ohne Passwort anmeldet.
SSH ist eine Tür, Einstellungen sind das Schloss
Der SSH-Server liest eine Einstellungsdatei. Drei Zeilen entscheiden über den Großteil des Risikos: ob root sich anmelden darf, ob ein Passwort erlaubt ist und ob ein leeres Passwort erlaubt ist.
Sie üben an einer Kopie in Ihrem Ordner. Die echte Datei bleibt unberührt, sodass niemand ausgesperrt wird.
Eine schwache Übungsdatei schreiben
printf 'PermitRootLogin yes\nPasswordAuthentication yes\nPermitEmptyPasswords no\n' > sshd-uebung.confHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die zwei schwachen Zeilen finden
grep -E '^(PermitRootLogin|PasswordAuthentication) yes' sshd-uebung.confHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Beide mit sed beheben
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/; s/^PasswordAuthentication yes/PasswordAuthentication no/' sshd-uebung.confHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Datei noch einmal prüfen
grep -E '^(PermitRootLogin|PasswordAuthentication)' sshd-uebung.confHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Warum der erste Wert zählt
Der Suchbefehl fand zwei schwache Zeilen. Nach der Korrektur sagen beide no. Man meldet sich dann mit einem Schlüssel an, nicht mit einem Passwort, und niemand meldet sich als root an.
Noch eine Regel: Der SSH-Server benutzt den ersten Wert, den er für eine Einstellung findet. Eine schwache Zeile über einer sicheren gewinnt.
Sehen, welche Zeile zählt
printf 'PermitRootLogin no\nPermitRootLogin yes\n' | grep -m1 '^PermitRootLogin'Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Ein häufiger Fehler
Warnung
Viele glauben, die letzte Zeile einer Einstellungsdatei gewinnt, und hängen die sichere Zeile unten an. Beim SSH-Server gewinnt die erste, und die schwache Zeile darüber gilt weiter. Ändern Sie die vorhandene Zeile. Fügen Sie keine zweite hinzu.
Die Übungsdatei löschen
rm sshd-uebung.confHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Zum Weiterdenken: der Ordner des Labs
Wenn Sie die Aufgabe 2 des Labs fertig haben, führen Sie ls -ld /srv/projects und stat -c '%a %U:%G %n' /srv/projects aus. Sagen Sie in einem Satz, wer hineinkommt und welche Ziffer alle anderen draußen hält.
Die Prüfung des Labs benotet den Benutzer, den Ordner, den cron-Auftrag und den Dienst. Diese Lektion benotet sie nicht. Die Aufgabe oben ist ihre geprüfte Aufgabe.