Система X Window
Все инструментальные средства, которые мы рассматривали до сих пор, представляли собой утилиты командной строки. Мы запускали их из командной строки, задавая параметры и входную информацию в командной строке, и получали выходную информацию на экран или в файл. Некоторые программисты считают утилиты командной строки сложными и менее функциональными, в то время как другие считают их более эффективными и менее тяжеловесными. В любом случае утилиты командной строки не могут выполнять свою задачу так легко, как бы этого хотелось.
Графические утилиты могут помочь вам визуализировать данные и представить их в удобной для анализа форме. Оконная подсистема Windows является ядром этой операционной системы. Вы не можете установить Windows XP с интерфейсом командной строки, не устанавливая оконный интерфейс. Но в Unix оконная подсистема X Window System (X) до сих пор остается дополнительным средством.
Эта система понадобится вам для знакомства со следующими программами в этой книге. Ее краткое описание продемонстрирует, как она работает, и как обеспечить ее безопасную работу. Установка и возможности настройки этой системы весьма обширны и в этой книге не обсуждаются, но мы постараемся дать вам общее представление о том, что происходит в X Window. Мы также коснемся нескольких свойственных этой системе проблем с безопасностью, чтобы вы помнили о них.
Выбор оконного менеджера
Простейшая, но важная деталь, касающаяся X Window, состоит в том, что по умолчанию она поставляется без оконного менеджера или рабочего стола. X Window поддерживает клавиатуру, мышь, и окно для вывода информации. Оно поставляется с базовой системой, которая позволяет вам "поместить" окна в любое место на экране и уничтожить эти окна. Причудливые меню и панели инструментов отставлены для оконных менеджеров, которые выполняются поверх X Window. В настоящее время доступно несколько оконных менеджеров, включая такие популярные приложения как Gnome, KDE, и Window Maker. Эмуляторы X Window для системы Window вроде ReflectionX или Exceed также имеют собственные встроенные оконные менеджеры. Важно помнить, что X Window - всего лишь промежуточная архитектура для оконной системы; в ней нет ничего, что бы выглядело, как графическая оконная среда.
Модель клиент-сервер
X Window использует модель клиент-сервер. Оконная система выступает в качестве сервера, а графические программы в качестве клиентов. Когда на машине, где выполняется X сервер, запускается графическое приложение вроде xterm или xemacs, взаимодействие между клиентом и сервером довольно прозрачно. Внешне это выглядит, как если бы это была машина под управлением Microsoft Windows.
Но что, если вы запустите X сервер на машине с именем HOST1, соединитесь с помощью telnet с машиной HOST2, и захотите запустить на HOST2 редактор xemacs? Вам понадобиться указать xemacs-клиенту на HOST2, что необходимо использовать X сервер на машине HOST1. Если вы думаете об этом, то именно в этом состоит глубокий смысл архитектуры клиент/сервер. Обычно, если вы работаете в системе, и вам требуется использование удаленных ресурсов, вы используете локальные клиентские приложения для соединения с удаленным сервером, который предоставляет ресурсы. В случае с X Window, вы запускаете сервер на своей локальной машине, а затем удаленный ресурс (клиент) устанавливает соединение с вами.
Как взаимодействуют удаленные клиенты и серверы
Предположим, вы вошли в систему в командной строке (с использованием интерпретатора bash или tcsh ) на HOST2. Вы можете указать системе на HOST2 использовать HOST1 для отображения графических приложений, задав это в командной строке X приложения, которое вы запускаете.
HOST2% xemacs -display HOST1:0.0
Вы можете заставить все X приложения использовать HOST1 по умолчанию для отображения, установив переменную окружения DISPLAY внутри среды командного интерпретатора. Для этого в командной строке HOST2 вы должны выполнить:
HOST2% DISPLAY=HOST1:0.0; export DISPLAY
Для Bourne shell ( sh, bash ), или:
HOST2% setenv DISPLAY HOST1:0.0
Теперь если вы запустите xemacs, то вместо попыток отображать информацию на HOST2 (на котором может быть запущен X сервер, а может, и нет), он будет пытаться отображать данные на HOST1. Ниже приводятся иллюстрации работы модели клиент/сервер.
Что означает значение :0.0 после строки HOST1 в переменной DISPLAY? Один хост теоретически может выполнять несколько X серверов. Каждый X сервер может управлять несколькими экранами. Формат переменной DISPLAY выглядит следующим образом:
DISPLAY = <hostname>:<displaynumber>.<screennumber>
где:
- <hostname>. Определяет имя или IP-адрес хоста, на котором запущен X-сервер.
- <displaynumber>. Определяет какой, X-сервер должен использовать X-клиент, начиная с нулевого номера.
- <screennumber>. Определяет, какой экран X-сервера следует использовать, начиная с нулевого номера.
Если вы не используете необычную конфигурацию X-сервера, значение переменной DISPLAY всегда должно быть равным :0.0. Фактически, вам следует оставить только значение .0, поскольку экран с номером 0 используется по умолчанию.
X-серверы по умолчанию прослушивают TCP-порт с номером 6000. Если на той же самой машине был запущен второй X-сервер (дисплей), он будет прослушивать TCP-порт с номером 6001. Номер дисплея, который будет использовать X-сервер, всегда будет поставлен в соответствие TCP-порту с номером, образованным сложением 6000 с номером дисплея.
Вы можете обратить внимание на небольшую проблему с безопасностью в такой модели клиент/сервер. Задание переменной окружения позволяет нам сообщить клиенту на HOST2 отображать информацию на HOST1. Но что остановит вас от передачи информации от приложения куда ни будь еще? Один из наиболее распространенных способов взлома, рассматриваемых на тренингах по безопасности систем, является определение в переменной DISPLAY параметров вашего собственного X-сервера и наблюдение за тем, как вы запускаете все новые версии программы xeyes на своем рабочем столе всякий раз, когда пытаетесь что-либо сделать. Наиболее пугающим злоупотреблением может быть запуск программы вроде xkey, которая перехватывала бы все вводимые вами символы от X-сервера. Очевидно, что X-сервер должен иметь некоторые способы контроля доступа, чтобы только полномочные клиенты могли выводить свою информацию.