пятница, 8 мая 2015 г.

Быстрый и удобный способ развернуть VNC сервер

VNC (терминальный, если угодно) доступ к машине на Linux, особенно когда эта машина используется в качестве сервера, в некоторых случаях намного предпочтительней ssh доступа. Поэтому для внутренних серверов я практически всегда настраиваю доступ по VNC.

Я реализую вариант работы через сервер xinetd, который прослушивает стандартный для VNC сессий порт 5900. При попытке соединения на этот порт xinetd запустит сервер VNC, а по завершению соединения закроет сервер и все программы. Таким образом при отсутствии активных соединений сервер и программы не будут висеть в памяти. Получится такой вот "терминальный" сервер.

Установка программ
В Debian предлагают на выбор два варианта VNC севера:

  1. vnc4server
  2. tightvncserver

Я воспользуюсь последним.
Помимо VNC-сервера, потребуются сам xinetd  и менеджер дисплеев, в моём случае это LightDM, поскольку я использую XFCE, а kdm и gdm тянут за собой просто тонны зависимостей KDE и Gnome соответственно.
sudo aptitude install tightvncserver xinetd lightdm
Настройка xinetd
Перво-наперво прописывает запуск супер-сервера при старте системы:
sudo systemctl enable xinetd
Для всех серверов которыми должен управлять xinetd в каталоге /etc/xinetd.d/ создаются конфигурационные файлы. Создадим такой файл для VNC-сервера:
sudo nano /etc/xinetd.d/vnc
со следующим содержимым:
 service vnc
{
   disable     = no
   socket_type = stream
   protocol    = tcp
   wait        = no
   user        = nobody
   server      = /usr/bin/Xvnc
   server_args = -inetd -once -query localhost -geometry 1024x768 -depth 16
   type        = UNLISTED
   port        = 5900
}
где
service vnc - название сервера, мы можем сделать несколько VNC-серверов с разными параметрами;
server  - путь к двоичному файлу который супер-сервер будет вызывать;
server_args - это аргументы с которыми будет сервер вызываться;
port - ну и порт который суперсервер будет слушать.

С какими же параметрами будут запускаться сессии VNC-сервера:
inetd - обязательный параметр для сервера VNC, сигнализирующий о том, что он запускается под управлением xinetd;
once - параметр выключающий VNC-сервер по завершению сессии;
query localhost - параметр указывающий что авторизация будет проводиться на локальной для VNC-сервере машине;
geometry - размер экрана для сессии, устанавливается из соображений удобства клиента и никак не зависит от уставленного в настройках сервера разрешения.
depth - глубина цвета от 2 до 32 bit. Меньше 16-ти появляются искажения цветов, для работы в локальной сети меньше ставить смысла нет.
Эти параметры относятся именно к используемому VNC серверу, так что их список может меняться от версии и выбранного сервера.

Настройка менеджера дисплеев LightDM
Необходимо активировать функцию XDMCP сервера в настройках менеджера дисплея, чтобы он мог авторизовывать удаленно подключающихся пользователей, а не только пользователей локальной консоли. Для этого раскомментрируем и изменим значение параметра в блоке [XDMCPServer] файла /etc/lightdm/lightdm.conf, приведя блок к виду:
[XDMCPServer]
enabled=true
port=177
#key=
Перезапуск серверов с новыми параметрами
Для этого выполняем команды:
sudo /etc/init.d/xinetd restart
sudo /etc/init.d/lightdm restart
Всё, теперь есть доступ к серверу по протоколу VNC. Правда мы еще не предпринимали никаких мер по обеспечению безопасности, прошу учесть что протокол VNC относится к небезопасным, поэтому будет продолжение.

Если возникли вопросы или замечания, вы как всегда можете прислать их мне на электронную почту kpa39l@yandex.ru