Systém X-Window

Autoři:
Martin Čadík, 5/24, e-mail: cadikm@centrum.cz
Martin Šaroun, 5/24, e-mail: sarounm@cs.felk.cvut.cz

Úvod

Systém X-Window (rovněž X11, nebo X) vznikl jako prostředek pro tvorbu grafických uživatelských rozgraní (GUI) a programů s grafickým rozhraním na univerzitě MIT v 80. letech. X-Window není úplným GUI, jedná se pouze o systém pro správu oken, jenž poskytuje funkce pro práci s okny a ovládání oken. Základními vlastnostmi systému jsou nezávislost na platformě a předpoklady pro provoz na síti, což dává uživateli možnost provozovat výpočetně náročné úlohy na výkonnějším počítači a svůj používat jako terminál.

X-Window system je v současnosti velmi rozšířen v oblasti velkých UNIXových systémů, kde se dnes nejvíce používá CDE (Common Desktop Environment) postavené nad OSF-Motif a v prostředí LINUXu, kde momentálně vpodstatě proti sobě stojí KDE využívající služeb objektové knihovny Qt a Gnome, jenž je podporováno např. firmou SUN a opírá se o knihovnu Gtk. Existují však také implementace systému X-Window pro osobní počítače provozující MS-DOS, resp. MS-Windows např.: ReflectionX, Desqview/X, i pro Macy s MacOS - servery: MacX, eXodus, klienti: PlanetX, Xgator. Další aplikací X-Window systému jsou pak síťové bezdiskové grafické stanice - X-terminály, které vyrábí např. firma HP.

X-Protokol, model client-server

Systém X-Window je postaven na osvědčeném modelu client-server. Ke komunikaci mezi klientskou a servrovskou částí je určen protokol X. X-protokol byl vyvinut v polovině osmdesátých let. Důvodem pro jeho vznik byla potřeba grafického uživatelského rozhraní, hlavně pro operační systém UNIX. Může být provozován buď na jednom počítači, nebo v počítačové síti. Je nezávislý na operačním systému a tím pádem použitelný na mnoha různých platformách. Pro síťovou komunikaci zajišťuje spojení typu klient-server. Tento model dává uživateli možnost spouštět programy na jednom počítači a obsluhovat je z jiného počítače.

Uživatel pracuje na X-Serveru, který "poskytuje" myš, obrazovku, klávesnici a další vstupně/výstupní zařízení. X-Klienty jsou pak aplikace (např. xterm, emacs, xclock), jenž od X-serveru přijímají a zpracovávají vstupy a vrací mu výstupy.

Ve většině případů server a klient běží na jednom počítači. Ovšem neméně často je tento systém používán ke komunikaci terminálu (X-Terminal) a serveru, právě prostřednictvím X-Protokolu.

X-protokol dále specifikuje dvě vrstvy X-window: vrstvu závislou na zařízení a vrstvu na zařízení nezávislou. To má za následek zamaskování odlišností různých systémů a tím pádem nezávislost na platformě:

Protokol je založen na principu asynchronní komunikace mezi X-klientem a X-serverem:

Tento přístup má mnohé výhody:

Bezpečnost X-Window

X-Window jsou poměrně oblíbeným systémem mnoha uživatelů, používajících různé operační systémy a prostředí. Model klient-server dává uživatelům poměrně silný nástroj pro interakci s jinými počítači. Problémem je tedy způsob, jak zajistit odpovídající bezpečnost.

Nechráněný X-Window

Zde jsou některé případy komunikace mezi X-Serverem a X-Klientem: Prakticky každý klient, který přistupuje na server, je schopen ovlivnit tyto komunikace, jako například: vytvářet/zavírat okna, zachytávat události apod. K zamezení těmto neoprávněným přístupům je třeba, aby systém X-Window zahrnoval prostředky dostatečně zabezpečující komunikaci server-klient.

Způsob zabezpečení

Jaká je nejvhodnější cesta pro zajištění bezpečnosti ? V součastnosti se používají dvě metody:

Ověření pravosti hostitele

Nejvíce používaným mechanismem pro zabezpečení X-Window je program xhost. Jeho použití je následující: každý X-Server si udržuje seznam klientů, kteří na něj mohou přistupovat. Program xhost je používán pro modifikaci tohoto seznamu. Syntaxe příkazu xhost je následující:
Program xhost spuštěný bez parametrů, vrací zda je či není spuštěna kontrola přístupu a vypíše, které počítače mají povolen přístup. Tento program může být spuštěn vzdáleně pouze tehdy, je-li vzdálenému počítači povolen přístup. Pokud přístup není povolen, objeví se následující odezva:

Xlib: connection to "display:0.0" refused by server
Xlib: Client is not authorized to connect to Server

Zamezení přístupu, pokud je již hostitel připojen, nebude mít efekt. Projeví se až po restartu X-Serveru.

Výhody:
Kontrola přístupu pomocí programu xhost je jednoduchá, díky jeho syntaxi.

Nevýhody:
Jednoduchost programu xhost je rovněž nevýhodou. Všechna spojení od hostitele musí být založena na stejné úrovni: uživatel-uživatel, program-program, spojení-spojení. Pro mnoho systémů, kde se mnoho uživatelů najednou dožaduje spojení na jednoho hostitele je toto řešení nedostatečné.
Xhost má větší prioritu, než Oveření pravosti "peška". Kdokoliv může sám přidávat různé systémy do seznamu klientů bez jakýchkoliv privilegií, nebo vědomí síťového administrátora.

Ověření pravosti "peška" (MAGIC-COOKIE)

X-Server může kontrolovat přístup použitím "magic cookie", což je v podstatě náhodně generovaný přístupový kód. Každý X-Klient musí serveru pro povolení ke vstupu poskytnout správný přístupový kód. Toto heslo je uloženo v souboru .Xauthority. Tento soubor může být vytvořen, buď použitím X-Display Manageru, nebo jednoduše uživatelem, na začátku sezení.
Pro uživatele, který je přihlášen k jednomu počítači, je tato ochrana přítomna, ale není pro něj "viditelná". Každý nový klient, spuštěn tímto uživatelem, najde "magic cookie" a může bez problémů pracovat. Většinou ovšem pracuje najednou mnoho uživatelů na mnoha počítačích současně. Jak zjistí X-Klient na vzdáleném počítači hodnotu "magic cookie" ? K tomu slouží program xauth.
Tento program slouží pro editaci a zobrazení informací o "magic cookie" uživatelů. "Magic cookie" může být pomocí xauth, poté co je rozkódován, poslán na vzdálený počítač. Tam je, znovu pomocí xauth, "magic cookie" zakódován do souboru .Xauthority. Například poslání "magic cookie" na počítač s adresou ahost.foo.org lze provést následujícím příkazem:

xauth extract - $DISPLAY | rsh ahost.foo.org xauth merge -

První příkaz posílá "magic cookie" na standardní výstup. Pomocí roury je tato informace předána programu rsh (Remote Shell Command), který spustí na počítači ahost.foo.org program xauth a zapíše posílaný "magic cookie" do souboru .Xauthority. Výsledkem je to, že nyní může uživatel, který použil tento příkaz, spouštět X-Klienty na stroji ahost.foo.org, a zobrazovat je na své obrazovce (X-Server). Je žádoucí, aby měl každý uživatel nastavena správně práva u souboru .Xauthority, a to tak aby ho mohl číst a zapisovat do něj pouze on sám.

Klíčovým vylepšením oproti metodě Ověření pravosti hostitele, je fakt, že uživatel který použil xauth, může pracovat na ahost.foo.org, ale je "neviditelný" pro ostatní uživatele připojené na tento počítač.

X Display Manager
X Display Manager xdm je klient, který má na starost správu přihlašovacího dialogu. Když se uživatel přihlašuje, zapíše xdm "magic cookie" do souboru .Xauthority do uživatelova domovského adresáře.Xdm může být použit jak pro login na lokálním počítači, tak pro vzdálené přihlašování. Stará se rovněž o ověřování "magic cookie". Tato funkce musí být ovšem nejprve nastavena přidáním následujícího řádku do souboru /usr/lib/X11/xdm/xdm/config:

DisplayManager*authorize: true

Výsledkem tohoto nastavení je to, že program xdm generuje nový "magic cookie" pokaždé, když se uživatel přihlašuje a zapíše ho do souboru .Xauthority.

Výhody:
Autorizace nyní probíhá na úrovni uživatel-uživatel, ne na bázi hostitel-hostitel. To je důležité hlavně pro systém, kde jeden hostitel má mnoho uživatelů.

Nevýhody:
Programy xdm a xauth jsou poměrně časově náročné jak pro administrátora, tak pro koncového uživatele. Pro jejich použití je žádoucí dobrá znalost modelu klient-server.

Metoda Ověřování pomocí "magic cookie" může být použita jako doplněk programu xhost.

Využití šifry DES a soukromých klíčů

Tato metoda, nazývaná XDM-AUTHORIZATION-1, je podobná metodě ověření pravosti hostitele s tím rozdílem, že se klíč skládá ze dvou částí: 56 bitového klíče šifry DES a 64 bitů náhodných autentizačních dat. Při připojování na X-server vygeneruje klient 192 bitový blok dat kombinací reálného času, IP adresy a čísla portu (je-li použita technologie TCP/IP; jinak se použije PID). Tento blok je zašifrován DES šifrou a odeslán na server. Ten záznam dešifruje a ověří způsobilost k vytvoření kanálu. Prostředek není obecně rozšířený kvůli zákazu vývozu šifrovacích prostředků z USA (v roce 2000 uvolněno - lze očekávat následné větší rozšíření).

Zabezpečený systém RPC

Zabezpečené vzdálené volání procedur (RPC SUN-DES-1) představuje další z autorizačních metod. Využívá se asymetrické šifrování, autorizace přístupu se provádí na základě uživatelského jména a názvu domény. Používá se soubor .Xauthority, kam jsou autorizační informace ukládány. Systém je dostupný pouze na nejnovější verzi SunOS (a velmi málo dalších OS).

Systém Kerberos

Kerberos je obecný zabezpečovací systém vyvinutý na MIT. Zajišťuje autorizaci přístupu k různým serverům (X, FTP apod.) prostřednitvím služeb serveru Kerberos. Servery jsou zastupovány uživateli, server sdílí autorizační klíč s přihlášeným uživatelem. Stejně jako předchozí metoda, i tato umožňuje autorizovat jednotlivé uživatele (nikoli pouze stroje). Systém lze použít na libovolném systému UNIX.

Využití Secure-shellu (SSH)

Předchozí metody byly zaměřeny na autorizaci pro používání X-serveru, obecně se však nezabývaly zabezpečením vlastního přenosu dat. To lze řešit některou z metod šifrování TCP/IP kanálu, například pomocí Secure-shellu. Ten umožňuje vytvořit šifrovaný kanál pro propojení portů. Technicky se zabezpečení X-kanálu provede obdobně jako u jiného TCP spojení (HTTP, SMTP atd.). Úroveň bezpečnosti pak záleží na použité úrovni Secure-shellu. Metodu lze aplikovat všude, kde je k dispozici Secure-shell.

Programování pro X-Window

1. úroveň - X-Protocol

Systém X-Window poskytuje programátorům aplikací (X-klientů, psaní X-Serveru jistě není tak častou záležitostí) několik úrovní abstrakce při přístupu ke svým prostředkům. Na nejnižší úrovni je samozřejmě samotný X-Protocol, který se však díky složitosti (síťové pakety) pro psaní aplikací přímo prakticky nepoužívá.

2. úroveň - Xlib

Nad protokolem X jsou postaveny knihovny, které poskytují více či méně komplexní rozhraní. Knihovnou s nejnižší úrovní abstrakce je Xlib. Přestože se některé knihovny na vysoké úrovni znaží Xlib zcela zapouzdřit, znalost programování pomocí funkcí této knihovny je pro vývoj komplexnější X-aplikace velmi výhodná, neboť Xlib dovoluje přístup ke všem funkcím X-protokolu (funkce pro práci s displejem, událostmi, ošetření chyb, správu oken, prostředků, komunikaci se servrem, atd.) a umožňuje tak plnou kontrolu nad systémem. Pro konkrétní představu: jednoduchý program používající Xlib.

3. úroveň - X-toolkit

Programování aplikací s využitím pouze služeb knihovny Xlib by sice nebylo nemožné, nicméně jistě velmi zdlouhavé. Proto dává většina programátorů přednost knihovnám vyšší úrovně, toolkitům. Jednou z nich je X toolkit, jenž se skládá z knihovny Xt Intrinsics a z množiny objektů GUI, přípravků - widgetů, která umožňuje vytváření nových widgetů, použití a modifikaci existujících přípravků. Widget zapouzdruje tři druhy informace: okno, do kterého se zobrazují informace, metody definující chování a stavovou informaci. Architektura Xt Intrinsics je založena na využití principů objektově orientovaného programování a umožňuje tak intuitivně kombinovat vytvořené přípravky a použít je v grafickém rozhraní aplikace.

4. úroveň - různé nadstavby

Další vrstva je oproti předchozím rozvětvena a nabízí na výběr hned několik knihoven. Kromě standardní knihovny Athena (Athena widget set) existují ještě např.: OSF/Motif, OpenLook Intrinsics Toolkit, z novějších pak Qt, gtk a mnoho dalších, viz podrobnější výčet.

Literatura a další reference

[1] Limpouch A.: X Window System, Grada, Praha 1993
[2] Manuálové stránky SunOS 5.7
[3] Technical X Window System and Motif WWW Sites
[4] Linux Documentation Project
[5] The X-Window System
[6] http://www.x.org