Un sistema per la distribuzione di chiavi pubbliche SSH


26

Abbiamo molti sistemi diversi che sono gestiti da più persone. Abbiamo scelto di utilizzare l'autenticazione con chiave pubblica SSH per accedere a tali sistemi. Funziona alla grande, poiché non è necessario gestire o condividere le password degli account amministrativi, non è necessario ricordare le password dei vari sistemi (solo la passphrase della chiave privata), non è necessario interagire (inserire la password) con ogni comando remoto .

Il problema è che le chiavi pubbliche installate sui sistemi devono essere gestite in qualche modo. Le persone vanno e vengono, le chiavi possono essere compromesse, le responsabilità cambiano (una persona autorizzata a entrare in un sistema oggi può essere autorizzata ad accedere a un altro domani). Attualmente lo gestiamo modificando manualmente i file ~ / .ssh / authorized_keys su ogni account che ne ha bisogno, ma è molto lavoro e soggetto a errori.

Esiste uno strumento pronto per gestire le chiavi pubbliche in tale scenario? Hai le tue soluzioni? O l'intera idea di gestire i sistemi in questo modo è imperfetta?


Non riesco davvero a rispondere alla tua domanda, ma quando l'ho letto ho potuto sentirlo urlare per un qualche tipo di sistema di database.
John Gardeniers,

In effetti, posso vedere un posto per un database sul "backend" (il "key server"), anche se preferirei limitare l'accesso al database lì e avere le chiavi distribuite sul canale SSH. Non aprire altri canali di comunicazione sui sistemi gestiti. In effetti, mi sento in grado di implementare tale strumento / sistema, anche se preferirei qualcosa di pronto e dimostrato efficace.
Jacek Konieczny,

Risposte:


18

Come già accennato da pulegium, qualsiasi software di gestione della configurazione generico come Puppet , Chef , Bcfg2 o cfengine potrebbe svolgere il compito.

Poiché il file authorized_keys non è così complicato, puoi anche usare rsync o un (D) SCM come git o hg per gestire questo file. Hai il file "master" su uno dei tuoi server e lo servi tramite rsync / git / hg /…. Su ogni altro server si esegue un processo cron che recupera periodicamente la copia principale (se è stata modificata) e la copia nella posizione locale corretta. Cavolo, funzionerebbe anche con HTTP o FTP puro.

La linea di fondo è: avere una copia "master" del file authorized_keys e aggiornarlo. Consenti ai "client" (i computer, che dovrebbero avere il file authorized_keys corrente) di recuperarli dal server principale e distribuirli localmente.


1
Usiamo comodamente le marionette per gestire ~ 200 server Linux (le chiavi pub sono solo un file da applicare come attributo di un utente).
ForgeMan,

1
Accetterò questa risposta, sembra che non migliorerò. Sembra che le scelte per me siano: 1. Mantenere le cose come sono ora 2. Costruire la propria catena di strumenti per gestire i file authorized_keys 3. Utilizzare alcuni strumenti generici esistenti per la gestione dei server, come Puppet o Chef ... anche se quegli strumenti sembrano troppo grandi per questo semplice compito. 4. Usa altri meccanismi di autenticazione / autorizzazione (come Kerberos) ... anche se questo sembra anche uno strumento troppo sofisticato per un semplice compito Grazie.
Jacek Konieczny il

questo sistema è sicuro come il canale attraverso il quale viene tirata la copia principale.
anno

1
Ansible è un sistema CM molto leggero che ha un modulo da confondere con file di chiavi autorizzati su ssh. Vedi ansible.cc/docs/modules.html#authorized-key
RS

11

Esiste una patch disponibile per OpenSSH che consente di utilizzare le chiavi pubbliche da un server LDAP, ma ciò ha davvero senso solo se i controlli di autenticazione / account vengono eseguiti anche su quel server LDAP (che è il modo in cui il mio ambiente è impostato). Inoltre è sicuro solo quanto la tua configurazione LDAP (quindi vuoi usare SSL e verificare le chiavi).

Vedi http://code.google.com/p/openssh-lpk/ per la patch e ulteriori dettagli. Non conosco alcun sistema operativo fornito con questa patch per impostazione predefinita, ma se stai eseguendo FreeBSD è una patch opzionale se usi OpenSSH dalle porte.


1
L'uso accidentale di pam_ldap ti consente anche di risolvere il problema "qualcuno autorizzato ad accedere alla macchina A oggi potrebbe non essere autorizzato ad accedervi domani" - leggi su pam_ldap se sei interessato a quell'aspetto ...
voretaq7,

5

corro una soluzione molto semplice, che fa lo stesso con le regole del firewall

file di esempio 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;

questa è tutta la magia :-)


5

Attualmente sto controllando SSD KeyDB . Ha lo scopo di fare esattamente questo, amministrare ruoli, server e utenti, distribuire chiavi utente, raccogliere chiavi host ecc. Ha persino qualcosa chiamato "percorsi".

Non ho ancora capito tutto e non sono sicuro che funzioni completamente. Il codice è comunque in Python e sembra essere abbastanza gestibile, quindi non dovrebbe essere troppo difficile rispolverarlo e farlo funzionare.


1

Non sono sicuro di cosa intendi per molti, né so se sei disposto a cambiare, ma Kerberos è il droide che stai cercando. Ciò risolverà i tuoi problemi in modo elegante e autenticherà persone e macchine.


1

Hai due (che generalmente si trasformano in 3) diversi problemi che stai cercando di risolvere:

  • Autenticazione (chi sei?)
  • Autorizzazione (sei autorizzato ad accedere a questo server?)
  • Audit (cosa hai fatto?)

L'autorizzazione a chiave pubblica è un modo corretto per eseguire l'autenticazione a volte, ma non indirizza affatto l'autorizzazione. Non mi piace l'autorizzazione a chiave pubblica, in quanto è molto facile scendere a compromessi (soprattutto internamente) a meno che non si disponga di buoni controlli.

È qui che entrano in gioco soluzioni come Kerberos. Nel mondo Windows, Active Directory risolve questo problema. Nel mondo Unix, ci sono molte scelte, che è sia una cosa positiva che una cattiva.

Mi piacerebbe verificare la Red Hat FreeIPA progetto, che è un insieme di software che rende facile ottenere un sistema AD-come Kerberos / LDAP / DNS rapidamente operativi.


Comprendo la differenza tra autenticazione, autorizzazione e audit. E le "chiavi autorizzate" di SSH forniscono dati di autenticazione e autorizzazione. È lungi dall'essere perfetto, ma è semplice. E la semplicità è spesso un grande vantaggio, anche in termini di sicurezza. Kerberos, con la sua complicata infrastruttura, potrebbe non riuscire a garantire la sicurezza in molti modi diversi da ssh con i suoi file authorized_keys. Tuttavia, ciò non significa che l'uno o l'altro sia più sicuro.
Jacek Konieczny,

La gestione dei file authorized_keys è np per una manciata di server, ma si raggiunge rapidamente un punto in cui è impossibile da gestire. Non stavo cercando di dire che è una soluzione "cattiva". Allo stesso modo, le complessità in Kerberos sono inadeguate per due server ... ma vale la pena investire in progettazione / implementazione di Kerberos in un ambiente più ampio.
duffbeer703,

1

È possibile utilizzare Bcfg2 con bcfg2-account per distribuire authorized_keys. Come bonus aggiuntivo, avrai la possibilità di controllare utenti e gruppi.

Bcfg2 consente anche una manutenzione indolore/etc/ssh/ssh_known_hosts con SSHbase .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.