Der erste Lynis-Lauf auf einem frischen VPS ergibt meist um die 60 und eine lange Liste von Empfehlungen, bei der unklar ist, wo man anfangen soll. Die gute Nachricht: 80 bis 85 sind die Arbeit eines Abends, und die meisten Schritte sind keine Kosmetik, sondern tatsächlich sinnvoll. Die schlechte: Die letzten fünfzehn Punkte sind auf einer gemieteten virtuellen Maschine nicht zu erreichen, und ihnen nachzujagen ist ein Fehler.

Was der Index zeigt und was nicht

Der Hardening-Index ist das gewichtete Verhältnis bestandener Tests zur Gesamtzahl — kein Prozentsatz an Sicherheit. Lynis führt rund dreihundert Tests aus und liefert zwei getrennte Listen: warnings, die nach einem echten Problem aussehen, und suggestions, also Dinge, die sich verbessern ließen. Beginnen Sie immer bei den Warnungen; es sind meist nur wenige.

Hundert Punkte gibt es nicht: Manche Empfehlungen setzen Entscheidungen bei der Systeminstallation voraus (eigene Partitionen für /home, /tmp und /var), manche brauchen Zugriff auf den Bootloader, den ein VPS nicht hat, und manche widersprechen einander. Und den eigenen Index mit einem fremden zu vergleichen ist zwecklos: Lynis zieht Punkte für das ab, was auf der Maschine läuft. Jeder laufende Dienst ist ein weiterer offener Port, eine eigene Konfiguration und ein Dutzend neuer Empfehlungen — deshalb finden sich hohe Werte häufiger dort, wo außer SSH nichts läuft. Für einen Arbeitsserver mit Website, Datenbank und Mail sind 85 ein gutes Ergebnis.

Als root ausführen

sudo lynis audit system

Ohne sudo überspringt Lynis alle Tests, die Systemdateien benötigen, und meldet einen niedrigeren Index — nicht weil der Server schlecht wäre, sondern weil die Prüfungen unsichtbar blieben. Der Bericht landet in /var/log/lynis-report.dat, das lesbare Protokoll in /var/log/lynis.log.

Jede Ausgabezeile beginnt mit einer Testkennung wie SSH-7408 oder KRNL-6000. Über diese Kennung finden Sie sowohl die Erklärung als auch den Weg, einen Test abzuschalten — merken Sie sich ihre Form, alles Weitere dreht sich darum.

Was die Zahl wirklich bewegt

SSH (SSH-7408). Der gewichtigste Block: Ein einziger Test prüft ein Dutzend Parameter auf einmal. Bearbeiten Sie nicht die gesamte sshd_config, sondern legen Sie eine eigene Datei ab, damit ein Paket-Update Ihre Arbeit nicht überschreibt:

sudo tee /etc/ssh/sshd_config.d/10-hardening.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
MaxAuthTries 3
MaxSessions 2
X11Forwarding no
AllowTcpForwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
LogLevel VERBOSE
TCPKeepAlive no
EOF
sudo sshd -t && sudo systemctl reload ssh

sshd -t vor dem Neuladen des Dienstes ist Pflicht: Ein Fehler in der Konfiguration bei laufender Sitzung lässt Sie draußen. Und bevor Sie PasswordAuthentication no setzen, vergewissern Sie sich, dass der Schlüssel wirklich funktioniert — aus einem zweiten, offenen Terminal.

Kernel-Parameter (KRNL-6000). Der Test prüft rund zwei Dutzend sysctl-Werte. Eine Datei dafür:

sudo tee /etc/sysctl.d/99-hardening.conf <<'EOF'
kernel.dmesg_restrict = 1
kernel.kptr_restrict = 2
kernel.sysrq = 0
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.log_martians = 1
EOF
sudo sysctl --system

Fehlende Werkzeuge. Ein guter Teil der Empfehlungen lautet schlicht „installieren Sie, was nicht da ist“: auditd (Aufzeichnung von Systemereignissen), aide (Dateiintegrität), debsums (Paketintegrität), unattended-upgrades (automatische Sicherheitsupdates), sysstat und acct (Prozessabrechnung), ein Malware-Scanner. Jedes schließt ein bis zwei Empfehlungen — installieren Sie sie aber nicht der Punkte wegen: Ohne sie rekonstruieren Sie nach einem Vorfall gar nichts.

Kleinigkeiten mit gutem Aufwand-Nutzen-Verhältnis. umask 027 in /etc/login.defs; Passwortlaufzeiten in derselben Datei; die Banner in /etc/issue und /etc/issue.net; Compiler nur für root lesbar (chmod 700 /usr/bin/gcc). Zu den Bannern ehrlich gesagt: Für die Sicherheit tun sie nichts, sie sind eine juristische Formalität — einen Punkt geben sie trotzdem.

Eine Falle in der login.defs

Wird umask per sed-Zeilenersetzung geändert, bleiben in der Datei oft mehrere UMASK-Zeilen zugleich stehen. Lynis wertet den Wert dann nicht, und der Test AUTH-9328 bleibt rot, obwohl die Einstellung erledigt aussieht. Prüfen Sie nach dem Bearbeiten:

grep -c '^UMASK' /etc/login.defs

Es muss genau eine sein. Dasselbe gilt für jeden anderen Parameter dieser Datei.

Fehlalarme und wie man sie richtig stilllegt

Manche Warnungen betreffen Ihren Server überhaupt nicht. Ein Beispiel aus der Praxis: Auf dem VPS eines großen Anbieters meldet der Test PKGS-7388, es sei kein Sicherheits-Repository gefunden worden — schlicht deshalb, weil die Repositories im deb822-Format mit Verweis auf eine Spiegelliste beschrieben sind und Lynis nach der gewohnten Zeile sucht. Die Sicherheitsupdates kommen tadellos an.

Stillgelegt wird so etwas nicht durch Löschen von Zeilen im Bericht, sondern über ein Profil. Profildateien tragen die Endung .prf (nicht .prof — daran verliert man leicht eine halbe Stunde), und eigene Regeln gehören nach /etc/lynis/custom.prf:

skip-test=PKGS-7388
skip-test=KRNL-5788

Eine Regel: Neben jeder Zeile gehört ein Kommentar, warum der Test übersprungen wird. In einem halben Jahr wissen Sie nicht mehr, ob er deaktiviert wurde, weil er nicht zutrifft, oder weil die Behebung zu mühsam war — und der Unterschied zwischen diesen beiden Fällen ist der ganze Punkt.

Was Sie nicht tun sollten

Jagen Sie der Zahl nicht nach. Der Index lässt sich leicht aufblähen, indem man unbequeme Tests abschaltet, und oberhalb eines gewissen Niveaus ist das der einzige Weg — nur wird der Server dadurch nicht sicherer. Nützlich ist etwas anderes: den eigenen Wert festhalten und Veränderungen beobachten. Ein Index, der nach einem Update oder einer fremden Konfigurationsänderung fällt, ist ein weitaus wertvolleres Signal als seine absolute Höhe.

Genau deshalb lohnt es sich, Lynis nicht einmalig, sondern planmäßig laufen zu lassen und die Berichte aufzubewahren, damit es etwas zu vergleichen gibt. Wie das auf einer Seite zusammengefasst aussieht, zeigt die Demo unten: der Index, die Liste der Warnungen mit ihren Testkennungen und das, was sich seit dem letzten Lauf geändert hat.