Umgang mit Hostkeys
Private Hostkeys
Handling
Die privaten Keys lagern ausschliesslich auf den Rechnern, auf denen sie in Gebrauch sind und werden in keinem Fall uebers Netz gespielt. Der Transport der Keys kann ueber USB-Sticks, Disketten usw erfolgen. Das gleiche gilt fuer Backups der Keys.
Generierung
# Erstellt ein RSA-4096 Schluesselpaar. ssh-keygen -t rsa -b 4096 -N "" -f /etc/ssh/ssh_host_rsa_key
Konsistenz der Keys
Kompromittierter public Key
Die public Keys der Rechner werden in regelmaessigen Abstaenden von zentraler Stelle uebers Netz eingesammelt und auf Veraenderungen ueberprueft. Sollten sich public Keys veraendert haben, werden die zustaendigen Techniker automatisch informiert. Der betroffen Rechner wird aus ssh_known_hosts entfernt.
Kompromittierter private Key
Der Rechner meldet beim Versuch sich einzuloggen das Problem und weist alle Verbindungen zurueck.
Administration
Automatisch
Regelmaessiges Einsammeln der public Keys und die Benachrichtigung im Falle von Veraenderungen. Alle validen Keys werden zu einem ssh_known_hosts File zusammengefasst und oeffentlich gemacht (Webseite, um das File extern zu verbreiten; Filesystem (/home/config/openssh/ssh_known_hosts), fuer die interne Verbreitung). Nicht valide Keys, die aus einer Inkonsistenz her ruehren oder nicht unseren Anforderungen (mindestens RSA-2048, Hostdatenbankeintrag erforderlich) genuegen, werden unmittelbar aus ssh_known_hosts entfernt.
Nicht automatisch
Im Falle einer Inkonsistenz der public Keys muessen die, fuer den betroffenen Rechner, zustaendigen Techniker von Hand eingreifen (ssh-check), damit ihre (neuen, anderen) public Keys wieder in ssh_known_hosts beruecksichtigt werden koennen.
Passende Hostkeys muessen von den Technikern selbst erzeugt werden.
Wer moechte, dass sich sein Hostkey, z.B. nach einer Neuinstallation, nicht aendert, muss sich selber darum kuemmern (Da wir jedoch dauerhaft und mit hoher aktuallitaet das File ssh_known_hosts fuer alle Benutzer und Rechner vorhalten, spricht aus meiner Sicht nicht viel dagegen, dass sich HostKeys auch mal aendern koennen! ).
Tool
Fuer die Verwaltung der public Hostkeys kann das Script /home/config/bin/ssh-check verwendet werden:
./ssh-chek
-h Help
kurze Info.
-l List suspended hosts
Auflistung aller gesperrten Rechner.
-n List non trusted hosts
Auflistung aller nicht trusted Rechner, die grundsaetzlich (auch gesperrte oder invalide Rechner) in ssh_known_hosts beruecksichtigt werden.
-a List hosts in ssh_known_hosts
Auflistung aller Rechner, die aktuell in ssh_known_hosts vorhanden sind.
-x [hostname] Info about host
Alle ssh-relevanten Statusinformationen zu einem Rechner.
-e [hostname] Unlock suspended host
Gesperrten Rechner entsperren. Wichtig: Der Hostkey, der vor der Sperrung gueltig war, wird wieder aktiviert.
-s [hostname] Lock host
Rechner Sperren. Der Rechner wird bei automatischen Scans nicht mehr beruecksichtigt und wird aus „ssh_known_hosts“ entfernt. Wichtig: Der Hostkey bleibt erhalten.
-i [hostname] Install host
Rechner in das System einfuegen. Rechner, die bereits Bestandteil des Systems waren werden komplett entfernt und dann neu eingefuegt.
-u [hostname] Uninstall host
Rechner aus dem System entfernen. Wichtig: Trusted Rechner kann man nicht wirklich entfernen. Trusted Rechner haben einen gueltigen/ungueltigen public Key oder sind gesperrt, werden aber immer beruecksichtigt.
-p [portnumber] port != 22
Verwendung eines vom Default abweichenden Ports.
-c Comment required
Kommentar beifuegen.
Beispiele:
Rechner xyz hatte waerend der Neuinstallation einen anderen Hostkey und ist deshalb automatisch gesperrt worden. Aktuell hat der Rechner wieder den alten Hostkey.
Mit ssh-check –e xyz wird die Sperrung aufgehoben und der alte Hostkey wieder in ssh_known_hosts eingesetzt.
Rechner xyz wurde gehackt. Nach der Neuinstallation soll der alte Hostkey durch einen anderen ersetzt werden.
Mit ssh-check –i xyz wird die ssh-relevante Vergangenheit des Rechners geloescht. Anschliessend wird der neue Hostkey gescannt und in ssh_known_hosts eingesetzt.
Rechner xyz wird in abc umbenannt.
Mit ssh-check –u xyz wird die ssh-relevante Vergangenheit des Rechners geloescht. Mit ssh-check –i abc wird der Rechner in das System eingefuegt, der neue Hostkey gescannt und in ssh_known_hosts eingesetzt.