
In questo post svilupperemo una procedura per l'accesso urgente agli host SSH, utilizzando chiavi di sicurezza hardware in modalità offline. Questo è solo uno dei vari approcci e puoi adattarlo alle tue esigenze. Archivieremo il centro di certificazione SSH per i nostri host su una chiave di sicurezza hardware. Questo schema funzionerà praticamente su qualsiasi OpenSSH, inclusi gli SSH con accesso single sign-on.
Perché tutto questo? Bene, è un'opzione da utilizzare in caso di emergenza. È una backdoor che ti permetterà di accedere al tuo server quando per qualche motivo non c'è nulla che funziona.
Perché usare certificati invece di chiavi pubbliche / private per l'accesso urgente?
- A differenza delle chiavi pubbliche, la durata dei certificati può essere molto breve. Puoi generare un certificato valido per 1 minuto o addirittura 5 secondi. Alla scadenza, il certificato diventerà inutilizzabile per nuove connessioni. Questo è ideale per l'accesso urgente.
- Puoi creare un certificato per qualsiasi account sui tuoi host e, se necessario, inviare tali «certificati monouso» ai tuoi colleghi.
Cosa ti servirà
- Chiavi di sicurezza hardware che supportano chiavi residenti.
Le chiavi residenti sono chiavi crittografiche completamente memorizzate all'interno della chiave di sicurezza. A volte sono protette da un PIN alfanumerico. La parte aperta della chiave residente può essere esportata dalla chiave di sicurezza, se necessario, insieme al descrittore della chiave privata. Le chiavi residenti sono supportate, ad esempio, da chiavi USB della serie Yubikey 5. È preferibile che siano destinate solo per l'accesso urgente all'host. Per questo post utilizzerò solo una chiave, ma dovresti averne una aggiuntiva per il backup. - Un posto sicuro dove conservare queste chiavi.
- OpenSSH versione 8.2 o superiore sul tuo computer locale e sui server a cui desideri accedere urgentemente. Ubuntu 20.04 viene fornito con OpenSSH 8.2.
- (facoltativo, ma consigliato) Strumento CLI per la verifica dei certificati.
Preparazione
Per iniziare, è necessario creare un centro di certificazione che sarà situato sulla chiave di sicurezza hardware. Inserisci la chiave e avvia:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]Come commento (-C), ho indicato yubikey-9-512-742@smallstep.com per ricordare a quale chiave di sicurezza si riferisce questo centro di certificazione.
Oltre ad aggiungere la chiave a Yubikey, verranno generati localmente due file:
- sk-user-ca, un descrittore della chiave che si riferisce alla chiave privata memorizzata nella chiave di sicurezza,
- sk-user-ca.pub, che sarà la chiave pubblica per il tuo centro di certificazione.
Ma non preoccuparti, su Yubikey è memorizzata un'altra chiave privata che non può essere estratta. Quindi qui è tutto sicuro.
Sui server come utente root, aggiungi (se non l'hai già fatto) alla configurazione del tuo SSHD (/etc/ssh/sshd_config) quanto segue:
TrustedUserCAKeys /etc/ssh/ca.pubPoi, sul server, aggiungi la chiave pubblica (sk-user-ca.pub) in /etc/ssh/ca.pub
Riavvia il demone:
# /etc/init.d/ssh restartOra possiamo provare ad accedere al server. Ma prima abbiamo bisogno di un certificato. Crea una coppia di chiavi che sarà associata al certificato:
$ ssh-keygen -t ecdsa -f emergencyCertificati e coppie SSH
A volte si ha la tentazione di usare il certificato come sostituto della coppia chiave pubblica / chiave privata. Ma per l'autenticazione dell'utente, un solo certificato non è sufficiente. Ogni certificato ha anche una chiave privata associata. Ecco perché dobbiamo generare questa coppia di chiavi 'emergenziali' prima di rilasciare il certificato per noi stessi. È importante che il certificato firmato venga mostrato al server, specificando la coppia di chiavi per la quale abbiamo la chiave privata.Quindi, lo scambio di chiavi pubbliche è ancora vivo e vegeto. Funziona anche con i certificati. I certificati semplicemente sollevano il server dalla necessità di memorizzare le chiavi pubbliche.
Successivamente, crea il certificato stesso. Ho bisogno dell'autenticazione dell'utente ubuntu in un intervallo di 10 minuti. Puoi farlo a modo tuo.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergencyTi verrà chiesto di firmare il certificato con le impronte digitali. Puoi aggiungere nomi utente aggiuntivi separati da virgole, ad esempio, -n ubuntu,carl,ec2-user
Ottimo, ora hai un certificato! Ora è necessario impostare le autorizzazioni corrette:
$ chmod 600 emergency-cert.pubDopo di che, puoi visualizzare il contenuto del tuo certificato:
$ step ssh inspect emergency-cert.pubEcco come appare il mio:
emergency-cert.pub
Tipo: ecdsa-sha2-nistp256-cert-v01@openssh.com certificato utente
Chiave pubblica: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
CA di firma: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
ID chiave: "test-key"
Numero di serie: 0
Valido: da 2020-06-24T16:53:03 a 2020-06-24T17:03:03
Principali:
ubuntu
Opzioni critiche: (nessuna)
Estensioni:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rcQui la chiave pubblica è la chiave di emergenza che abbiamo creato, collegata alla CA sk-user-ca.
Finalmente siamo pronti a lanciare il comando SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$- Ora puoi creare certificati per qualsiasi utente sull'host che si fida della tua autorità di certificazione.
- Puoi rimuovere emergency. Puoi mantenere sk-user-ca, ma non ti serve, poiché è anche presente sulla chiave di sicurezza. Potresti voler rimuovere anche la chiave pubblica PEM originale dai tuoi host (ad esempio, in ~/.ssh/authorized_keys per l'utente ubuntu), se l'hai utilizzata per l'accesso di emergenza.
Accesso d'emergenza: piano d'azione
Inserisci la chiave di sicurezza e lancia il comando:
$ ssh-add -KIn questo modo aggiungerai la chiave pubblica dell'autorità di certificazione e il descrittore della chiave all'agente SSH.
Ora esporta la chiave pubblica per creare un certificato:
$ ssh-add -L | tail -1 > sk-user-ca.pubCrea un certificato con una scadenza, ad esempio, non superiore a un'ora:
$ ssh-keygen -t ecdsa -f emergency
$ ssh-keygen -Us sk-user-ca.pub -I test-key -n [username] -V -5m:+60m emergency
$ chmod 600 emergency-cert.pubE ora di nuovo SSH:
$ ssh -i emergency username@hostSe il tuo file .ssh/config causa problemi durante la connessione, puoi eseguire ssh con l'opzione -F none per ignorarlo. Se devi inviare il certificato a un collega, il modo più semplice e sicuro è . Avrai solo bisogno di due file: in questo caso sono emergency ed emergency-cert.pub.
Ciò che mi piace di questo approccio è il supporto hardware. Puoi riporre le chiavi di sicurezza in una cassaforte e non andranno da nessuna parte.
In base alla pubblicità
Server epici è con potenti processori AMD, frequenza del core della CPU fino a 3.4 GHz. La configurazione massima consente di affrontare praticamente qualsiasi compito: 128 core CPU, 512 GB di RAM, 4000 GB NVMe. Unisciti a noi!
Fonte: habr.com
