Установка TigerVNC на Rocky Linux и безопасное подключение по SSH
Введение

Virtual Network Computing (VNC) — это протокол удалённого доступа к графическому интерфейсу (GUI). VNC пересылает события клавиатуры и мыши и обновляет экран клиента с помощью протокола Remote Frame Buffer (RFB). Типичные сценарии использования: техническая поддержка удалённых рабочих столов и доступ к рабочему ПК из дома.
В этом материале вы пройдёте полный цикл: подготовка сервера, установка XFCE, установка и инициализация TigerVNC, настройка systemd‑сервисов, настройка firewalld и подключение через защищённый SSH‑туннель. Материал ориентирован на Rocky Linux 8/9.
Important: используйте непользовательскую (non-root) учётную запись для запуска VNC‑серверов — это упрощает управление и повышает безопасность.
Что такое XFCE и TigerVNC (одно предложение)
XFCE — лёгкая, быстрая графическая среда; TigerVNC — реализация сервера и клиента VNC с поддержкой современных RFB‑функций.
Основные варианты использования
- Техническая поддержка рабочих столов.
- Доступ к офисному рабочему столу из дома через SSH/VPN.
- Лёгкие виртуальные рабочие столы для сервисных приложений.
Предварительные требования
- Сервер с Rocky Linux 8.x или 9.x.
- Непользовательская учётная запись с sudo‑привилегиями.
- Активный firewalld (рекомендуется).
- Доступ по SSH к серверу (порт 22 или кастомный).
Быстрый план действий
- Обновить систему и установить EPEL.
- Установить XFCE и Xorg (base-x).
- Создать непользовательского пользователя (например, jane) и добавить в wheel при необходимости.
- Установить tigervnc-server, инициализировать vncserver под пользователем, отредактировать ~/.vnc/config.
- Добавить запись :N=user в /etc/tigervnc/vncserver.users.
- Перезагрузить daemon systemd, запустить и включить vncserver@:N.service.
- Открыть правила в firewalld или предпочесть SSH‑туннель (более безопасно).
Установка графической среды (XFCE)
По умолчанию Rocky Linux устанавливается без GUI. Для VNC‑серверов рекомендуется лёгкая среда типа XFCE — она быстрее и экономнее по ресурсам.
Перед установкой обновите систему:
sudo dnf updateДобавьте репозиторий EPEL:
sudo dnf install epel-releaseУстановите XFCE и пакетную группу base-x (Xorg):
sudo dnf groupinstall "Xfce" "base-x"Подтвердите установку и затем включите графический режим по умолчанию:
sudo systemctl set-default graphicalЕсли вы не планируете запускать GUI при обычной загрузке сервера, можно пропустить set-default и запускать GUI только на виртуальных сеансах VNC.
Создание пользователя для VNC
Для безопасности создайте отдельного пользователя, который будет запускать VNC:
sudo useradd -m -s /bin/bash jane
sudo passwd janeЕсли пользователю нужны привилегии sudo:
sudo usermod -aG wheel jane
Важно: пароль VNC и системный пароль — разные вещи. Никогда не передавайте пароли по незашифрованным каналам.
Установка TigerVNC
Установите пакет сервера VNC из репозитория:
sudo dnf install tigervnc-server
Затем переключитесь на учётную запись пользователя и инициализируйте VNC‑сервис:
su - jane
vncserverВ процессе вас попросят задать пароль VNC (и опционально пароль только для просмотра — введите n, если не нужно). Команда создаст каталог ~/.vnc с конфигурацией и логами.
Пример вывода: процесс будет показан как HOSTNAME:N, где N — номер дисплея (обычно :1 для первого сеанса).
vncserver -list
vncserver -kill :1
Остановите дисплей :1 перед редактированием конфигурации.
Конфигурация сеанса XFCE для VNC
Откройте файл конфигурации пользователя:
nano ~/.vnc/configПример минимальной конфигурации для XFCE и разрешения 1920x1200:
session=xfce
geometry=1920x1200
localhost
alwayssharedПараметры:
- session — графическая сессия (xfce).
- geometry — разрешение экрана для VNC‑сессии.
- localhost — слушать только на 127.0.0.1 (важно для безопасности, если вы используете SSH‑туннель).
- alwaysshared — разрешить нескольким клиентам подключаться одновременно.

Регистрация пользователя в systemd‑шаблоне TigerVNC
Выполните от root редактирование файла:
sudo nano /etc/tigervnc/vncserver.usersДобавьте строку соответствия дисплея и пользователя:
:1=janeЭто означает, что сервис vncserver@:1.service будет запускать VNC под пользователем jane.
Запуск и включение VNC как systemd‑сервиса
TigerVNC поставляет шаблонный systemd‑юнит vncserver@:N.service. После добавления пользователей перезагрузите менеджер systemd:
sudo systemctl daemon-reloadЗапустите и включите автоматический запуск для дисплея 1:
sudo systemctl start vncserver@:1.service
sudo systemctl enable vncserver@:1.service
sudo systemctl status vncserver@:1.serviceЕсли служба запущена корректно, systemctl покажет активное состояние и PID Xvnc.

Настройка firewalld
По умолчанию firewalld установлен и включён. Наиболее безопасный вариант — не открывать VNC‑порт в публичной зоне и использовать SSH‑туннель. Если требуется прямой доступ, можно добавить сервис vnc-server:
sudo firewall-cmd --add-service=vnc-server --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-servicesЕсли необходимо открыть конкретный порт (например, 5901), используйте:
sudo firewall-cmd --add-port=5901/tcp --permanent
sudo firewall-cmd --reloadДля ограничения доступа по IP добавьте правило в подходящую зону (например, internal) или используйте rich rules:
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" port protocol="tcp" port="5901" accept'
sudo firewall-cmd --reload
Important: при открытии портов убедитесь, что SELinux контекст и службы соответствуют политике безопасности на сервере.
Подключение по защищённому SSH‑туннелю (рекомендуется)
SSH‑туннель позволяет не открывать порт VNC в публичной сети. На локальной машине (клиенте) выполните:
ssh -L 5901:127.0.0.1:5901 -N -f -l jane 192.168.5.100где 192.168.5.100 — IP сервера VNC. Опции:
- -L — локальный порт пробрасывается на хост и порт сервера.
- -N — не выполнять удалённых команд.
- -f — перейти в фон после запроса пароля.
После установления туннеля подключайтесь к localhost:5901 в VNC‑клиенте (например, TigerVNC Viewer).

В VNC Viewer укажите адрес 127.0.0.1:5901 или localhost:5901 и введите VNC‑пароль, заданный ранее.

Если всё настроено правильно, вы увидите XFCE рабочий стол.
id
whoami
sudo su
Практические рекомендации по безопасности
- Всегда предпочитайте SSH‑туннель или VPN перед открытием портов VNC в интернет.
- Запускайте один VNC‑процесс на пользователя: это упрощает учёт и аудит.
- Храните VNC‑пароли в защищённом менеджере паролей и меняйте их периодически.
- Ограничьте доступ по IP в firewalld или используйте зоны и rich rules.
- Рассмотрите использование fail2ban или аналогичного инструмента для защиты от брутфорса на SSH.
- Если требуется шифрование RFB, проверьте возможности клиента/сервера или используйте stunnel (редко требуется при SSH).
Тонкости SELinux и прав
Если SELinux включён, убедитесь, что контексты файлов и исполняемых файлов соответствуют ожиданиям. В редких случаях потребуется добавить локальные правила или временно переключить SELinux в permissive для диагностики:
sudo setenforce 0 # временно
sudo setenforce 1 # вернутьНе оставляйте SELinux в permissive в производственной среде — решайте проблемы корректно через политику.
Отладка и частые проблемы
- Сервис не запускается
- Просмотрите логи systemd: sudo journalctl -u vncserver@:1.service
- Проверьте права в каталоге ~/.vnc и корректность ~/.vnc/config.
- Клиент показывает “connection refused”
- Убедитесь, что служба слушает: ss -tln | grep 5901
- Если localhost в config, убедитесь, что вы используете SSH‑туннель.
- Неверный формат DISPLAY
- Проверьте /etc/tigervnc/vncserver.users и совпадение номера дисплея.
- Проблемы с разрешением
- Отредактируйте geometry в ~/.vnc/config и перезапустите сервис.
Тестирование и критерии приёмки
Критерии приёмки для успешного развёртывания:
- VNC‑сервис vncserver@:1.service запускается и остаётся активен.
- При подключении через SSH‑туннель клиент получает рабочий стол XFCE.
- Доступ через интернет без туннеля отсутствует (если использовался localhost в конфиге).
- Логи не содержат ошибок уровня critical за последние 24 часа.
Минимальный тестовый план (acceptance):
- Инициализация vncserver и создание пароля.
- Редактирование ~/.vnc/config и /etc/tigervnc/vncserver.users.
- systemctl daemon-reload, start, enable.
- Установка SSH‑туннеля и подключение VNC Viewer к localhost:5901.
- Проверка пользователя id/whoami и запуска оболочки sudo.
Роли и чек-листы
Администратор (развёртывание):
- Установил EPEL и XFCE.
- Создал пользователя и задал пароль.
- Установил tigervnc-server.
- Настроил ~/.vnc/config и /etc/tigervnc/vncserver.users.
- Запустил и включил vncserver@:N.service.
- Добавил правила firewalld или задокументировал использование SSH‑туннеля.
Техник поддержки (операции):
- Перезапустить сервис: sudo systemctl restart vncserver@:1.service.
- Просмотреть логи: sudo journalctl -u vncserver@:1.service.
- Проверить использование сетевых портов: ss -tln | grep 5901.
Пользователь (подключение):
- Создать SSH‑туннель: ssh -L 5901:127.0.0.1:5901 -N -f -l jane SERVER_IP.
- Подключиться VNC Viewer к localhost:5901.
- Ввести VNC‑пароль и подтвердить рабочий стол.
Альтернативные подходы и когда этот способ не подходит
Альтернативы:
- Использовать RDP (xrdp) для тесной интеграции с приложениями Windows‑стиля.
- Использовать коммерческие решения (AnyDesk, TeamViewer) для простоты подключения через NAT и firewall.
- Организовать полноценный VPN (OpenVPN, WireGuard) и проксировать весь трафик.
Когда VNC не подходит:
- Требуется аппаратное ускорение графики (игры, 3D): VNC плохо подходит.
- Нужна полная интеграция с Active Directory и политиками GPO — рассмотреть RDP.
Мини‑методология развёртывания VNC в организации
- Определите требования: число одновременных пользователей, допустимые задержки, профиль приложений.
- Выберите лёгкую DE (XFCE) для экономии ресурсов.
- Автоматизируйте создание пользователей и конфигураций (Ansible playbook).
- Настройте централизованную аутентификацию или используйте локальные учётные записи.
- Настройте мониторинг и оповещения для systemd‑сервисов и использования портов.
- Документируйте политику паролей и процедуру восстановления/смены.
Пример Ansible‑задачи (шаблон)
- name: Install TigerVNC and XFCE
hosts: vnc_hosts
become: yes
tasks:
- name: Install packages
dnf:
name:
- epel-release
- tigervnc-server
state: present
- name: Install group Xfce and base-x
command: dnf groupinstall -y "Xfce" "base-x"Decision tree для выбора способа доступа (Mermaid)
flowchart TD
A[Нужно удалённое подключение] --> B{Требуется ли шифрование и доступ через интернет?}
B -- Да --> C[Использовать VPN или SSH‑туннель + VNC]
B -- Нет --> D{Нужна ли интеграция с Windows?}
D -- Да --> E[Рассмотреть RDP/xrdp]
D -- Нет --> F[Можно использовать VNC или коммерч. решение]
C --> G[Настроить firewall, ограничить IP, мониторинг]
E --> G
F --> GШаблоны команд для удобства (cheat sheet)
- Обновление системы: sudo dnf update
- Установка XFCE: sudo dnf groupinstall “Xfce” “base-x”
- Инициализация VNC: su - jane; vncserver
- Остановка дисплея: vncserver -kill :1
- Запуск systemd: sudo systemctl start vncserver@:1.service
- Проверка портов: ss -tln | grep 5901
- Создание SSH‑туннеля: ssh -L 5901:127.0.0.1:5901 -N -f -l jane SERVER_IP
Тестовые случаи и приёмка
- После установки vncserver должен создать ~/.vnc и файл config.
- systemctl status vncserver@:1.service должен показать Active: active (running).
- После SSH‑туннелирования ss -tln | grep 127.0.0.1:5901 должен показать прослушивание.
- VNC Viewer успешно отображает XFCE рабочий стол и реагирует на ввод клавиатуры/мыши.
Риски и смягчения
- Риск: Открытый порт VNC в интернет → Смягчение: использовать SSH/VPN и ограничивать IP.
- Риск: Перехват пароля VNC → Смягчение: использовать сложные пароли, хранить в менеджере, менять регулярно.
- Риск: Неправильные права на ~/.vnc → Смягчение: установить правильного владельца и права (700/600).
Локальные варианты и особенности для России / СНГ
- При развёртывании в корпоративной сети часто используется внутренний LDAP/AD. Учётные записи можно привязать к централизованной аутентификации, но это потребует дополнительной настройки PAM и сессий X.
- Для удалённых сотрудников VPN (WireGuard/OpenVPN) часто предпочтительнее, чем открытие VNC в публичную сеть.
Короткая сноска по GDPR/конфиденциальности
Если по VNC передаётся персональная информация — убедитесь, что связи и хранение паролей соответствуют внутренним политикам и требованиям к защите данных вашей организации.
Глоссарий (1‑линия)
- VNC: протокол удалённого доступа к GUI; RFB: протокол передачи кадра; XFCE: лёгкая DE; SSH‑туннель: локальная переадресация портов через SSH; systemd‑шаблон: юнит вида vncserver@:N.service.
Заключение
В этой инструкции вы установили XFCE, развернули TigerVNC, связали дисплей с пользователем через /etc/tigervnc/vncserver.users, настроили systemd‑сервис и рассмотрели безопасные способы подключения по SSH‑туннелю. Для промышленной эксплуатации автоматизируйте развёртывание, контролируйте доступ и используйте мониторинг. При сомнениях — отдавайте предпочтение VPN/SSH‑туннелю вместо открытия портов в интернет.
Ключевые моменты:
- Используйте непользовательских пользователей для VNC.
- Настраивайте localhost в ~/.vnc/config и подключайтесь через SSH.
- Ограничивайте доступ в firewalld и контролируйте логи.
Похожие материалы
Проверка состояния SD‑карты SanDisk
Исправить ошибку vc_runtimeMinimum_x64.msi
Как перейти на Docker Compose v2
Как заставить Windows озвучивать время
Как сжать видео на iPhone — простые способы