OpenSSH con chiavi pubbliche dal database


14

È possibile recuperare le chiavi pubbliche da un database anziché dal file authorized_keys?

Vorrei usare una tale configurazione per gestire l'accesso ssh a cose come i repository git per più utenti senza la necessità di ricreare il file authorized_keys ogni volta che una chiave pubblica viene modificata o aggiunta.


1
Sto usando un pupazzo per questo
Matt Simmons,

Userify può gestire quegli account con amministrazione centralizzata ma con autenticazione locale .. in questo modo se il tuo DB centralizzato si interrompe, puoi comunque entrare, ma ottieni tutti i vantaggi della gestione centralizzata.
Jamieson Becker,

Risposte:


16

Ho trovato questa domanda quando ho cercato di rispondere da solo. Dopo alcune ricerche e sperimentazioni, ho trovato alcune altre opzioni per questo. Salterò la parte sulla distribuzione delle chiavi come alternativa poiché Matt Simmons lo ha coperto. Inoltre, so che ci sono momenti in cui non è abbastanza buono. Ad esempio, se sei GitHub e devi archiviare milioni di chiavi pubbliche su un singolo utente, l'aggiornamento continuo dei file SSH authorized_keys e la loro sincronizzazione su decine di decine di centinaia di edge box non è fattibile o auspicabile.

Così,

  1. Innanzitutto, RedHat (e varianti) ha una patch supportata per OpenSSH che aggiunge le opzioni AuthorizedKeysCommande AuthorizedKeysCommandRunAs. La patch è stata unita a monte in openssh 6.2. Per citare dalla pagina man :

    AuthorizedKeysCommand

    Specifica un programma da utilizzare per la ricerca delle chiavi pubbliche dell'utente. Il programma verrà richiamato con il suo primo argomento il nome dell'utente da autorizzare e dovrebbe produrre su righe AuthorizedKeys di output standard (vedere AUTHORIZED_KEYS in sshd (8)). Per impostazione predefinita (o quando impostato sulla stringa vuota) non esiste alcuna esecuzione AuthorizedKeysCommand. Se AuthorizedKeysCommand non autorizza correttamente l'utente, l'autorizzazione passa al file AuthorizedKeys. Nota che questa opzione ha effetto solo con PubkeyAuthentication attivato.

    AuthorizedKeysCommandRunAs

    Specifica l'utente con il cui account viene eseguito AuthorizedKeysCommand. La stringa vuota (il valore predefinito) indica che viene utilizzato l'utente autorizzato.

    Stasera, nei miei esperimenti, ho scoperto che questo non funziona a causa delle politiche SELinux predefinite. Puoi aggirare questo disattivando l'applicazione SELinux con setenforce 0. Dal momento che girare di SELinux è probabilmente una cattiva idea, invece è possibile generare la politica corretta. Nel mio caso, è stato semplice come tentare di accedere con l' AuthorizedKeysCommandopzione impostata /etc/ssh/sshd_confige quindi utilizzando audit2allow -a -M local && semodule -i local.pp. Questo in sostanza esamina i registri di controllo e trova le cose che sono state prevenute e genera eccezioni per esse. Se è probabile che ci siano altre cose lì che potrebbero essere autorizzate, probabilmente dovresti saperne di più audit2allowper assicurarti di avere le nuove politiche giuste.

  2. Esistono altre patch (probabilmente meno testate e affidabili) per aggiungere funzionalità simili. Ad esempio c'è, openssh-script-auth . Puoi anche trovare la patch utilizzata da RedHat e applicarla direttamente. Un rapido incontro di Google scopre https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch e https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch che sono basato sulle versioni RH ma che sono state aggiornate per le versioni più recenti di OpenSSH.

  3. Patch OpenSSH per eseguire ricerche di chiavi direttamente da alcuni store (ad esempio come GitHub e CodeBaseHQ e altri). GitHub non ha open source questa patch, per quanto ne sappia, ma so che in passato mi sono imbattuto in versioni per la ricerca di chiavi MySQL e PostgreSQL. Ho provato a trovarli di nuovo proprio ora ma non ho avuto molta fortuna.

  4. Ci sono anche alcune opzioni basate su FUSE. Ad esempio c'è LPKFuse che ti permette di servire le chiavi pubbliche da LDAP cambiando la AuthorizedKeysFileposizione in una sul filesystem LPKFuse. LPKFuse FS crea file virtuali il cui contenuto è supportato da campi di un server di directory.


Tutto sommato, penso che l'opzione # 1 sia di gran lunga la migliore in quanto è ufficialmente supportata da RedHat. Inoltre, ti consente di inserire qualsiasi logica che ti piace in quello script (incluso parlare con un database) in qualsiasi lingua tu voglia.


Ri: # 1 bella scoperta !! Spero che vada a monte, sarebbe utile in ESXi.
Jason Tan,

@JasonTan: AuthorizedKeysCommand è salito a monte in openssh 6.2. Ho anche aggiornato la risposta per riflettere questo.
Bluewind

Ottima risposta, l'opzione 1 era esattamente quello che stavo cercando.
Shane Kilkelly,


1

Credo che nelle nuove versioni di openssh sia possibile archiviare le chiavi in ​​una voce LDAP degli utenti. Se stai già utilizzando LDAP o AD per la gestione degli account, dovresti essere in grado di sfruttarlo anche per la gestione delle chiavi.

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.