VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04
Деякі користувачі орендують відносно недорогі VPS із Windows для запуску сервісу віддалених робочих столів. Те саме можна зробити і на Linux без розміщення в датацентрі власного заліза або оренди виділеного сервера. Комусь потрібне звичне графічне середовище для тестів та розробки або віддалений десктоп із широким каналом для роботи з мобільних пристроїв. Є безліч варіантів застосування заснованої на протоколі Remote FrameBuffer (RFB) системи Virtual Network Computing (VNC). У невеликій статті ми розповімо, як налаштувати її на віртуальній машині з будь-яким гіпервізором.

Зміст:

Вибір сервера VNC
Встановлення та налаштування
Запуск служби через systemd
Підключення до робочого столу

Вибір сервера VNC

Сервіс VNC може бути вбудований у систему віртуалізації, при цьому гіпервізор зв'яже його з емульованими пристроями і ніякого додаткового налаштування не потрібно. Цей варіант передбачає значні накладні витрати і підтримується далеко не всіма провайдерами — навіть менш ресурсомісткою реалізації, коли замість емуляції реального графічного пристрою віртуальній машині передається спрощена абстракція (фреймбуфер). Іноді VNC-сервер прив'язується до працюючого X-сервера, але цей спосіб більше підходить для доступу до фізичної машини, а на віртуальній він створює низку технічних складнощів. Найпростіше встановити VNC-сервер із вбудованим X-сервером. Він не вимагає наявності фізичних пристроїв (відеоадаптера, клавіатури та миші) або їх емуляції за допомогою гіпервізора, тому підходить для VPS будь-якого типу.

Встановлення та налаштування

Нам потрібна віртуальна машина з Ubuntu Server 18.04 LTS у конфігурації за промовчанням. У стандартних репозиторіях цього дистрибутива є кілька серверів VNC: TightVNC, TigerVNC, x11vnc та інші. Ми зупинилися на TigerVNC - актуальному форку TightVNC, що не підтримується розробником. Налаштування інших серверів виконується подібним чином. Також потрібно вибрати оточення робочого столу: оптимальним, на наш погляд, варіантом буде XFCE через відносно невисокі вимоги до обчислювальних ресурсів. Бажаючі можуть встановити інший DE або WM: тут все залежить від особистих переваг, проте вибір ПЗ безпосередньо впливає на потребу в оперативній пам'яті та обчислювальних ядрах.

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04

Встановлення оточення робочого столу з усіма залежностями виконується наступною командою:

sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils

Далі необхідно інсталювати сервер VNC:

sudo apt-get install tigervnc-standalone-server tigervnc-common

Запускати його з правами суперкористувача – погана ідея. Створюємо користувача та групу:

sudo adduser vnc

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04

Додамо користувача до групи sudo, щоб він міг вирішувати пов'язані з адмініструванням завдання. Якщо такої потреби немає, цей крок можна пропустити:

sudo gpasswd -a vnc sudo

На наступному кроці потрібно запустити сервер VNC із привілеями користувача vnc, щоб створити безпечний пароль та конфігураційні файли в каталозі ~/.vnc/. Довжина пароля може бути від 6 до 8 символів (зайві обрізаються). За потреби також задається пароль лише перегляду, тобто. без доступу до клавіатури та миші. Наступні команди виконуються від імені користувача vnc:

su - vnc
vncserver -localhost no

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04
За замовчуванням протокол RFB використовує діапазон TCP-портів від 5900 до 5906 це т.зв. порти дисплея, кожен із яких відповідає екрану X-сервера. При цьому порти асоційовані з екранами від :0 до :6. Запущений екземпляр сервера VNC слухає порт 5901 (екран :1). Інші екземпляри можуть працювати на інших портах з екранами :2, :3 і т. д. Перед подальшим налаштуванням потрібно зупинити сервер:

vncserver -kill :1

Команда повинна вивести приблизно таке повідомлення: Killing Xtigervnc process ID 18105 ... success!

При запуску TigerVNC виконує сценарій ~/.vnc/xstartup для налаштування параметрів конфігурації. Створимо власний скрипт, попередньо зберігши резервну копію існуючого, якщо він існує:

mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup

Сеанс оточення робочого столу XFCE запускається наступним скриптом xstartup:

#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &

Команда xrdb потрібна, щоб система VNC прочитала файл .Xresources у домашньому каталозі. Там користувач може визначити різні параметри графічного робочого столу: рендеринг шрифтів, кольори терміналу, курсорні теми і т.д. Сценарій необхідно зробити таким, що виконується:

chmod 755 ~/.vnc/xstartup

На цьому налаштування сервера VNC завершено. Якщо запустити його командою vncserver -localhost no (від імені користувача vnc), можна буде підключитися із заданим паролем і побачити таку картину:

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04

Запуск служби через systemd

Ручний запуск сервера VNC погано підходить для бойового застосування, тому ми настроїмо системну службу. Команди виконуються від імені root (використовуємо sudo). Для початку створюємо новий юніт-файл для нашого сервера:

sudo nano /etc/systemd/system/[email protected]

Символ @ в імені дозволяє передавати аргумент для налаштування служби. У нашому випадку він задає порт VNC-дисплея. Юніт-файл складається з кількох розділів:

[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.target

Потім потрібно повідомити systemd про появу нового файлу та активувати його:

sudo systemctl daemon-reload
sudo systemctl enable [email protected]

Цифра 1 вказує номер екрана.

Зупиняємо сервер VNC, запускаємо його як службу та перевіряємо статус:

# от имени пользователя vnc 
vncserver -kill :1

# с привилегиями суперпользователя
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1

Якщо служба працює, ми маємо отримати приблизно такий результат.

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04

Підключення до робочого столу

Наша конфігурація не використовує шифрування, тому мережні пакети можуть бути перехоплені зловмисниками. До того ж у VNC-серверах досить часто знаходять уразливостітак що відкривати їх для доступу з інтернету не варто. Для безпечного підключення на локальному комп'ютері потрібно запакувати трафік у тунель SSH, а потім налаштувати клієнт VNC. Під Windows можна використовувати графічний клієнт SSH (наприклад PuTTY). Для безпеки TigerVNC на сервері слухає лише localhost і недоступний безпосередньо з мереж загального користування:


sudo netstat -ap |more

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04
У Linux, FreeBSD, OS X та інших UNIX-подібних ОС тунель з клієнтського комп'ютера робиться за допомогою утиліти ssh (на сервері VNC має бути запущений sshd):

ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip

Опція -L прив'язує порт 5901 віддаленого підключення до порту 5901 localhost. Опція -C включає стиснення, а -N вказує на утиліту ssh на відсутність необхідності виконувати віддалену команду. Опція -l визначає login для віддаленого входу в систему.

Після налаштування тунелю на локальному комп'ютері необхідно запустити клієнт VNC та встановити з'єднання з хостом 127.0.0.1:5901 (localhost:5901), використовуючи для доступу до сервера VNC заданий пароль. Тепер ми можемо безпечно взаємодіяти через шифрований тунель із графічним оточенням робочого столу XFCE на VPS. На скріншоті в емуляторі терміналу запущено утиліту top, щоб показати незначне споживання віртуальною машиною обчислювальних ресурсів. Далі все буде залежати від додатків користувача.

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04
Встановити та налаштувати сервер VNC у Linux можна практично на будь-якому VPS. Для цього не потрібні дорогі та ресурсомісткі конфігурації з емуляцією відеоадаптера або придбання комерційних ліцензій на програмне забезпечення. Крім розглянутого нами варіанта системної служби, є й інші: запуск у режимі демона (через /etc/rc.local) при завантаженні системи або на вимогу через inetd. Останній цікавий для створення розрахованих на багато користувачів конфігурацій. Інтернет-суперсервер запустить сервер VNC та зв'яже з ним клієнта, а VNC-сервер створить новий екран та розпочне сесію. Для автентифікації в ній можна використовувати графічний дисплейний менеджер (наприклад, LightDM), а після відключення клієнта сесія буде закрита і всі програми, що працюють з екраном, завершені.

VPS на Linux із графічним інтерфейсом: запускаємо сервер VNC на Ubuntu 18.04

Джерело: habr.com

Додати коментар або відгук