Установка и настройка VNC-сервера на CentOS 8

VNC (Virtual Network Computing) — это приложение для совместного использования графического интерфейса рабочего стола по сети. Оно использует протокол Remote Frame Buffer (RFB) и работает по модели «сервер — клиент». Чаще всего VNC применяют для удалённого администрирования, техподдержки и доступа к рабочим столам серверов или рабочих станций.
Пререквизиты
- Сервер или рабочая станция с CentOS 8 Desktop.
- Доступ root или учётная запись с sudo.
- Свободный порт 5901 (VNC на дисплее :1).
Важно: в этой инструкции предполагается, что вы управлять системой по SSH или локально как root/sudo.
Краткая терминология
- VNC сервер: приложение на удалённой машине, которое делится рабочим столом.
- VNC клиент (Viewer): программа на вашей машине, подключающаяся к серверу.
- Дисплей :1 — второй виртуальный дисплей (первый обычно :0) — соответствует порту 5901.
Перед началом: SELinux
По умолчанию SELinux включён в CentOS 8. В оригинальном руководстве предлагается полностью отключить SELinux, но безопаснее перевести его в режим permissive или настроить политику. Ниже показано, как временно перевести SELinux в permissive, а также как изменить конфигурацию при необходимости.
Временный (до перезагрузки) перевод в permissive:
setenforce 0Постоянное изменение в конфигурации (если вы всё же хотите перевести в disabled):
nano /etc/sysconfig/selinuxНайдите строку:
SELINUX=enforcingи замените на:
SELINUX=permissiveСохраните файл и перезагрузите систему, если вносятся постоянные изменения.
Важно: безопасность сервера ухудшается при полном отключении SELinux. Рекомендуется сначала попробовать permissive и, если требуется, добавить исключения в политику.
Установка VNC Server
TigerVNC доступен в репозитории CentOS 8. Установите пакет командой:
dnf install tigervnc-server tigervnc-server-module -yПосле установки можно перейти к созданию пользователя и настройке пароля.
Создание пользователя и установка пароля VNC
Создайте отдельную учётную запись для удалённого рабочего стола (пример: hitesh):
useradd hiteshУстановите пароль для пользователя:
passwd hiteshПереключитесь на нового пользователя и задайте VNC-пароль:
su - hitesh
vncpasswdВас попросят ввести пароль и подтвердить его. Также можно не задавать пароль только для просмотра (view-only). Затем выйдите из сессии пользователя:
exitСовет: используйте сильный пароль и не делитесь им по незащищённым каналам.
Создание systemd-сервиса для VNC
Создайте файл юнита systemd для запуска VNC под учётной записью пользователя. Имя файла использует шаблон [email protected]. Откройте редактор:
nano /etc/systemd/system/[email protected]Добавьте в файл следующие строки (проверьте, что указаны правильные User и WorkingDirectory):
[Unit]
Description=Remote Desktop VNC Service
After=syslog.target network.target
[Service]
Type=forking
WorkingDirectory=/home/hitesh
User=hitesh
Group=hitesh
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/bin/vncserver -autokill %i
ExecStop=/usr/bin/vncserver -kill %i
[Install]
WantedBy=multi-user.targetСохраните файл и перезагрузите демон systemd:
systemctl daemon-reloadЗапустите сервис на дисплее :1 и включите автозапуск:
systemctl start vncserver@:1.service
systemctl enable vncserver@:1.serviceПроверьте статус сервиса:
systemctl status vncserver@:1.serviceВы увидите вывод, похожий на этот (с информацией о процессах Xvnc и зависимостях):
? vncserver@:1.service - Remote Desktop VNC Service
Loaded: loaded (/etc/systemd/system/[email protected]; disabled; vendor preset: disabled)
Active: active (running) since Fri 2020-03-06 03:45:50 EST; 45s ago
Process: 2196 ExecStart=/usr/bin/vncserver -autokill :1 (code=exited, status=0/SUCCESS)
Process: 2190 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill :1 > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Tasks: 180 (limit: 12537)
Memory: 347.3M
CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
??2203 /usr/bin/Xvnc :1 -auth /home/hitesh/.Xauthority -desktop centos8:1 (hitesh) -fp catalogue:/etc/X11/fontpath.d -geometry 1024>
??2210 sh -c (/home/hitesh/.vnc/xstartup; /usr/bin/vncserver -kill :1) >> '/home/hitesh/.vnc/centos8:1.log' 2>&1 &
??2211 /bin/sh /home/hitesh/.vnc/xstartup
??2212 /usr/libexec/gnome-session-binary
??2221 dbus-launch --sh-syntax --exit-with-session
??2222 /usr/bin/dbus-daemon --syslog --fork --print-pid 6 --print-address 8 --session
??2230 /usr/bin/ssh-agent /etc/X11/xinit/Xclients
??2246 /usr/libexec/at-spi-bus-launcher
??2251 /usr/bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
??2253 /usr/libexec/at-spi2-registryd --use-gnome-session
??2257 /usr/libexec/gvfsd
??2264 /usr/libexec/gvfsd-fuse /home/hitesh/.gvfs -f -o big_writes
??2292 /usr/bin/gnome-keyring-daemon --start --components=secrets
??2336 /usr/libexec/gsd-powerПроверим, что VNC слушает на порту 5901:
netstat -tunlp | grep 5901Ожидаемый вывод:
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 2203/Xvnc
tcp6 0 0 :::5901 :::* LISTEN 2203/XvncОткрытие порта в брандмауэре (firewalld)
Если включён firewalld, откройте порт 5901:
firewall-cmd --permanent --add-port=5901/tcp
firewall-cmd --reloadЕсли вы используете iptables или внешний брандмауэр, настройте правила соответствующим образом.
Подключение к VNC-серверу
С клиентской машины (Windows, Linux или macOS) откройте VNC Viewer и укажите адрес сервера в формате:
your-server-ip:5901
Нажмите Continue, затем введите VNC-пароль в диалоговом окне авторизации:

После успешной авторизации вы увидите удалённый рабочий стол CentOS:

Безопасность и рекомендации
- Используйте SSH-туннель для шифрования трафика VNC. Пример команды на клиенте:
ssh -L 5901:localhost:5901 -N -l hitesh your-server-ipЗатем подключайтесь к localhost:5901 в VNC Viewer.
- Ограничьте доступ брандмауэром по IP-адресам.
- Не оставляйте SELinux полностью отключённым без необходимости.
- Рассмотрите альтернативы: x11vnc (если нужен доступ к существующей сессии :0) или RDP для Windows-подобного опыта.
Устранение неполадок
- Нет прослушивания на 5901: проверьте systemctl status и журнал /home/hitesh/.vnc/*:1.log.
- Сервер запускается, но пустой или черный экран: проверьте файл xstartup в ~/.vnc и права доступа.
- Аутентификация не проходит: убедитесь, что пароль vncpasswd создан для того же пользователя, под которым запускается сервис.
- SELinux блокирует работу: временно setenforce 0, посмотрите AVC-логи в /var/log/audit/audit.log.
Чеклист для быстрого контроля (роль: системный администратор)
- Установлен tigervnc-server и tigervnc-server-module
- Создан пользователь для VNC и задан vncpasswd
- Создан и загружен systemd-юнит в /etc/systemd/system/[email protected]
- Сервис запущен systemctl start vncserver@:1.service
- Порт 5901 открыт в брандмауэре или настроен SSH-туннель
- Протоколирование и журналы доступны для отладки
- План обновления и ротации паролей задокументирован
Краткий набор команд (cheat sheet)
# Установка
dnf install tigervnc-server tigervnc-server-module -y
# Пароли и пользователь
useradd hitesh
passwd hitesh
su - hitesh
vncpasswd
exit
# systemd
nano /etc/systemd/system/[email protected]
systemctl daemon-reload
systemctl start vncserver@:1.service
systemctl enable vncserver@:1.service
systemctl status vncserver@:1.service
# Фаервол
firewall-cmd --permanent --add-port=5901/tcp
firewall-cmd --reload
# SSH туннель (клиент)
ssh -L 5901:localhost:5901 -N -l hitesh your-server-ipКритерии приёмки
- VNC-сервис активен и слушает на 0.0.0.0:5901.
- Можно подключиться с клиента и увидеть графический рабочий стол под пользователем hitesh.
- Доступ ограничен брандмауэром или туннелем SSH.
Заключение
Вы успешно установили и настроили VNC-сервер на CentOS 8. Следуйте рекомендациям по безопасности: используйте SSH-туннели, ограничьте доступ по IP и не отключайте SELinux без обоснования. Используйте чеклист и набор команд для быстрого восстановления и аудита.
Важно: для производственной среды рассмотрите использование VPN/SSH и регулярную проверку журналов безопасности.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента