АДМИНИСТРИРОВАНИЕ СЕТИ
4
репортаж
еще одну актуальную тему разработки веб-приложений – бе- альной поддержке этого способа программирования в рам-
зопасность и защиту от злоумышленников. В докладе «Воп- ках интерпретируемого языка – это действительно нечто!
росы безопасности веб-программирования» были рассмот- Каковы же перспективы использования новой версии PHP?
рены пути противодействия традиционной уязвимости PHP- С точки зрения массовой веб-разработки, та или иная техно-
приложений к SQL-Injection (взлом базы данных за счет из- логия или новая версия становятся реальностью лишь с ее
начальной слабости в архитектуре API для работы с MySQL). внедрением и поддержкой со стороны провайдеров хостин-
В качестве решения был предложен метод placeholder, со- говых услуг. По заявлению некоторых российских провай-
здающий дополнительный «защитный слой» между зап- деров, выступивших спонсорами конференции, хостинг с ис-
росами и API. Подобную идеологию поддерживает и новое пользованием PHP5 уже сейчас становится реальностью.
расширение PHP5 mysqli, предназначенное для работы с В рамках конференции прошли два мастер-класса. Пер-
MySQL версии 4 и старше. Дмитрий Котеров затронул так- вый был посвящен особенностям работы с сервером баз дан-
же темы кражи идентификаторов сеанса, проблему неяв- ных PostgreSQL (Алексей Борзов, независимый разработчик,
ных включений файлов и возможных путей противодей- Москва, Россия), второй – использованию идеологии и ме-
ствия DoS-атакам (антифлудинг, ограничение ресурсов). тодик экстремального программирования в разработке веб-
Технология PHP крайне динамична и не стоит на месте. проектов (Александр Смирнов, основатель клуба разработ-
Открытость и возможности расширения предоставляют ко- чиков PHP – PHPClub.ru, Москва, Россия). Увы, временные
нечному разработчику приложений механизм для создания рамки вынудили организаторов конференции проводить
и встраивания в систему собственных модулей. Этому был мастер-классы параллельно некоторым докладам.
посвящен доклад Антона Довгаля «Разработка модулей Как уже отмечалось, организаторами конференции вы-
(расширений) PHP на примере memcache». Модуль ступили сообщество веб-разработчиков PHPClub и интер-
memcache предоставляет разработчику механизмы кэши- нет-агентство WebProfy. Подобный союз независимой об-
рования запросов и данных и используется в таком попу- щественной организации и коммерческой компании доволь-
лярном сетевом сервисе, ставшим целым явлением, как но символичен для PHP. Уровень проведения конференции
«Живой Журнал» (http://www.livejournal.com). оставил очень благоприятное впечатление. Организаторам
Язык PHP получил очень сильную поддержку и обрел удалось обеспечить участников конференции не только пе-
профессиональное ядро благодаря усилиям и участию в его чатными материалами и питанием, но и такой важной «ме-
развитии компании Zend. Сейчас корпорация Zend готова лочью», как возможность в любой момент выпить чашку
совершить еще одну маленькую революцию – внедрить но- чая или кофе.
вую версию ядра (Zend Engine 2) и, соответственно, 5-ую Главным успехом конференции можно назвать привле-
версию языка PHP, реально ориентированную на техноло- чение к участию в ней профессиональных веб-разработчи-
гию объектно-ориентированного программирования. Новым ков, разделенных географическим положением, работаю-
особенностям и возможностям, предлагаемым разработчи- щих и проживающих в различных странах СНГ и Прибал-
ками ядра PHP своим пользователям, был посвящен док- тики. Живое общение в кулуарах, возникающее вокруг кого-
лад Ивана Устюжанина (системный администратор ежене- то из докладчиков или стихийно, само по себе не прекра-
дельника «Московский комсомолец» в Курске, Россия) и щалось ни на минуту и было весьма интересно и ценно.
Константина Барышникова (системный администратор и Вне всякого сомнения усилия организаторов заслуживают
программист, ведущий ресурса http://www.php5.ru) «Нет одобрения и благодарности как за подбор и освещение
авралу! Плавный переход на PHP5». В применении ООП поднятых на конференции вопросов, так и за предостав-
сейчас уже нет ничего революционного, эта идеология дав- ленную участникам возможность неформального обмена
но стала привычной и естественной в современных языках мнениями и идеями в профессиональной среде.
программирования. Но предлагаемый переход от предос-
тавления средств написания программ в стиле ООП к ре- Дмитрий Горяинов
МИХАИЛ ПЛАТОВ
Исторический экскурс тью (http://www.colinux.org/?section=status). Последняя дос-
25-27 января 2004 года новостные ленты большинства ин- тупная на момент написания статьи stable-версия coLinux –
формационных изданий, так или иначе посвященных ком- 0.6.1, именно о ней и пойдет речь в данной статье. Но преж-
пьютерной тематике, пестрили такими сообщениями: «Linux де чем приступить к рассмотрению самого coLinux, несколь-
теперь можно запускать в Windows», «Linux и Windows без ко слов о том, что это такое и для чего это нужно.
перезагрузок», «Революционное изобретение 21-летнего
гения» и т. д. Мир узнал о новом проекте – Cooperative Linux Зачем нужен coLinux
(сокращенно – coLinux). В анонсах сообщалось о том, что Условно можно выделить несколько групп пользователей,
теперь появился еще один способ «подружить» две самые для которых coLinux представляет практический интерес.
популярные операционные системы – Linux и Windows. Для В первую очередь это разработчики, принимающие учас-
достижения поставленной цели разработчики использова- тие в создании кроссплатформенных приложений, систем-
ли довольно интересное решение – запуск Linux-ядра как ные администраторы, интересующиеся возможностями
отдельного процесса Windows. В качестве иллюстрации ра- Linux-систем, преподаватели учебных заведений, и, конеч-
боты системы показывались скриншоты японской версии но, простые пользователи, желающие познакомиться с Linux
(спасибо японским спонсорам) широко известного дистри- поближе.
бутива Knoppix: Другими словами, coLinux в первую очередь интересен
тем людям, которые в своей повседневной работе одновре-
менно используют две операционные системы – Linux и
Windows. Минуточку, но ведь эта проблема не нова! Ведь
есть уже vmWare, VirtualPC, bochs, xen, wine, cygwin и дру-
гие проекты, решающие проблему организации одновре-
менной работы в нескольких ОС. Чем же примечателен
coLinux? Что выделяет его среди конкурентов? Для того
чтобы ответить на эти вопросы, давайте более пристально
посмотрим на то, как сейчас решается проблема организа-
ции работы в нескольких ОС:
! Виртуальные машины. Типичные представители –
vmWare, VirtualPC, bochs, xen. В этом случае вторая ОС,
называемая гостевой, запускается в так называемой вир-
туальной машине. У этой машины есть свое «виртуаль-
ное» оборудование, BIOS и, конечно, своя операционная
система. Отличительной особенностью является то, что
Однако радость от этого во многом знаменательного операционная система и ее программы практически и не
события несколько омрачалась тем, что попробовать coLinux догадываются о том, что они работают в виртуальной ма-
в деле реально смогли немногие – проект был доступен шине. Для них все происходит так же, как и при работе
только в виде исходного кода, собрать который было от- на обычном компьютере. Преимущества этого подхода
нюдь не просто. Впрочем, такая ситуация не могла длиться очевидны: подавляющее большинство программ без про-
вечно, и вскоре появилась первая бинарная версия блем будут работать в виртуальной машине без каких-
coLinux. У кого-то она запустилась, у кого-то нет, но рабо- либо изменений в их исходном коде. Платой же за такую
та продолжалась и проект развивался. Постепенно coLinux «универсальность» является скорость, которая, как не
освободился от связей с Microsoft DDK и cygwin, избавил- трудно догадаться, будет ниже, чем при работе этой же
ся от многих ошибок, обзавелся новой функциональнос- системы на реальном оборудовании.
6
администрирование
! Эмуляция на уровне API (wine, cygwin, mingw). Идея это- ! Ethernet-драйверы. Как не трудно догадаться из назва-
го подхода состоит в том, чтобы запустить уже суще- ния, эти драйверы используются для организации взаи-
ствующее Linux/Windows-приложение, эмулируя API «чу- модействия нашей Linux-системы с внешним миром. Так,
жеродной» ОС. Такой подход позволяет добиться боль- с coLinux можно использовать либо виртуальный TAP-
шей производительности (по сравнению с виртуальной драйвер, либо библиотеку WinPCap.
машиной), однако никто не сможет дать гарантий отно- ! Драйверы клавиатуры и консоли используются для орга-
сительно того, как будет (если вообще будет) работать низации взаимодействия с Linux в привычном для мно-
ваше любимое приложение в wine или cygwin. гих пользователей режиме – через консоль.
Теперь осталось определить, к чему же относится coLinux, Итак, судя по приведенной выше классификации, coLinux
для этого давайте более пристально посмотрим на то, как скорее относится к виртуальным машинам, чем к API-эму-
он устроен. ляторам. Ведь фактически он создает некую виртуальную
машину.
CoLinux, взгляд изнутри Кроме того, у coLinux есть и определенные черты, вы-
CoLinux представляет из себя набор нескольких модулей, годно выделяющие его среди возможных конкурентов. Так,
работающих на разных уровнях операционных систем он не эмулирует виртуальную машину в обычном для нас
Windows и Linux. Условно в составе coLinux можно выделить понимании. Он не эмулирует процессор, BIOS, память и
следующие компоненты: драйвер ОС Windows, отвечающий другие устройства.
за предоставление ядру Linux доступа к процессору и памя- При помощи специальных драйверов, работающих на
ти, несколько модифицированное ядро ОС Linux (для того нулевом кольце защиты ОС Windows (ring 0), coLinux дает
чтобы работать с Windows-драйверами coLinux), драйверы возможность ядру Linux работать с имеющимся в Windows
Linux и Windows, отвечающие за организацию взаимодей- оборудованием. Теоретически такой подход должен обес-
ствия Linux с «внешним миром» (Ethernet, console), драйве- печить большее по сравнению с обычными виртуальными
ры блочных устройств для отображения устройств Windows машинами быстродействие. Платой же за это потенциаль-
на блочные устройства coLinux. ное увеличение скорости является отказ от универсаль-
За непосредственный запуск coLinux отвечает специаль- ности. Чтобы linux-ядро стало coLinux-совместимым, к
ная программа – coLinux-daemon. Используя Windows-драй- нему применяется специальный патч, позволяющий рабо-
веры, coLinux-daemon формирует окружение, в котором тать ядру в окружении, создаваемом демоном coLinux (ра-
начинает выполняться ядро ОС Linux. Фактически coLinux- бота с Windows-оборудованием, управление памятью вы-
daemon является аналогом lilo и grub, выступая в coLinux в деляемой демону и т. д.). Таким образом, выполнение в
качестве загрузчика ядра. виртуальной машине coLinux чего-либо отличного от ядра
Linux становится либо затруднительным (для ОС с откры-
тым исходным кодом), либо вообще невозможным (для ОС
с закрытым исходным кодом).
Установка и запуск
Установка coLinux очень проста. Все, что нам нужно, это
загрузить с сайта http://www.colinux.org инсталлятор coLinux
(coLinux-0.6.1.exe) и запустить его.
Давайте более подробно остановимся на задачах, ре- В процессе установки выберем все возможные компо-
шаемых основными компонентами coLinux: ненты:
! Демон coLinux. Один из ключевых компонентов систе-
мы. Фактически это загрузчик, который, объединяя все
остальные компоненты coLinux, создает окружение, в
котором исполняется ядро Linux.
! Драйвер блочных устройств. Главной задачей этого
драйвера является предоставление доступа к устрой-
ствам, имеющимся в ОС Windows, как к блочным. В
coLinux этот драйвер используется для задания отобра-
жения устройств или файлов Windows на блочные уст-
ройства coLinux, которые в дальнейшем могут быть
смонтированы при помощи стандартной утилиты mount.
На данный момент coLinux поддерживает определение
отображений для 32 устройств. Отдельно отметим тот
факт, что отображать можно не только отдельные фай-
лы, содержащие образы linux-файловых систем, но и
реальные разделы жестких дисков. Это позволяет ис-
пользовать coLinux для запуска в Windows уже суще-
ствующих инсталляций Linux-систем. В качестве пути установки выберем «C:\coLinux»:
В принципе здесь можно выбрать любой каталог, одна- Чтобы не «портить» первоначальный файл, скопируем
ко тогда нужно будет учесть это при редактировании кон- его с именем gentoo.xml и внесем в него некоторые изме-
фигурационного файла. нения. Для начала укажем местоположение root-файловой
Далее инсталлятор предложит нам скачать библиотеку системы:
WinPCap, необходимую для организации работы coLinux не-
посредственно с сетевой картой компьютера (bridged-режим). <block_device index="0" path="\DosDevices\c:\coLinux\ ↵
gentoo-i586-ext3-2g-deluxe" enabled="true" />
В следующем диалоге инсталлятора мы можем автома-
тически скачать образ root-файловой системы (Gentoo, Далее подправим настройки сетевого интерфейса. Для
Debian или Fedora Core 1 (скачивается вручную c сайта определенности будем считать, что мы используем вари-
coLinux)). Образы отличаются размером и, соответствен- ант с TAP. Тогда строка конфигурации <network> будет
но, количеством уже установленных пакетов. В принципе иметь следующий вид:
здесь можно выбрать образ на основе любого из вышепе-
речисленных дистрибутивов или использовать раздел от <network index="0" type="tap">
уже установленной ОС Linux, однако для простоты и конк-
ретности изложения будем полагать, что в процессе уста- Кроме того, для нормальной работы нам, скорее все-
новки было принято решение в пользу образа Gentoo-deluxe. го, понадобится swap-раздел. По умолчанию он не созда-
ется инсталлятором, поэтому его придется скачать, рас-
паковать и подключить вручную. Для этого с сайта http://
gniarf.nerim.net/colinux/swap загрузим сжатый образ swap-
файла нужного размера, распакуем его в c:\coLinux\
swap_256Mb и добавим в файл конфигурации следующую
строчку:
8
администрирование
и, наконец, включим его:
# swapon –a
# nano /etc/fstab
Проинициализируем swap-файл:
# mkswap /dev/cobd1
A: \Device\Floppy0
С ее помощью можно быстро запускать и останавли-
То есть дописав в наш xml-файл следующую строку: вать службу coLinux, открывать консоль, а также получать
информацию о количестве используемых coLinux систем-
<block_device index="4" path="\Device\Floppy0" ↵ ных ресурсов.
enabled="true" />
10
администрирование
ленно), а также проблемы работы с некоторыми сетевыми том, что coLinux не является эмулятором виртуальной ма-
приложениями (NFS-сервер). шины, в том же смысле что и vmware. Так, используя доступ-
Если вы захотите запустить в coLinux какое-либо X-при- ную на данный момент версию, нельзя запустить еще одну
ложение, то вам придется дополнительно установить X-сер- копию windows, Netware или FreeBSD. Только Linux только в
вер на Windows-машину (Cygwin-X, Mi-X, Exceed и др.). Так- Windows и не более чем в одном экземпляре! Однако если
же при 100% загрузке процессора наблюдается ощутимое все вышеперечисленные «минусы» не являются для вас кри-
замедление работы во всех виртуальных консолях coLinux. тичными, то можете смело использовать coLinux. В конце
Возникает субъективное ощущение, что многозадачность в концов, этот достаточно молодой продукт показал очень не-
coLinux работает по меньшей мере странно. К тому же если плохие результаты как в производительности, так и в совме-
у вас вдруг возникнет желание запустить несколько копий стимости при запуске Linux-приложений. Кроме того, не сле-
coLinux на одной машине, то у вас, скорее всего, ничего не дует забывать, что coLinux является совершенно бесплат-
получится – более чем в одном экземпляре на данный мо- ным.
мент coLinux работать не может. Также не стоит забывать о
OpenGroupware.org,
ИЛИ ПОСЛЕДНИЙ КИРПИЧ В СТЕНЕ
СЕРГЕЙ ЯРЕМЧУК
Несмотря на замечания скептиков, операционная система лей локализация, – это далеко не полный список, с чем
GNU/Linux смогла привлечь (и привлекает) на свою сторо- придется столкнуться. Между тем в сообществе Open Source
ну пользователей. Но если с установками на сервере или уже известно несколько проектов, цель которых заполнить
на домашнем компьютере ситуация более или менее опре- имеющийся вакуум и заменить приложения, привычные по
деленная и зависит не в последнюю очередь от подготовки Windows.
и желания пользователя или администратора, то вот с при- Система программного обеспечения коллективной ра-
менением этой системы на корпоративном уровне все не боты OpenGroupware.org (OGo) призвана конкурировать с
так просто, как хотелось бы. И те администраторы, кото- такими известными продуктами, как Microsoft Exchange, IBM
рые рискнули сделать этот шаг, что скрывать, сталкивают- Lotus Domino и Novell GroupWise. Проект не возник на ров-
ся с проблемами. Недостаток информации, разнообразие ном месте, основой послужил код одной из самых ранних
программ, интерфейсов, плохая и путающая пользовате- таких разработок под GNU/Linux – Skyrix 4.1 Groupware
12
администрирование
Server, представленный немецкой компанией Skyrix Итак:
Software AG, занимавшейся разработкой этого приложения ! Contact Management (менеджер контактов) – сохране-
с 1996 года (до 2000 года он назывался LSOffice). Именно ние и организация персональных и групповых контак-
поэтому с самого начала это был рабочий продукт, а не про- тов, с широкими возможностями по поиску и оптимиза-
тотип. Буквально за один день после анонса сайт проекта ции данных, с возможностью экспорта и удаленного
http://www.opengroupware.org посетили более чем два мил- доступа.
лиона посетителей. Схожесть названия (да и истории воз- ! Group Calendar (календарь) – планирование событий как
никновения) с еще одним известным Open Source-проек- персонально, так и для группы. Возможность добавле-
том – OpenOffice.org породила некоторую неразбериху. На ния примечаний, автоматическое обнаружение конфлик-
сайте размещено примечание, что это хотя и дополняющие тов, простая настройка повторяющихся событий.
друг друга, но все-таки отдельные сообщества. Кроме GNU/ ! Resources Planner (планировщик ресурсов) – позволяет
Linux, OGo в настоящее время портирован под BSD, рационально планировать использование различного
GNUstep и MacOSX. Интерфейс полностью переведен на имущества (автомобили, проекторы), помещений, с воз-
английский и немецкий, плюс ведутся разработки по лока- можностью поиска свободных интервалов времени, ав-
лизации на датский, испанский, итальянский, французский, томатической проверкой конфликтов, посылки уведом-
голландский, корейский, турецкий, японский и китайский. лений.
К сожалению, русского в этом списке нет. Все данные хра- ! Task Management (менеджер задач) – организация пер-
нятся в обычных текстовых файлах, рисунки хранятся в от- сональных, групповых или специфических задач с воз-
дельных файлах и используется Unicode, поэтому локали- можностью их упорядочивания по приоритетам, дате, со-
зация не представляет серьезных проблем. Достаточно пе- стоянию, выводом на персональной странице и уведом-
ревести все параметры в файлах одного из подкаталогов / лением по e-mail.
opt/opengroupware.org/Resources/ и настроить клиентов на ! E-Mail Client – предлагает удобную среду для обмена
вывод в нужной кодировке. Дополнительно в помощь e-mail посредством прямого доступа к IMAP4 и POP3-
«Translation Project» представляет два скрипта, помогаю- серверам, с предоставлением большинства принятых в
щих в переводе интерфейса (рис. 1). Но, очевидно, не каж- e-mail клиентах функциональных возможностей и им-
дый будет этим заниматься, и OGo обретет у нас популяр- портом данных в менеджер контактов.
ность, после того как на него обратят внимание компании- ! Projects and Documents (проекты и документы) – единая
разработчики ПО вроде ALTLinux. централизованная среда, позволяющая использовать
файлы и документы локально и удаленно группами
пользователей или участниками отдельного проекта, с
выдачей необходимых ссылок пользователям.
! News (новости) – доска объявлений, дает возможность
публиковать необходимую информацию (правила ис-
пользования, новости компании и пр.), плюс служит на-
поминанием о текущих задачах и служит как персональ-
ная страница.
! Palm Sync (синхронизация с Palm) – синхронизация дан-
ных в устройствах Palm с приложениями OGo.
14
администрирование
Shutting down PostgreSQL done Allow from all
</Directory>
Starting PostgreSQL done
Alias /OpenGroupware.woa/WebServerResources ↵
Теперь создаем новую базу данных, таблицы, пользо- /opt/opengroupware.org/WebServerResources
вателя. # Exchange public folders URL
<LocationMatch "^/zidestore/*">
SetHandler ngobjweb-adaptor
# su SetAppPort 23000
# cd /opt/opengroupware.org/Database/PostgreSQL </LocationMatch>
# su postgres
# createdb ogo Alias /zidestore/so/images /opt/opengroupware.org ↵
/WOApps/ZideStore.woa/WebServerResources
CREATE DATABASE
# News Alias
# createuser -A -D ogo Alias /ArticleImages /opt/opengroupware.org/news
CREATE USER Перезапускаем сервер.
# psql ogo ogo
#/etc/init.d/apache2 restart
Welcome to psql 7.4.2, the PostgreSQL interactive terminal.
Syntax OK
Type: \copyright for distribution terms Starting httpd2 (prefork) done
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query Запускаем OpenGroupware. При отладке полезно давать
\q to quit команды прямо из консоли, тогда сразу будут видны все
ogo=> \i pg-build-schema.psql ошибки.
Настала очередь Apache. Для начала необходимо уста- Примечание в дистрибутивах, не использующих NTPL,
новить модуль, находящийся по адресу: http://www.opengroup последняя строка не нужна, в Fedora она будет иметь вид:
ware.org/sources/old-cvs-sources/opengroupware.org-mod_ export LD_ASSUME_KERNEL=2.4.19.
ngobjweb-latest.tar.gz.
# /opt/opengroupware.org/WOApps/OpenGroupware.woa/ix86 ↵
# tar -zxvf opengroupware.org-mod_ngobjweb-latest.tar.gz /linux-gnu/gnu-fd-nil/OpenGroupware ↵
# cd opengroupware.org-mod_ngobjweb -WOHttpAllowHost localhost
Если установлен второй Apache, то, возможно, в фай- В первый раз система, скорее всего, не сможет найти
ле GNUmakefile придется исправить строку: HTTPD = требуемые версии библиотек и выдаст ошибки. Поэтому
$(APACHE)/sbin/httpd2. для начала нужно занести следующие строки в файл /etc/
ld.so.conf (для rpm-версии, в остальных случаях измените
# make путь), после чего даем команду ldconfig.
16
администрирование
18
администрирование
Вкладка «Мультимедиа» содержит проигрыватели му- «только чтение», что сделано для придания наладоннику
зыки, видео и программу звукозаписи. «Из коробки» уста- некоего запаса прочности и защиты от попыток ввода ре-
новленный софт позволяет проигрывать видео в формате курсивного rm на корневой системе. Правда, если ввести
DivX, а музыку в MP3. команду типа
Самое большое число программ вынесено на вкладку
«Приложения». Простые редакторы текста и графики, mount -o remount,rw /
калькулятор, иконка «Консоль», обеспечивающая доступ
к командной строке, просмотрщик презентаций, а также у вас все же появится возможность испортить ФС. В каче-
два достаточно продвинутых редактора HancomWord и стве последнего «форпоста» имеются еще два запасных
HancomSheet, соответственно совместимые с Microsoft раздела с еще одной «спасательной» минимальной корне-
Word и Excel по форматам файлов. вой системой, и раздел, содержащий основное и запасное
ядро Linux. При нормальной работе КПК эти два раздела
не смонтированы.
По умолчанию на Zaurus установлены Samba и SSH-сер-
вера, которые упрощают взаимодействие КПК с настоль-
ным компьютером. Кроме того, вы можете установить на
Zaurus сервер VNC и полностью управлять «карманником»
по сети с персонального компьютера.
Ðèñóíîê 5. HancomWord
Оставшиеся две вкладки – это «Настройки» и «Файлы».
На первую вынесены все опции управления КПК, в том чис-
ле и оболочка для установки пакетов с дополнительным
программным обеспечением. Вторая же представляет из
себя встроенный в Qtopia файловый менеджер, видящий
файлы, правда, только внутри домашней директории. Од-
нако его можно «обмануть», создав симлинк на корень Ðèñóíîê 6. Ñåòü
файловой системы внутри домашнего каталога. В заключение хотелось бы сказать, что общение с уст-
Запустив из консоли команду uname -a (кстати, вы впол- ройством оставляет двоякое впечатление. С одной сторо-
не можете зайти на Zaurus через ssh, по умолчанию подня- ны, богатые возможности программного и аппаратного
том на КПК) мы получим следующий вывод: обеспечения, а с другой стороны, частая необходимость
«доводки напильником» самого необходимого софта, о воз-
$ uname -a
Linux zaurus 2.4.18-rmk7-pxa3-embedix #1, можных проблемах которых не задумываются пользовате-
11 2003 00:01:53 +0000 armv5tel unknown ли других платформ. Наиболее типичный пример – руси-
С версией ядра ясно. Теперь разберемся с файловой фикация ICQ. Учитывая нетривиальность решения многих
системой. В её качестве используется jffs2 (включена в проблем и необходимость обращаться к консоли, я бы мог
официальное ядро Linux с версии 2.4.10), которая является порекомендовать данный КПК исключительно IT-специали-
журналируемой файловой системой, разработанной спе- стам, для которых Zaurus в сочетании с WiFi- или Ethernet-
циально для встраиваемых систем. Подробнее ознакомить- адаптером может стать незаменимым инструментом.
ся с информацией, касающейся jffs2, можно по ссылке на В следующем номере журнала я расскажу об особенно-
сайте компании Red Hat (sources.redhat.com/jffs2), которая стях установки софта на Zaurus и подводных камнях, с ко-
собственно и разработала данную файловую систему, ос- торыми может столкнуться пользователь.
новываясь на оригинальной jffs от Axis Communications AB. При первом же знакомстве с КПК Zaurus SL-С860 и в
Помимо jffs2 в ядро Zaurus включена поддержка fat и ext3, процессе подготовке данной статьи большим подспорьем для
которые можно использовать, например, при работе с кар- меня оказались материалы с форумов zaurususergroup.com
тами расширения памяти SD и CF. и www.hpc.ru, без использования которых процесс знаком-
Особенностью организации иерархической структуры ства со спецификой «карманного» Linux затянулся бы на
файловой системы является то, что некоторые каталоги, в гораздо более длительный срок. С темами этих форумов я
частности /etc, /usr/bin, /usr/lib, на самом деле не что иное, в первую очередь рекомендую ознакомиться читателям, за-
как символические ссылки на соответствующие каталоги думавшимся о приобретении или уже купившим этот заме-
внутри /home. Корневая же система монтируется в режиме чательный гаджет.
АНДРЕЙ БЕШКОВ
Некоторое время назад у меня возникла необходимость по прочих полезных сведений о комплектации виднелась над-
выходным дням наведываться через Интернет в локальную пись, поначалу внушившая надежду: «Поддержка Memory
сеть моего работодателя. Казалось бы, решение вопроса Stick Slot и Bluetooth». А еще ниже мелким шрифтом зна-
банально. Купить простенький модем, присоединить его к чилось «опция», и, как всегда, эта загадочная дама со
своей домашней телефонной линии и с помощью обычно- странным именем обошла нас своей благосклонностью.
го десктопа делать то, что нужно. Но душа просила чего-то Итак, решено: будем покупать Bluetooth USB адаптер, в
более удобного и мобильного. И тогда было решено подру- англоязычной документации называемый Bluetooth USB
жить между собой мои служебные железки – ноутбук dongle, а в просторечии «синий свисток». В связи с тем,
Samsung p25 и мобильный телефон Nokia 6310i. Побродив что на ноутбуке установлены две операционные системы,
по просторам сети и посмотрев, как народ решает подоб- встает вопрос, какой именно адаптер покупать. С Windows
ные проблемы, я уже было подумал купить себе соедини- проблем, скорее всего, не будет, потому как большинство
тельный кабель Nokia, прицепить его к последовательному производителей оборудования затачивает свои изделия
порту и через него работать с GSM-модемом, встроенным именно под эту ОС. А вот с Linux крепкой дружбы никто
в телефон. Но потом в голову стали приходить мысли о том, не обещал. Список оборудования, которое удалось заста-
что фирменный соединительный кабель, в отличие от ки- вить нормально работать под Linux, можно посмотреть тут:
тайских подделок, – штука дорогая, к тому же при смене http://www.holtmann.org/linux/bluetooth/devices.html. В на-
модели телефона кабель становится для меня совершенно шем случае особое внимание стоит уделить разделу
бесполезен. Поэтому пришлось перейти ко второму вари- «Bluetooth USB adapters». Проанализировав прочитанное,
анту подключения – к использованию инфракрасной связи пришел к выводу, что самой выгодной покупкой по соот-
IrDA (Infrared Direct Access). Благо соответствующий функ- ношению цена-качество будет адаптер BT009X, произво-
ционал был встроен и в телефон, и в ноутбук. Но и тут не димый тайваньской фирмой Bluetake Technology. Куплен-
обошлось без недостатков. Во-первых, существует ограни- ное устройство выглядело изящно, миниатюрно и весило
чение по радиусу действия. Во-вторых, устойчивое взаи- примерно грамм 50. Не удержавшись, конечно разобрал
модействие устройств возможно только в зоне прямой ви- его, посмотрел, что внутри.
димости, что не очень легко выполнить на рабочем столе,
заваленном книгами и распечатками. К тому же глазки IrDA-
излучателей должны быть направлены строго друг на дру-
га и при этом желательно, чтобы приборы не двигались.
Следовать этим требованиям, конечно, возможно, но уж
слишком неудобно себя чувствуешь, да и мобильность ка-
кая-то ненастоящая получается.
Немного подумав, я пришел к выводу, что самым луч-
шим выходом из сложившейся ситуации будет использова-
ние Bluetooth. Телефон был готов к такому применению, а
вот с ноутбуком вышла промашка. На его корпусе среди
20
администрирование
Удовлетворив любопытство, самое время вернуться к На данный момент существуют два основных подвида
предмету нашего разговора. bluetooth-устройств. Отличаются они только дальностью
действия. Большинство имеют зону уверенного приема
сигнала радиусом в 10 метров. Хотя некоторые экземпля-
История появления Bluetooth ры обладают усилителем сигнала и способны взаимодей-
и механизмы его действия ствовать друг с другом на расстоянии 100 метров при ус-
Началось все примерно тысячу лет назад. В середине X века ловии, что все это будет происходить на открытой мест-
Данией правил король – викинг Гарольд I по прозвищу Си- ности.
ний зуб. Он провозгласил девиз «объединяйтесь все» и Еще одним интересным свойством такого способа об-
собственноручно стал осуществлять его. Благодаря стара- щения является возможность спонтанного1 объединения
ниям короля множество разрозненных княжеств объедини- нескольких bluetooth-устройств в своеобразную динами-
лись в сильное государство, завладевшее к тому же час- ческую локальную мини-сеть, называемую piconet. Давай-
тью земель Швеции и Норвегии. те разберемся, как это реализовано на практике. Устрой-
В 1994 году компания Ericsson задалась целью приду- ства, не присоединенные ни к одному piconet, находятся в
мать способ соединения различных устройств с помощью режиме Standby и каждые 1,28 секунды слушают эфир на
беспроводной связи. К началу 1997 года разработки, веду- 32 зарезервированных для этого частотах. Как только они
щиеся внутри фирмы, начали приносить первые результа- входят в зону устойчивой взаимной слышимости с другим
ты. Было принято решение о начале переговоров с осталь- устройством, одно из устройств принимает на себя гла-
ными крупными производителями телекоммуникационно- венствующую роль и начинает отсылать в эфир пакеты
го оборудования. Весной 1998 года компании Intel, IBM, Inquiry. После отправки 16 пакетов по одному на каждую
Nokia, Ericsson и Toshiba объявили о начале совместных частоту наступает пауза, в течение которой должны прий-
работ по созданию универсального стандарта коммуника- ти ответы от подчиненных устройств. Если никто не ото-
ций для бытовых устройств. В честь доблестного короля – звался, то проверяются оставшиеся 16 частот. Обнаруже-
объединителя викингов стандарт решено было назвать ние активных устройств зависит от того, в каком режиме
Bluetooth, а само содружество рабочих групп компаний по- они находятся:
лучило обозначение Bluetooth Special Interest Group (BSIG). ! Non-discoverable – не отвечает на запросы о присоеди-
Постепенно принять участие в начинании и присоединить- нении к piconet.
ся к BSIG решили Lucent, Motorola, Sun Microsystems, 3Com, ! Limited discoverable – в этом режиме находятся устрой-
Agere, Microsoft и многие другие производители разнород- ства, которые отвечают на запрос только в определен-
ного оборудования и программного обеспечения. На дан- ное время или при соблюдении некоторых условий.
ный момент ассоциация разработчиков Bluetooth насчиты- ! Discoverable mode – отвечает на все полученные запро-
вает более двух тысяч компаний разного масштаба и не- сы.
сколько десятков тысяч волонтеров, принимающих участие
в работе над проектом. На самом деле все обстоит еще сложнее. Вдобавок для
В сущности идея проекта довольно проста: необходимо того, чтобы присоединение к сети состоялось, устройство
стандартизировать механизмы соединения всех видов со- должно работать в режиме connectable. Если же оно нахо-
товых телефонов, компьютеров, наладонников, гарнитур дится в режиме non-connectable, то соседям, скорее всего,
hands-free и прочего движимого и недвижимого оборудо- удастся его обнаружить, но обмениваться данными с ним
вания. Добиться этого можно, если отделить механизмы будет невозможно.
реализации связи между устройствами от самих устройств. В случае если все необходимые формальности соблю-
Пусть проблемами общения занимаются миниатюрные ра- дены, устройство, инициировавшее обмен пакетами, ста-
диоинтерфейсы, встроенные в каждый прибор. Они рабо- новится ведущим (Master), а остальные принимают роль
тают на частоте 2,45 ГГц ISM (Industrial-Scientific-Medical). ведомых (Slave). При необходимости любое из ведомых
В большинстве стран для вещания в этом диапазоне не тре- устройств может запросить смену роли и стать мастером
буется дополнительного лицензирования. Исключением взамен прежнего лидера. В момент присоединения к
являются Франция, Испания и Япония. Диапазон частот от piconet каждое Slave-устройство получает от мастера FHS-
2,402 ГГц до 2,480 ГГц разбивается на 79 каналов разме- пакет, в котором содержится Global_ID, используемый для
ром в 1 МГц. Для уменьшения помех от внешних устройств определения номера шаблона прыжков по частотному ди-
вроде СВЧ-печей и повышения безопасности 1600 раз в апазону и параметр clock, указывающий смещение внут-
секунду происходит псевдослучайный выбор одного из ка- ри этого самого шаблона. Войдя в piconet, ведомое уст-
налов. Отправка данных происходит уже с новым значени- ройство получает трехбитный адрес AMA (Active Member
ем базовой частоты, взятым из выбранного интервала. Та- Adress), тем самым показывая, что оно готово к общению
ким образом, получается, что приемник и передатчик синх- с соседями. Мастер-устройство всегда имеет адрес 0. С
ронно переключают каналы связи. В англоязычной литера- помощью трех бит возможно адресовать не более восьми
туре это явление называется Frequency Hopping. устройств, таким образом, получается, что внутри piconet
1
Находящиеся рядом устройства слушают эфир и периодически «засыпают», затем снова «просыпаются» и пыта-
ются найти соседей. Поэтому точно до миллисекунды сказать, когда произойдет соединение, не представляется
возможным.
22
администрирование
! Поддерживать базу данных доступных служб в актуаль- Bluetooth + Linux на практике
ном состоянии. Чтобы система смогла увидеть наше usb bluetooth-устрой-
ство, первым делом убеждаемся, что мы работаем на дос-
Еще одним объектом, заслуживающим нашего внимания таточно свежем ядре. У меня используется ALT Linux, вер-
является HCI (Host Controller Interface). Он представляет со- сия ядра 2.4.26-std-up-alt6. Давайте посмотрим, какой тип
бой командный интерфейс к контроллеру baseband и слою, контроллера USB у нас установлен.
реализующему Link Manager. С его помощью можно узна-
# lspci
вать и изменять состояние контрольных регистров bluetooth- 00:00.0 Host bridge: Intel Corp. 82845 845 (Brookdale)
устройств. Закончив с протоколами верхнего уровня, хоте- Chipset Host Bridge (rev 04)
00:01.0 PCI bridge: Intel Corp. 82845 845 (Brookdale)
лось бы поговорить о службе audio, часто называемой Chipset AGP Bridge (rev 04)
bluetooth voice. С ее помощью могут одновременно переда- 00:1d.0 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #1 (rev 03)
ваться три голосовых потока. Характеристики каждого из них 00:1d.1 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #2 (rev 03)
00:1d.2 USB Controller: Intel Corp. 82801DB (ICH4) USB UHCI #3 (rev 03)
определяются приложением, передающим данные. Макси- 00:1d.7 USB Controller: Intel Corp. 82801DB (ICH4)
мальное возможное качество звука достигается при часто- USB2 EHCI Controller (rev 03)
00:1e.0 PCI bridge: Intel Corp. 82801BAM/CAM PCI Bridge (rev 83)
те дискретизации в 48 кГц. На схеме от компонента audio 00:1f.0 ISA bridge: Intel Corp. 82801DBM LPC Interface Controller (rev 03)
не зря исходят две стрелки. Дело в том, что звук может пе- 00:1f.1 IDE interface: Intel Corp. 82801DBM (ICH4)
редаваться либо напрямую через Baseband, либо, как и все Ultra ATA Storage Controller (rev 03)
00:1f.3 SMBus: Intel Corp. 82801DB/DBM (ICH4)
остальные данные, через L2CAP. Конечно, в случае пере- SMBus Controller (rev 03)
дачи голоса через L2CAP устройство получает меньше воз- 00:1f.5 Multimedia audio controller: Intel Corp. 82801DB (ICH4)
AC'97 Audio Controller (rev 03)
можностей управлять голосовым трафиком, но такой под- 00:1f.6 Modem: Intel Corp. 82801DB (ICH4)
ход позволяет легко стыковать bluetooth- и не bluetooth-сети. AC'97 Modem Controller (rev 03)
01:00.0 VGA compatible controller: ATI Technologies Inc
Плюс ко всему появляется возможность шифровать голо- Radeon R250 Lf [Radeon Mobility 9000 M9] (rev 02)
совой трафик алгоритмами повышенной стойкости. 02:03.0 CardBus bridge: Ricoh Co Ltd RL5c475 (rev b8)
Раз уж зашел разговор о шифровании, стоит погово- 02:03.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C551 IEEE 1394 Controller
02:07.0 CardBus bridge: Texas Instruments PCI1410
рить о системе безопасности, применяемой в устройствах PC card Cardbus Controller (rev 01)
bluetooth. Технология защиты данных изначально встроена 02:08.0 Ethernet controller: Intel Corp. 82801BD PRO/100 VE (LOM)
Ethernet Controller (rev 83)
в протокол. В зависимости от ценности передаваемых дан-
ных можно применять один из трех режимов безопасности. Судя по выводу, у нас есть UHCI- и EHCI-контроллеры
! Security mode 1 (non secure) – устройство не иницииру- USB. Проверяем, что написано про USB в /etc/modules, сре-
ет никаких защитных процедур и полностью открыто для ди всего прочего там должны быть строки:
общения.
! Security mode 2 (service level enforced security) – защит- usbcore
usb-uhci
ные процедуры выполняются только после установле-
ния и настройки параметров соединения. Требования А в файле /etc/modules.conf нужно найти следующее
безопасности в данном случае определяют службы, пе- сочетание символов:
редающие трафик.
! Security mode 3 (link level enforced security) – защита ини- alias usb-interface usb-uhci
циализируется в процессе установления и настройки со-
единения. В случае если второе устройство не может Теперь необходимо убедиться в том, что все модули,
выполнить требования безопасности, соединение бес- необходимые для поддержки USB, загружены в память.
прекословно разрывается.
lsmod | grep usb
hci_usb 8600 1
Стоит обратить внимание на то, что второй и третий usb-storage 139744 0
режимы можно комбинировать, обеспечивая повышенную usb-uhci 21676 0 (unused)
usbcore 58464 1 [hci_usb ehci-hcd usb-storage usb-uhci]
безопасность соединения. Получается, что сначала уста- scsi_mod 95296 5 [sg sr_mod sd_mod usb-storage ide-scsi]
навливается защищенное соединение, а затем данные,
передаваемые по нему, шифруются в соответствии с тре- Если это не так, то следует перезагрузить систему, что-
бованиями сервисов отправителя и получателя. бы загрузка нужных модулей прошла автоматически на ос-
Краеугольным камнем системы безопасности bluetooth нове содержимого файлов /etc/modules и /etc/modules.conf,
является сеансный ключ. Он создается в момент соедине- либо загрузить модули вручную с помощью команды insmod.
ния и впоследствии используется для шифрования и иден- Подробнее почитать о реализации USB в Linux можно в
тификации всего передаваемого трафика. Впрочем, никто статье Виктора Костромина http://vikos.lrn.ru//kos.php?name=
не мешает дополнительно шифровать трафик на уровне papers/usb/USB-Lin.html и, конечно же, на сайте www.linux-
приложений. usb.org.
Несмотря на попытку рассказывать только о ключевых Тут нужно сделать маленькое отступление. Дело в том,
моментах, оставляя несущественные подробности за бор- на свете существует несколько реализаций стека протоко-
том, я, признаться, немного устал излагать теорию работы лов bluetooth. Самые распространенные из них – это OpenBT,
bluetooth. Посему предлагаю сейчас же перейти к практи- первоначально созданный фирмой Axis: http://developer.
ческому применению полученных знаний. axis.com/software/bluetooth и Bluez – детище Qualcom http://
2
Подробнее о типах пакетов можно прочитать здесь: http://www.winlab.rutgers.edu/~pravin/publications/papers/Mobicom-
handout.pdf и http://www.cs.ucla.edu/NRL/wireless/uploads/04_ICC_APT.pdf.
24
администрирование
# Указанием на то, что телефон включил bluetooth, мож-
class 0x100; но считать появление в верхнем левом углу дисплея знач-
# Òèï ïàêåòîâ ïî óìîë÷àíèþ. ка, изображающего радиоволны.
# Îáû÷íî ðàçðåøåíû âñå âîçìîæíûå òèïû2. С помощью утилиты hcitool начинаем сканирование ок-
# DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
#pkt_type DH1, DM1, HV1; ружающего пространства.
# Ðàçðåøåíèå íà ñêàíèðîâàíèå óñòðîéñòâ ìåòîäàìè Inquiry # hcitool scan
# è Page Scanning ...
# 00:02:EE:B6:6A:E5 Nokia 6310i
iscan enable;
pscan enable; Наш телефон благополучно нашелся. Теперь мы знаем,
# Ðåæèì ñîåäèíåíèÿ ïî óìîë÷àíèþ
что его BD-адрес 00:02:EE:B6:6A:E5. В дальнейшем мы будем
# none – íå èñïîëüçîâàòü íèêàêèõ ïîëèòèê äëÿ ñîåäèíåíèÿ обращаться к нему именно по этому адресу. Проверим, на-
# accept – âñåãäà ïðèíèìàòü âõîäÿùèå ñîåäèíåíèÿ сколько надежно работает передача пакетов между двумя
# master – áðàòü íà ñåáÿ ðîëü âåäóùåãî óñòðîéñòâà ïðè
# ïîëó÷åíèè âõîäÿùåãî ñîåäèíåíèÿ, è çàïðåùàòü ñìåíó устройствами. Для этого воспользуемся программой l2ping.
# ðîëåé äëÿ èñõîäÿùèõ ñîåäèíåíèé.
# # l2ping 00:02:EE:B6:6A:E5
lm accept, master; Ping: 00:02:EE:B6:6A:E5 from 00:0A:3A:53:36:41 (data size 20) ...
0 bytes from 00:02:EE:B6:6A:E5 id 200 time 31.69ms
# Ïîëèòèêà ñîåäèíåíèÿ ïî óìîë÷àíèþ 0 bytes from 00:02:EE:B6:6A:E5 id 201 time 39.49ms
# none – íå èñïîëüçîâàòü íèêàêèõ ïîëèòèê äëÿ ñîåäèíåíèÿ 0 bytes from 00:02:EE:B6:6A:E5 id 202 time 30.31ms
# rswitch – ðàçðåøèòü ñìåíó ðîëåé
0 bytes from 00:02:EE:B6:6A:E5 id 203 time 34.12ms
# hold – ðàçðåøèòü ðåæèì hold
# sniff – ðàçðåøèòü ðåæèì sniff 4 sent, 4 received, 0% loss
# park – ðàçðåøèòü ïàðêîâêó Теперь посмотрим дополнительную информацию об уда-
#
lp rswitch, hold, sniff, park; ленном устройстве.
# Àóòåíòèôèêàöèÿ è øèôðîâàíèå # hcitool info 00:02:EE:B6:6A:E5
auth enable; Requesting information ...
encrypt enable; BD Address: 00:02:EE:B6:6A:E5
} Device Name: Nokia 6310i
LMP Version: 1.1 (0x1) LMP Subversion: 0x22c
Закончив изучение настроек, запускаем демон hcid и Manufacturer: Nokia Mobile Phones (1)
Features: 0xbf 0x28 0x21 0x00 0x00 0x00 0x00 0x00
смотрим, как изменились характеристики USB bluetooth- <3-slot packets> <5-slot packets> <encryption> <slot offset>
адаптера. <timing accuracy> <role switch> <sniff mode> <SCO link>
<HV3 packets> <CVSD>Õ
# hcid
# hciconfig -a
В комплект программ, предназначенных для работы с
hci0: Type: USB HCI, входит еще одна полезная программа, hcidump. Думаю,
BD Address: 00:0A:3A:53:36:41 ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN AUTH ENCRYPT
по ее названию вы смогли догадаться, что перед нами ути-
RX bytes:2947 acl:80 sco:0 events:149 errors:0 лита для прослушивания трафика, проходящего через HCI-
TX bytes:2610 acl:59 sco:0 commands:61 errors:0 интерфейсы. Эта программа становится особенно полез-
Features: 0xff 0xff 0x0b 0x00 0x00 0x00 0x00 0x00
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 ной в ситуациях, когда не удается подружить два bluetooth-
Link policy: RSWITCH устройства. К примеру, давайте посмотрим, какие данные
Link mode: SLAVE ACCEPT
Name: 'tigroid' проходят через используемый нами интерфейс hci0 во вре-
Class: 0x000100 мя выполнения команды hcitool info. Для этого на одной кон-
Service Classes: Unspecified
Device Class: Computer, Uncategorized соли запускаем hcidump, а на второй снова выполняем ко-
HCI Ver: 1.1 (0x1) HCI Rev: 0x20d LMP Ver: 1.1 (0x1) LMP Subver: 0x20d манду hcitool info.
Manufacturer: Cambridge Silicon Radio (10)
Судя по выводу, все идет как надо. Локальное bluetooth- # hcidump –i hci0 -X
HCIDump - HCI packet analyzer ver 1.12
устройство получило BD-адрес 00:0A:3A:53:36:41. Давайте device: hci0 snap_len: 1028 filter: 0xffffffff
теперь поищем удаленные bluetooth-устройства. Для этого > HCI Event: Command Status (0x0f) plen 4
0000: 00 01 05 04 ....
включаем bluetooth на телефоне. > HCI Event: Command Complete (0x0e) plen 10
0000: 01 0b 04 00 e5 6a b6 ee 02 00 .....j....
> HCI Event: Connect Complete (0x03) plen 11
0000: 00 29 00 e5 6a b6 ee 02 00 01 01 .)..j......
> HCI Event: Command Complete (0x0e) plen 6
0000: 01 0d 08 00 29 00 ....).
> HCI Event: Command Status (0x0f) plen 4
0000: 00 01 19 04 ....
> HCI Event: Remote Name Req Complete (0x07) plen 255
0000: 00 e5 6a b6 ee 02 00 4e 6f 6b 69 61 20 36 33 31 ..j....Nokia 631
0010: 30 69 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0i..............
0020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
26
администрирование
в телефоне Nokia 6310i закреплен за первым каналом. В
устройствах от других производителей могут использовать-
ся номера каналов, отличающиеся от приведенных в этой
статье.
Привязать канал к rfcomm можно либо на постоянной ос-
нове с помощью команды bind, либо на один раз с помощью
команды connect. В первом случае привязка сохранится вне
зависимости от того, сколько раз мы соединялись с устрой-
ством, а во втором после окончания соединения привязка
будет разорвана. Привожу оба варианта:
# rfcomm show
rfcomm0: 00:02:EE:B6:6A:E5 channel 1 clean
#!/bin/sh
echo "PIN:12345"
28
администрирование
rfcomm0 { Затем ищем блок строк, отвечающий за включение сер-
# Íóæíî ëè âûïîëíÿòü àâòîìàòè÷åñêóþ ïðèâÿçêó
висов:
bind yes;
HCID_ENABLE=true
# Àäðåñ óäàëåííîãî óñòðîéñòâà SDPD_ENABLE=true
device 00:02:EE:B6:6A:E5; HIDD_ENABLE=false
HID2HCI_ENABLE=false
# Íîìåð êàíàëà RFCOMM_ENABLE=true
channel 1; DUND_ENABLE=false
PAND_ENABLE=false
# Îïèñàíèå ñîåäèíåíèÿ
comment "Dial-up Networking";
}
И после него вставляем вот такую конструкцию:
Появился новый сервис, который ориентирован на людей, ответственных за бесперебойную работу интернет-серви-
са. Система разрабатывалась для мониторинга работы веб-сайта, но может тестировать любой сетевой сервис.
Программа, работающая на сервере http://ipmonitor.ru, раз в минуту пытается установить соединение с указанным
вами IP-адресом. Сообщения об изменении состояния цели мониторинга (работает/не работает) записываются в лог и
высылаются по почте. Использовав шлюз e-mail → SMS, который есть у любого оператора сотовой связи, можно полу-
чать сообщение на сотовый телефон.
НАСТРОЙКА SQUID
ДЛЯ ИСПОЛЬЗОВАНИЯ АВТОРИЗАЦИИ
ИЗ ДОМЕНА WINDOWS 2000
РАШИД АЧИЛОВ
Постановка задачи ! Все программы собирались с помощью портов, в Makefile
Предположим, имеется компьютерная сеть на базе домена которых при необходимости вносились изменения. Дан-
Windows NT или 2000, выходящая в Интернет исключитель- ные изменения не затрагивали каталоги для размеще-
но через прокси-сервер, расположенный на компьютере под ния файлов порта.
управлением операционной системы FreeBSD. Рано или
поздно возникает необходимость контролировать доступ Все команды в данной статье запускаются от имени
пользователей прокси-сервера к различным обьектам. Пер- пользователя root. Если для выполнения команды доста-
вое, что приходит в голову в таких случаях – разделение точно привилегий рядового пользователя, это оговарива-
доступа по IP-адресам компьютеров. Этот способ достаточ- ется заранее.
но просто реализуется с помощью несложного набора ACL
в конфигурационном файле squid.conf, но он обладает од- Squid 2.5 и Samba 2.2.x
ним весьма существенным недостатком – невозможно без Первый рассматриваемый вариант – предоставление дос-
привлечения дополнительных ресурсов однозначно сказать, тупа к прокси-серверу при условии наличия действующей
какой пользователь в данный момент имел доступ к данно- учетной записи в домене Windows с использованием паке-
му ресурсу. Более удобным для администратора является та Samba 2.2.x. Версия Samba здесь имеет принципиаль-
способ, когда каждый пользователь идентифицируется и ное значение, поскольку с различными версиями пакета
получает доступ к прокси только при наличии действующей samba необходимо использовать различные варианты вне-
регистрационной записи в домене Windows (и возможно, шних аутентификаторов для squid.
только при вхождении в определенную группу домена). Ва- Для проверки имени и пароля пользователя, передан-
рианты настроек прокси-сервера, обеспечивающие полу- ных Squid, мы будем использовать аутентификаторы wb_
чение регистрационного имени пользователя, запросивше- ntlmauth и wb_auth, которые собираются вместе со Squid,
го данный ресурс, и будут рассмотрены в данной статье. если задать их сборку. Для задания сборки данных аутен-
(Оставим пока в стороне вопрос о том, что делать с этой тификаторов следует добавить «winbind» в строки --enable-
информацией – расчет статистики загрузки канала и ото- basic-auth-helpers=”список” и --enable-ntlm-auth-helpers=”спи-
бражения ее – это тема для отдельной статьи). Для моде- сок” в строке CONFIGURE_ARGS порта squid. В последней
лирования ситуации использовалась следующая конфигу- на данный момент версии порта (1.138 от 21.08.2004) эти
рация: параметры заданы по умолчанию. Если имеются исходные
! Домен на базе Windows 2000 Server. тексты Samba, то можно указать их расположение парамет-
! Прокси-сервер Squid 2.5-STABLE6 на базе FreeBSD 4.10- ром --with-samba-sources=<полный путь>, например:
STABLE.
! Samba 2.2.11 и Samba 3.0.6. --with-samba-sources=/usr/ports/net/samba/work/samba-2.2.11
30
администрирование
иначе Squid будет использовать часть исходных текстов Наконец вся предварительная работа выполнена, мож-
Samba, распространяемых вместе с ним. Если сборка вы- но переходить к настройке Squid.
полняется не с помощью портов, а самостоятельно (что В файле squid.conf после тега auth_param (для версии
крайне не рекомендуется делать), то следует добавить к 2.5.STABLE6 это строка 1000) идет длинный-длинный ком-
строке запуска configure эти параметры: ментарий к данному параметру. Там расписаны все пара-
метры для всех схем авторизации, а ниже всего этого опи-
./configure --enable-auth=”basic ntlm” ↵ сания (а оно достаточно объемное – почти полторы сотни
--enable-basic-auth-helpers=”winbind” ↵
--enable-ntlm-auth-helpers=”winbind” ↵ строк) идут строки с параметрами программ аутентифика-
... <äðóãèå ïàðàìåòðû ïîðòà, åñëè íåîáõîäèìû> ции, отмеченные символом «#» в первой позиции, распоз-
наваемым как признак комментария. В данных строках не
После сборки и установки порта в каталоге /usr/local/ вписана только собственно программа. Сделано это наме-
libexec должны появиться файлы wb_ntlmauth и wb_auth. ренно, для того чтобы человек, который возьмется настра-
Аутентификатор для проверки имени и пароля, передан- ивать эти параметры, понимал, что он делает.
ного от Squid, обращается к демону winbindd, который дол- Для того, чтобы наша схема работала, убираем символ
жен быть запущен на данном компьютере. Для обеспече- «#» из первой позиции и изменяем следующие строки фай-
ния работоспособности данной схемы Samba, в состав ко- ла squd.conf:
торой входит winbindd, должна быть собрана со следующи-
ми параметрами: auth_param ntlm program /usr/local/libexec/wb_ntlmauth
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
make WITH_WINBIND=yes WITH_WINBIND_AUTH_CHALLENGE=yes auth_param ntlm max_challenge_lifetime 2 minutes
32
администрирование
Squid 2.5, Samba и наличие С условием NTLMauth мы уже знакомы – оно задает
пользователей в определенной группе представление доступа только в случае успешного возвра-
Модифицируем нашу систему дальше. Сделаем так, чтобы та от хелперов аутентификации. Условие NTDCgroup зада-
пользователь мог получить доступ к прокси-серверу, толь- ет вызов внешней программы, описанной в условии ntgroup,
ко если его учетная запись находится в группе My Proxy. при этом в качестве параметра внешней программе пере-
Для решения этой проблемы можно использовать как стан- дается имя группы, вхождение в которую должно быть про-
дартные аутентификаторы прокси-сервера (ntlm_auth и верено. В данном примере это группа Internet. Доступ к про-
wbinfo_group), так и аутентификатор ntlm_auth из комплек- кси будет предоставлен только в случае одновременного
та сборки Samba. Рассмотрим каждый вариант. выполнения обоих условий.
Достоинством данного метода является независимость
Использование аутентификаторов его от версии Samba – wb_ntlmauth и wbinfo_group работа-
из комплекта прокси-сервера ют путем передачи команд демону winbindd – можно спо-
Для того чтобы использовать аутентификаторы прокси-сер- койно перейти с версии Samba 2.х на версию 3.х и не заме-
вера вместе с Samba (версия не имеет значения), необхо- тить момент перехода.
димо использовать другие программы-хелперы.
Для использования хелперов из комплекта прокси-сер- Использование аутентификаторов
вера задача аутентификации разбивается на две части – из комплекта Samba (только Samba 3.x)
используется хелпер ntlm_auth и внешняя программа Поскольку хелперы прокси-сервера не умеют работать с
wbinfo_group.pl, представляющая из себя скрипт на языке winbindd демоном из сборки Samba 3.x, рекомендуется от-
Perl. Перестраиваем конфигурацию аутентификаторов сле- казаться от их применения и использовать хелпер ntlm_auth
дущим образом: из сборки прокси-сервера (не путать с одноименным хел-
пером из сборки Samba! Хелпер прокси-сервера обычно ле-
auth_param ntlm program /usr/local/libexec ↵ жит в /usr/local/libexec, а хелпер Samba – в /usr/local/bin).
/ntlm_auth MY_DOMAIN\\dcone MY_DOMAIN\\dctwo
auth_param ntlm children 5 Кроме того, использование wbinfo_group.pl имеет один от-
auth_param ntlm max_challenge_reuses 0 рицательный момент – это скрипт, он написан на языке Perl,
auth_param ntlm max_challenge_lifetime 2 minutes
следовательно, в оперативной памяти постоянно находит-
auth_param basic program /usr/local/libexec/wb_auth ся некоторое количество копий процесса perl, интерпрети-
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server рующего скрипт. Отказ от wbinfo_group.pl позволит сокра-
auth_param basic credentialsttl 2 hours тить объем требуемой памяти. Использование аутентифи-
каторов из комплекта Samba значительно проще: не нужно
Здесь dcone и dctwo – соответственно первый и вто- никаких внешних программ, не нужно никаких дополнитель-
рой контроллеры домена (имеются в виду NetBIOS-имена). ных правил – сам хелпер ntlm_auth имеет параметр --require-
Следует заметить, что здесь мы меняем только конфигура- membership-of=”Group”. Поэтому возвращаем наше прави-
цию для браузеров, которые умеют работать с конструкци- ло, регулирующее доступ к прокси-серверу, к виду, описан-
ями MY_DOMAIN\myname и не меняем конфигурацию для ному в разделе «Samba 2.5 и Samba 2.2.x».
прочих браузеров. Кроме того, в секцию external_acl_type
мы добавляем дополнительную внешнюю программу http_access allow NTLMauth
wbinfo_ group.pl (для установки данной программы следует
указать: и заменяем хелперы из поставки squid на хелпер ntlm_auth
из поставки samba следующим образом:
--with-external-acl-helpers=”wbinfo_group”
auth_param ntlm program /usr/local/bin/ntlm_auth ↵
--helper-protocol=squid-2.5-ntlmssp ↵
в строке запуска configure при сборке прокси-сервера, пос- --require-membership-of="MY_DOMAIN+My Proxy"
ледняя версия Makefile в портах установит его по умолча- auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
нию) таким образом: auth_param ntlm max_challenge_lifetime 2 minutes
separator не является значением по умолчанию для самбы. В ответ на запрос программы вводим имя пользовате-
По умолчанию значением является «\» (обратная косая чер- ля testuser, пароль 123456.
та). Но использование этого символа в командах, переда-
ваемых в shell, как правило, чревато необходимостью «за- [2004/08/29 23:16:21, 10] utils/ntlm_auth.c:manage_squid_request(1621)
Got 'testuser 123456' from squid (length: 15).
щищать» его от того, чтобы shell не воспринял его как слу- [2004/08/29 23:16:21, 3] utils/ntlm_auth.c:check_plaintext_auth(292)
жебный, поэтому был выбран другой символ. Хотя, напри- NT_STATUS_OK: Success (0x0)
OK
мер, man smb.conf не рекомендует использовать именно «+»
чтобы избежать возможных проблем с NIS. Всегда используйте для тестирования только подобных
«пользователей», потому что пароль виден на консоли,
Если какой-либо из приведенных а также может остаться в файлах .history, .bash_history
способов не работает или .mc/history!
Отнюдь не факт, что любой описанный здесь метод зара- ! Проверить права доступа на каталог /var/db/samba/win
ботает с первого раза. Мне приходилось немало проверять, bindd_privileged, если используется хелпер ntlm_auth из
перепроверять и тестировать конфигурационные файлы, поставки Samba. При недостаточных правах хелпер мо-
прежде чем начинал работать какой-либо из методов, хотя жет выдавать в файл регистрационного журнала cache.log
в конечном итоге работали все методы. Если какой-либо сообщения, из которых совершенно невозможно понять,
браузер (Mozilla, например, но не Internet Explorer) запра- чего ему не хватает для нормальной работы.
шивает пароль и не реагирует как положено на правиль- ! При большом количестве запросов следует пропорцио-
ный, следует: нально увеличить количество загружаемых хелперов
! Убедиться, что пароль введен правильно. (параметр auth_param <method> children). При недоста-
! Посмотреть лог cache.log в каталоге логов прокси-сер- точном количестве хелперов запросы на аутентифика-
вера – хелперы выводят сообщения об ошибках туда. цию ставятся в очередь и при переполнении очереди
! Проверить правильность написания путей в правилах прокси может аварийно завершить работу. Также сле-
задания хелперов. дует обеспечить постоянную доступность контроллера
! Проверить наличие самих хелперов по указанным пу- домена, потому что при плохой связи с контроллером
тям и достаточность прав на запуск хелперов из-под домена запросы на аутентификацию опять же ставятся
пользователя, от имени которого работает прокси-сер- в очередь, и прокси может аварийно завершить работу
вер (обычно это squid из группы squid). при большом количестве хелперов, ожидающих ответа
! Если хелперы запускаются, следует обратить внимание от контроллера домена.
на моменты их запуска – если ntlm_auth, например, не
может установить связь с контроллером домена, он со- Дополнительные замечания
общит об этом.
! Если используются хелперы на базе winbindd, следует О безопасности передаваемых данных
проверить работоспособность winbindd-демона (коман- Эксперименты показали, что при использовании всех хел-
ды приводились выше). перов, кроме ntlm_auth из комплекта Samba 3.х и wb_
! Если задействован хелпер ntlm_auth из поставки Samba – ntlmauth из комплекта squid, пароль, передаваемый на про-
его можно запустить в режиме отладки с консоли, при- верку контроллеру домена, передается в открытом виде, и
казав выводить максимально подробную отладочную ин- лицо, имеющее возможность перехвата сетевого трафика
формацию. В случае успешного запуска следует ввес- с данного компьютера, сможет узнать пароли. Программы
ти через пробел имя и пароль пользователя, как пока- ntlm_auth из комплекта Samba 3.х и wb_ntlmauth из комп-
зано ниже. Для выполнения данной команды достаточ- лекта squid используют для работы с контроллером доме-
но прав пользователя, имеющего доступ к каталогу /var/ на протокол NTLM SSP, и пароль не передается по сети в
db/samba/winbindd_privileged. открытом виде даже при указании --helper-protocol=squid-
2.5-basic (этот параметр определяет не протокол работы
> ntlm_auth --helper-protocol=squid-2.5-basic хелпера с контроллером домена, а протокол работы хелпе-
--require-membership-of=”MY_DOMAIN+My Proxy” -d10 -l /tmp
[2004/08/29 23:15:22, 5] lib/debug.c:debug_dump_status(367) ра со сквидом).
INFO: Current debug levels:
all: True/10
tdb: False/0
О преобразовании логинов
printdrivers: False/0 из формата MYDOMAIN\myusername
lanman: False/0 Хелпер wb_ntlmauth записывает в лог полученный от пользо-
smb: False/0
rpc_parse: False/0 вателя логин в виде MYDOMAIN\myusername, в то время
rpc_srv: False/0 как хелпер wb_auth записывает его в формате myusername.
34
администрирование
Для того чтобы использовать полученные данные в какой- # This is a part of SquidCount package version 1.11.4
либо программе расчета статистики, необходимо унифи- # Squid log preparation to count statistic
# Developed by Rashid N. Achilov. Copyright Granch Ltd. (C)
цировать данные. Я делаю это удалением домена и приве- # Thisi is a public software, distributed with BSD license.
дением всех логинов к формату myusername. Для этого # Externals: hosts = <list of hosts with trusted users>
# tusers = <list of trusted user logins, correspoding hosts)
мной была разработана пара скриптов на языках shell и awk, #
которые делают следующее: # When $8 is "-" and $2 == one of trusted hosts, instead
# of "-" sets trusted login, correspond this host
! Удаляют из лога строки TCP_DENIED/407, которые ге- # When $4 is "TCP_DENIED/407" skip this line (and f*ck MS IE!)
нерируются браузером Internet Explorer. # $Id: awksquid,v 1.11.4.2 2003/08/06 03:28:54 shelton Exp $
! Удаляют доменную часть имени пользователя, если оно BEGIN {
представлено в формате MYDOMAIN\myusername. split(hosts,harray)
split(tusers,tuarray)
! Если DNS-имя компьютера или его IP-адрес совпадает }
с DNS-именем или IP-адресом, указанным в файле до- {
веренных адресов, то в поле имени пользователя впи- if ($4 == "TCP_DENIED/407")
сывается имя, указанное в данном файле. (Если исполь- next
зуется как авторизация по регистрационному имени, так subind = index($8,"\\")
и авторизация по IP-адресу, то для обработки статисти- if (subind != 0)
ки некоторым IP-адресам жестко сопоставляется опре- {
деленное имя.) Формат файла доверенных адресов subname = substr($8,subind + 1)
printf("%s %6s %s %s %s %s %s %s %s %s\n", ↵
очень прост: по одной записи на строке DNS-имя или $1,$2,$3,$4,$5,$6,$7,subname,$9,$10)
IP-адрес компьютера и через пробел – имя пользовате- next
}
ля, которое будет подставляться. Например:
for (i = 1;harray[i] != "";i++)
{
192.168.1.1 alice if ($3 == harray[i])
192.168.1.2 bob {
if ($8 == "-")
Ниже приведен основной скрипт. Вариант, демонстри- {
руемый в данной статье, тестовый, практической ценности printf("%s %6s %s %s %s %s %s %s %s %s\n", ↵
$1,$2,$3,$4,$5,$6,$7,tuarray[i],$9,$10)
не имеет и приведен только для иллюстрации того, как об- break
рабатывать данные файла регистрационного журнала. }
}
}
#!/bin/sh
# This is a part of SquidCount package version 1.11.4 if (harray[i] == "")
# Daily squid proxy statistic maintenance print $0
# Written by CityCat 25.10.2001. Copyright Granch Ltd. (C) }
# This is a public software, distributed with a BSD license.
# $Id: squidcount,v 1.11.4.6 2004/07/21 12:53:02 shelton Exp $
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local ↵
Заключение
/bin:/usr/local/sbin В данной статье были рассмотрены несколько способов
авторизации пользователя домена Windows на прокси-сер-
trustlist="/usr/local/etc/sarg2/sargtrusted"
inlog="/var/log/squid/access.log" вере squid с использованием контроллера домена Windows.
Выбор конкретного способа зависит только от используе-
# Check on presence trusted hosts list
if [ -e $trustlist ]; then мой версии Samba и не зависит от типа контроллера доме-
hosts=`awk '{if ($1 == "#") nextline; else print $1}' ↵ на Windows (схема с авторизацией через Samba 2.х и хел-
< $trustlist`
tusers=`awk '{if ($1 == "#") nextline; else print $2}' ↵ перы Squid работала достаточно долгое время в домене
< $trustlist` Windows NT, потом совершенно незаметно была перенесе-
else
logger -i -p daemon.err -t sqcount ↵ на в домен Windows 2000). Samba 3.x мне кажется наибо-
Trust list empty, will skip prepare 1st stage... лее перспективным решением с наиболее простым вари-
hosts=""
tusers="" антом конфигурации.
fi
ЧЕТЫРЕХУЗЛОВОЙ КЛАСТЕР
С БАЛАНСИРОВКОЙ НАГРУЗКИ
БЕЗ ВНЕШНЕГО МАССИВА ДАННЫХ
ГЕННАДИЙ ДМИТРИЕВ
Месяца 3-4 назад к нам на фирму за консультацией при- 80 Гб SATA/2xLAN Adapter. После некоторых раздумий было
шли сотрудники одной из крупных государственных орга- решено использовать службу Network Load Balancing для
низаций. Для тестовой лаборатории им необходимо было распределения нагрузки между узлами кластера, а синх-
собрать недорогой кластер под вывод информации для ронизацию данных между серверами настроить с помощью
пользователей через Internet Information Server (IIS). После службы Distributed File System. В качестве операционной
некоторых раздумий и консультаций с умными людьми мной системы достаточно выбрать Windows 2003 Server Standard
было найдено довольно оригинальное решение, о нем я и Edition, поскольку она поддерживает обе необходимые нам
буду сегодня рассказывать. службы.
О том, какие бывают кластеры, технологии, реализации Схема кластера представлена на рис. 1.
кластеров в этой статье, я писать не буду. В Интернете до-
статочно информации на эти темы. Здесь я опишу конкрет- 1-й этап. Подготовка серверов,
ную реализацию конкретной задачи. Надеюсь, она будет установка домена, создание DNS-зон
вам интересна. На первом этапе мы устанавливаем на все сервера, опера-
ционную систему, настраиваем сетевое окружение на сер-
Задача верах, поднимаем Active Directory. В принципе можно обой-
Для одного из учебных классов государственного пред- тись и без него, однако мне показалось, что единая авто-
приятия потребовалось создать кластер для работы с про- ризация на серверах удобнее, чем ведение учетных запи-
ектно-исследовательской информацией. Важным момен- сей на каждом из них.
том в данной реализации было то, что внешние клиенты ! Имеем 4 одинаковые машины с двумя сетевыми карта-
могли работать с данной документацией через самый про- ми в каждой.
стой IIS. В качестве узлов кластера были закуплены 4 ма- ! Ставим на все машины Windows 2003 Server (версия
шины достаточно простой конфигурации, P4-2.4 ГГц/512 Мб/ 2003-го сервера не имеет значения).
Ðèñóíîê 1
36
администрирование
! Настраиваем системы, исходя из таблицы:
Ðèñóíîê 4
! На вкладке Connect выбираем первый сервер NODE1
и выбираем внешний интерфейс «Public Cluster
Connection», на котором будет «висеть» служба NLB.
Ðèñóíîê 2
! На вкладке Cluster IP Address (рис. 3) можно ввести до-
полнительные адреса кластера. Мы пропускаем этот
этап. Ðèñóíîê 5
Ðèñóíîê 8
Ðèñóíîê 9
! На вкладке «Host Domain»выбираем наш кластер
«cluster.local»:
Ðèñóíîê 7 Ðèñóíîê 10
38
администрирование
! На вкладке «Host Server» выбираем первый сервер
node1.cluster.local:
Ðèñóíîê 11
! На вкладке «Root Name» вводим имя корневого катало-
га:
Ðèñóíîê 14
! Остальные операции по созданию конечных ссылок мож-
но будет проводить в оснастке «Distributed File System
Manager»:
Ðèñóíîê 12
! На вкладке «Root Share» выбираем созданный нами
каталог «C:\IIS»:
Ðèñóíîê 15
! Далее необходимо создать ссылки на остальные сер-
вера кластера. Для этого на каждом из узлов предос-
тавляем в общий доступ каталоги с содержимым IIS-
сервера.
! Выбираем «New Target» и по очереди добавляем остав-
шиеся три узла:
Ðèñóíîê 13
! Все настройки корневого каталога можно свести в таб-
лицу: Ðèñóíîê 16
Ðèñóíîê 20
! После создания всех ссылок необходимо определенное
Ðèñóíîê 17 время для предварительной синхронизации данных уз-
лов. Обычно это занимает около 20-30 минут. Далее
репликация данных будет проходить мгновенно, ну или
почти мгновенно (по внутренней сети кластера). Резуль-
таты наших настроек наблюдаем в DFS Manager:
Ðèñóíîê 21
! Хочется также упомянуть, что репликация данных меж-
ду серверами проходит от имени «System Account», по-
этому при создании общего доступа к каталогам содер-
жимого IIS-серверов достаточно прав на чтение. По
Ðèñóíîê 18 крайней мере, у меня данный режим работал без осо-
! Топологию время репликации мы можем изменить в лю- бых проблем.
бое время из оснастки «DFS Manager». Для репликации
данных с первого узла на оставшиеся выбираем руч- 4-й этап. Последние штрихи
ной режим, как показано на рис. 19, 20. Последним штрихом у нас будет создание DNS-записи со
ссылкой на внешний адрес кластера. Заходим в DNS
Manager и создаем запись CNAME → www.cluster.local →
cluster.cluster.local. Делаем это для того, чтобы при заходе
на ссылку www.cluster.local мы автоматически попадали на
внешний адрес кластера. В результате NLB будет разрули-
вать ситуацию с нагрузкой на узлы кластера, а DFS помо-
жет автоматически реплицировать данные с первого узла
на остальные. Вот вроде и все.
Заключение
Данный документ не является панацеей по созданию клас-
теров, он лишь отражает мой опыт в создании нестандарт-
ных систем. На некоторых рисунках вы видите только два
узла. Однако настройки остальных серверов идентичны и
не представляют особой сложности.
Хочется выразить глубокую благодарность за неоцени-
мую интеллектуальную помощь Андрееву Павлу, систем-
Ðèñóíîê 19 ному администратору Novavox.
40
bugtraq
СЕРГЕЙ СУПРУНОВ
Система управления базами данных PostgreSQL обладает 5. Все «нештатные» ситуации (невозможность зарезерви-
очень мощными средствами, делающими возможным пе- ровать требуемое количество, аннулирование неопла-
ренос части так называемой бизнес-логики приложения со ченного заказа) должны отражаться в таблице предуп-
стороны клиента (по отношению к СУБД) на сторону серве- реждений.
ра. При этом сокращается, и порой существенно, трафик
между клиентом и сервером, упрощается сопровождение Операции выставления счетов, получения оплаты и т. д.
разработанного приложения (сервер один, а клиентов мо- для простоты возложим на менеджеров компании. Методы
жет быть много), повышается надежность в плане целост- их взаимодействия с базой данных рассматривать в дан-
ности данных, в ряде случаев становится проще и сам ал- ной статье не будем. Также не будем резервировать товар
горитм работы приложения. частично, если необходимого количества не оказалось –
Данная статья посвящена рассмотрению одного из наи- пусть этим тоже занимаются менеджеры. Для наглядности
более эффективных средств – триггеров. Все примеры те- алгоритм того, как должно вести себя наше приложение,
стировались на PostgreSQL 7.4.2, работающей на системе представлен на рис. 1.
FreeBSD 5.2. Итак, попытаемся решить сформулированные выше за-
Для примера разработаем функцию оформления зака- дачи без помощи «внешнего» сценария, по одному-един-
за в простом интернет-магазине, отличительной особенно- ственному запросу к СУБД.
стью которой будет максимально возможный перенос всей Структура БД для нашей задачи будет следующая:
логики на сторону СУБД. ! Таблица «Заказы», orders:
Итак, пользователь выбрал интересующий его товар и ! Идентификатор заказа, order_id, serial.
нажал ссылку «Купить». Далее необходимо: ! Информация о покупателе, customer, varchar.
1. Занести в БД информацию о поступлении заказа. ! Идентификатор товара, goods_id, numeric(3).
2. Проверить, есть ли необходимое количество товара на ! Количество единиц товара, count, numeric(2).
складе. ! Цена товара, по которой делается заказ, price,
3. Если есть – зарезервировать товар, уменьшив при этом numeric(7,2).
остаток на складе. Если необходимого количества на ! Дата заказа, date, date.
складе нет, то проверить, не находится ли в резерве нуж- ! Таблица «Товары», goods:
ный товар свыше 5 дней. Если такое имеется и количе- ! Идентификатор товара, goods_id, serial.
ство товара по просроченным заказам достаточно для ! Описание товара, goods, varchar.
исполнения текущего, то просроченные заказы нужно ан- ! Минимальный остаток на складе, rest, numeric(2).
нулировать, а товар резервировать для нового заказа. ! Таблица «Склад», warehouse:
4. При свободном остатке того или иного товара на скла- ! Идентификатор товара, goods_id, numeric(3).
де меньше определенного значения сформировать за- ! Количество, count, numeric(5).
пись в таблице предупреждений. ! Таблица «Резерв», reserved:
42
администрирование
!Идентификатор заказа, order_id, numeric(5). create table orders(order_id serial,
!Идентификатор товара, goods_id, numeric(3). customer varchar,
goods_id numeric(5),
!Зарезервированное количество, count, numeric(2). date date,
!Дата резервирования, date, date. count numeric(3),
price numeric(7,2));
! Таблица «Предупреждения», warnings: create table goods(goods_id serial,
! Дата и время записи, date_time, timestamp. goods varchar,
rest numeric(2));
! Содержание записи, messages, text. create table warehouse(goods_id numeric(5),
! Дочерняя таблица order_warnings. count numeric(5));
create table reserved(goods_id numeric(5),
! Идентификатор заказа, order_id, numeric(5). order_id numeric(5),
! Дочерняя таблица goods_warnings. count numeric(3),
date date);
! Идентификатор товара, goods_id, numeric(3). create table warnings(date date, message text);
create table order_warnings(order_id numeric(5))
inherits(warnings);
Поскольку предупреждения могут быть связаны как с create table goods_warnings(goods_id numeric(5))
заказом, так и с товаром, то для повышения наглядности inherits(warnings);
воспользуемся такой возможностью PostgreSQL, как насле- Далее, нам нужно убедиться, что процедурный язык PL/
дование таблиц. Родительская таблица warnings будет со- pgSQL доступен в созданной базе. Для этого выполните
держать все предупреждения, а дочерние order_warnings и следующую команду:
goods_warnings – дополнять ее идентификаторами соответ-
ствующего заказа или товара. select * from pg_language;
Для решения указанных задач, как нетрудно догадать-
ся, будем использовать триггеры. Напомню, что триггер – Если plpgsql в полученном результате отсутствует, то
это связь хранимой процедуры с одной (или несколькими) из командной оболочки вашей ОС выполните следующую
из операций модификации, выполняемых над таблицей команду:
(UPDATE, INSERT, DELETE), автоматически запускающая
эту процедуру (функцию) при получении соответствующе- $ createlang –U pgsql plpgsql eshop
го запроса. Нам понадобятся «базовый» триггер, выполня-
емый после операции добавления записи (INSERT) в таб- Опция –U задает пользователя – администратора БД,
лицу orders – для решения задач 1-3, и триггер на опера- от имени которого будет выполняться данная операция.
цию UPDATE таблицы warehouse для контроля обязатель- Поддержка языка может быть включена и из програм-
ных остатков (задача 4). Функцию записи предупреждений мы-клиента (например, psql) выполнением следующих двух
каждый из этих триггеров будет выполнять в соответствии команд:
со своей «зоной ответственности».
Итак, создадим базу данных eshop, в которой и будем create function plpgsql_call_handler()
returns language_handler
экспериментировать. В ней создаем структуру нашей БД: as ‘$libdir/plpgsql’, ‘plpgsql_call_handler’
Ðèñóíîê 1
Последним оператором функции должен быть оператор Существует вариант этого цикла и для «прохода» по ре-
«return», возвращающий данные указанного выше типа, зультату выборки:
даже если выход из функции осуществляется раньше (на-
пример, в блоке проверки условия) и эта команда никогда For <row-var> in <select> loop
<òåëî öèêëà>
не получит управление. End loop;
Как и любой нормальный язык программирования, PL/
pgSQL позволяет оперировать переменными. Все перемен- В этом случае в переменную <row-var> последователь-
ные (за одним исключением, о котором будет упомянуто но подставляются строки из выборки, и тип этой пере-
ниже) должны быть описаны в разделе DELCARE, т.е. их менной должен быть либо <table>%rowtype, отражаю-
необходимо перечислить с указанием типа данных. В этом щий запись конкретной таблицы <table>, либо RECORD,
же разделе допускается и инициализация переменной на- описывающий обобщенную запись таблицы.
чальным значением с помощью ключевого слова DEFAULT.
Общий синтаксис описания следующий: С остальными операторами, а также со встроенными
функциями можно познакомиться в документации к языку
<ïåðåìåííàÿ> <òèï> [ DEFAULT <çíà÷åíèå>]; PL/pgSQL.
В качестве примера создадим обычную (не триггерную)
Вместо слова «DEFAULT» допускается использование функцию, которая занесет в таблицу test1 (позже мы ее
оператора присваивания «:=», но, на мой взгляд, такая за- удалим) N случайных чисел. Сейчас польза от этого исклю-
44
администрирование
чительно в виде примера, а в принципе таким образом мож- Запустите ее и убедитесь, что выполнение функции за-
но, например, заполнять базу для выполнения тестов. вершилось ошибкой «Table test1 not found.». Далее созда-
ем нужную таблицу и повторяем выполнение функции:
CREATE OR REPLACE FUNCTION inserter(int4)
RETURNS int4 AS create table test1 (rnd numeric);
'DECLARE select inserter(5);
N alias for $1;
Rand numeric default 0.5; select * from test1;
tmp varchar;
BEGIN Как видите, на этот раз все 5 записей послушно доба-
select tablename into tmp
from pg_tables вились. Причем добавить 500 000 записей будет столь же
where tablename = \'test1\'; просто. А теперь попробуйте посчитать трафик и число об-
if tmp is null then
raise exception \'Table test1 not found.\'; ращений к серверу баз данных, если эту задачу решать с
else помощью внешнего сценария на Perl, который будет выпол-
delete from test1;
end if; няться на другой машине… Пользуясь случаем, давайте за-
одно оценим скорость выполнения операций вставки и уда-
for i in 1..N loop
Rand := random(); ления (машина Cel466/64 Мб с полным «джентльменским
insert into test1 values(Rand); набором» – Apache, Squid, Sendmail; load average ~0.1):
end loop;
return 0;
END;'
LANGUAGE 'plpgsql’;
Обратите внимание на применение нами переменной Чтобы проверить правильность отмены просроченных
reserved%rowtype – она описывает запись таблицы reserved, заказов, даты выше были указаны прошедшие. Если сей-
которую мы в дальнейшем используем для организации час заказать 10 мониторов, то заказ будет помечен как «not
цикла (конструкция «for row in select ... loop») по записям, reserved», и соответствующая запись появится в таблице
выбранным из этой таблицы. С тем же успехом можно было предупреждений. Поскольку даже с учетом просроченных
бы использовать переменную типа RECORD, однако из-за заказов 10 мониторов никак не набирается, то и аннулиро-
46
администрирование
ваться ничего не будет. А вот если заказать 3 монитора, то шее изменение в функции потребует полностью набрать всю
с учетом высвобождения просроченного резерва (5 штук) команду create function. Графический клиент PgAdmin суще-
нужное количество набирается и даже 2 монитора будут ственно упрощает работу с функциями, однако некоторые
возвращены на склад. В таблице предупреждений появит- недоработки интерфейса (невозможность сохранить изме-
ся 4 записи – две об аннулировании просроченных зака- нения, не закрыв при этом окно редактора функции; отсут-
зов, одна о том, что имела место нехватка товара на скла- ствие запоминания последнего размера окна – отрегулиро-
де, и одна о том, что остаток мониторов (4 шт.) меньше вав окно редактора один раз, при следующем его открытии
обязательного минимума (5 шт.). придется делать все заново) способны сильно потрепать
Итак, поставленная в начале статьи задача решена: офор- нервы. Поэтому лучше запастись более «продвинутым» при-
мление заказа, включая такой «интеллектуальный» элемент, ложением, например, средой разработки EMS PostgreSQL
как попытка высвободить нужный товар из просроченного Manager (http://www.ems-hitech.com/index.phtml). Данная про-
резерва, выполняется по единственному запросу к СУБД. грамма (рис. 2) предоставляет очень широкие возможности
Очевидно, что если в функцию придется внести изменения по разработке и отладке функций PostgreSQL, однако, как
(например, будет принято решение, что резерв должен хра- это ни печально, стоит денег. 30-дневную пробную версию
ниться минимум 7 дней, а не 5), то они потребуются только можно загрузить с сайта разработчика.
на стороне СУБД. Клиенты (сколько бы их ни было) будут На этом я думаю завершить серию обзорных статей по
работать без каких-либо изменений. Кроме того, если одна PostgreSQL. В дальнейшем, безусловно, вопросы работы с
из операций даст сбой (например, не удастся сделать за- этой СУБД будут рассматриваться довольно часто, но уже
пись в таблицу резерва), то произойдет «откат» всех осталь- в плане конкретных задач. На мой взгляд, разработчикам
ных операций, выполненных при отработке функции, посколь- PostgreSQL удается очень удачно сочетать динамичное раз-
ку функция исполняется как единый транзакционный блок. витие продукта с определенной долей осторожности и кон-
Несколько слов о среде разработки. Конечно, никто не серватизма, что, в конечном итоге, делает эту СУБД весь-
запрещает использовать для этого терминал psql, но малей- ма удачным выбором.
Ðèñóíîê 2
ВНУТРЕННИЙ ВЕБ-СЕРВЕР
Что админу хорошо, то пользователю – смерть.
Народная мудрость
СЕРГЕЙ СУПРУНОВ
Очень часто системному администратору, работающему в Apache + Perl (вы можете использовать и другую связку),
небольшой фирме, попутно приходится разрабатывать про- от клиентов требуется лишь поддержка какого-нибудь гра-
граммы для внутренних нужд компании. Требования к по- фического обозревателя. И наконец, времени на разработ-
добному ПО, как правило, невысоки, но это с лихвой ком- ку и сопровождение ПО в данном случае затрачивается за-
пенсируется очень сжатыми сроками, отводимыми на раз- метно меньше, чем при «традиционных» способах.
работку. Освоить Delphi для того, чтобы на предприятии по- Для наглядности рассмотрим в общих чертах процесс
явилась программа-каталог пользователей Интернета или разработки незатейливого приложения: каталога пользо-
программа, формирующая материальные отчеты, было бы вателей ADSL, в который будут заноситься сведения об
просто замечательно. Но времени на подобные вещи, как абонентах (фамилия, адрес, номер телефона), параметры
обычно, не хватает. И потому приходится идти другим пу- конфигурации (IP-адреса, интерфейсы, номера PVC), па-
тём. В данной статье я хочу рассказать о своем опыте ис- раметры линии (длина, диаметр жилы, сопротивление шлей-
пользования веб-сервера для решения подобных задач. фа) и т. д.
Почему был выбран столь экзотический способ? Во- В целях экономии места будет рассмотрена только пер-
первых, Perl я знаю несколько лучше, чем Delphi или C++ вая функция (работа со сведениями об абонентах). Очень
Builder. Во-вторых, такой подход без лишних усилий позво- многие детали придется опустить. Так, не будут рассмот-
ляет создавать клиент-серверные приложения, с которыми рены особенности Perl-модулей, подключаемых к нашим
одновременно могут работать сотни пользователей, не за- сценариям, способы работы с базой данных и т. д. Читате-
ботясь о разработке клиентских программ – с этой ролью лю понадобятся, по крайней мере, базовые знания Perl,
отлично справится любой браузер. В-третьих, налицо неза- HTML, PostgreSQL (или какой-нибудь другой СУБД). Если
висимость от конкретных платформ и операционных сис- материал статьи окажется вам интересен, я постараюсь раз-
тем – для сервера достаточно, чтобы на нем мог работать ложить все по полочкам в следующих статьях, оставляйте
48
администрирование
ваши отзывы на форуме журнала «Системный админист- ! ipaddress inet – IP-адрес, сопоставленный с данным
ратор». портом.
! lines – характеристики линий связи:
Подготовительные мероприятия ! uid serial – уникальный идентификатор линии;
Итак, прежде всего нам нужно собрать сервер. Я остано- ! portid numeric – идентификатор порта DSLAM, на ко-
вил свой выбор (поскольку все это уже есть и работает) на торый подключена эта линия;
следующем ПО (правда, кое-что из этого списка уже пора ! length numeric(5) – длина линии в метрах;
бы обновить): ! diameter numeric(2,1) – диаметр жилы в миллиметрах;
! ОС: FreeBSD 5.2 ! impedance numeric(4) – сопротивление шлейфа в
! Веб-сервер: Russian Apache 1.3.29 Омах.
! Язык программирования: Perl 5.6.1
! СУБД: PostgreSQL 7.4.2 И еще одна таблица для хранения служебной информа-
ции:
Рассматривать установку и конфигурирование всего ! st_modules – список функциональных модулей:
этого я не буду – все довольно подробно описано и на стра- ! name char(20) – имя модуля;
ницах журнала, и на бескрайних просторах Интернета. Вы- ! description varchar – описание модуля;
бор именно этого ПО – вопрос, скорее, личных предпочте- ! ink varchar – ссылка на сценарий модуля;
ний, поскольку по каждому из пунктов можно привести мас- ! allow char(12)[] – массив, хранящий имена пользова-
су как положительных, так и отрицательных доводов. В кон- телей, которым позволено работать с данным моду-
це концов с тем же успехом (с поправкой на более высокие лем;
требования к ресурсам и вопросам безопасности) можно ! orderby numeric(2) – данное поле задает порядок вы-
использовать и связку «Windows2003 – IIS – ASP – MSSQL». вода модулей на экран.
Структура базы данных и доступ к СУБД В данном случае мы минимально задействуем расши-
Начнем разработку с определения структуры БД. Нужно ренные возможности PostgreSQL, что позволит почти ни-
заметить, что это итерационный процесс, то есть обычно чего не менять при использовании, например, MySQL.
при разработке сценариев выясняется, что база данных
должна быть несколько иной, потом корректировки вновь Шаблон сайта – модульный подход
вносятся в код сценариев, снова исправляется БД и так до Поскольку переписывать все сначала при необходимости
тех пор, пока разработчик не осознает, что эффект от даль- расширить функциональность нашего приложения – заня-
нейшего улучшения уже не окупает затрат на исправления. тие не очень интересное, применим модульный подход.
Но мы остановимся на первой итерации, тем более что наша Пусть основной сценарий отвечает только за предоставле-
задача – показать сам принцип. ние доступа к имеющимся функциям, а каждая функция
Итак, создадим БД с именем adsl, владельцем которой будет реализована отдельным скриптом. Кроме того, час-
будет пользователь adsluser с паролем password. В ней нам то используемые операции будем выносить в наш модуль
потребуются следующие таблицы: My::Insite.
! sessions – информация сеансов пользователей (см. да- Выглядеть базовый сценарий будет примерно так:
лее):
! id char(32) – идентификатор сессии; #!/usr/bin/perl –w
#-------------------------------------------- adsl.cgi
! a_session text – информация сессии;
! login char(12) – имя пользователя; use My::Insite;
! password varchar – пароль пользователя. # Ïîäêëþ÷àåìñÿ ê ÁÄ è ñîçäàåì îáúåêò CGI äëÿ ðàáîòû ñ HTTP
! users – информация об абонентах ADSL: $dbh = My::Insite->DBConnect('adsl', 'adsluser', 'password');
$cgi = My::Insite->CGIStart();
! uid serial – уникальный идентификатор абонента;
! name varchar – фамилия, имя, отчество; # Ñ÷èòûâàåì çíà÷åíèå HTTP-ïàðàìåòðà «action»
($action = $cgi->param('action')) or $action = '';
! address varchar – адрес проживания;
! phone char(7) – номер телефона. # Âûïîëíÿåì ïðîöåäóðó âûõîäà
if($action eq 'logoff') { &doLogoff; }
! dslam– информация о ADSL-портах:
! uid serial – уникальный идентификатор порта; # Ïðîöåäóðà àâòîðèçàöèè
if($action eq 'logon') {
! userid numeric – идентификатор подключенного на $savedLogin = $cgi->param('login');
порт абонента; $savedPassword = $cgi->param('password');
# èùåì ñåññèþ äëÿ çàÿâëåííîãî ëîãèíà
! num char(10) – номер порта (в виде nDSLAM/nBOARD/ ($sSessId, $sPassword) = $dbh->selectrow_array('
nPORT); SELECT id, password FROM sessions WHERE login=?
', undef, $savedLogin);
! vlan numeric(4) – номер VLAN, соответствующей # åñëè íå íàøëè – ïîâòîðíûé çàïðîñ àâòîðèçàöèè
ADSL-порту; if(!$sSessId) { &doLogon('Failed'); }
# åñëè ñåññèÿ åñòü, íî ïàðîëü íå ñîîòâåòñòâóåò ââåäåííîìó,
! vpi numeric(3) – номер VPI; # ïîâòîðíûé çàïðîñ àâòîðèçàöèè
! vci numeric(3) – номер VCI, присвоенный клиенту; if($sPassword ne $savedPassword) { &doLogon('Wrong'); }
! interface char(15) – имя интерфейса, на котором бу- # Åñëè âñå íîðìàëüíî – ñîõðàíÿåì èäåíòèôèêàòîð ñåññèè â cookie
дет вестись учет трафика; $cookie = $cgi->cookie(-name => 'sessid', -value => $sSessId);
# action íå èìååò çíà÷åíèÿ, ïûòàåìñÿ èçâëå÷ü èç cookie Задача данного сценария – выполнить авторизацию
# èäåíòèôèêàòîð ñåññèè пользователя и предоставить ему список доступных для ра-
$sessId = $cgi->cookie('sessid');
боты модулей. Управление поведением сценария осуществ-
# Åñëè áåçóñïåøíî – óõîäèì íà àâòîðèçàöèþ ляется с помощью переменной «action», которая может иметь
if(!$sessId) { &doLogon('First'); }
одно из следующих значений: logoff (закрыть сеанс), logon
# Åñëè sessId åñòü, ïûòàåìñÿ ïîëó÷èòü ïîëüçîâàòåëÿ ýòîé ñåñ- (выполнить процедуру авторизации, в ходе которой прове-
ñèè
($sLogin) = $dbh->selectrow_array(' ряется правильность пароля и открывается сессия, соответ-
SELECT login FROM sessions WHERE id=?; ствующая данному пользователю, о чем делается запись в
', undef, $sessId);
файлах cookie). Пустое значение данной переменной позво-
# Åñëè óäà÷íî – îòêðûâàåì ñåññèþ, èíà÷å – íà àâòîðèçàöèþ лит вывести на экран перечень доступных модулей.
if($sLogin) {
$session = My::Insite->SessOpen($dbh, $sessId); Список модулей хранится в БД, в таблице st_modules,
} else { &doLogon('Fialed'); } откуда он выбирается и выводится на экран, причем отобра-
# Âûáèðàåì èç ÁÄ è âûâîäèì íà ýêðàí ñïèñîê ìîäóëåé жаются только те модули, для которых в поле allow содер-
print $cgi->header; жится имя текущего пользователя. Больше ничего от глав-
$sth = $dbh->prepare('SELECT * FROM st_modules ORDER BY
orderby;'); ного сценария не требуется. Для подключения к приложе-
$sth->execute; нию очередного модуля достаточно поместить в папку cgi-
print "<P align='right'>Âû âîøëè ïîä èìåíåì $sLogin | ";
print ' <A href="?action=logoff">Âûõîä</A></P>'; bin реализующий его сценарий и добавить запись в таблицу
while($rhash = $sth->fetchrow_hashref) { st_modules. То есть в этой таблице будет что-то похожее:
# Ïå÷àòàòü áóäåì òîëüêî òå ìîäóëè, äëÿ êîòîðûõ â ïîëå
allow
# åñòü èìÿ âîøåäøåãî ïîëüçîâàòåëÿ adsl=> select link, name, allow from st_modules order by orderby;
if($$rhash{allow} =~ m($sLogin)) { link | name | allow
print "<DT><A href='$$rhash{link}'> ↵ ---------------------+------------------------------------------+----------------------
$$rhash{name}</A>"; adsl-users.cgi | Абоненты ADSL | {"admin","operator"}
print "<DD>$$rhash{description}<BR>"; adsl-dslam.cgi | Конфигурация DSLAM | {"admin"}
} adsl-admin.cgi | Модуль администратора | {"admin"}
} (записей: 3)
# Âñå çàêðûâàåì (â ïðèíöèïå ýòî íå îáÿçàòåëüíî – âñå Результат работы сценария adsl.cgi представлен на ри-
# è òàê çàêðîåòñÿ) сунках 1 и 2.
My::Insite->SessClose($session);
My::Insite->DBDisconnect($dbh);
exit;
#-------------------------------------------- ïîäïðîãðàììû
sub doLogon { # ïîäïðîãðàììà àâòîðèçàöèè
$status = shift @_;
if($status eq 'Wrong') {
$status = Íåïðàâèëüíûé ëîãèí èëè ïàðîëü.';
} elsif($status eq 'Failed') {
$status = Îøèáêà ïîäêëþ÷åíèÿ äàííîãî ↵
ïîëüçîâàòåëÿ.';
} else {
$status = Ââåäèòå ëîãèí è ïàðîëü:';
}
print $cgi->header();
print <<__HTML__;
<CENTER><H3>$status</H3><FORM method="POST">
<TABLE border="1"><TR><TD><TABLE> Ðèñóíîê 1
<INPUT type="hidden" name="action" value="logon">
<TR><TD>Login:<TD><INPUT type="text" name="login"
value="">
<TR><TD>Password:
<TD><INPUT type="password" name="password" value="">
<TR><TD colspan="2" align="center">
<INPUT type="submit" value="Âîéòè">
</TABLE></TABLE></FORM></CENTER>
__HTML__
exit;
}
50
администрирование
Модуль My::Insite в моем случае будет размещаться по Доступ на сайт и Apache::Session
такому адресу: /usr/local/lib/perl5/site_perl/5.6.1/My/Insite.pm. Если вы доверяете всем сотрудникам или собираетесь ог-
Узнать пути, по которым Perl ищет подключаемые модули, раничивать доступ к сайту «низкоуровневыми» средства-
позволяет специальная переменная @INC: ми вроде брандмауэра для ограниченного круга лиц с рав-
ными правами, то этот пункт можно пропустить. В общем
#!/usr/bin/perl же случае желательно организовать проверку «подлинно-
#-------------------- testpath.pl
сти» пользователя и соответствующим образом ограничи-
$, = "\n"; вать его права в нашей программе. В серьезных случаях
print @INC;
exit; можно дополнительно организовать SSL-шифрование, но
сейчас обойдемся без этого, чтобы не отвлекаться от ос-
На моей машине результат был получен следующий: новной цели.
Пароли для простоты хранить и передавать будем в яв-
$ ./testpath.pl ном виде, признак правильного входа в приложение, а за-
/usr/local/lib/perl5/site_perl/5.6.1/mach
/usr/local/lib/perl5/site_perl/5.6.1 одно и некоторые персональные настройки будем хранить,
/usr/local/lib/perl5/site_perl используя механизм сессий. В Perl это выглядит несколько
/usr/local/lib/perl5/5.6.1/BSDPAN
/usr/local/lib/perl5/5.6.1/mach сложнее, чем в PHP, зато проще сделать именно то, что
/usr/local/lib/perl5/5.6.1 нужно. Для работы понадобится модуль Apache::Session.
Если на вашей системе такого нет, для FreeBSD его, как и
Код модуля My::Insite представлен ниже: большинство других модулей, можно установить из коллек-
ции портов:
package My::Insite;
# cd /usr/ports/www/p5-Apache-Session
use CGI; # make install
use DBI;
use Apache::Session::Postgres;
Более универсальный путь, пригодный практически для
sub CGIStart { всех систем – использование архива CPAN. Этот метод опи-
return CGI->new;
} сан на страницах руководства man perlmodinstall.
Так как база данных у нас есть, целесообразно для хра-
sub DBConnect {
my($obj, $dbName, $dbUser, $dbPwd) = @_; нения сессионной информации использовать именно ее. По-
return DBI->connect('dbi:Pg:dbname='.$dbName, ↵ этому будем использовать подмодуль Apache::Session::
$dbUser, $dbPwd);
} Postgres. Поскольку число пользователей нашего приложе-
ния ограничено и все они известны, то имеет смысл для
sub DBDisconnect {
my($obj, $dbh) = @_; каждого из них заранее создать сессию, в которой будут
$dbh->disconnect; храниться все пользовательские данные, и при авториза-
return(1);
} ции подключать именно ее. Такой подход позволит не бес-
покоиться об удалении старых сессий и о хранении иденти-
sub SessOpen {
my($obj, $dbh, $sessId) = @_; фикатора сессии между сеансами. Вручную создавать но-
tie %session, 'Apache::Session::Postgres', $sessId, вую сессию не очень удобно, поэтому будем использовать
{Handle => $dbh, LockHandle => $dbh};
return(bless(\%session, $obj)); такой небольшой сценарий:
}
#!/usr/bin/perl –w
sub SessClose { #------------------------------------------ adsl-adduser.pl
my($obj, $session) = @_;
untie(%$session); use DBI;
return(1); use Apache::Session::Postgres;
}
$login = $ARGV[0]; # ïåðâûé àðãóìåíò – èìÿ
return(1); $password = $ARGV[1]; # âòîðîé – ïàðîëü
Как видите, сюда вынесены функции подключения к БД, # Çàïðàøèâàåì âñå, ÷òî íå ïåðåäàíî â àðãóìåíòàõ
if(!$login) {
работы с сессиями и т. д. print 'Enter login: ';
Может показаться, что в некоторых функциях нет смыс- chomp($login = <>);
}
ла. Например, зачем создавать CGIStart, которая только и
делает, что вызывает функцию new() модуля CGI? Не про- if(!$password) {
print 'Enter password: ';
ще ли вызывать эту функцию самому и не захламлять мо- chomp($password = <>);
дуль? }
А теперь представьте, что вы решили вместо модуля CGI # Ñîçäàåì íîâóþ ñåññèþ è ñðàçó çàêðûâàåì
перейти на более функциональный. Что проще – перепи- $dbh = DBI->connect('dbi:Pg:dbname=adsl', 'adsluser', ↵
'password');
сывать все имеющиеся сценарии или изменить одну функ- tie %session, 'Apache::Session::Postgres', undef,
цию в My::Insite? {Handle => $dbh, LockHandle => $dbh};
untie %session;
Думаю, в этом модуле все понятно без комментариев.
Если что непонятно – всегда под рукой man DBI, man CGI, # Â çàïèñü â òàáëèöå sessions, ñîîòâåòñòâóþùåé íàøåìó
# ñåàíñó, äîáàâëÿåì èìÿ ïîëüçîâàòåëÿ è ïàðîëü, ââåäåííûå âûøå
man Apache::Session. $pre = $dbh->prepare('
52
администрирование
__HTML__ Прочие модули
exit; Поскольку другие модули ничего нового и интересного в
}
себе не содержат, отличаясь от приведенного лишь имена-
sub changeUser { # çàïèñü èçìåíåíèé â ÁÄ ми и количеством полей, а также некоторыми интерфейс-
$type = $cgi->param('type');
$uid = $cgi->param('uid'); ными особенностями, то и тратить время на их рассмотре-
$name = $cgi->param('name'); ние не будем. Добавив соответствующую запись в таблицу
$address = $cgi->param('address');
$phone = $cgi->param('phone'); st_modules, вы сделаете новый модуль доступным для ра-
if($type eq 'add') {
боты.
$res = $dbh->do('
INSERT INTO users(name, address, phone) Что можно изменить?
VALUES(?, ?, ?);',
undef, $name, $address, $phone); Как известно, нет предела совершенству. Рассмотренный
} elsif($type eq 'delete') { здесь пример был очень сильно урезан и упрощен, чтобы
$res = $dbh->do('DELETE FROM users WHERE uid=?;', ↵
undef, $uid); за деталями не потерялась суть и чтобы уложиться в рамки
} elsif($type eq 'update') { журнальной статьи. Однако, разрабатывая реальное при-
$res = $dbh->do('
UPDATE users SET name=?, address=?, phone=? WHERE uid=?; ложение, имеет смысл сделать некоторые улучшения.
', undef, $name, $address, $phone, $uid); Например, «шаблонность» нашего приложения остав-
} else { print 'Îøèáêà îïåðàöèè: '.$type; }
ляет желать лучшего. Каждый добавляемый модуль в прин-
if($res) { print 'Îïåðàöèÿ âûïîëíåíà óñïåøíî. '}; ципе имеет очень схожую структуру и функциональность.
print '<BR><A href="?action=">Ïðîäîëæèòü...</A>';
exit; То есть можно разработать один модуль-шаблон и настра-
} ивать его под конкретные таблицы и поля автоматически в
sub toLogon { процессе обращения к конкретной функции.
print $cgi->header; Можно сделать более гибкой систему разграничения до-
print '<META http-equiv="refresh" ↵
content="1;url=adsl.cgi?account=logon">'; ступа, помимо пользователей введя понятие групп пользо-
print 'Îøèáêà âõîäà. Ïåðåíàïðàâëåíèå...'; вателей, а также разграничивая права пользователей в пре-
exit;
} делах одного модуля (полный доступ, только чтение).
Механизм сессий используется очень слабо. Например,
В данном случае для управления поведением сценария его можно использовать для передачи таких параметров
используется еще одна переменная – type. Если action оп- как идентификатор пользователя (uid), вместо того чтобы
ределяет, на какую подпрограмму следует передавать уп- делать это с помощью скрытых полей формы. Не совсем
равление, то type содержит информацию о том, что именно удобной выглядит необходимость в каждом модуле зада-
следует делать в данной подпрограмме. вать логин и пароль для подключения к БД. Выносить это в
Сгенерированный приложением список абонентов име- модуль My::Insite неправильно (иначе будут сложности с
ет вид, представленный на рисунке 3. Рисунок 4 демонст- использованием данного модуля в других приложениях для
рирует форму для изменения данных. подключения к другим базам), а вот сделать что-то типа
конфигурационного файла и брать нужные данные оттуда
было бы намного лучше, поскольку в случае смены имени
или пароля корректировка потребуется только в одном ме-
сте. В существенном улучшении нуждается проверка кор-
ректности вводимых данных, контроль ошибок, и т. д. В ре-
альной жизни этим, конечно же, пренебрегать нельзя.
И вообще, можно сделать более удобный и красивый
дизайн, добавить страничкам «динамизм» с помощью
JavaScript (например, всплывающие подсказки, предупреж-
Ðèñóíîê 3 дения и т. п.) и много еще чего хорошего и полезного.
Заключение
Ну что ж. Надеюсь, полученный результат хотя бы частич-
но соответствует нашим ожиданиям, несмотря на множе-
ство недоработок, оставленных «за бортом». Мы получи-
ли гибкое, легко модифицируемое приложение, соответ-
ствующее большинству наших требований. В будущем его
без труда можно расширить, добавив, например, модуль
для работы с жалобами абонентов, для сбора статистики
по потребленному трафику и оплатам и т. д. Единствен-
ное, чего мне в данный момент не хватает, это красивых
отчетов, которые не стыдно было бы распечатать, сохра-
нить в файл, отправить по электронной почте. Эта задача
тоже решается довольно просто. Но об этом – в следую-
Ðèñóíîê 4 щей статье.
В данной статье описывается частный случай объединения двух каналов Ethernet в один
c помощью Linux bonding (на базе Red Hat v.7.3) как с целью повышения пропускной
способности, так и надёжности сетевого соединения.
ПАВЕЛ ЗАКЛЯКОВ
Года два назад, просматривая одну электронную доску Первый недостаток – необходимость покупки дорогих
объявлений в разделе б/у сетевого оборудования, я наткнул- коммутаторов с поддержкой нескольких или одного порта
ся на заметку о продаже 16-портового коммутатора «Switch по стандарту IEEE 802.3ab (1000Base-T). При этом старый
Surecom EP-716X c поддержкой виртуальной сети и транка коммутатор оказывается не у дел.
на базе портов» плюс прочие документированные возмож- Второй недостаток – необходимость замены кабельной
ности. Цена была низкой, а желание повозиться с настрой- инфраструктуры. Кабели повсеместно используемых на
ками велико. Поэтому я поспешил приобрести его. сегодня категорий 5 и 5e не подойдут по полосе пропуска-
ния, соответственно их придётся также менять.
Третий недостаток – сочетание сетевых карт стандарта
IEEE 802.3ab (1000Base-T) и шины PCI. С некоторой натяж-
кой можно считать, что цена данных устройств относитель-
но невелика. А вот пропускная способность шины PCI 2.0
может оказаться для нас недостаточной: 33 МГц ∗ 32 бита =
1056 Мбит/c [1]. Хотя, 1056 > 1000 следует понимать, что
различные накладные расходы, особенно для карт стоимо-
стью менее $25, приведут к тому, что реальная пропускная
способность окажется ниже 1000 Мбит/c. При большой заг-
рузке сети это приведёт к тому, что буфер не будет успе-
вать обрабатываться, возникнут потери пакетов. Как след-
ствие – повторная передача и ещё большее снижение про-
пускной способности. Также не следует упускать из виду,
что многие серверы часто имеют не одну сетевую карту, а
несколько.
Ðèñóíîê 1. Ôîòîãðàôèÿ êîììóòàòîðà Surecom EP-716X Если согласно спецификации PCI 2.1 (и выше) вмес-
Ситуация на рынке год от года не меняется, скорости то тактовой частоты шины в 33 МГц использовать 66 МГц,
передачи данных неизменно растут, выходят новые версии то подобных эффектов удастся избежать, однако в этом
и т. д. Несмотря на рост скоростей в сетях с выделенным случае возможны проблемы c другим оборудованием, не
сервером, узким местом все равно остаётся точка соеди- поддерживающим частоту шины 66 МГц. Использование
нения сервера с локальной сетью. Если взять наиболее PCI-X или 64-разрядной шины PCI (даже при тактовой ча-
часто используемый вариант, то используется сеть Fast стоте 32 МГц) решает проблему технически, но часто де-
Ethernet и сетевые адаптеры с пропускной способностью лает её финансово непосильной. Материнские платы с
100 Мбит/с. В результате если к серверу обращается одно- поддержкой 64-разрядной шины PCI уже относятся к сер-
временно 20 компьютеров, то пропускная способность па- верному классу и стоят соответствующе. «Склепать де-
дает до 5 Мбит/c, а за вычетом служебной информации ре- шёвый сервер на коленке» не получится.
альная пропускная способность оказывается ещё меньше. Единственный недорогой выход для данной ситуации –
Выход из данной ситуации может быть только один – уве- это использование нескольких обычных сетевых карт. Зат-
личивать пропускную способность со стороны сервера. Если раты при этом минимальны: $5 + один вечер и результат
на сервере в качестве делимого взять не 100, а 1000 Мбит/c, усилий (удвоение пропускной способности) налицо. По это-
то в теории средняя скорость передачи на один компьютер му пути я и пошёл.
должна увеличиться в 10 раз. Характеристики повсемест- Первое, что мне бросилось в глаза в описании, – это
но продаваемого сетевого оборудования указывают на тот была фраза: «Support Port-Base Trunking», интуитивно по-
факт, что развитие идёт именно в этом направлении. Од- няв, что это то, что мне нужно, я залез на веб-страницу
нако на данном пути есть несколько препятствий, не позво- настройки и выставил одну транкинговую группу из 1-го и
ляющих делать переход массовым и незаметным. 9-го портов.
54
сети
После компиляции ядра я зашёл в директорию, где на-
ходится исходный файл ifenslave.с:
# cd /usr/src/linux/Documentation/networking
# cp ifenslave /sbin/ifenslave
Ðèñóíîê 2. Ïîðòû 1 è 9 íàõîäÿòñÿ â ðåæèìå port trunking Для организации работы с модулем и передачи ему па-
(По непонятным для меня причинам, настройку транкин- раметров необходимо добавить следующие строчки в файл
га портов с помощью протокола telnet разработчики поче- /etc/modules.conf:
му-то не сделали.) Далее я установил вторую карточку на
компьютер, подключаемый к коммутатору в качестве сер- alias bond0 bonding
options bond0 miimon=100 mode=0 downdelay=2000 updelay=5000
вера, соединил всё хозяйство патчкордами, и в результате
у меня получилась следующая схема соединений. Параметры, естественно, можно задать другие, но об
этом чуть позже. Чтобы было удобно воспользоваться стан-
дартной командой:
/etc/rc.d/init.d/network (start|stop|restart...)
/etc/sysconfig/network-scripts/ifcfg-bond0
Ðèñóíîê 3. Ñõåìà ñîåäèíåíèé DEVICE=bond0
Понимая, что само по себе железо работать не будет, я IPADDR=192.168.0.1
NETMASK=255.255.255.0
занялся поисками литературы и настройкой программного NETWORK=192.168.0.0
обеспечения. Основным документом, который частично по- BROADCAST=192.168.0.255
ONBOOT=yes
мог мне разобраться с проблемой, оказался Linux Ethernet BOOTPROTO=none
Bonding Driver mini-howto из комплектации ядра(v.2.4.27), на- USERCTL=no
ходящийся по следующему пути: /usr/src/linux/Documentation/ /etc/sysconfig/network-scripts/ifcfg-eth0
networking/bonding.txt. В сети этот документ можно найти
DEVICE=eth0
по адресу [2]. Желая иметь монолитное ядро, я отказался USERCTL=no
от рекомендаций компилировать Linux bonding в виде мо- ONBOOT=yes
MASTER=bond0
дуля. Всё бы хорошо, но объединение каналов почему-то SLAVE=yes
не работало как надо. При отключении кабелей от сетевых BOOTPROTO=none
интерфейсов ядро Linux продолжало думать, что всё в по- /etc/sysconfig/network-scripts/ifcfg-eth1
рядке. Убедившись в правильности совета, я скомпилиро-
DEVICE=eth1
вал ядро повторно, выбрав «Bonding driver support» в каче- USERCTL=no
стве модуля в разделе «Network device support». ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
56
сети
Параметры, передаваемые модулю cat /proc/net/bonding/bond0 выводит:
Чуть выше без пояснений были выбраны следующие пара-
Bonding Mode: load balancing (round-robin)
метры: miimon=100 mode=0 downdelay=2000 updelay=5000. MII Status: up
Давайте рассмотрим более подробно эти и другие парамет- MII Polling Interval (ms): 100
Up Delay (ms): 5000
ры, с помощью которых можно менять режим работы.
Down Delay (ms): 2000
58
bugtraq
СЕРГЕЙ ЯРЕМЧУК
Сегодняшний бизнес тяжело представить без использова- рольных записей, произведенных средствами аудита опе-
ния Интернет и сетей TCP/IP. Доступ к необходимой инфор- рационной системы, записи в журналах приложений и раз-
мации с любой точки планеты является несомненным удоб- личными типами датчиков, в том числе и трафик, получен-
ством, стоит воспользоваться хоть раз, и уже не представ- ный прослушиванием сетевых интерфейсов. Одни систе-
ляешь свой бизнес без этого. Но вместе с тем это несет и мы, используя заранее составленные описания атак (сиг-
свои проблемы. Сегодня основную нагрузку по защите се- натуры) и сравнивая, принимают решения о начале атаки.
тей принимают на себя firewall и приложения уровня доме- Такие IDS относятся к классу signature/rule-based/misuse и,
на, предназначенные для подтверждения подлинности поль- как правило, не могут обнаруживать новые, еще не зане-
зователей. Несмотря на то что эти приложения в основном сенные в базу атаки, что делает их бесполезными в начале
справляются со своей задачей, они не могут полностью ре- эпидемий, к тому же они склонны генерировать ложные по-
шить все проблемы по защите сетей и отдельных хостов. И зитивные предупреждения. Другие, anomaly detection-сис-
как следствие, на помощь приходят системы обнаружения темы, используют разные методы и алгоритмы, в которых
атак (СОА или Intrusion detection systems – IDS). СОА, ана- используются и контролируются модели «нормального»
лизируя информацию относительно всех контролируемых поведения системы, основанные на статистических данных
действий, выполненных в компьютерной системе или сети, или на некоторых правилах, отклонения от которых свиде-
производят поиск доказательств злонамеренных действий. тельствуют о возможных неприятностях. Такие системы,
Проверяемая информация может принимать форму конт- хоть также обладают недостатками, так как требуется не-
60
безопасность
которое время на их обучение, которое к тому же при неко- Методика анализа смены состояний (STAT) описывает
торых обстоятельствах может быть и не 100% эффектив- возможные угрозы как некие сценарии. В сценариях атаки
ным. Они все же позволяют обнаруживать новые атаки, но представлены как последовательности состояний, которые
также не застрахованы от выдачи ложных тревог, особен- характеризуют эволюцию состояний защиты системы от на-
но в динамичных средах. Скорее всего, в ближайшем буду- чального до скомпрометированного. Описания атак вклю-
щем будут использоваться комбинированные системы, со- чают в себя как минимум две позиции: запускающее initial-
четающие в себе положительные свойства обеих систем. состояние и по крайней мере одно конечное состояние ком-
За примером далеко ходить не надо – Snort (http:// прометации системы. Так, в сценарии атаки, описывающей
www.snort.org) поддерживает проверку аномалий в сети попытку нарушить защиту операционной системы, форму-
посредством препроцессоров (preprocessors). Препроцес- лируются утверждения вроде монопольного использования
соры проверяют данные пакетов после декодера Snort, но файла, идентификации или авторизации пользователя, а в
до того как механизм детектирования начинает сравнивать сценарии, описывающем сканирование портов, описыва-
правила, добавляя дополнительные возможности всей си- ются типичные действия и сегменты TCP, используемые при
стеме. Хотя в сильно загруженных сетях их применение сканировании портов хоста.
может увеличить нагрузку на систему, и к тому же большая Для описания сценариев атаки используется расширя-
их часть находится в концептуальном состоянии, и они мо- емый язык STATL. Вообще надо отметить, в последнее вре-
гут вызывать большое количество ложных срабатываний, мя заметен интерес к подобным разработкам и появилось
но, надо отметить, возможна тонкая подстройка препроцес- множество языков, что полностью оправдывает себя, т.к.
соров под конкретные условия. Но, несмотря на наличие появляется возможность выявить общие закономерности,
препроцессоров, Snort все-таки больше signature IDS, чем присущие атакам, произвести их классификацию и анализ
anomaly. Совсем другой подход. зависимостей среди различных атак, что позволит опозна-
Проект State Transition Analysis Technique (STAT) исполь- вать скоординированные и растянутые по времени атаки
зует несколько иной метод обнаружения угроз. Основан этот против компьютерных систем. По крайней мере сейчас из-
метод на абстракциях, где вместо конкретных деталей ис- вестны шесть категорий «attack languages»: языки собы-
пользуются обобщенные модели атак, которые затем опи- тий, языки реакции, языки отчетов, языки корреляции, язы-
сываются в возможных сценариях атак. Процесс абстрак- ки эксплоитов и языки детектирования. STATL относится к
ции от обычной формы (т.е. простых контрольных записей последней категории, т.е. к языкам детектирования, кото-
или сетевых пакетов) к представлению более высокого рые имеют соответствующие механизмы и абстракции, по-
уровня сделан так, чтобы различные действия в системе зволяющие описать атаку. Сама же атака в STATL пред-
статистически независимых низкоуровневых факторов ставляется как последовательность состояний и переходов.
были по возможности представлены к единому типу. Кро- Состояния характеризуют систему в различные моменты
ме того, методология STAT поддерживает такой подход мо- развития атаки. Описывается только необходимое для оп-
делирования, который представляет только те действия, ределения атаки (например, атрибуты файловой системы).
которые являются критическими для эффективности ата- Переходы же ассоциируются со специфическими условия-
ки в целом. ми, которые необходимо выполнить для перехода в новое
При этом отход от специфики конкретной атаки делает состояние. Например, после обнаружения бинарных дан-
возможным обнаруживать ранее неизвестные варианты ных в запросе веб-сервера ожидается открытие еще одно-
атаки или атаки, использующие подобные механизмы, т.е. го TCP-соединения или запуск приложения. Возможное раз-
подход STAT лишен недостатков, присущих signature-based- витие событий контролируется фильтрами утверждений
подходу. Методы, заложенные в сценариях STAT, могут быть перехода, которые определяют более конкретные условия,
применены для создания любого вида датчиков host-based, которым может соответствовать дальнейшее развитие ата-
network-based и application-based, что делает данную тех- ки. Например, открытие соединения только со специфичес-
нологию универсальной. К примеру, два тогда еще концеп- ким портом или запуск критических приложений. При этом
туальных датчика NetSTAT и USTAT прошли в конце про- переходы в зависимости от результата могут приобретать
шлого века полевые испытания в MIT Lincoln Laboratory и значение consuming, nonconsuming или unwinding.
Air Force Research Laboratory (AFRL). В ходе которых зас- STATL включает несколько встроенных типов: int и u_int,
лужили высокую оценку, и, главное, была доказана жиз- bool, string, timeval (для временных меток) и timer (для от-
ненность предложенных методик обнаружения атак и об- слеживания событий в течение определенного интервала
наружена схожесть путей представления сценариев атак и времени ) и также включены массивы. При этом невозмож-
архитектуры различных типов датчиков. но определить новые типы данных в пределах сценария,
специфические типы должны определяться в ориентирован-
Концепции, на которых базируется STAT, ной на конкретную задачу библиотеке. Поэтому сетевые и
принцип работы host-датчики кроме встроенных имеют и специфические
Основу проекта составляют пять понятий: типы данных. В документации можно найти примеры пост-
! State Transition Analysis Technique – STAT; роения сценария на языке STATL, позволяющие более под-
! язык STATL; робно разобраться с технологией, в данный же момент все
! ядро STAT; имеющиеся сценарии и расширения языка STATL, перепи-
! инструментальные средства STAT; саны в код C++ и откомпилированы в библиотеки STAT
! инфраструктура MetaSTAT. development tools, хотя в архивах приложений встречаются
62
безопасность
ством локальной связи и инфраструктуры управления. Для ! WinSTAT – также относится к IDS контролирующим от-
контроля работы, координации действий, совместимости и дельный узел и предназначен для анализа системных ло-
управления STAT-based приложениями предназначен набор гов Windows NT для обнаружения следов возможных атак.
MetaSTAT, состоящий из: ! LinSTAT – представляет собой демон контроля происхо-
! CommSTAT – позволяет создавать защищенные соеди- дящих событий в Linux-системах, для этих целей исполь-
нения между разнесенными по сети компонентами. Пе- зуется пакет SNARE, разработанный InterSect Alliance
редаваемые данные форматируются согласно стандар- (http://www.intersectalliance.com).
ту Intrusion Detection Message Exchange Format (IDMEF), ! NetSTAT – относится к сетевым системам обнаружения
предложенному Intrusion Detection Working Group (IDWG) атак, анализирует сетевой трафик на предмет наличия
of the Internet Engineering Task Force (http://www.ietf.org/ пакетов, содержащих угрозу.
html.charters/idwg-charter.html), который базируется на ! WebSTAT – application-based IDS, а по сути синтаксичес-
XML. Оригинальный IDMEF распознает два вида собы- кий анализатор лог-файлов, сгенерированых веб-сер-
тий: Heartbeat и Alert, который был расширен необходи- вером Apache, позволяющий обнаружить атаки и зло-
мыми для управления датчиками сообщениями. Для за- намеренные запросы.
щиты соединения используется SSL. ! LogSTAT – сенсор, анализирующий журналы формата
! STAT Proxy – действует как посредник между STAT-based UNIX syslog, но имеет библиотеку расширения, позво-
приложением и контроллером MetaSTAT, отвечает за ляющую отслеживать критические записи и в журналах
поддержку репозитария host-based модулей STAT, для Apache.
соединения с Controller использует CommSTAT. Также ! AlertSTAT – хотя и назван в некоторых документах дат-
производит предварительную обработку сообщений и чиком, но относится к инструменту анализа выводов дру-
директив управления, и поддерживает интеграцию с гих датчиков и позволяет обнаруживать атаки более
инструментами сторонних разработчиков, не поддержи- высокого уровня, в том числе и распределенные и мно-
вающих инфраструктуру STAT. гоступенчатые атаки.
! MetaSTAT Controller – сохраняет соединения к имеющим-
ся STAT proxy и обеспечивает интерфейс, позволяющий Установка и работа
отсылать управляющие сообщения STAT-based прило- Домашняя страница проекта в Интернете находится по ад-
жениям и контролировать их текущее состояние. ресу http://www.cs.ucsb.edu/~kemm/netstat.html/projects.html,
! MetaSTAT Viewer – пакет включает приложение, напи- здесь вы найдете документацию и собственно сам софт.
санное на Java и обеспечивающее графический пользо- Страница для закачки разбита по приложениям, причем если
вательский интерфейс, позволяющий просматривать вы хотите установить только LinSTAT (http://www.cs.ucsb.edu/
предупреждения, сохраненные в централизованной базе ~kemm/netstat.html/software/linstat.html), то на этой страни-
данных. В настоящее время Viewer поддерживает про- це найдете все необходимые компоненты для удовлетво-
смотр IDMEF версии 0.3. рения зависимостей. Доступны как прекомпилированные
! MetaSTAT Configurator – хранит базу данных задейство- rpm-пакеты (для RedHat 7.3), так и исходные тексты. Надо
ванных модулей и датчиков, а также зависимостей меж- сказать, что в rpm-пакетах можно найти только базовые при-
ду ними. ложения, да и то, например, модули ядра будут работать
! MetaSTAT Collector – отвечает за сбор и сохранение пре- только с тем ядром, для которого они компилированы, при
дупреждений, собранных управляемыми датчиками. Все использовании в другой системе получите примерно такое
предупреждения IDMEF можно сохранить во внешней сообщение:
базе данных (MySQL). Starting linuxstat services: insmod: error inserting
'/usr/local/stat/sensors/linuxstat_sensor_1.0/auditmodule.o':
Выходы датчиков в форме предупреждений собираются -1 Invalid module format
т.н. мета-сенсорами, каждый такой мета-сенсор отвечает за Поэтому наиболее общим вариантом будет установка из
подмножество развернутых датчиков и может координировать исходников. Как сказано в документации, для установки до-
действия с другими мета-сенсорами (корреляция результатов, статочно ввести стандартные ./configure, make, make install
например). Компоненты MetaSTAT могут быть организова- и все. Но при установке MetaSTAT (с остальными приложе-
ны в иерархической структуре, для возможности разверты- ниями проблем практически не было) на RedHat 7.3 и 9,
вания большого количества датчиков в больших сетях. SuSE 9.1, Linux XP, Slackware 9.1, проблемы возникали в
каждом случае (в RedHat 7.3 и Slackware меньше) поэтому,
Инструменты STAT скорее всего, придется немного повозиться в каждом конк-
Принципы, заложенные в STAT, были использованы при ретном случае. Например, такая ошибка преследовала во
разработке нескольких компонентов, позволяющих собрать всех системах.
STAT-based IDS под определенные задачи. checking for libxml/parser.h... no
! USTAT – первый появившийся датчик, представляет со- The STAT Core needs libxml2 headers installed before it can be compiled
бой host-based IDS, анализирующую контрольные запи- (note that a link called "libxml" and pointing to "libxml2/libxml" is needed)
си, выданные Sun Solaris Basic Security Module (BSM). Но libxml установлен, ищем, где:
! NSTAT – расширение USTAT для работы с несколькими
узлами, позволяет учитывать атаки на узлы, использу- # find /usr /opt -name parser.h
ющие NFS. /usr/include/libxml2/libxml/parser.h
64
безопасность
passwd</AdditionalData> p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~
</Alert> p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~
</IDMEF-Message> p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~
p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~
Для запуска при старте системы используется скрипт p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~p~
p~p~p~p~p~p~p~p~p~p1???^g?_~mo^g~mq^l~iq^d~mq^\~iq^h
/etc/init.d/linstat, который берет данные из файла /etc/sysconfig/ ~ia^\1?i^q1?a^\^pf?@?@y^l^bu^d<^at^m?@^a}???~@~i??0??@?@^cu?
linuxstat. В этих файлах можно изменить параметры запуска i1??hc^g~i[^h~mk^h~ic^l^k?@1??~@?t/bin/sh'
logstat@localhost@01/09/2004 22:13:04: LOG: syslog_bufferoverflow:
и месторасположение исполняемых и файлов отчетов.
Датчик NetSTAT также может работать в двух режимах.
# /etc/init.d/linstat start_lin Если запустить с указанием сетевого интерфейса, то будут
LinSTAT:1.0@09/02/2004 15:37:54: LOG: <IDMEF-Message> контролироваться проходящие через него пакеты:
<x-stat from="xstat@localhost" to="stat-controller@ahost.stattest.com">
<x-stat_info id="1" return_value="0" return_string="OK" #netstat -i eth0
scenario_id="2">
</x-stat_info> Got UDP port unreachable
</x-stat> 192.168.0.1 48361 -> 192.168.0.20 1
</IDMEF-Message> Inside tcpprobe, generating Half Open event
attacker: 192.168.0.1, attackerport: 48370, victim: 192.168.0.1,
Сенсор webSTAT анализирует логи веб-сервера Apache, victimport:22
<response sensor="netstat@localhost" scenario="proto_30"
после установки будет доступна только одна утилита –
scenario_id="201" instance_id="665"
webstat, которая и принимает в качестве аргумента лог- from="logging" transition"inactive" to="end">
файл. Работает также в двух режимах offline и live. Первый <data>CLASSIFICATION_NAME="tcpsweep"</data>
<data>CLASSIFICATION_URL="http://www.cs.ucsb.edu/~rsg"</data>
реализуется опцией [-auditfile | -a]: <data>SOURCE_NODEADDRESS="192.168.0.1"</data>
<data>SOURCE_PORT="48361"</data>
# webstat -a /var/log/apache2/access_log <data>TARGET_NODEADDRESS="192.168.0.20"</data>
<data>ADDITIONAL_DATA="Alert only contains last attacker"</data>
<data>threshold="3"</data>
Второй при помощи опции [-interface | -i]: <data>timeout="3"</data>
<data>victims=""</data>
<data>victim_address="335587520"</data>
#webstat -i /var/log/apache2/access_log <data>total_probed="1488"</data>
<data>addr_probes=""</data>
<data>t1="1"</data>
Теперь для контроля работы набираем в строке браузера: </response>
http://server/cgi-bin, после чего система выдает сообщение:
И как входные данные можно использовать информа-
webstat@localhost@08/26/2004 11:36:18: LOG: apache_regex_xml:
26/Aug/2004:11:36:18 +0300 : First Bad Request "GET цию, собранную внешней утилитой, например tcpdump.
/cgi-bin/ HTTP/1.1" :From 192.168.0.1
:Attack: cgi_dir #netstat -a tcpdump_file
При повторной попытке:
Для удобства параметры можно занести в provider_config:
webstat@localhost@08/26/2004 11:37:34: LOG: apache_regex_xml:
26/Aug/2004:11:37:34 +0300 : Subsequent Bad Request "GET
/cgi-bin/ HTTP/1.1" :From interface eth0
192.168.0.1 :Attack: cgi_dir
HAKIN9 LIVE
СЕРГЕЙ ЯРЕМЧУК
Появление LiveCD-дистрибутивов GNU/Linux не только по- чать с одного из зеркал, указанных на сайте, iso-образ раз-
радовало поклонников этой системы, но и было оценено мером 300 Мб, записать его на болванку и загрузиться,
администраторами, отвечающими за безопасность сети. присутствие жесткого диска необязательно. При загрузке
Конечно же, можно нанять для этой цели и специалистов можно передать ядру некоторые параметры, например, ре-
со стороны, что в принципе более правильно, т.к. при по- жим загрузки framebuffer fb800 и fb1024 или без него nofb,
мощи сканеров все равно невозможно выявить все недо- текстовый режим – text и прочие. Но в большинстве случа-
статки, но не все могут позволить себе такую роскошь. Да ев вмешательство пользователя необязательно. Необходи-
и следить за безопасностью необходимо не время от вре- мо отметить, что локализован Hakin9 Live пока только на
мени, а постоянно, и поэтому хочется иметь готовый инст- польский (по умолчанию), немецкий, французский, испанс-
румент, позволяющий оценить все самому. LiveCD-дист- кий, чешский, но русский язык в списке отсутствует. Не
рибутивы позволяют сделать необходимый инструмент знаю, считать ли это недостатком, все равно большая часть
буквально на все случаи жизни, и эта особенность не мог- предлагаемых утилит консольные, и знание английского в
ла остаться незамеченной у специалистов по компьютер- подобных случаях просто обязательно. Начиная с версии
ной безопасности. 2.0, в дистрибутиве используется оконный менеджер XFce4,
Польский журнал Hakin9 ориентирован на читателя, от- в более ранних – fluxbox. После загрузки необходимо заре-
вечающего за защиту компьютерных систем, программис- гистрироваться как пользователь root или haking без паро-
тов, специалистов по безопасности и администраторов, а ля. Помнится, как распекали SuSE Linux 9.1 LiveCD именно
также на людей, занимающихся проблемами безопасности по этой причине, поэтому, если планируется работа в Интер-
компьютеров и сетей в свободное время. Предлагаемый им нете, обязательно установите пароль при помощи passwd,
дистрибутив Hakin9 Live (http://www.haking.pl/en/index.php? иначе проникнуть в компьютер труда особого не составит.
page=hakin9_live), основанный на другом польском дистри- Дистрибутив поддерживает большинство сетевых устройств,
бутиве Aurox Live (http://www.aurox.org/en), содержит все и некоторые пытается настроить автоматически. Если сеть
необходимые инструментальные средства и материалы, не- не удалось настроить при помощи DHCP, настраиваем ее
обходимые для проверки на практике методик и техноло- вручную. Для этого воспользуемся командами ifconfig и
гий, описанных в статьях журнала. И для этого дистрибу- route.
тив включает в себя огромный набор утилит и инструмен-
тов для тестирования систем на уязвимость (как локаль- #ifconfig eth0 192.168.0.20 netmask 255.255.255.0
#route add default gw 192.168.0.254
ных, так и удаленных).
В использовании Hakin9 Live в принципе не очень отли- И заносим в /etc/resolv.conf имя ближайшего сервера
чается от других подобных дистрибутивов, необходимо ска- имен. Например:
66
администрирование
nameserver 192.168.0.254 strobe, traceroute, ethereal, tethereal, cold (Computerized
Ordinary LAN Dumper), p0f, panda309 (простая скорост-
Те, кто не привык к ручной набивке команд, могут вос- ная утилита для удаленного определения ОС), sentinel,
пользоваться графическими netconfig, netcardconfig или vmap, mtr, fping, hping2, hping3, queso, dnstracer, arp, arping,
redhat-config-network. arp-watch, ether-wake, netcat, ftp, ssh, веб-браузеры Links
После чего выполняем. и Mozilla Firebird, набор утилит для работы с kerberos.
! Утилиты анализа и повышения защищенности систе-
#/etc/init.d/network restart мы – john the ripper, позволяющий оценить пароли на
прочность, весь набор утилит The Coroner’s Toolkit с ин-
Aurox Live базируется на RedHat, и поэтому в Hakin9 Live струментом визуализации Autopsy Forensic Browser, о
можно найти конфигурационные утилиты, специфичные для котором журнал уже писал.
данного дистрибутива, в том числе возможно использова-
ние rpm, но именно по этой причине этот дистрибутив мо- И конечно же, найдете все утилиты, присущие любой
жет подойти новичкам, еще не знающим всех тонкостей Linux-системе, что позволяет использовать Hakin9 Live и
UNIX-систем. Особенностью дистрибутива является отсут- для спасательных целей. И в дополнение целый ряд дру-
ствие автоматического сохранения настроек, поэтому о со- гих не менее интересных утилит, например стенографи-
хранении всего необходимого придется позаботиться са- ческая утилита MP3Stego (http://www.cl.cam.ac.uk/~fapp2/
мому, сохранив их на дискету или в любой раздел жесткого steganography/mp3stego/), позволяющая спрятать информа-
диска, которые автоматически система находит и монтиру- цию в музыкальный mp3-файл. Разработчики полностью
ет при загрузке. сохранили документацию в виде man-страниц плюс напи-
Ссылки на все основные инструменты для удобства сали свою, что позволяет быстро разобраться в работе с
пользователя собраны в каталоге /usr/local/bin/tools/, куда системой и незнакомыми утилитами, но на сайте, к сожа-
можно перейти в том числе и из отдельного пункта меню. лению, информации практически нет.
Здесь полный набор, включающий наработки известных Вот кратко и все. Сравнивать с другими подобными ди-
хакерских групп: стрибутивами смысла, я думаю, нет, т.к. каждый из них ори-
! Утилиты анализа защищенности и работы в сети: iptables, ентирован под определенные задачи и соответственно
tcpdump, tcpflow, tcpslice, сканеры – nmap с nmapfe, amap пользователя, который будет с ним работать. Это доволь-
(Application MAPper), gps (Ghost Port Scan, хорошая ути- но хороший и удобный инструмент администратора и для
лита для проверки правил firewall), exscan, siphon, nbtscan, пользователей, желающих освоиться в UNIX или желающих
jwhois, iptraf (IP Network Statistics Utility), nessus, Snort, разобраться в проблемах безопасности.
ДЕНИС БАТРАНКОВ
В этой статье вы найдете ответы на следующие вопросы: ! Просмотреть логи персонального firewall. Если firewall
! Что делать, если вы предполагаете, что на вашем ком- не смог заблокировать несанкционированные соедине-
пьютере с Windows установлена программа-шпион или ния трояна в силу своей недостаточной функциональ-
троян? ности или неправильной настройки, то есть надежда,
! Как найти троянскую программу или spyware, если ваш что он хотя бы запротоколировал, какие соединения
антивирус или AdWare ее не находит? были пропущены в Интернет. Если хорошего персональ-
ного firewall нет, то хотя бы включите встроенный в
Статья для начинающих системных администраторов и Windows XP firewall, который называется ICF (как это сде-
опытных пользователей Windows описывает возможные спо- лать, описано на http://www.microsoft.com/rus/windowsxp/
собы поиска троянских программ и также описывает, как ис- using/howto/networking/icf.asp). Протоколы встроенного
пользовать для этого поиска программы и утилиты из стан- firewall можно посмотреть с помощью любого текстово-
дартной поставки Windows 2000, XP и 2003 и программы го редактора, открыв файл C:\WINDOWS\ pfirewall.log.
сторонних разработчиков: netstat, msconfig, msinfo32, tlist, Но лучше использовать более удобные утилиты, ссыл-
Sysinternals TCPView, CurrPorts, WinTasks, Security Task ки на которые легко найти при помощи Google (напри-
Manager, Starter, Winpatrol, Sysinternals Autoruns, Sysinternals мер, набрав в строке поиска «XP firewall logger»).
ProcessExplorer, MoveOnBoot, Microsoft PortReporter, System
Safety Monitor. Первый пункт достаточно понятен и помогает в 80% слу-
Если коротко описать процесс поиска программы, вы- чаев. За третий пункт нужно браться в самом запущенном
полняющей нежелательные действия, то алгоритм обычно случае и еще лучше со специалистом по компьютерной бе-
такой: зопасности (далее КБ). Давайте попробуем выполнить дей-
! Обновить базу данных установленного на вашем ком- ствия, описанные во втором пункте. Тем более что при вни-
пьютере антивируса и проверить им все локальные дис- мательном выполнении всех операций можно найти и убить
ки. (Если антивируса нет, то установить его.) Вам нуж- любую гадость, засевшую в вашем компьютере.
но осознавать, что если антивирус не обнаружил троя- Возникает вопрос, нужно ли отключаться от Интернета,
нов, то это не значит, что их у вас нет. На компьютере если мы ищем вирус или троян? Вам понадобятся различ-
может работать свежий троян или специально подготов- ные утилиты для поиска трояна (какие конкретно будет опи-
ленная для вас программа-шпион, которой еще нет в сано далее). Если эти утилиты уже есть или на жестком
базах ни одной компании производителя антивируса. И, диске, или на компакт-диске, или у вас есть возможность
возможно, вы тот человек, который первым выявит и сходить за нужными дисками, или скачать и записать на
пошлет эту программу для исследования в антивирус- компакт-диск нужные программы на другом незараженном
ную компанию. компьютере, то необходимо отключиться от Сети. Это нуж-
! Посмотреть, какие процессы работают на компьютере но сделать, чтобы предотвратить дальнейшую утечку ин-
и какие соединения с Интернетом ими используются. формации с компьютера. Отключаться нужно даже от ло-
Возможно, на диске появились новые файлы, возмож- кальной сети, например, сети офиса или домашней сети,
но, старые файлы изменились. Возможно, в реестре по- чтобы не заражать соседние компьютеры.
явились новые ключи или параметры. Однако иногда встречаются особо запущенные случаи,
68
безопасность
в которых приходится скачивать нужные программы через вашем компьютере все что угодно: скачивать файлы, рас-
Интернет. Например, я однажды приехал в гости к родствен- сылать спам, быть прокси-сервером, участвовать в DOS-
никам в Сибирь, обрадовался наличию компьютера с мо- атаке, быть плацдармом для других атак, естественно, в
демным доступом к Интернету, сел за него и, нажав по при- рамках функций, предоставляемых им имеющейся опера-
вычке <Ctrl-Alt-Del>, сразу обнаружил трояна в списке про- ционной системой. В данном случае мы рассматриваем
цессов. Поскольку нужных программ под рукой не было, версии Windows: 2000 SP4, XP SP1, 2003.
пришлось лечить вручную. Единственной «защитой» этого Такие программы открывают TCP-порт на компьютере
компьютера с Windows XP был гордо стоящий антивирус с жертвы, устанавливают его в состояние LISTENING и ждут,
базами вирусов двухгодичной давности. В Windows даже когда хакер подключится на этот порт. Таким образом, нам
не был включен ICF. нужно выявить все процессы, которые открыли TCP-порты и
К сожалению, подавляющее большинство пользовате- которые находятся в состоянии LISTENING, и решить, одоб-
лей неопытны и несведущи в вопросах компьютерной бе- ряете ли вы это соединение или нет. То же самое можно ска-
зопасности. Компьютеры на платформе Intel и операцион- зать про UDP-порты – за ними тоже надо смотреть, с един-
ная система Windows являются высокотехнологичными про- ственным отличием, что у них нет состояний – с этих пор-
дуктами. Ведь даже среди тех, кто пользуется общеизвест- тов может как приниматься информация, так и отсылаться.
ной программой Microsoft Word, не так много людей, кто С ходу можно сказать, что если у вас обычный компьютер,
изучал его на курсах или хотя бы читал к нему документа- подключенный к выделенной линии или через модем в Ин-
цию. Что тут говорить про образованность в области ком- тернет, то в идеале у вас не дожно быть слушающих портов.
пьютерной безопасности. Даже если приложения или сервисы Windows открыли эти
К каждому пользователю специалиста по компьютер- порты, то они должны быть закрыты персональным firewall.
ной безопасности не приставишь. Поэтому на таких компь- Чтобы выявить программы, которые ожидают (и уста-
ютерах все подготовительные мероприятия их владельцы навливают) соединения в Windows XP и Windows 2003, мож-
будут делать сами при работающем трояне и подключен- но, конечно, воспользоваться стандартной утилитой netstat
ном Интернете, поскольку Интернет – единственное место, c параметрами -ano. (Параметр -а заставляет netstat пока-
где они могут найти помощь и программное обеспечение зывать все имеющиеся подключения и ожидающие порты,
для поиска троянов. Тем более чего им бояться – все важ- -n преобразует вывод адресов и портов в числовой формат,
ное троян уже наверняка украл и отослал своему владель- -o отображает для каждого подключения идентификатор
цу. Но даже в этом случае, после того как вы скачали все процесса, создавшего это подключение). В Windows 2000
необходимые утилиты на локальный диск, нужно отключить- ключ -o еще не был изобретен. Например:
ся от Сети.
C:\Documents and Settings\User>netstat -ano
Итак, боевая задача состоит в том, чтобы успешно прой-
ти три этапа: найти трояна, убить его и поменять свои укра- Активные подключения
денные пароли. Именно в такой последовательности. Имя Локальный адрес Внешний адрес Состояние PID
Замечание: программа в операционной системе Windows TCP 0.0.0.0:135 0.0.0.0:0 LISTENING 856
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING 4
представлена в виде процесса, в котором может работать TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING 1028
несколько нитей, и все эти нити загружены в память из TCP 0.0.0.0:4928 0.0.0.0:0 LISTENING 3660
TCP 0.0.0.0:4929 0.0.0.0:0 LISTENING 3660
файлов, хранящихся на диске. Как правило, это файлы с TCP 0.0.0.0:4946 0.0.0.0:0 LISTENING 3660
расширением EXE и DLL. Расширения могут быть и други- TCP 0.0.0.0:6213 0.0.0.0:0 LISTENING 3660
TCP 0.0.0.0:6218 0.0.0.0:0 LISTENING 3660
ми. Злоумышленники часто используют другие расшире- TCP 0.0.0.0:6247 0.0.0.0:0 LISTENING 3660
ния, чтобы никто не догадался. TCP 0.0.0.0:6253 0.0.0.0:0 LISTENING 3660
TCP 0.0.0.0:6299 0.0.0.0:0 LISTENING 3660
Некоторыми проявлениями троянских программ явля- TCP 0.0.0.0:6344 0.0.0.0:0 LISTENING 3660
ются: TCP 0.0.0.0:9762 0.0.0.0:0 LISTENING 2324
! несанкционированные соединения c различными хоста- TCP
TCP
0.0.0.0:10641
0.0.0.0:10676
0.0.0.0:0
0.0.0.0:0
LISTENING
LISTENING
2884
2324
ми в Интернете; TCP 0.0.0.0:10892 0.0.0.0:0 LISTENING 2324
! открытые программами соединения, ожидающие под- TCP
TCP
127.0.0.1:111
127.0.0.1:143
0.0.0.0:0
0.0.0.0:0
LISTENING
LISTENING
2676
2676
ключения извне; TCP 127.0.0.1:3044 0.0.0.0:0 LISTENING 1608
! попытка открыть ненужные для нормальной деятельно- TCP
TCP
127.0.0.1:3045
127.0.0.1:3046
0.0.0.0:0
0.0.0.0:0
LISTENING
LISTENING
1028
1028
сти файлы на локальном диске; TCP 127.0.0.1:3085 0.0.0.0:0 LISTENING 2324
! добавление себя в списки автозапуска; TCP
TCP
127.0.0.1:5335
127.0.0.1:8888
0.0.0.0:0
0.0.0.0:0
LISTENING
LISTENING
3232
3232
! маскировка под стандартные системные процессы и раз-
мещение в системной папке Windows. Результат, как видите, аскетичен: порты, конечно, вы-
водятся, но вместо информации о приложениях выдается
Находим троянскую программу, только номер процесса. Хотелось бы еще узнать имя про-
которая ждет входящего соединения цесса и местоположение файла, из которого он был запу-
Обычно авторы таких программ называют свои програм- щен. Но давайте хотя бы разберемся с тем, что уже есть.
мы «программами удаленного управления». Типичной ил- Если вы увидели у себя много TCP-соединений в состо-
люстрацией этого вида троянских программ является Back янии LISTENING, то не пугайтесь – это, скорее всего, не
Orifice (см. описание http://www.viruslist.com/viruslist.html?id= трояны, а работающие по умолчанию стандартные серви-
3957&gloss=8227). Такие программы позволяют делать на сы Windows.
Ðèñóíîê 2
70
безопасность
скрыл под именем системного файла свою программу и Другим вариантом такого ручного поиска процесса яв-
положил ее в системную папку. ляется просмотр всех процессов с помощью последней вер-
Итак, что делать, если вы нашли незнакомый процесс? сии программы Sysinternals Process Explorer (http://www.sys
Есть такая услуга: идентификация процесса по имени. Су- internals.com/ntw2k/freeware/procexp.shtml) (рис. 4).
ществуют сайты, на которых выложен список процессов, Одной из полезных функций данной программы явля-
чаще всего встречающихся в операционной системе ется просмотр свойств каждого процесса, где показаны
Windows. Таким образом, по имени процесса вы можете используемые этим процессом порты. Например, операци-
понять, для чего он нужен на вашем компьютере, какие пор- онная система использует:
ты он обычно использует, и сравнить с данными CurrPorts.
Например, http://www.liutilities.com/products/wintaskspro/
processlibrary. Для примера попробуйте посмотреть описа-
ние svchost.exe: http://www.neuber.com/taskmanager/process/
svchost.exe.html. Кроме того, можно набрать в поисковой
машине имя процесса и номер порта – вероятнее всего, вы
найдете место, где описывается этот процесс или где опи-
сывается этот вирус или троян. Но лучше всего купить со-
ответствующие продукты, которые помогут вам идентифи-
цировать процессы без подключения к Интернету: например,
WinTasks Pro (http://www.liutilities.com/products/wintaskspro)
или Security Task Manager (http://www.neuber.com/task
manager/index.html). Ðèñóíîê 3
Таким образом, вы, пользуясь маленькой утилитой, на- Открытый слушающий порт 445 означает, что система
шли процессы, которые зачем-то слушают порты, и при по- может предоставлять доступ к дискам посредством прото-
мощи Интернета поняли, что это за процессы и нужно ли кола SMB (Server Message Broadcast), также известного под
их удалять с диска. Если вы не уверены точно, что за про- названием CIFS (Common Internet File System) через Интер-
цесс работает на вашем компьютере, обращайтесь к спе- нет. Неправильное конфигурирование этого сервиса может
циалистам. Их можно найти в форумах, например, на привести к возможности чтения системных и других фай-
www.securitylab.ru/forum. лов третьими лицами и захвату контроля над системой.
Необходимо понимать, что многие трояны прячутся под Значительное количество пользователей открывают ло-
именами системных процессов, чтобы их невозможно было кальные диски для чтения и записи по сети для упрощения
убить из менеджера задач. Но CurrPorts благополучно уби- обмена информацией, давая также возможность и третьим
вает и системные процессы. Будьте осторожнее – умира- лицам работать с их системами. Если вы не хотите, чтобы
ние системного процесса может привести к зависанию или кто-то изучал ваши диски или даже вносил изменения в
перезагрузке компьютера. данные, хранящиеся на них, то лучше отключить этот сер-
Ðèñóíîê 4
72
безопасность
различных компонентов Windows проверок на длину вхо-
дящих данных или параметров или, короче говоря, пере-
полнением буфера. Например, известный компьютерный
червь Blaster (http://support.microsoft.com/kb/826955/RU/)
использует переполнение буфера в сервисе RPC. А вот тро-
ян Ducky уже использует ошибку в обработке JPEG-карти-
нок (переполнение буфера) для своего запуска на вашем
компьютере. Как это ни ужасно, но, просто просмотрев кар-
тинку с удаленного сайта через Explorer, вы рискуете зара-
зиться новым трояном. И неизвестно, что нас ждет завтра.
Понятно, что очень сложно предусмотреть все вариан-
ты заражения компьютера, и, более того, неизвестно, ка-
кие уязвимости Windows вирусы и трояны будут использо-
вать в будущем, поэтому надо выполнять хотя бы два про-
стых правила: Ðèñóíîê 5
! не скачивать и не запускать неизвестные программы из Здесь вы увидите более полный список, поскольку по-
Интернета; лучен он из гораздо большего количества укромных мест
! включить «автоматическое обновление Windows», что- Windows. Но, к сожалению, отредактировать его эта про-
бы вовремя устранять уязвимости. грамма не позволяет.
Ну и последний вариант – это просмотреть реестр
Но если троян (или вирус) попал на ваш компьютер, то Windows, используя утилиту regedit.exe. Например, в HKLM\
его задача: закрепиться и остаться на компьютере как мож- Software\Microsoft\Windows\CurrentVersion\Run очень много
но дольше, а при возможности распространиться дальше. интересного.
Тут и проявляется ахиллесова пята этих троянов (впрочем, Посмотрим, какие варианты есть у сторонних разработ-
как и любого другого вируса) – им нужно, чтобы их кто-то чиков. Начну с программы Starter (http://codestuff.tripod.com/
запускал при следущей загрузке Windows. Если они не мо- features.shtml), которая сама читает данные из реестра и
гут запуститься, то не могут ничего сделать. Для своего INI-файлов и затем показывает содержимое в удобном
последующего запуска они используют стандартные меха- виде (рис. 8).
низмы Windows: запись в папку автозагрузки и в список Она просматривает и показывает имена программ, ко-
программ для автозапуска в реестре, запуск по расписа- торые будут автоматически выполнены. Чтобы увидеть пол-
нию, установка как сервис, запись в system.ini и win.ini. Как ную картину, нужно в «Настройках» во вкладке «Разное»
правило, такие трояны не используют вирусную техноло- поставить галочку на параметре «Элементы» только для
гию внедрения непосредственно в сам исполняемый файл, экспертов, и тогда имена программ она будет брать из сле-
а идут отдельным модулем в виде exe- или dll-файла. дующих ключей реестра, папок автозагрузки и INI-файлов:
Наша задача свелась к тому, чтобы «поскрести по сусе- ! HKEY_CURRENT_USER\Software\Microsoft\Windows\
кам» и выявить все процессы, что у нас есть в автозапуске, CurrentVersion\Run;
и опять посмотреть, нужны ли они нам там. Программы, ко- ! HKEY_CURRENT_USER\Software\Microsoft\Windows\
торые помогают это делать, уже написаны. Windows нам CurrentVersion\RunOnce;
предлагает утилиту msconfig.exe, с помощью которой мож- ! HKEY_CURRENT_USER\Software\Policies\Microsoft\
но посмотреть INI-файлы, сервисы и автозагрузку (рис. 5). Windows\System\Scripts;
Однако лучшим стандартным средством Windows для ! HKEY_CURRENT_USER\Software\Microsoft\Windows\
просмотра автоматически загружаемых программ являет- CurrentVersion\Policies\Explorer\Run;
ся msinfo32.exe (можно запустить через меню Пуск → Про- ! HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\
граммы → Служебные → Сведения о системе) (рис. 6). CurrentVersion\Run;
Ðèñóíîê 6
Ðèñóíîê 8
74
безопасность
только она показывает ShellExtensions и другие хитрые ком- этом файле, в открывшемся контекстном меню выбираете
поненты Windows (рис. 10). «Свойства» и в новой вкладке нажимаете кнопку Execute.
Итак, мы посмотрели, что находится в автозапуске, уда- После перезагрузки этот файл будет удален (рис. 9).
лили ненужные программы и заодно удалили трояны, кото-
рые периодически запускаются для выполнения «нехоро- Как посмотреть, что «ушло»
ших» задач. Самое главное, что одновременно мы навели с вашего компьютера
порядок в Windows. Несмотря на все наши усилия (и не только наши), все рав-
И напоследок скажу, что если троянская программа при но нужно констатировать факт, что если мы нашли и обез-
своем запуске удаляет себя из реестра и при завершении вредили трояна, то неизвестно, что было украдено с ком-
Windows добавляет себя снова в реестр, то в этом случае пьютера. Поэтому, после того как мы провели «дезинфек-
то, что вы читали выше, не работает. Но зато помогает кноп- цию», нужно обязательно поменять все пароли.
ка Reset. Чтобы в следующий раз не производить все перечис-
ленные выше действия, давайте поставим какой-нибудь
Убить трояна продукт, который бы протоколировал все успешные соеди-
Что самое интересное, периодически это становится труд- нения с внешним миром, чтобы потом, уже после инциден-
ной задачей. Что делать, если, пытаясь удалить файл, вы та, можно было понять, откуда произошла утечка.
сталкиваетесь с сообщениями: «Доступ к файлу запрещен», Во-первых, приходит на ум поставить галочку «записы-
«Файл используется»? Удалить такие файлы можно только вать успешные соединения» во встроенном в Windows
специальным образом. Очевидно, удалять их нужно до того firewall и периодически просматривать эти записи. Ссылки
момента, как они начали использоваться, либо убивать про- на программы для удобного просмотра этих объемных про-
цесс, заблокировавший файл, что не всегда возможно. токолов легко найти с помощью любого поискового серве-
ра, например Google.
Во-вторых, неплохим бесплатным решением является на-
писанная Microsoft утилита, которая называется Port Reporter
(http://support.microsoft.com/?id=837243). Советую внима-
тельно посмотреть на нее. Эта утилита не только протоко-
лирует соединения, но и расписывает все DLL, которыми
пользовался процесс. Ну и, наконец, можно поставить лю-
бой сторонний firewall, который имеет функции протоколи-
рования соединений. Например, Agnitum Outpost (http://
www.agnitum.com/products/outpost). Но это платный способ.
Ðèñóíîê 10
Ðèñóíîê 12
76
bugtraq
78
образование
КРИС КАСПЕРСКИ
Master boot record – базовые концепции ка 0/сектор 1) хранится специальная структура данных –
Первые жесткие диски были небольшого (даже по тем вре- master boot record (главная загрузочная запись) или сокра-
менам) размера и форматировались практически так же, щенно MBR. Она состоит из двух основных частей – пер-
как и дискеты, однако их объемы стремительно росли, и вичного загрузчика (master boot code) и таблицы разделов
MS-DOS уже не могла их целиком адресовать. Для преодо- (partition table), описывающей схему разбиения и геомет-
ления этого ограничения был введен механизм разделов рию каждого из логических дисков. В конце сектора по сме-
(partitions), разбивающий один физический диск на несколь- щению 1FE находится сигнатура 55h AAh, по которой BIOS
ко логических, каждый из которых имел свою собственную определяет признак «загрузочности» сектора. Даже если
файловую систему и форматировался независимо от дру- вы не хотите дробить свой винчестер на части и формати-
гих. За счет чего это достигается? руете его как один диск, присутствие master boot record обя-
В первом секторе физического диска (цилиндр 0/голов- зательно.
80
образование
Поле идентификатора диска содержит уникальную 32-
разрядную последовательность, помогающую операцион-
ной системе отличить один смонтированный диск от друго-
го и автоматически копирующую в следующий ключ реест-
Ðèñóíîê 1. Ñõåìàòè÷íîå ïðåäñòàâëåíèå ðàçáèòîãî äèñêà ра: HKLM\SYSTEM\MountedDevices. На самом деле Windows
При старте компьютера BIOS выбирает загрузочный свободно обходится и без него, поэтому содержимое этого
винчестер (обычно Primary Master, но порядок загрузки в поля некритично.
большинстве BIOS можно изменять, а самые продвинутые Поле Boot ID содержит идентификатор файловой сис-
из них при удержании ESC во время прохождения post (про- темы, установленной на разделе, который в случае NTFS
цесса начального тестирования оборудования) даже выво- равен 07h. За динамическими дисками согласно фирмен-
дят интерактивное меню), считывает первый сектор в па- ной спецификации закреплен идентификатор 42h. На са-
мять по адресу 0000h:7C00h, проверяет наличие сигнату- мом деле это справедливо лишь для тех из них, что получе-
ры 55h AAh в его конце, и если такая сигнатура действи- ны путем обновления (update) обычного раздела до дина-
тельно обнаруживается, передает управление на мического. Сведения об остальных динамических дисках в
0000h:7C000h. В противном случае анализируется следую- таблице разделов не хранятся, а содержатся в последнем
щее загрузочное устройство, а если таковое отсутствует, мегабайте физического диска в LDM-базе, и для стандарт-
выдается ругательное сообщение. ных дисковых менеджеров они не видны. При установке
Первичный загрузчик, получив управление, сканирует операционной системы семейства Windows 9х или UNIX на
partition table (которая уже загружена в память!), находит винчестер, содержащий динамические диски, они могут
активный раздел (Boot Indicator === 80h), извлекает номер быть необратимо утеряны, поскольку согласно таблице раз-
стартового сектора раздела, также называемого boot-сек- делов занятое ими пространство отмечено как свободное.
тором, загружает его в память по адресу 0000h:7C00h (пред- Тем не менее загрузочный логический диск (независимо
варительно переместив свое тело в другое место, чтобы от того, динамический он или нет) в обязательном порядке
избежать затирания), убеждается в наличии сигнатуры должен присутствовать в partition table, иначе BIOS не смо-
55h AAh, передавая управление по 0000h:7C00h, в против- жет его загрузить.
ном случае выдается ругательное сообщение, и после на- Четырех записей partition table, обеспечивающих всего
жатия на клавишу компьютер перезагружается. Некоторые четыре логических диска, явно не хватало, но расширять
загрузчики поддерживают несколько активных разделов, таблицу разделов было уже некуда – последняя запись упи-
последовательно перебирая их один за другим, но это уже ралась в конец сектора, а использовать следующий сектор
отсебятина разработчиков, выходящих за стандартные спе- разработчикам не хотелось, поскольку его активно исполь-
цификации Microsoft, что, впрочем, никого не смущает. зовали многие вирусы и нестандартные драйвера, к тому
Если первичный загрузчик поврежден, то BIOS не смо- же это все равно не решало проблемы, а лишь оттягивало
жет запустить операционную систему с такого диска, одна- конец. Тогда инженеры нашли другое решение, предложив
ко при подключении его «вторым» (или загрузке с диске- концепцию расширенных разделов (Extended partition). Если
ты) все логические диски будут доступны. Как минимум они boot ID некоторого раздела равен 05h или 0Fh, он тракту-
должны быть «видны», т.е. команды C:, D:, E: выполняются ется как «виртуальный физический диск»1 со своей соб-
нормально, правда, работоспособность команды dir уже не ственной partition table, расположенной в его начале, на ко-
гарантируется. Во-первых, для этого файловая система торую и указывает стартовый сектор расширенного разде-
соответствующего раздела должна быть известна загру- ла. Короче говоря, таблица разделов получается вложен-
женной операционной системе и не повреждена, а во-вто- ной, и уровень вложения ограничен разве что свободным
рых, должен быть цел boot-сектор (но об этом позже). местом жесткого диска и количеством стековой памяти заг-
Partition Table, которую анализирует master boot code, а рузчика (при условии, что он использует рекурсивный ал-
чуть позже – драйвер логических дисков операционной сис- горитм сканирования). Таблица разделов как бы размазы-
темы, состоит из четырех 10h-записей, расположенных по вается вдоль винчестера. Большинство утилит резервиро-
смещению 1BEh, 1CEh, 1DEh, 1EEh байт от начала диска вания сохраняют лишь первый сектор, чего явно недоста-
соответственно. Каждая из них описывает свой логический точно (впрочем, первый сектор гибнет намного чаще дру-
раздел, задавая его стартовый и конечный сектора, запи- гих, так что даже плохая политика резервирования лучше,
санные в CHS-формате (да! даже если диск работает в LBA- чем совсем ничего).
режиме, патриции все равно адресуются через CHS!). Поле
относительного смещения раздела, отсчитываемое от нача-
ла таблицы разделов, является вспомогательным, и его из-
быточность очевидна. То же самое относится и к полю с об- Ðèñóíîê 2. Ðàñøèðåííàÿ òàáëèöà ðàçäåëîâ
щим количеством секторов на диске – как будто это нельзя Штатные утилиты разбивки (FDISK.EXE, Disk Manager)
вычислить на основе стартового и конечного секторов! Одни в каждой таблице разделов создают один основной и один
операционные системы и загрузчики игнорируют вспомога- расширенный раздел. То есть при разбиении винчестера
тельные поля, другие же их активно используют, поэтому они на четыре логических диска на нем образуются четыре
должны соответствовать действительности. partition table (см. листинг 4), хотя в данном случае можно
1
Термин автора.
82
образование
тов, преодолевших барьер в 2 Гб с помощью всевозмож- ную запись первого диска стандартный master boor code, или
ных расширений, они стали часто путаться, и потому дове- командой FIXMBR консоли аварийного восстановления в
рять им нельзя. Если не хотите потерять свои данные – вос- Windows 2000 (недокументированный ключ /CMBR, появив-
станавливайте MBR самостоятельно (тем более что это шийся в MS-DOS 7.0, позволяет выбирать любой из подклю-
достаточно простая операция, не требующая особой ква- ченных дисков). Внимание! Если вы использовали нестан-
лификации). Восстановление значительно упрощается, дартный загрузчик (такой, например, как LILO), то после пе-
если в вашем распоряжении имеется копия таблицы раз- резаписи MBR сможете загружаться только с основного раз-
делов, снятая Sector Inspector или подобными ей утилита- дела, а для запуска операционных систем из других разде-
ми. Однако чаще всего ее все-таки нет… лов вам придется переустановить свой мультизагрузочный
Если операционная система отказывается загружать- менеджер (вообще-то такой менеджер можно написать и
ся, а на экране появляется ругательство от BIOS типа «Disk самостоятельно, при наличии HIEW, а лучше использовать
Boot failure, Non-System disk or disk error... Press Enter to транслятор ассемблера – работа не займет и получаса).
restart», это указывает на разрушение сигнатуры 55h AAh, Как уже говорилось, некоторые загрузчики изменяют
обычно сопровождаемое смертью первичного загрузчика. схему трансляции адресов жесткого диска, и со штатным
Внимание! Очень важно отличать сообщение BIOS от со- загрузчиком такой диск будет полностью неработоспосо-
общений первичного загрузчика и boot-сектора. Зайдите в бен. Попробуйте переустановить загрузчик с дистрибутив-
BIOS Setup и отключите все загрузочные устройства, оста- ных дисков – быть может, это поможет. В противном слу-
вив активным только диск A: с вытащенной дискетой. А те- чае ничего не остается, как писать свой собственный заг-
перь перезагрузитесь и запомните, какое сообщение по- рузчик, определять текущую геометрию диска и соответ-
явится на экране. Это и будет ругательством BIOS. ствующим образом транслировать секторные адреса. Это
Восстановить сигнатуру 55h AAh можно в любом диско- довольно сложная задача, требующая серьезной подготов-
вом редакторе. Когда будете это делать, убедитесь, что в ки, и здесь ее лучше не обсуждать.
начале диска присутствуют осмысленный master boot code Если загрузчик говорит «Invalid partition table», это еще
(если вы испытываете затруднение с дизассемблировани- не значит, что таблица разделов повреждена, просто ни
ем в уме, воспользуйтесь IDA PRO или HIEW). Вы не умее- один из основных разделов не назначен активным. Такое
те дизассемблировать? Тогда попробуйте оценить степень случается при использовании нестандартных загрузчиков,
«нормальности» первичного загрузчика визуально (одна- загружающих операционную систему из расширенного
ко для этого опять-таки требуется опыт работы с кодом). В раздела. После выполнения команды FDISK /MBR или при
начале более или менее стандартного загрузчика располо- установке операционной системы, автоматически заменя-
жено приблизительно 100h байт машинного кода, в кото- ющей первичный загрузчик своим собственным, он не об-
ром обнаруживаются последовательности: 00 7С, 1B 7C, наружит в пределах досягаемости ни одного активного
BE 07, CD 13, CD 18, CD 10, 55 AA, а затем идут характер- раздела, и, естественно, разразится многоэтажным руга-
ные текстовые сообщения: «Invalid partition table, Error тельством. Такое поведение, в частности, характерно для
loading operating system, Missing operating system...» ну или Windows 98. Для решения проблемы либо восстановите
подобные им. Если загрузчик поврежден, но сигнатура прежний загрузчик, либо установите операционную сис-
55 AA цела, то попытка загрузки с такого диска обернется тему на первичный раздел и, запустив FDISK, сделайте
неизменным зависанием. его активным.
Восстановить «слетевший» или искореженный первич- Загрузитесь с системной дискеты (другого винчестера,
ный загрузчик можно с помощью утилиты FDISK.EXE, запу- CD-диска) и посмотрите, видны ли ваши логические диски
щенной с ключом /MBR, записывающей в главную загрузоч- или нет. Если да, то смело переходите к следующему пунк-
84
образование
редельные» сектора будут добавлены только после пере- LMD-база хранится в последнем мегабайте жесткого
форматирования раздела. Если все, что нам нужно, – это диска, а для дисков, полученных путем обновления базо-
скопировать данные с восстанавливаемого диска на дру- вого раздела до динамического, – в последнем мегабайте
гой носитель, то возиться с подгонкой параметров partition этого самого раздела, идентификатор системы Boot ID со-
table не нужно! Распахните ее на весь физический диск и ответствующей записи в Partition Table принимает значе-
дело с концом! ние 42h. Так происходит потому, что при стандартном раз-
Естественно, такой способ восстановления подходит биении винчестера в его конце просто не остается свобод-
только для первого раздела диска, а для всех последую- ного места и операционной системе приходится сохранять
щих нам потребуется определить стартовый сектор. Это эту информацию непосредственно в самом обновляемом
определение должно быть очень точным, поскольку все диске (естественно, для этого в нем должен быть свободен
структуры файловой системы адресуются от начала логи- по меньшей мере 1 Мб).
ческого диска и ошибка в один-единственный сектор сде- Сразу же за таблицей разделов по адресу 0/0/2 распо-
лает весь этот тонкий механизм полностью неработоспо- ложен приватный заголовок PRIVHEAD, содержащий в
собным. К счастью, некоторые из структур ссылаются сами себе ссылки на основные структуры LDM (см. рис. 3). Если
на себя, давая нам ключ к разгадке. В частности, файлы PRIVHEAD погибнет, Windows не сможет обнаружить и
$mft/$mftmiff содержат номер своего первого кластера. Сто- смонтировать динамические диски. А гибнет он удручаю-
ит нам найти первую запись FILE*, как мы узнаем, на каком ще часто. Подавляющее большинство загрузочных виру-
именно секторе мы сейчас находимся (конечно, при усло- сов и дисковых менеджеров считают сектор 0/0/2 свобод-
вии, что сумеем определить количество секторов на клас- ным и используют его для хранения своего тела, необра-
тер, но это уже другая тема – см. раздел «Загрузочный сек- тимо затирая прежнее содержимое. Осознавая значимость
тор – базовые концепции»). PRIVHEAD, разработчики из Microsoft сохранили его аж в
двух копиях, одна из которых хранится в хвосте LDM, а
Динамические диски другая – в последнем секторе физического диска. Благо-
Динамические диски, впервые появившиеся в Windows 2000, – даря такой избыточности, PRIVHEAD практически никог-
это все тот же программный RAID, призванный преодолеть да не приходится восстанавливать вручную, но если это
ограничения стандартных механизмов разбиения с учетом все-таки потребуется сделать, обратитесь к проекту LINUX-
ошибок своего прямого предшественника программного RAID NTFS за подробным описанием его структуры (http://linux-
Windows NT, хранящего конфигурационную информацию в ntfs.sourceforge.net), здесь же оно по соображениям эко-
системном реестре, что, во-первых, препятствовало его пе- номии места не приводится.
ремещению с машины на машину, а во-вторых, делало очень
уязвимым к порче реестра.
По умолчанию Windows создает базовые диски (см. рас-
шифровку терминов в таблице 5), но всякий базовый диск
в любой момент времени может быть обновлен до динами-
ческого (это даже не потребует перезагрузки). Динамичес- Ðèñóíîê 3. LDM-áàçà è åå äèñëîêàöèÿ
кие диски не пользуются таблицей разделов, а потому и не Внутреннее устройство LDM-базы недокументировано
имеют проблем, связанных с ограничением CHS-разрядно- и буквально пышет мощью и сложностью. Наверху иерар-
сти и позволяют создавать тома практически неограничен- хии расположено оглавление базы – структура TOCBLOCK
ного размера. Однако динамические диски, созданные пу- (Table Of Content Block), состоящая из двух секций config и
тем обновления основных разделов, все-таки остаются в log (вероятно, в будущем их список будет расширен). Сек-
partition table, при этом их Boot ID меняется на 42h. Если эта ция config содержит информацию о текущем разбиении
информация окажется удалена, система откажется подклю- динамических дисков и сведения о томах, а log хранит жур-
чать такой динамический диск. Кстати говоря, Windows нал изменений схемы разбивки. Это очень мощное сред-
может быть установлена только на обновленный динами- ство в борьбе с энтропией! Если удалить один или несколь-
ческий диск, поскольку BIOS может загружать систему лишь ко динамических разделов, информация о старом разбие-
с тех разделов, которые перечислены в partition table, а ди- нии сохранится в журнале и утерянные тома могут быть с
намические диски, созданные «на лету», в нее как раз и не легкостью восстановлены! Будучи очень важной структу-
попадают. рой, оглавление диска защищено от случайного разруше-
Схема разбиения динамических дисков содержится в ния тремя копиями, одна из которых вплотную примыкает к
Базе Менеджера Логических Дисков – Logical Disk Manager настоящему TOCBLOCK, расположенному в начале LDM-
Database или сокращенно LDM. Это протоколируемая базы, а две другие находятся в конце диска, между копия-
(journalled) база данных, поддерживающая транзакции и ус- ми PRIVHEAD.
тойчивая к сбоям. Если в процессе манипуляции с томами Внутренняя секция config состоит из заголовка (VMDB)
неожиданно исчезнет питание, при последующем включе- и одного или нескольких VBLKs – специальных 128-байто-
нии компьютера будет выполнен откат в предыдущее со- вых структур данных, каждая из которых описывает соот-
стояние. При переносе винчестера, содержащего один или ветствующий ей том, контейнер, раздел, диск или группу
несколько динамических дисков, на другую систему, они дисков. VMDB-заголовок не имеет копии и нигде не дубли-
автоматически распознаются и монтируются, как обыкно- руется, однако все его изменения протоколируются в жур-
венные диски. нале (KLOG) и потому могут быть восстановлены.
Загрузочный сектор – базовые К блоку параметров BIOS вплотную примыкает его про-
концепции должение – extended BPB, хранящий номер первого клас-
Первый сектор логического диска носит название загрузоч- тера MFT, ее размер в кластерах, номер кластера с зерка-
ного (boot). Он содержит самозагрузочный код (bootstrap лом MFT и некоторую другую информацию. В отличие от
code) и важнейшие сведения о геометрии диска, без кото- FAT16/32, MFT может располагаться в любом месте диска
рых раздел просто не будет смонтирован! Структура boot- (для борьбы с BAD-секторами это актуально). При нормаль-
сектора определяется архитектурными особенностями кон- ном развитии событий MFT располагается практически в
кретной файловой системы, в частности NTFS boot sector самом начале диска (где-то в районе 4 кластера) и если
выглядит так: только она не была перемещена, ее легко найти глобаль-
86
образование
ным поиском (строка «FILE*» по смещению 0 от начала сек- что соответствует SectorPerTrack-секторам, мы можем вос-
тора). При разрушении или некорректном заполнении extend становить и ее.
PBP драйвер файловой системы отказывается монтировать В отсутствии копий, boot-сектор приходится реконстру-
раздел, объявляя его неотформатированным. ировать вручную. Это легко. В поле идентификатора про-
Следом за extend PBP идет Bootstrap Code, который изводителя заносится строка «NTFS» (без кавычек, но с
ищет на диске операционный загрузчик (у Windows NT это четырьмя пробелами на конце). Количество секторов в тре-
ntldr), загружает его в память и передает ему управление. ке и число головок заполняются исходя из текущей геомет-
Если Bootstrap Code отсутствует, загрузка операционной рии диска. Количество скрытых секторов (т.е. секторов, рас-
системы становится невозможной, однако, при подключе- положенных между началом раздела и boot-сектором) рав-
нии восстанавливаемого диска вторым раздел должен быть но числу головок. Общее количество секторов в разделе
прекрасно виден. Порча Bootstrap Code вызывает перезаг- вычисляется на основании его размера (если точный раз-
рузку компьютера или его зависание. дел не известен, берите значение с запасом).
И завершает boot-сектор уже известная нам сигнатура Количество секторов в кластере определить сложнее
55h AAh, без которой он ни за что не будет признан загру- (особенно, если диск отформатирован со значением, отлич-
зочным. ным от принятого по умолчанию). Но ситуация вовсе не без-
Òàáëèöà 7. Çíà÷åíèå ïîëåé NTFS boot-ñåêòîðà надежна. Последовательно сканируя файловые записи в
MFT, найдите файл с заранее известной сигнатурой. Пусть
для определенности это будет NTOSKRNL.EXE. Откройте его
аутентичную копию в HEX-редакторе, найдите уникальную
последовательность, гарантировано не встречающуюся ни
в каких других файлах и расположенную в пределах первых
512 байт от его начала, после чего найдите ее глобальным
поиском на диске. Начальный номер кластера вам известен
(он содержится в MFT), логический номер сектора тоже (его
нашел дисковый редактор). Теперь остается лишь соотнес-
ти эти две величины между собой. Естественно, если диско-
вый редактор найдет удаленную копию ntoskrnl.exe (или на
диске будут присутствовать несколько файлов ntoskrnl.exe),
данный метод даст осечку, поэтому полученный результат
необходимо уточнить на других файлах.
Логический номер первого кластера MFT равен перво-
му кластеру, в начале которого встретилась строка «FILE*»
(конечно, при том условии, что MFT не был перемещен).
Штатно Windows выделяет под MFT 10% от емкости разде-
ла, помещая зеркало в середину. Кроме того, ссылка на
зеркало присутствует и в самом MFT. Если же он разру-
шен, переместитесь в середину диска, немного отступите
Загрузочный сектор – техника назад и повторите глобальный поиск строки «FILE*» (толь-
восстановления ко смотрите, не вылетите в соседний раздел!). Первое же
Осознавая значимость загрузочного сектора, Windows NT найденное вхождение с высокой степенью вероятности и
при форматировании диска создает его зеркальную копию будет зеркалом.
(правда, только на NTFS-разделах). Windows NT 4.0 распо- Количество кластеров на сегмент обычно равно F6h, а
лагает ее посередине логического диска, а Windows 2000 – на блоке индексов – 01h. Других значений мне встречать
в последнем секторе раздела. Если partition table цела, про- не доводилось. Серийный номер тома может быть также
сто перейдите в начало следующего раздела и отступите на любым – он ни на что не влияет.
сектор назад (Windows 2000) или поделите количество сек- Для восстановления отсутствующего (искаженного)
торов логического диска пополам (с округлением в нижнюю bootstrap code загрузите консоль восстановления и отдай-
сторону) и скажите редактору диска «GO» (Windows NT 4.0). те команду FIXBOOT.
Если же таблица разделов разрушена, найти копию сек-
тора можно глобальным поиском (ищите строку «NTFS» по Заключение
смещению 3 от начала сектора). Поскольку положение ко- Как видно, в восстановлении данных нет ничего мифическо-
пии фиксировано и отсчитывается от начала логического го и для устранения большинства типов разрушений не тре-
диска, мы можем с абсолютной уверенностью определить буется никакой квалификации. Если же некоторые моменты
границы раздела. вам не понятны, перечитайте эту статью с дисковым редак-
Допустим, копия boot найдена в секторе 1 289 724, а тором в руках. До сих пор мы говорили о достаточно про-
поле NumberSectors содержит значение 12 289 661. Тогда стых и хорошо известных вещах. Теперь, как следует раска-
конечный сектор раздела равен 1 289 724, а стартовый: чавшись и освоившись с основными понятиями, мы можем
1289724 – 12289661 == 63. Поскольку загрузочный сектор отправляться в самые дебри NTFS, восстановлению струк-
расположен на расстоянии одной головки от partition table, тур которой посвящена следующая статья этого цикла.
УСТАНОВКА
И НАСТРОЙКА
W2K SERVER
РОМАН МАРКОВ
Данная статья – попытка автора систематизировать свой ! Если это будет простенький, экономичный сервер для
опыт по установке и настройке Windows 2000/2003 Server выполнения задач по хранению нескольких неболь-
для начинающих технических специалистов. Она не пре- ших баз данных (например, базы «1С:Предприятие»)
тендует на полноту и абсолютную однозначность методов, и предназначенные для использования 2-5 клиента-
а предназначена исключительно для предоставления на- ми, то приемлемая конфигурация будет такой: PIII или
чального опыта по настройке серверных систем на основе Celeron 300-733 МГц, RAM 256 Мб, HDD 10-20 Гб. Этой
Windows 2000/2003 Server по принципу пошаговой инструк- же конфигурации хватит для организации шлюза
ции. Процесс будет рассмотрен на примере Windows 2000 общего доступа в Интернет для небольшой органи-
Server. Отличия в Windows 2003 Server незначительны и, зации с количеством рабочих станций до 10 (прокси-
как правило, интуитивно понятны. сервер, статистика работы пользователей в сети Ин-
Статья публикуется в двух частях. В первой части рас- тернет, защитный межсетевой экран – Firewall, по-
сказывается об установке и настройке Windows 2000 Server чтовый сервер).
и повышении его роли до контроллера домена. Во второй ! Для организации файл-сервера, используемого ра-
части будет рассматрено создание и настройка серверов бочей группой от 10 до 20 пользователей или опи-
приложений на основе служб терминалов Windows и их санного выше шлюза в Интернет для 20-30 пользо-
модернизации при помощи продукта Citrix Metaframe XP вателей рекомендуется следующая конфигурация:
Presentation Server. PIII-1000-1300, 256-512 Мб RAM, IDE HDD 40-120 Гб,
SCSI HDD 36 Гб. Использование SCSI-диска и быст-
Системные требования рых процессоров для шлюза требуется при необхо-
Итак, список того, что нам понадобится, и рекомендации димости вести протокол и постоянную переиндекса-
по системным требованиям: цию базы данных статистики запросов к прокси-сер-
! Диск с дистрибутивом Windows 2000 Server. Рекомен- веру и протокола безопасности. При отсутствии та-
дуется, чтобы он был оригинальным, загрузочным. кой необходимости достаточно одного IDE-диска и
! CD-ROM Drive с возможностью загрузиться с него. Не- процессора Celeron-500-733.
которые частично неисправные или старые приводы не ! Для организации сервера терминалов с количеством
позволяют произвести с них загрузку системы. Если вы активных пользователей от 5 до 10: PIV-1.7 ГГц, RAM
с этим столкнулись, то придется сделать загрузочные 512-768 Мб, IDE HDD 40-120 Гб, SCSI HDD 18-36 Гб.
дискеты. Этот процесс описан в самом начале раздела ! Сервер терминалов для 15-30 пользователей уже же-
«Установка ОС Windows 2000 Server» лательно строить на двухпроцессорных системах. На-
! Компьютер со следующими минимальными требовани- пример, для поднятия сервера терминалов для 20
ями: PII-433, 128 Мб RAM, 4 Гб HDD. По опыту автора пользователей, каждый из которых открывает по 2
данные характеристики являются минимальными и не базы «1С:Предприятие» в терминальном режиме, не-
рекомендованы к реальному использованию. Реальные обходим сервер со следующими характеристиками:
системные требования для практической работы зави- 2 * Xeon 1.8-2.4 ГГц, 1.5-2 Гб RAM, SCSI-RAID-5 (3-4
сят от задач, возлагаемых на сервер. SCSI-HDD + SCSI-RAID-контроллер).
88
образование
Более подробные рекомендации по выбору сервера вы- Если у вас новый жесткий диск или вы уже удалили с
ходят за рамки этой статьи. Единственное, что можно ска- него все разделы, то необходимо создать раздел для уста-
зать, – при наличии финансовой возможности старайтесь новки. Выбираем требуемый диск, выделяем «Неразмечен-
не экономить и покупать качественное «железо», от извес- ную область», нажимаем клавишу <C> для создания ново-
тных производителей. Хороший обзор есть здесь: http:// го раздела и вводим его размер. Рекомендуемый размер в
www.fcenter.ru/articles.shtml?technologies/2513. мегабайтах 8000-20000. Если общий объем жесткого дис-
ка составляет не более 10 Гб, то имеет смысл отдать под
Установка ОС Windows 2000 Server систему 5000 Мб, а большие приложения устанавливать в
Входим в BIOS и задаем первичную загрузку с CD-ROM. другой раздел (его мы создадим позже, из оставшегося
По возможности все остальные устройства для загрузки зап- места на диске). Оставляем неразмеченную область без
рещаем. То есть у нас должно остаться: First boot device – изменений и выбираем для установки созданный раздел,
CD-ROM. Остальные устройства выставляем (если это воз- нажав на нем <ENTER>.
можно) в Disabled. Выходим из BIOS, сохранив изменения. Выбираем «Форматировать раздел в системе NTFS».
Загружаемся с CD-ROM Windows 2000 Server. Если на Далее система отформатирует раздел и скопирует на него
жесткий диск уже установлена какая-либо ОС, то необхо- все необходимые файлы. Ваше участие не понадобится в
димо будет нажать любую клавишу в момент появления течение 10-15 минут. Можете пить чай. Компьютер авто-
надписи: «Press Any Key for boot from CD», иначе загрузит- матически перезагрузится. После этого вы увидите при-
ся старая установленная система. Некоторые частично не- глашение продолжить установку, нажав клавишу «Далее».
исправные или старые приводы не позволяют произвести После этого произойдет обнаружение устройств, и появит-
с них загрузку системы. Если вы с этим столкнулись, то ся предложение выбрать язык и стандарты. Здесь реко-
придется сделать загрузочные дискеты. Или загружаемся мендуется «Язык системы и язык пользователя» выбирать
с любой загрузочной дискеты Windows 98 и запускаем из «Русский» (установлен по умолчанию), а раскладку клави-
папки I386 файл winnt.exe, либо подготавливаем специаль- атуры выставлять по умолчанию в «Английский (США)»
ные дистрибутивные диски. Подготавливаем 4 чистые от- (нижнее меню Настроить → Английский (США) → Исполь-
форматированные дискеты, на оригинальном дистрибутив- зовать по умолчанию → Применить → ОК). Затем вводим
ном диске заходим в папку BOOTDISK и запускаем имя пользователя и организацию (это просто информаци-
Makeboot.bat. После создания таких дискет загружаемся с онные данные, а не имя для входа), например: Админист-
них. Обращаю внимание, что для обеспечения надежности ратор – ООО «Рога и копыта». Вводим регистрационный
и удобства необходим оригинальный загрузочный CD с ди- номер вашего дистрибутива. Выбираем лицензирование
стрибутивом или загрузка именно с этих дискет. «На сервер» и вводим приобретенное нами количество ли-
Программа установки начнет загружать необходимые цензий (по количеству пользователей + запас). Здесь вво-
файлы. Если вы устанавливаете систему на SCSI- или SATA- дим имя нашего сервера и пароль администратора. Имя
диск, необходимо сразу при старте загрузки нажать клави- сервера – латинскими буквами и цифрами, без пробелов
шу <F6> (сообщение об этом появится в нижней части эк- (допускается «дефис»). Приступаем к выбору компонентов.
рана) и установить драйвера этого устройства (поставля- Выбор компонентов установки опишем для наиболее час-
ются в комплекте с материнской платой или платой SCSI). то применимых ситуаций. Если что-то понадобится в про-
Если вы все сделали правильно, программа установки пред- цессе работы, всегда можно добавить. Снимаем все галки,
ложит вам добавить необходимые драйверы, вставив диск кроме «Служба индексирования» и «Стандартные и слу-
от производителя. После вывода списка устройств, для ко- жебные программы». Ставим курсор на «Сетевые службы»
торых будут найдены драйверы, выбираем устройство, ус- и устанавливаем только одну галку: DHCP.
тановленное в нашей системе. В противном случае програм- Если наш сервер будет являться еще и сервером тер-
ма установки сообщит, что не обнаружила дисков для ус- миналов, то устанавливаем галочки также на «Лицензиро-
тановки. В процессе загрузки файлов экран может стать вание служб терминалов» и «Службы терминалов», а также
черным на время до 5 минут. Не спешите перезагружать при необходимости организации веб-доступа к серверу при-
компьютер – терпеливо выждите. Нажмите <ENTER> для ложений – устанавливаем галку «Internet Information Server».
продолжения установки, затем <F8> для принятия условий На дальнейший вопрос о режиме сервера терминалов (по-
лицензионного соглашения (если вы, конечно, его прини- явится чуть позже) ответим: «Режим сервера приложений»
маете). Программа установки предложит выбрать раздел, и (если у нас нет особых старых приложений, которым не-
в который будет устанавливаться ОС. Рассмотрим новую обходим полный доступ к системным папкам) «Разреше-
установку на диск, все данные с которого можно удалить. ния группы пользователей Windows 2000». Соглашаемся с
Если на диске имеются нужные данные, необходимо создать предупреждением о том, что уже установленные приложе-
полную архивную копию на другой жесткий диск. В против- ния могут работать некорректно – как правило, это не
ном случае вы потеряете свои данные! критично. Указываем доступность «Для всего предприятия»
Если на жестком диске уже есть разделы (они будут ото- если у вас сложная доменная структура и дочерним доме-
бражены), то просто удаляем их (все данные будут уничто- нам необходим доступ к данному серверу. Для одноуровне-
жены!). Нажимаем для этого клавишу <D>, затем <ENTER> вой доменной структуры – выбор не важен. Путь в пункте
и подтверждаем удаление клавишей <L>. Повторяем со «Установить базу данных сервера» оставляем по умолчанию.
всеми разделами, до тех пор пока не останется одна «Не- Жмем «Далее» и устанавливаем текущие дату и время.
размеченная область», объемом с диск. Проверяем, чтобы часовой пояс соответствовал вашему
90
образование
более 3-5 минут. Иначе – обладая разделом в 50-100 Гб, ! Нахождение, закачка и установка обновлений вручную.
можно смело идти за пивом. Час-два форматирования обес- Список необходимых обновлений по степени их важнос-
печен. Поэтому у клиентов рекомендую ставить систему на ти можно найти так: заходим на http://www.microsoft.com/
заведомо исправный и проверенный диск и выбирать «Быс- technet/security/current.aspx и выбираем то, что у нас ус-
трое форматирование», чтобы не терять ценное время. Пос- тановлено. Например, Windows 2000 Server RUS + SP4.
ле того как на нашем разделе появилась надпись «Испра- Затем выбираем степень важности. В принципе обыч-
вен», закрываем консоль «Управление компьютером». но достаточно степени «Critical», если у вас очень мед-
Далее создаем на диске D: папку Distrib и в ней – папку ленная скорость закачки. После закачки необходимо
W2Kserver. Затем копируем в нее папку I386 с дистрибу- вручную установить все обновления.
тивного CD-ROM Windows 2000 Server. Это необходимо для ! Автоматическая установка обновлений. Итак, открыва-
дальнейшего добавления компонентов, когда под рукой ем Internet Explorer и набираем адрес: www.windows
может просто не оказаться дистрибутива. Позаботьтесь о update.com Соглашаемся с предложением установить
себе и своих коллегах! Затем извлекаем диск с Windows 2000 Windows Update. Жмем «Поиск и просмотр обновлений».
и убираем. Больше он нам не понадобится. В эту же папку После сообщения о нахождении обновлений выбираем
рекомендуется скопировать и драйвера от установленных «Просмотр и установка обновлений». Вам будет пред-
устройств. ложено установить найденные обновления. Некоторые
Открываем Пуск → Программы → Администрирова- (например, IE 6.0) могут требовать отдельной установ-
ние → Просмотр событий. Щелкаем правой клавишей по ки. Вообще, Internet Explorer 6.0 тоже рекомендуется
первому журналу и выбираем «Свойства». Там увеличива- иметь на диске, чтобы не качать его из Интернета. Итак,
ем размер журнала, например до 16 384 Кб, и выставляем после нахождения обновлений нажимаем на «Критичес-
галку «Затирать старые события по необходимости». По- кие обновления и пакеты обновлений» и выбираем «Ус-
вторяем со всеми журналами. тановить». Система сама скачает и установит все необ-
Заходим в систему. Правой клавишей по пустому мес- ходимые файлы. Если же канал в Интернет медленный,
ту на рабочем столе → Свойства → Настройка → Дополни- то лучше устанавливать все с диска (критические об-
тельно → Адаптер → Список всех режимов. Выбираем не- новления для W2K Server SP4 на момент написания этой
обходимое сочетание Разрешения/Глубины цвета/Частоты. статьи занимают 21 Мб). Устанавливаем последнюю
Частоту выставляем не менее 85 Гц, если позволит мони- версию Internet Explorer, если не установили до этого.
тор. Нажимаем «Применить». Если после мигания изобра- Перезагружаемся.
жение осталось на экране и является качественным, согла-
шаемся с сохранением этой частоты. Помните, что LCD-мо- Все. На этом основная установка Windows завершена.
ниторы работают с частотой 60-75 Гц. Наилучший выбор до- Дальнейшие действия зависят от того, какую роль будет
стигается визуально и по техническому описанию модели. выполнять наш сервер: контроллер домена, сервер терми-
Устанавливаем необходимые обновления системы: налов, файл-сервер домена, шлюз в Интернет или просто
Service Pack и Hotfixes. Всегда необходимо иметь пакеты файл-сервер для маленькой рабочей группы.
критических обновлений на диске (таких как заплатки от
вирусов MSBlast, он же Blaster, и Lsasser). При наличии до- Контроллер домена
ступа в Интернет можно установить обновления автомати- Сделаем из нашего сервера контроллер домена. Для этого
чески. Сразу после установки необходимого Service Pack он должен быть включен в сеть и ему присвоен IP-адрес
(лучше ставить с диска, чтобы не расходовать трафик и вре- (например, 192.168.0.1, как описывалось выше). Если для
мя) и перезагрузки заходим на сайт www.windowsupdate.com экономии времени вы создаете сервер для клиента в сво-
Об этом будет рассказано позже. ей технической лаборатории, то подключать к нему кабель
Устанавливаем последний Service Pack (на момент на- своей локальной сети не следует. Однако создать на таком
писания статьи это был SP4), принимаем условия соглаше- сервере домен все равно возможно. Для этого зайдем в
ния, выбираем «Архивировать файлы» (необходимо для редактор реестра (regedit) и создадим следующий пара-
возможной отмены установки SP4). Отдыхаем 5-10 минут. метр: в ветке HKLM\System\CurrentControlSet\Services\
После окончания установки перезагружаем компьютер. Ди- Tcpip\Parameters параметр DisableDHCPMediaSense (тип
стрибутив Service Pack также скидываем в нашу папку с REG_DWORD). Его значение нужно установить в «1». Пе-
дистрибутивами. Если вы не хотите, чтобы компьютер без резагрузим компьютер. Создавать этот ключ необходимо
вашего ведома проверял наличие обновлений на сайте только если компьютер не подключен к локальной сети (се-
Microsoft, то необходимо зайти в «Панель управления», выб- тевой карте другого компьютера). Если наш сервер подклю-
рать Windows Update и снять галку «Выполнять обновле- чен к нужной сети, то данный параметр создавать не надо.
ние системы». Иначе – галку оставляем. Помните, что если Теперь поднимаем роль сервера до контроллера домена.
вы оплачиваете интернет-трафик, то галка «Скачивать и Это нужно, если нам необходимо присвоить чужому (созда-
устанавливать автоматически» может его неожиданно уве- ваемому для клиентов) серверу IP-адрес, который уже су-
личить. Теперь установим дополнительные обновления бе- ществует в сети. Такой сервер нельзя подключать к исполь-
зопасности. зуемым сетевым коммутаторам, так как это спровоцирует
Есть два способа установки этих обновлений: автома- конфликт IP-адресов в системе.
тически через Интернет или скачав и установив их само- Входим в систему с учетной записью «Администратор»
стоятельно. (или другой, обладающей полномочиями администратора).
92
образование
C:\>nslookup 192.168.0.1 На каждом клиенте регистрируемся с правами локаль-
Server: Server.firma.local ного администратора, заходим в свойства сетевого окру-
Address: 192.168.0.1 жения, выбираем свойства сетевого подключения по ло-
Name: Server.firma.local
Address: 192.168.0.1 кальной сети и редактируем свойства «Протокола Интер-
нета (TCP/IP)». Задаем всем клиентам «Получить IP-адрес
Все! Основа домена построена и остается только доба- автоматически» и «Получить адрес DNS-сервера автома-
вить пользователей и компьютеры. Для удобства автома- тически». После этого перезагружаем каждого клиента.
тизируем получение клиентами IP-адресов (очень удобно, Можно обновить параметры, и не прибегая к перезагруз-
так как не придется протоколировать, какие IP-адреса в ке, – написав в командной строке:
нашей сети уже присвоены, а какие свободны).
Обратите внимание, что по умолчанию на клиентах в ipconfig /renew
свойствах сетевой карты стоят галочки на «Регистрировать
это подключение в DNS». Они должны стоять, только если DHCP-сервер автоматически выдаст каждому клиенту IP-
вы подняли собственный DNS-сервер внутри домена и на адрес из заданного вами диапазона, а также присвоит ад-
этом сервере в созданной вами зоне разрешено динами- реса шлюза по умолчанию и DNS-сервера.
ческое обновление. У клиентов при этом в качестве DNS- Если по каким-либо причинам вы не используете DHCP-
сервера должен быть прописан только он (в нашей статье сервер или хотите присвоить одному из клиентов (напри-
описана именно такая конфигурация). Во всех остальных слу- мер, другому серверу, входящему в домен) IP-адрес вруч-
чаях эту галку надо снимать, так как клиент будет пытаться ную, задайте IP-адрес из нашего диапазона, а также шлюз
зарегистрировать себя у провайдера и выше, создавая не- по умолчанию, и обязательно(!) адрес DNS-сервера (в на-
нужный вам трафик, а провайдеру – ненужные запросы. шем примере его адрес – 192.168.0.1).
После перезагрузки вводим клиентов в домен. Для
Настройка DHCP-сервера Windows 2000/XP: правой клавишей по Мой компьютер →
Пуск → Программы → Администрирование → DHCP. В кон- Свойства → Сетевая идентификация → Свойства. Прове-
соли выделяем наш сервер (server.firma.local), который ото- ряем имя компьютера. Оно обязательно должно быть на-
бражается красной стрелочкой. Щелкаем правой клавишей писано латинскими буквами, без пробелов и спецсимволов,
мыши по нему – «Создать область». Вводим ее название, запрещенных к применению в именах клиентов. Если это
например «firma», и жмем «Далее». Вводим начальный и не так, то переименовываем и перезагружаем компьютер.
конечный диапазон IP-адресов, которые мы хотим выделить Затем ставим галочку «Является членом домена» и зада-
нашим клиентам. Например, начальный адрес – ем имя нашего домена: firma.local. Система потребует вве-
192.168.0.10 (оставляем 10 запасных адресов под серве- сти имя и пароль пользователя, имеющего право на введе-
ра), конечный адрес – 192.168.0.100 (оставляем 155 адре- ние компьютеров в домен. Вводим «Администратор» и наш
сов на случай расширения и создания еще одного сервера пароль. Через некоторое время вы увидите приглашение в
DHCP). Предлагаемую маску меняем на 255.255.255.0. Ос- домен и предложение перезагрузить компьютер.
тальное оставляем как есть. Нажимаем «Далее». Диапа- Если этого не произошло – проверьте, воткнут ли сете-
зон исключаемых адресов пропускаем. Срок аренды остав- вой кабель в сервер, в клиентский компьютер, и включены
ляем 8 дней. Соглашаемся с предложением настроить сей- ли они оба. Также необходимо проверить корректность на-
час дополнительные параметры этой области. В качестве стройки протокола TCP/IP. В командной строке даем коман-
IP-адреса маршрутизатора указываем IP-адрес нашего ду: ipconfig /all и смотрим результат. Среди выданной ин-
шлюза в Интернет (тот, что задается вручную в поле «Шлюз формации находим нужную нам – об IP-адресе, маске, шлю-
по умолчанию») или оставляем это поле пустым, если вы- зе и DNS-сервере. Она должна быть примерно такой:
хода в Интернет у нас нет. Затем задаем родительский до-
IP-адрес . . . . . . . . . . : 192.168.0.11
мен (firma.local) и адрес DNS-сервера (192.168.0.1). Поле Маска подсети . . . . . . . . . . : 255.255.255.0
«WINS-Серверы» оставляем пустым (если мы не использу- Основной шлюз . . . . . . . . . . : 192.168.0.254
DNS-серверы . . . . . . . . . . : 192.168.0.1
ем WINS-сервер для обслуживания клиентов W9x). Отве-
чаем «Да, я хочу активизировать эту область сейчас». Зак- Если в поле IP-адрес стоит что-то типа: 169.254.xxx.xxx –
рываем окно мастера. ваш клиент не смог получить от DHCP-сервера IP-адрес.
В консоли DHCP опять кликаем правой клавишей по на- Проверяйте работоспособность DHCP-сервера и физичес-
шему серверу и выбираем «Авторизовать». Ждем несколько кой сети (проводов). Если же все нормально, то проверяем
минут и нажимаем <F5> (обновить). Стрелочка на нашем настройку DNS-сервера, как описано выше, в разделе DNS-
сервере должна стать зеленой. Если этого не произошло – сервер. Если проблемы есть, первым делом проверьте, не
закройте консоль DHCP, затем через несколько минут от- остановлены ли на сервере службы DHCP и DNS (некото-
кройте заново и нажмите <F5>. Стрелка должна поменять рые любят «улучшать параметры», удаляя или останавли-
цвет на зеленый. Настройка DHCP-сервера закончена. При- вая неизвестные им службы). После введения клиента в
ступим к настройке клиентов. домен и перезагрузки в окне входа выбираем «Дополни-
тельно» и меняем <Имя компьютера> (этот компьютер) на
Настройка клиентов название нашего домена (FIRMA). После чего вводим имя
Подразумевается, что на всех клиентах установлены опе- пользователя и пароль и входим в систему. Пользователей
рационные системы Windows 2000 и выше. необходимо завести на контроллере домена.
94
подписка на I полугодие 2005
Российская Федерация ! Узбекистан – по каталогу «Davriy nashrlar» российские
! Подписной индекс: 81655 издания через агентство по распространению печати
Каталог агентства «Роспечать» «Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик,
! Подписной индекс: 87836 5/3, офис 33)
Объединенный каталог «Пресса России» ! Азербайджан – по объединенному каталогу российских
Адресный каталог «Подписка за рабочим столом» изданий через предприятие по распространению печа-
Адресный каталог «Библиотечный каталог» ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
! Альтернативные подписные агентства: ! Армения – по списку номенклатуры «АРЗИ» через ГЗАО
Агентство «Интер-Почта» (095) 500-00-60, курьерская «Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2)
доставка по Москве и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарья-
Агентство «Вся Пресса» (095) 787-34-47 на, 22)
Агентство «Курьер-Прессервис» ! Грузия – по списку номенклатуры «АРЗИ» через АО
! Подписка On-line «Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29)
http://www.arzy.ru и АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)
http://www.gazety.ru ! Молдавия – по каталогу через ГП «Пошта Молдавей»
http://www.presscafe.ru (МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)
по списку через ГУП «Почта Приднестровья» (МD-3300,
СНГ г.Тирасполь, ул.Ленина, 17)
В странах СНГ подписка принимается в почтовых отделе- по прайслисту через ООО Агентство «Editil Periodice»
ниях по национальным каталогам или по списку номенкла- (2012, г.Кишинев, бул. Штефан чел Маре, 134)
туры АРЗИ: ! Подписка для Украины:
! Казахстан – по каталогу «Российская Пресса» через Киевский главпочтамп
ОАО «Казпочта» и ЗАО «Евразия пресс» Подписное агентство «KSS»
! Беларусь – по каталогу изданий стран СНГ через РГО Телефон/факс (044)464-0220
«Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)
Подписные
индексы:
81655
по каталогу
агентства
«Роспечать»
87836
по каталогу
агентства
«Пресса
России»
РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Редактор Заметки о Linare Пакетный фильтр
Андрей Бешков «Заметки о Linare» открывают цикл OpenBSD
статей, посвященных настольным ди- В статье пойдет речь о возможностях
РЕКЛАМНАЯ СЛУЖБА стрибутивам Linux. Вопрос об исполь- и особенностях настройки пакетного
тел./факс: (095) 928-8253 зовании Linux на клиентских местах об- фильтра Packet Filter (PF), входящего
Константин Меделян суждается сейчас очень широко – со- в стандартный дистрибутив системы
reсlama@samag.ru здается такое впечатление, что каждое OpenBSD, начиная с версии 3.0.
уважающее себя аналитическое агент-
Верстка и оформление ство считает своим долгом подготовить Создание сценария
imposer@samag.ru исследование, дающее исчерпываю- регистрации пользователей
maker_up@samag.ru щий ответ на вопрос, когда Windows в сети
Дизайн обложки окончательно сдаст свои позиции, В предыдущих статьях я рассказывал о
Николай Петрочук сколько это будет стоить и случится ли том, как автоматизировать различные
вообще. Не отстают и гиганты индуст- процессы в сети. Решение поставлен-
103045, г. Москва, рии: «тяжеловесы» вроде Novell и Sun ной задачи нетривиально и состоит из
Ананьевский переулок, дом 4/2 стр. 1 Microsystems выпускают собственные нескольких частей. Одной из них явля-
тел./факс: (095) 928-8253 разработки с обязательной приставкой ется сценарий регистрации пользовате-
Е-mail: info@samag.ru «Desktop». Мы же, в свою очередь, по- лей в сети. По своему характеру она
Internet: www.samag.ru пробуем рассмотреть этот феномен с носила концептуальный характер, одна-
позиций конечного пользователя. Чем ко на форуме журнала читатели дали
РУКОВОДИТЕЛЬ ПРОЕКТА настольный Linux отличается от своих понять, что концепция – это хорошо, но
Петр Положевец «ненастольных» аналогов? Как ведет необходимо привести конкретный при-
себя в работе тот или иной дистрибу- мер. Пришла пора сложить недостаю-
УЧРЕДИТЕЛИ тив, можно ли использовать его для щие кусочки мозаики в одно целое и
Владимир Положевец решения определенного кргуа задач? подробно рассказать о теоретических
Александр Михалев Вот те вопросы, на которые мы попы- и практических аспектах его создания
таемся дать ответ. и особенностях внедрения.
ИЗДАТЕЛЬ
ЗАО «Издательский дом
«Учительская газета» Вы можете приобретать журналы в магазинах
и торговых точках г. Москвы по адресам:
Отпечатано типографией
ГП «Московская Типография №13» ! Магазин «Компьютерная и деловая книга» (Ленинский проспект, строение 38).
Тираж 7000 экз. ! Выставочный компьютерный центр «Савеловский» (Киоск у главного входа).
! Выставочный компьютерный центр «Буденовский».
Журнал зарегистрирован ! Книжная ярмарка «Центральная». Mагазин «Деловая и учебная литерату-
в Министерстве РФ по делам печати, ра» (м. Тульская, Варшавское шоссе, д.9. эт. 5, павильон 515-09).
телерадиовещания и средств мас- ! ТЦ «Электроника на Пресне». Mагазин «Техкнига» (павильон 8-9).
совых коммуникаций (свидетельство ! Редакция «Учительская газета» (Ананьевский переулок, д. 4/2, стр. 1).
ПИ № 77-12542 от 24 апреля 2002г.)
On-line магазины:
За содержание статьи ответствен-
ность несет автор. За содержание ! www.allsoft.ru Уважаемые читатели!
рекламного обьявления ответствен- ! www.linuxcenter.ru
ность несет рекламодатель. Все пра- ! www.linuxshop.ru НЕ ПРОПУСТИТЕ ПОДПИСКУ
ва на опубликованные материалы за- ! www.bolero.ru на первое полугодие 2005 года
щищены. Редакция оставляет за со- подробная информация на стр. 95
бой право изменять содержание сле-
дующих номеров.
96