
Neste post, vamos desenvolver um procedimento para acesso de emergência a hosts SSH, utilizando chaves de segurança de hardware offline. Este é apenas um dos métodos, e você pode adaptá-lo conforme necessário. Vamos armazenar a autoridade certificadora SSH para nossos hosts em uma chave de segurança de hardware. Este esquema funcionará em praticamente qualquer OpenSSH, incluindo SSH com login único.
Por que tudo isso? Bem, é uma opção para situações extremas. É uma porta dos fundos que permitirá que você acesse seu servidor caso, por algum motivo, nada mais funcione.
Por que usar certificados em vez de chaves públicas / privadas para acesso de emergência?
- Ao contrário das chaves públicas, os certificados podem ter um período de validade muito curto. Você pode gerar um certificado válido por 1 minuto ou até mesmo 5 segundos. Após esse prazo, o certificado não será mais válido para novas conexões. Isso é perfeito para acesso de emergência.
- Você pode criar um certificado para qualquer conta em seus hosts e, se necessário, enviar esses certificados 'de uso único' para seus colegas.
O que você vai precisar
- Chaves de segurança de hardware que suportam chaves residentes.
Chaves residentes são chaves criptográficas que são totalmente armazenadas dentro da chave de segurança. Às vezes, elas são protegidas por um PIN alfanumérico. A parte pública da chave residente pode ser exportada da chave de segurança, se necessário, juntamente com o descritor da chave privada. O suporte a chaves residentes é fornecido, por exemplo, por pen drives da série Yubikey 5. É desejável que sejam destinados apenas para acesso de emergência ao host. Para este post, usarei apenas uma chave, mas você deve ter uma adicional para backup. - Um local seguro para armazenar essas chaves.
- OpenSSH versão 8.2 ou superior em seu computador local e nos servidores aos quais você deseja acessar em emergência. O Ubuntu 20.04 vem com OpenSSH 8.2.
- (opcional, mas recomendado) Ferramenta de CLI para verificar certificados.
Preparação
Para começar, você precisa criar uma autoridade certificadora, que será armazenada na chave de segurança de 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) eu indiquei yubikey-9-512-742@smallstep.com para não me esquecer a qual chave de segurança este centro de certificação está relacionado.
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 no dispositivo de segurança,
- sk-user-ca.pub, que será a chave pública para o seu centro de certificação.
Mas não se preocupe, outra chave privada está armazenada no Yubikey que não pode ser extraída. Portanto, está tudo seguro aqui.
Nos hosts sob o nome de usuário root, adicione (caso ainda não tenha adicionado) à configuração do seu SSHD (/etc/ssh/sshd_config) o seguinte:
TrustedUserCAKeys /etc/ssh/ca.pubEm seguida, adicione a chave pública (sk-user-ca.pub) ao /etc/ssh/ca.pub no host
Reinicie o daemon:
# /etc/init.d/ssh restartAgora podemos tentar acessar o host. Mas primeiro, precisamos de um certificado. Crie um par de chaves que estará vinculado ao certificado:
$ ssh-keygen -t ecdsa -f emergencyCertificados e pares de SSH
Às vezes, é tentador usar um certificado como substituto de um par de chave pública / chave privada. Mas para a autenticação do usuário, um único certificado não é suficiente. Cada certificado também possui uma chave privada associada a ele. É por isso que precisamos gerar este par de chaves "emergenciais" antes de emitirmos um certificado para nós mesmos. A parte importante é que o certificado assinado é apresentado ao servidor, indicando o par de chaves para o qual temos a chave privada.Dessa forma, a troca de chaves públicas ainda está viva e saudável. Isso até funciona com certificados. Os certificados simplesmente livram o servidor da necessidade de armazenar chaves públicas.
A seguir, crie o próprio certificado. Preciso da autorização do usuário ubuntu dentro de 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 emergencyVocê será solicitado a assinar o certificado com a impressão digital. Você pode adicionar nomes de usuários adicionais, separados por vírgulas, como -n ubuntu,carl,ec2-user
Isso é tudo, agora você possui um certificado! A próxima etapa é definir as permissões corretas:
$ chmod 600 emergency-cert.pubDepois disso, você pode verificar o conteúdo do seu certificado:
$ step ssh inspect emergency-cert.pubAqui está como o meu se parece:
emergency-cert.pub
Tipo: ecdsa-sha2-nistp256-cert-v01@openssh.com certificado do usuário
Chave pública: ECDSA-CERT SHA256:EJSfzfQv1UK44/LOKhBbuh5oRMqxXGBSr+UAzA7cork
CA de assinatura: SK-ECDSA SHA256:kLJ7xfTTPQN0G/IF2cq5TB3EitaV4k3XczcBZcLPQ0E
ID da chave: "test-key"
Serial: 0
Válido: de 2020-06-24T16:53:03 até 2020-06-24T17:03:03
Principais:
ubuntu
Opções Críticas: (nenhuma)
Extensões:
permit-X11-forwarding
permit-agent-forwarding
permit-port-forwarding
permit-pty
permit-user-rcAqui, a chave pública é a chave de emergência que criamos, e ela está vinculada à CA 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 confia na sua CA.
- Você pode excluir emergency. Você pode manter sk-user-ca, mas não precisa, pois também está na chave de segurança. Você pode também querer remover a chave pública PEM original dos seus hosts (por exemplo, em ~/ .ssh/authorized_keys para o usuário ubuntu), se você a utilizou 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 -KAssim, você adicionará a chave pública da CA e o descritor da chave ao agente SSH.
Agora exporte a chave pública para criar o certificado:
$ ssh-add -L | tail -1 > sk-user-ca.pubCrie um certificado com um tempo de validade, 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.pubE agora novamente SSH:
$ ssh -i emergency username@hostSe seu arquivo .ssh/config causar algum problema ao se conectar, você pode executar ssh com a opção -F none para ignorá-lo. Se precisar enviar o certificado para um colega, a maneira mais simples e segura é . Para isso, você precisará de apenas dois arquivos — neste caso, são emergency e emergency-cert.pub.
O que gosto nesse método é o suporte de hardware. Você pode guardar as chaves de segurança em um cofre, e elas não vão a lugar nenhum.
Em nome da publicidade
Servidores épicos seja com potentes processadores da AMD, frequência do núcleo de CPU até 3,4 GHz. A configuração máxima permite resolver praticamente qualquer tarefa — 128 núcleos de CPU, 512 GB de RAM, 4000 GB de NVMe. Junte-se a nós!
Fonte: habr.com
