
In questo post svilupperemo una procedura per l'accesso di emergenza agli host SSH, utilizzando chiavi di sicurezza hardware in modalità offline. Questo è solo uno dei metodi e puoi adattarlo alle tue esigenze. Terremo l'autorità di certificazione SSH per i nostri host su una chiave di sicurezza hardware. Questo schema funzionerà praticamente su qualsiasi OpenSSH, incluso SSH con accesso unico.
Perché tutto questo? Beh, è una soluzione per le emergenze. È una backdoor che ti permetterà di accedere al tuo server nel caso in cui, per qualche motivo, non ci sia altro da fare.
Perché usare certificati invece di chiavi pubbliche/private per l'accesso di emergenza?
- 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. Scaduto questo termine, il certificato diventerà inutilizzabile per nuove connessioni. Questo è perfetto per accessi di emergenza.
- Puoi creare un certificato per qualsiasi account sui tuoi host e, se necessario, inviare tali certificati "usa e getta" ai tuoi colleghi.
Cosa vi serve
- Chiavi di sicurezza hardware che supportano chiavi residenti.
Le chiavi residenti sono chiavi crittografiche che sono completamente memorizzate all'interno della chiave di sicurezza. Talvolta sono protette da un codice 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 USB della serie Yubikey 5, ad esempio, supportano le chiavi residenti. È preferibile che siano destinate esclusivamente per l'accesso di emergenza all'host. Per questo post utilizzerò solo una chiave, ma dovresti averne un'altra per il backup. - Un luogo sicuro per conservare queste chiavi.
- OpenSSH versione 8.2 o superiore sul tuo computer locale e sui server a cui desideri accedere in caso di emergenza. Ubuntu 20.04 viene fornito con OpenSSH 8.2.
- (opzionale, ma consigliato) Strumento CLI per la verifica dei certificati.
Preparazione
Per iniziare, è necessario creare un'autorità di certificazione che si troverà 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]Ho inserito come commento (-C) yubikey-9-512-742@smallstep.com, così da non dimenticare a quale chiave di sicurezza si riferisce questa autorità di certificazione.
Oltre ad aggiungere la chiave a Yubikey, verranno generati localmente due file:
- sk-user-ca, che è il descrittore della chiave che si riferisce alla chiave privata memorizzata nella chiave di sicurezza,
- sk-user-ca.pub, che sarà la chiave pubblica per la tua autorità di certificazione.
Ma non preoccuparti, su Yubikey c'è un'altra chiave privata che non può essere estratta. Quindi, qui è tutto sicuro.
Sugli host, a nome dell'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, sull'host, 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 all'host. Ma prima avremo bisogno di un certificato. Crea una coppia di chiavi che sarà associata al certificato:
$ ssh-keygen -t ecdsa -f emergencyCertificati e coppie SSH
Talvolta si è tentati di utilizzare un certificato come sostituto di una coppia chiave pubblica/privata. Ma per l'autenticazione dell'utente non basta un solo certificato. Ogni certificato ha anche una chiave privata associata. Ecco perché dobbiamo generare questa coppia di chiavi "di emergenza" prima di rilasciare un certificato. È importante che il certificato firmato venga mostrato al server, indicando la coppia di chiavi di cui possediamo la chiave privata.Così, lo scambio di chiavi pubbliche è ancora vivo e vegeto. Funziona anche con i certificati. I certificati semplicemente eliminano l'esigenza per il server di memorizzare chiavi pubbliche.
Successivamente, crea il certificato stesso. Ho bisogno dell'autorizzazione 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 l'impronta digitale. Puoi aggiungere nomi utente aggiuntivi separati da virgole, ad esempio, -n ubuntu,carl,ec2-user
Ecco, ora hai un certificato! Ora devi impostare i permessi corretti:
$ chmod 600 emergency-cert.pubDopo di che puoi esaminare 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"
Seriale: 0
Valido: dal 2020-06-24T16:53:03 al 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 è quella che abbiamo creato noi, la chiave emergency, e è associata al centro di certificazione sk-user-ca.
Finalmente siamo pronti per eseguire il comando SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$- Ora puoi creare certificati per qualsiasi utente sull'host che si fida del tuo centro di certificazione.
- Puoi eliminare emergency. Puoi mantenere sk-user-ca, ma non è necessario, poiché è già presente sulla chiave di sicurezza. Potresti anche voler rimuovere 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 di emergenza: piano d'azione
Inserisci la chiave di sicurezza e avvia il comando:
$ ssh-add -KIn questo modo aggiungerai la chiave pubblica del centro di certificazione e l'identificatore della chiave all'agente SSH.
Ora esporta la chiave pubblica per creare il certificato:
$ ssh-add -L | tail -1 > sk-user-ca.pubCrea un certificato con una durata, 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 il parametro -F none per evitarlo. Se devi inviare il certificato a un collega, il modo più semplice e sicuro è . Per questo servono solo due file — nel nostro caso sono emergency e emergency-cert.pub.
Ciò che mi piace di questo approccio è il supporto hardware. Puoi mettere le chiavi di sicurezza in una cassaforte e non andranno da nessuna parte.
In pubblicità
Server epici — rappresenta con potenti processori AMD, frequenza del nucleo CPU fino a 3.4 GHz. La configurazione massima può affrontare praticamente qualsiasi compito — 128 core CPU, 512 GB RAM, 4000 GB NVMe. Unisciti a noi!
Fonte: habr.com
