Download: SysadminWorkshop

Transkrypt

Download: SysadminWorkshop
SYSADMIN
Warsztat administratora
Sztuczki i kruczki: X Window System
MISTER X11
Dzięki zautomatyzowanemu procesowi wykrywania sprzętu administrator
rzadko bywa zmuszony do samodzielnej konfiguracji systemu X. Jeśli
jednak kogoś interesują doskonałe możliwości sieciowe systemu X11 oraz
jego zaawansowane opcje dostrajania, z pewnością przyda mu się nieco
więcej wiedzy teoretycznej.
MARC ANDRÉ SELIG
L
inux wytrwale rozprzestrzenia się również wśród użytkowników, którzy dotychczas znali tylko Windowsa. Głównym czynnikiem sukcesu Linuksa jest dostępność łatwych w użytkowaniu środowisk graficznych i aplikacji. Ta obfitość oprogramowania oznacza, że administratorzy muszą poświęcać więcej czasu na konfigurację narzędzi obsługujących mysz, klawiaturę czy funkcje graficzne tych aplikacji.
X serwer jest elementem systemu, który
obsługuje prawie wszystkie funkcje wyjścia
graficznego we współczesnych systemach Linux. Jedynymi wyjątkami od tej zasady są
konsola i SVGA-lib [2], biblioteka obsługująca bezpośrednie wyjście danych na kartę graficzną. Sam X Serwer udostępnia prymitywne mechanizmy obsługi wyświetlania hierarchii okien, prostą akcelerację sprzętową oraz
obsługę myszy i klawiatury.
Jeśli ktoś nie czuje się pewnie w architekturach typu klient-serwer, szczegóły protokołu
X mogą go jeszcze bardziej zmieszać, ponieważ tutaj serwer X11 to niezbyt silna stacja robocza znajdująca się pod biurkiem użytkownika, natomiast klient to najczęściej potężna
maszyna ulokowana gdzieś w serwerowni.
Klient i serwer zamieniają
się rolami
W pomieszanym świecie X-ów serwer to program komunikujący się bezpośrednio z użytkownikiem. To serwer rysuje na ekranie wid-
60
NUMER 20 PAŹDZIERNIK 2005
gety (elementy graficzne interfejsu) i rejestruje działania użytkownika (np. dane z klawiatury i myszy). Klient tej architektury wykorzystuje serwer do rysowania na ekranie,
nie robi tego samodzielnie. Oznacza to
w praktyce, że klient nie musi mieć dostępu
do sprzętu graficznego, lecz o obsługę funkcji graficznych po prostu poprosi serwer. Typowi klienci X to procesory tekstu, przeglądarki WWW czy emulatory terminali.
Jeśli klient i serwer X działają na różnych
maszynach, serwer X prawie zawsze znajduje
się na maszynie użytkownika. Taka sytuacja
zachodzi również w przypadku typowych
„cienkich klientów” z Linuksem, które zawierają kompletny serwer X. Nie ma w praktyce żadnej różnicy, gdzie znajduje się klient.
Przy odpowiednio szybkim połączeniu sieciowym klient może znajdować się w serwerowni kilka metrów dalej lub po drugiej stronie globu. Najczęściej jednak klienty działają na tej samej maszynie co serwer.
Przykładem serwera X działającego na jednej maszynie z jednym tylko programem
klienckim są tak zwane systemy kioskowe
(kiosk system), które można znaleźć w kawiarenkach internetowych czy szpitalach w postaci przeglądarek obrazów rentgenowskich.
Aby skonfigurować prosty system kioskowy, potrzebne są dwa polecenia. Administrator musi po pierwsze uruchomić serwer,
a następnie odpowiedniego klienta lub klienty. W poniższym przykładzie opcja :3 oznacza, że serwer będzie uruchomiony na czwar-
WWW.LINUX-MAGAZINE.PL
tym (licząc od zera) lokalnym ekranie (ang.
display) serwera X (nie chodzi tu o monitor,
lecz o tzw. ekran wirtualny):
X :3 < /dev/null > §§
/dev/null 2>&1 &
exec firefox -display :3 &
Powyższe wywołanie jest przekazywane
programowi xinit, który w odpowiedni sposób obsługuje jego składnię. Poniższy przykład uruchamia serwer X, a następnie
Xterm, chyba że w pliku .xinitrc w katalogu
domowym użytkownika znajdą się inne
opcje:
xinit -fn 9x13 – :3 > §§
/dev/null 2>&1 &
Głównym plikiem konfiguracyjnym każdego środowiska X jest plik /etc/X11/XF86Config-4. W zależności od wersji i dystrybucji serwera X może jednak mieć nazwę xorg.conf lub
podobną. W tym pliku znajduje się konfiguracja dla wszystkich urządzeń współpracujących z serwerem X.
Linux poczynił niesamowite postępy
w dziedzinie detekcji sprzętu, zatem administratorzy nie mają potrzeby modyfikowania konfiguracji serwera X, a jeśli już, to
w niewielkim stopniu. Istnieją programy,
które automatycznie tworzą plik konfiguracyjny: xf86cfg, xf86config, a w Suse są to Sax
lub Sax 2.
Warsztat administratora
SYSADMIN
Plik konfiguracyjny jest z reguły specyficzny nie tylko dla danego typu komputera
lub karty graficznej, lecz również dla danego
monitora. Zatem zanim wymieni się monitor
lub kartę graficzną, warto zadbać o alternatywny sposób dostępu do komputera (na
przykład za pośrednictwem sieci lub konsoli)
na wypadek, gdyby nowy sprzęt nie zadziałał
poprawnie z istniejącymi ustawieniami i serwer X po prostu nie uruchomi się.
Menedżery okien
Pozostawiony samemu sobie serwer X nie
jest szczególnie użyteczny ani przyjazny
użytkownikowi, objawia się to najmocniej
wtedy, gdy użytkownik chce pracować jednocześnie z większą liczbą okien i aplikacji. Potrzebny staje się element porządkujący
i upraszczający pracę ze stacją roboczą. Jednym z mechanizmów tego typu są menedżery
okien, które dodają paski tytułowe poszczególnym oknom, dzięki czemu można je łatwiej zidentyfikować, oraz ramkę umożliwiającą zmianę rozmiarów okien. Rysunek
1 przedstawia TWM, jeden z najstarszych
menedżerów okien.
TWM pozwala użytkownikom przesuwać
okna, a nawet potrafi je sortować. Menedżer
ten obsługuje też proste menu służące do
uruchamiania programów i minimalizowania okien do ikon. Starsze menedżery okien,
jak TWM czy FVWM, mają niewielkie rozmiary i są wydajne, oferując przy tym sporo
wygody użytkowania. Nawet budowane obecnie konfiguracje cienkich klientów, jak również wiele systemów wykorzystujących starsze komputery, nadal stosuje te menedżery
okien.
Aby uruchomić sesję X z menedżerem
TWM i przeglądarką Firefox, potrzeba trzech
dodatkowych elementów wywołania serwera X:
X :3 < /dev/null > §§
/dev/null 2>&1 &
twm -display :3 &
exec firefox --display :3 &
Większość współczesnych użytkowników
preferuje w pełni wyposażone środowiska
biurkowe (ang. desktop environment), jak
KDE czy Gnome. Te środowiska pracy
oprócz menedżera okien zawierają narzędzia, aplikacje i liczne biblioteki. Biblioteki
upraszczają programowanie GUI, dzięki nim
programy charakteryzują się jednolitym wyglądem i zasadami działania i mogą wzajemnie wymieniać się danymi.
Rysunek 1: Choć menedżer okien TWM zapewnia minimalną funkcjonalność, jest łatwy w obsłudze i stosunkowo wygodny.
Nowoczesne środowiska biurkowe menedżery okien uzupełniają dodatkowym mechanizmem noszącym nazwę menedżera sesji (ang. session manager). Zarówno KDE jak
i Gnome posiadają menedżery sesji o zaawansowanych możliwościach.
Graficzny ekran logowania
sko. Jeśli zachodzi taka potrzeba, do zalogowania się można wykorzystać mechanizmy sieciowe środowiska X. Dzięki temu menedżer
ekranu nie musi być uruchamiany na tym samym komputerze co serwer X. Menedżer ekranu uruchamia prosty program kliencki, dzięki
któremu serwer X uruchomiony na innym
komputerze przeprowadza z nim komunikację
za pomocą protokołu XDMCP.
Administrator może w konfiguracji wpisać
adres hosta menedżera ekranu lub uruchomić go w trybie rozgłaszania pakietów, aby
umożliwić serwerom X jego automatyczną
lokalizację. Służy do tego polecenie X -broadcast. Aby wykorzystać taki menedżer ekranu
działający na dedykowanym hoście, należy
w systemie z serwerem X wywołać polecenie
X -query host.
Serwer X obsługuje funkcje odczytu danych
z klawiatury, myszy itp., jak i wyświetlanie
interfejsu na ekranie monitora, menedżer
okien zarządza wieloma oknami. Pozostaje
jedynie załatwić sprawę logowania użytkownika do takiego graficznego systemu, najlepiej również z zastosowaniem graficznego
ekranu logowania. Niewielu zostało już użytkowników, którzy nadal wolą logować się
w oknie tekstowym tylko
po to, żeby natychmiast
„ręcznie” uruchomić środowisko graficzne.
Rozwiązaniem jest tu
menedżer ekranu (ang. display manager). Program
tego typu uruchamia serwer X i otwiera okno dialogowe podobne do przedstawionego na Rysunku 2. Po
uwierzytelnieniu użytkownika menedżer ekranu automatycznie uruchamia
Rysunek 2: Menedżer ekranu KDM pozwala użytkownikowi wyskonfigurowane środowibrać środowisko biurkowe lub zatrzymać system.
WWW.LINUX-MAGAZINE.PL
NUMER 20 PAŹDZIERNIK 2005
61
SYSADMIN
Warsztat administratora
Listing 1: Import
ciasteczek sesji
#mas:~$ xauth nextract myxkey :0
#mas:~$ chmod 640 myxkey
#mas:~$ su unsafe
#Password:
#unsafe:/home/mas$ firefox
#Xlib: connection to „:0.0”U
refused by server
#Xlib: No protocol specified
#
#(firefox-bin:3086): Gtk-WARNINGU
**: cannot open display: :0
#unsafe:/home/mas$ xauth nmergeU
myxkey
#unsafe:/home/mas$ firefox
Wszystkie nowoczesne dystrybucje Linuksa instalują menedżer ekranu wraz z odpowiednią konfiguracją przy okazji instalacji
środowiska X11. Te elementy systemu najłatwiej odnaleźć za pomocą programu locate
[3], podając nazwę poszukiwanego menedżera. Można znaleźć wersje menedżerów ekranu dla większości popularnych środowisk:
XDM, KDE (KDM) (Rysunek 2) oraz Gnome (GDM).
Kontrola ekranów
Nie jesteśmy ograniczeni do uruchamiania
tylko jednego serwera X na jednej maszynie.
Dzięki terminalom wirtualnym można jednocześnie obsługiwać większą liczbę serwerów. Serwery i klienty działają niezależnie od
siebie i nie muszą nawet pracować w tym samym systemie, musi być więc sposób na
wskazanie klientom, na który ekran mają wysyłać swoje dane. Służy do tego zmienna środowiskowa DISPLAY.
Wartość tej zmiennej może opcjonalnie
zawierać nazwę hosta, numer ekranu (display) i numer wyświetlacza (screen):
(Host):Ekran (.Wyświetlacz). Numer wyświetlacza z reguły nie jest niezbędny, za wyjąt-
Listing 2: Tunel dla
połączeń X11 za
pomocą SSH
#mas@ishi:~$ ssh -X kanat.pair.com
#[...]
#mas@kanat:$ echo $DISPLAY
#localhost:10.0
#mas@kanat:$ firefox &
62
NUMER 20 PAŹDZIERNIK 2005
kiem środowisk Xinerama, gdzie pojedynczy
serwer X może kontrolować kilka wyświetlaczy (fizycznych monitorów). Jeśli w zmiennej DISPLAY nie zostanie podana nazwa hosta, klient automatycznie przyjmie, że chodzi
o system lokalny, wykorzystując do komunikacji gniazdo plikowe zamiast portu TCP
(wykorzystywanego przez X11 do połączeń
sieciowych).
Gdy użytkownik zaloguje się za pomocą
menedżera ekranu, odpowiednia wartość
zmiennej DISPLAY jest ustawiana automatycznie. Aby uruchomić program środowiska
X na innym ekranie, należy wskazać mu,
gdzie to ma być. Następujące polecenie służy
do uruchomienia przeglądarki Firefox w systemie lokalnym, której interfejs będzie wyświetlany na pierwszym ekranie (czyli o numerze 0) maszyny sun14:
export DISPLAY=sun14:0
firefox &
Jeśli połączenia X11 są wykonywane za pośrednictwem sieci, należy pamiętać o kilku
sprawach. Po pierwsze, serwery nie przyjmują połączeń od wszystkich chętnych klientów
– taka konfiguracja stanowi zbyt duże ryzyko. Po drugie, w domyślnej konfiguracji strumień danych nie jest szyfrowany. Z tego powodu potencjalni napastnicy mają uproszczone zadanie podsłuchiwania ruchu sieciowego i przechwytywania sesji.
Prawie każdy nowoczesny serwer X obsługuje mechanizm kontroli dostępu. Istnieją
dwa alternatywne systemy dla Linuksa:
Xhost, który służy do przyznawania dostępu
dla wybranych komputerów (ta opcja nie jest
bardzo bezpieczna) oraz Xauth wykorzystujący zaszyfrowane ciasteczka (cookie)
i umożliwiający kontrolę na o wiele wyższym
poziomie szczegółowości.
Te schematy zabezpieczeń są ważne, ponieważ klienty X wykorzystują szeroki zakres protokołów i mogą mieć wpływ na działanie serwera i innych klientów. Na przykład
bardzo prostym zadaniem jest śledzenie naciśnięć klawiszy. Z tego powodu należy zadbać o to, aby do serwera miały dostęp tylko
zaufane programy.
Kontrola dostępu oparta
na ciasteczkach
Mechanizm Xauth przechowuje tak zwane
ciasteczka sesji w pliku noszącym nazwę
.Xauthority zapisanym w katalogu domowym
użytkownika. Gdy uruchamiany jest klient,
WWW.LINUX-MAGAZINE.PL
odczytuje zawartość tego pliku i wykorzystuje odpowiednie ciasteczko do uwierzytelnienia się na serwerze X. Jeśli sesja jest uruchamiana z innej maszyny lub bez odpowiednich danych uwierzytelniających (ang. credentials), należy najpierw zaimportować odpowiednie ciasteczko do swojego pliku .Xauthority (Listing 1). Polecenie xauth nextract
zapisuje ciasteczko w pliku, natomiast xauth
nmerge importuje jego zawartość do pliku
.Xauthority.
Mechanizm kontroli dostępu Xhost ma
sens w środowiskach, gdzie serwer X i klienty
działają w tym samym systemie i trzeba całkowicie zablokować dostęp z zewnątrz do tej
konfiguracji. Polecenie xhost + pozwala dowolnemu klientowi z dowolnego hosta połączyć się z tym serwerem X, polecenie xhost włącza z powrotem kontrolę dostępu.
Xauth kontroluje jedynie, kto ma dostęp
do serwera X – nie zabezpiecza jednak w ogóle przesyłanych danych. Jeśli więc ktoś wykorzysta do kontroli dostępu mechanizm
przedstawiony na Rysunku 1, powinien mieć
świadomość, że nie zabezpiecza to danych
przed podsłuchem.
Zabezpieczeniem przed tym niebezpieczeństwem okazuje się popularny protokół
SSH. Pozwala on tunelować sesję X w bezpiecznym, szyfrowanym połączeniu. Program zapewnia szyfrowanie, konfiguruje odpowiednie wartości zmiennych środowiska
i wykorzystuje Xauth do wygenerowania odpowiedniej zawartości pliku .Xauthority
w zdalnym systemie.
Tunelowanie sesji X
przez SSH
Aby skonfigurować tunnel, należy w plikach
/etc/ssh/sshd_config oraz /etc/ssh/ssh_config
ustawić opcję X11Forwarding na wartość yes.
Jeśli użytkownik zastosuje opcję -X programu ssh, utworzy tunel dla sesji X w połączeniu SSH (Listing 2). SSH tworzy wirtualny
serwer X na zdalnej maszynie (najczęściej na
ekranie :10). Klienty uruchomione w tym połączeniu będą wyświetlać swoją zawartość na
lokalnym serwerze X. ■
INFO
[1] X.org: http://www.x.org/
[2] SVGA-Lib: http://www.svgalib.org
[3] Marc André Selig, „Admin Workshop:
Finding Files”: Linux Magazine 02/05, p. 62.

Podobne dokumenty