Pular para o conteúdo principal

Muitos locais estão exigindo que você pare de se conectar ao sistema com o Telnet e use o SSH em seu lugar. A justificativa é uma maior segurança. Quando você faz login usando o Telnet, sua senha, assim como quaisquer outros dados, é enviada em texto simples. Qualquer pessoa com um analisador de rede pode ler o que você enviou. O SSH, por outro lado, criptografa todos os dados, tornando-os ilegíveis. Presume-se que os daemons Telnet e SSH oferecem uma experiência de usuário intercambiável, o que é incorreto.

Primeiro, existem muitos clientes SSH e Telnet diferentes. Eles têm interfaces de usuário diferentes e podem usar tipos de terminais diferentes. Mesmo quando usam o mesmo tipo de terminal, eles podem se comportar de maneira diferente, pois estão emulando um terminal e as emulações não são perfeitas. Mas, mesmo desconsiderando as diferenças no software cliente, existem várias diferenças sutis e não tão sutis entre uma sessão conectada a um daemon Telnet (telnetd ou telnet_msd) e uma conectada ao daemon SSH. Há também vários bugs, que abordarei. Tenha em mente que estou usando o daemon SSH do Internet Security Pack (ISP) para OpenVOS versão 2.1.0k. Esta é a versão mais recente disponível no momento em que escrevi este artigo.

Nomes de usuário:

Antes mesmo de você fazer login, há uma diferença na maneira como o Telnet e o SSH lidam com o seu nome de usuário. Os daemons do Telnet permitem que você faça login com qualquer variação única do seu nome de usuário, e o nome não diferencia maiúsculas de minúsculas. Dado o nome de usuário Noah_Davids, posso fazer login como Noah_D, noah_d, NoAh_D ou NoAh_DaViDs ao usar o Telnet, mas a única coisa que funcionará com o SSH é Noah_Davids. Meu alias nd funciona da mesma maneira. Com o Telnet, posso usar nd, ND ou nD, mas com o SSH, apenas nd funcionará.

Nomes dos grupos:

O prompt de login apresentado com uma conexão Telnet permite que eu especifique um nome de grupo

telnet 164.152.77.217
Tentando...
Conectado a 164.152.77.217.
O caractere de escape é '^]'.

OpenVOS Release 17.1.0ax, Módulo %phx_vos#m17
Faça login  15:24:14
login nd.SysAdmin
Senha? [senha inserida aqui]

Noah_Davids.SysAdmin conectou-se em %phx_vos#m17 às 12-12-12 15:24:55 mst.
Figura 1 – Login Telnet com nome do grupo

Mas o protocolo SSH permite apenas um nome de usuário. Se eu incluir o nome do grupo, ele será tratado como parte do nome de usuário e o login falhará.

>system>openssl>bin>ssh [email protected]

nd.SysAdminSenha de @164.152.77.217: [senha inserida aqui]

Permissão negada, tente novamente.
Senha de [email protected]:
Figura 2 – Login SSH com nome de grupo

Depois de fazer login, você pode alterar seu grupo com um sublogin (mas consulte a seção sobre ssl-403 abaixo para conhecer as limitações atuais).

Diferenças nas senhas:

A maior diferença no tratamento de senhas entre conexões Telnet e SSH é que o SSH não exige senhas para autenticação. Você pode configurar um par de chaves pública/privada e pular toda a etapa de inserção de senha. Consulte Configurando o Stratus STCP SSH para usar autenticação por chave pública para obter uma descrição sobre como configurar isso.

Se você estiver usando senhas, há algumas diferenças com as quais precisa lidar. Primeiro, a expiração da senha é tratada de maneira diferente. Com o Telnet, o prompt de login avisa quando sua senha está prestes a expirar e permite que você a altere.

telnet 164.152.77.217
Tentando...
Conectado a 164.152.77.217.
O caractere de escape é '^]'.

OpenVOS Versão 17.1.0ax, Módulo %phx_vos#m17
Faça login  14:04:40
login nd
Senha? [digite a senha atual aqui]

Sua senha expirará em 5 dias.
Nova senha (primeira entrada)?
Figura 3 – Aviso/solicitação de expiração da senha de conexão Telnet

O SSH irá avisá-lo, mas você não tem opção de alterá-la. Você deve usar o comando change_password para invalidar sua senha, o que o forçará a alterá-la na próxima vez que fizer login.

ssh [email protected]
Senha do [email protected]: [digite aqui a senha atual]

Sua senha expirará em 5 dias.
Noah_Davids.CAC conectou-se em %phx_vos#m17 às 13-01-09 13:06:35 mdt.

Bem-vindo.

Pronto  13:06:35
alterar_senha
Sua senha não é mais válida. Você deve alterá-la na próxima vez que fizer login.
pronto  13:06:49
Figura 4 – Aviso de expiração da senha de conexão SSH
e comando change_password

Quando sua senha expirar (ou você a invalidar com o comando change_password), você será solicitado a alterá-la. Ao contrário do Telnet, isso não é opcional, você deve alterar sua senha nesse momento. Após alterar sua senha, você será automaticamente desconectado e deverá fazer login novamente.

ssh [email protected]
Senha de [email protected]:

AVISO: Sua senha expirou.
Você deve alterar sua senha agora e fazer login novamente!
Senha atual? [digite a senha atual aqui]

Nova senha (primeira entrada)? [digite a nova senha aqui]

Nova senha (segunda entrada)? [digite a nova senha aqui]

Conexão com 164.152.77.217 encerrada.
Figura 5 – Alterando sua senha durante a conexão SSH

Outra diferença é que as conexões SSH não suportam senhas de desafio-resposta, enquanto as conexões Telnet suportam.

Subsistemas:

Quando você se conecta pela primeira vez a um módulo com o Telnet, o comando de login permite selecionar um subsistema

OpenVOS Versão 17.1.0ax, Módulo %phx_vos#m17
Faça login  11:23:40
login -form -usage
-------------------------------- login -------------------------------
 nome_de_usuário:
 -privilegiado:      conforme registrado
 -senha:
 -alterar_senha: não
 -prioridade:
 -diretório_home:
 -módulo:
 -subsistema:
Figura 6 – A conexão Telnet permite especificar um nome de subsistema

O protocolo ssh não possui nenhum mecanismo para especificar um nome de subsistema. Se o sinalizador must_use_subsystem estiver definido na sua entrada do banco de dados de registro, o primeiro subsistema especificado na sua entrada de registro será usado automaticamente. Se o bit não estiver definido, nenhum subsistema será usado. (Observe que, antes da versão ISP 2.1.0j, o primeiro subsistema seria usado mesmo que o bit must_use_subsystem não estivesse definido.) Embora os argumentos para o comando login disponíveis antes de você realmente fazer login incluam uma maneira de especificar o subsistema (veja a figura 6), depois que você faz login, essa opção não está mais disponível (veja a figura 7).

login -form -usage
-------------------------------- login -------------------------------
 nome_do_grupo:  CAC
 -privilegiado: sim
 -prioridade:
 -senha:
 -módulo:
Figura 7 – Argumentos da linha de comando do comando sub-login

A única maneira de acessar um subsistema depois de fazer login é usar o Telnet para voltar ao sistema e fazer login novamente.

telnet 127.0.0.1
Tentando...
Conectado a 127.0.0.1.
O caractere de escape é '^]'.

OpenVOS Release 17.1.0ax, Módulo %phx_vos#m17
Faça login às 11:37:34
login nd -subsistema test_ss
Senha? 

Noah_Davids.CAC conectou-se em %phx_vos#m17 às 12-12-13 11:37:49 mst.
Este é o subsistema de teste.

Pronto  11:37:49
Figura 8 – Telnet para o endereço de loopback e faça login novamente para acessar um subsistema

 

Controle de acesso:

Tanto as conexões Telnet quanto SSH suportam TCP Wrappers para permitir que você restrinja o acesso com base no endereço IP, mas com os daemons Telnet, o padrão é que o TCP Wrappers não esteja habilitado e você deve habilitá-lo explicitamente com o argumento de controle -tcpwrapper_check. Já com o daemon SSH, o TCP Wrappers está habilitado por padrão e não há como desabilitá-lo. Você pode desativá-los efetivamente permitindo todas as conexões SSH no arquivo de configuração hosts.allow do TCP Wrappers.

telnetd -form -usage
------------------------------ telnetd ------------------------------
-service_file:     >system>stcp>telnetservice
 -tcpwrapper_check: no
 -numeric: sim
Figura 9 – Ativando os TCP Wrappers no daemon telnetd

 

telnet_msd -form -usage
----------------------------- telnet_msd ----------------------------
 -porta_de_rede:     24
 -sessões_máximas:     28
 -gravidade_do_erro:   2
 -log_separado:     sim
 -diretório_de_log:          >sistema>stcp>logs
 -vterm_starname:   telnet*
 -vterm_login:      sim
 -vterm_slave_id:
 -extension:        133
 -force_edit:       sim
 -EC_decimal_value: 8
 -EL_decimal_value: 21
 -tcpwrapper_check: não
 -numeric:          não
Figura 10 – Ativando os TCP Wrappers no daemon telnet_msd

O daemon sshd também suporta opções no arquivo sshd_config para permitir que você especifique usuários ou grupos que terão acesso permitido usando ssh (as diretivas AllowUsers e AllowGroups) ou acesso negado usando ssh (diretivas DenyUsers e DenyGroups). Essas diretivas permitem que você especifique nomes de usuário, domínios de origem ou combinações. É possível permitir o acesso de noah_davids de corp.stratus.com, mas negá-lo de az.stratus.com.

PermitirUsuários *@*.stratus.com
NegarUsuários *@*az.stratus.com
Figura 11 – Exemplo de diretivas AllowUsers e DenyUsers no sshd_config
>system>openssl>bin>ssh [email protected]
Senha de [email protected]:

Permissão negada, tente novamente.
Senha de [email protected]:
Figura 12 – Login de phxtest-m15.az.stratus.com negado devido à diretiva DenyUsers

 

Ambiente de comando:

Depois de fazer login, uma conexão Telnet apresenta o ambiente de comando VOS padrão. O SSH permite que um administrador especifique o ambiente de comando padrão ou o ambiente bash shell. Isso é feito com base nos números das portas.

d sshservices

%phx_vos#m17_mas>opt>openssl>etc>sshservices  12-12-13 12:31:31 mst

ssh       "window_term"  ""         "login"         1 1  s$pt_log.m16
ssh2200   "window_term"  "-shell"   "bash"          1 1  s$pt_log.m16
Figura 13 – Arquivo sshservices, a porta 22 é a linha de comando padrão do VOS,
a porta 2200 é o shell bash
>sistema>openssl>bin>ssh [email protected] -p 2200
Senha do [email protected]:

Bem-vindo.

sh-2.05$
Figura 14 – Conexão SSH usando a porta 2200 e obtendo um shell bash

 

Variáveis de ambiente:

Por padrão, as conexões Telnet definem apenas 6 variáveis de ambiente, enquanto as conexões SSH definem 12.

env
HOME=/SysAdmin/Noah_Davids
LOGNAME=root
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m
+ysql:/system/stcp/include_library/compat:/system/include_library
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/
+stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_
+object_library:/system/c_object_library:/system/object_library
TERM=vt100
Figura 15 – Variáveis de ambiente definidas em uma conexão Telnet

 

env
HOME=/SysAdmin/Noah_Davids
PATH=.:/system/command_library:/system/applications_library:/system/maint_librar
+y:/system/nio/command_library:/system/tools_library:/opt/apache/bin:/opt/libxml
+2/bin:/opt/php/bin:/opt/openssl/bin:/opt/mysql/bin:/system/stcp/command_library
+:/system.17.1/gnu_library/bin
VOS_INCLUDE_PATH=.:/opt/apache/include:/opt/openssl/include:/opt/mysql/include/m
+ysql:/system/stcp/include_library/compat:/system/include_library
VOS_OBJECT_PATH=.:/opt/apache/lib:/opt/openssl/lib:/opt/mysql/lib/mysql:/system/
+stcp/object_library/complib:/system/posix_object_library/pthread:/system/posix_
+object_library:/system/c_object_library:/system/object_library
TERM=vt100
TZ=mst+07:00:00
USER=Noah_Davids
LOGNAME=Noah_Davids
MAIL=/var/spool/mail/Noah_Davids
SHELL=/bin/sh
SSH_CONNECTION=164.152.77.34 49573 164.152.77.217 22
SSH_TTY=#s$pt_log.m16_3
Figura 16 – Variáveis de ambiente definidas em uma conexão SSH

 

Tipos de dispositivos:

Por fim, essa não é realmente uma diferença entre Telnet e SSH, mas entre os daemons telnetd e sshd e o daemon telnet_msd. Tanto o telnetd quanto o sshd usam dispositivos window_term, enquanto o telnet_msd usa dispositivos vterm. Existem algumas diferenças entre a maneira como os dispositivos vterms e window_term lidam com algumas das teclas de função (como CANCEL) na linha de comando e a maneira como lidam com a saída bruta da tela. Alguns aplicativos que criam seus próprios formulários e não foram atualizados para usar os novos OP_CODES s$control não apresentam esses formulários corretamente usando dispositivos window_term. A segunda melhor maneira de lidar com esses aplicativos é usar um túnel SSH para se conectar ao sistema, o túnel é então configurado para se conectar ao daemon telnet_msd. A melhor maneira de lidar com o aplicativo é, obviamente, atualizá-lo para usar os novos OP_CODES.

 

Além das diferenças acima, que são inerentes ao Telnet e ao SSH, existem alguns bugs que serão corrigidos em uma versão futura.

ssl-403 Grupos disponíveis:

Ao conectar-se com o Telnet, todos os grupos especificados em sua entrada de registro estão disponíveis para sublogins, mas com o ssh apenas os primeiros 5 grupos estão disponíveis.

Considerando que estou registrado nos grupos CAC, SysAdmin, Grupo_3, Grupo_4, Grupo_5 e Grupo_6, posso fazer um sublogin usando qualquer grupo a partir de uma conexão Telnet.

telnet 164.152.77.217
Tentando...
Conectado a 164.152.77.217.
O caractere de escape é '^]'.

OpenVOS Versão 17.1.0ax, Módulo %phx_vos#m17
Faça login  15:38:02
login nd
Senha? [senha atual inserida aqui]

Noah_Davids.CAC conectou-se em %phx_vos#m17 às 12-12-12 15:38:08 mst.

login Grupo_5

Noah_Davids.Group_5 conectou-se em %phx_vos#m17 às 15:39:39 mst de 12-12-12.
pronto  15:39:39
logout

login Grupo_6

Noah_Davids.Grupo_6 efetuou login em %phx_vos#m17 às 12-12-12 15:40:13 mst.
pronto  15:40:13
Figura 17 – sublogins com conexão Telnet

No entanto, com o ssh, quando tento usar o Group_6, recebo um erro.

>system>openssl>bin>ssh [email protected]
Senha do [email protected]:

Noah_Davids.CAC conectou-se em %phx_vos#m17 às 12-12-12 15:41:02 mst.  
pronto  15:41:02

login Group_5

Noah_Davids.Group_5 conectou-se em %phx_vos#m17 em 12-12-12 às 15:41:24 mst.
pronto  15:41:24
logout

login Grupo_6
login: Formato inválido no argumento. Grupo_6 não permitido para nome_do_grupo.
pronto  15:41:59
Figura 18 – sublogins com conexão SSH

 

ssl-418 – O nível sub_process_level:

Os logins via Telnet têm um nível de subprocesso de 0, enquanto os logins via SSH têm um nível de subprocesso de 3.

telnet 164.152.77.217
Tentando...
Conectado a 164.152.77.217.
O caractere de escape é '^]'.

OpenVOS Versão 17.1.0ax, Módulo %phx_vos#m17
Faça login às 14:15:34
login nd
Senha? [senha atual inserida aqui]

Noah_Davids.CAC conectou-se em %phx_vos#m17 às 12-12-13 14:15:39 mst.
pronto  14:15:39
display_line (process_info sub_process_level)
0     
pronto  14:15:49
Figura 19 – Nível de subprocesso definido em uma conexão Telnet

 

>system>openssl>bin>ssh [email protected]
Senha do [email protected]: [digite a senha atual aqui]

Noah_Davids.CAC conectou-se em %phx_vos#m17 às 12-12-13 14:12:23 mst.
pronto  14:12:23
display_line (process_info sub_process_level)
3     
pronto  14:12:37
Figura 20 – Nível de subprocesso definido em uma conexão SSH

Atualização em 14 de janeiro de 2013: Isso acaba sendo um recurso e não um bug. O processo sshd é bifurcado primeiro quando start_process é executado para iniciar o processo de escuta, depois quando o sshd aceita a conexão e, pela terceira vez, quando o processo de login do usuário é criado. O Telnet usa um mecanismo diferente para iniciar o processo do usuário, o que não resulta em nenhum processo bifurcado.

Problemas com o fuso horário:

Por fim, gostaria apenas de dizer que houve uma série de problemas relacionados com a mudança entre o horário de verão e o horário padrão ou, de forma mais geral, apenas com a mudança de fuso horário. As sessões registadas através de SSH não refletiam os novos padrões. Todos estes problemas devem estar resolvidos nesta versão mais recente (2.1.0k).

© 2024 Stratus Technologies.