В Herhangi bir sanal makinede VNC sunucusu çalıştırmayı tartıştık. Bu seçeneğin birçok dezavantajı vardır; bunlardan en önemlisi, veri iletim kanallarının verimi için yüksek gereksinimlerdir. Bugün Linux üzerinde grafiksel bir masaüstüne RDP (Uzak Masaüstü Protokolü) aracılığıyla bağlanmayı deneyeceğiz. VNC sistemi, RFB (Uzak Çerçeve Arabelleği) protokolünü kullanarak piksel dizilerinin iletilmesine dayanır ve RDP, daha karmaşık grafik temelleri ve üst düzey komutlar göndermenize olanak tanır. Genellikle Windows'ta Uzak Masaüstü Hizmetlerini barındırmak için kullanılır, ancak Linux için sunucular da mevcuttur.
İçindekiler:
Grafik ortamının kurulumu
İki bilgi işlem çekirdeği, dört gigabayt RAM ve yirmi gigabayt sabit sürücüye (HDD) sahip Ubuntu Server 18.04 LTS içeren bir sanal makine alacağız. Daha zayıf bir yapılandırma, grafiksel masaüstü için uygun değildir, ancak bu, çözülen görevlere bağlıdır. Siparişinizde %10 indirim kazanmak için Habrahabr10 promosyon kodunu kullanmayı unutmayın.

Masaüstü ortamının tüm bağımlılıklarla kurulumu aşağıdaki komutla yapılır:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsÖnceki durumda olduğu gibi, nispeten düşük bilgi işlem kaynağı gereksinimleri nedeniyle XFCE'yi seçtik.
Sunucunun Ruslaştırılması ve yazılım kurulumu
Çoğu zaman sanal makineler yalnızca İngilizce yerelleştirmeyle dağıtılır. Masaüstünde kurulumu kolay olan Rusçaya ihtiyacınız olabilir. Öncelikle sistem programlarının çevirilerini yükleyelim:
sudo apt-get install language-pack-ruYerelleştirmeyi ayarlayalım:
sudo update-locale LANG=ru_RU.UTF-8Aynı etki, /etc/default/locale.d dosyasını manuel olarak düzenleyerek de elde edilebilir.
GNOME ve KDE'nin yerelleştirilmesi için depoda language-pack-gnome-ru ve language-pack-kde-ru paketleri bulunur; bu masaüstü ortamlarındaki programları kullanıyorsanız bunlara ihtiyacınız olacaktır. XFCE'de çeviriler uygulamalarla birlikte yüklenir. Daha sonra sözlükleri yükleyebilirsiniz:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictAyrıca bazı uygulama programları için çevirilerin yüklenmesi gerekebilir:
# Браузер 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-ruBu, masaüstü ortamının hazırlanmasını tamamlar, geriye kalan tek şey RDP sunucusunu yapılandırmaktır.
RDP sunucusunu kurma ve yapılandırma
Ubuntu depolarında kullanacağımız serbestçe dağıtılmış bir Xrdp sunucusu vardır:
sudo apt-get install xrdpHer şey yolunda giderse sunucu otomatik olarak başlamalıdır:
sudo systemctl status xrdp 
Xrdp sunucusu, xrdp kullanıcı haklarıyla çalışır ve varsayılan olarak /etc/ssl/private/ssl-cert-snakeoil.key sertifikasını alır; bu sertifika, kendinizinkiyle değiştirilebilir. Dosyayı okuma erişimine sahip olmak için kullanıcıyı SSL-cert grubuna eklemeniz gerekir:
sudo adduser xrdp ssl-certVarsayılan ayarlar /etc/default/xrdp dosyasında bulunabilir ve diğer tüm sunucu yapılandırma dosyaları /etc/xrdp dizininde bulunur. Ana parametreler xrdp.ini dosyasındadır ve değiştirilmesine gerek yoktur. Yapılandırma iyi bir şekilde belgelenmiştir ve ilgili kılavuz sayfaları eklenmiştir:
man xrdp.ini
man xrdpGeriye kalan tek şey, kullanıcı oturumu başlatıldığında çalıştırılan /etc/xrdp/startwm.sh betiğini düzenlemektir. Öncelikle dağıtımdaki betiğin yedek kopyasını oluşturalım:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shXFCE masaüstü ortamını başlatmak için şunun gibi bir komut dosyasına ihtiyacınız olacak:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4Lütfen unutmayın: komut dosyalarında yürütülebilir dosyaların tam yolunu yazmak daha iyidir - bu iyi bir alışkanlıktır. Betiği çalıştırılabilir hale getirelim ve bu noktada Xrdp sunucusunun kurulumu tamamlanmış sayılabilir:
sudo chmod 755 /etc/xrdp/startwm.shSunucuyu yeniden başlatın:
sudo systemctl restart xrdp
Güvenlik duvarı kurma
Xrdp varsayılan olarak tüm arayüzlerde TCP bağlantı noktası 3389'u dinler. Sanal sunucu konfigürasyonuna bağlı olarak Netfilter güvenlik duvarı yapılandırmanız gerekebilir. Linux'ta bu genellikle iptables yardımcı programı kullanılarak yapılır, ancak Ubuntu'da ufw kullanmak daha iyidir. İstemcinin IP adresi biliniyorsa aşağıdaki komutla yapılandırma gerçekleştirilir:
sudo ufw allow from IP_Address to any port 3389Herhangi bir IP'den bağlantılara şu şekilde izin verebilirsiniz:
sudo ufw allow 3389RDP protokolü şifrelemeyi destekler, ancak Xrdp sunucusunu genel ağlara açmak kötü bir fikirdir. İstemcinin sabit bir IP'si yoksa, güvenliği artırmak için sunucunun yalnızca localhost'u dinlemesi gerekir. Trafiği istemci bilgisayardan güvenli bir şekilde yönlendirecek bir SSH tüneli aracılığıyla erişmek en iyisidir. Benzer bir yaklaşımımız var VNC sunucusu için.
Bir RDP sunucusuna bağlanma
Masaüstü ortamıyla çalışmak için ayrı bir ayrıcalıksız kullanıcı oluşturmak daha iyidir:
sudo adduser rdpuser 
Kullanıcıyı yönetimle ilgili görevleri gerçekleştirebilmesi için sudo grubuna ekleyelim. Böyle bir ihtiyaç yoksa bu adımı atlayabilirsiniz:
sudo gpasswd -a rdpuser sudoYerleşik Windows Uzak Masaüstü Hizmetleri istemcisi de dahil olmak üzere herhangi bir RDP istemcisini kullanarak sunucuya bağlanabilirsiniz. Xrdp harici arayüzü dinliyorsa ek bir işlem yapılmasına gerek kalmayacaktır. Bağlantı ayarlarında VPS IP adresini, kullanıcı adını ve şifresini belirtmeniz yeterlidir. Bağlandıktan sonra şöyle bir şey göreceğiz:

Masaüstü ortamının ilk kurulumundan sonra tam teşekküllü bir masaüstüne sahip olacağız. Gördüğünüz gibi her şey kullanılan uygulamalara bağlı olsa da çok fazla kaynak tüketmiyor.

Xrdp sunucusu yalnızca localhost'u dinliyorsa, istemci bilgisayardaki trafiğin bir SSH tüneline paketlenmesi gerekecektir (sshd'nin VPS'de çalışıyor olması gerekir). Windows'ta grafiksel bir SSH istemcisi (örneğin, PuTTY) kullanabilirsiniz ve UNIX sistemlerinde ssh yardımcı programına ihtiyacınız vardır:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipTünel başlatıldıktan sonra, RDP istemcisi artık uzak sunucuya değil, yerel ana bilgisayara bağlanacaktır.
Mobil cihazlarda bu daha zordur: Tüneli yükseltebilen SSH istemcilerinin satın alınması gerekecektir ve iOS ve iPadOS'ta, enerji tüketiminin çok iyi optimizasyonu nedeniyle üçüncü taraf uygulamaların arka planda çalışması zordur. iPhone ve iPad'de ayrı bir uygulamada tünel oluşturamayacaksınız; SSH aracılığıyla kendisi RDP bağlantısı kurabilen bir hasat uygulamasına ihtiyacınız olacak. Mesela .
Oturum Yöneticisi ve Kullanıcı Oturumları
Çok kullanıcılı çalışma yeteneği doğrudan Xrdp sunucusunda uygulanır ve ek yapılandırma gerektirmez. Hizmeti systemd aracılığıyla başlattıktan sonra, bir işlem daemon modunda çalışır, 3389 numaralı bağlantı noktasını dinler ve localhost aracılığıyla oturum yöneticisiyle iletişim kurar.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Oturum yöneticisi genellikle kullanıcılar tarafından görülmez, çünkü istemci ayarlarında belirtilen kullanıcı adı ve şifre ona otomatik olarak aktarılır. Bu olmazsa veya kimlik doğrulama sırasında bir hata oluşursa masaüstü yerine etkileşimli bir oturum açma penceresi görünecektir.

Oturum yöneticisinin otomatik başlatılması /etc/default/xrdp dosyasında belirtilir ve yapılandırma /etc/xrdp/sesman.ini dosyasında saklanır. Varsayılan olarak şuna benzer:
[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]Burada hiçbir şeyi değiştirmenize gerek yok, sadece kök haklarıyla oturum açmayı devre dışı bırakmanız gerekiyor (AllowRootLogin=false). Sistemde yetkilendirilen her kullanıcı için ayrı bir xrdp işlemi başlatılır: Oturumu sonlandırmadan bağlantıyı keserseniz, kullanıcı işlemleri varsayılan olarak çalışmaya devam eder ve oturuma tekrar bağlanabilirsiniz. Ayarlar /etc/xrdp/sesman.ini dosyasından ([Oturumlar] bölümü) değiştirilebilir.
Klavye düzenlerini değiştirme
Genellikle iki yönlü bir panoda sorun yoktur, ancak Rusça klavye düzeniyle biraz oynamanız gerekecektir (Rusça yerel ayarı zaten olmalıdır) ). Xrdp sunucusunun klavye ayarlarını düzenleyelim:
sudo nano /etc/xrdp/xrdp_keyboard.iniYapılandırma dosyasının sonuna aşağıdaki satırları eklemeniz gerekir:
[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,ruGeriye kalan tek şey dosyayı kaydetmek ve Xrdp'yi yeniden başlatmak:
sudo systemctl restart xrdpGördüğünüz gibi Linux VPS üzerinde RDP sunucusu kurmak zor değil ancak VNC kurulumunu zaten tartıştık. Bu teknolojilere ek olarak ilginç bir seçenek daha var: değiştirilmiş bir NX 3 protokolünü kullanan X2Go sistemi. Bir sonraki yayında bunu ele alacağız.
Kaynak: habr.com
