Acesso remoto

Em um sistema onde vários computadores se comunicam, é frequentemente utilizada a metáfora de “cliente/servidor”: o servidor é o programa que recebe as solicitações provenientes de um cliente e os executa. Existem diferentes formas de acessar um computador à distância, de modo gráfico ou pela linha de comando, diretamente ou através de redes privadas. Veja algumas opções nesse post: SSH/SSHPASS, Rdesktop, TeamViewer, VNC e VPN – parte 2 desse post.

vida-de-programador-ferias

SSH

O protocolo SSH (Secure SHell) envolve autenticação do cliente através de senha e todas as trocas de dados são criptografadas – antes, eram usadas as ferramentas Telnet e RSH. O OpenSSH é dividido em dois pacotes (openssh-client e openssh-server), sendo que o meta-pacote ssh depende de ambas as partes e facilita a instalação de ambos através de “apt-get install ssh”. A porta normalmente usada para este protocolo é a 22.

O acesso a arquivos de outro computador pode ocorrer via linha de comando ou no nautilus (interface gráfica para gerenciar arquivos). Isso pode ser realizado digitando-se CTRL+L para aparecer barra de endereços e digitar nela “ssh://usuario@IP”, depois navegue até o diretório desejado.

A opção -X permite abrir janelas de programas no modo gráfico, mesmo em acesso remoto (o sistema gráfico X.org utiliza o protocolo de rede X11). Essa opção pode ser habilitada especificando “X11Forwarding yes” no arquivo de configuração do servidor (/etc/ssh/sshd_config). Veja esse exemplo:

Caso apareça a mensagem “X11 connection rejected because of wrong authentication” ou “xauth: file /root/.Xauthority does not exist”, isso significa que o você precisa copiar a autorização do usuário que você logou (user) para o que está usando no momento (root) – é necessário ter o pacote “sudo” instalado e configurado para o usuário:

Outra opção é usar o comando “export XAUTHORITY=/home/locator/.Xauthority” para exportar o conteúdo da autorização do usuário “não-root”.

Em vez do IP do computador alvo, você pode usar o nome da máquina (hostname) seguido de “.local”, como em “ssh hostname.local”. Esse nome é resolvido via “multicast domain name service” (mDNS) ou “Domain Name System” (DNS).

Também é possível configurar atalhos para acesso ssh (bastaria escrever “ssh nome_do_pc”). Para isso, crie o arquivo /home/usuario/.ssh/config com o conteúdo do primeiro conjunto abaixo – o segundo conjunto é um exemplo que permite acessar o computador “pc_final” através de outro, o “pc_inter”:

Ao conectar com outro computador, é criada uma chave RSA (algoritmo de criptografia) para validar a conexão das próximas vezes e tornando o processo mais seguro. Caso dê algum conflito por mudança de IP ou alteração no hostname, convém apagar a chave e gerar uma nova. Para isso, execute algum dos comandos abaixo, alterando 3 pelo número da linha informada pela mensagem de erro ou o número de IP pelo hostname/IP desejado:

Para não ter que digitar a senha sempre que precisar se conectar ao computador (SSH sem senha), basta seguir os procedimento abaixo:

Caso necessite acessar remotamente um computador que está ligado em roteador, é preciso acessar o painel de controle do roteador (digitando o IP dele no navegador web e preenchendo usuário e senha) e configurar um “virtual server” para criar número de porta para aquele pc (colocar ip local dele). Assim, o acesso será dado da seguinte forma:

Uma forma de entrar por ssh, executar o comando e jogar o resultado num arquivo texto em seu computador:

Se quiser executar mais de um comando, coloque-o dentro das aspas separado por “;”.

O SSH também oferece dois serviços de transferência de arquivo: scp e sftp (veja mais no item “Transferência de dados” do post de Comandos de rede Linux.

SSHPASS

Existe uma forma de passar a senha como parâmetro no SSH e scp/rsync, após registro de chave pública, que é através do comando sshpass. Para isso, basta instalar o pacote sshpass e realizar o acesso da seguinte forma:

Veja mais sobre o comando rsync no item de cópia de arquivos no post de Comandos úteis do Linux.

RDesktop

Software livre para acessar o Windows remotamente, usando o protocolo RDP (Remote Desktop Protocol). O RDesktop está disponível nos repositórios, podendo ser instalado através do comando “sudo apt-get install rdesktop”. Veja esse comando típico de uso do programa, que pode ser inserido como um “alias” no arquivo “~/.bashrc” como “alias pcwin=’COMANDO'” depois de “some more ls aliases”:

Os parâmetros (opcionais) “-f” abre a janela do Windows ocupando toda a tela (tecle CTRL+ALT+ENTER para voltar ao modo janela), “-P” usa cache persistente de bitmap, “-K” mantém as combinações de teclas do gerenciador de janelas, “-D” oculta as decorações do gerenciador de janelas; usuário e senha são opcionais, conforme a configuração dos usuários do Windows. Para encerrar o programa, basta se deslogar ou fechar a janela, liberando assim a tela para acesso em outro computador.

Para compartilhar arquivos, use o parâmetro -r (também opcional) acompanhado de “disk:shaer=” e o caminho completo do diretório a ser compartilhado. No Windows, abra o gerenciador de arquivos e na parte de “Rede”, procure um “computador” chamado “tsclient”. Para alternar para esse diretório no cmd, use “pushd \\tsclient\path”.

Anteriormente, o PC servidor (com Windows) deve estar com permissão para ser acessado remotamente. Para isso, acesse o Painel de Controle, entre em Sistema e, na aba Remoto, clicar na segunda opção “Permitir conexões de computadores que estejam executando qualquer versão da Área de Trabalho Remota”. Além disso, deve estar rodando um “xrdp” com uma porta de acesso configurada e habilitada e algum eventual roteador deve permitir o acesso, caso tenha alguma restrição. Veja mais detalhes nesse tutorial:

TeamViewer

O TeamViewer é um software proprietário para acesso remoto, compartilhamento de área de trabalho, conferência online e transferência de arquivos entre computadores (aba superior da janela da área de trabalho do PC remoto). Funciona dentro de vários sistemas operacionais (Windows, Linux, iOS e até Android) e também é possível acessar uma máquina via navegador web.

O programa precisa estar instalado nos dois computadores (cliente e servidor). Quando o TeamViewer é iniciado num computador gera um ID de parceiro e uma senha. Para estabelecer uma conexão de um cliente local a uma máquina host remota, o operador local deve comunicar com o operador remoto, requerendo a ID e senha, e então usá-las no TeamViewer local. Também é possível criar uma conta e senha e cadastrar os computadores que deseja monitorar, cadastrando também uma senha para cada máquina.

Para instalar o TeamViewer no Linux, acesso o link Team Viewer Download para baixar o arquivo (32 ou 64 bits), abra o terminal, vá para a pasta onde o arquivo foi baixado e execute a sequência de passos usuais para sua instalação em sistemas 64 bits:

A última linha serve para instalar possíveis dependências que impeçam a atualização. Para atualizar o team viewer, baixe o novo arquivo no site e instale usando o comando “dpkg” conforme linha acima.

Uma dica é criar uma conta para monitorar vários computadores. Na janela “computadores & contatos”, clique em “inscreva-se”, insira um nome de usuário individual, o seu endereço de e-mail e uma senha. Depois, você pode adicionar o computador que está usando ou remotos.

Para adicionar um computador remoto, esteja de posse da ID (9 dígitos) e da senha (4 dígitos, por padrão) do pc remoto. No seu computador local, vá na janela “computadores & contatos” e clique no botão que abre o link para o “Management Console”: uma página web para editar os computadores cadastrados na conta. Nele, clique em “adicionar -> adicionar computador remoto -> adicionar dispositivo existente” e insira ID, senha e algum nome para identificar facilmente seu PC. Como essa senha muda toda vez que reiniciar o Team Viewer, você precisa cadastrar uma senha fixa. No computador remoto, vá para o menu “extra” da janela principal (onde tem ID e senha), clique em opções, vá para a área “segurança”, coloque uma senha e clique OK. Voltando ao seu computador local, clique com o botão direito no nome do pc remoto, vá em “configurações” e então “propriedades” para apagar a senha antiga e colocar a que acabou de ser cadastrada no pc remoto.

Clique no link para ver mais como restringir o acesso ao seu computador que possui o Team Viewer instalado.

Caso o usuário remoto tenha deixado a tecla de CAPS LOCK ativada, não adiantar desativar usando o seu teclado. Será preciso usar o SHIFT para digitar as letras em minúscula. Use esse ‘truque’ para escrever a senha e logar. Para desativar a tecla, use o seguinte comando no terminal de texto:

A segunda linha é para reativar a tecla CAPS LOCK.

Para verificar os logs de acessos via teamviewer em seu computador, execute o comando “teamviewer -ziplog” como root, descompacte o arquivo gerado na pasta “/tmp” e abra os arquivos Connections_incoming.txt e Connections.txt

VNC

Sigla para Virtual Network Computing, é basicamente um sistema de exibição remota que permite visualizar um ambiente de computação “desktop” não apenas na máquina onde ele está sendo executado, mas a partir de qualquer lugar na Internet e de uma grande variedade de arquiteturas de máquinas. Também permite acesso via SSH, além do VNC. Deve ter uma versão instalado no PC servidor (vnc4server, no caso) e um visualizador no cliente (vinagre, por exemplo, que já vem com o Debian na instalação básica). Veja alguns passos para instalar e configurar um servidor no Debian 7 (serve também para ‘tightvncserver’ fazendo as devidas substituições de nome):

  1. Instalação: “apt-get install vnc4server”
  2. Tenha certeza de estar usando somente o vnc-server: “dpkg -l | grep vnc”
  3. Crie um usuário para utilizar o VNC (através do comando “adduser novo_usuario”) e alterne para ele (“su novo_usuario”)
  4. Mate eventuais processos rodando: “vncserver -kill :1”
  5. Altere/crie o arquivo “~/.vnc/xstartup” de modo a ter a linha “exec gnome-session &” no caso de ser uma interface gráfica gnome a ser utilizada. Descomente as linhas indicadas (geralmente “unset SESSION_MANAGER”). Existem outras opções mais incrementadas em outros sites.
  6. Para tornar executável no boot, edite o arquivo “/etc/init.d/vncserver” como super usuário para conter as seguintes linhas (existem outras versões):

    O cabeçalho foi incluído para tirar warnings do tipo “insserv: warning: script ‘vncserver’ missing LSB tags and overrides”.

  7. Torne o arquivo executável através de “chmod +x /etc/init.d/vncserver”
  8. Crie o arquivo de configuração “/etc/vncserver/vncservers.conf” (crie o diretório, se necessário “mkdir -p /etc/vncserver”) de modo a incluir as seguintes linhas para definir a resolução:

  9. Adicione à inicialização através do comando “update-rc.d vncserver defaults 99” e reinicie o PC (ou somente o serviço: “sudo /etc/init.d/tightvncserver start”).

Abra o “vinagre” no computador cliente, clique em “conectar”, escolha a opção SSH primeiro para testar a conexão e depois use a opção VNC em uma nova conexão, definindo IP é a janela (geralmente :1), assim como usuário e (depois) a senha definidos na instalação.

O tightvncserver é uma opção VNC para a Raspbery Pi – veja mais clicando no link.

Segurança

O pacote autolog fornece um programa que desconecta automaticamente usuários inativos depois de um atraso configurável. Ele também permite matar processos de usuário que persistem após o término da sessão, impedindo os usuários de executar daemons.

Existem algumas verificações que podem ser úteis para um monitoramento:

Os arquivos .bash_history do usuário e máquina utilizados oferecem informações muitas vezes interessantes, assim como os arquivos de log em /var/log/, que permitem reconstruir uma cronologia dos eventos. O comando strings ajuda a identificar programas instalados pelo atacante, extraindo sequências de texto de um binário; ferramentas special-purpose também permitem restaurar o conteúdo de arquivos potencialmente excluídos, incluindo arquivos de log que tenham sido excluídos.