Portál AbcLinuxu, 30. dubna 2025 10:11

Guacamole - HTML5 remote desktop

19.8.2013 16:30 | Přečteno: 3179× | Výběrový blog | poslední úprava: 19.8.2013 17:23

V lednu jsem tady zveřejnil příspěvek o tunelování skrz korporátní proxy, samozřejmě takové řešení není zrovna ve shodě s bezpečnostní politikou, ale mít přístup k vlastnímu linuxovému systému se prostě hodí, tak jsem se rozhodl toto řešení "zlegalizovat".

Jednoduše jsem přestěhoval ssh do web browseru, vlk se nažral a koza zůstala celá. Ale když už tak už, co takhle přístup k plnému Xfce desktopu přes webový prohlížeč. Nakonec, taky je to jen otázka instalace několika balíků a jednoduché konfigurace.

Hezky od začátku

Jedná se o kombinaci debian+xfce+xrdp+guacamole+lighttpd (reverzní proxy), a začneme hezky od začátku roztočením nové VM s minimální instalací debianu.

Nainstalujeme základní balíčky a xfce (a lightdm):

aptitude install openssh-server vim xfce4 lightdm sudo

Teď stačí zapnout lightdm pomocí "service lightdm start" a přihlásit se do Xfce (lightdm také naskočí po rebootu).

Osobně mi výchozí vzhled Xfce moc nesedí, takže ještě doinstaluji Greybird téma (které závisí na gtk3-engines-unico a gtk2-engines-murrine) a ikonky elementary.

aptitude install gtk3-engines-unico gtk2-engines-murrine

Samotné greybird téma je možné stáhnout z http://shimmerproject.org/project/greybird/ a stačí rozbalit tarball do ~/.themes. Obdobně, elementary ikonky stačí rozbalit do ~/.icons. A po té v Xfce v menu "Settings->Appearance" vybrat příslušné téma a ikonky.

Xrdp

Teď už je čas na xrdp. Jak už to tak bývá, instalace není o nic složitější než:
aptitude install xrdp

Můžeme otestovat buď pomocí "xfreerdp adresa_serveru" z linuxu (xfreerdp je v debianu/ubuntu v balíčku freerdp-x11) a nebo pomoci klienta z Windows. Samozřejmě je potřeba si dát pozor, aby připojení někde po cestě neblokoval firewall (tcp port 3389).

Guacamole

Další na řade je guacamole (samotná RDP->HTML5 proxy). Guacamole je rozděleno do dvou balíků (guacd: demon, který funguje jako proxy mezi RDP, VNC, SSH apod. a guacamole protokolem, který pak interpretuje javascript běžíci v prohlížeči; guacamole: jednoduchá webová aplikace v javě, která stojí mezi guacd a prohlížečem).
aptitude install guacd libguac-client-rdp0 guacamole guacamole-tomcat

Co se týka konfigurace guacamole, stačí přidat uživatele, nastavit heslo a povolit připojení k vybraným serverům. K tomu slouží /etc/guacamole/user-mapping.xml - ten by měl vypadat přibližně takto (pozn.: heslo zatím nastavte dočasné na otestování, než v posledním kroku přidáme HTTPS reverzní proxy).

<user-mapping>
    <!-- documentation: http://guac-dev.org/Configuring%20Guacamole -->
    <authorize username="luv" password="abclinuxu">
        <protocol>rdp</protocol>
        <param name="hostname">localhost</param>
        <param name="port">3389</param>
    </authorize>
</user-mapping>
Poté je potřeba vyresetovat tomcat.
service tomcat6 restart

To je vše :-). Teď stačí v prohlížeči otevřít http://server:8080/guacamole ... magic! (Ale pozor, v této staré verzi guacamole se kurzor zobrazuje jako vysloveně miniaturní černá tečka, což je ze začátku dost matoucí).

Lighttpd (mod_proxy) a https

Samozřejmě začneme nainstalovánim lighttpd

aptitude install lighttpd

Vygenerujeme self-signed ssl certifikát

cd /etc/lighttpd/
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out key.pem -days 3650 -nodes
V /etc/lighttpd/lighttpd.conf pak stači přidat "mod_proxy" do sekce server.modules a také následující řádky:
server.port = 443
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/key.pem"
proxy.server  = ( "" => ( ( "host" => "127.0.0.1", "port" => "8080" ) ) )
Ještě můžeme přidat následující rewrite pravidlo, které automaticky přidá "/guacamole/" před vsechny URL (snažší než nastavovat výchozí servlet v tomcatu ;-) ):
url.rewrite-once = ( "(.*)" => "/guacamole/$1" )
Kompletní lighttpd config pak může vypdat třeba takto:
server.modules = (
        "mod_compress",
        "mod_proxy",
        "mod_rewrite",
)

server.port = 443
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/key.pem"
proxy.server  = ( "" => ( ( "host" => "127.0.0.1", "port" => "8080" ) ) )

url.rewrite-once = ( "(.*)" => "/guacamole/$1" )

server.document-root        = "/var/www"

server.errorlog             = "/var/log/lighttpd/error.log"
server.pid-file             = "/var/run/lighttpd.pid"
server.username             = "www-data"
server.groupname            = "www-data"
Nové nastavení můžeme otestovat z prohlížeče na adrese https://server

Závěrečná čistka

Také by bylo záhodno, aby se na tomcat nedalo připojit přímo, ale pouze přes reverzní proxy o kterou se nám stará lighttpd. V /etc/tomcat6/server.xml najdeme tag "Connector" a přidáme atribut address="127.0.0.1"
    <Connector address="127.0.0.1" port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               URIEncoding="UTF-8"
               redirectPort="8443" />
A vyresetujeme tomcat:
service tomcat6 restart
Ještě bych doporučil změnit heslo v guacamole, když už teď bude všechno chodit přes https. A rovnou můžeme uložit nové heslo v user-mapping.xml jako md5 hash. Nejdříve vygenerujeme md5 hash:
cat | tr -d '\n' | md5sum
A do tagu authorize přidáme atribut encoding="md5". Nový /etc/guacamole/user-mapping.xml pak může vypadat takto:
<user-mapping>
    <!-- documentation: http://guac-dev.org/Configuring%20Guacamole -->
    <authorize username="luv" password="a1f0ce24f2a7d1731f768c0b655ca3b5" encoding="md5">
        <protocol>rdp</protocol>
        <param name="hostname">localhost</param>
        <param name="port">3389</param>
    </authorize>
</user-mapping>

Závěr

Rozjet remote desktop přístupný přes webový prohlížeč není žádná rocket science, a tak si v příštím díle ukážeme, proč to dělat jednoduše, když to jde složitě ... a budeme patchovat, kompilovat, řesit vlastní deployment xrdp a guacamole, rozchodíme si xrdp a guacamole i se zvukem a také se zbavíme závislosti na šílenosti jménem tomcat.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

19.8.2013 18:06 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Odpovědět | Sbalit | Link | Blokovat | Admin
Hm, něčeho podobného by šlo dosáhnout s Xspice + spice-html5. V moderních distribucích bez kompilací. ;-) K testování spice-html5 jsem se nedostal, nicméně podle ohlasů by to chodit mělo.
oVirt | SPICE
19.8.2013 18:26 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Podle toho "bez kompilaci" hadam, ze reagujes na ten zaver kde zminuju provoz Xrdp s podporou presmerovani zvuku ... pokud je Xspice a spice-html5 primo v distru a fakt to chodi se zvukem bez problemu tak proc ne. Pokud ale neni potreba presmerovani zvuku, tak bych se drzel overeneho a sel do Guacamole, to ostatne bude brzo(?) podporovat i SPICE.
19.8.2013 19:05 David Jaša | skóre: 44 | blog: Dejvův blog
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Jo to pardon, spice-html5 zvuk neumí. Jakmile spice jako takový přejde na Opus, mělo by to být v html5 verzi brzy.
19.8.2013 19:26 dizz | skóre: 21 | blog: Dizzyho_Blog
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Odpovědět | Sbalit | Link | Blokovat | Admin
Diky borci, davam do TODO listu s cim si hrat ;-)
Chuck Norris dohral GNU/Linux... a dvakrat!
20.8.2013 16:34 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
To si teprv pockej na druhy dil :-)
20.8.2013 19:21 kyytaM | skóre: 35 | blog: kyytaM | Bratislava
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Odpovědět | Sbalit | Link | Blokovat | Admin
A kombinacia XRDP s FreeRDP-WebConnect? :)
20.8.2013 20:06 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
In particular it relies on the Canvas and the WebSockets feature.
Neprojde pres korporatni proxy :-)
20.8.2013 20:23 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
A par dalsich duvodu:
  • Guacamole je overenejsi a ma balicky primo v Debianu
  • aktivni vyvoj a kvalitni dokumentace
  • umi radu ruznych protokolu (a dokonce i presmerovani zvuku)
Max avatar 20.8.2013 22:39 Max | skóre: 72 | blog: Max_Devaine
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Odpovědět | Sbalit | Link | Blokovat | Admin
Zajímavé. Osobně mám postavený terminal server na FreeNX, ale už je to relativně mrtvoučká záležitost a hledám něco lepšího. Důležité také je, aby to dobře lítalo na pomalejších lajnách. Zatím spíš jen dělám menší průzkum, každopádně jsem myslel, že spice je k lince mnohem šetrnější, nebo se pletu?
Zdar Max
Měl jsem sen ... :(
20.8.2013 23:56 smazáno | skóre: 18 | blog: smazáno
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Jo jasne, na tohle Xrdp idealni asi nebude (navic v tom setupu co jsem zde popsal Xrdp pouziva VNC ke komunikaci s X serverem (Xvnc) ).
27.8.2013 07:47 boar | skóre: 25 | Praha
Rozbalit Rozbalit vše Re: Guacamole - HTML5 remote desktop
Odpovědět | Sbalit | Link | Blokovat | Admin
Zdar Vypada to pekne, ale ja hledam alternativu logmein/teamview ale na vlastnim serveru. potrebuju, aby zakaznik (popripade maminka:-) kliknul na odkaz/stahnul exe/nebo tak ... a ja jsem mel v tu chvili moznost se k nemu pripojit.

Zasadni problem je, ze zakaznik (i ja) muzeme byt v tu chvili za natem. Jedine co jsem nalezl, je ultravnc single click. http://www.uvnc.com/downloads/single-click.html nicmene je to celkem krkolomne, a pouziva to nejaky nekompatabilni RFB protokol. - nefunguje to na linuxu s kazdym vnc. navic, nejdriv u sebe musim udelat ssh tunel na server s port forwardem a pustit vnc klienta v modu listen, a pak zakaznik muze spusit jakysi exe, (ktery se mimochodem generuje na strankach uvnc).

Moje predstava je: zakaznik vleze na www.mujserver.nekde/link_pro_remote stahne + spusti exe/stahne + spusti jar ja provedu vncview mujserver:nejakyport a hotovo.

Nejake tipy ?

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.