VNC 서버 설치

VNC 서버 설치

TigerVNC를 사용하여 Linux에서 VNC 서버를 구성하고 보호하는 방법은 무엇입니까?(화면이 없는 서버 또는 클래식 머신에서)

VNC 서버(TigerVNC) 구성은 대부분의 Linux 배포판에서 동일하므로 설치 방법만 다릅니다. 이 질문은 OpenSUSE, Fedora, CentOS, RHEL, Debian, Mageia, Void Linux, Arch Linux, Manjaro 및 FreeBSD( 더 많은 분들에게 도움이 되도록)

답변1

VNC 서버 설치

Linux(클래식 시스템 또는 화면 없는 서버)에는 TightVNC, TigerVNC 및 TurboVNC와 같은 VNC 서버에 대한 여러 가지(오픈 소스) 가능성이 있습니다(이것은 전체 목록이 아니며 이 가이드에서는 TigerVNC의 기본 버전을 사용합니다).

  • TigerVNC 서버: 네이티브 또는 Java 코드를 사용하며 적극적으로 유지 관리됩니다.
  • TurboVNC 서버: Java 전용, 적극적으로 유지 관리됩니다.
  • TighVNC 서버: 2020년 현재 Linux 버전은 2009년 v1.3.10입니다.

먼저 데스크탑(예: XFCE 또는 KDE)이 필요합니다.

# OpenSUSE (XFCE)
zypper in -t pattern xfce

# OpenSUSE (KDE)
zypper install -t pattern kde kde_plasma

# Fedora/OpenSUSE (XFCE)
dnf groupinstall -y "Xfce Desktop"

# Fedora/OpenSUSE (KDE)
dnf -y group install "KDE Plasma Workspaces" 

# CentOS/RHEL (Gnome)
dnf -y group install "Server with GUI"

# CentOS/RHEL (XFCE)
dnf --enablerepo=epel group -y install "Xfce" "base-x" 

# CentOS/RHEL (KDE)
dnf --enablerepo=epel group -y install "KDE Plasma Workspaces"

# CentOS v8 (KDE) 
dnf --enablerepo=epel,PowerTools 
dnf -y group install "KDE Plasma Workspaces" "base-x" 

# Debian (XFCE)
apt install task-xfce-desktop

# Debian (KDE)
apt install task-kde-desktop

# Mageia (XFCE)
dnf install task-xfce

# Mageia (KDE)
dnf install task-plasma5

# FreeBSD (XFCE)
pkg install xfce

# FreeBSD (KDE)
pkg install x11/kde5

# Void Linux (XFCE)
xbps-install -S xfce4

# Void Linux (KDE)
xbps-install -S kde5
# and optionally, kde5-baseapps

# Arch Linux (XFCE)
pacman -S xfce4 xfce4-goodies

# Arch Linux (KDE)
pacman -S plasma-desktop
# or plasma for the full desktop
# pacman -S plasma

# Manjaro (XFCE)
pacman -S xfce4-gtk3 xfce4-goodies xfce4-terminal \
network-manager-applet xfce4-notifyd-gtk3 \
xfce4-whiskermenu-plugin-gtk3 tumbler engrampa

# Manjaro (KDE)
pacman -S plasma kio-extras
# optional kde-applications

TigerVNC X 서버를 설치합니다:

# The package name may change depending on the used distro

# CentOS
yum install tigervnc-server

# Mageia/Fedora/CentOS/RHEL
dnf install tigervnc-server

# ALT Linux
apt install tigervnc-server

# openSUSE DNF
dnf install xorg-x11-Xvnc

# openSUSE
zypper install xorg-x11-Xvnc

# Debian
apt install tigervnc-standalone-server tigervnc-common

# FreeBSD
pkg install tigervnc-server

# Void Linux
xbps-install -S tigervnc

# Arch Linux
pacman -S tigervnc

# Manjaro
pacman -S tigervnc 

설정 및 구성

비밀번호 설정(해시된 버전은 에 저장됨 ~/.vnc/passwd):

vncpasswd

구성 파일(서버가 시작될 때 실행되는 시작 스크립트)을 ~/.vnc/xstartup다음과 같이 편집합니다.

#!/bin/sh

unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

exec startxfce4

# XFCE: startxfce4 or xfce4-session
#exec startxfce4
#exec xfce4-session

# KDE: startkde or startplasma-x11
#exec startkde
#exec startplasma-x11

# Gnome: startx
#exec startx

VNC 서버의 구성 파일을 준비 및/또는 찾습니다.

~/.vnc/config or /etc/vnc/config

구성 파일을 사용하여 VNC 서버의 설정을 조정합니다... 사용할 수 있는 사용 가능한 옵션의 전체 목록을 보려면 Xvnc -help다음 man Xvnc구성 예를 참조하세요.geometry(또한 Suse VNC와 같은 일부 시스템에서는 이 옵션이 설정되지 않으면 작동하지 않을 수도 있습니다.):

## Supported server options to pass to vncserver upon invocation can be listed
## in this file. See the following manpages for more: vncserver(1) Xvnc(1).
## Several common ones are shown below. Uncomment and modify to your liking.
##
##
# -------------
#  Xvnc --help
# -------------
##
# Start server : vncserver
# Stop server : vncserver -kill :1
##
###############################################################################

# Only allow connection from local hosts
#localhost

# VNC tcp port
rfbport=5900

# TCP port to listen for HTTP (default=0)
httpport=0

# Directory containing files to serve via HTTP (default=)
httpd=

# Protocols...
#nolisten=UDP
#listen=TCP

# IP settings
useipv4
#useipv6

# Interface, listen on the specified network address (default=all)
#interface=127.0.0.1

# Use protocol version 3.3 for backwards compatibility
protocol3.3=0

# Unix socket access mode (default=384)
#rfbunixmode=384

# Unix socket to listen for RFB protocol (default=)
rfbunixpath=

# Name of VNC desktop
desktop=MyVNC

# Geometry original peppy
geometry=1366x768

# Colors
depth=24

# Sharing with multiple clients
#alwaysshared
nevershared

# Disconnect existing clients if an incoming connection is non-shared. 
# If combined with NeverShared then new connections will be refused while 
# there is a client active
disconnectclients

# Security, specify which security scheme to use (None, VncAuth, Plain,
# TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc, X509Plain) (default=TLSVnc,VncAuth)
securitytypes=TLSVnc,VncAuth

# Path to the key of the X509 certificate in PEM format (default=)
#X509Key=

# Path to the X509 certificate in PEM format (default=)
#X509Cert=

# Set maximum number of clients (power of two)
#maxclients=64

# Terminate after s seconds of user inactivity (default=0)
#maxidletime=0

# Terminate when a client has been connected for s seconds (default0)
#maxconnectiontime=0

# Terminate when no client has been connected for s seconds (default=0)
#maxdisconnectiontime=0

# The number of seconds after which an idle VNC connection will be dropped 
# (zero means no timeout) (default=0)
#idletimeout=0

# Zlib compression level (default=-1)
#zlibLevel=-1

# The maximum number of updates per second sent to each client (default=60)
#framerate=60

# GnuTLS priority string that controls the TLS session’s handshake algorithms.  
# See the GnuTLS manual for possible values. Default is NORMAL.
#GnuTLSPriority=

VNC 서버는 다음 명령을 사용하여 시작/중지할 수 있으며, VNC 클라이언트를 사용하여 서버에 연결할 수 있습니다.server-ip:used-port (방화벽에서 사용되는 포트를 열어야 할 수도 있습니다.)

# Start the server
vncserver

# Stop the server :1
vncserver -kill :1

# Forcing multiple server to stop
killall Xvnc

안전

기본 VNC 설정은 교환된 스트림에 암호화를 사용하지 않습니다. VNC 연결을 보호하는 4가지 일반적인 방법은 다음과 같습니다.

  • X509 인증서 사용:인증서 위치를 구성 파일에 추가해야 하며 클라이언트에서도 인증해야 합니다(클라이언트 애플리케이션에서 위치 설정). X509 인증서 생성에 대해서는 아래에서 자세히 설명합니다.

  • SSH 세션을 통해 VNC 터널 설정SSH 세션에서 제공하는 로컬 sock 프록시를 사용하십시오. 서버에서 편집 /etc/ssh/sshd_config및 활성화/추가한 AllowTcpForwarding yes후 sshd 서비스를 다시 시작한 후 다음 옵션을 systemctl restart sshd.service사용할 수 있습니다 .vncviewer-via 또는터널 연결을 수동으로 설정한 후 클라이언트를 사용하여 연결: 그런 다음
    ssh serverIP -p 22 -i /home/my/private/key -L 5900:127.0.0.1:5900 -C -N
    VNC 클라이언트를 사용하여 연결합니다.127.0.0.1:5900

  • 서버에서 vncviewer를 실행하고 클라이언트에 해당 x 창을 표시합니다.SSH X를 통해 세션 전달: 서버에서 편집 /etc/ssh/sshd_config및 활성화/추가한 X11Forwarding yes다음 sshd 서비스를 다시 시작합니다 systemctl restart sshd.service.
    SSH 세션(서버의 SSH 셸)을 통해 실행하면 vncviewer :1클라이언트에 vncviewer 창이 표시됩니다.

  • VPN 연결을 통해 VNC 터널을 설정합니다.이 내용은 여기서 다루지 않습니다.


시스템 서비스로서의 VNC

VNC 서버는 다음 구성 파일을 통해 Systemd용 서비스로 사용될 수 있습니다 /etc/systemd/system/vncserver.service. 서비스를 활성화하면 systemctl enable vncserver.service시스템 시작 시 자동으로 시작됩니다(Void Linux 또는 Systemd가 없는 Linux 배포판에는 적용되지 않음).

# /etc/systemd/system/vncserver.service

[Unit]
Description=TigerVNC Server
After=syslog.target network.target

[Service]
Type=simple
#Type=forking
User=MY-USER
Group=MY-USER-GROUP

#If ran with root
#WorkingDirectory=/root
#PIDFile=/root/.vnc/%H%i.pid

#If ran with any other user
WorkingDirectory=/home/MY-USER
PIDFile=/home/%u/.vnc/%H%i.pid

#Environment is required when using a custom GnuTLS version
#Environment=LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib

ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
#ExecStart for forking type version
#ExecStart=/usr/bin/vncserver
ExecStart=/usr/bin/vncserver -fg
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

X509 인증서 생성

간단한 보안 설정을 위해 다음과 같이 하세요.공식 위키따라갈 수 있습니다. 그렇지 않으면 이것은 쉬운 주제가 아닙니다. 이러한 유형의 암호화에 대해 자세히 알아보려면 이 섹션의 설명서/링크를 참조하십시오. 간단히 말해서 문서/링크에 따르면 2020년 현재 대부분의 보안 키는 키 크기가 큰(최소 4096비트) RSA이며EdDSAEd25519 구현은 SHA-512(SHA-2) 및 Curve25519(128비트 보안을 제공하는 타원 곡선)를 사용하는 EdDSA 서명 체계입니다. Ed25519 저항기는 3072비트 키가 있는 RSA와 동일합니다. (또는 SHAKE256(SHA-3) 및 Curve448을 사용하는 EdDSA 서명 체계인 EdDSA의 ED448이 있습니다. 이는 ~12448비트 키를 사용하는 RSA와 동일하며 업데이트된 OpenSSL 설치가 필요합니다.)

CA용 RSA-4096-Bits/Ed25519/ED448 개인 키를 생성합니다.
Ed25519 및 ED448의 경우 최신 버전의 OpenSSL 및 GnuTLS가 필요합니다(다음 섹션 참조).

mkdir ~/.vnc/ssl

# Generate an RSA 4096-bits key
openssl genrsa -out ~/.vnc/ssl/ca.private.rsa.4096.key.pem 4096
#
# genrsa is superseded by genpkey (PKCS#1 vs PKCS#8 format), the following command is similar to the previous one.
# openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out ~/.vnc/ssl/ca.private.rsa.4096.key.pem

# Or an ED25519 key (equivalent to an RSA with a 3072-bits key, updated openssl required)
openssl genpkey -algorithm ED25519 -out ~/.vnc/ssl/ca.private.eddsa.ed25519.key.pem   

# Or an ED448 key (equivalent to an RSA with a ~12448-bits key, updated openssl required)
openssl genpkey -algorithm ED448 -out ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem

이전 단계는 비밀번호로 키를 보호하여 보다 안전한 방법으로 수행할 수 있지만 TigerVNC는 이를 지원하지 않습니다.

새로 생성된 키 확인/보기(필수 아님):

openssl pkey -in ~/.vnc/ssl/ca.private.rsa.4096.key.pem -text
# or
openssl pkey -in ~/.vnc/ssl/ca.private.eddsa.ed25519.key.pem -text
# or
openssl pkey -in ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem -text

서명 CA를 생성하고 2년 동안 유효하게 만든 다음 서버 IP를 추가합니다(필수, 88.44.88.33IP로 변경).

# RSA 4096-bits 
openssl req -new -x509 -days 730 -key ~/.vnc/ssl/ca.private.rsa.4096.key.pem -out ~/.vnc/ssl/ca.sign.rsa.4096.key.pem -subj '/CN=88.44.88.33' -addext "subjectAltName=IP:88.44.88.33"

#Or ED25519
openssl req -new -x509 -days 730 -key ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem -out ~/.vnc/ssl/ca.sign.eddsa.ed448.key.pem -subj '/CN=88.44.88.33' -addext "subjectAltName=IP:88.44.88.33"

# Or ED448
openssl req -new -x509 -days 730 -key ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem -out ~/.vnc/ssl/ca.sign.eddsa.ed448.key.pem -subj '/CN=88.44.88.33' -addext "subjectAltName=IP:88.44.88.33"

X509를 사용하도록 서버 구성을 업데이트합니다.

# Security, specify which security scheme to use (None, VncAuth, Plain,
# TLSNone, TLSVnc, TLSPlain, X509None, X509Vnc, X509Plain) (default=TLSVnc,VncAuth)
securitytypes=X509Vnc

# Path to the key of the X509 certificate in PEM format (default=)
X509Key=/home/USER/.vnc/ssl/ca.private.eddsa.ed448.key.pem

# Path to the X509 certificate in PEM format (default=)
X509Cert=/home/USER/.vnc/ssl/ca.sign.eddsa.ed448.key.pem

TigerVNC 뷰어와 연결:

  • ca.sign.eddsa.ed448.key.pem클라이언트에 복사
  • TigerVNC 뷰어의 옵션 > 보안에 있는 암호화 섹션에서 TLS with X509 certificates이를 선택한 채로 두고 경로를 ca.sign.eddsa.ed448.key.pem켜기 로 설정합니다 Path to X509 CA certificate(CRL 섹션을 비워 둡니다).
  • 인증 섹션에서 다음만 선택하세요.Standard VNC

GnuTLS 세션의 핸드셰이크 알고리즘 확인

TigerVNC는 암호화를 위해 GnuTLS를 사용하고 서버/클라이언트에서 TLS 세션 핸드셰이크 알고리즘을 제어하는 ​​우선순위 문자열을 설정합니다 GnuTLSPriority(TLS1.0/TLS1.1/TLS1.2/TLS1.3/etc. 지원 알고리즘 나열 가능).gnutls-cli --list

예를 들어 다음 명령을 사용하여 TLS v1.2 지원을 테스트할 수 있습니다.

vncviewer GnuTLSPriority=NORMAL:-VERS-ALL:+VERS-TLS1.2 -log='*:stdout:100' 

서버 구성 파일에 TLS v1.2/v1.3을 적용하는 방법은 다음과 같습니다.

# GnuTLS priority string that controls the TLS session’s handshake algorithms.  
# See the GnuTLS manual for possible values. Default is NORMAL.

# Only TLS v1.2
#GnuTLSPriority=NORMAL:-VERS-ALL:+VERS-TLS1.2

# Only TLS v1.3
GnuTLSPriority=NORMAL:-VERS-ALL:+VERS-TLS1.3

# Verifying if only TLS v1.2/v1.3 policy is working with the following
# vncviewer GnuTLSPriority=NORMAL:-VERS-TLS1.2 -log='*:stdout:100' # v1.2
# vncviewer GnuTLSPriority=NORMAL:-VERS-TLS1.3 -log='*:stdout:100' # v1.3
# This mean use all but v1.2/v1.3 to test if the setting is enforced correctly,
# and thus the connection will be refused for handshake algorithm mismatch.

# Other example of gnutlspriority values (warning, this is just for the syntax)
#GnuTLSPriority=NORMAL:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1:-VERS-TLS1.3
#NORMAL:+SECURE128:-SHA384:-SHA256:-VERS-SSL3.0:-VERS-TLS1.0:-VERS-TLS1.1
#NORMAL:+VERS-TLS1.2:+VERS-TLS1.3:+AES-128-CBC:+RSA:+SHA1:+COMP-NULL

OpenSSL 및 GnuTLS 업데이트

OpenSSL과 GnuTLS는 대부분의 Linux 시스템의 두 가지 주요 응용 프로그램/라이브러리입니다. 수동으로 업데이트하면 더 이상 자동으로 업데이트되지 않으므로 보안 문제가 발생할 수 있습니다. 이 측면을 제한하기 위해 특별히 목적에 맞게 사용자 정의 버전(TigerVNC)을 사용하여 이를 수행할 수 있습니다. 효과.

vncviewerEd25519/ED448 키를 생성하려면 최신 OpenSSL 버전이 필요하며 (클라이언트 뷰어)/Xvnc(TigerVNC 서버)에서는 Ed25519/ED448 알고리즘에 대한 지원을 추가하려면 GnuTLS가 필요합니다.

현재 지원되는 알고리즘을 확인하세요.

#GnuTLS
gnutls-cli --list | grep EdDSA

#OpenSSL
man -P cat genpkey | grep "Valid built-in algorithm"
openssl list -public-key-algorithms | grep ED

#If EdDSA targeted algorithm is supported there is no need to install from sources

OpenSSL 빌드, 설치 및 사용:

wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
tar -xvf openssl-1.1.1g.tar.gz
cd openssl-1.1.1g/
./config no-nextprotoneg no-weak-ssl-ciphers no-ssl3 no-shared -DOPENSSL_NO_HEARTBEATS -fstack-protector-strong enable-tls1_3
make install -j2

# After install, OpenSSL can be used 
# for instance as follow to generate the needed key  
/usr/local/bin/openssl genpkey -algorithm ED448 -out ~/.vnc/ssl/ca.private.eddsa.ed448.key.pem

GnuTLS를 빌드, 설치 및 사용합니다.

wget https://www.gnupg.org/ftp/gcrypt/gnutls/v3.6/gnutls-3.6.14.tar.xz
tar -xvf gnutls-3.6.14.tar.xz
cd gnutls-3.6.14/
./configure --without-tpm --disable-tests --disable-full-test-suite --disable-non-suiteb-curves --disable-ssl2-support
make install -j2

# This is required for Xvnc and vncviewer, after install can be used 
# by setting LD_LIBRARY_PATH before running vncviewer or Xvnc, 
# like the following example

# TigerVNC Server
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib
vncserver

# TigerVNC Viewer
env LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/lib vncviewer

# To check the used version we can use ldd for instance 
ldd /usr/bin/vncviewer

실험 노트

TigerVNC 서버와 함께 KDE를 사용할 때 서버를 여러 번 중지/시작할 때 일부 X 응용 프로그램이 계속 실행됩니다.이 시스템이슈, 수정 다음 스크립트를 사용하여 서버를 중지할 수 있으며(systemd 서비스 프로필에서도 작동), ps aux | sort | grep USER-NAME | grep -v '\['명령을 사용하여 서버를 중지한 후에도 여전히 실행 중인 항목이 있는지 확인할 수 있습니다.

#cat /usr/bin/vncserver-stop (this is meant for KDE)

#!/bin/sh

vncserver -kill :0
vncserver -kill :1
vncserver -kill :2
vncserver -kill :3

killall Xvnc -9
killall kwin_x11 -9
killall startplasma-x11 -9
killall plasma_session -9

killall Xvnc -9
killall kwin_x11 -9
killall startplasma-x11 -9
killall plasma_session -9

뷰어에서 여러 테스트를 거쳐 얻은 최고의 속도 성능vncviewer -QualityLevel=4 -CompressLevel=2 -PreferredEncoding=Raw

서버가 인터넷에 노출되어야 하는 경우 VNC 서버는 nmap 스캔( nmap -sV -sC TARGET-IP)을 통해 쉽게 검색할 수 있으며 VNC 프로토콜은 자체적으로 선언해야 하므로 서버와 클라이언트의 사용자 정의 버전을 생성할 필요가 없습니다. 서버가 글로벌 인터넷에 노출된 경우 수행될 수 있습니다. VNC 서버를 난독화합니다.


문서

관련 정보