1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486
|
<sect id="s-ssh-server">Servidor ssh
<sect1 id="s-ssh-server-sshd">sshd
<p>
Este o daemon de controle da conexo encriptada via
protocolo ssh, transferncia de arquivos e shell interativo. As
opes de linha de comando esto disponveis em <ref id="s-ssh-opcoescmd">.
Seu arquivo de configurao principal <file>/etc/ssh/sshd_config</file>,
um exemplo e descrio das opes deste arquivo encontrada em
<ref id="s-ssh-server-sshd_config">.
<![ %OBS [
<p>
<strong>OBS1:</strong> recomendvel que o arquivo <file>/etc/ssh/sshd_config</file>
seja lido somente pelo dono/grupo, por conter detalhes de acesso de usurios, grupos
e intervalo entre a gerao de chave de seo.
<p>
<strong>OBS2:</strong> Se estiver ocorrendo falhas no acesso ao servidor ssh,
verifique as permisses nos arquivos <file>/etc/hosts.allow</file> e
<file>/etc/hosts.deny</file> (o nome do servio <prgn>sshd</prgn>). Mesmo
operando como daemon, o servidor utiliza estes arquivos para fazer um
controle de acesso adicional. ]]>
<sect1 id="s-ssh-acesso">Controle de acesso
<p>
definido pelas opes <tt>ListenAddress</tt>, <tt>AllowUsers</tt>,
<tt>DenyUsers</tt>, <tt>AllowGroups</tt>, <tt>DenyGroups</tt> e
<tt>PermitRootLogin</tt> do arquivo de configurao <file>sshd_config</file>
(veja <ref id="s-ssh-server-sshd_config">) e via tcpd (arquivos
<file>hosts.allow</file> e <file>hosts.deny</file>).
<![ %CAPJUNTOS [ Veja <ref id="rede-seg-tcpd">. ]]>
<sect1 id="s-ssh-server-rsaauth">Usando autenticao RSA/DSA - chave pblica/privada
<p>
Este mtodo de autenticao utiliza o par de chaves pblica (que ser
distribudo nas mquinas que voc conecta) e outra privada (que ficar em
seu diretrio pessoal) para autenticao. A encriptao e decriptao so
feitas usando chaves separadas e no possvel conseguir a chave de
decriptao usando a chave de encriptao. possvel inclusive
gerar uma chave sem senha para efetuar o logon em um sistema ou
execuo de comandos remotos
(este esquema um pouco mais seguro que os arquivos <file>~/.rhosts</file> e
<file>~/.shosts</file>).
<p>
Siga os seguintes passos para se autenticar usando RSA 1 - usada na verso
1 do <prgn>ssh</prgn>:
<enumlist compact>
<item>
Gere um par de chaves pblica/privada usando o comando:
<example>
ssh-keygen
</example>
Um par de chaves RSA verso 1 ser gerado com o tamanho de 1024 bits por padro,
garantindo uma boa segurana/performance, e salvas no diretrio <file>~/.ssh</file>
com o nome <file>identity</file> e <file>identity.pub</file>. Para alterar o
tamanho da chave use a opo <em>-b tamanho</em>. Depois de gerar a chave, o
<prgn>ssh-keygen</prgn> pedir uma <tt>frase-senha</tt> ( recomendvel ter um
tamanho maior que 10 caracteres e podem ser includos espaos). Se no quiser
digitar uma senha para acesso ao sistema remoto, tecle <Enter> quando
perguntado. Mude as permisses do diretrio <file>~/.ssh</file> para 750.
<p>
A opo <em>-f</em> especifica o diretrio e nome das chaves. A chave pblica
ter a extenso <file>.pub</file> adicionada ao nome especificado.
<![ %OBS [
<p>
<strong>ATENO</strong> Nunca distribua sua chave privada, nem armazene-a
em servidores de acesso pblicos ou outros mtodos que permitem outros
terem acesso a ela. Se precisar de uma cpia de segurana, faa em disquetes
e guarde-a em um lugar seguro. ]]>
<item>
Instale a chave pblica no servidor remoto que deseja se conectar, por exemplo,
<file>www.sshserver.org</file>:
<example>
ssh-copy-id -i ~/.ssh/identity gleydson@www.servidorssh.org
</example>
A funo do utilitrio acima entrar no sistema remoto e adicionar a chave
pblica local <file>~/.ssh/identity.pub</file> no arquivo
<file>/home/gleydson/.ssh/authorized_keys</file> do sistema remoto
<file>www.sshserver.org</file>. O mesmo processo poder ser feito manualmente
usando os mtodos tradicionais (<prgn>ssh</prgn>/<prgn>scp</prgn>). Caso o
arquivo remoto <file>/home/gleydson/.ssh/authorized_keys</file> no existe,
ele ser criado. Seu formato idntico ao <file>~/.ssh/know_hosts</file> e
contm uma chave pblica por linha.
<item>
Agora utilize o <prgn>ssh</prgn> para entrar no sistema remoto usando o
mtodo de chave pblica/privada. Entre com a senha que usou para
gerar o par de chaves pblico/privado (ele entrar diretamente caso no
tenha digitado uma senha).
</enumlist>
Para autenticar em uma verso 2 do <prgn>ssh</prgn> (usando chave RSA 2 ou
DSA):
<enumlist compact>
<item>
Gere um par de chaves pblica/privada usando o comando:
<example>
ssh-keygen -t rsa -f ~/.ssh/id_rsa
ou
ssh-keygen -t dsa -f ~/.ssh/id_rsa
</example>
Um par de chaves RSA 2/DSA ser gerado. Para alterar o tamanho da chave use
a opo <em>-b tamanho</em>. Depois de gerar a chave, o <prgn>ssh-keygen</prgn>
pedir uma <tt>frase-senha</tt> ( recomendvel ter um tamanho maior que 10
caracteres e podem ser includos espaos). Se no quiser digitar uma senha
para acesso ao sistema remoto, tecle <Enter> quando perguntado. Mude
as permisses do diretrio <file>~/.ssh</file> para 750.
<![ %OBS [
<p>
<strong>ATENO</strong> Nunca distribua sua chave privada, nem armazene-a
em servidores de acesso pblicos ou outros mtodos que permitem outros
terem acesso a ela. Se precisar de uma cpia de segurana, faa em disquetes
e guarde-a em um lugar seguro. ]]>
<item>
Instale a chave pblica no servidor remoto que deseja se conectar copiando
o arquivo com:
<example>
scp ~/.ssh/id_rsa.pub usuario@servidorremoto:~/.ssh/authorized_keys2
ou
scp ~/.ssh/id_dsa.pub usuario@servidorremoto:~/.ssh/authorized_keys2
(caso tenha gerado a chave com a opo -t dsa)
</example>
Caso o arquivo remoto <file>/home/gleydson/.ssh/authorized_keys2</file> no
existe, ele ser criado. Seu formato idntico ao <file>~/.ssh/know_hosts2</file>
e contm uma chave pblica por linha.
<item>
Agora utilize o <prgn>ssh</prgn> para entrar no sistema remoto usando o
mtodo de chave pblica/privada. Entre com a senha que usou para
gerar o par de chaves pblico/privado (ele entrar diretamente caso no
tenha digitado uma senha).
</enumlist>
<![ %OBS [
<strong>OBS:</strong> Dever ser levado em considerao a possibilidade
de acesso fsico ao seu diretrio pessoal, qualquer um que tenha posse de
sua chave privada poder ter acesso ao sistema remoto.
]]>
O tipo de chave criada por padro a <em>rsa1</em> (compatvel com as verses
1 e 2 do ssh). A opo <em>-t [chave]</em> poder ser usada (ao gerar a chave)
para selecionar o mtodo de criptografia:
<list compact>
<item>
<tt>rsa1</tt> - Cria uma chave rsa compatvel com a verso 1 e 2 do
<prgn>ssh</prgn> (esta a padro).
<item>
<em>rsa</em> - Cria uma chave rsa compatvel somente com a verso 2 do
<prgn>ssh</prgn>.
<item>
<em>dsa</em> - Cria uma chave dsa compatvel somente com a verso 2 do
<prgn>ssh</prgn>.
</list>
<p>
Para trocar a senha utilize o comando:
<tt>ssh-keygen -p -t tipo_chave -f ~/.ssh/identity</tt> - ser pedida sua senha antiga e
a nova senha (no mesmo estilo do <prgn>passwd</prgn>).
Opcionalmente voc pode utilizar a sintaxe: <tt>ssh-keygen -p -f ~/.ssh/identity
-P senha_antiga -N senha_nova</tt>, que troca a senha em um nico comando
(til para ser usado em scripts junto com a opo <em>-q</em> para evitar a
exibio de mensagens de sada do <prgn>ssh-keygen</prgn>).
<sect1 id="s-ssh-server-cmdkey">Execuo de comandos especficos usando chaves
<p>
Com o uso de chaves tambm possvel o uso do <prgn>ssh</prgn> para execuo
de comandos especficos em mquinas remotas, isto possvel com os novos
recursos da verso 3 do <prgn>ssh</prgn>. Para fazer isto, siga os passos
<ref id="s-ssh-server-rsaauth"> para gerar um par de chaves <em>DSA</em>
(o par <em>RSA</em> no aceita execuo de comandos especficos) e
copiar para <file>authorized_keys2</file>. Aps isto, entre no servidor
remoto e edite a chave, inserindo o comando que dever ser executado antes
da linha <em>dds</em>, por exemplo:
<example>
command="ls / -la" ssh-dss ABCAB3NzaC5555MAAACBAL3...
</example>
Com este mtodo possvel restringir a execuo de alguns comandos/servios
alm de outras possibilidades como a mudana de variveis especficas para o
comando:
<example>
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="ls / -la" ssh-dss ABCAB3NzaC1kc55355MAADBBYLp...
</example>
<sect1 id="s-ssh-server-gatewayssh">Criando um gateway ssh
<p>
Imagine quando voc deseja ter acesso a uma mquina de sua rede
interna que esteja atrs de um gateway, isto possvel
usando os recursos explicados em <ref id="s-ssh-server-cmdkey">
fazendo um redirecionamento de acesso para seu usurio da seguinte
forma:
<example>
command="ssh -t usuario@maquina.interna" ssh-dss DAK874CKLDSAUE83da9x...
</example>
Isto o acesso do usurio ser redirecionado automaticamente quando
efetuar o logon. Caso tenha definido uma senha para a chave DSA, o
usurio dever fornecer a senha para entrar no gateway e outra para
acessar sua estao de trabalho.
<![ %OBS [
<p>
<strong>OBS:</strong> No estou levando em conta as consideraes de
segurana que este exemplo tem em sua rede, bem como o que pode ou
no ser redirecionado. A inteno foi manter a simplicidade para
entender sem dificuldades como isto feito.
]]>
<sect1 id="s-ssh-server-proxy">Criando um tunel proxy
<p>
Aplicaes remotas podem ser abertas localmente com o uso desta
tcnica. Voc poder usar para acessar portas que estariam
disponveis somente atravs do endereo remoto, realizar conexes
criptografadas ou com compactao (garantindo uma boa taxa de
transferncia para protocolos que usem mais texto).
<p>
Por exemplo, para redirecionar o trfego da porta 80 do servidor
remoto para a porta 2003 local:
<example>
ssh -l seu_login servidor -L2003:servidor_remoto:80 -f sleep 60
</example>
O <tt>sleep 60</tt> tem a funo de apenas deixar o tunel aberto por 60
segundos, tempo suficiente para realizarmos nossa conexo.
Agora, entre no seu navegador local e acesse a porta <em>2003</em>:
<example>
http://localhost:2003
</example>
A opo <em>-C</em> tambm pode ser especificada junto ao <prgn>ssh</prgn>
para usar compactao dos dados da conexo.
Como notou, este recurso tambm til para fazer a administrao remota
de mquinas, porque o que est realizando a conexo ser o IP do
servidor remoto, no o seu. Da mesma forma, voc poder ter problemas
caso no tenha uma boa poltica de distribuio de contas de mquinas
em sua rede. <![ %CAPJUNTOS [ Veja <ref id="d-contas"> para detalhes ]]>.
<sect1 id="s-ssh-server-protodiff">Diferenas nas verses do protocolo
<p>
Retirada da pgina de manual do <prgn>sshd</prgn>:
<taglist>
<tag>Protocolo SSH verso 1</tag>
<item>
Cada servidor possui uma chave RSA especfica (1024 bits por padro) usada
para identifica-lo. Quando o sshd inicia, ele gera uma chave RSA do
servidor (768 bits por padro, valor definido por ServerKeyBits) que
recriada a cada hora (modificado por KeyRegenerationInterval no
<file>sshd_config</file>) e permanece sempre residente na RAM.
<p>
Quando um cliente se conecta o sshd responde com sua chave pblica da mquina
e chaves do servidor. O cliente ssh compara a chave RSA com seu banco de dados
(em <file>~/.ssh/know_hosts</file>) para verificar se no foi modificada.
<p>
Estando tudo OK, o cliente gera um nmero aleatrio de 256 bits, o
encripta usando ambas as chaves de mquina e chave do servidor e
envia este nmero ao servidor. Ambos os lados ento usam este
nmero aleatrio como chave de seo que usado para encriptar todas
as comunicaes seguintes na seo.
<p>
O resto da seo usa um mtodo de embaralhamento de dados convencional, atualmente
Blowfish ou 3DES (usado como padro). O cliente seleciona o algoritmo de
criptografia que ser usado de um destes oferecidos pelo servidor. Aps isto
o servidor e cliente entram em um dilogo de autenticao. O cliente
tenta se autenticar usando um dos seguintes mtodos de autenticao:
<list compact>
<item>
<file>~/.rhosts</file> ou <file>~/.shosts</file> (normalmente desativada).
<item>
<file>~/.rhosts</file> ou <file>~/.shosts</file> combinado com autenticao
RSA (normalmente desativada).
<item>
Autenticao RSA por resposta de desafio.
<item>
Autenticao baseada em senha.
</list>
A autenticao usando Rhosts normalmente desativada por ser muito
insegura mas pode ser ativada no arquivo de configurao do servidor
se realmente necessrio. A segurana do sistema no melhorada a no
ser que os servios <prgn>rshd</prgn>, <prgn>rlogind</prgn>,
<prgn>rexecd</prgn> e <prgn>rexd</prgn> estejam desativados (assim,
o <prgn>rlogin</prgn> e <prgn>rsh</prgn> sero completamente
desativados na mquina).
<tag>Protocolo SSH verso 2</tag>
<item>
A verso 2 funciona de forma parecida com a 1:
Cada mquina possui uma chave RSA/DSA especfica usada para se identificar.
A diferena que quando o <prgn>sshd</prgn> inicia, ele no gera uma
chave de servidor. A segurana de redirecionamento oferecida atravs
da concordncia do uso de uma chave Diffie-Hellman. Esta concordncia de
chave resulta em uma seo com chave compartilhada. O resto da seo
encriptada usando um algoritmo simtrico, como Blowfish, 3DES, CAST128,
Arcfour, 128 bit AES, ou 256 bit AES.
<p>
O cliente que seleciona o algoritmo de criptografia que ser usado entre os
oferecidos pelo servidor. A verso 2 tambm possui integridade de seo
feita atravs de um cdigo de autenticao de mensagem criptogrfica
(hmac-sha1 ou hmac-md5).
A verso 2 do protocolo oferece um mtodo de autenticao baseado em
chave pblica (PubkeyAuthentication) e o mtodo de autenticao convencional
usando senhas.
</taglist>
<sect1 id="s-ssh-server-sshd_config">Exemplo de <file>sshd_config</file> com explicaes das diretivas
<p>
Abaixo segue um exemplo deste arquivo que poder ser adaptado ao seu sistema.
O objetivo ser ao mesmo tempo til para sua configurao e didtico:
<example>
# Modelo personalizado para o guia Foca GNU/Linux baseado na configurao
# original do FreeBSD.
# Autor: Gleydson Mazioli da Silva
# Data: 20/09/2001.
# Porta padro usada pelo servidor sshd. Mltiplas portas podem ser
# especificadas separadas por espaos.
Port 22
# Especifica o endereo IP das interfaces de rede que o servidor sshd
# servir requisies. Mltiplos endereos podem ser especificados
# separados por espaos. A opo Port deve vir antes desta opo
ListenAddress 0.0.0.0
# Protocolos aceitos pelo servidor, primeiro ser verificado se o cliente
# compatvel com a verso 2 e depois a verso 1. Caso seja especificado
# somente a verso 2 e o cliente seja verso 1, a conexo ser descartada.
# Quando no especificada, o protocolo ssh 1 usado como padro.
Protocol 2,1
# As 4 opes abaixo controlam o acesso de usurios/grupos no sistema.
# Por padro o acesso a todos garantido (exceto o acesso root se
# PermitRootLogin for "no"). AllowUsers e AllowGroups definem uma lista
# de usurios/grupos que podero ter acesso ao sistema. Os coringas
# "*" e "?" podem ser especificados. Note que somente NOMES so vlidos,
# UID e GID no podem ser especificados.
#
# As diretivas Allow so processadas primeiro e depois Deny. O mtodo que
# estas diretivas so processadas idntico a diretiva
# "Order mutual-failure" do controle de acesso do Apache:
# O usurio dever TER acesso via AllowUsers e AllowGroups e NO ser bloqueado
# por DenyUsers e DenyGroups para ter acesso ao sistema. Se uma das diretivas
# no for especificada, "*" assumido como padro.
# Estas permisses so checadas aps a autenticao do usurio, porque
# dados a ele pelo /etc/passwd e PAM so obtidos aps o processo de
# autenticao.
#AllowUsers gleydson teste?
#DenyUsers root adm
#AllowGroups users
#DenyGroups root adm bin
# Permite (yes) ou no (no) o login do usurio root
PermitRootLogin no
# Chaves privadas do servidor (as chaves pblicas possuem um ".pub" adicionado
# no final do arquivo.
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
# Tamanho da chave. 768 bits o padro
ServerKeyBits 768
# Tempo mximo para login no sistema antes da conexo ser fechada
LoginGraceTime 600
# Tempo para gerao de nova chave do servidor (segundos). O padro
# 3600 segundos (1 hora).
KeyRegenerationInterval 3600
# Ignora os arquivos ~/.rhosts e ~/.shosts
IgnoreRhosts yes
# Ignora (yes) ou no (no) os arquivos ~/.ssh/known_hosts quando for usado
# para a opo RhostsRSAAuthentication. Se voc no confia neste mecanismo
# ajuste esta opo para yes.
IgnoreUserKnownHosts no
# Checa por permisses de dono dos arquivos e diretrio de usurio antes de
# fazer o login. muito recomendvel para evitar riscos de segurana
# com arquivos lidos por todos os usurios.
StrictModes yes
# Permite (yes) ou no (no) o redirecionamento de conexes X11. A segurana
# do sistema no aumentada com a desativao desta opo, outros mtodos
# de redirecionamento podem ser usados
X11Forwarding yes
# Especifica o nmero do primeiro display que ser usado para o redirecionamento
# X11 do ssh. Por padro usado o display 10 como inicial para evitar conflito
# com display X locais
X11DisplayOffset 10
# Mostra (yes) ou no (no) a mensagem em /etc/motd no login. O padro "no".
PrintMotd no
# Mostra (yes) ou no (no) a mensagem de ltimo login do usurio. O padro "no".
PrintLastLog no
# Permite (yes) ou no (no) o envio de pacotes keepalive (para verificar se o
# cliente responde. Isto bom para fechar conexes que no respondem mas
# tambm podem fechar conexes caso no existam rotas para o cliente
# naquele momento ( um problema temporrio). Colocando esta opo como
# "no" por outro lado pode deixar usurios que no tiveram a oportunidade
# de efetuar o logout do servidor dados como "permanentemente conectados"
# no sistema. Esta opo deve ser ativada/desativada aqui e no programa
# cliente para funcionar.
KeepAlive yes
# Facilidade e nvel das mensagens do sshd que aparecero no syslogd
SyslogFacility AUTH
LogLevel INFO
# Especifica se somente a autenticao via arquivos ~/.rhosts e /etc/hosts.equiv
# suficiente para entrar no sistema. No muito bom usar "yes" aqui.
RhostsAuthentication no
# Mesmo que o acima com o acrscimo que o arquivo /etc/ssh/ssh_known_hosts tambm
# verificado. Tambm evite usar "yes" aqui.
RhostsRSAAuthentication no
# Especifica se a autenticao via RSA permitida (s usado na verso 1 do
# protocolo ssh). Por padro "yes".
RSAAuthentication yes
# Permite autenticao usando senhas (serve para ambas as verses 1 e 2 do ssh).
# O padro "yes".
PasswordAuthentication yes
# Se a PasswordAuthentication for usada, permite (yes) ou no (no) login
# sem senha. O padro "no".
PermitEmptyPasswords no
# Ativa senhas s/key ou autenticao PAM NB interativa. Nenhum destes
# compilado por padro junto com o sshd. Leia a pgina de manual do
# sshd antes de ativar esta opo em um sistema que usa PAM.
ChallengeResponseAuthentication no
# Verifica se o usurio possui emails ao entrar no sistema. O padro "no".
# Este mdulo tambm pode estar sendo habilitado usando PAM (neste caso
# cheque a configurao em /etc/pam.d/ssh).
CheckMail no
# Especifica se o programa login usado para controlar a sees de shell
# interativo. O padro "no".
UseLogin no
# Especifica o nmero mximo de conexes de autenticao simultneas feitas
# pelo daemon sshd. O valor padro 10. Valores aleatrios podem ser
# especificados usando os campos "inicio:taxa:mximo". Por exemplo,
# 5:40:15 rejeita at 40% das tentativas de autenticao que excedam o
# limite de 5 at atingir o limite mximo de 15 conexes, quando
# nenhuma nova autenticao permitida.
MaxStartups 10
#MaxStartups 10:30:60
# Mostra uma mensagem antes do nome de usurio/senha
Banner /etc/issue.net
# Especifica se o servidor sshd far um DNS reverso para verificar se o
# endereo confere com a origem (isto til para bloquear conexes
# falsificadas - spoofing). O padro "no".
ReverseMappingCheck yes
# Ativa o subsistema de ftp seguro. Para desabilitar comente a linha
# abaixo
Subsystem sftp /usr/lib/sftp-server
</example>
|