Nesta publicación, desenvolveremos un procedemento para o acceso de emerxencia aos hosts SSH usando chaves de seguranza de hardware fóra de liña. Este é só un enfoque, e podes adaptalo ás túas necesidades. Almacenaremos a autoridade de certificación SSH para os nosos anfitrións na clave de seguranza do hardware. Este esquema funcionará en case calquera OpenSSH, incluído SSH con inicio de sesión único.
Para que serve todo isto? Ben, esta é unha opción de último recurso. Esta é unha porta traseira que che permitirá acceder ao teu servidor cando por algún motivo nada máis funciona.
Por que usar certificados en lugar de chaves públicas/privadas para o acceso de emerxencia?
- A diferenza das claves públicas, os certificados poden ter unha vida útil moi curta. Pode xerar un certificado que sexa válido durante 1 minuto ou incluso 5 segundos. Transcorrido este período, o certificado quedará inutilizable para novas conexións. Isto é ideal para o acceso de emerxencia.
- Podes crear un certificado para calquera conta dos teus anfitrións e, se é necesario, enviar estes certificados "únicos" aos teus compañeiros.
O que necesitas
- Chaves de seguranza de hardware que admiten chaves residentes.
As claves residentes son claves criptográficas que se almacenan integramente na chave de seguranza. Ás veces están protexidos por un PIN alfanumérico. A parte pública da chave residente pódese exportar desde a chave de seguranza, opcionalmente xunto co identificador da chave privada. Por exemplo, as chaves USB da serie Yubikey 5 admiten chaves residentes. É recomendable que estean destinadas só ao acceso de emerxencia ao host. Para esta publicación só usarei unha clave, pero deberías ter outra adicional para a copia de seguridade. - Un lugar seguro para gardar esas chaves.
- OpenSSH versión 8.2 ou superior no teu ordenador local e nos servidores aos que queres ter acceso de emerxencia. Ubuntu 20.04 envíase con OpenSSH 8.2.
- (opcional, pero recomendado) Unha ferramenta CLI para comprobar certificados.
Adestramento
En primeiro lugar, cómpre crear unha autoridade de certificación que estará situada na chave de seguranza do hardware. Insira a chave e executa:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Como comentario (-C) indiquei [protexido por correo electrónico]para que non esquezas a chave de seguranza á que pertence esta autoridade de certificación.
Ademais de engadir a clave ao Yubikey, xeraranse dous ficheiros localmente:
- sk-user-ca, un identificador de chave que fai referencia á chave privada almacenada na chave de seguranza,
- sk-user-ca.pub, que será a clave pública da súa autoridade de certificación.
Pero non te preocupes, o Yubikey almacena outra clave privada que non se pode recuperar. Polo tanto, aquí todo é fiable.
Nos hosts, como root, engade (se aínda non o fixeches) o seguinte á túa configuración SSHD (/etc/ssh/sshd_config):
TrustedUserCAKeys /etc/ssh/ca.pub
A continuación, no servidor, engade a chave pública (sk-user-ca.pub) a /etc/ssh/ca.pub
Reinicia o daemon:
# /etc/init.d/ssh restart
Agora podemos tentar acceder ao host. Pero primeiro necesitamos un certificado. Cree un par de claves que se asociará co certificado:
$ ssh-keygen -t ecdsa -f emergency
Certificados e pares SSH
Ás veces é tentador usar un certificado como substituto dun par de chaves pública/privada. Pero un certificado por si só non é suficiente para autenticar un usuario. Cada certificado tamén ten unha clave privada asociada. É por iso que necesitamos xerar este par de claves de "emerxencia" antes de emitirnos un certificado. O importante é que amosemos o certificado asinado ao servidor, indicando o par de claves para o que temos unha clave privada.Polo tanto, o intercambio de chaves públicas aínda está vivo. Isto funciona mesmo con certificados. Os certificados simplemente eliminan a necesidade de que o servidor almacene chaves públicas.
A continuación, cree o propio certificado. Necesito autorización de usuario de ubuntu en intervalos de 10 minutos. Podes facelo á túa maneira.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
Pediráselle que asine o certificado usando a súa impresión dixital. Podes engadir nomes de usuario adicionais separados por comas, por exemplo -n ubuntu,carl,ec2-user
Xa está, agora tes un certificado! A continuación, debes especificar os permisos correctos:
$ chmod 600 emergency-cert.pub
Despois diso, pode ver o contido do seu certificado:
$ step ssh inspect emergency-cert.pub
Este é o meu aspecto:
emergency-cert.pub
Type: [email protected] user certificate
Public key: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
Signing CA: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
Key ID: "test-key"
Serial: 0
Valid: from 2020-06-24T16:53:03 to 2020-06-24T17:03:03
Principals:
ubuntu
Critical Options: (none)
Extensions:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rc
Aquí a clave pública é a clave de emerxencia que creamos e sk-user-ca está asociado coa autoridade de certificación.
Finalmente estamos preparados para executar o comando SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Agora podes crear certificados para calquera usuario nun host que confíe na túa autoridade de certificación.
- Podes eliminar a emerxencia. Podes gardar sk-user-ca, pero non é necesario, xa que tamén está na chave de seguranza. Tamén pode querer eliminar a clave pública PEM orixinal dos seus servidores (por exemplo, en ~/.ssh/authorized_keys para o usuario de ubuntu) se a utilizaches para o acceso de emerxencia.
Acceso de emerxencia: Plan de acción
Pega a chave de seguranza e executa o comando:
$ ssh-add -K
Isto engadirá a clave pública e o descritor de chave da autoridade de certificación ao axente SSH.
Agora exporta a clave pública para facer un certificado:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Cree un certificado cunha data de caducidade, por exemplo, non superior a unha hora:
$ 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.pub
E agora SSH de novo:
$ ssh -i emergency username@host
Se o teu ficheiro .ssh/config está a causar algúns problemas ao conectarse, podes executar ssh coa opción -F none para evitalo. Se precisas enviar un certificado a un compañeiro, a opción máis sinxela e segura é
O que me gusta deste enfoque é o soporte de hardware. Podes poñer as túas chaves de seguranza nunha caixa forte e non irán a ningún lado.
Sobre os dereitos da publicidade
Servidores épicos - É
Fonte: www.habr.com