Guia do Linux/Avançado/Servidor ssh/Introdução
Introdução
editarO serviço de ssh
permite fazer o acesso remoto ao console de sua máquina, em outras palavras, você poderá acessar sua máquina como se estivesse conectado localmente ao seu console (substituindo o rlogin
e rsh
). A principal diferença com relação ao serviço telnet
padrão, rlogin
e rsh
é que toda a comunicação entre cliente/servidor é feita de forma encriptada usando chaves públicas/privadas RSA para criptografia garantindo uma transferência segura de dados.
A velocidade do console remoto conectado via Internet é excelente (melhor que a obtida pelo telnet
e serviços r*) dando a impressão de uma conexão em tempo real (mesmo em links discados de 9.600 KB/s), a compactação dos dados também pode ser ativada para elevar ainda mais a velocidade entre cliente-servidor ssh. Além do serviço de acesso remoto, o scp
possibilita a transferência/recepção segura de arquivos (substituindo o rcp
).
Em conexões sem criptografia (rsh, rlogin) os dados trafegam de forma desprotegida e caso exista algum sniffer instalado em sua rota com a máquina destino, todo o que fizer poderá ser capturado (incluindo senhas).
Para o ssh
funcionar, é preciso que:
- o daemon sshd esteja rodando nas duas máquinas, tanto a máquina local quanto a remota.
- o firewall da máquina remota deixe passar as conexões pelo ssh
O daemon sshd pode ser baixado de forma normal (apt-get, yum, urpmi, etc), sua instalação existe um comando simples, e o firewall pode ser alterado através da GUI.
Versão
editarÉ assumido que esteja usando a versão 2.0 do ssh
. As explicações contidas aqui podem funcionar para versões posteriores, mas é recomendável que leia a documentação sobre modificações no programa (changelog) em busca de mudanças que alterem o sentido das explicações fornecidas aqui.
História
editarO openSSH
(explicado neste capítulo) é baseado na última versão livre do implementação de Tatu Ylonen com todos os algoritmos patenteados (para bibliotecas externas) removidos, todos as falhas de segurança corrigidas, novas características e muitas outras melhorias. O openSSH foi criado por Aaron Campbell, Bob Beck, Markus Friedl, Niels Provos, Theo de Raadt e Dug Song.
Contribuindo
editarA Home page principal é http://www.unixuser.org/~haruyama/security/openssh/index.html
. Falhas, correções e sugestões podem ser enviadas para a lista de discussão openssh-unix-dev@mindrot.org
(aberta a postagens de usuários não inscritos).
Características
editarAbaixo as principais características do serviço ssh
(Openssh
).
- Conexão de dados criptografada entre cliente/servidor.
- Cópia de arquivos usando conexão criptografada.
- Suporte a ftp criptografado (sftp).
- Suporte a compactação de dados entre cliente/servidor.
- Controle de acesso das interfaces servidas pelo servidor
ssh
. - Suporte a controle de acesso tcp wrappers.
- Autenticação usando um par de chaves pública/privada RSA ou DSA.
- Algoritmo de criptografia livre de patentes.
- Suporte a PAM.
- Suporte a caracteres ANSI (cores e códigos de escape especiais no console).
Ficha técnica
editarPacote: ssh
Utilitários:
- ssh - Cliente ssh (console remoto).
- slogin - Link simbólico para o programa
ssh
. - sshd - Servidor de shell seguro ssh.
- scp - Programa para transferência de arquivos entre cliente/servidor
- ssh-keygen - Gera chaves de autenticação para o ssh
- sftp - Cliente ftp com suporte a comunicação segura.
- sftp-server - Servidor ftp com suporte a comunicação segura.
- ssh-add - Adiciona chaves de autenticação DSA ou RSA ao programa de autenticação.
- ssh-agent - Agente de autenticação, sua função é armazenar a chave privada para autenticação via chave pública (DSA ou RSA).
- ssh-keyscan - Scaneia por chaves públicas de autenticação de hosts especificados. O principal objetivo é ajudar na construção do arquivo local
know_hosts
. - ssh-copy-id - Usado para instalação do arquivo
identity.pub
em uma máquina remota.
Arquivos de configuração:
/etc/ssh/sshd_config
- Arquivo de configuração do servidor ssh./etc/ssh/ssh_config
- Arquivo de configuração do cliente ssh.~/.ssh/config
- Arquivo de configuração pessoal do cliente ssh.
Requerimentos de Hardware
editarÉ recomendado no mínimo 6MB de memória RAM para a execução do serviço ssh
mais o kernel do Linux
. Este limite deve ser redimensionado para servidores de acesso dedicado, uma quantidade de 64MB deve ser confortável para centenas de usuários conectados simultaneamente (o que raramente acontece).
Veja também [ch-d-restr.html Restrições de acesso, recursos e serviços, Capítulo 19] para configuração de restrições usando PAM. O ssh
que acompanha a distribuição Debian
vem com o suporte a tcp wrappers compilado por padrão.
Arquivos de log criados pelo servidor ssh
editarDetalhes sobre a execução do servidor sshd
(como inicio, autenticação e término) são enviadas ao syslog
do sistema. A prioridade e nível são definidos no arquivo de configuração /etc/ssh/sshd_config
(veja [#s-s-ssh-server-sshd_config Exemplo de sshd_config
com explicações das diretivas, Seção 15.3.8]).
Instalação do servidor openSSH
editarapt-get install ssh.
Por padrão o servidor sshd
é instalado como daemon, também é possível executa-lo via inetd
mas isto não é aconselhável porque o servidor gera uma chave aleatória de seção toda vez que é iniciado, isto podendo levar vários segundos (quando é usada a versão 1 do protocolo ssh, veja [#s-s-ssh-server-protodiff Diferenças nas versões do protocolo, Seção 15.3.7]).
Iniciando o servidor/reiniciando/recarregando a configuração
editarO arquivo que controla o funcionamento do daemon do ssh
é controlado pelo arquivo /etc/init.d/ssh
.
A execução do ssh
através de inetd
é automática quando é feita uma requisição para a porta 22.
Opções de linha de comando
editarOpções de linha de comando do servidor sshd
:
- -b bits - Especifica o número de bits da chave do servidor (768 por padrão).
- -d - Modo de depuração - O servidor envia detalhes sobre seu funcionamento aos logs do sistema e não é executado em segundo plano. Ele também responderá conexões pelo mesmo processo. Podem ser usadas no máximo 3 opções -d para aumentar os detalhes de depuração.
- -f arquivo_configuração Indica um arquivo de configuração alternativo (por padrão é usado
/etc/ssh/sshd_config
). Ossh
pode ser configurado através de opções de linha de comando mas requer um arquivo de configuração para ser executado. Opções de linha de comando substituem as especificadas no arquivo de configuração. - -g segundos - Especifica o tempo máximo para a digitação de senha de acesso. Após o tempo especificado o servidor encerra a conexão. O valor padrão é 600 segundos e 0 desativa este recurso.
- -h arquivo_chave - Diz qual arquivo contém a chave privada local. O padrão é
/etc/ssh/ssh_host_key
e somente o usuário root deve ter permissões de leitura neste arquivo. Será necessário especificar esta opção caso osshd
não esteja sendo executado como usuário root.
É possível ter múltiplos arquivos de chaves para os protocolos 1 e 2 do ssh.
- -i - Indica que o servidor
sshd
será executado peloinetd
. Isto não é aconselhável porque o servidor gerará a chave aleatória de seção toda vez que for iniciado e isto pode levar alguns segundos. Esta opção pode se tornar viável com o uso do protocolo 2 ou criando chaves pequenas como 512 bytes (no ssh 1), mas a segurança criptográfica também será diminuída. Veja as diferenças entre os dois protocolos em [#s-s-ssh-server-protodiff Diferenças nas versões do protocolo, Seção 15.3.7]. - -k segundos - Especifica a frequência da geração de novas chaves do daemon
sshd
. O valor padrão é 3600 segundos e 0 desativa este recurso.
ATENÇÃO: NÃO desative este recurso!!! Esta opção traz a segurança que uma nova chave gerada de servidor será gerada constantemente (esta chave é enviada junto com a chave pública quando o cliente conecta e fica residente na memória volátil), assim mesmo que um cracker consiga obtê-la interceptando as conexões, será praticamente impossível tentar qualquer coisa. Valores menores tendem a aumentar ainda mais a segurança.
- -p porta - Especifica a porta que o daemon
sshd
atenderá as requisições. Por padrão é usada a porta 22. - -q - Nenhuma mensagem será enviada ao
syslog
do sistema. - -u tam - Especifica o tamanho do campo de nome do computador que será armazenado no arquivo
utmp
. A opção u0 faz somente endereços IP serem gravados. - -D - Quando usada não faz o
sshd
iniciar em segundo plano. - -V versão_cliente - Assume que o cliente possui a versão ssh especificada (1 ou 2) e não faz os testes de identificação de protocolo.
- -4 - Força o uso do protocolo IP tradicional (IPv4).
- -6 - Força o uso da nova geração do protocolo IP (IPv6).
A maioria das opções são realmente úteis para modificar o comportamento do servidor ssh
sem mexer em seu arquivo de configuração (para fins de testes) ou para executar um servidor ssh
pessoal, que deverá ter arquivos de configuração específicos.