Ovo je (ili bi trebao biti) vodič u pokretanju X aplikacija preko mreže. Usredotočen je na sigurnost. Napisao sam ga iz nekoliko razloga.
xhost +računalo
ili čak
xhost +
kako bi se omogućile X veze. Njihova sigurnost je smiješna, a ima
boljih načina.Ovaj dokument napisan je za Unix-olike sustave. I ako je vaš lokalni ili udaljeni operacijski sustav nešto drugo, ovdje ćete shvatiti kako stvari rade. Međutim, primjere ćete morati prevesti tako da odgovaraju vašem operacijskom sustavu.
Najnovija verzija ovog dokumenta uvijek se može dobiti WWW-om na http://www.xs4all.nl/~zweije/xauth.html. Također je dostupna kao Linux Remote X Apps mini-HOWTO na http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps. Linux (mini-)HOWTO-i dostupni su HTTP-om ili FTP-om s sunsite.unc.edu.
Ovo je verzija 0.4.0. Nema jamstava, samo dobre namjere. Rado primam prijedloge, ideje, dodatke, korisne pokazivače, (pravopisne) ispravke, itd.... Želim da ovaj dokument ostane jednostavan i čitljiv, u najboljem KAKO stilu. Flejmovi u /dev/null.
Sadržaj zadnji put osvježio Vincent Zweije 14. srpnja 1998.
Kevin Kenny je napisao povezan dokument, What to do when Tk says that your display is insecure (što učiniti kad Tk kaže da je vaš prikaz nesiguran). Nalazi se na http://ce-toolkit.crd.ge.com/tkxauth/. Predlaže slično rješenje X autorizaciji (xauth). No Kevin se više usmjerio na olakšavanje uporabe xautha preko xdma.
Također sam obavješten da je dobar izvor informacija The X System Window System Vol. 8 X Window System Administrator's Guide kojeg je izdao O'Reilly and Associates. Nažalost, nisam uspio provjeriti.
I još jedan dokument vrlo sličan onom kojeg čitate, naslova Securing X Windows, može se naći na http://ciac.llnl.gov/ciac/documents/ciac2316.html.
Također pogledajte usenet grupe kao što je comp.windows.x, comp.os.linux.x i comp.os.linux.networking.
Koristite dva računala. Na prvom gledate i tipkate u X Window System. Na drugom obavljate neke važne grafičke poslove. Hoćete da drugo rezultate pokaže na prvom. X Window System to čini mogućim.
Naravno, prvo vam treba veza između njih. I to što brža; X protokol užasno je zahtjevan. Ali, uz malo strpljenja i odgovarajuće sažimanje prokola, aplikacije možete pokretati i preko modema. Ako vas zanima kompresija X protokola, pogledajte dxpc, http://ccwf.cc.utexas.edu/~zvonler/dxpc/ ili LBX, http://www.ultranet.com/~pauld/faqs/LBX-HOWTO.html (također poznat kao LBX mini-HOWTO).
Za sve to trebate napraviti dvije stvari:
Čarobna je riječ DISPLAY (prikaz). Na X Window Systemu zaslon se (pojednostavljeno) sastoji od tipkovnice, miša i zaslona. O prikazu se brine program poznat kao X server. Server sposobnost prikaza daje drugim programima koji su na njega spojeni.
Prikaz ima svoje ime, kao što je:
DISPLAY=svemir.svjet.la:0
DISPLAY=localhost:4
DISPLAY=:0
Ono se sastoji od imena računala (kao što je svemir.svjet.la
ili
localhost
), dvotočke (:) i nastavka (kao što je 0 ili 4). Ime računala
označava računalo na kojem X server radi. Ako ga nema, misli se na lokalni
stroj. Nastavak je obično 0 --- on se mijenja ako je na jednom računalu više
prikaza.
Ako ikad naletite na ime prikaza s .b na kraju, to je broj zaslona. Prikaz zapravo može imati i više zaslona. No obično postoji samo jedan, s brojem b=0.
Ima i drugih oblika DISPLAY-a, ali ovo je dovoljno za naše potrebe.
Program klijent (vaša grafička aplikacija, na primjer) saznaje na koji će se
prikaz spojiti preko DISPLAY varijable okružja. Nju možete nadjačati
davanjem argumenta -display računalo:0
pri pokretanju programa. Malo
primjera razjasnit će stvari.
Jedno računalo poznato je kao svemir
, a mi smo u domeni
svjet.la
. Ako radimo na normalnom X serveru, prikaz se zove
svemir.svjet.la:0
. Hoćemo pokrenuti xfig, program za crtanje, na
udaljenom računalu koje se zove crna.ru.pa
i prikazati ga ovdje,
na svemir
-u.
Ako na udaljenom računalu radite u cshu:
crna% setenv DISPLAY svemir.svjet.la:0 crna% xfig &Ili:
crna% xfig -display svemir.svjet.la:0 &
Ako na udaljenom računalu radite u shu:
crna$ DISPLAY=svemir.svjet.la:0 crna$ export DISPLAY crna$ xfig &Ili:
dark$ DISPLAY=svemir.svjet.la:0 xfig &Ili, naravno:
dark$ xfig -display svemir.svjet.la:0 &
Izgleda da neke verzije telneta varijablu DISPLAY automatski prenose na udaljeno računalo. Ako imate jedan od njih, imate sreće i ne morate ništa raditi. Ako nemate, većina verzija telneta prenose TERM varijablu okružja; uz malo petljanja moguće je priljepiti DISPLAY na varijablu TERM.
Zamisao priljepljivanja je da pomoću neke skripte postignete slijedeće:
prije telneta verijabli TERM dodajte vrijednost varijable DISPLAY. Zatim
pokrenite telnet. Na drugom kraju veze, u odgovarajućoj .*shrc
datoteci
pročitajte vrijednost DISPLAY iz TERM.
Server ne prihvaća veze od bilo kamo. Ne želite da svi prikazuju prozore na vašem zaslonu. Ili čitaju ono što tipkate --- nemojte zaboraviti da je tipkovnica dio prikaza!
Čini se da premalo ljudi shvaća da je dopuštanje pristupa prikazu sigurnosni rizik. Netko tko može pristupiti vašem prikazu može čitati i mijenjati vaše ekrane, čitati vaše tipke i pratiti kretanje miša.
Većina servera poznaje dva načina autorizacije veza: mehanizam popisa računala (xhost) i mehanizam čarobnih riječi (xauth). Tu je i ssh, sigurna ljuska, koji može prenositi X veze.
xhost dopušta pristup na osnovu imena računala. Server ima popis računala koja se na njega smiju spojiti. Provjeru računala može i potpuno isključiti. Pažnja: to znači da provjera nema, pa se može spojiti bilo koje računalo!
Serverov popis računala nadgledate programom xhost. U prethodnom primjeru učinite ovo:
svemir$ xhost +crna.ru.pa
Ovo dopušta sve veze s računala crna.ru.pa
. Čim se vaš X klijent
spoji i prikaže prozor, radi sigurnosti onemogućite daljnja povezivanja
pomoću:
svemir$ xhost -crna.ru.pa
Provjeru računala možete ugasiti s:
svemir$ xhost +
Tako se isključuje provjera pristupa što omogućuje svima da se spoje. Ovo nikad nemojte napraviti na mreži na kojoj ne vjerujete svim korisnicima (kao što je Internet). Ponovo uključite provjeru računala pomoću:
svemir$ xhost -
xhost -
sam po sebi neće izbrisati sva računala iz popisa pristupa
(to bi bilo prilično beskorisno --- ne biste se mogli spojiti od bilo gdje,
čak ni sa svog lokalnog računala).
xhost je vrlo nesiguran mehanizam. Ne razlikuje pojedine korisnike na udaljenom računalu. Također, imena računala (zapravo adrese) mogu se krivotvoriti. To je loše ako ste na neprovjerenoj mreži (na primjer već i PPP pristupom na Internet).
xauth omogućava pristup svakome tko zna pravu tajnu. Takva tajna zove se autorizacijski zapis, odnosno čarobni kolačić. Taj način autorizacije formalno se zove MIT-MAGIC-COOKIE-1.
Kolačići za razne prikaze spremljeni su zajedno u ~/.Xauthority/
.
S kolačićima se bavi program xauth, odakle dolazi i nadimak ove sheme. Vašem
~/.Xauthority
ne smiju moći pristupiti drugi korisnici.
Na početku rada server će pročitati kolačić iz datoteke
navedene uz -auth argument. Nakon toga, server dopušta veze samo onim
klijentima koji znaju isti kolačić. Kada se kolačić u ~/.Xauthority
promijeni, server neće prihvatiti promjenu.
Noviji serveri kolačiće mogu generirati u letu za klijente koji to zatraže.
No kolačići su još uvijek pohranjeni u serveri; ne završavaju u
~/.Xauthority
, osim ako ih klijent tamo stavi. Prema Davidu Wigginsu:
U X11R6.3 dodana je još jedna mogućnost koja bi vas mogla zanimati. Preko novog proširenja SECURITY sam X server može generirati i vraćati kolačiće u letu. Također, kolačići se mogu odrediti "nepovjerljivima" tako da su aplikacije koje se spajaju s takvim kolačićima ograničene u svom djelovanju. Na primjer, neće moći krasti ulaz s tipkovnice/miša ili sadržaj prozora od drugih, povjerljivih klijenata. xauthu je dodana nova podnaredba generate kako bi ta mogućnost bila barem iskoristiva, ako ne jednostavna.
xauth ima jasnu sigurnosnu prednost nad xhostom. Možete ograničiti pristup na određene korisnike na određenim računalima. Nije ranjiv na krivotvorene adrese kao xhost. A ako želite, možete ga koristiti zajedno s xhostom za dopuštanje veza.
Ako želite koristiti xauth, X server morate pokrenuti s argumentom -auth
datoteka
. Ako X server pokrećete startx
skriptom, tamo je pravo mjesto
za to. Ovako pripremite svoj autorizacijski zapis u svojoj startx
skripti.
Izvadak iz /usr/X11R6/bin/startx:
mcookie|sed -e 's/^/add :0 . /'|xauth -q xinit -- -auth "$HOME/.Xauthority"
mcookie je programčić iz paketa util-linux koji se distribuira s
ftp://ftp.math.uio.no/pub/linux/. Možete koristiti i md5sum za
pretvaranje nekih slučajnih podataka (na primjer, iz /dev/urandom
ili ps -axl
) u format kolačića:
dd if=/dev/urandom count=1|md5sum|sed -e 's/^/add :0 . /'|xauth -q xinit -- -auth "$HOME/.Xauthority"
Ako ne možete promijeniti startx
skriptu (jer niste root), neka to
učini vaš administrator, ili neka postavi xdm. Ako neće ili ne želi, možete
napraviti ~/.xserverrc
skriptu. Ako ona postoji, umjesto pravog X
servera pokreće ju xinit. Tako iz te skripte možete pokretati pravi X server
s potrebnim argumentima. Da bi to radilo, stavite gornji primjer u
svoj ~/.xserverrc
za stvaranje kolačića, a zatim izvršite pravi X
server:
#!/bin/sh mcookie|sed -e 's/^/add :0 . /'|xauth -q exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"
Ako za rad sa X-om koristite xdm, xauth možete lako koristiti.
Definirajte DisplayManager.authDir u /etc/X11/xdm/xdm-config.
xdm će argument -auth prenijeti X serveru kada ga bude pokretao. Kada se
logirate preko xdm-a, on za vas kolačić stavlja u vaš
~/.Xauthority.
Za više informacija pogledajte man stranicu xdm(1).
Na primjer, moj /etc/X11/xdm/xdm-config sadrži ovaj red:
DisplayManager.authDir: /var/lib/xdm
Sad, kad ste počeli rad u X-u na poslužitelju svemir.svjet.la
i svoj
kolačić imate u ~/.Xauthority
, trebate prenijeti kolačić klijentu
crna.ru.pa
.
To je najjednostavnije ako se vaš home direktorij dijeli između crna
i
svemir
. ~/.Xauthority
datoteke su jednake, pa se kolačić
prenosi automatski. Međutim, tu je zamka: kada u ~/.Xauthority
stavite kolačić za :0
, crna
će misliti da je to kolačić za njega,
a ne za svemir
. Kod stvaranja kolačića morate koristiti eksplicitno ime
računala; ne možete ga izostaviti. Isti kolačić za :0
i svemir:0
možete instalirati pomoću:
#!/bin/sh cookie=`mcookie` xauth add :0 . $cookie xauth add "$HOST:0" . $cookie exec /usr/X11R6/bin/X "$@" -auth "$HOME/.Xauthority"
Ako se home direktoriji ne dijele, kolačić možete prenijeti pomoću rsha, udaljene ljuske:
svemir$ xauth nlist :0 | rsh crna.ru.pa xauth nmerge -
Što će reći:
~/.Xauthority
(xauth nlist :0
).crna.ru.pa
(| rsh crna.ru.pa
).~/.Xauthority
(xauth nmerge -
).Moguće je da rsh neće raditi. Osim toga, rsh ima i sigurnosnih mana (opet lažna imena računala, ako se dobro sjećam). Ako ne možete ili ne želite koristiti rsh, kolačić možete prenijeti i ručno, na primjer ovako:
svemir$ echo $DISPLAY :0 svemir$ xauth list $DISPLAY svemir/unix:0 MIT-MAGIC-COOKIE-1 076aaecfd370fd2af6bb9f5550b26926 svemir$ rlogin crna.ru.pa Password: crna% setenv DISPLAY svemir.svjet.la:0 crna% xauth add $DISPLAY . 076aaecfd370fd2af6bb9f5550b26926 crna% xfig & [15332] crna% logout svemir$
Za više informacija također pogledajte man stranice za rsh(1) i xauth(1x).
Prijedlog: možda bi bilo moguće priljepiti kolačić TERM ili DISPLAY varijabli prilikom telneta na udaljeno računalo. To bi išlo na isti način kao i priljepljivanje DISPLAY varijable na TERM varijablu. Pogledajte dio Objašnjavanje klijentu. Tu se sami snađite, ali me zanima može li netko ovo potvrditi ili poreći.
X aplikacija na crna.ru.pa
, u primjeru xfig, automatski će u
~/.Xauthority
potražiti kolačić i njime se autentificirati.
Zapisi o autoritetu prenose se bez enkripcije. Ako ste zabrinuti da bi netko mogao prisluškivati vaše veze, koristite ssh, sigurnu ljusku. Proslijeđivat će X preko enkriptiranih veza. Osim toga, odlična je i za druge stvari. Dobra je strukturalna nadogradnja vašeg sustava. Samo posjetite http://www.cs.hut.fi/ssh/, ssh-ovu WWW stranicu.
Tko još zna nešto o autorizacijskim metodama ili enkriptiranju X veza? Možda Kerberos?
Kada prvi put pokrenete udaljenu X aplikaciju, obično ne radi. Evo nekoliko čestih grešaka, njihovih vjerojatnih uzroka, te rješenja koja bi vam mogla pomoći.
xterm Xt error: Can't open display:
U okružju nema DISPLAY varijable, a niste ga naveli aplikaciji ni preko
argumenta -display. Aplikacija pretpostavlja prazan niz, ali to je
sintaktički nepravilno. Da bi ovo rješili, provjerite da je varijabla
DISPLAY točno postavljena (pomoću setenv
ili export
, ovisno o
vašoj ljusci).
_X11TransSocketINETConnect: Can't connect: errno = 101 xterm Xt error: Can't open display: crna.ru.pa:0
Broj greške 101 znači "Mreža je nedostupna". Aplikacija nije mogla uspostaviti mrežnu vezu sa serverom. Provjerite da li je DISPLAY točan i da se do računala servera može doći s klijenta (trebalo bi se moći, ipak ste vjerojatno logirani na server i telnetom pristupate klijentu).
_X11TransSocketINETConnect: Can't connect: errno = 111 xterm Xt error: Can't open display: crna.ru.pa:0
Broj greške 111 znači "Veza odbijena". Spajanje na računalo server je uspjelo, ali tamo navedeni server ne postoji. Provjerite da li koristite pravo ime i broj prikaza.
Xlib: connection to ":0.0" refused by server Xlib: Client is not authorized to connect to Server xterm Xt error: Can't open display: crna.ru.pa:0.0
Klijent se povezao sa serverom, ali server mu ne dopušta korištenje (nije autoriziran). Provjerite da li ste klijentu prenijeli pravi čarobni kolačić i da on nije istekao (server uzima novi kolačić kod svakog pokretanja).
Najnovija verzija ovog prijevoda može se naći na http://dokumentacija.linux.hr/X-na-daljinu.html. Održava ga Matej Vela, mvela@public.srce.hr. Svi su prilozi, primjedbe i prijedlozi dobrodošli.