TightVNC és RDP Szerver

A bejegyzésből megtudhatod, hogy hogyan telepíts- és konfigurálj gyorsan egy vnc szervert.

Bevezetés

A VNC (Virtual Network Computing), egy szerver-kliens protokoll, mely lehetővé teszi, hogy egy távoli gépen – fiókkal rendelkező felhasználók – kapcsolódni tudjanak a rendszerhez. Jelen esetben egy Debian11 alapon-, XFCE grafikus asztali felülettel rendelkező  rendszerhez fogunk kialakítani távoli csatlakozási lehetőséget. A VNC megvalósítására a TightVNC alkalmazás szervert fogjuk használni, mely rendkívül sokoldalú. Ezt követően az RDP (Remote Desktop Protocol) telepítését nézzük meg, amely a Windows távoli asztali csatlakozását teszi lehetővé linux rendszerhez.

TightVNC telepítése

Az alábbi utasítással installáljuk fel az alkalmazást:

sudo apt install tightvncserver

A következő lépésben lépjünk át a terminálban annak a felhasználnak a jogosultságára, amelynek biztosítani kívánjuk a távoli elérést. Ezt követően a vncserver utasítással kezdjük el a konfigurálási folyamatot:

su - <vnc felhasználó>
vncserver

Az alábbi kimenetet fogjuk látni, első lépésben bekéri a rendszer a kapcsolódáshoz szükséges jelszót:

You will require a password to access your desktops.

Password:
Verify:

A jelszónak hat- és nyolc karakter közötti hosszúságúnak kell lennie. A 8 karakternél hosszabb jelszavak automatikusan csonkolódnak.

Miután ellenőrizted a jelszót, lehetőséged lesz egy csak megtekintésre szóló jelszó létrehozására. A csak megtekintési jelszóval bejelentkező felhasználók nem tudják egerükkel- vagy billentyűzetükkel vezérelni a VNC-példányt, azonban látják a tevékenységedet. Ez egy nagyon hasznos lehetőség, ha szeretnél valamit bemutatni másoknak, a VNC-kiszolgáló használatával.

A folyamat ezután létrehozza a szükséges alapértelmezett konfigurációs fájlokat, és csatlakozási információkat a szerverhez:

Would you like to enter a view-only password (y/n)? n
xauth:  file /home/sammy/.Xauthority does not exist

New 'X' desktop is your_hostname:1

Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

A VNC szerver konfigurálása

A VNC-kiszolgálónak tudnia kell, hogy mely parancsokat kell végrehajtania, amikor elindul. Pontosabban, a VNC-nek tudnia kell, hogy melyik grafikus asztalhoz kell csatlakoznia.

Ezek a parancsok a saját könyvtárad alatti mappában található konfigurációs fájlban (xstartup) találhatóak, a .vnc rejtett könyvtárban. Az indítási szkript akkor jött létre, amikor az előző lépésben lefutott a vncserver utasítás. Az utasítás futtatásának másik következménye, hogy elindított egy kiszolgáló példányt, mely az 5901 porton érhető el. A kiszolgáló példánynak szintén van egy egyedi display portja, mely :1, vagy :2 stb. lehet, attól függően, hogy hány display példány fut, hány felhasználót szolgál ki az alkalmazás, az 5901 porton keresztül.

Mivel módosítani fogjuk a VNC-kiszolgáló konfigurációját, először állítsuk le a porton futó VNC-kiszolgálópéldányt:

vncserver -kill :1

A kimenetnek így kell kinéznie, bár más PID-t fog látni:

Output
Killing Xtightvnc process ID 17648

A xstartup fájl módosítása előtt készítsen biztonsági másolatot az eredetiről:

cp ~/.vnc/xstartup ~/.vnc/xstartup.bak

Nyissuk meg az xstartup fájlt, a nano szövegszerkesztővel:

nano ~/.vnc/xstartup

Az ebben a fájlban található parancsok automatikusan végrehajtásra kerülnek, amikor elindítjuk- vagy újraindítjuk a VNC-kiszolgálót. Adjuk hozzá a startxfce4 parancsot a fájl végéhez. Természetesen azt feltételezem, hogy a Debian rendszered grafikus felülete neked is XFCE:

#!/bin/sh

xrdb "$HOME/.Xresources"
xsetroot -solid grey
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession
startxfce4 &

Most indítsa újra a VNC-kiszolgálót:

vncserver

Ehhez hasonló kimenetet fogunk látni:

Output
New 'X' desktop is your_hostname:1

Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log

Ha a konfiguráció megvan, akkor már csatlakozhatunk is a szerverhez.

Automatizált Indítás

Jelenleg egy újraindítás után a vnc szerver nem fog automatikusan elindulni, a felhasználó jogosultságával kell indítani egy terminált és ott kiadni a vncserver utasítást. Ez nem túl kényelmes, ezért indítsuk el szolgáltatásként a rendszer indulásával együtt. Hozzuk létre a megfelelő állományt:

nano /etc/systemd/system/vncserver.service

Illesszük be az alábbi tartalmat:

[Unit]
Description=TightVNC server
After=syslog.target network.target

[Service]
Type=forking
User=berti
PAMName=login
PIDFile=/berti/.vnc/%H:1.pid
ExecStartPre=-/usr/bin/vncserver -kill :1 > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -geometry 1366x768
ExecStop=/usr/bin/vncserver -kill :1

[Install]
WantedBy=multi-user.target

A piros színnel kiemelt részeket módosítsuk a saját jellemzőinknek megfelelően. A -geometry 1366×768 azt jelenti, hogy teljes képernyő esetén erre a méretre optimalizál a vnc szerver. Ezt megint csak a saját kliens megjelenítőnkre optimalizáljuk.
Tájékoztassuk a rendszert a változásokról:

sudo systemctl daemon-reload

Engedélyezzük a szolgáltatást:

sudo systemctl enable vncserver.service

A szolgáltatás indítása előtt – ha fut – állítsuk le a szolgáltatást:

vncserver -kill :1

Majd indítsuk el a szolgáltatást:

systemctl start vncserver.service

MultiUser

Kiegészítésként annyit, hogy amennyiben több felhasználó részére is biztosítunk vnc szolgáltatást, akkor a leíró fájl neve legyen vncserver@1.service. Ezzel paraméterátadást tudunk elérni, az 1 értéke környezeti változóként kerül átadásra. A fenti fájlban az 1-esek helyére „%i„-t írva a „%i” helyére a változó értéke kerül átadásra. Így a display pid-ek értékeinek megfelelően, több szolgáltatás leíró állományt tudunk létrehozni. Ez esetben így nézne ki a tartalmom:

[Unit]
Description=TightVNC server
After=syslog.target network.target

[Service]
Type=forking
User=berti
PAMName=login
PIDFile=/berti/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -geometry 1366x768
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

Biztonságos elérés

Amennyiben titkosított csatornán keresztül szeretnénk csatlakozni, használjuk az ssh tunneling technikát:

ssh -L 5901:127.0.0.1:5901 -C -N -l berti <szerver ip>

Így a vnc kliensprogramban a: localhost:5901 címen érhetjük el biztonságos csatornán a szolgáltatást. Tulajdonképpen itt végeztünk is, a szoftvernek Windows-os verziója is elérhető, erről további információ itt található.

RDP Telepítés

Adjuk ki konzolban az alábbi parancsot:

apt install xrdp

Alapértelmezés szerint az Xrdp azt a /etc/ssl/private/ssl-cert-snakeoil.key fájlt használja , amelyet csak az „ssl-cert” csoport tagjai olvashatnak. Adjuk hozzá az xrdp felhasználót a ssl-cert csoporthoz, hogy titkos csatornán történjen a kommunikáció:

adduser xrdp ssl-cert

Szerkesszük az alábbi fájlt:

nano /etc/xrdp/xrdp.ini

Módosítsuk az alábbi jellemzőt:

new_cursors=false

Lépjünk át annak a felhasználónak a konzol felületére, akinek az asztalához csatlakozni kívánunk:

su - <felhasználói név>

Hozzuk létre az alábbi konfigurációs állományt:

vi ~/.xsession

Illesszük be az alábbi tartalmat:

xfce4-session
export XDG_SESSION_DESKTOP=xubuntu
export XDG_DATA_DIRS=/usr/share/xfce4:/usr/local/share:/usr/share:/var/lib/snapd/desktop:/usr/share
export XDG_CONFIG_DIRS=/etc/xdg/xfce4:/etc/xdg:/etc/xdg

Indítsuk el a szolgáltatást:

systemctl enable xrdp
systemctl restart xrdp

Készen is vagyunk, indítsuk újra a rendszert és teszteljük a munkánkat.