Niektorí používatelia prenajímajú relatívne lacné VPS s Windows na spustenie služby vzdialených pracovných stolov. To isté je možné urobiť aj na Linuxe bez umiestnenia vlastného hardvéru v dátovom centre alebo prenájmu dedikovaného servera. Niekomu je potrebné známe grafické prostredie na testovanie a vývoj alebo vzdialený desktop s širokým prenosom na prácu z mobilných zariadení. Existuje množstvo možností použitia systému Virtual Network Computing (VNC) založeného na protokole Remote FrameBuffer (RFB). V malej článku vám ukážeme, ako ho nastaviť na virtuálnom stroji s akýmkoľvek hypervízorom.
Obsah:
Výber servera VNC
Služba VNC môže byť integrovaná do virtualizačného systému, pričom hypervízor ju prepojí s emulovanými zariadeniami, a teda nebude potrebná žiadna dodatočná konfigurácia. Táto možnosť predpokladá značné prevádzkové náklady a podporuje ju len máloktorý poskytovateľ — aj v menej náročnej implementácii, keď sa namiesto emulácie skutočného grafického zariadenia prevádza virtuálnemu stroju zjednodušená abstrakcia (framebuffer). Niekedy sa VNC server viaže na bežiaci X server, ale tento spôsob je vhodnejší na prístup k fyzickému stroju, zatiaľ čo na virtuálnom strojí vytvára množstvo technických komplikácií. Najjednoduchšie je nainštalovať VNC server so zabudovaným X serverom. Nepotrebuje fyzické zariadenia (grafická karta, klávesnica a myš) ani ich emuláciu pomocou hypervízora, a preto je vhodný pre VPS akéhokoľvek typu.
Inštalácia a nastavenie
Potrebujeme virtuálny stroj s Ubuntu Server 18.04 LTS v predvolenej konfigurácii. V štandardných repozitároch tohto distribútu je niekoľko VNC serverov: , , a ďalšie. Zastavili sme sa na TigerVNC — aktuálnom forku nepodporovaného vývojárom TightVNC. Nastavenie iných serverov sa vykonáva podobným spôsobom. Rovnako je potrebné vybrať prostredie pracovnej plochy: optimálnou voľbou je podľa nášho názoru XFCE kvôli relatívne nízkym požiadavkám na výpočtové zdroje. Tí, ktorí chcú, môžu nainštalovať iný DE alebo WM: tu všetko závisí od osobných preferencií, avšak výber softvéru priamo ovplyvňuje potrebu po operačnej pamäti a výpočtových jadrách.

Inštalácia prostredia pracovnej plochy so všetkými závislosťami sa vykonáva nasledujúcim príkazom:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsĎalej je potrebné nainštalovať server VNC:
sudo apt-get install tigervnc-standalone-server tigervnc-commonSpúšťať ho s oprávneniami superužívateľa nie je dobrý nápad. Vytvorte používateľa a skupinu:
sudo adduser vnc 
Pridáme používateľa do skupiny sudo, aby mohol riešiť úlohy súvisiace s administráciou. Ak nie je táto potreba, tento krok možno preskočiť:
sudo gpasswd -a vnc sudoV ďalšom kroku je potrebné spustiť server VNC s privilegiumami používateľa vnc, aby sa vytvorilo bezpečné heslo a konfiguračné súbory v adresári ~/.vnc/. Dĺžka hesla môže byť od 6 do 8 znakov (prebytočné znaky sa orezávajú). Ak je potrebné, môže sa tiež nastaviť heslo len na prezeranie, t. j. bez prístupu k klávesnici a myši. Nasledujúce príkazy sa vykonávajú menom používateľa vnc:
su - vnc
vncserver -localhost no 
Vo výchozom nastavení protokol RFB používa rozsah TCP-portov od 5900 do 5906 — to sú tzv. porty displeja, z ktorých každý zodpovedá obrazovke X-servera. Porty sú priradené k obrazovkám od :0 po :6. Spustený server VNC počúva na porte 5901 (obrazovka :1). Ďalšie inštancie môžu bežať na iných portoch s obrazovkami :2, :3 atď. Pred ďalšou konfiguráciou je potrebné server zastaviť:
vncserver -kill :1Príkaz by mal vypísať zhruba správu: „Killing Xtigervnc process ID 18105… success!“.
Pri spustení TigerVNC vykonáva skript ~/.vnc/xstartup na nastavenie konfiguračných parametrov. Vytvoríme si vlastný skript, na začiatku zálohujúci existujúci, ak existuje:
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartupSedenie prostredia pracovnej plochy XFCE sa spúšťa nasledujúcim skriptom xstartup:
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &Príkaz xrdb je potrebný na to, aby systém VNC prečítal súbor .Xresources v domácom adresári. Tam si používateľ môže definovať rôzne parametre grafického pracovného prostredia: rendering písma, farby terminálu, témy kurzora atď. Skript treba nastaviť ako vykonateľný:
chmod 755 ~/.vnc/xstartupTýmto je konfigurácia servera VNC dokončená. Ak ho spustíte príkazom vncserver -localhost no (menom používateľa vnc), môžete sa pripojiť s predtým zadaným heslom a vidieť nasledujúci obraz:

Spustenie služby cez systemd
Ručné spustenie servera VNC sa na bojové účely veľmi nehodí, preto si nastavíme systémovú službu. Príkazy sa vykonávajú pod menom root (používame sudo). Najprv vytvoríme nový jednotkový súbor pre náš server:
sudo nano /etc/systemd/system/vncserver@.serviceSymbol @ v názve umožňuje odovzdať argument na konfiguráciu služby. V našom prípade určuje port displeja VNC. Jednotkový súbor sa skladá z viacerých sekcií:
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=/home/vnc
PIDFile=/home/vnc/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.targetPotom je potrebné informovať systemd o novom súbore a aktivovať ho:
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.serviceČíslo 1 v názve určuje číslo obrazovky.
Zastavíme server VNC, spustíme ho ako službu a skontrolujeme stav:
# от имени пользователя vnc
vncserver -kill :1# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1Ak služba beží, mali by sme získať približne takýto výsledok.

Pripojenie k desktopu
Naša konfigurácia nevyužíva šifrovanie, takže sieťové pakety môžu byť zachytené útočníkmi. Okrem toho sa na serveroch VNC pomerne často , a preto ich neodporúčame otvárať pre prístup z internetu. Pre bezpečné pripojenie na lokálnom počítači je potrebné zabaliť prenos do SSH tunela a potom nastaviť klienta VNC. Pod Windows môžete použiť grafického klienta SSH (napríklad PuTTY). Pre bezpečnosť TigerVNC na serveri počúva iba na localhost a nie je prístupný priamo z verejných sietí:
sudo netstat -ap |more 
V Linuxe, FreeBSD, OS X a iných unixových systémoch sa tunel z klientského počítača vykonáva pomocou nástroja ssh (na serveri VNC musí bežať sshd):
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ipMožnosť -L viaže port 5901 vzdialeného pripojenia na port 5901 na localhost. Možnosť -C zapína kompresiu a -N hovorí nástroju ssh, že nie je potrebné vykonávať vzdialenú príkazovú operáciu. Možnosť -l určuje prihlasovacie meno pre vzdialený prístup.
Po nastavení tunelu na lokálnom počítači je potrebné spustiť klienta VNC a pripojiť sa k hostiteľovi 127.0.0.1:5901 (localhost:5901) pomocou hesla, ktoré sme predtým nastavili pre prístup k VNC serveru. Teraz môžeme bezpečne interagovať cez šifrovaný tunel s grafickým prostredím pracovného stola XFCE na VPS. Na obrazovke emulátora terminálu je spustený nástroj top, aby sme ukázali minimálnu spotrebu výpočtových zdrojov virtuálnou strojom. Ďalej to všetko závisí od používateľských aplikácií.

Nastaviť a nakonfigurovať server VNC na Linuxe je možné prakticky na akomkoľvek VPS. Na to nie sú potrebné nákladné a náročné konfigurácie s emuláciou grafickej karty alebo nákup komerčných licencií na softvér. Okrem nami preberaného variantu systémovej služby existujú aj iné: spúšťanie v režime démona (cez /etc/rc.local) pri štarte systému alebo na požiadanie cez inetd. Posledný variant je zaujímavý pre vytváranie viacužívateľských konfigurácií. Internetový superserver spustí server VNC a spojí ho s klientom, pričom VNC server vytvorí novú obrazovku a začne reláciu. Na autentifikáciu v jej rámci je možné použiť grafický displejový manažér (napríklad, ), a po odpojení klienta bude relácia uzavretá a všetky programy pracujúce s obrazovkou budú ukončené.
Zdroj: habr.com
