• Arch Linux
  • OpenSSH 9.9: Feature: "Match invalid-user"

Kürzlich gab es ja das Update auf OpenSSH 9.9. Nun schaue ich mir auch gerne mal die Release Notes an. Dort lese ich:

 * sshd(8): add a "Match invalid-user" predicate to sshd_config Match
   options that matches when the target username is not valid on the
   server.

Schnell mal ausprobiert:

$ cat /etc/ssh/sshd_config.d/Invalid-User.conf
Match invalid-user
  RefuseConnection yes

Funktioniert aber (bei mir) nicht:

$ sudo sshd -T -C user=kk | grep -i refuseconnection
refuseconnection yes
persourcepenalties crash:90 authfail:5 noauth:1 grace-exceeded:10 refuseconnection:10 max:600 min:15 max-sources4:65536 max-sources6:65536 overflow:permissive overflow6:permissive

$ sudo sshd -T -C user=kkkk | grep -i refuseconnection
refuseconnection yes
persourcepenalties crash:90 authfail:5 noauth:1 grace-exceeded:10 refuseconnection:10 max:600 min:15 max-sources4:65536 max-sources6:65536 overflow:permissive overflow6:permissive

Den User kk gibt es lokal, den User kkkk nicht. Wenn ich den sshd durchstarte kann sich niemand mehr anmelden.

Hat das von euch jemand schon mal probiert? Funktioniert das so?

Ich hab das mit Match Invalid-User auch nicht hinbekommen. Keine Ahnung.

Du kannst vielleicht den Spieß umdrehen:

RefuseConnection yes

Match User friedbert
    RefuseConnection no

Aber ich hab das jetzt auch nicht durchgetestet.

Edit: Also mit LogLevel DEBUG3 sieht man, daß der Match Invalid-User eigentlich funktioniert. Also es wird dort korrekt ausgegeben ob der User invalid ist oder nicht. Aber aus unerfindlichen Gründen wird das Zeug aus der Match Section dann trotzdem ausgeführt. Riecht stark nach irgendeinem Bug.

Danke für die Bestätigung, wenigstens liegt es dann nicht an mir. Das Feature ist ja auch taufrisch. Ich werde dann wohl noch einige Zeit warten.

Was ist der Sinn und Zweck davon? So wie ich die Release Notes interpretiere, geht es lediglich darum, eine Möglichkeit zu haben, ungültige Benutzernamen herauszufiltern, bevor überprüft wird, ob es die Benutzer gibt. Aber es geht nicht darum, ob potentiell gültige Namen (im Beispiel sind kk und kkk beides gültige Benutzernamen unter Linux und Windows) als Benutzer überhaupt existieren.

Vermutlich ist dies eine Erweiterung, da mittlerweile OpenSSH auch auf Windows Servern betrieben werden kann (Client ist vorinstalliert, Server kann nachinstalliert werden) und sich die Plattformen doch unterscheiden.

Im konkreten Fall könnte es sein, dass es einen Benutzer -kk gäbe, was unter Windows kein Problem zu sein scheint, aber meines Wissens unter Linux nicht erlaubt ist (man 8 useradd). Ein solcher Benutzer müsste sich unter Windows anmelden können. Aber dies ist nur eine Vermutung meinerseits.

in dem Anwendungsbeispiel soll es wohl fail2ban ersetzen oder ergänzen. Unbekannter, geratener Benutzername? Du bist gesperrt für 10 Sekunden. Du probierst es vor Ablauf der Zeit nochmal? Nochmal 10 Sekunden oben draufgeschlagen. Geht dann hoch auf bis zu 10 Minuten.

Diese Zeiten lassen sich mit PerSourcePenalties konfigurieren.

Interessant. Kann natürlich auch sein. Ich habe lediglich den einen Satz in den Release Notes interpretiert, aber keine Anstalten gemacht, weiter zu recherchieren.