VNC:n käyttöönotto
VNC: Virtual Network Computing, kehittänyt AT&T Laboratories,
Cambridge. Nykyään VNC:tä kehittää kaupallinen
firma nimeltään RealVNC jonka kotisivu löytyy osoitteesta
http://www.realvnc.com/
. VNC on ohjelmisto, jolla tietokonetta voi etäkäyttää
graafisesti. X Windowing System on ollut toki olemassa jo toistakymmentä
vuotta ellei kauemminkin ja sillä konetta voi etäkäyttää
graafisesti, sehän on arkipäivää. VNC menee kuitenkin
pari askelta pidemmälle. Siinä, missä X toimii lähinnä
vain Unixissa ja Unixin johdannaiskäyttöjärjestelmissä,
VNC toimii ainakin Unixissa ja Unixin johdannaisissa, Windowsissa, MacOS:ssa,
Amigassa, Nokian 9110-kommunikaattorissa ja ties missä muissa, lähdekoodi
kun on saatavilla. Lisäksi VNC ei toimi vain esim. välillä
Unix-Unix tai Windows-Windows, vaan mistä tahansa mihin tahansa. Linux-Windows,
Windows-Solaris, NetBSD-Amiga, U name it. Lisäksi, jos käyttää
X:ää ja päätepää sattuu kaatumaan tai täytyy
sulkea, kaikki istunnon ohjelmat menevät pois. VNC:llä ohjelmat
pysyvät käynnissä niin kauan kuin serveripää pysyy
pystyssä eikä VNC-serveriä suljeta. Tästä lisäetuna
tulee vielä se, että istuttuaan koneen A ääressä
henkilö voi laittaa VNC:n kiinni, siirtyä koneelle B ja avata
VNC:n sinne ja saa työpöytänsä koskemattomana mukaansa.
Huonona puolena on se, että VNC:n tietoturva on samaa luokkaa telnetin
kanssa eli tietoturva on kehno! Kaikki näppäinpainalluksesi
menevät verkossa salaamattomina ja ovat hyvin, hyvin helposti salakuunneltavissa.
Tämä
mielessä aina VNC:tä käyttäessäsi. Jokainen salasana,
jokainen sähköposti, jonka VNC-yhteyden yli kirjoitat, kulkee
verkossa salaamattomana. Tämä saadaan kuntoon tunneloimalla VNC
SSH:n sisään. Ohje siihen
Let's laitetaan homma käytäntöön. Esimerkkinä
on Fedora Core 2:a pyörittävä Linux-kone, jota halutaan
etäkäyttää Windowsista. Linux-koneen root on toivottavasti
tehnyt seuraavat toimenpiteet:
-asentanut VNC-serverin, löytyy Fedoran asennuspuusta, vncserver-xxxxxxx.rpm
-avannut palomuurista portin 22, SSH.
Jos nuo ovat kunnossa, käyttäjä Nano Nano voi istuutua Windows-koneellensa ja ottaa SSH-yhteyden Linux-serveriin. SSH:sta nykyaikana pitäisi käyttää vain versiota 2. SSH2:n ymmärtämäksi pääteohjelmaksi Windowsille käy vaikkapa nähtävästi hyväksi havaittu PuTTY. PuTTYyn Host Nameksi Linux-koneen täydellinen nimi tai IP-osoite, protokollaksi SSH. Shellissä käyttäjä sanoo "vncserver" joka havaitessaan tämän olevan ensimmäinen käyttökerta kysyy ensin salasanan ja kahteen kertaan ja salasanan pitää olla kuusimerkkinen tai pidempi. Tämä salasana on käytössä kun VNC-serveriä aletaan etäkäyttää. Turvallisuusvinkki: Kannattaa laittaa eri salasana kuin Linux-käyttäjätunnukseen, jotta mahdollisella murtautujakandidaatilla olisi mahdollisimman paljon kapulia rattaissa. Kun VNC on saanut käyttäjältä hyväksi havaitsemansa salasanan, itse VNC-serveri käynnistyy. Siitä kielivät seuraavanlaiset tekstit:
New 'X' desktop is kone.domain.fi:1
Starting applications specified in /home/nanonano/.vnc/xstartup
Log file is /home/nanonano/.vnc/kone.domain.fi:1.log
Merkille pannaan rivi "New 'X' desktop is", jossa sanotaan VNC-serverin
täydellinen osoite.
Seuraavaksi pitää hankkia päätepään ohjelma.
Se löytyy jo mainitun linkin http://www.realvnc.com/
takaa, vasemmassa laidassa nappula "download it now". Windowsille saat
zip-paketin, josta tarvitsee purkaa vain ohjelma vncviewer.exe. vncviewer
käyntiin, niin se kysyy VNC-serverin nimen. Kirjoita nimeksi koko
rimpsu mallia kone.domain.fi:1 ja enter, VNCviewer kysyy salasanaa, kirjoita
se VNC:n salasana jonka serveriä ensimmäistä kertaa käynnistäessäsi
annoit. Jos homma meni putkeen, sait nenäsi eteen ikkunan jossa on
VNC-työpöytäsi. Nam.
Yhteys on nyt salaamaton eli jokainen näppäimenpainallus
menee verkossa salaamattomana. Vaikka salakuuntelemisen riski labraverkossamme
on vain pienehkö, itse en takoisi mitään tärkeitä
salasanoja salaamattoman VNC-yhteyden yli (enkä kyllä labroissa
muutenkaan, muutama näppäimistöskannausohjelma on jo löytynyt).
Next Step: SSH-tunnelointi.
Tässä kohtaa tulee vähän kommervenkkiä. Olen odotellut, josko VNC-vieweristä tulisi versio, jossa on sisäänrakennettu SSH. Sitä kun nyt ei ole, pitää temppu tehdä puTTYllä. Näit siis äsken, että VNC-serveri tuli Linux-serveriin näytöksi :1. Se tietää sitä, että kyseisen VNC-serverin käyttämä portti on 5901, joka pitää nyt pistää puTTYn avulla tunneliin. Koska puTTY ei anna mahdollisuutta määritellä tunnelointia yhteyden ollessa auki, täytyy puTTY käynnistää uudelleen ja määritellä tunnelointi.
Tunneloinnin periaate on, että VNC:n siirtämä data siirretään ikäänkuin tekstipohjaisen yhteyden periaatteella käyttäen SSH:n käyttämiä TCP/UDP-portteja Koska VNC ei enää käytä porttia 590x, ei tule harmia palomuurien kanssa. Serveripää pakkaa ja suojaa datan ja puskee sen SSH-yhteyden käyttämään porttiin. Vieweripäässä tunnelointiohjelma ottaa datan SSH:n portista, kehittää koneeseen uuden TCP/UDP-portin numero 590x, josta normaali, mitenkään muuttelematon VNC-vieweri datan saa. Sama juttu toiseen suuntaan.
Tumasta toimeen. SSH-tunnelointi tehdään tällä kertaa PuTTYllä, koska se Win-koneesta jo löytyy. Ota Puttyllä SSH-yhteys serverikoneeseen. Kirjaudu sisään, käynnistä vncserver. Paina mieleesi VNC-serverin numero (:1, :2 jne.). PuTTY ei näytä antavan mahdollisuutta määritellä tunnelointia yhteyden ollessa olemassa. Käynnistä siis toinen PuTTY. Periaatteena on kirjautua SSH:lla serverikoneeseen, jolloin saadaan SSH authorisoitua, ja samalla tehdään tunnelointi.
By the way, PuTTYn versio on tässä 0.53b. Vanhemmissa tunnelointia ei välttämättä ole. Hae siis riittävän uusi PuTTY. Connection->SSH->Tunnels-välilehdeltä alareunaan kirjoita Source Portiksi se portti, jota haluat viewer-koneessa käyttää, väliltä 5901...590n. Destination-kohtaan serverikoneen tiedot eli IP-osoite tai nimi ja portti, kaksoispisteellä erotettuna. Tässä portti on 5900 + VNC-serverin numero, tätä varten se serverin numero piti muistaa. MUISTA KLIKATA ADD! Saat Forwarded ports-listaan tunneloinnin tiedot. Session-välilehti, ota normaalisti yhteys serverikoneeseen ja kirjaudu sisään. Käynnistä sitten viewer-koneessa vncviewer ja serverikoneen nimen tai IP-osoitteen sijaan kirjoita localhost:n, jossa n on tässä ohjeessa muutamaa riviä aiemmin asettamasi haluamasi portin viimeinen numero. Jos laitoit Source Portiksi 5901, kirjoita vncvieweriin localhost:1 . Siitä normaalisti VNC:llä sisään. Kun VNCViewer aukeaa näyttämään serveriä, voit sanoa PuTTYissa että exit, joka sulkee teksti-SSH-yhteyden. Eipähän jää avonaisia shellejä. Älä kuitenkaan sulje PuTTYä sulkunappulasta, sillä silloin katkeaa myös tunnelointi.
Jos haluat VNC-serveristä eroon, ota vapaa shelli ja kirjoita siihen
"vncserver -kill :y", jossa y on VNC-serverisi numero. Jos homma toimii,
VNC-viewer katoaa silmänräpäyksessä ja VNC-serveri
on mennyttä. Ellei tuo tehoa, voit toki sanoa "killall -9 Xvnc", joka
tappaa koneesta kyselemättä kaikki nimissäsi olevat VNC-serverit.
VNC-serveri ei tee prosessia nimeltään vncserver vaan Xvnc, koska
vncserver on vain scripti, joka antaa Xvnc:lle parametrit ja itse Xvnc
jää hoitamaan hommaa. Raa'alla kill-komennolla tappaminen jättää
kyllä /tmp-hakemistoon lukkotiedostoja, jotka "syövät" VNC-servereiden
portteja ja lukkotiedostot täytyy siivota pois käsivaivalla.
Käyttäkää siis komentoa vncserver -kill.
Fedora Core 2:ssa VNC-työpöytä on aika karu, ikkunamanagerina twm ja yksi shell annetaan eväiksi. Muutetaan tämä käyttökelpoisempaan muotoon.
Ensinnäkin varmaan halutaan tehtäväpalkki, start-nappula ynnä muut nykypäivän tilpehöörit. Ne saadaan hyvin helposti, jos työpöytämanageriksi käy Gnome. Jotta Gnome saadaan käynnistymään automaattisesti VNC-serverin kanssa, editoidaan konfiguraatiotiedostoa kotihakemistostasi. Hanki eteesi shelli ja editoi kotihakemistostasi löytyvää tiedostoa ".vnc/xstartup". Huomaa piste, todella ".vnc/xstartup". Sieltä löytyy rivi "twm &". Poista se ja kirjoita tilalle "gnome-session &". Ellet halua sitä tyhmää shelliä auki aina vncserverin käynnistyksessä, poista rivi "xterm ....". Ellet muuta editoria osaa, käytä picoa tai nanoa. "pico -w .vnc/xstartup". -w estää pitkien rivien katkeilemisen. CTRL-x tallentaa. nano toimii just samoin.
Jos VNC-serverin haluaa jättää auki vaikkapa yön ajaksi, kannattaa huomata, että siinä on auki shellejä, taskbar ja yleensäkin kaikki koneen käyttöön tarvittava. Jos murtautuja onnistuu löytämään vnc-serveristä bugin tai saa tietoonsa VNC-salasanasi, hän voi kaapata VNC-istuntosi käyttöönsä ja myydä vaikka pikkupöksyjä nimissäsi ynnä muuta varsin ikävää. Jos VNC-työpöydällä sattuu olemaan rootin oikeuksin shelli auki.... kone on käytännössä mennyttä eli se joudutaan asentamaan alusta asti uudelleen, koska rootin oikeuksin murtautuja voi tehdä koneen tietoturvasta reikäisen kuin sveitsinjuuston, mm. avaamaan palvelun, jonka kautta hän pääsee jatkossa vaikeuksitta koneeseen rootiksi kenenkään huomaamatta, käyttämään konetta hyökkäyksiin FBI:tä tai jotain muuta Ikävää Isoa Firmaa vastaan. Laitetaan siis kapulia taas rattaisiin, pistetään työpöytä lukkoon.
Lukkoon työpöydän saa helposti: Gnomen tehtäväpalkissa on knappula, jossa munalukon kuva. Painallus siitä, niin muutaman sekunnin pohtimisen jälkeen kuva menee mustaksi. Hiiren liikautuksella esiin tulee ikkuna, jossa kysytään salasanaa. Linux-salasanallasi saat lukituksen auki. Käyntiin lähtee myös silmiä hivelevä näytönsäästäjä, joka VNC-yhteyden yli ei välttämättä kuitenkaan hivele silmiä. Gnomeen liitetyt näytänsäästäjät kun ovat varsinaisia grafiikkahirmuja ja pyörivät kunnolla vasta noin 2.7 THz:n Flentiumilla, jossa kiinni 1000x AAAGP eli Aivan Autuaaksitekevän Advanced Graphics Port joka siirtää vähintään miljuuna teratonnitavua sekunnissa. Raukkaparka VNC joutuu kaiken puskemaan 100 Mbps verkkokortin läpi eli frameja tippuu ns. sikana ja verkkokortti sekä koneen prosessori ovat tukkoon asti kuormitettuja. Näytönsäästäjäksi painokkaasti suosittelen ns. Blank Screen eli tyhjä ruutu -säästäjää. Määritellään se seuraavaksi. Käynnistä shellistä xscreensaver-demo (tai menusta Preferences -> Screensaver). Display Modes -välilehdellä on knappula Mode. Laita siihen Blank screen only.
Kohdasta Lock screen after voidaan laittaa työpöydän
lukitus automaattiseksi ja suosittelen laittaa sen automaattiseksi. Jos
Verkko vaikka kaatuu kesken VNC-käytön, VNC-työpöytä
menee muutaman minuutin kuluessa automaattisesti lukkoon eikä jää
auki vaikkapa yöksi. Kohtaan Blank screen after ajaksi vaikka 10 minuuttia,
sitten Lock screen after -ruutuun rasti. ja ajaksi minuutti.
Red Hatin jäljiltä VNC-serveri näyttää olevan
sillä mallilla, että siihen pääsee kiinni useammalla
clientillä yhtaikaa eli kun värkkäät VNC:llä,
jollakulla toisella voi olla, jos on saanut tietoonsa VNC-salasanasi tai
onnistunut murtautumaan VNC-serveriin, VNC-työpöytäsi näkösällä
ja lysti on tietenkin suurta kun saa seurata, mitä koneellasi puuhaat.
Kun sitten jätät VNC-työpöydän hetkeksi koskemattomaksi,
hän avaa shellin ja lähettää nimissäsi uutisryhmiin
pikkupöksyjen myynti-ilmoituksen tai haukkuu pomosi. Tätähän
toki emme halua. vncserver-skripti avaa VNC-serverin itse asiassa komentaen
käyntiin ohjelman nimeltään Xvnc ja antaen sille parametrit.
Xvnc osaa myös parametrin -nevershared, joka ohjaa Xvnc:n nitistämään
wanhan vncviewerin pois, kun uusi yhteys otetaan. Lisätään
-nevershared vncserverin käynnistykseen: pico -w vncserver, noin rivillä
140 ovat Xvnc:n parametrit, parametri per rivi. Rivit ovat mallia
$cmd .= " -rfbauth $vncUserDir/passwd"; . Lisätään
mallin mukaisesti rivi
$cmd .= " -nevershared" . Seuraava käynnistettävä
VNC-serveri huolii sitten vain yhden viewerin kerrallaan.
1. Yhteys ei ole tunnetuilla keinoilla helposti salakuunneltavissa;
suojaustaso on sama kuin SSH:lla.
2. VNC-yhteys onnistuu läpi palomuurien, joissa auki on vain SSH-portti
3. SSH:n pakkaamisoptiolla saadaan VNC-yhteys mahdollisesti toimimaan
nopeammin.
ssh -L 5901:serveri.domain.fi:5903 -l <käyttäjätunnus> serveri.domain.fi
...ja normaalisti serverikoneeseen sisään. SSH-tunneli on nyt auki, jos homma meni putkeen. Selitykset: ssh on komento, -L sanoo että nyt tehdään port forward eli tunnelointi, 5901 on portti, jossa VNC-serverin halutaan viewer-koneessa näkyvän, serveri.domain.fi on server-koneen nimi tai IP-osoite, 5903 on VNC-serverin näytön numerosta johdettu portin numero, -l kertoo että seuraavaksi tulee käyttäjätunnus, <kayttajatunnus> on se käyttäjätunnus, serveri.domain.fi on toistamiseen VNC-serverikoneen nimi tai IP-osoite.
Sitten viewer-koneessa komento
vncviewer -encodings hextile localhost:1
... ja vnc-salasana. Jos kaikki meni putkeen, VNC-serverin näyttö aukeaa Linux-koneesi ruudulle. Tässä vncviewer on komento, -encodings hextile kertoo, että käytetään hextile-pakkausta. Pakkaus pitää kertoa, koska muuten VNCviewer sanoo, että "same machine: preferring RAW encoding" eli ei pakkaa VNC-dataa lainkaan, jolloin verkko valittaa ja käyttö on tahmaista. localhost:3 on koneen oma IP-osoite ja tunneloidun VNC-yhteyden portti, vrt. ylemmällä rivillä 5901:serveri...
Jos haluat SSH-kompressoinnin tähän päälle, se tehdään ssh-komennon yhteydessä: lisää vain lippu -C, siis ssh -C -L 5901:serveri.....
N'Zoi!
-A
Sivua päivittänyt viimeksi Archy
21.2.2005