Prescribimos un procedemento para o acceso de emerxencia a hosts SSH con chaves de hardware

Prescribimos un procedemento para o acceso de emerxencia a hosts SSH con chaves de hardware

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:

  1. sk-user-ca, un identificador de chave que fai referencia á chave privada almacenada na chave de seguranza,
  2. 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:~$

  1. Agora podes crear certificados para calquera usuario nun host que confíe na túa autoridade de certificación.
  2. 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 é Burato de verme máxico. Para iso só necesitas dous ficheiros: no noso caso, emergency e emergency-cert.pub.

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 - É VPS barato con potentes procesadores de AMD, frecuencia do núcleo da CPU de ata 3.4 GHz. A configuración máxima permítelle resolver case calquera problema: núcleos de CPU 128, 512 GB de RAM, 4000 GB NVMe. Únete a nós!

Prescribimos un procedemento para o acceso de emerxencia a hosts SSH con chaves de hardware

Fonte: www.habr.com

Engadir un comentario