Nesta postagem, desenvolveremos um procedimento para acesso de emergĂȘncia a hosts SSH usando chaves de segurança offline. Essa Ă© apenas uma abordagem e vocĂȘ pode adaptĂĄ-la por si mesmo. Armazenaremos a CA SSH para nossos hosts em uma chave de segurança de hardware. Esse esquema funcionarĂĄ em praticamente qualquer OpenSSH, incluindo SSH com logon Ășnico.
Por que tudo isso? Bem, esta Ă© uma opção de Ășltimo recurso. Este Ă© um backdoor que permitirĂĄ acessar seu servidor caso, por algum motivo, nada mais ajude.
Por que usar certificados em vez de chaves pĂșblicas / privadas para acesso de emergĂȘncia?
- , . , 1 5 . . .
- ââ «» .
- , .
â , . - PIN-. , â . , , , USB- Yubikey 5. , . , . - .
- OpenSSH 8.2 , . Ubuntu 20.04 OpenSSH 8.2.
- (opcional, mas desejåvel) ferramenta CLI para verificação de certificados.
Treinamento
Primeiro, vocĂȘ precisa criar uma autoridade de certificação que residirĂĄ na chave de segurança do hardware. Insira a chave e execute:
$ ssh-keygen -t ecdsa-sk -f sk-user-ca -O resident -C [security key ID]
Como comentårio (-C), apontei para yubikey-9-512-742@smallstep.com para não esquecer a qual chave de segurança essa CA pertence.
Além de adicionar a chave ao Yubikey, dois arquivos serão gerados localmente:
- sk-user-ca, um descritor de chave que se refere à chave privada armazenada na chave de segurança,
- sk-user-ca.pub, que serĂĄ a chave pĂșblica da sua CA.
Mas nĂŁo se preocupe, o Yubikey tem outra chave privada que nĂŁo pode ser recuperada. Portanto, tudo Ă© confiĂĄvel aqui.
Nos hosts como raiz, adicione (se ainda não tiver sido adicionado) à sua configuração SSHD (/ etc / ssh / sshd_config) o seguinte:
TrustedUserCAKeys /etc/ssh/ca.pub
Em seguida, no host, adicione a chave pĂșblica (sk-user-ca.pub) em /etc/ssh/ca.pub
Reinicie o daemon:
# /etc/init.d/ssh restart
Agora podemos tentar acessar o host. Mas primeiro precisamos de um certificado. Crie um par de chaves a ser associado ao certificado:
$ ssh-keygen -t ecdsa -f emergency
Certificados e pares SSH
Ăs vezes, Ă© tentador usar um certificado como substituto de um par de chaves pĂșblica / privada. Mas para autenticação do usuĂĄrio, um certificado nĂŁo Ă© suficiente. Cada certificado tambĂ©m possui uma chave privada associada. Ă por isso que precisamos gerar esse par de chaves "de emergĂȘncia" antes de podermos emitir um certificado. O importante Ă© que mostremos o certificado assinado para o servidor, indicando o par de chaves para o qual temos uma chave privada.
Assim, a troca de chaves pĂșblicas ainda estĂĄ viva e bem. Funciona mesmo com certificados. Os certificados simplesmente eliminam a necessidade de o servidor armazenar chaves pĂșblicas.
Em seguida, crie o prĂłprio certificado. Preciso de autorização de usuĂĄrio do ubuntu em um intervalo de 10 minutos. VocĂȘ pode fazer do seu jeito.
$ ssh-keygen -s sk-user-ca -I test-key -n ubuntu -V -5m:+5m emergency
VocĂȘ serĂĄ solicitado a assinar o certificado com sua impressĂŁo digital. VocĂȘ pode adicionar nomes de usuĂĄrio adicionais separados por vĂrgulas, por exemplo -n ubuntu, carl, ec2-user
Ă isso, agora vocĂȘ tem um certificado! Em seguida, vocĂȘ precisa especificar as permissĂ”es corretas:
$ chmod 600 emergency-cert.pub
Depois disso, vocĂȘ pode se familiarizar com o conteĂșdo do seu certificado:
$ step ssh inspect emergency-cert.pub
Ă assim que a minha se parece:
emergency-cert.pub
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com 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
Aqui, a chave pĂșblica Ă© a chave de emergĂȘncia que criamos e a CA estĂĄ associada ao sk-user-ca.
Finalmente, estamos prontos para executar o comando SSH:
$ ssh -i emergency ubuntu@my-hostname
ubuntu@my-hostname:~$
- Agora vocĂȘ pode criar certificados para qualquer usuĂĄrio no host que confie na sua CA.
- VocĂȘ pode remover a emergĂȘncia. VocĂȘ pode manter o sk-user-ca, mas nĂŁo precisa disso, pois tambĂ©m estĂĄ na chave de segurança. VocĂȘ tambĂ©m pode remover a chave pĂșblica PEM original de seus hosts (por exemplo, em ~ / .ssh / allowed_keys para o usuĂĄrio do ubuntu) se a tiver usado para acesso de emergĂȘncia.
Acesso de EmergĂȘncia: Plano de Ação
Insira a chave de segurança e execute o comando:
$ ssh-add -K
Isso adicionarĂĄ a chave pĂșblica e o descritor de chave da CA ao agente SSH.
Agora exporte a chave pĂșblica para fazer o certificado:
$ ssh-add -L | tail -1 > sk-user-ca.pub
Crie um certificado com uma data de validade de, por exemplo, nĂŁo mais que uma 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 novamente:
$ ssh -i emergency username@host
Se o seu arquivo .ssh / config estiver causando problemas de conexĂŁo, vocĂȘ poderĂĄ executar o ssh com a opção -F none. Se vocĂȘ precisar enviar um certificado para um colega, a opção mais fĂĄcil e segura Ă© o Magic Wormhole . Isso requer apenas dois arquivos - no nosso caso, sĂŁo emergency e emergency-cert.pub.
O que eu amo nessa abordagem Ă© o suporte de hardware. VocĂȘ pode colocar as chaves de segurança no cofre e elas nĂŁo irĂŁo a lugar algum.
Publicidade
Servidores Ă©picos sĂŁo VPS baratos com processadores poderosos da AMD, freqĂŒĂȘncia de nĂșcleo da CPU de atĂ© 3,4 GHz. A configuração mĂĄxima permite resolver praticamente qualquer problema - 128 nĂșcleos de CPU, 512 GB RAM, 4000 GB NVMe. Junte-se a nĂłs!