Frage Ein System zum Verteilen von öffentlichen SSH-Schlüsseln


Wir haben viele verschiedene Systeme, die von mehreren Personen verwaltet werden. Wir haben uns entschieden, SSH Public Key Authentication zu verwenden, um auf diese Systeme zuzugreifen. Dies funktioniert hervorragend, da Sie keine administrativen Account-Passwörter verwalten oder teilen müssen, keine Passwörter zu den verschiedenen Systemen merken müssen (nur die Passphrase zu Ihrem privaten Schlüssel), keine Interaktion (Passworteingabe) mit jedem Remote-Befehl .

Das Problem ist, dass die öffentlichen Schlüssel, die auf den Systemen installiert sind, irgendwie verwaltet werden müssen. Menschen kommen und gehen, Schlüssel können kompromittiert werden, Verantwortlichkeiten ändern sich (eine Person, die heute berechtigt ist, in ein System einzutreten, kann morgen berechtigt sein, auf ein anderes System zuzugreifen). Derzeit verwalten wir es, indem wir ~ / .ssh / authorized_keys Dateien für jedes Konto, das dies benötigt, manuell bearbeiten, aber das ist eine Menge Arbeit und anfällig für Fehler.

Gibt es ein bereites Tool zum Verwalten öffentlicher Schlüssel in einem solchen Szenario? Hast du eigene Lösungen? Oder ist die ganze Idee, Systeme so zu verwalten, fehlerhaft?


26
2018-02-26 08:20


Ursprung


Ich kann deine Frage nicht wirklich beantworten, aber wenn ich es lese, könnte ich es einfach für ein Datenbanksystem schreien hören. - John Gardeniers
Tatsächlich kann ich einen Ort für eine Datenbank auf dem "Backend" (dem "Schlüsselserver") sehen, obwohl ich es vorziehen würde, den Datenbankzugriff dort zu begrenzen und die Schlüssel über den SSH-Kanal verteilen zu lassen. Keine anderen Kommunikationskanäle auf den verwalteten Systemen zu öffnen. In der Tat bin ich in der Lage, ein solches Werkzeug / System selbst zu implementieren, obwohl ich etwas Vorbereitetes und Bewährtes bevorzugen würde. - Jacek Konieczny


Antworten:


Wie bereits von Pugelium erwähnt, jede generische Konfigurations-Management-Software wie Marionette, Koch, Bcfg2 oder cfengine könnte die Aufgabe erfüllen.

Seit der authorized_keys Datei ist nicht so kompliziert, Sie könnten auch verwenden rsync oder ein (D) SCM wie Git oder hg um diese Datei zu verwalten. Sie haben die "Master" -Datei auf einem Ihrer Server und bedienen sie über rsync / git / hg / .... Auf jedem anderen Server führen Sie einen Cron-Job aus, der die Masterkopie (wenn sie geändert wurde) regelmäßig abruft und an den richtigen lokalen Speicherort kopiert. Verdammt, das würde sogar mit reinem HTTP oder FTP funktionieren.

Die Quintessenz ist: Haben Sie eine "Master" Kopie Ihrer authorized_keys Datei und aktualisieren Sie sie. Lassen Sie die "Clients" (die Computer, die die aktuelle authorized_keys-Datei haben sollten) diese von Ihrem Master-Server holen und lokal bereitstellen.


18
2018-02-26 10:25



Wir verwenden bequem Puppet, um ~ 200 Linux-Server zu verwalten (Pub-Keys sind nur eine Datei, die als Attribut eines Benutzers erzwungen wird). - ForgeMan
Ich werde diese Antwort akzeptieren, da es scheint, dass ich nicht besser werde. Es scheint, die Möglichkeiten für mich sind: 1. Halten Sie die Dinge wie sie jetzt sind 2. Erstellen Sie eigene Tool-Kette, um authorized_keys-Dateien zu verwalten 3. Verwenden Sie ein vorhandenes, generisches Tool für die Verwaltung von Servern, wie Puppet oder Chef ... obwohl diese Tools zu groß scheint diese einfache Aufgabe. 4. Verwenden Sie andere Authentifizierungs- / Autorisierungsmechanismen (wie Kerberos) ... obwohl dies auch zu raffiniertes Werkzeug für eine einfache Aufgabe scheint Vielen Dank. - Jacek Konieczny
Dieses System ist so sicher wie der Kanal, über den die Masterkopie gezogen wird. - yarek
Ansible ist ein sehr leichtgewichtiges CM-System mit einem Modul, das mit autorisierten Schlüsseldateien über SSH muckt. Sehen ansible.cc/docs/modules.html#authorized-key - R. S.


Es gibt einen Patch für OpenSSH, der es ermöglicht, öffentliche Schlüssel von einem LDAP-Server zu verwenden, aber das macht nur Sinn, wenn auch Ihre Authentifizierungs- / Kontoüberprüfungen für diesen LDAP-Server durchgeführt werden (so ist meine Umgebung eingerichtet). Außerdem ist es nur so sicher wie Ihre LDAP-Konfiguration (Sie möchten also SSL verwenden und Schlüssel überprüfen).

Sehen http://code.google.com/p/openssh-lpk/ für den Patch und weitere Details. Ich kenne kein Betriebssystem, das standardmäßig mit diesem Patch ausgeliefert wird, aber wenn Sie FreeBSD verwenden, ist es ein optionaler Patch, wenn Sie OpenSSH von Ports verwenden.


11
2018-02-28 01:22



Mit pam_ldap können Sie übrigens auch das Problem lösen, dass das Problem "Jemand, der morgen Zugriff auf Computer A hat, möglicherweise nicht berechtigt ist, darauf zuzugreifen" gelöst wird - lesen Sie in pam_ldap nach, wenn Sie sich für diesen Aspekt interessieren ... - voretaq7


Ich betreibe eine sehr einfache Lösung, die das Gleiche mit Firewall-Regeln macht

Beispieldatei hosts.conf:

192.168.0.1
192.168.2.99
192.168.2.100

distribute.sh:

#!/bin/bash
for d in `cat ./hosts.conf`; do
  echo "copying to $d ...";
  scp /root/.ssh./authorized_keys root@$d:/root/.ssh./authorized_keys
done;

Das ist die ganze Magie :-)


5
2018-02-28 01:09





Ich checke gerade aus SSH SchlüsselDB. Es soll genau das tun, Rollen, Server und Benutzer verwalten, Benutzerschlüssel verteilen, Host-Schlüssel sammeln usw. Es hat sogar etwas namens "Standorte".

Ich habe noch nicht alles ausgearbeitet und bin mir nicht sicher, ob es funktioniert. Der Code ist jedoch in Python und scheint ziemlich überschaubar zu sein, also sollte es nicht zu schwer sein, es zu entfernen und es zum Laufen zu bringen.


5
2018-01-23 23:54





Ich bin mir nicht sicher, was Sie mit vielen meinen, noch weiß ich, ob Sie bereit sind, sich zu ändern, aber Kerberos ist der Droide, nach dem Sie suchen. Das wird Ihre Probleme elegant lösen und sowohl Menschen als auch Maschinen authentifizieren.


1
2018-02-26 10:27





Sie haben zwei (die in der Regel in 3 verwandeln) verschiedene Probleme, die Sie versuchen zu lösen:

  • Authentifizierung (Wer bist du?)
  • Autorisierung (Darf man auf diesen Server zugreifen?)
  • Audit (Was hast du gemacht?)

Public-Key-Auth ist eine gute Möglichkeit, sich manchmal zu authentifizieren. Autorisierung wird jedoch nicht angesprochen. Ich mag die Public-Key-Authentifizierung nicht, da sie (besonders intern) leicht zu kompromittieren ist, wenn Sie nicht über einige gute Steuerelemente verfügen.

Hier kommen Lösungen wie Kerberos ins Spiel. In der Windows-Welt löst Active Directory dieses Problem. In der Unix-Welt gibt es eine Fülle von Möglichkeiten, was sowohl eine gute als auch eine schlechte Sache ist.

Ich würde mir den Red Hat ansehen KostenlosIPA Projekt, das ein Paket von Software ist, die es einfach macht, ein AD-ähnliches Kerberos / LDAP / DNS-System schnell zum Laufen zu bringen.


1
2018-02-28 02:31



Ich verstehe den Unterschied zwischen Authentifizierung, Autorisierung und Audit. Und SSH 'authorized_keys' bietet sowohl Authentifizierungs- als auch Autorisierungsdaten. Es ist alles andere als perfekt, aber es ist einfach. Und Einfachheit ist oft ein großer Vorteil, auch in der Sicherheit. Kerberos, mit seiner komplizierten Infrastruktur, kann Sicherheitsfehler mehr als ssh mit seinen authorized_keys-Dateien. Es bedeutet jedoch nicht, dass das eine oder andere sicherer ist. - Jacek Konieczny
Das Verwalten von authorized_keys-Dateien ist NP für eine Handvoll von Servern, aber Sie erreichen schnell einen Punkt, wo es unmöglich zu verwalten ist. Ich habe nicht versucht zu sagen, dass es eine "schlechte" Lösung ist. Ebenso sind die Komplexitäten in Kerberos für zwei Server ungeeignet ... aber die Investition in Design / Implementierung von Kerberos lohnt sich in einer größeren Umgebung. - duffbeer703


Sie können verwenden Bcfg2 mit bcfg2-Konten verteilen authorized_keys. Als zusätzlichen Bonus haben Sie die Möglichkeit, Benutzer und Gruppen zu steuern.

Bcfg2 ermöglicht die schmerzfreie Erhaltung von /etc/ssh/ssh_known_hosts mit SSHbase auch.


1
2017-09-27 09:38





Es gibt auch SKM


1
2018-01-24 00:17