Подробный гайд: Настройка 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) с отдельными пользователями и паролями.