Usando chaves de autenticação

Por mais seguras que sejam suas senhas, sempre existe uma pequena possibilidade de que um atacante descubra alguma delas, observando enquanto você digita no teclado, ou que simplesmente consiga adivinhá-la a partir de informações pessoais ou de senhas
antigas. Se você tem o hábito de usar as mesmas senhas em vários locais, a possibilidade cresce, pois muitos serviços armazenam ou transmitem senhas de formas não seguras. Com isso, as senhas acabam sendo o ponto fraco da segurança.

Como de praxe, o SSH oferece uma resposta para o problema. Em vez de depender unicamente da senha como forma de autenticação, você pode utilizar um par de chaves de autenticação, onde a chave pública é instalada nos
servidores que serão acessados e a chave privada (que nunca sai da sua máquina) é protegida por uma passphrase, sem a qual a chave se torna inútil.

Nesse caso, temos uma segurança de dois níveis, em que é preciso saber a passphrase e, além dela, ter a chave privada, um arquivo salvo no HD ou em um pendrive, algo similar ao sistema bancário, onde você precisa ter o
cartão e saber a senha.

Para gerar o par de chaves, use (no cliente) o comando:

$ ssh-keygen -t rsa

Ele deve ser executado usando seu login de usuário (o mesmo que você usa para acessar os servidores remotos), não como root:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/morimoto/.ssh/id_rsa):
Created directory ‘/home/morimoto/.ssh’.
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********
Your identification has been saved in /home/morimoto/.ssh/id_rsa.
Your public key has been saved in /home/morimoto/.ssh/id_rsa.pub.

The key fingerprint is:
ff:28:26:f6:87:67:9f:4c:9a:c8:0a:3b:21:81:88:b4 morimoto@athenas

A passphrase pode ser desde uma senha “normal”, com 8 ou 12 caracteres, até uma frase complexa, sem limite de tamanho; o importante é que não seja algo fácil de adivinhar. A passphrase é, na verdade, um componente da chave
de encriptação; sem ela é impossível usar a chave.

O comando gerará os arquivos “.ssh/id_rsa” e “.ssh/id_rsa.pub” dentro do seu diretório home, que são, respectivamente, sua chave privada e sua chave pública. O “.ssh/id_rsa” é um arquivo secreto, que deve usar
obrigatoriamente o modo de acesso “600” (que você define usando o chmod), para evitar que outros usuários da máquina possam lê-lo. Muitos servidores recusam a conexão caso os arquivos estejam com as permissões abertas.

Depois de gerar seu par de chaves, falta o comando final, que instala a chave pública no servidor, permitindo que ela seja usada para autenticação:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub login@servidor

Como o nome sugere, o comando “ssh-copy-id” copia sua chave pública, instalando-a no servidor. Ao usá-lo, substitua o “login” pelo seu login de usuário e o “servidor” pelo endereço IP ou o domínio do servidor.

Ao ser executado, ele abrirá uma conexão via SFTP (ainda utilizando seu login e senha de acesso), que é usada para instalar a chave pública (o arquivo “.ssh/id_rsa.pub”, dentro do seu home) no diretório correspondente do
servidor. Naturalmente, para que a transferência funcione, é necessário que o SFTP esteja ativo na configuração do servidor.

Caso você utilize o mesmo login de usuário nas duas máquinas (usa o usuário “joao” em ambas, por exemplo), pode omitir o login no comando, digitando apenas “ssh-copy-id servidor”, como em:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.0.1

A partir daí, ao invés de pedir sua senha, o servidor envia um “desafio” encriptado usando a chave pública. Para respondê-lo, o cliente SSH na sua máquina precisa usar a chave privada, que por sua vez precisa ser destravada
usando a passphrase. Mesmo que alguém consiga roubar sua chave privada, não conseguirá conectar sem saber a passphrase e vice-versa.

Em resumo, o que o ssh-copy-id faz nada mais é do que copiar o conteúdo do arquivo “.ssh/id_rsa.pub“, dentro do seu diretório home, para o arquivo “.ssh/authorized_keys” dentro do diretório
home do servidor remoto, uma operação que também pode ser realizada manualmente em caso de problemas.

O arquivo “.ssh/id_rsa.pub” é composto por uma única (e longa) linha, que contém sua chave pública de encriptação. Ela segue este padrão:

ssh-rsa AAAA(muitos caracteres)6lYzxBpu6M3Moe4HXaTs= login@nomedamaquina”

Você pode instalar a chave manualmente simplesmente logando-se na máquina remota via SSH e copiando a linha para dentro do arquivo “.ssh/authorized_keys”, o que pode ser feito copiando e colando o texto através de qualquer
editor que suporte esta função, como o joe ou o vi. No final, o arquivo “.ssh/authorized_keys” da máquina remota (dentro do home) terá o mesmo conteúdo do arquivo “.ssh/id_rsa.pub” da sua máquina, o que orienta o servidor remoto a passar a checar sua
chave privada e a passphrase, ao invés de pedir senha.

Concluindo, depois de gerar a chave e conseguir se conectar através dela, você pode desativar a possibilidade de fazer logins normais, usando senha. Nesse caso, apenas você, que possui a chave gerada, conseguirá se conectar
ao servidor.

Outras pessoas, mesmo que descubram a senha de alguma das contas, não terão como se conectar e nem como instalar uma nova chave para fazê-lo, a menos que tenham acesso físico ao servidor, a fim de copiar a chave manualmente.
Isso significa que, mesmo alguém com a senha de root do seu servidor em mãos não conseguirá fazer nada remotamente (o sonho de todo administrador ;). Isso pode ser usado para incrementar a segurança.

Para isso, mude as opções “PasswordAuthentication” e “UsePAM” para “no” no arquivo “/etc/ssh/sshd_config” do servidor:

PasswordAuthentication no
UsePAM no

A opção “PasswordAutentication no” permite desativar o uso das senhas, como esperado, enquanto a “UsePAM no” reforça a configuração, desativando qualquer outra forma de autenticação com exceção das chaves.

Para que as alterações entrem em vigor, reinicie o servidor SSH:

# /etc/init.d/ssh restart

ou:

# service sshd restart

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X