Подробный гайд: Настройка VNC-сервера в Astra Linux 1.7

Настройка VNC-сервера в Astra Linux 1.7: установка TigerVNC, конфигурация systemd, безопасность, SSH-туннель, устранение неполадок

2026.05.03                  


Подробный гайд: Настройка VNC-сервера в Astra Linux 1.7Подробный гайд: Настройка VNC-сервера в Astra Linux 1.7

Важно перед началом

  • Astra Linux выпускается в двух редакциях: CE (Common Edition) и SE (Special Edition / Смоленск).
  • В редакции SE включены строгие механизмы безопасности (Parsec/MAC, мандатный контроль, политики выполнения). Запуск VNC в качестве системной службы может конфликтовать с этими политиками. Для SE рекомендуется использовать SSH-туннелирование или x11vnc для существующей сессии. Данный гайд ориентирован на CE, но содержит пометки для SE.

1. Подготовка системы

Обновите пакеты и убедитесь, что установлены базовые утилиты:

sudo apt update && sudo apt upgrade -y
sudo apt install systemd ufw curl -y

2. Установка VNC-сервера

Рекомендуется использовать TigerVNC (современный, стабильный, активно поддерживается):

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

Проверьте установку:

vncserver -version

3. Задание пароля VNC

Пароль хранится в ~/.vnc/passwd.

Установите его от имени пользователя, под которым будет запускаться сессия:

vncpasswd
  • Введите пароль (макс. 8 символов для совместимости, но TigerVNC поддерживает до 12)
  • Подтвердите пароль
  • На вопрос Would you like to enter a view-only password (y/n)? ответьте n (если не нужен режим "только просмотр")

4. Настройка xstartup

Этот файл определяет, какое графическое окружение запустится в VNC-сессии.

mkdir -p ~/.vnc
nano ~/.vnc/xstartup

Вставьте следующее (адаптировано под Astra Fly):

#!/bin/sh
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export XKL_XMODMAP_DISABLE=1

[ -r "$HOME/.Xresources" ] && xrdb "$HOME/.Xresources"

# Запуск стандартной сессии Astra Linux
if [ -x /usr/bin/fly-session ]; then
    exec /usr/bin/fly-session
elif [ -x /usr/bin/fly-wm ]; then
    exec /usr/bin/fly-wm
else
    exec /usr/bin/x-terminal-emulator
fi

Сделайте файл исполняемым:

chmod +x ~/.vnc/xstartup

5. Создание systemd-юнита

Создайте шаблон службы для запуска VNC от имени пользователя:

sudo nano /etc/systemd/system/vncserver@.service

Содержимое:

[Unit]
Description=VNC Server for user %i
After=syslog.target network.target

[Service]
Type=forking
User=%i
Group=%i
WorkingDirectory=/home/%i
PAMName=login

# Очистка предыдущей сессии
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :%i > /dev/null 2>&1 || :'

# Запуск VNC
ExecStart=/usr/bin/vncserver :%i -geometry 1920x1080 -depth 24 -localhost no

# Остановка
ExecStop=/usr/bin/vncserver -kill :%i

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
%i подставляется автоматически при запуске службы (например, 

`vncserver@1.service` → `:1`, пользователь `username` указывается при запуске через `sudo systemctl start vncserver@1.service`? Нет. 

В этой конфигурации `%i` в `[Service]` используется для имени пользователя, а номер дисплея берётся из имени юнита. 

Это классический шаблон, но он требует, чтобы имя юнита совпадало с именем пользователя. Для простоты и надёжности в Astra рекомендуется использовать фиксированное имя юнита с явным указанием пользователя.)

Более надёжный вариант для Astra (рекомендуется):

sudo nano /etc/systemd/system/vncserver-user.service
[Unit]
Description=VNC Server for current user
After=network.target

[Service]
Type=forking
User=ваш_логин
Group=ваш_логин
WorkingDirectory=/home/ваш_логин
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill :1 > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver :1 -geometry 1920x1080 -depth 24 -localhost no
ExecStop=/usr/bin/vncserver -kill :1
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

Замените ваш_логин на реальное имя пользователя.


6. Запуск и проверка

sudo systemctl daemon-reload
sudo systemctl enable vncserver-user.service
sudo systemctl start vncserver-user.service

Проверьте статус:

sudo systemctl status vncserver-user.service

Логи VNC:

cat ~/.vnc/*.log

Или через systemd:

sudo journalctl -u vncserver-user.service -f

7. Настройка брандмауэра

VNC слушает порт 5900 + номер дисплея. Для :1 это 5901/tcp.

sudo ufw allow 5901/tcp
sudo ufw reload

В Astra SE рекомендуется не открывать порт VNC наружу. Используйте только SSH-туннель (см. раздел 9).


8. Подключение

  • Скачайте клиент: TigerVNC Viewer - tigervnc.org, RealVNC или Remmina.
  • Адрес подключения: IP_СЕРВЕРА:5901 или IP_СЕРВЕРА::1
  • Введите пароль, заданный в шаге 3.

9. Безопасность (Обязательно!)

VNC по умолчанию не шифрует трафик.

Для защиты используйте:

SSH-туннель (рекомендуется)

На клиенте выполните:

ssh -L 5901:localhost:5901 ваш_логин@IP_СЕРВЕРА

Затем подключите VNC-клиент к localhost:5901.
В конфиге VNC уберите -localhost no или замените на -localhost yes.

Дополнительные меры:

  • Регулярно обновляйте систему: sudo apt update && sudo apt upgrade
  • Ограничьте доступ по IP в ufw: sudo ufw allow from 192.168.1.0/24 to any port 5901
  • Используйте сложные пароли и отключите аутентификацию по умолчанию, если используете SSH
  • В Astra SE: проверьте политики Parsec через parsectl status. VNC может требовать добавления в список доверенных приложений или запуск в отдельном домене.

Альтернатива: x11vnc (совместное использование текущей сессии)

Если нужно подключиться к уже запущенной локальной сессии (например, пользователь уже вошёл в систему):

sudo apt install x11vnc -y
x11vnc -display :0 -auth guess -once -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared

Создайте для него systemd-юнит аналогично шагу 5. Подходит для поддержки пользователей, но менее безопасен.


Устранение неполадок

Проблема Решение
Failed to start VNC Server Проверьте права ~/.vnc/, наличие xstartup, логи journalctl -u vncserver-user.service
Чёрный экран Ошибка в xstartup. Проверьте путь к fly-session. Добавьте export DISPLAY=:1
Запрос пароля не появляется Убедитесь, что vncpasswd запущен от того же пользователя, что и служба
Ошибка Connection refused Проверьте sudo systemctl status, порт ss -tlnp | grep 5901, брандмауэр
Astra SE блокирует запуск Проверьте parsectl status, временно отключите для диагностики (не в продакшене!), используйте SSH-туннель

Примечания по Astra Linux 1.7

  • Дистрибутив основан на Debian 10/11, использует systemd и apt
  • Графическая оболочка по умолчанию: Fly
  • В редакции SE мандатный контроль может прерывать запуск X-сессий от systemd. Для соответствия требованиям безопасности используйте x11vnc в режиме пользователя или организуйте доступ через терминальные серверы (RDP/X2Go) с шифрованием
  • Для корпоративных развёртываний рассмотрите x2go-server или FreeRDP как более безопасные альтернативы VNC

После выполнения шагов ваш VNC-сервер будет работать стабильно. При необходимости масштабирования создайте дополнительные юниты :2, :3 (порты 5902, 5903) с отдельными пользователями и паролями.