Latest Posts

OpenSSH Zertifikate

Mir ist beim durchschauen der manpage von ssh-keygen aufgefallen, dass dort die Rede von „ssh Zertifikaten“ ist. Das hat mich erst ein bisschen stutzig gemacht, denn davon habe ich bisher noch nie gehört. Also erstmal mich darüber ein bisschen schlau machen und google bemühen. Dort war aber entweder die Rede von „SSL-Zertifikaten“ oder von „SSH Private-/Public-Key“, was beides nur teilweise damit zu tun hat.

Eine Seite hat mir dann weitergeholfen das Prinzip dahinter zu verstehen: https://blog.habets.se/2011/07/OpenSSH-certificates

Also erst einmal ein paar Dinge dazu, was OpenSSH-Zertifikate nicht können:

  • Zertifikate haben IMMER die Endung -cert.pub, hast du keine Datei, die so heißt, hast du nicht „ssh-keygen -s“ benutzt.
  • Es ist kein SSL-Zertifikat. OpenSSH kann nicht mit x509-Zertifikaten umgehen.
  • Es gibt nur eine Zertifikatstelle. Keine mehreren Schichten für Abteilungen etc.

Und ein paar Dinge, was OpenSSH-Zertifikate können:

  • Host-Keys signieren. Damit kann eine Firma sagen, dass alle Server, die von dieser CA-Stelle signiert wurden, von uns sind. Ist dies mal nicht der Fall, wurde dieser Server sehr wahrscheinlich übernommen oder noch nicht signiert.
  • User-Keys signieren. Normalerweise müssen alle public-Keys in die Datei ~/.ssh/authorized_keys des jeweiligen Servers, des jeweiligen Users eingetragen werden. Mit der CA muss nur der Public-Key des Users signiert werden und das Zertifikat an den User übermittelt werden. Dadurch spart sich ein Administrator viel Arbeit und Zeit.
  • Zertifikate können ablaufen. Einmal einen SSH-Key in einer authorized_keys Datei eingetragen und ein User hat für immer Zugriff auf den Benutzernamen. Ein Zertifikat kann so ausgestellt werden, dass er automatisch abläuft oder er kann von Hand auf die „Revoke“-Liste gesetzt werden und ist somit ungültig.

Dann kommen wir zum praktischen Teil:

Host-Zertifikate erstellen

  1. Als erstes muss ein Server als Certificate Authority (CA) ausgewählt werden. Auf diesem Server wird der CA-Key für die Host-CA und User-CA erstellt. Es kann auch ein gemeinsamer Key für Host-Zertifikate und User-Zertifikate erstellt werden.
  2. Den vorhanden Host Public Key signieren:

    Kopiere /etc/ssh/ssh_host_rsa_key.pub von anderen Servern in einen temporären Ordner, führe diesen Befehl mit diesem Key aus und kopiere die „-cert.pub“ Datei zurück.
  3. Alle Server so konfigurieren, dass sie das Zertifikat zeigen (/etc/ssh/sshd_config)
  4. Nun muss in jedem Client, der sich auf einen der Server einwählen will, der Public-Key der Host-CA in der „known_hosts“-Datei, ~/.ssh/known_hosts, eingetragen werden
  5. Nun müssen noch alle Einträge, die bisher zu diesen Servern aus der Known_Hosts Datei entfernt werden, damit nicht aus versehen alte oder falsche Host-Keys verwendet werden.
  6. Als Test wird auf ein Server mit dem vollen Namen eingeloggt

    Es sollte keine Meldung zum hinzufügen eines Host-Keys mehr vorkommen.

Ganz wichtig beim erstellen eines Host-Zertifikates ist der „-n“ Schalter. Wird dieser nicht verwendet, kann ein Angreifer, der dieses Zertifikat bekommt auf jedem Server installieren und alle Benutzer, die dieser CA vertrauen, glauben, dass das ein echter Server der Firma ist.

User Zertifikate erstellen

  1. Auf dem Server, welcher die CA bereit stellt, erstellen wir eine User-CA
  2. Auf allen Servern, auf denen diese Zertifikate funktionieren sollen, muss die eben erstellte Datei „user_ca.pub“ in den Ordner „/etc/ssh/“ kopiert werden und dann in der „/etc/ssh/sshd_config“ bekannt gemacht werden

    Danach muss der SSH-Server neugestartet werden.
  3. Für jeden User wird nun der Public-Key signiert

    Als Ergebnis kommt eine -cert.pub Datei heraus, welche der Benutzer bekommen muss.
  4. Nun kann der Benutzer sich als der User <user-on-system> einloggen, ohne dass der Public-Key überhaupt auf dem Server bekannt ist.

User Zertifikate widerrufen

  1. Zunächst muss die Key Revocation List (KRL) erstellt werden
  2. Diese Liste muss dem SSH-Server in seiner Konfiguration bekannt gemacht werden (/etc/ssh/sshd_config)
  3. Nun kann ein Public-Key auf diese Liste gesetzt werden
  4. Um Überprüfen zu können, ob ein Key noch gültig ist, gibt es diesen Befehl

Weitere Hinweise:

Mir ist beim verbinden auf einen Server mit einem Zertifikat aufgefallen, dass es irgendwie nicht geklappt hat. Nachdem ich den Fehler bei google gesucht habe, kam heraus, dass dieser Befehl mir geholfen hat

Quellen:
  • https://blog.habets.se/2011/07/OpenSSH-certificates
  • http://en.wikibooks.org/wiki/OpenSSH/Cookbook/Authentication_Keys#Mark_public_keys_as_revoked

Passwort Generator

Vor einiger Zeit habe ich einen Beitrag zu einem Passwort Generator erstellt. Ein Kollege hat mir eine verbesserte Version davon gesendet.

 

One-Liner: Wiederherstellen von komprimierten MySQL Backups

Normalerweise muss ein komprimiertes Backup einer Datenbank entpackt werden und dann im weiteren Schritt erst importiert werden.

Aber ich habe einen Weg gefunden, wie es nun auch in einer Zeile geht:

Dadurch wird das Backup nicht entpackt und dann erst importiert und verbraucht also keinen zusätzlichen Festplattenspeicher, sondern es wird durch die Pipe direkt an MySQL weitergeleitet.

Dadurch fällt die Wartezeit zwischen den beiden Befehlen weg.

Quelle:
http://blog.remibergsma.com/2012/10/08/one-liner-restore-compressed-mysql-backup/

OpenSSL, Keys und Zertifikate

Hin und wieder möchte ich überprüfen, wie lange ein Zertifikat läuft, wie groß der SSL-Key ist. Daher schreibe ich diese Befehle hier auf.

 

 

 

 

Passwort Generator

Ich brauche immer wieder schnell ein Passwort, um Dienste absichern zu können. Bisher bin ich dafür immer auf http://www.gaijin.at/olspwgen.php gegangen. Neulich gab es auf facebook von dem User „nixCraft“ einen Artikel, um eine bash-Funktion dafür zu erstellen.

Um eine kleine Auswahl direkt zu bekommen, hat ein Freund eine kleine Änderung an der Funktion vorgenommen:

Um diese Funktion nutzen zu können, muss sie in der .bashrc hinterlegt werden.

Abspeichern und dann laden.

Jetzt kann die Funktion aufgerufen werden

Beispiele

Quelle:
http://www.cyberciti.biz/faq/linux-random-password-generator/