
No artigo anterior, abordamos a execução de um servidor VNC em qualquer tipo de máquina virtual. Esta opção tem muitas desvantagens, sendo a principal delas os elevados requisitos de largura de banda dos canais de transmissão de dados. Hoje vamos tentar conectar a uma área de trabalho Linux gráfica usando RDP (Remote Desktop Protocol). O VNC é baseado na transmissão de arrays de pixels usando o protocolo RFB (Remote Framebuffer), enquanto o RDP permite o envio de primitivos gráficos mais complexos e comandos de alto nível. É comumente usado para organizar Serviços de Área de Trabalho Remota no Windows, mas servidores para Linux também estão disponíveis.
Índice:
Instalando o ambiente gráfico
Server Russification e
instalação de software Instalando e configurando o servidor RDP
Configurando o firewall
Conectando ao servidor RDP
Gerenciador de sessão e sessões de usuário
Mudando layouts de teclado
Instalando um ambiente gráfico
Usaremos uma máquina virtual executando o Ubuntu Server 18.04 LTS com dois núcleos de processamento, quatro gigabytes de RAM e uma unidade de disco rígido (HDD) de vinte gigabytes. Uma configuração mais fraca é pouco adequada para um desktop gráfico, embora dependa das tarefas que estão sendo resolvidas. Não se esqueça de usar o código promocional Habrahabr10 para obter um desconto de 10% na compra.

A instalação do ambiente de desktop com todas as dependências é feita com o seguinte comando:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
Como no caso anterior, escolhemos o XFCE devido aos seus requisitos computacionais relativamente baixos.
Russificação de servidor e instalação de software
Freqüentemente, as máquinas virtuais são implantadas apenas com a localização em inglês. Na área de trabalho, você pode precisar do russo, o que não é difícil de configurar. Primeiro, vamos instalar traduções para programas de sistema:
sudo apt-get install language-pack-ru
Vamos configurar a localização:
sudo update-locale LANG=ru_RU.UTF-8
Você pode obter o mesmo efeito editando manualmente o / etc / default / locale.
Para localizar GNOME e KDE, o repositório contém language-pack-gnome-ru e language-pack-kde-ru - você precisará deles se for usar programas desses ambientes de desktop. No XFCE, as traduções são instaladas junto com os aplicativos. Em seguida, você pode instalar dicionários:
#
sudo apt-get install hunspell hunspell-ru
# LibreOffice
sudo apt-get install mythes-ru
# - DICT
sudo apt-get install mueller7-dict
Além disso, a instalação de traduções pode ser necessária para alguns aplicativos:
# Firefox
sudo apt-get install firefox firefox-locale-ru
# Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ru
Isso conclui a preparação do ambiente de desktop, resta configurar o servidor RDP.
Instalando e configurando o servidor RDP
Há um servidor Xrdp gratuito nos repositórios do Ubuntu, que usaremos:
sudo apt-get install xrdp
Se tudo correr bem, o servidor deve iniciar automaticamente:
sudo systemctl status xrdp

O servidor Xrdp é iniciado como o usuário xrdp e, por padrão, recebe o certificado /etc/ssl/private/ssl-cert-snakeoil.key, que você pode substituir pelo seu. Para ler o arquivo, adicione o usuário ao grupo ssl-cert:
sudo adduser xrdp ssl-cert
As configurações padrão podem ser encontradas no arquivo / etc / default / xrdp, enquanto todos os outros arquivos de configuração do servidor estão localizados no diretório / etc / xrdp. Os parâmetros principais estão no arquivo xrdp.ini, que pode ser deixado inalterado. A configuração está bem documentada e existem páginas de manual correspondentes no kit:
man xrdp.ini
man xrdp
Resta apenas editar o script /etc/xrdp/startwm.sh, que é executado ao inicializar a sessão do usuário. Primeiro, vamos fazer uma cópia de backup do script da distribuição:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.sh
Para iniciar o ambiente de desktop XFCE, você precisa de um script semelhante ao seguinte:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4
Observação: é melhor escrever o caminho completo para arquivos executáveis em scripts - este é um bom hábito. Vamos tornar o script executável e a configuração do servidor Xrdp pode ser considerada completa:
sudo chmod 755 /etc/xrdp/startwm.sh
Reiniciamos o servidor:
sudo systemctl restart xrdp
Configuração de firewall
Por padrão, o Xrdp escuta na porta TCP 3389 em todas as interfaces. Dependendo da configuração do servidor virtual, você pode precisar configurar o firewall Netfilter. No Linux, isso geralmente é feito usando o utilitário iptables, mas no Ubuntu é melhor usar ufw. Se o endereço IP do cliente for conhecido, a configuração é feita com o seguinte comando:
sudo ufw allow from IP_Address to any port 3389
Você pode permitir conexões de qualquer IP da seguinte maneira:
sudo ufw allow 3389
O RDP suporta criptografia, mas não é uma boa ideia expor o servidor Xrdp de redes públicas. Se o cliente não tiver um IP fixo, o servidor deve escutar apenas o host local para aumentar a segurança. É melhor acessado por meio de um túnel SSH, que roteará com segurança o tráfego do computador cliente. Usamos uma abordagem semelhante no artigo anterior para o servidor VNC.
Conectando-se ao servidor RDP
Para trabalhar com o ambiente de desktop, é melhor criar um usuário sem privilégios separado:
sudo adduser rdpuser

Vamos adicionar o usuário ao grupo sudo para que ele possa resolver tarefas relacionadas à administração. Se não houver essa necessidade, você pode pular esta etapa:
sudo gpasswd -a rdpuser sudo
Você pode se conectar ao servidor usando qualquer cliente RDP, incluindo o cliente integrado de Serviços de Área de Trabalho Remota do Windows. Se o Xrdp estiver ouvindo em uma interface externa, nenhum gesto adicional será necessário. Basta especificar o endereço IP do VPS, nome de usuário e senha nas configurações de conexão. Depois de conectar, veremos algo assim:

Após a configuração inicial do ambiente de área de trabalho, obteremos uma área de trabalho completa. Como você pode ver, não consome tantos recursos, embora tudo dependa dos aplicativos utilizados.

Se o servidor Xrdp escuta apenas localhost, o tráfego no computador cliente terá que ser compactado em um túnel SSH (o sshd deve estar em execução no VPS). No Windows, você pode usar um cliente SSH gráfico (por exemplo, PuTTY), e em sistemas UNIX, você precisa do utilitário ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ip
Depois de inicializar o túnel, o cliente RDP não se conectará mais ao servidor remoto, mas ao host local.
Com dispositivos móveis, é mais difícil: clientes SSH capazes de aumentar o túnel terão que ser comprados, além disso, em iOS e iPadOS, o trabalho em segundo plano de aplicativos de terceiros é difícil devido a uma otimização de energia muito boa. No iPhone e no iPad, não funcionará para aumentar o túnel em um aplicativo separado - você precisa de um aplicativo de combinação, que por si só é capaz de estabelecer uma conexão RDP via SSH. Como, por exemplo, Remoter Pro .
Gerenciador de sessão e sessões de usuário
A capacidade multiusuário é implementada diretamente no servidor Xrdp e não requer configuração adicional. Depois de iniciar o serviço por meio do systemd, um processo é executado no modo daemon, escuta na porta 3389 e se comunica por meio do host local com o gerenciador de sessão.
ps aux |grep xrdp

sudo netstat -ap |grep xrdp

O gerenciador de sessão geralmente não é visível para os usuários, porque o login e a senha especificados nas configurações do cliente são transferidos para ele automaticamente. Se isso não aconteceu ou ocorreu um erro durante a autenticação, uma janela de login interativa aparecerá em vez da área de trabalho.

O início automático do gerenciador de sessão é registrado no arquivo / etc / default / xrdp e a configuração é armazenada em /etc/xrdp/sesman.ini. Por padrão, é assim:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]
Você não pode deixar nada aqui, você só precisa desabilitar o login de root (AllowRootLogin = false). Para cada usuário conectado ao sistema, um processo xrdp separado é iniciado: se você desconectar sem encerrar a sessão, os processos do usuário continuarão funcionando por padrão e você poderá se reconectar à sessão. As configurações podem ser alteradas no arquivo /etc/xrdp/sesman.ini (seção [Sessões]).
Alternando layouts de teclado
Com uma área de transferência de dois lados, normalmente não surgem problemas, mas com o layout do teclado russo você terá que mexer um pouco (o local em russo já deve estar instalado ). Vamos editar as configurações do teclado do servidor Xrdp:
sudo nano /etc/xrdp/xrdp_keyboard.ini
As seguintes linhas devem ser adicionadas ao final do arquivo de configuração:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ru
Resta salvar o arquivo e reiniciar o Xrdp:
sudo systemctl restart xrdp
Como você pode ver, não é difícil configurar um servidor RDP em um VPS Linux e, no artigo anterior , já discutimos a configuração do VNC. Além dessas tecnologias, existe outra opção interessante: o sistema X2Go usando um protocolo NX 3 modificado. Trataremos disso na próxima publicação.
