Root-Login über SSH deaktivieren

Stellen Sie zuerst sicher, dass sich ein anderes Konto anmelden und sudo nutzen kann. Legen Sie dann /etc/ssh/sshd_config.d/10-no-root.conf mit der Zeile PermitRootLogin no an, prüfen Sie mit sudo sshd -T | grep -i permitrootlogin und laden Sie mit sudo systemctl reload ssh neu (sshd unter Red Hat und Fedora). Bereits offene Sitzungen bleiben offen, testen Sie also einen neuen Root-Login aus einem anderen Fenster, bevor Sie irgendetwas schließen.

Root gesperrt, sudo bleibt bequem: Wardterm bietet Ihr gespeichertes Passwort an, wenn sudo danach fragt. Zeigen

Aktualisiert am . Alle Werte, die Dateireihenfolge und sshd -T wurden mit OpenSSH 10.0 unter Debian 13 in einem Wegwerf-Container ausgeführt, mit echten Anmeldungen per Passwort und Schlüssel.

Schritt 1: Sorgen Sie für einen anderen Zugang

Melden Sie sich in einem Fenster, das Sie offen lassen, als normaler Benutzer mit Ihrem Schlüssel an und prüfen Sie, ob sudo funktioniert:

ssh user@server
sudo -v

Haben Sie noch kein solches Konto, lesen Sie Benutzer mit SSH-Zugang und sudo anlegen. Tun Sie das zuerst. Es ist der einzige Schritt, der Sie vor einem Aussperren schützt.

Schritt 2: Vorhandene Einstellungen suchen

sudo grep -ri permitrootlogin /etc/ssh/sshd_config /etc/ssh/sshd_config.d/

Bei den meisten sshd-Einstellungen gewinnt der zuerst gelesene Wert, nicht der letzte. Unter Debian und Ubuntu steht in sshd_config weit oben Include /etc/ssh/sshd_config.d/*.conf, die Dateien dort werden also zuerst gelesen, in der Reihenfolge ihrer Namen. In unserem Test blieb root erlaubt, obwohl 00-cloud.conf PermitRootLogin yes und 10-no-root.conf no enthielt.

Das Abbild eines Hosting-Anbieters kann so eine Datei mitbringen, entfernen oder ändern Sie also jede solche Zeile. Gibt es keine Include-Zeile, bearbeiten Sie PermitRootLogin direkt in sshd_config.

Schritt 3: Einstellung hinzufügen

echo 'PermitRootLogin no' | sudo tee /etc/ssh/sshd_config.d/10-no-root.conf

Schritt 4: Vor dem Neuladen prüfen

sudo sshd -t
sudo sshd -T | grep -i permitrootlogin

sshd -t gibt nichts aus, wenn alles in Ordnung ist. Ein Tippfehler liefert eine Meldung wie unsupported option "maybe", und Sie sollten ihn beheben, bevor Sie weitermachen. sshd -T zeigt den Wert, den der Server wirklich verwenden wird:

permitrootlogin no

Schritt 5: Neu laden

# Debian and Ubuntu
sudo systemctl reload ssh

# Red Hat, Fedora and similar
sudo systemctl reload sshd

Ein Reload gilt für neue Verbindungen, Ihre offene Sitzung läuft weiter. Das haben wir bestätigt: Eine vor der Änderung geöffnete Sitzung lief weiter, und eine neue Anmeldung folgte der neuen Regel.

Schritt 6: Aus einem neuen Fenster testen

ssh root@server

Sie sollten Permission denied sehen, selbst mit dem richtigen Schlüssel. Das Server-Log meldet:

ROOT LOGIN REFUSED FROM 203.0.113.10 port 41288

Melden Sie sich dann aus einem weiteren neuen Fenster als normaler Benutzer an und führen Sie erneut sudo -v aus.

Was jeder Wert bewirkt

WertPasswortSchlüsselSchlüssel mit erzwungenem Befehl
yesErlaubtErlaubtErlaubt
prohibit-passwordAbgelehntErlaubtErlaubt
forced-commands-onlyAbgelehntAbgelehntErlaubt
noAbgelehntAbgelehntAbgelehnt

Der Standard ist seit OpenSSH 7.0 prohibit-password. Auf einem System, das ihn nicht geändert hat, kann sich root also nicht per Passwort anmelden, ein Root-Schlüssel funktioniert aber weiterhin. without-password ist ein alter Name für denselben Wert. sshd -T gab auf unserem OpenSSH-10.0-Server without-password aus, obwohl prohibit-password gesetzt war. Version 10.1 hat das geändert und gibt den aktuellen Namen aus.

Ein erzwungener Befehl bedeutet command="..." in authorized_keys. forced-commands-only passt zu einem Backup-Job, der root wirklich für einen festen Befehl braucht.

Ausnahmen mit Match

Um Root-Schlüssel nur von einer Verwaltungsadresse zu erlauben, fügen Sie dies in dieselbe Datei unter der ersten Zeile ein:

Match Address 203.0.113.10
    PermitRootLogin prohibit-password

Ein einfaches sshd -T zeigt die Wirkung eines Match-Blocks nicht. Beschreiben Sie mit -C eine Verbindung, um zu sehen, was gelten würde. Diese beiden gaben in unserem Test unterschiedliche Antworten:

sudo sshd -T -C user=root,host=server,addr=203.0.113.10 | grep -i permitrootlogin
sudo sshd -T -C user=root,host=server,addr=198.51.100.7 | grep -i permitrootlogin

Wenn Sie sich doch aussperren

Nutzen Sie die Konsole Ihres Hosting-Anbieters, die nicht über SSH läuft. Löschen Sie die Datei, die Sie angelegt haben, und laden Sie sshd neu.

Fragen

Was ist der Unterschied zwischen PermitRootLogin no und prohibit-password?

no lehnt root auf jede Art ab. prohibit-password, die Voreinstellung, lehnt das root-Passwort ab, akzeptiert aber weiterhin einen root-Schlüssel.

Beendet ein Reload von sshd meine offene Sitzung?

Nein. Ein Reload gilt für neue Verbindungen, offene Sitzungen laufen weiter.

Was tun, wenn ich mich nach dem Abschalten von root ausgesperrt habe?

Nutzen Sie die Web-Konsole Ihres Hosters, die nicht über SSH läuft. Löschen Sie die hinzugefügte Datei und laden Sie sshd neu.

Quellen

Mehr zu Server absichern

Alle Anleitungen