Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


SSH Criptografia, Notas de estudo de Cultura

SSH Criptografia

Tipologia: Notas de estudo

2012

Compartilhado em 06/06/2012

carlos-rosa-17
carlos-rosa-17 🇧🇷

5

(2)

16 documentos

1 / 10

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
SSH
Agora que já apresentei os comandos ssh , scp e sftp , vou deixar um pouco mais de
tempo para você praticar. Mas enquanto isso, que tal aprender um pouco da teoria por trás do
SSH e aproveitar para se livrar da senha a cada login?
Vamos lá?
Criptografia básica: fins
Como nos informa o verbete sobre criptografia na Wikipédia,
Criptografia (Do Grego kryptos, "escondido", e graphein, "escrita") é o
estudo dos princípios e técnicas pelas quais a informação pode ser
transformada da sua forma original para outra ilegível, de forma que possa
ser conhecida apenas por seu destinatário (detentor da "chave secreta"), o
que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o
receptor da mensagem pode ler a informação com facilidade.
O objetivo da criptografia é justamente aquele mostrado nas figuras abaixo, publicadas
no primeiro post desta série:
Sem criptografia, qualquer pessoa consegue capturar e entender os dados que trafegam
entre o seu computador e algum outro na Internet:
Com a criptografia, os dados saem do seu computador transformados em algo incompreensível
para qualquer pessoa diferente do destinatário. Então, embora ainda possa ser possível
interceptar os dados que trafegam, será muito mais difícil entender o conteúdo:
pf3
pf4
pf5
pf8
pf9
pfa

Pré-visualização parcial do texto

Baixe SSH Criptografia e outras Notas de estudo em PDF para Cultura, somente na Docsity!

SSH

Agora que já apresentei os comandos ssh , scp e sftp , vou deixar um pouco mais de

tempo para você praticar. Mas enquanto isso, que tal aprender um pouco da teoria por trás do SSH e aproveitar para se livrar da senha a cada login?

Vamos lá?

Criptografia básica: fins

Como nos informa o verbete sobre criptografia na Wikipédia, Criptografia (Do Grego kryptos, "escondido", e graphein, "escrita") é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da "chave secreta"), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade.

O objetivo da criptografia é justamente aquele mostrado nas figuras abaixo, publicadas no primeiro post desta série:

Sem criptografia, qualquer pessoa consegue capturar e entender os dados que trafegam

entre o seu computador e algum outro na Internet:

Com a criptografia, os dados saem do seu computador transformados em algo incompreensível para qualquer pessoa diferente do destinatário. Então, embora ainda possa ser possível

interceptar os dados que trafegam, será muito mais difícil entender o conteúdo:

Criptografia básica: meios

Para os apressados: A criptografia usada no SSH requer 2 chaves, sendo uma

(chamada pública ) usada pelo remetente para criptografar os dados antes de enviá-los e a outra (chamada privada ) usada para recuperar a mensagem original a partir da aparente "bagunça" recebida.

Para os pacientes: Uma forma extremamente simples de criptografia é substituir cada letra

de uma palavra pela sua sucessora no alfabeto. Desta forma, eu poderia transmitir a palavra "algoritmo" da seguinte forma: "bmhpsjunp". Para entender a mensagem, o destinatário precisaria, evidentemente, conhecer o método usado e saber usá-lo. Assim, ele conseguiria reverter as letras uma posição e restaurar o conteúdo original da mensagem. Claro que este exemplo mostrou apenas um método trivial e extremamente fácil de ser quebrado. Um bom método (ou algoritmo , como é o nome mais usado) criptográfico utiliza múltiplas rodadas de substituições e transformações dos dados, todas com base em um único número bem comprido, chamado de chave criptográfica ou apenas chave. Sem possuir o número, um bisbilhoteiro poderia capturar uma mensagem criptografada e tentar todos os números que conhece, até encontrar aquele que a decifra. É por isso que as chaves precisam ser números muito compridos, frequentemente na casa dos 2048 bits - ou seja,

variando entre 0 e 2^2048 (dois elevado a 2048), que é esta monstruosidade de 617

dígitos: 323170060713110073007148766886699519604441026697154840321303 454275246551388678908931972014115229134636887179609218980194 941195591504909210950881523864482831206308773673009960917501 977503896521067960576383840675682767922186426197561618380943 384761704705816458520363050428875758915410658086075523991239 303855219143333896683424206849747865645694948561760353263220 580778056593310261927084603141502585928641771167259436037184 618573575983511523016459044036976132332872312271256847108202 097251571017269313234696785425806566979350459972683529986382 155251663894373355436021354332296046453184786049521481935558

Com isso, casa envia a trab a chave pública de casa , que geralmente fica guardada

em /etc/ssh/ssh_host_key.pub e é criada durante a instalação do pacote openssh-server.

trab recebe a chave pública e pede a senha do usuário ftal : ftal@trab's password:

Fulano informa a senha de ftal em trab , trab confere-a e, caso esteja correta, permite

o login: ftal@trab [~]$ _ Viu? O prompt do Bash é diferente nas duas máquinas, o que é altamente recomendável para evitar que você execute comandos na máquina errada.

Login sem senha e chaves do usuário

Agora que você já domina o SSH e entra remotamente nas suas várias máquinas todos os dias, talvez a tarefa de informar a senha a cada novo acesso esteja ficando um pouco incômoda. Vejamos como sanar isso.

Mas primeiro, um pouco de...

História O fabuloso OpenSSH é a implementação do protocolo SSH mais completa que conheço. Ele foi criado pelos desenvolvedores do sistema operacional OpenBSD, um sistema livre lançado sob a licença BSD.

O OpenSSH é incluído em inúmeros sistemas e produtos de vários fabricantes, e com razão:

ele é o máximo! :)

Os recursos de geração de chaves e login sem senha que vou descrever a seguir são criações do OpenSSH. Então, mais do que o protocolo SSH, se você deseja agradecer a alguém pelos recursos que já apresentei e continuarei apresentando nesta série de posts, esse alguém é a comunidade de desenvolvedores do OpenSSH.

Gerar chaves

O OpenSSH é capaz de gerar chaves de dois tipos: DSA e RSA.

DSA (Digital Signature Algorithm) é um algoritmo de criptografia padronizado pelo governo

federal dos EUA, mas o OpenSSH só gera chaves DSA com no máximo 1024 bits é o que já vimos que é um problema potencial.

RSA (Rivest, Shamir e Adleman) é um algoritmo muito usado na criptografia assimétrica, e no

OpenSSH pode gerar chaves de 4096 bits (inquebráveis na atualidade) ou até mais.

Por padrão, o OpenSSH gera chaves RSA de 2048 bits.

Vamos começar: gere um par de chaves para seu usuário fulano no

computador casa com o comando ssh-keygen :

[fulano@casa ~]$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/fulano/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/fulano/.ssh/id_rsa. Your public key has been saved in /home/fulano/.ssh/id_rsa.pub. The key fingerprint is:

fe:a2:e1:49:cc:a3:d3:41:35:d5:a9:a1:34:c2:07:0f fulano@casa The key's randomart image is: +--[ RSA 2048]----+ |.... | |. o.. o | |. o o o. | |.. o o. | |.. oSo | |. ..E | |. o | | .o+o. | | .BXo. | +-----------------+ [fulano@casa ~]$ _

A saída do comando ssh-keygen é bastante informativa. Ela diz onde salvou a chave

primária ( /home/fulano/.ssh/id_rsa , no caso), onde salvou a chave pública

( /home/fulano/.ssh/id_rsa.pub ), informa a assinatura ( fingerprint ) da chave e ainda

fornece uma espécie de retrato artístico ( randomart ) dessa mesma chave. O objetivo desse retrato artístico é que o usuário sempre olhe para o retrato ao se conectar a um servidor SSH. Se a chave criptográfica do servidor for alterada, sua arte mudará significativamente. Assim, se você entra todos os dias no mesmo servidor, você acaba se acostumando a visualizar um retrato específico - se o retrato mudar algum dia, você vai perceber rapidamente que a chave foi alterada, o que geralmente indica que o servidor foi invadido.

Aparência de uma chave

Fique à vontade para ler suas próprias chaves. Elas estão onde o ssh-keygen disse que as

colocou (por padrão, ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub.

Um exemplo de chave RSA de 2048 bits: [fulano@casa ~]$ cat ~/.ssh/id_rsa

-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAx0ICaSI4ddHt6R2VMn2ton3DLJKmSKVk5F8ewRs6f0tyJqH Srr7wMbT5XtQgwDFFNRY4JzXzdcReeaSiYdzoG5sPtgeUiA8T55vuLetvC/EfF/T U2v/mnVy/JrOwWBPCoYbPpanqrGb7HtqKoHCi0ij69ovRb0Oq20eVR5ne/ATrQUE utklByq570PSh8rIkRWB/42PTbv4LTItsLdLkH7v9ehmXS+iSIlV/VVARyvwUCO ZaGZhi0Zq7yXSJbu6wkuCKKdh+ppsb+zSzHABXYtrvSAMXZKVfkvTamsqleXeQoN WrNDTYcQixEKxO4/jyoiY7WWZSP0fgZX0ulbOwIBIwKCAQAti25D6pCP9Xg1SJch e8/qoGcgIYUX60pC0+nFvRSvYbOxDxRo2kgsEDBu951fxalj2MPbkZBpkD6CQ1Sx uI91II3FOLZ5K/CHOigqOJy9TL8yXwu7S+Km9kYrHBIAUIcYWSrMejTz0NMuvR+U r/Hz81iq8ArOHJWjhqfY8QG17VQALr/3pmwWySRgUa/ZTAh4IzWc0riV7Pzf10C 0XYiraIwWp3ZILQpSU7ukwTcVNCPggbSfJQTxKKzorhgxlkbNqYYJ5ohMwIbBbEn S9hVgjzuckK/jFlh9Im5wsk8855zg+DSOqnIpJCk5AmWl9G6VFjQ/zainRcUiIDw uMgLAoGBAOxVyWh8fO2Q4ioStIDLkXFGYw+zF5p8jAYQt8eLjTgs+KyKhheJ/Mo Di4TqEpYjKF/AN58HqnFxVDc/FcN1yv5cq/HpYg/UpWbY7zcVPCqgmNoBdxWNZQa kgD3hQI0vAs/gYGW0jicaz1foBKqV0pST/CxtXRXWy2xsyu8WwCzAoGBANfWbxRi 5B6SmJC3KfBljLI9GGe+XA1BQx/JLKr8la6Lzp3X1dw9Q8PY2m6V6cCqrD5dSgAQ oefp64D82FmTW/0ah2eXT9L3WKrgIw9i8Pzk2f+zur/VOq8u2VPJcHoK8bcAJ5Qs

ftal@trab:~/chave-publica-fulano-casa ftal@trab's password: id_rsa.pub 100% 12KB 12.2KB/s 00: [fulano@casa ~]$ _

Segundo passo: entrar no servidor e copiar o conteúdo do arquivo de chave pública recebido

do cliente para dentro do arquivo que armazena as chaves públicas do usuário ftal@trab :

[fulano@casa ~]$ ssh ftal@trab ftal@trab's password: ftal@trab [~] $ cat chave-publica-fulano-casa >>
~/.ssh/authorized_keys ftal@trab [~] $ _

Terceiro passo: verificar se o servidor OpenSSH está configurado para aceitar login com autenticação por chave pública: ftal@trab [~] $ sudo grep 'PubkeyAuthentication'
/etc/ssh/sshd_config

PubkeyAuthentication yes

Se a saída do comando mostrar um no no lugar do yes , abra o arquivo e altere para yes.

Já no caso de a saída não incluir uma linha como essa, acrescente a linha ao arquivo: ftal@trab [~] $ sudo su Password:

root@trab [~] $ echo 'PubkeyAuthentication yes' >>
/etc/sshd_config

Quarto passo: tentar a conexão sem senha: root@trab [~] $ exit ftal@trab [~] $ exit

[fulano@casa ~]$ ssh ftal@trab ftal@trab [~] $ _

Parabéns! Você conseguiu!

E olha que usamos a técnica mais difícil. :)

Login sem senha, técnica fácil

Apresentei primeiro a técnica difícil para que você aprecie mais o trabalho do pessoal do OpenSSH. ;)

Eles criaram há algumas versões o comando ssh-copy-id para fazer justamente tudo isso:

copiar a chave pública do seu usuário para o arquivo de chaves autorizadas no servidor. Seu

uso é simples. Como já copiamos a chave de casa para trab , vamos agora fazer o

procedimento contrário (para permitir o login sem senha de trab para casa :

[fulano@casa ~]$ ssh ftal@trab

ftal@trab [~] $ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ftal/.ssh/id_rsa): Enter passphrase (empty for no passphrase):

Enter same passphrase again: Your identification has been saved in /home/ftal/.ssh/id_rsa. Your public key has been saved in /home/ftal/.ssh/id_rsa.pub. The key fingerprint is: 21:bc:50:c6:1e:b1:7a:db:e8:d8:d8:d6:b5:57:4c:dd ftal@trab The key's randomart image is: +--[ RSA 2048]----+ | .+. | | +o. | | ..+.. ..| | o.o.. E| |. o S o | |. +. o | | o..... | | *.... | | o.+. | +-----------------+

ftal@trab [~] $ ssh-copy-id -i .ssh/id_rsa.pub fulano@casa

Now try logging into the machine, with "ssh 'fulano@casa'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

ftal@trab [~] $ _ Entre os dois métodos, prefira sempre o fácil, pois ele faz muito mais do que apenas copiar a chave pública; ele:

 verifica as permissões do diretório .ssh do servidor para garantir sua segurança

 confere se o arquivo de chaves autorizadas é mesmo o padrão

( ~/.ssh/authorized_keys )

 garante que a chave copiada seja a pública, não a privada. Se você informar a chave errada

na opção -i , ele dá um alerta. No método difícil, você pode acabar se enganando e expondo sua chave privada - isso obrigaria você a gerar um novo par de chaves, já que a privacidade da sua chave privada foi violada.

Questões de segurança do login por chave A maior praticidade do login por chave (e sem senha) levanta alguns questionamentos de segurança quanto à autenticação. A boa segurança depende de vários aspectos: geralmente "algo que você tem", "algo que você sabe" e "algo que você é".  Algo que você tem: um pen drive, um token, um smart card.  Algo que você sabe: sua senha.  Algo que você é: sua impressão digital, ocular, vocal... A autenticação por senha conta somente com o que você sabe. E é fato que você pode facilmente esquecer qualquer coisa que já soube algum dia. :)

h1qJgCI0juWqtR7NFb4LVG6EFYZ0trDIe1PsANtz2u1dmu/D0aiA0SYh1GQu YdgQxixZLQnKI0DR4Aw4uGQ==

[fulano@casa ~] $ _

Lá está. A linha 63 de fato contém a chave pública antiga de trab. Vamos apagá-la:

[fulano@casa ~] $ sed -ne '63 d' -i .ssh/known_hosts [fulano@casa ~] $ _ Estou aproveitando para mostrar um pouco das utilidades de mais um

programinha fantástico, o sed. Fique à vontade para usar seu editor de

texto preferido (gráfico ou não) para abrir o arquivo ~/.ssh/known_hosts ,

conferir a linha específica e apagá-la.

Feito isso, vamos tentar a conexão novamente. Note que o OpenSSH agora não conhece mais

a máquina trab , então vai tratar a conexão como se fosse com uma máquina nova à qual

você jamais se conectou: [fulano@casa ~] $ ssh ftal@trab

The authenticity of host 'trab (11.22.333.444)' can't be established. RSA key fingerprint is d4:d3:fd:ca:c4:d3:e9:94:97:cc:52:21:3b :4e:ba:e9. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'trab,11.22.333.444' (RSA) to the list of known hosts. ftal@trab [~]$ _

Fora esse problema, dificilmente você encontrará algum outro.

Conclusão

O OpenSSH é meu herói, e espero que se torne também o seu. Sua grande competência em termos de usabilidade e segurança – duas variáveis que geralmente caminham em sentidos opostos – o torna certamente um dos melhores softwares livres disponíveis.

Sua versatilidade também é marcante. Até o momento, vimos apenas os recursos mais básicos, e espero que você esteja praticando para, nos próximos posts, aprender ainda mais sobre os fascinantes recursos avançados do OpenSSH, como o tunelamento de conexões, a execução de comandos de forma não interativa, o compartilhamento de conexões e muito mais.

Por favor, não se esqueça de deixar aqui embaixo suas perguntas, críticas e sugestões! Elas são muito importantes para que mais pessoas entendam os tópicos abordados. A única pergunta estúpida é aquela que não é feita. ;)