Conexão Segura Linux

LinuxBeginner
Pratique Agora

Introdução

O Secure Shell (SSH) é um protocolo de rede criptográfico usado para acessar servidores remotos de forma segura através de uma rede não segura. Como profissional na área de TI, entender como estabelecer conexões seguras com servidores Linux é uma habilidade essencial.

Neste laboratório, você aprenderá como gerar pares de chaves SSH, gerenciar suas chaves e configurar o SSH para autenticação segura. Este conhecimento é fundamental para administradores de sistemas, desenvolvedores e profissionais de segurança cibernética que precisam acessar e gerenciar sistemas remotos de forma segura.

Ao concluir este laboratório, você obterá experiência prática com SSH, que é o método padrão da indústria para administração remota segura de servidores Linux e transferências seguras de arquivos.

Entendendo os Fundamentos do SSH

SSH (Secure Shell) é um protocolo que fornece uma maneira segura de acessar computadores remotos. Ao contrário de protocolos mais antigos como o Telnet, o SSH criptografa todas as comunicações entre o cliente e o servidor, protegendo seus dados contra interceptação.

O SSH oferece várias vantagens:

  • Comunicações criptografadas
  • Métodos de autenticação fortes
  • Verificação da integridade dos dados
  • Transferências seguras de arquivos

Vamos começar verificando se o SSH está instalado em seu sistema. Abra seu terminal e execute:

ssh -V

Você deve ver uma saída semelhante a esta, mostrando a versão do SSH instalada:

OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022

Agora, vamos navegar para o diretório do nosso projeto onde trabalharemos:

cd ~/project

Este comando altera seu diretório atual para /home/labex/project, que é onde realizaremos todas as nossas operações neste laboratório.

Gerando Pares de Chaves SSH

O SSH suporta vários métodos de autenticação, mas a autenticação baseada em chave é a mais segura e conveniente. Nesta etapa, você gerará um par de chaves SSH.

Um par de chaves SSH consiste em:

  • Uma chave privada (private key): Esta é como sua senha secreta e nunca deve ser compartilhada.
  • Uma chave pública (public key): Esta pode ser compartilhada com segurança com servidores remotos aos quais você deseja se conectar.

Para gerar um novo par de chaves SSH, use o comando ssh-keygen:

ssh-keygen -t rsa -b 4096

Este comando especifica:

  • -t rsa: Use o algoritmo RSA para geração de chaves
  • -b 4096: Crie uma chave com 4096 bits, o que fornece segurança forte

Ao executar este comando, você será solicitado a:

  1. Inserir um caminho de arquivo para salvar a chave (pressione Enter para aceitar o caminho padrão ~/.ssh/id_rsa)
  2. Inserir uma senha (você pode deixar isso vazio para este laboratório pressionando Enter duas vezes)

Aqui está um exemplo do que você deve ver:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz1234567890 labex@hostname
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|       . .       |
|      . + .      |
|     . = + .     |
|    . = S = .    |
|   . . = = + .   |
|    . . + = + .  |
|     . . + + .   |
|      .. . .     |
+----[SHA256]-----+

Agora, vamos examinar as chaves que foram geradas. Para visualizar sua chave pública, use:

cat ~/.ssh/id_rsa.pub

Isso exibirá sua chave pública, que se parece com:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

Lembre-se, a chave pública pode ser compartilhada, mas a chave privada (~/.ssh/id_rsa) deve ser mantida segura e nunca deve ser compartilhada com ninguém.

Entendendo as Permissões das Chaves SSH

O SSH é muito específico sobre as permissões de arquivos por razões de segurança. Nesta etapa, você aprenderá sobre as permissões corretas para as chaves SSH e como configurá-las.

Vamos verificar as permissões atuais de suas chaves SSH:

ls -la ~/.ssh/

Você deve ver uma saída semelhante a esta:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

As permissões corretas são:

  • Chave privada (id_rsa): 600 (legível e gravável apenas por você)
  • Chave pública (id_rsa.pub): 644 (legível por todos, gravável apenas por você)
  • Diretório .ssh: 700 (acessível apenas por você)

Se suas permissões forem diferentes, você pode configurá-las corretamente com:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Vamos verificar se as permissões foram configuradas corretamente:

ls -la ~/.ssh/

A saída agora deve mostrar as permissões corretas:

total 16
drwx------ 2 labex labex 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw------- 1 labex labex 3381 Jan 1 12:00 id_rsa
-rw-r--r-- 1 labex labex  741 Jan 1 12:00 id_rsa.pub

Essas permissões são críticas para a segurança - o SSH se recusará a funcionar se as permissões forem muito abertas, pois isso colocaria em risco a exposição de sua chave privada.

Configurando a Autenticação SSH

Nesta etapa, você aprenderá como configurar a autenticação baseada em chave SSH. Isso permite que você faça login em servidores remotos sem digitar uma senha toda vez.

Para que a autenticação por chave SSH funcione, você precisa copiar sua chave pública para o arquivo ~/.ssh/authorized_keys do servidor. Em um cenário real, você usaria o comando ssh-copy-id para fazer isso:

## Exemplo para referência (Não execute isso)
## ssh-copy-id username@remote_host

Como não temos um servidor remoto real para este laboratório, simularemos este processo criando um arquivo authorized_keys local.

Primeiro, vamos criar o diretório .ssh se ele ainda não existir:

mkdir -p ~/.ssh

O comando mkdir -p cria o diretório se ele não existir e não faz nada se ele já existir.

Agora, vamos criar ou anexar ao arquivo authorized_keys:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Este comando anexa sua chave pública ao arquivo authorized_keys. Em um ambiente real, este arquivo estaria no servidor remoto.

Vamos verificar o conteúdo do arquivo authorized_keys:

cat ~/.ssh/authorized_keys

Você deve ver sua chave pública na saída, que deve ser semelhante a:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQ... (long string of characters) ...labex@hostname

Finalmente, vamos garantir que o arquivo authorized_keys tenha as permissões corretas:

chmod 600 ~/.ssh/authorized_keys

Isso define as permissões para leitura e gravação apenas para o proprietário, o que é um requisito de segurança para o arquivo authorized_keys.

Entendendo o Arquivo de Configuração SSH

O SSH permite que você personalize seu comportamento através do arquivo de configuração SSH. Isso é especialmente útil quando você se conecta a vários servidores regularmente.

Vamos criar um arquivo de configuração SSH para ver como funciona:

nano ~/.ssh/config

Isso abre o editor de texto nano. Adicione o seguinte conteúdo ao arquivo:

## Configurações padrão para todos os hosts
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

## Exemplo de configuração do servidor
Host example
    HostName example.com
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa

Nesta configuração:

  • ServerAliveInterval 60 envia um sinal de keep-alive a cada 60 segundos
  • ServerAliveCountMax 3 desconecta se o servidor não responder a 3 sinais consecutivos
  • A seção Host example cria um alias para que você possa se conectar com ssh example em vez de ssh username@example.com -p 22

Para salvar o arquivo no nano, pressione Ctrl+O, depois Enter para confirmar e Ctrl+X para sair.

Agora, vamos definir as permissões corretas para o arquivo de configuração:

chmod 600 ~/.ssh/config

Isso garante que apenas você possa ler e gravar neste arquivo, o que é importante para a segurança.

Em um cenário real, você agora seria capaz de se conectar ao servidor simplesmente digitando:

## Exemplo para referência (Não execute isso)
## ssh example

Em vez de:

## Exemplo para referência (Não execute isso)
## ssh username@example.com -p 22

O arquivo de configuração SSH é uma ferramenta poderosa que pode economizar tempo e facilitar o gerenciamento de várias conexões SSH.

Resumo

Neste laboratório, você aprendeu os fundamentos do SSH (Secure Shell) para se conectar com segurança a servidores Linux. Aqui está um resumo do que você realizou:

  1. Você adquiriu uma compreensão do SSH e sua importância para conexões remotas seguras
  2. Você gerou um par de chaves SSH, consistindo em uma chave privada e uma chave pública
  3. Você aprendeu sobre a importância das permissões de arquivo adequadas para a segurança do SSH
  4. Você configurou a autenticação baseada em chave SSH configurando o arquivo authorized_keys
  5. Você criou um arquivo de configuração SSH para personalizar e simplificar as conexões SSH

Essas habilidades são essenciais para qualquer pessoa que trabalhe com sistemas Linux, especialmente em computação em nuvem, administração de sistemas, DevOps e funções de segurança cibernética. O SSH é o método padrão para acessar com segurança servidores Linux remotos e é usado diariamente por profissionais de TI em todo o mundo.

Com o conhecimento adquirido neste laboratório, você agora está equipado para estabelecer conexões seguras a servidores Linux, o que é uma habilidade fundamental para aprendizado posterior em administração de sistemas Linux e computação em nuvem.