Вы находитесь на странице: 1из 98

№8(33) август 2005

подписной индекс 81655


www.samag.ru

Сможет ли PC-BSD
конкурировать
с Linux-дистрибутивами?
Оцените WrSpy!
Считаем трафик почтовых
и прокси-серверов
Настраиваем DSPAM –
ваш личный спам-фильтр
Проводим аудит системы
с помощью SNARE
Упрощаем управление
Asterisk-сервером
Asterisk-сервером
OpenMosix – превратим сеть
в единый суперкомпьютер!
CD, не подвластный
копированию
№8(33) август 2005

Админские сказки
16 bit edition
Так видит журнал читатель, который забыл оформить подписку:

СЬ

И
ИЛ
ЛИ
ТЯ Е
ЗА ДНИ

Ж П
НУ

РА КУ
ЛЫ ГО

ТИ РАС
КУ ВО

РО
НИ НО

СТ
БЫ
КА

И
ЬГ
ЬД О
РА СКА
ТЕ
К

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

РА Е О

КО ЕО
АВ СЛ
Л

Л
ХА

ЗА Н
ПО
УЕ
Так видит журнал читатель, оформивший подписку:

ПОДПИШИТЕСЬ И ЧИТАЙТЕ!
Роспечать – 81655
Пресса России – 87836
Интер-почта – тел. (095) 500-00-60
оглавление
2 РЕПОРТАЖ БЕЗОПАСНОСТЬ
3 ТЕНДЕНЦИИ 60 Проводим аудит системы
с помощью SNARE
АДМИНИСТРИРОВАНИЕ Полноценный контроль за системными событиями.
Сергей Яремчук
6 Сможет ли PC-BSD конкурировать grinder@ua.fm
с Linux-дистрибутивами?
Обзор настольного дистрибутива PC-BSD, основан- 64 CD, не подвластный копированию
ного на FreeBSD. Сергей Супрунов Список популярных ошибок в механизмах защиты
amsand@rambler.ru CD от копирования, рекомендации по их устране-
нию, а также готовый алгоритм защиты.
10 Asterisk и Linux: миссия IP-телефония Крис Касперски
Действие 3 kk@sendmail.ru
Рассматриваем несколько веб-интерфейсов, значи-
тельно облегчающих работу пользователей и адми- ПРОГРАММИРОВАНИЕ
нистраторов Asterisk. Михаил Платов
platov@cs.vsu.ru 72 Контролируем и ограничиваем
системные вызовы с помощью
20 Создаем систему учета systrace
исходящих телефонных звонков Как всегда быть в курсе того, что происходит в ва-
Готовое решение на примере УАТС LG GDK-162. шей системе? Александр Байрак
Денис Соколов x01mer@pisem.net
box1739@yandex.ru
HARDWARE
24 Настраиваем DSPAM – ваш личный
спам-фильтр 76 Используем LinuxBIOS на системах
Основанная на алгоритмах статистического анали- VIA EPIA-M
за, самообучающаяся система DSPAM существенно Вдохнем жизнь в barebone-систему на базе EPIA-M
упростит жизнь пользователю, выполняя за него ра- и технологии LinuxBIOS. Антон Борисов
боту по сортировке входящей корреспонденции. a.borisov@tesv.tmb.ru
Сергей Супрунов
amsand@rambler.ru WEB
36 WrSpy – считаем и контролируем 82 Совершенствуем технологию CMS
трафик почтовых и прокси-серверов Возможности проекта Habitat 2.0.
Оцените возможности бесплатной программы WrSpy Алексей Моисеев
для контроля за интернет-трафиком ваших пользо- tsaralex@alpe.ru
вателей. Роман Марков
stepan-razin@newmail.ru БИЗНЕС-РЕШЕНИЯ В IT
42 Знакомимся с HPC-кластером 86 IT в сфере ресторанно-гостиничного
OpenMosix бизнеса
Превратим сеть в единый суперкомпьютер! Обзор программных и аппаратных продуктов, позво-
Антон Борисов ляющих эффективно управлять современными гос-
a.borisov@tesv.tmb.ru тиничными комплексами. Кирилл Тихонов
aka_shaman@mail.ru
48 Управляем удаленными базами AIDE
Требуется оснастить все сервера программой конт- СКАЗКИ
роля от вторжений – AIDE. Но сервера территориаль-
но разбросаны, а хотелось бы хранить базы AIDE на 88 Админские сказки. 16 bit edition
съемных носителях. Как собрать данные со всех ком- Совершенно выдуманные истории, рассказанные
пьютеров, не вставая с места? Рашид Ачилов без какой-нибудь видимой цели или морали, и да-
shelton@granch.ru же не ко сну. Алексей Барабанов
alekseybb@mail.ru
54 SAP+MySQL=MaxDB
Обзор возможностей MaxDB – СУБД, базирующей- 93 КНИЖНАЯ ПОЛКА
ся на исходном коде SAP DB. Кирилл Сухов
geol@altertech.ru 75, 85, 94 BUGTRAQ
№8, август 2005 1
репортаж

ИТОГИ CHAOS CONSTRUCTIONS 2005


20-21 сентября в Санкт-Петербурге традиционно прошла demo-party Chaos Construction.
Я бы обозначил это событие как фестиваль компьютерного искусства.

М
ероприятие происходило в здании Ленинградского что поспать особо не удалось. Утром за нами прибыл ав-
дворца молодежи. В одном месте собирались твор- тобус, и мы отправились на второй день мероприятия. Про-
ческие личности: программисты, художники, музы- грамма этого дня была не менее насыщенной по сравне-
канты, аниматоры. нию с первым днем.
Одновременно с CC’05 в том же зале проходила выстав-
ка retro-компьютеров.

Посетители и участники съехались со всего бывшего Союза


Программа мероприятий была очень насыщенной [1].
Основные представленные работы были для PC и ZX
Spectrum, к сожалению, работ для Amiga было не очень
много. На фестивале царила чрезвычайно дружественная и Выставка retro-компьютеров
располагающая к общению атмосфера. Люди знакомились, В этом году было представлено около 15 различных экс-
обсуждали показанные работы и строили новые планы. понатов. За каждым компьютером можно было самому по-
сидеть, поработать. Большинство владельцев были непо-
далеку и с радостью отвечали на все вопросы.
После завершения всех конкурсов и подсчета голо-
сов состоялось торжественное вручение дипломов побе-
дителям.

Игра StarWars for ZX Spectrum by Newart


После показа каждой работы зрители выставляли
свою оценку, занося ее в специальный блокнот. После по-
каза всех работ одного конкурса листок с выставленными
оценками надлежало поместить в «урну для голосования». Вручение дипломов
По завершении второго дня demo-party, исходя из этих дан- Само собой, после официального завершения CC’05 бы-
ных, были объявлены итоги. ло и неофициальное. Два дня пролетели просто незаметно,
По окончании первого дня желающие (предварительно полученных впечатлений хватит до следующего года.
оплатив) могли отправиться на hidden-party, которая про-
ходила неподалеку от Ломоносова (Ораниенбаум) – приго- Ссылки:
рода Санкт-Петербурга, на территории пионерского лаге- 1. http://cc5.org.ru/index.php?uid=pubgrafik.
ря. По замыслу организаторов на hidden-party люди могли 2. Результаты: http://cc5.org.ru/index.php?uid=vote_result.
пообщаться в более неформальной обстановке, обсудить 3. Работы участников: ftp://ftp.cc5.org.ru/pub/2005.
первый день CC’5 и отдохнуть. После ужина началось «про-
должение банкета». Очень запомнился поход ночью к Фин- Александр Байрак
скому заливу и выступление музыкантов ChipCult. Жаль, Фото Евгения Давыдова

2
тенденции
Novell привлекает сторонних
Linux-разработчиков
В первой половине августа американская компания анон-
сировала и запустила инициативу OpenSuse, «открыв» раз-
работку своего ключевого Linux-продукта – дистрибути-
ва SUSE. Проект OpenSuse, по своей сути напоминающий
Fedora Project, поддерживаемый Red Hat, прямым конку-
рентом Novell, доступен на веб-сайте www.opensuse.org, где
вскоре и были опубликованы бета-релизы свободной версии
SUSE Linux 10.0. По словам Грега Манкузи-Унгаро, директо-
ра по маркетингу ОС Linux и Open Source в Novell, компания
таким образом рассчитывает привлечь большее число сто-
ронних разработчиков, новых пользователей и в конечном
счете получить более значимую долю на Linux-рынке.

«Жесткий» real-time в Linux


Специалистам из MontaVista Software удалось добиться ре-
ализации поддержки режима «жесткого реального време-
ни» (hard real-time) в Linux намного раньше, чем планиро-
валось, – это позволит операционной системе реагировать
на прерывания с высоким приоритетом за короткий, фикси-
рованный промежуток времени. Разработчики MontaVista,
пользовавшиеся и трудами сторонних Linux-программистов,
смогли снизить показатель задержки до 98 микросекунд,
что приблизительно в 100 раз лучше, чем позволяет обыч-
ное Linux-ядро версии 2.6.10. «Мы сделали это на два квар-
тала раньше, чем планировалось по графику», – заметил
Педер Уландер, вице-президент по маркетингу MontaVista.
Вскоре становится известно о взаимном сотрудничестве
MontaVista и PalmSource.

Создана Mozilla Corporation


Mozilla Foundation (MF) объявила о формировании нового
подразделения, которое поможет распространению своих
программных продуктов, – Mozilla Corporation. По словам
Mozilla, целью организации стоит дальнейшая популяри-
зация браузера Firefox, которая требует появления плат-
ных услуг по поддержке. Mozilla Corporation, что призвана
решить эту проблему, возглавила Митчелл Бэйкер, руко-
водящая и MF. Как она отметила в телефонном интервью,
новая корпорация будет прибыльной, однако ее целью ста-
нет реализация задач MF. «Наша фундаментальная цель –
продвижение открытого Интернета», – заявила она, доба-
вив, что нельзя игнорировать тот факт, что «Firefox стал
ценным активом». ИТ-аналитики (среди них специалисты
из RedMonk и Forrester Research) быстро отреагировали на
данное известие, одобрив создание Mozilla Corporation, что,
по их мнению, является вполне логичным шагом.

Новая акция раздачи дисков


с Open Source
Тысячи учеников средних школ Франции (провинции
Овернь) по возвращении к учебе в сентябре получат ком-
пакт-диски со свободным и открытым программным обес-
печением. По проекту, спонсируемому местным правитель-
ством, ученикам будет выдано 64 000 2-дисковых комп-
лектов с популярным FOSS. На первом CD представле-
но свободное программное обеспечение для ОС Microsoft
Windows и Apple Mac OS X, среди которого OpenOffice.org,

№8, август 2005 3


тенденции
Mozilla Firefox и GIMP, а второй диск – LiveCD на базе Kaella
(французской разновидности KNOPPIX). Любой желающий
сможет ознакомиться с миром Linux без потребности в ус-
тановке системы на жесткий диск.

Открыты исходники Quake 3


Выступая на QuakeCon 2005, Джон Кармак сообщил, что
после некоторых задержек id Software все-таки приготови-
ла к релизу все исходные коды популярной игры «Quake III:
Arena» под свободной лицензией GNU GPL. И 19 августа на
FTP-сайте компании появляется долгожданный архив с ис-
ходниками Quake3 1.32b. Кроме того, Кармак выразил за-
интересованность в том, чтобы кто-нибудь воспользовался
этим кодом для завершения работы над своим 3D-шутером
и продавал получившуюся игру с полным исходным кодом
на CD. Он добавил, что испытывает разочарование из-за
людей, слишком обеспокоенных защитой своего кода, боль-
шая часть которого основана на чужих разработках.

В среде Xen запущена ОС Windows


Компания XenSource сообщила об успешном запуске опе-
рационной системы Microsoft Windows (XP SP2) в среде
Xen, что стало важным шагом на пути к коммерциализа-
ции открытой виртуальной машины. Программное обеспе-
чение Xen, предназначенное для запуска множества опе-
рационных систем на одном компьютере, ранее обычно
использовалось в связке с Linux, однако сложно переоце-
нить важность возможности запуска и широко используе-
мой ОС Windows.
Составил Дмитрий Шурупов
по материалам www.nixp.ru

Началась работа над PHP 6.0


9 августа 2005 года в среде разработчиков PHP произошло
знаковое событие: CVS HEAD был отделен в ветку PHP 5.1,
после чего HEAD стал PHP 6.0.0. Пока в качестве основного
нововведения в PHP 6.0.0 планируется поддержка Unicode
(см. PHP Unicode support design document – http://news.php.
net/php.internals/17771). Вполне возможно, что будут и дру-
гие значительные изменения в лучшую сторону. Ветка 5.0
скорее всего не будет поддерживаться, ветка 5.1 становит-
ся стабильной и замораживается полностью вплоть до ре-
лиза, после чего в неё тоже будут допускаться только баг-
фиксы и другие незначительные изменения. «Девелопер-
ской» теперь становится ветка 6.0, и все новые разработ-
ки будут реализовываться именно здесь.
12 августа, отец-основатель PHP, Расмус Лендорф
(Rasmus Lerdorf), выступил со списком пожеланий к новой
версии языка (http://beeblex.com/lists/index.php/php.internals/
17883). В обсуждаемых сейчас PHP-сообществом девяти те-
зисах содержатся предложения по избавлению языка от та-
ких функций и настроек, как register_globals и magic_quotes,
удалению функций помеченных ещё в PHP 4 как deprecated
и т. д. В то же время Лендорф предлагает включить в базо-
вую поставку PHP кэширование байт-кода и новое расши-
рение для фильтрации входных данных. Обсуждение бу-
дущего языка возможно по адресу: http://beeblex.com/lists/
index.php/php.internals/17883.
Кирилл Сухов

4
конкурс

IT-ACADEMY 2005
НОВАЯ АКЦИЯ
ДЛЯ МОЛОДЫХ СПЕЦИАЛИСТОВ
Еще не закончился «Кубок сетевых проектов Microsoft», технические материалы с которого
мы планируем опубликовать в последующих номерах, как те же организаторы – компании
Microsoft, Softline и ZyXEL объявили о начале новой акции. Как и в прошлый раз, акция
проводится для молодежи – школьников, студентов, аспирантов и молодых специалистов
(недавних выпускников вузов), но теперь ее география расширилась – она проходит
в нескольких городах России: Москве, Томске, Омске, Воронеже и Самаре.

П
олное название акции – «Моло- бом из тестов не менее 60 процентов Почему во втором этапе нужно сна-
дежный чемпионат IT-Academy правильных ответов. Участники второ- чала пройти платный курс и только
2005». Несмотря на слово «чем- го этапа должны пройти специальный потом сдавать проверочный тест на
пионат», акция не имеет ничего общего 12-часовой курс «Построение IT-инфра- усвоение материала. Можно ли сда-
с турнирами для программистов и дру- структуры предприятия на основе про- вать тест без курса?
гими соревнованиями, в которых мо- дуктов Microsoft» стоимостью 599 руб- Нам кажется, что проверять началь-
гут участвовать только очень опытные лей. Курс рассматривает ОС Windows ную техническую подготовку участ-
специалисты. Наоборот, чтобы при- XP и Windows Server 2003, Групповую ника не очень логично. В самом деле,
нять участие в IT-Academy 2005 доста- политику и серверные продукты MS если человек и так все знает, зачем
точно лишь иметь общее представле- Exchange Server 2003 и MS ISA Server ему дополнительное обучение? На-
ние о том, чем занимаются компании 2004. В каждом городе по результатам ша идея – предоставить возможность
Microsoft и ZyXEL. обучения определится тройка побе- пройти обучение и сертифицировать-
Акция состоит из двух этапов, и у дителей, которые и смогут бесплатно ся тем людям, которые хотят и могут
каждого этапа свои призы. На первом пройти профессиональное обучение. эффективно учиться новому, незави-
этапе нужно сдать на сайте http://www. Акция показалась нам интересной, симо от их начального уровня знаний.
it-academy.ru бесплатный онлайн-тест и мы решили задать несколько вопро- Поэтому, чтобы поставить всех в рав-
Microsoft или ZyXEL. Задачей теста не сов организаторам. На наши вопросы ные условия, мы сначала обучаем, а
является проверка технических зна- отвечает директор по развитию реги- только потом тестируем. Что касает-
ний участника. Вместо этого тест про- ональных образовательных проектов ся платности курса, то цена установ-
веряет общее знакомство с компани- SoftLine Андрей Степанов. лена чисто символическая и даже ес-
ей, ее историей, новостями и продукта- ли не рассматривать возможность вы-
ми/услугами. С учетом того, что все от- В чем идея акции? игрыша, курс более чем оправдывает
веты можно найти в Интернете, сдача Мы хотели поощрить активных и лю- свою стоимость.
теста не выглядит особо сложной за- бознательных молодых людей, кото-
дачей. Главный приз в каждом городе рые знают или хотят узнать больше
получит тот, кто сдаст тест раньше и об IT-компаниях, а также серьезно за-
лучше всех. Среди остальных участ- думываются о повышении своего про-
ников будут разыграны по лотерее два фессионализма и получении междуна-
дополнительных приза. родных сертификатов.
Второй этап не является обязатель-
ным, но если есть желание побороться Как будут отбираться победители
за бесплатное обучение на несколь- второго этапа?
ких авторизованных курсах Microsoft Во время курса и сразу после его окон-
по программе MS IT Academy и за меж- чания будет проводиться тестирование
дународный сертификат Профессиона- усвоения материала. Те студенты, ко- Главный приз от компании ZyXEL –
802.11g+ беспроводной модем ADSL2+
ла Microsoft (MCP), то предваритель- торые покажут лучшие результаты, с 2-портовым шлюзом VoIP и 4-портовым
ным условием является набор на лю- и станут победителями. коммутатором P-2602HW EE

№8, август 2005 5


администрирование

СМОЖЕТ ЛИ PC-BSD КОНКУРИРОВАТЬ


С Linux-ДИСТРИБУТИВАМИ?

Новые дистрибутивы Linux появляются, как грибы после дождя. Фанаты же BSD по большей
части вынуждены собирать свои десктопы вручную. Однако появилась пара дистрибутивов,
основанных на FreeBSD, одному из которых и посвящается эта статья.

СЕРГЕЙ СУПРУНОВ

М
ы рассмотрим дистрибутив PC-BSD. В руки мне по- тинка (рис. 1), которая позволит воспользоваться различ-
палась версия 0.7.8, основанная на FreeBSD 5.4- ными режимами загрузки в случае проблем.
RELEASE #2. Сейчас, когда я пишу эти строки, ве- Далее, перед переходом в графический режим, будет
дутся работы над версией 0.8, и не исключено, что к момен- выведено еще одно текстовое окно, предоставляющее
ту выхода журнала актуальной будет уже она. Тем не ме- еще несколько путей для преодоления возможных трудно-
нее основные свои черты дистрибутив должен сохранить, стей, например, вы сможете загрузиться в режим команд-
так что продолжим. ной оболочки (рис. 2).
Инсталлятор потребует некоторого знания английского
Процесс установки языка (можно надеяться, что в следующих релизах появит-
Инсталляция, снабженная удобным графическим интер- ся и русский), однако для человека, в общих чертах пред-
фейсом, прошла без каких-либо эксцессов. При загрузке с ставляющего себе установку операционной системы, ни-
диска вас встретит знакомая пользователям FreeBSD кар- каких сложностей возникнуть не должно.

6
администрирование
Итак, после приветствия и нескольких общих фраз
(рис. 3) вам будет предложено выбрать место на имею-
щихся у вас дисках, куда вы хотели бы выполнить уста-
новку (рис. 4).
Если отметить опцию «Customize DiskLabel», то вы по-
лучите возможность разбить выбранный слайс на подраз-
делы по своему желанию (рис. 5). Иначе будет выполне-
на нехитрая автоматическая разбивка, на мой взгляд, не
совсем оптимальная – 999 Мб будет занято под Swap, ос-
тальное место – под корневой раздел. При таком распре-
делении слайса резко возрастает риск повредить систе-
му при аварийном завершении работы. Учитывая, что ка-
Рисунок 1. Стандартное меню загрузчика BSD
чество электросети в нашей стране по-прежнему остав-
ляет желать лучшего, а ИБП дома – роскошь, вероятность
неприятностей становится еще выше. Хотя файловая сис-
тема FreeBSD достаточно устойчива к сбоям, все же луч-
ше потратить несколько минут и указать более удачное
разбиение, выделив, по крайней мере, отдельные разде-
лы для /usr и /var. Кроме того, подобное разбиение позво-
лит более гибко оптимизировать работу ФС в зависимос-
ти от решаемых задач, например, включив асинхронный
режим работы для /var.
Далее инсталлятор поинтересуется, желаете вы устано-
вить загрузчик BSD или нет. После чего начнется процесс
копирования файлов, который займет минут 15-20. (Кста-
ти, если во время копирования ваш экран вдруг станет чер- Рисунок 2. Окно выбора режима работы
ным, не пугайтесь – это screen-saver.) В конце вам нужно бу- На рабочем столе не будет видно иконок быстрого мон-
дет ввести пароль суперпользователя, а также заполнить тирования CD и жестких дисков. Они размещены под икон-
данные непривилегированного пользователя, от имени ко- кой «Computer» и далее – «Drives». Там же можно найти и не-
торого вы будете в дальнейшем работать в системе. Здесь что вроде «Сетевого окружения» для Samba. Монтирование-
же вы сможете отметить, хотите ли входить в систему ав- размонтирование дисков выполнялось легко, что называет-
томатически (опция «Autologon»). Теперь со спокойной со- ся, парой кликов (рис. 6). Подключение разделов NTFS тоже
вестью можно перезагрузиться. возможно, но только на чтение. Кстати говоря, для непри-
вилегированного пользователя и FAT будет доступна толь-
Про маленькую проблему ко для чтения – писать туда по умолчанию может лишь root.
Упомяну здесь про интересное поведение дистрибутива, И еще, что бросилось в глаза, – в папке автомонтирования
когда я попытался его поставить на свой домашний ком- были предложены только диски, размещенные на основных
пьютер с отключенным Primary Master-диском (был подклю- разделах. Логический диск с FAT32, который у меня находит-
чен только Slave). Сперва он не нашел никакие диски во- ся на дополнительном разделе, обнаружен не был.
обще, но после нажатия кнопки «Обновить» в окне выбора Среди имеющихся приложений можно найти несколько
диска предложил поставить систему на неизвестно откуда простых текстовых редакторов (Kate, KWrite), средства для
взявшийся BSD-раздел размером около 2 Гб. просмотра графики, PDF, аудиоплейер, десятка два обыч-
Когда я ради интереса согласился и продолжил установ- ных для KDE игрушек.
ку, PC-BSD 15 минут честно копировал свои файлы в нику- Для работы в Интернете к вашим услугам браузер
да, сопровождая это сообщениями «Failed to create dir…», не Konqueror, почтовый клиент KMail, менеджер закачек KGet.
прерывая тем не менее работы. После перезагрузки, естес- Столь популярный ныне Firefox в дистрибутив не попал, так
твенно, ничего установленного найдено не было. же как и старушка Mozilla.
Таким образом, прежде чем начинать установку, убеди- Ни исходных кодов, ни дерева портов в дистрибутиве
тесь, что в системе есть диск Primary Master (саму установ- нет, так что вам придется добывать их самостоятельно, ес-
ку не обязательно выполнять на него). ли возникнет необходимость пересобрать ядро или устано-
вить какой-нибудь пакет. Впрочем, для работы с приложе-
Первые впечатления ниями PC-BSD предлагает собственное решение.
При загрузке в свежеустановленную систему вы сразу по-
падете в KDE. Все довольно стандартно, однако в дистри- Установка дополнительных приложений
бутивах Linux я уже успел привыкнуть к кнопке вызова тер- Еще на этапе инсталляции вы можете встретить подсказ-
минала, размещенной непосредственно на панели инстру- ку, что при желании вы можете закачать себе дерево пор-
ментов или, по крайней мере, в главном меню KDE. Здесь тов простой командой:
же пришлось добираться до нее через несколько вложен-
ных меню. # cvsup /root/ports-supÞle

№8, август 2005 7


администрирование

Рисунок 3. Начинаем инсталляцию PC-BSD Рисунок 4. Диалог выбора раздела для установки

Рисунок 5. Разбиваем слайс на подразделы Рисунок 6. Инструмент автомонтирования дисков

Рисунок 7. Установка Firefox из pbi-пакета Рисунок 8. Рабочее окно KPackage

Но разработчики PC-BSD предлагают другое реше- ляторах. Как будто вы ставите msi-приложение в системе
ние – пакеты pbi. Скачать их можно с сайта http://www.pcbsd. Windows.
org, однако на данный момент выбор не очень богатый – Установленные таким образом приложения можно бу-
чуть больше 50. Зато это наиболее востребованное ПО – дет найти в PC-BSD Package Manager (рис. 7). Из этого же
OpenOffice, Firefox, Opera, Thunderbird, GIMP, ClamAV и др. окна лишнее можно и удалить.
Так вот достаточно скачать себе pbi-файл, и одним щел- Ну и помимо данного способа вы можете воспользо-
чком мыши вы получите у себя готовое к работе приложе- ваться более традиционным менеджером пакетов KPackage
ние. Не нужно заботиться ни о зависимостях, ни о компи- (рис. 8) либо использовать коллекцию портов традицион-

8
администрирование

Рисунок 9. KDE Control Center. Keyboard layout Рисунок 10. Настройка сети вручную

ным способом, выполнив предварительно указанную вы- языка – огромный минус, однако можно надеяться, что в сле-
ше команду. дующих версиях ситуация изменится в лучшую сторону.
Опытному пользователю, конечно же, будет не хватать
Поддержка русского языка коллекции портов и исходных кодов, но, потратив пару со-
Вот чего нет, того нет. Конечно, вы можете выбрать рус- тен мегабайт трафика, можно легко привести систему в при-
скую раскладку клавиатуры в KDE Control Center (рис. 9), вычное состояние.
и это позволит вам набирать тексты в простых редакто- Таким образом, PC-BSD – хорошая отправная точка
рах типа Kate на родном языке (используется кодиров- для установки FreeBSD на свой домашний или рабочий
ка Unicode). Однако, установив тот же OpenOffice как pbi- компьютер, хотя по сравнению с большинством дистрибу-
пакет, вы обнаружите полное отсутствие кириллических тивов Linux этот дистрибутив пока еще заметно отстает и
шрифтов. Так что придется предварительно потрудиться требует доводки «напильником». Впрочем, это можно объ-
над русификацией. яснить его молодостью.

Поддержка сети
Естественно, сеть дистрибутивом поддерживается в пол-
ном объеме. Но, как это ни печально, графической утилиты
для ее настройки я не нашел. Поэтому придется восполь-
зоваться старым добрым консольным способом (рис. 10).
Кстати, обратите внимание, что ipfw по умолчанию вклю-
чен как открытый. То есть он будет пропускать все пакеты,
что выглядит не очень правильным решением. Работать с
правилами ipfw также придется вручную.

Средства разработки
В самом дистрибутиве помимо C-компилятора (куда же без
него) можно найти Perl 5.8.7, Python 2.4.1, Ruby 1.8.2. Таким
образом, у вас есть достаточно инструментов, чтобы сде-
лать свою работу простой и комфортной. При необходи-
мости вы можете установить KDevelop или Quanta из упо-
мянутых ранее pbi-пакетов либо же воспользоваться сис-
темой портов, предварительно скачав себе свежее дере-
во коллекции.

Выносим вердикт
Если смотреть на дистрибутив PC-BSD глазами начинающе-
го пользователя, то при минимуме усилий вы получите уже
настроенную графическую среду с некоторыми инструмен-
тами и возможностью в дальнейшем сосредоточиться на ус-
тановке нужного ПО. Недостаточное количество прекомпи-
лированых пакетов рано или поздно заставит разбираться с
портами, хотя и без них можно собрать вполне работоспособ-
ную систему. Отсутствие полноценной поддержки русского

№8, август 2005 9


администрирование

ASTERISK И LINUX: МИССИЯ IP-ТЕЛЕФОНИЯ


ДЕЙСТВИЕ 3

Соединив нашу мини-АТС с «городом» [1], мы уже получили привлекательное решение,


способное обеспечить связью сотрудников небольшого офиса. Но не будем останавливаться
на достигнутом – рассмотрим несколько веб-интерфейсов, значительно облегчающих работу
как пользователей, так и администраторов Asterisk.

МИХАИЛ ПЛАТОВ
Послушаем почту? +--------- Asterisk Web Voicemail ----------+
Как вы помните, для проверки голосовой почты в нашем + +
+ Asterisk Web Voicemail is installed in +
номерном плане есть специальный номер – 8500. Позво- + your cgi-bin directory. IT USES A SETUID +
нив на него и введя личный пароль, наши пользователи мог- + ROOT PERL SCRIPT, SO IF YOU DON'T LIKE +
ли прослушать оставленные им сообщения. Правда, иног- + THAT, UNINSTALL IT! +
+ +
да такой способ доступа бывает несколько неудобен (на- +-------------------------------------------+
пример, вы находитесь в другом городе или просто под ру-
кой нет телефона). Для решения этой проблемы можно от- Если использование setuid вас устраивает, проигно-
сылать записанные сообщения на e-mail (см. [2]) или орга- рируйте это сообщение и перейдите к следующему шагу.
низовать централизованный доступ через Интернет с ис- В противном случае вы можете воспользоваться специаль-
пользованием безопасного SSL-соединения. Отрадно то, ным патчем для Asterisk, описанным в [3].
что в состав стандартного дистрибутива Asterisk веб-ин- Отредактируем файл скрипта vmail.cgi, определив сле-
терфейс для работы с голосовой почтой уже входит, прос- дующее значение для контекста по умолчанию:
то в целях безопасности автоматически он не устанавли-
вается. Что, впрочем, не мешает нам сделать это самосто- context="ofÞce"
ятельно. Для работы данного интерфейса необходим веб-
сервер apache с пакетом perl-suid. Краткости ради будем Откроем ваш любимый браузер и введем URL только
считать, что эти пакеты у нас уже установлены и работают, что установленного интерфейса (в моем случае это будет
а веб-сервер сконфигурирован так, что cgi-bin расположен http://ast-test/cgi-bin/vmail.cgi). Если все было сделано пра-
в /var/www/cgi-bin, и cgi-скрипты, входящие в стандартную вильно, то мы увидим следующее (см. рис. 1).
поставку, выполняются без проблем. Итак, перейдем в ка- Введя имя пользователя (номер телефона) и пароль, мы
талог /usr/src/asterisk и выполним команду make webvmail. попадем в папку «Входящие» нашего ящика (см. рис. 2).
Программа make скопирует все необходимые файлы и вы- Пользователей linux-систем придется немного расстро-
даст следующее предупреждение: ить – воспроизведение в браузере через плагин (кнопка

10
администрирование
play) скорее всего не заработает, и для прослушивания со-
общений придется загружать файлы на компьютер (кнопка
download), а вот с Windows все нормально (см. рис. 3).
При организации работы из Интернета рекомендуется
ограничить доступ к странице средствами веб-сервера, а
также настроить использование SSL (https://) для безопас-
ной передачи паролей.

Виртуальный «круглый стол»


Возможности современных систем телефонии не ограничи- Рисунок 1. Окно входа веб-интерфейса системы
голосовой почты
ваются ведением разговоров между двумя абонентами. С
помощью специального режима – конференц-связь – воз-
можно организовать одновременное общение нескольких
человек. Системы разного «калибра» отличаются макси-
мально допустимым количеством конференций, а также
числом участников в них. И если в недорогих офисных ми-
ни-АТС количество собеседников, как правило, невели-
ко (не больше 8-10 человек), то в Asterisk их максималь-
ное число ограничивается лишь аппаратными возможнос-
тями используемого сервера. Существует как минимум 3
известных модуля, предоставляющих возможности конфе-
ренций для Asterisk:
! MeetMe
! Conference
! MeetMe2

MeetMe является исторически первым приложением,


предоставившим возможности конференций. Модуль яв- Рисунок 2. «Входящие» сообщения голосовой почты
ляется достаточно функциональным и позволяет решать
широкий класс задач. Несмотря на то что MeetMe входит в
стандартную поставку Asterisk, для его работы необходи-
мы высокоточные таймеры, присутствующие в аппаратуре
Digium. Модуль conference же, напротив, не требует нали-
чия zaptel-устройств, однако он предоставляет несколько
меньшую функциональность. Отличительной особенностью
conference является более эффективное использование ре-
сурсов сервера, что позволяет обеспечивать одновремен-
ную работу большего числа пользователей. MeetMe2 яв-
ляется переработанной версией MeetMe. Наиболее значи-
мые отличия – хранение конфигурации в СУБД и несколь-
ко другие возможности управления.
Все модули имеют схожую схему использования. Пос-
ле звонка по определенному номеру абонент попадает
в «виртуальную комнату». Как только в «комнате» окажут-
ся хотя бы два участника, начнется разговор. В конферен- Рисунок 3. Прослушивание сообщения голосовой почты
циях существует 3 типа пользователей: «слушатели», «ора- uhci) и 2.6.x. Откроем Makefile библиотеки zaptel и уберем
торы» и «администраторы». «Слушатели» лишены права комментарий (символ «#») перед ztdummy. Для zaptel 1.0.9
голоса, «ораторы» могут не только слушать, но и разго- это строка 61. После этого пересоберем библиотеку (make
варивать. На «администраторов» возлагаются обязаннос- & make install) и попробуем загрузить модуль ztdummy:
ти управления – изменение статуса, удаление и добавле-
ние пользователей, открытие и закрытие «комнаты» и т. д. # modpobe ztdummy
Основы работы с конференциями рассмотрим на приме-
ре модуля MeetMe. Убедимся, что у нас это получилось:
Как было сказано выше, для работы MeetMe необходи-
мы высокоточные таймеры, присутствующие в оборудова- # lsmod |grep ztdummy
нии Digium. Если же никаких плат в машине с Asterisk нет, ztdummy 3620 0
не расстраивайтесь, есть несколько способов программной zaptel 225732 1 ztdummy

эмуляции таймеров! Одним из них мы сейчас и воспользу- Настроим автоматическую загрузку модуля, добавив
емся. Этот способ применим для ядер 2.4.x (с модулем usb_ соответствующую запись в стартовые скрипты системы

№8, август 2005 11


администрирование
(в случае Gentoo это будет строка в одном из файлов внут- [general]
enabled = yes
ри /etc/modules.autoload.d). После этого можно смело при- port = 5038
ступать к настройке конференций. bindaddr = 127.0.0.1
Определим «место встречи» (conference room) пользо- [webmm]
вателей. Для этого в файл /etc/asterisk/meetme.conf доба- secret = webmmpw
permit=127.0.0.1
вим следующее: read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user
[rooms]
conf=> 400
С конфигурационными файлами теперь все нормаль-
Этим мы создали «комнату» с номером 400. Теперь сде- но, а вот с самими PHP-скриптами не очень. Дело в том,
лаем в ней «дверь». Для этого в файл extensions.conf доба- что web-meetme написан с учетом того, что переменная
вим следующие строки: PHP RegisterGlobals определена как «On». Из соображе-
ний безопасности, начиная с PHP-4.2.0, значение по умол-
[confs] чанию для этой переменной – Off. Поэтому, для того что-
exten => 400 , 1, Meetme, 400
[ofÞce] бы скрипты заработали, необходимо либо поменять зна-
include=> confs чение RegisterGlobals в файле php.ini, либо модифициро-
вать файл conf_control.php, добавив в его начале следую-
Перезапустите Asterisk и позвоните на номер 400 со щие строки:
всех телефонов. Пользователи попадут в общую «комнату»
№400 и смогут одновременно общаться друг с другом. getpost _ ifset(array('confno'));
getpost _ ifset(array('action'));
Кроме статического описания «комнат» конфереций getpost _ ifset(array('user _ id'));
(пример, который мы только что рассмотрели), MeetMe так-
же может создавать их динамически. В этом случае чело- Кроме того, для нормальной работы с версией Aster-
век, открывающий «комнату», определяет для нее соответс- isk 1.0.9 мне пришлось закомментировать строку 113 (вы-
твующий пароль доступа. После этого он сообщает номер зов break) в файле conf_control.php.
комнаты и пароль остальным участникам, и они начинают Если интерфейс установился нормально, то в браузере
обсуждение. А любители подслушивать телефонные разго- мы увидим следующее (см. рис. 4).
воры в это время злобно грызут ногти и кусают локти.
Реализовать эту возможность на практике можно с по- Системный телефон
мощью следующей конструкции номерного плана: Неотъемлемым атрибутом любой мини-АТС является сис-
темный телефон. С его помощью оператор может полностью
[confs-dynamic] контролировать состояние мини-АТС (какие линии в данный
exten => 500, 1,MeetMe(|MD)
[ofÞce] момент свободны, какие заняты и т. д.). Более функциональ-
include => confs-dynamic ным аналогом системного телефона для Asterisk является
Flash Operator Panel. C помощью FOP можно переключать
Теперь сделаем еще один шаг в сторону «идеального сер- и завершать звонки, просматривать запаркованные вызо-
вера» и установим веб-интерфейс для управления конферен- вы, следить и управлять конференц-комнатами, да и прос-
циями. С его помощью можно легко и просто подключать и то наблюдать за тем, что происходит с Asterisk.
отключать участников, давать и отбирать «право» голоса, да С точки зрения администратора, FOP является кли-
и вообще – просто наблюдать за тем, что происходит в наших ент-серверным приложением. В качестве клиента высту-
«комнатах». Для работы с интерфейсом нам так же, как и с пает flash-приложение, выполняемое в любом из популяр-
голосовой почтой, понадобится веб-сервер, только теперь с ных браузеров (IE, Opera, Mozilla/Firefox). Серверная часть
интерпретатором PHP. Будем считать, что все это у нас име- представлена perl-скриптом, в реальном времени получа-
ется, поэтому без промедлений приступим к установке. ющим от Asterisk информацию о совершаемых в нем дейс-
Первым делом скачаем с [12] архив с Web-MeetMe и рас- твиях. На момент написания этих строк последняя доступ-
пакуем его в Apache_DocumentRoot/meetme. Зайдем в ка-
талог phpagi и скопируем файл phpagi.example.conf в /etc/
asterisk/phpagi.conf. Внесем в этот файл некоторые изме-
нения:

server=127.0.0.1
port=5038
username=webmm
secret=webmmpw

Данное приложение для свой работы использует ко-


мандный интерфейс управления Asterisk (Asterisk Manager
Interface – AMI). В целях безопасности по умолчанию он от-
ключен, нам же потребуется его включить. Для этого отре-
дактируем файл /etc/asterisk/manager.conf: Рисунок 4. Интерфейс управления конференциями

12
администрирование

№8, август 2005 13


администрирование
ная версия FOP – .22 (см. рис. 5). Домашняя страница про-
екта – [4].
При работе с Asterisk FOP также использует Asterisk
Manager Interface. Таким образом, первое, что нам нужно
будет сделать, – добавить в файл manager.conf соответс-
твующую разрешающую запись:
Рисунок 5. Структура Flash Operator Panel
[fop _ user] «комнат», которые будут использоваться для реализации
secret = superfopsecret
deny=0.0.0.0/0.0.0.0 этой возможности. Кроме того, на панели FOP можно груп-
permit=127.0.0.1/255.255.255.0 пировать кнопки по контекстам. Для этого перед ними необ-
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user ходимо написать имя соответствующего контекста.
Параметры визуализации (клиентская часть) задаются в
Теперь перейдем к FOP. Настройки серверной части за- файле op_buttons. Синтаксис его достаточно прост. Сначала
даются в файле op_server.cfg. Наиболее значимыми для нас описываются кнопки, отвечающие за абонентов Asterisk:
параметрами являются:
[SIP/200] ; имя абонента
Position=1 ; номер кнопки на консоли
manager _ host=127.0.0.1 Label="Vasya" ; надпись на кнопке
manager _ user=fop _ user Extension=200 ; номер абонента
manager _ secret=superfopsecret Context=ofÞce ; контекст, в котором
; определен абонент
Этим мы указали perl-серверу, где и как нужно искать Mailbox=200@ofÞce ; ящик голосовой почты пользователя
Icon=1 ; номер иконки для данного
Asterisk. К слову, с помощью FOP можно отслеживать состо- ; пользователя (то 1 до 6)
яние несколько серверов Asterisk. В этом случае надо про-
дублировать эти строки необходимое количество раз, задав Чтобы не определять настройки для каждого пользова-
в них соответствующие параметры других серверов. теля вручную, можно задать общее описание с использо-
ванием регулярного выражения:
ßash _ dir=/var/www/html/fop
web _ hostname=ast-test [ _ SIP/.*]
security _ code=fop _ pwd Position=n ; использовать следующий
poll _ voice _ mail=1 ; незанятый номер
Label="SIP Users"
Extension=-1 ; на эту кнопку перенаправлять
Первой строкой мы задали местоположение файлов ; звонки нельзя
панели. Второй – имя, по которому к серверу будут обра- Context=generic _ inc
Icon=2
щаться клиенты (это необходимо для того чтобы FOP пра-
вильно формировал URL в процессе своей работы). Пара- Для отображения состояния места парковки восполь-
метр security_code назначает пароль, который необходимо зуемся следующим:
будет вводить для выполнения действий (переключение,
завершение звонков). Четвертый параметр говорит сер- [PARK701]
Position=n
веру о том, что ему следует периодически самостоятельно Icon=3
проверять состояние голосовых ящиков (без использова- Extension=700
Label="Park 701"
ния AMI). Данный параметр необходим в случаях, если для
доступа к почте используется веб-интерфейс. Следующие А вот так опишем «комнату» конференций:
настройки касаются работы с конференциями:
[400]
Position=n
conference _ context=confs Label="Meetme 400"
barge _ rooms=400 Extension=400
barge _ muted=1 Context=confs
Icon=6
Первая строка тривиальна – контекст номерного пла-
на, содержащий внутренний номер для доступа к конфе- Следующие строки покажут нам состояние внешней
ренции. zaptel-линии:
А вот на последних двух остановимся более подробно.
Дело в том, что с помощью fop можно «собирать» людей в [Zap/1]
Position=10
конференции. Третий параметр очень полезен в тех ситу- Label="External 1"
ациях, когда оператору необходимо прослушать разговор Extension=-1
Icon=2
других абонентов. При значении «1» у пользователей, до-
бавляемых FOP к конференции, будет «отключены микро- Для большего удобства на панели можно нарисовать
фоны», таким образом можно незаметно подключать учас- разделяющие прямоугольники и вспомогательные подпи-
тников к конференции или организовывать прослушивание си. Сделать это можно, отредактировав файл, отвечающий
разговоров оператором. При необходимости «микрофон» за визуальное представление – op_style.cfg.
можно включить, воспользовавшись все тем же веб-интер- В качестве последнего штриха настроим автоматичес-
фейсом. Строкой barge_rooms мы определяем те номера кий запуск perl-сервера при старте системы. Для этого мож-

14
администрирование
но воспользоваться одним из готовых скриптов, входящих
в состав дистрибутива (есть скрипты для Debian и Redhat)
или просто прописать вызов op_server.pl (или safe_opserver)
в стартовых скриптах вашего дистрибутива.

Единый центр управления


Как вы могли заметить, настраивая Asterisk, мы редакти-
ровали те или иные конфигурационные файлы. Некоторым
такой способ администрирования может показаться не-
сколько неудобным. В таком случае рекомендую посмот-
реть в сторону Asterisk Management Portal. AMP представ- Рисунок 6. Связь AMP и Asterisk
ляет собой веб-приложение, позволяющее управлять на- характер работы данного приложения, не имеет смысла
стройками Asterisk с помощью популярного веб-браузера. придерживаться уже созданной нами конфигурации. По-
Для лучшего понимания его работы обратимся к следую- этому при настройке Asterisk с использованием AMP бу-
щей схеме (см. рис. 6). дем считать, что перед нами вновь лежит «чистый лист».
Управление производится следующим образом: пос- Итак, возьмем клавиатуру в руки и отправимся навстречу
редством веб-интерфейса администратор редактирует базу к нашей цели!
данных, задавая в ней необходимые параметры (добавле-
ние/удаление пользователя, смена пароля, изменение пра- Устанавливаем AMP
вил маршрутизации и т. д.). Затем, по информации, храни- Для установки портала нам понадобятся все компоненты
мой в этой базе, веб-сервер обновляет конфигурационные популярной платформы LAMP – Linux, Apache, MySQL и PHP
файлы Asterisk и с помощью AMI сообщает серверу о том, (последний должен быть скомпилирован с поддержкой nls).
что настройки необходимо применить заново. Кроме того, Кроме того, нам также потребуются PHP-PEAR-DB, интер-
используя дополнительный модуль (веб-интерфейс, для ко- претатор perl, а также perl-модули: Net::Telnet, IPC:Signal и
торого также входит в состав AMP), Asterisk помещает ин- Proc:WaitStat.
формацию о всех совершенных звонках непосредственно Первые установим с помощью средств, имеющихся
в MySQL, что открывает дополнительные возможности для в распоряжении вашего дистрибутива, а для вторых вос-
анализа исходящего голосового трафика организации. пользуемся репозитарием CPAN:
После некоторого практического изучения данного про-
дукта сложилось впечатление, что больше всего AMP под- # perl -MCPAN -e "install Net::Telnet"
# perl -MCPAN -e "install IPC::Signal"
ходит для 2 групп пользователей: # perl -MCPAN -e "install Proc::WaitStat"
! Начинающие пользователи, имеющие лишь общее пред-
ставление об Asterisk. Помимо этого нам потребуется добавить поддержку perl
! Администраторы, уже имеющие опыт работы с Asterisk, к самому Asterisk. Для этого установим модуль asterisk-perl,
без труда разбирающиеся в его конфигурационных предварительно загрузив его с [6].
файлах и желающие упростить выполнение некоторых На этом подготовительные действия завершены, и мы
наиболее типичных задач. можем смело приступить к установке самого AMP. По уже
сложившейся традиции, воспользуемся последней стабиль-
Для первой группы пользователей AMP позволит на- ной версией, доступной на момент написания этих строк –
строить наиболее популярные вещи, не вдаваясь при этом 1.10.008. Загрузим и распакуем tarball с файлами проек-
в дебри конфигурационных файлов с их многочисленными та в удобное для нас место. Для определенности пусть это
и зачастую непонятными параметрами. Для данной катего- будет /usr/src:
рии самым сложным этапом является правильная установ-
ка портала. Впрочем, эта проблема легко решается приме- # cd /usr/src
# wget http://citkit.dl.sourceforge.net/sourceforge/ ↵
нением специализированных дистрибутивов, уже имеющих amportal/AMP-1.10.008.tar.gz
в своем составе все необходимое, в том числе и AMP. На- # tar xfz ./AMP-1.10.008.tar
иболее известный из них – Asterisk@Home [5].
Для второй категории пользователей AMP является Создадим две базы данных в MySQL. В первой будет
мощным средством, позволяющим в короткие сроки по- храниться служебная информация AMP, во второй – инфор-
лучить законченное и достаточно функциональное реше- мация о совершенных пользователями звонках.
ние на базе Asterisk. Причем здесь AMP выступает не как
полный отказ от ручного редактирования конфигурацион- # mysqladmin create asterisk -p
ных файлов (как это было в первом случае), а скорее как Enter password: <пароль root-пользователя MySQL>
удобное дополнение к ним (например, стандартные вещи # mysql-u root asterisk -p < usr/src/AMP/SQL/newinstall.sql
делаются в портале, а нестандартные – путем custom-ко-
манд AMP или непосредственным редактированием кон- Первая база создана. Теперь дадим пользователю
фигурационных файлов). Asterisk необходимые права доступа:
На этом позвольте закончить описание теоритеское и
перейти к практическому рассмотрению AMP. Учитывая # mysql -u root -p

№8, август 2005 15


администрирование
Enter password: <пароль root-пользователя MySQL> /usr/sbin/asterisk -U asterisk
mysql> GRANT ALL PRIVILEGES
-> ON asterisk.*
-> TO auser@localhost
Убедимся, что автозапуск op_server.pl настроен и сам сер-
-> IDENTIFIED BY 'p0rtalpwd'; вер запущен. Если все было сделано правильно, то, открыв
Query OK, 0 rows affected (0.00 sec) http://имя_машины, мы увидим следующее (см. рис. 7).
mysql> \q

Создадим вторую базу: Настройка AMP


С интерфейсом голосовой почты мы уже знакомы, поэтому
# mysqladmin create asteriskcdrdb –p без лишних проволочек перейдем в основной раздел управ-
Enter password: <пароль root-пользователя MySQL> ления, щелкнув по ссылке «Asterisk Management Portal».
# mysql -u root asterisk -p < ↵ Перед нами предстанут три раздела меню: настройка
usr/src/AMP/SQL/cdr _ mysql _ table.sql (Setup), отчеты (Reports) и панель FOP. Как следует из на-
Enter password: <пароль root-пользователя MySQL>
звания, для конфигурации системы используется Setup. Воз-
mysql> GRANT ALL PRIVILEGES можные действия в этом разделе перечислены в меню слева.
-> ON asteriskcdrdb.* Первым делом перейдем в подраздел Extensions и создадим
-> TO auser@localhost
-> IDENTIFIED BY 'p0rtalpwd'; несколько учетных записей пользователей (см. рис. 8).
Query OK, 0 rows affected (0.00 sec) При настройках по умолчанию (и с уставленным zaptel-
mysql> \q
оборудованием) сразу же после добавления пользователей
Теперь установим модуль регистрации звонков cdr_ и применения конфигурации уже можно совершать звонки,
mysql, входящий в состав пакета asterisk-addons.: в том числе и с использованием ZAP-каналов через пре-
фикс 7. Правда, скорее всего нам предварительно потребу-
# wget http://www.asterisk.org/html/downloads/ ↵ ется немного подправить настройки zaptel для учета специ-
asterisk-addons-1.0.9.tar.gz
# tar xfz ./asterisk-addons-1.0.9.tar.gz фики отечественных АТС, но, учитывая наш опыт из [1], это
# cd ./asterisk-addons-1.0.9 вряд ли вызовет у нас какие либо серьезные трудности.
В Makefile добавим следующую запись (строка 21): Для настройки междугородней IP-телефонии необхо-
димо создать транки (способ описания точек терминации
CFLAGS+=DMYSQL _ LOGUNIQUEID внешнего по отношению к Asterisk трафика) и добавить со-
ответствующие правила маршрутизации (раздел Outbound
И завершим инсталляцию модулей, выполнив команды: Routing). Формат этих правил во многом совпадает с тем,
что мы определяли в текстовых файлах, поэтому практи-
# make && make install ческое рассмотрение данной возможности мы оставим для
самостоятельного изучения. Благо с использованием кон-
Стандартная схема установки AMP предполагает, что текстных подсказок веб-интерфейса этот процесс не явля-
Asterisk и веб-сервер должны выполняться одним пользо- ется очень сложным.
вателем: В разделе Ring Groups мы несколькими движениями
мышки можем объединить абонентов в единую группу вы-
# groupadd asterisk зова. Кроме того, также имеется возможность задать аль-
# useradd -c "asterisk PBX" -d /var/lib/asterisk -u ↵
5060 –g asterisk asterisk тернативное поведение системы для случаев, когда ни один
из абонентов группы не доступен (см. рис. 9).
Настроим запуск веб-сервера от пользователя Asterisk. В Incoming Calls определяются правила обработки звон-
Для этого в конфигурационном файле apache напишем: ков, приходящих с ZAP-каналов. Стандартной функцио-
нальностью коробочного номерного плана AMP является
Userasterisk возможность определения различных правил маршрутиза-
Groupasterisk
ции для рабочего и нерабочего времени. При этом в качес-
Теперь установим файлы самого AMP. Для этого запус- тве адресатов могут выступать группы вызова, системы го-
тим соответствующий установочный скрипт (учтите, что лосовых меню, очереди или обычные абоненты.
после его выполнения существующие файлы конфигура-
ции Asterisk будут замещены, поэтому при необходимости
не забудьте сделать резервные копии):

# /usr/src/AMP/install _ amp

В интерактивном режиме скрипт выведает у нас все не-


обходимые имена, явки и пароли (попутно сохранив их для
потомков в /etc/amportal.conf), скопирует все необходимые
файлы и проинициализирует базу данных MySQL. Настро-
им работу asterisk с использованием учетной записи обыч-
ного пользователя. Для этого в стартовом скрипте Asterisk
используем конструкцию следующего вида: Рисунок 7. Стартовая страница AMP

16
администрирование

Рисунок 8. Создание абонентов в AMP Рисунок 9. Группы вызовов абонентов

Рисунок 10. Модуль отчетов AMP Рисунок 11. Интерфейс Flash Operator Panel
Для остальных разделов конфигурации ограничимся ! On Hold Music – в этом подразделе мы можем загру-
кратким описанием их назначения. зить на сервер дополнительные мелодии для музыки
! Queues – здесь определяются параметры очередей и при ожидании.
агентов. Более подробно эти параметры будут рассмот- ! System Recording – с помощью этого пункта меню мож-
рены в одном из следующих номеров журнала. но добавлять (или записывать) в Asterisk дополнитель-
! Digital Receptionist – автосекретать. С помощью этого ные звуковые сообщения, которые впоследствии могут
пункта можно быстро создать голосовое меню. Напри- быть использованы в голосовых меню.
мер, запишем такой текст: «Здравствуйте! Вы позвони- ! Backup & Restore – как следует из названия, с помощью
ли в СамуюЛучшуюКомпанию. Для соединения с ком- данного раздела можно резервировать и восстанавли-
мерческим отделом нажмите 1. Технический отдел – 2. вать конфигурацию Asterisk-сервера. Для работы этой
Бухгалтерия – 3 и т. д.» Затем с помощью того же мас- функции необходимо добавить в crontab выполнение со-
тера создадим правила маршрутизации для этого ме- держимого /etc/asterisk/backup.conf.
ню, перенаправляющие пользователей в соответству- ! General Settings – в этом пункте определяются некото-
ющие отделы (в общем случае правила могут не соот- рые системные параметры AMP – время дозвона до або-
ветствовать текстовому сообщению). И, наконец, назна- нента перед перенаправлением к голосовой почте, па-
чим созданное меню для входящих звонков в подраз- раметры работы с каталогом пользователей и настрой-
деле Incoming Calls. Этим самым мы значительно сни- ки обработки входящих факсов.
зим нагрузку на нашего секретаря, освободив его вре-
мя для более интересной работы. Более менее разобравшись с имеющимися возможнос-
! DID Routes – маршруты прямого вызова. С помощью тями настройки, остановимся на модуле отчетов. С его по-
данной функции можно напрямую позвонить внутрен- мощью администратор может не только получить деталь-
нему абоненту/агенту/группе вызова Asterisk с исполь- ную информацию за любой интересующий его период вре-
зованием механизма DID (при этом DID также должен мени, но и просмотреть статистическую информацию о за-
поддерживаться городской телефонной станцией). грузке сервера в течение дня или на протяжении месяца.

№8, август 2005 17


администрирование

Лирическое отступление зуем протокол UDP, не предоставляю- больше похож на использование T.38
о факсах щий гарантий доставки пакетов). Ес- вместо обычного кодека (факсовые
Как вы могли заметить, один из раз- ли вдобавок еще и взглянуть на пер- данные упаковываются в обычные
делов меню AMP посвящен настройке вую строчку таблицы в [8], то мы уви- RTP-пакеты). Проще говоря, подде-
приема факсов в Asterisk, однако в ста- дим, что при передаче факса через ржка в прокси-серверах первых двух
тье об этой возможности не было ска- Интернет нам потребуется канал с ре- протоколов требует дополнительных
зано ни единого слова. Причиной тому альной пропускной способностью око- усилий от разработчиков, в то время
является текущий уровень реализации ло 80 кБит, что, согласитесь, уже не- как для третьего варианта достаточ-
поддержки работы с факсами в систе- мало. По этим и другим причинам для но поддержки в конечных устройствах.
мах IP-телефонии в целом и в Asterisk передачи факсов через голосовые се- К тому же ситуация усугубляется тем,
в частности. Давайте рассмотрим эту ти все чаще стараются использовать что зачастую производители голосово-
проблему более внимательно. T.38. Данный протокол был разрабо- го оборудования если и реализуют под-
На самом верхнем уровне можно тан организацией ITU-T специально держку T.38 в своих устройствах, то ог-
выделить два основных способа пере- для передачи факсов в VoIP-сетях. раничиваются лишь одним из вариан-
дачи факсимильных сообщений в сис- Механизм работы устройств, подде- тов реализации (чаще первым), со все-
темах IP-телефонии: рживающих данный протокол, следу- ми вытекающими отсюда несовмести-
! Поверх существующего голосово- ющий – при обнаружении голосовым мостями и проблемами.
го кодека. шлюзом сигналов факса он пытается Что же касается Asterisk, то на дан-
! С использованием протокола T.38. установить дополнительное соедине- ный момент он абсолютно точно не
ние с другим шлюзом (благо и H323 и поддерживает два первых варианта
Первый способ фактически пред- SIP это позволяют), но уже с исполь- использования T.38 (заметьте, это вов-
ставляет собой обычный факс, под- зованием T.38. Благодаря использова- се не означает, что такая поддержка
ключенный к голосовому шлюзу, на- нию помехоустойчивого кодирования, невозможна в принципе). С третьим
пример с интерфейсом FXS. При этом, а также протокола с гарантией достав- способом ситуация комичнее – до на-
если мы хотим передать факс, мы на- ки – TCP с использованием T.38 мож- стоящего времени ни одного устройс-
бираем нужный нам номер, пытаем- но получить практически идеальное тва, использующего T.38 поверх RTP,
ся установить соединение с аппара- качество передачи факсов. Правда, сообществом разработчиков Asterisk
том на другой стороне и т. д. А теперь и для этой ложки меда имеется своя обнаружено не было, поэтому инфор-
вопрос на засыпку: «Помните ли вы, бочка дегтя – поддержка протокола мации о его практической работоспо-
как работает модем? А как он работа- T.38 в существующих на сегодняш- собности нет. Таким образом, реаль-
ет на очень плохих или «старых» ли- ний день устройствах все еще остав- ная поддержка передачи факсимиль-
ниях?» Факс, обработанный одним из ляет желать лучшего. Дело в том, что ных сообщений в Asterisk на данный
голосовых кодеков с сильным сжати- согласно стандартам, на данный мо- момент возможна только с использо-
ем (GSM, G723, G729), будет работать мент существует 3 (!) различных спо- ванием кодека G711, причем наиболее
еще хуже, вернее, скорее всего он не соба передачи факсов с использова- предпочтительна следующая схема:
будет работать вообще. С кодеками, нием T.38: входящий факс-сервер, работающий
не использующими сильное сжатие с ! Поверх протокола UDP. поверх G711 c использованием zaptel-
потерями (в Asterisk это G711 в вариан- ! Поверх протокола TCP. устройств Asterisk.
тах a-law и u-law), ситуация будет луч- ! Передача в RTP-пакетах. В завершение упомянем и другой
ше. При этом качество передачи фак- взгляд на эту проблему. А нужна ли во-
сов во многом будет зависеть от ре- Первые два способа фактически обще передача факсов в VoIP-сетях?
ального состояния IP-канала (потери, представляют собой специализиро- Если IP-инфраструктура уже сущес-
джиттер, задержка) между абонента- ванные протоколы для передачи фак- твует, то не проще ли в данном слу-
ми (ведь на самом деле мы переда- сов (протоколы IFP/udptl и IFP/TCP со- чае использовать что-то другое, на-
ем «голос», следовательно, исполь- ответственно), в то время как третий пример e-mail?

Поддерживается выгрузка отчетных данных в формате pdf от необходимости лишний раз редактировать файлы кон-
и csv (см. рис. 10). фигурации.
Давайте более подробно остановимся на графическом
Интерфейс панели управления интерфейсе. Как уже говорилось выше, клиентская часть
Третьим разделом интерфейса управления является уже FOP разработана с использованием Macromedia Flash. Это не
знакомая нам Flash Operator Panel. В состав последней вер- могло не оставить отпечатка на характере работы с визуаль-
сии AMP входит несколько устаревшая версия FOP (20 про- ным интерфейсом. Все действия с абонентами производятся
тив 22 на сайте разработчика). Правда, некоторой компен- либо с помощью двойного щелчка мыши, либо методом «drag
сацией за это является интеграция AMP и FOP при установ- and drop». Так, для того чтобы принудительно завершить се-
ке «из коробки». анс пользователя, необходимо нажать на «1» (см. рис. 11),
Так, добавляя нового пользователя в AMP, запись о а для того чтобы соединить двух абонентов, – перетащить
нем автоматически появляется и в FOP, что избавляет нас значок телефона на кнопку вызываемого абонента.

18
администрирование

AMP мини-FAQ Asterisk начинает запускаться, но, дойдя до загрузки


Страница FOP «зависает» при открытии. В чем может zap-устройств, процесс внезапно завершается.
быть причина? Проверьте, что модули ядра zaptel и wcfxo загружены и
Убедитесь, что серверный perl-скрипт запущен. устройства проинициализировались без ошибок (lsmod,
dmesg).
При работе с веб-интерфейсом выдаются сообщения Или проверьте, что файл /etc/asterisk/zaptel.conf сущест-
об ошибках записи. вует и в нем правильно заданы параметры устройств.
Возможно, установлены неверные права доступа к файлам
конфигурации Asterisk. Для автоматического исправления Не показываются (или показываются неверно) сообще-
запустите скрипт apply_conf.sh из дистрибутива AMP. ния голосовой почты через веб-интерфейс.
Убедитесь, что пользователь веб-сервера имеет доступ
При работе с интерфейсом выдается сообщение об к файлам голосовой почты (/var/spool/asterisk/voicemail).
ошибке соединения с manager.
Неверно сконфигурирован (или отключен) интерфейс уп- Добавил пользователей, но в FOP они не появились.
равления Asterisk. Проверьте содержимое файлов /etc/ В чем может быть дело?
asterisk.manager.conf и /etc/amportal.conf. Необходимо перезапустить op_server.pl

К сожалению, текущая реализация совместной работы FOP ! Возможные проблемы с масштабируемостью (как следс-
и Asterisk не лишена недостатков. Так, в варианте «из короб- твие из предыдущего).
ки» FOP не видит стандартных конференций AMP. Для реше- ! Отсутствие управления параметрами MeetMe через веб-
ния этой проблемы воспользуемся нашими знаниями о струк- интерфейс.
туре конфигурационных файлов. Первым делом в файле op_ ! Отсутствие встроенной системы безопасности.
server.cfg в качестве контекста для конференций укажем ext- ! Достаточно сложная структура номерного плана (осо-
meetme, для параметра barge_roooms выберем одно из стан- бенно для начинающих пользователей).
дартных для AMP значений, например 8200, и опишем соот- ! Шероховатости в интеграции с FOP.
ветствующие кнопки в файле op_buttons_custom.cfg согласно ! Отсутствие русского интерфейса меню.
инструкции, приведенной выше для FOP. После этого переза- ! Проблемы совместимости между номерным планом
пустим perl-сервер, обновим страницу интерфейса клиента и и аппаратным голосовым оборудованием (некоторые
порадуемся, увидев в нем кнопки, соответствующие MeetMe. шлюзы не могут корректно набирать символы «#,*» кото-
Теперь с помощью веб-интерфейса мы можем «собирать» лю- рые очень активно используются в номерном плане).
дей в виртуальных «комнатах» для проведения совместных об-
суждений (drag-and-drop на картинку конференции), а также При всем этом, несмотря на указанные недостатки,
подключаться к уже идущим разговорам. (правда, для неза- Asterisk Management Portal, безусловно, можно считать од-
метной работы последнего, возможно, потребуется более тон- ним из лучших веб-интерфейсов для Asterisk. Проект очень
ко настроить работу модуля MeetMe). С отображением состоя- активно развивается, и вполне возможно, что многие из пе-
ния парковочных мест можно поступить аналогично. речисленных недочетов будут исправлены в следующей
версии. При этом не стоит забывать, что AMP полностью
Заключение открыт и вы сами можете принять непосредственное учас-
В заключение давайте еще раз кратко рассмотрим сильные тие в его дальнейшем развитии. Ну а если разработка веб-
и слабые стороны AMP. Итак, преимущества: приложений вам не близка, а AMP вам просто понравился
! Возможность редактирования параметров Asterisk че- как пользователю, не забудьте сделать donation на офици-
рез веб-интерфейс. альном сайте проекта [7].
! Возможность получения информации о совершенных
звонках. Литература, ссылки:
! Быстрое создание голосовых меню. 1. Платов М. Asterisk и Linux – миссия IP-телефония. Дейс-
! Возможности автосекретаря. твие 2. – Журнал «Системный администратор», №7,
! Использование «транков». 2005 г. – 32-38 c.
! Определение правил маршрутизации . 2. Платов М. Asterisk и Linux – миссия IP-телефония. –
! Загрузка мелодий для «музыки при ожидании». Журнал «Системный администратор», №6, 2005 г. –
! Определение групп вызова. 12-19 c.
3. http://www.voip-info.org/tiki-index.php?page=Asterisk+gui+
Но, как известно, у каждой медали есть и вторая сторо- vmail.cgi.
на. У AMP она выглядит так: 4. http://www.asternic.org.
! Необходимость перезаписи конфигурационных фай- 5. http://asteriskathome.sourceforge.net.
лов. 6. http://asterisk.gnuinter.net.
! Необходимость функционирования всех ключевых ком- 7. http://sourceforge.net/projects/amportal.
понент на одном компьютере (как следствие из преды- 8. Платов М. Что важно знать об IP-телефонии. – Журнал
дущего). «Системный администратор», №5, 2005 г. – 20-25 c.

№8, август 2005 19


администрирование

СОЗДАЁМ СИСТЕМУ УЧЕТА


ИСХОДЯЩИХ ТЕЛЕФОННЫХ ЗВОНКОВ

ДЕНИС СОКОЛОВ
Сегодня мы займемся созданием системы учета исходящих телефонных звонков на примере
УАТС LG GDK-162. От вас требуется: навыки работы в UNIX-подобных операционных системах,
умение программировать на Perl и базовые знания в SQL.

Н
едавно руководство поставило задачу – необходи- Я подключился к последовательному порту УАТС при по-
мо вести учет всех исходящих телефонных звон- мощи терминальной программы и стал анализировать счи-
ков. В офисе установлена УАТС LG GDK-162 емкос- тываемые данные. Оказалось, что LG GDK-162 протоколи-
тью 48 внутренних номеров и 8 внешних линий. Различные рует свою работу в режиме реального времени, а записи об
программы тарификации имеются в избытке. Но ни одна исходящих звонках выглядят следующим образом:
меня не устроила. Большинство из них платные и написа-
1035 144 06 00:11 21/08/2005 16:21 O1234567 **
ны под Windows, из некоммерческих только SMDR 1.0 под-
держивает LG GDK-162. Рассмотрим её содержимое:
Для операционных систем Linux и FreeBSD существует ! первое поле – порядковый номер записи;
очень интересный проект ATSlog: http://www.atslog.dp.ua. ! второе – номер станции, с которой сделан вызов;
Вот описание с сайта программы: «ATSlog предоставляет ! третье – номер внешней линии;
удобный интерфейс с доступом через веб-браузер для про- ! четвертое – длительность звонка (mm:ss);
смотра и анализа звонков различных моделей мини-АТС. ! пятое – дата;
Программа бесплатная, распространяется под лицензией ! шестое – время (hh:mm);
GPL, имеет полностью открытый код. Программа успеш- ! седьмое – вызванный номер с ведущим символом O.
но работает с моделями Panasonic KX-TA308, KX-TA308RU, Седьмое поле может кроме цифр содержать символы
KX-TA616RU, KX-TD816RU, KX-TD1232; Samsung SKP-816». «#» и «*» – это происходит при звонках на голосовые
К сожалению, не нашел в списке поддерживаемых АТС шлюзы операторов IP-телефонии.
LG GDK. Для добавления поддержки нужной модели мож-
но отослать автору образцы текстовых лог-файлов. Но это Таким образом, задача учета исходящих телефонных
требует времени. Я решил попробовать справиться с зада- звонков свелась к написанию программы для считывания
чей своими силами. Это оказалось несложным. Надеюсь, журнала работы УАТС через порт RS-232, обработки и со-
что мой опыт окажется вам полезен. хранения соответствующих записей. Можно приступать к
LG GDK-162, как и большинство офисных АТС, можно реализации.
подключить к компьютеру через порт RS-232. Парамет- Исходные данные: учет будет осуществляться на маши-
ры порта: 9600 бит/с, 8 бит данных, без контроля парите- не Cel 1200/RAM 128 Мб/HDD 20 Гб, операционная систе-
та, 1 стоповый бит. ма – Debian GNU/Linux 3.1r Sarg, СУБД – PostgreSQL v. 7.4.7,
Таблица 1. Распайка кабеля (стандартный нуль-модем) УАТС подключена к последовательному порту /dev/ttyS1.
Создадим пользователя, от которого будет работать
программа и рабочий каталог. Кроме этого, изменим пра-
ва доступа к /dev/ttyS1:

# sudo useradd -d /var/gdklog -s /bin/sh gdk

20
администрирование
# sudo passwd gdk }
# sudo mkdir /var/gdklog print;
# sudo chown gdk:gdk /var/gdklog }
# sudo chown root:gdk /dev/ttyS1
# sudo chmod 640 /dev/ttyS1
Допустим, надо добавить поддержку АТС, пишущую
Создадим пользователя и базу данных в PostgreSQL: протокол в формате:

# createuser -U postgres -A -D gdk 2005-08-21 16-21-00 06 1234567 00:00:11 144


# createdb -U postgres -O gdk pbxbilling
Для этого достаточно будет дописать еще одну конструк-
Создадим таблицу gdklog для хранения статистики. Таб- цию if в функцию parse_log (кроме этого, надо не забыть
лица имеет пять полей: проверить параметры последовательного порта).
! d_time – дата и время;
! station – станция; if (/^(\d{4}\-\d{2}\-\d{2})\s+(\d{2}\-\d{2} ↵
\-\d{2})\s+(\d{2})\s+(\d+)\s+(\d{2}\:\d{2}\:\d{2})\s+
! line – внешняя линия; {
! t_call – продолжительность разговора; }
push (@log, "00 $6 $3 $5 $1 $2 $4");
! c_number – вызванный номер (я выбрал для этого поля
тип numeric, т.е. номер телефона сохраняется, как чис- Постоянно держать открытым соединение с базой дан-
ло, при этом ведущие нули усекаются, например, номер ных – не очень хорошая идея. Поэтому все строки, соответс-
01 сохранится в БД как 1). твующие регулярному выражению «/O\d/g» (журнал исходя-
щих вызовов), сначала заносятся в массив @log. Как только
# vi gdklog.sql в нем накапливается $m_cache строк – вызывается проце-
CREATE TABLE gdklog ( дура push_to_db, которая устанавливает соединение с ба-
"d _ time" timestamp, зой pbxbilling и записывает данные в таблицу gdklog:
"station" int2,
"line" int2,
"t _ call" time, # $d _ time // Дата и время
"c _ number" numeric (30, 0) # $station // Внутренний номер
); # $line // Внешняя линия
REVOKE ALL on "gdklog" from PUBLIC; # $t _ call // Продолжительность вызова
GRANT ALL on "gdklog" to "gdk"; # $date // Дата
# $time // Время
# psql -U gdk -d pbxbilling < gdklog.sql # $c _ number // Вызванный номер
my ($d _ time, $station, $line, $t _ call, $date,
$time, $c _ number, @log);
Писать программу учета я решил на perl. Полный текст
# Параметры соединения с базой данных
вы можете скачать с сайта www.samag.ru, раздел «Исходный my $base = "pbxbilling";
код». Для чтения данных из последовательного порта впол- my $user = "gdk";
my $pass = "";
не подойдут стандартные функции для работы с файлами.
Естественно, порт необходимо предварительно настроить. sub push _ to _ db
{
Для этого я использовал вызов программы sty: # Подготовка соединения
my $dbh=DBI->connect("DBI:Pg:dbname=$base",
"$user", "$pass",
my $ttys = "/dev/ttyS1"; {PrintError => 0, RaiseError => 0}
) or return 2;
# Количество строк журнала, кэшируемых в памяти # Подготовка запроса
my $m _ cache = 50; my $ins = $dbh->prepare(q{
INSERT INTO gdklog (d _ time , station, ↵
system ("/bin/stty -F $ttys 9600 cs8 -parenb -cstopb"); line, t _ call, c _ number)
VALUES (?, ?, ?, ?, ?)
# Читаем данные из последовательного порта });
open (TTYS, "< $ttys") or die "Can’t open $ttys!"; # Перебираем в цикле все сохраненные строки
while (<TTYS>) foreach my $log (@log)
{ {
parse _ log; # Разбираем строку
} (undef, $station, $line, $t _ call, $date, ↵
$time, $c _ number) = ↵
split (/\s+/, $log);
Функция parse_log – единственная в программе, специ- if (length ($t _ call) < 6)
фичная для LG GDK-162. {
$t _ call="00:$t _ call";
}
sub parse _ log $d _ time = "$date $time";
{ # Выполняем INSERT
# Если массив log содержит m _ cache строк, $ins->execute($d _ time, $station, $line, ↵
# то заносим данные в БД $t _ call, $c _ number)
if (@log >= $m _ cache) or return 2;
{ }
push _ to _ db; # Очистим массив
} undef (@log);
# Отбираем строки фиксирующие исходящие звонки $dbh->disconnect();
if (/O\d+/) return 0;
{ }
# Удаляем символы *, #, O
s/[\*,O,\#]+//g; Кроме этого, мне нужно было, чтобы программа могла
# Сохраняем полученную строку в массив log
push (@log, $ _ ); работать в режиме демона:

№8, август 2005 21


администрирование
# В режиме демона в этот файл перенаправляем все # vi /etc/init.d/gdklogd
# сообщения об ошибках
my $err _ Þle = "/var/gdklog/gdklogd.err"; #!/bin/sh
# PID-файл
my $pid _ Þle = "/var/gdklog/gdklogd.pid"; DAEMON=/usr/local/sbin/gdklogd
DAEMONFLAGS="-D"
sub begin _ daemon KILL=/bin/kill
{ PID=/var/gdklog/gdklogd.pid
# Делаем fork CAT=/bin/cat
my $pid = fork; SU=/bin/su
exit if $pid;
die "Couldn’t fork: $!" unless deÞned($pid); start ()
# Сохраняем PID в файл {
open (F _ PID, ">$pid _ Þle") or die "Can’t open ↵ echo -n $"Starting $DAEMON: "
$pid _ Þle: $!"; # Запуск с правами непривилегированного пользователя
print F _ PID "$$\n"; $SU -c "$DAEMON $DAEMONFLAGS" gdk 2>/dev/null 1>&2
close F _ PID; }
# Перенаправляем вывод STDERR в файл
open (*STDERR, ">> $err _ Þle") or die "Can’t ↵ stop ()
reopen *STDERR to $err _ Þle: $!"; {
# Перенаправляем STDIN и STDOUT в /dev/null echo -n $"Stopping $DAEMON: "
for my $handle (*STDIN, *STDOUT) $KILL `$CAT $PID` 2>/dev/null 1>&2
{ }
open ($handle, "> /dev/null") or die ↵
"Can’t reopen $handle to /dev/null: $!"; case "$1" in
} start)
# Установка sid процесса start
POSIX::setsid() ;;
or die "Can’t start a new session: $!"; stop)
} stop
;;
restart)
Чтобы обеспечить целостность данных, я установил об- stop
работчики сигналов INT и TERM. Получая один из них, про- start
;;
грамма будет пытаться немедленно записать данные в базу, *)
если это окончится неудачей (например, сервер БД отклю- echo $"Usage: $0 {start|stop|restart}"
exit 1
чен), то выполнится процедура dump_to_file, которая прос- esac
то запишет содержимое @log в текстовый файл. После это-
# sudo chown root:root /etc/init.d/gdklogd
го работа программы будет завершена. Второй обработчик # sudo chmod 700 /etc/init.d/gdklogd
добавляет возможность записи данных в базу по сигналу
HUP без выхода из программы. Запустим:

$SIG{INT} = $SIG{TERM} = sub { dump _ to _ Þle if ↵ # sudo /etc/init.d/gdklogd start


push _ to _ db; exit };
$SIG{HUP} = sub { dump _ to _ Þle if push _ to _ db };
После запуска сценария с параметром -D он переходит
Меняем владельца и права доступа: в режим демона, настраивает последовательный порт и на-
чинает считывать из него данные. При запуске без пара-
# sudo chown root:gdk /usr/local/sbin/gdklogd метра -D сценарий не отсоединяется от терминала, а запи-
# sudo chmod 750 /usr/local/sbin/gdklogd
си об исходящих звонках дублируются на экран.
Напишем стартовый сценарий: Если все сделано правильно, то через некоторое время
таблица gdklog начнет заполняться записями.

# sudo kill –HUP `cat /var/gdklog/gdklogd.pid`


# psql -c 'SELECT * FROM gdklog;' -U gdk pbxbilling

d_time | station | line | t_call | c_number


---------------------+---------+------+----------+----------
2005-08-21 16:21:00 | 144 | 6 | 00:00:11 | 1234567
(1 запись)

Вот и все. При минимуме усилий мы получили вполне


работоспособную и переносимую систему учета исходящих
звонков УАТС LG GDK-162. Работа скрипта проверялась на
Debian GNU/Linux 3.1r Sarg и FreeBSD 5.2.1 (надо изменить
только имя файла последовательного порта $ttys). Модуль
DBI позволяет использовать любую поддерживаемую им
СУБД с минимальной правкой кода, а также доступ к ба-
зе данных по сети. Для получения отчетов к нашим услу-
гам вся мощь SQL. Несложно добавить поддержку других
моделей УАТС. А при наличии свободного времени можно
написать веб-интерфейс.
Рисунок 1. Схема учета исходящих телефонных звонков Успехов!

22
администрирование

НАСТРАИВАЕМ DSPAM –
ВАШ ЛИЧНЫЙ СПАМ-ФИЛЬТР

Фильтрация почты, особенно на сервере провайдера, затруднена тем, что администратор


не может брать на себя вынесение вердикта, что доставить абоненту, а что нет.
Система DSPAM позволяет переложить принятие такого решения на пользователя.

СЕРГЕЙ СУПРУНОВ

В
одной из предыдущих статей [1] рассматривалась янии защитить от писем, идущих с новых, еще не «засве-
система защиты от нежелательной почты, – spamd, ченных», адресов. Кроме того, подобные фильтры, будучи
использующая блокировку входящих соединений на запущенными на провайдерских серверах, могут стать ис-
основе «черных» списков. Такие способы эффективны для точниками конфликтов с пользователями, адресат которых
снижения входящего почтового трафика, однако не в состо- случайно попал в тот или иной список.

24
администрирование
Сегодняшняя статья посвящена второму эшелону спам- В алгоритме, предложенном Полом Грэмом (Paul
обороны, который будем строить на базе DSPAM (разра- Graham), для расчета применяется приведенная выше ме-
ботчик Jonathan Zdziarski, www.nuclearelephant.com). Дан- тодика с использованием следующих правил:
ная обучаемая статистическая система обрабатывает со- ! Для анализа сообщений используются не все слова, а
общения, благополучно прошедшие через MTA и направ- 15 наиболее «интересных», для которых p(w) наиболее
ляющиеся в ящик пользователя. Основным ее достоинс- сильно отклоняется от нейтрального значения 0,5.
твом является возможность персональной настройки для ! Если ранее слово встречалось менее чем в пяти пись-
каждого пользователя. мах, оно игнорируется.
! Новое слово, не встречавшееся ранее, получает стар-
Как происходит классификация писем товую «спамность» 0,4 (своего рода презумпция неви-
В основе работы системы DSPAM лежит несколько наибо- новности).
лее популярных алгоритмов статистического анализа, кото-
рые, в свою очередь, опираются на теорему Байеса (Thomas Алгоритм Бартона (Brian Burton) работает аналогич-
Bayes). Формула Байеса позволяет рассчитать вероятность но, но использует для анализа не 15, а 27 наиболее ярких
наступления некоторого события в зависимости от того, ка- слов, а также допускает «удвоенное» использование сло-
кова была вероятность данного события в прошлом. Приме- ва, если оно встречается в сообщении несколько раз. Это
нительно к спаму, упрощенно принцип работы байесового несколько повышает эффективность при ограниченных
классификатора можно описать такой формулой: данных. Кроме того, поддерживаются цепочки «токенов»,
когда два стоящих рядом слова рассматриваются вместе.
P= S / (S + G) (1) Также некоторые отличия от подхода Грэма имеются в на-
боре символов, которые считаются составной частью сло-
где: ва (такие, как $, ! и т. д.).
! P – вероятность того, что сообщение окажется спа- Следующий популярный алгоритм, разработанный Гари
мом, Робинсоном (Gary Robinson), модернизирует формулу Грэ-
! S – суммарный коэффициент «спамности» сообще- ма таким образом, чтобы решить проблему недостаточных
ния, исторических данных:
! G – суммарный коэффициент «неспамности» сообще-
ния. f(w) = (0,5 + n(w) * p(w)) / (1 + n(w)) (3)

Sи G рассчитываются по следующим формулам: где :


! p(w) – вероятность для слова, рассчитанная на основе
S = p(w1)*p(w2)*…*p(wn) (2) исторических данных;
G = (1 – p(w1))*(1 – p(w2))*…*(1 – p(wn))
! n(w) – количество ранее обработанных сообщений со
Здесь p(w1) и другие – коэффициенты «спамности» отде- словом w.
льных слов, входящих в анализируемое сообщение, получен-
ные на основе ранее классифицированных писем. Так, если Таким образом, если анализируемое слово ранее не
в прошлом 9 писем со словом «английский» было спамом и встречалось, оно автоматически получит коэффициент 0,5,
одно – не спамом, то p(‘английский’) = 9 / (9 + 1) = 0.9. а по мере накопления статистики это значение будет выхо-
В качестве примера проанализируем такое короткое дить на свой естественный уровень.
сообщение: В дальнейшем в формулах (2) вместо величин p(w) ис-
пользуется f(w).
Привет! Купи меня! Для анализа по алгоритму Робинсона используется вы-
борка из 25 слов.
Пусть ранее указанные слова встречались в следую- На базе алгоритма Робинсона был разработан улучшен-
щих письмах: ный алгоритм Фишера-Робинсона, известный также как Chi-
Square (переводить на русский язык не рискну). Помимо рас-
чета «спамности» сообщения вычисляется также вероят-
ность его «неспамности» по формуле Фишера, и в дальней-
шем рассматривается интегральная вероятность.
В фильтре DSPAM реализована поддержка всех четырех
описанных здесь алгоритмов. Причем анализу подвергается
p('Привет') = 35 / (35 + 64) = 0,35 не только тело сообщения, но и заголовок. Разработчик не
p('Купи') = 187 / (187 + 19) = 0,91
p('меня') = 9 / (9 + 11) = 0,45 рекомендует совмещать фильтры Грэма и Бартона с филь-
S= 0,35 * 0,91 * 0,45 = 0,14 трами Робинсона во избежание ложных срабатываний.
G= (1 – 0,35) * (1 – 0,91) * (1 – 0,45) = 0,03
P= 0,14 / (0,14 + 0,03) = 0,82
Способы интеграции DSPAM
Таким образом, приведенный выше пример будет с ве- с почтовой системой
роятностью 82% нежелательным сообщением, в основном Система DSPAM поддерживает два способа взаимодейс-
за счет высокой спамности слова «Купи». твия с почтовым сервером. В первом случае он может быть

№8, август 2005 25


администрирование
настроен как локальный агент доставки (LDA – local delivery это существенно упростит нам жизнь при настройке CGI-кли-
agent). При этом сообщения анализируются по пути от MTA ента. Сам же демон dspam будет работать с правами root, что
к почтовому ящику. После обработки фильтром почта от- определяется второй строкой приведенного выше фрагмента
дается на обработку реальному LDA, который и заверша- (см. следующий раздел про права доступа). Если вам удоб-
ет доставку. нее работать с ключами команды make, то же самое можно
Второй способ – работа DSPAM в сотрудничестве с сделать, задав ключ DSPAM_HOME_OWNER=dspam.
POP3-proxy. При этом спам отсеивается в то время, когда После ввода команды make вам будет предложено диа-
пользователь выкачивает корреспонденцию из своего поч- логовое окно (рис. 1), в котором следует отметить необходи-
тового ящика по протоколу POP3. мые опции. Обратите внимание на то, что должен быть отме-
Подробнее настройка для работы в том или ином режи- чен только один драйвер СУБД. Также отметьте опцию «Install
ме будет рассмотрена позже. CGI (pulls in apache)», если планируете использовать CGI-мо-
дуль. Еще следует указать используемый вами MTA.
Устанавливаем DSPAM Некоторые другие полезные опции приведены ниже:
из коллекции портов ! USER_HOMEDIR: использовать для хранения данных
Для конкретизации в данной статье будет рассматривать- пользователя его домашний каталог вместо директо-
ся работа DSPAM на системе со следующим версиями про- рии, определенной переменной DSPAM_HOME.
граммного обеспечения: ! TRUSTED_USERS: отключить (!) использование дове-
! Операционная система: FreeBSD 5.4. ренных пользователей. Если данная опция будет отмече-
! Веб-сервер: Apache 1.3.33 с включенной поддержкой на, все пользователи смогут управлять фильтром dspam
suexec. (если, конечно, будут обладать достаточными правами
! Система управления базами данных: PostgreSQL 8.0.2. для запуска соответствующих исполняемых файлов).
! LARGE_SCALE: опция полезна в системах с большим
Наиболее удобный способ инсталляции ПО в системе числом абонентов. При ее активации домашние катало-
FreeBSD (естественно, на мой взгляд – навязываться нико- ги пользователей будут находиться не непосредствен-
му не буду) – использование коллекции портов. но в папке data каталога /var/db/dspam, а во вложенных
Если планируется использовать CGI-сценарии для уп- подкаталогах по начальным буквам имени пользовате-
равления фильтром, я рекомендую создать отдельного ля. Например, каталог с данными пользователя gorod
пользователя dspam и одноименную группу. В дальнейшем будет находиться по следующему пути: /var/db/dspam/
мы настроим виртуальный хост, который будет работать от data/g/o/gorod. Данная опция и USER_HOMEDIR взаи-
имени добавленного пользователя. После этого выполня- моисключаемы.
ем обычные процедуры: ! VIRT_USERS: этот ключ используется, если ваш почто-
вый сервер работает с виртуальными пользователями.
# cd /usr/ports/mail/dspam При этом дополнительно будет создана таблица иден-
# vi MakeÞle
# make тификаторов пользователей (по умолчанию dspam в
# make install процессе работы руководствуется данными реальных
пользователей из /etc/passwd).
Конечно, вместо редактирования файла Makefile можно
использовать ключи в командах make и make install, но их После сборки (необходимые зависимости, такие как
может оказаться слишком много, да и мне удобнее, чтобы библиотека GD, будут удовлетворены автоматически) пе-
информация о параметрах оставалась не только в истории реходим к конфигурации.
командной оболочки. По большому счету, этот этап мож-
но вообще опустить – настройки, используемые по умол- Несколько слов о правах доступа
чанию, подходят в большинстве случаев, тонкую же под- Для нормальной работы DSPAM большое значение играют
стройку можно будет выполнить в дальнейшем путем ре- правильно установленные права доступа, особенно если
дактирования конфигурационного файла. используется CGI-модуль. Как было показано выше, в про-
Я выполнил только одну правку (красным показана ис-
ключенная строка, синим – добавленная):

DSPAM _ MODE?= 4510


DSPAM _ OWNER?= root
DSPAM _ GROUP?= mail

DSPAM _ HOME?= ${ _ VAR _ DIR}/db/dspam


#DSPAM _ HOME _ OWNER?= ${DSPAM _ OWNER}
DSPAM _ HOME _ OWNER?= dspam
DSPAM _ HOME _ GROUP?= ${DSPAM _ GROUP}
DSPAM _ HOME _ MODE?=

Этой настройкой владельцем домашнего каталога про-


граммы dspam, в котором будут храниться файлы настроек
пользователей, их ящики-карантины, лог-файлы и т. д., мы
объявляем созданного пользователя dspam. В дальнейшем Рисунок 1. Конфигурационный диалог

26
администрирование
цессе сборки порта можно задать пользователя, отлично- #TrustedDeliveryAgent "/usr/bin/procmail" # Cygwin
#
го от root. С одной стороны, это способствует повышению # Other popular conÞgurations:
безопасности, но в то же время порождает массу дополни- #TrustedDeliveryAgent "/usr/cyrus/bin/deliver" # Cyrus
#TrustedDeliveryAgent "/bin/maildrop" # Maildrop
тельных сложностей. #TrustedDeliveryAgent "/usr/local/sbin/exim ↵
Во-первых, при работе в режиме LDA dspam должен быть -oMr spam-scanned" # Exim
способен вызывать агент доставки и передавать ему необ-
ходимые для дальнейшей работы права. А чтобы положить Далее, в строках Trust перечислены пользователи, ко-
почту в ящик пользователя при стандартных настройках, торым будет позволено управлять работой dspam. Допи-
эти права должны соответствовать пользователю root. шите туда пользователя, от имени которого работает поч-
Во-вторых, dspam должен иметь достаточно прав, что- товый сервер, и пользователя dspam (если вы его добав-
бы создать pid-файл при запуске в режиме демона, а так- ляли), а заодно удалите лишних:
же быть способным создать сокет на привилегированном
порту 24 (LMTP), что опять-таки требует прав суперполь- Trust root
#Trust mail
зователя. #Trust mailnull
Так, у меня попытка запустить dspam в режиме демона Trust smmsp # на моей системе от имени этого
# пользователя работает sendmail
после сборки с пользователем dspam, указанным как вла- Trust daemon
делец, завершилась такими ошибками: Trust dspam

# /usr/local/etc/rc.d/dspam.sh start Режим обучения (TrainingMode), используемые алго-


Starting dspam. ритмы и т. д. можно оставить по умолчанию. Если же вам
486: [7/26/2005 9:10:17] Daemon process starting захочется поэкспериментировать или работа с текущими
486: [7/26/2005 9:10:18] Unable to open file for writing:
/var/run/dspam.pid: Permission denied
настройками будет показывать неудовлетворительные ре-
486: [7/26/2005 9:10:18] Could not bind to :24 (Permission denied) зультаты, в файле /usr/local/share/doc/dspam/README мож-
486: [7/26/2005 9:10:18] daemon_listen() failed но найти достаточно подробное описание доступных ре-
486: [7/26/2005 9:10:18] Daemon process exiting
жимов (см. также раздел «Обучаем фильтр» далее в этой
Учитывая вышеизложенное, я решил оставить владель- статье).
цем dspam пользователя root, как это определено по умол- Среди параметров Feature отметим два следующих:
чанию. Хотя при наличии огромного желания и крепких не-
рвов можно добиться работы и от имени непривилегиро- Featurechained
Featurewhitelist
ванного пользователя.
Первая включает поддержку «цепочек», когда учитыва-
Основные настройки в dspam.conf ются не только отдельные слова, но и группы слов. С одной
Перед первым запуском необходимо переименовать файл стороны, эта «фича» заметно повышает точность класси-
/usr/local/etc/dspam.conf.sample в dspam.conf и произвести фикации писем, но с другой – способствует значительно-
в нем нужные изменения. Прежде всего введите правиль- му росту базы данных.
ные настройки для взаимодействия с СУБД. DSPAM уме- Второй строкой включается режим автоматического за-
ет использовать для хранения рабочей информации такие несения отправителя в «белый» список – если число писем
СУБД, как MySQL, PostgreSQL, SQLite, Oracle. Для слабо с одного и того же адреса превысит некоторое значение и
нагруженных систем можно использовать DB3 или DB4, но ни одно из них не будет признано спамом, их отправитель
разработчики это не рекомендуют. Например, мои значения заносится в «белый» список, и в дальнейшем сообщения
для PostgreSQL выглядят следующим образом: от него не будут анализироваться.
Группы строк Preference задают параметры по умол-
PgSQLServer 127.0.0.1 чанию:
PgSQLPort 5432
PgSQLUser dspam
PgSQLPass wj30sh3hs32 # 'quarantine' or 'tag'
PgSQLDb dspam Preference "spamAction=quarantine"
# 'message' or 'headers'
Для других СУБД будут свои настройки, раскоммен- Preference "signatureLocation=message"
Preference "showFactors=off"
тируйте соответствующие шаблоны и заполните нужные Preference "spamSubject=SPAM"
строки. Дополнительно потребуется выполнить ряд дейс-
твий для создания необходимых таблиц, смотрите следу- Группа AllowOverride позволяет указать, какие из пара-
ющий раздел. метров могут быть переопределены личными настройками
Потребуется также указать правильный LDA (если вы пользователя (для примера показаны лишь две строки):
планируете использовать подключение dspam в качестве
агента доставки). Просто снимите комментарий с той стро- AllowOverridetrainingMode
AllowOverride whitelistThreshold
ки, которая подходит для вашей системы:
Остальные параметры пока оставим без внимания. Те
# Most operating system defaults: из них, которые важны для выбора желаемого режима ра-
#TrustedDeliveryAgent "/usr/bin/procmail" # Linux
#TrustedDeliveryAgent "/usr/bin/mail" # Solaris боты, будут рассмотрены ниже, в соответствующих разде-
TrustedDeliveryAgent "/usr/libexec/mail.local" # FreeBSD лах. С остальными, вроде «SystemLog», думаю, вы без тру-

№8, август 2005 27


администрирование
да разберетесь самостоятельно – файл достаточно хоро- # IPv4 local connections:
host all all 127.0.0.1/32 trust
шо прокомментирован.
Все. База данных к работе готова.
Настраиваем СУБД для работы с DSPAM
Примеры настройки взаимодействия с конкретной СУБД Настраиваем DSPAM для работы
можно найти в соответствующих README-файлах. В дан- как LDA
ной статье рассмотрим работу с PostgreSQL. В этом режиме почтовый сервер (MTA) конфигурируется та-
В /usr/local/share/examples/dspam/pgsql располагаются ким образом, чтобы в качестве локального агента достав-
sql-файлы, содержащие необходимые для работы коман- ки выступал dspam. Способы «прикручивания» DSPAM к
ды. Сейчас нас интересует файл pgsql_objects.sql, кото- конкретному MTA подробно описываются в соответствую-
рый поможет создать все нужные таблицы, индексы и т. д. щих документах:
Но базу данных и пользователя придется создать самосто- ! /usr/local/share/doc/dspam/courier.txt
ятельно (хотя вы можете использовать и уже существую- ! /usr/local/share/doc/dspam/exim.txt
щие). Последовательность нужных шагов представлена на ! /usr/local/share/doc/dspam/postfix.txt
следующем листинге: ! /usr/local/share/doc/dspam/qmail.txt
! /usr/local/share/doc/dspam/sendmail.txt
# cd /usr/local/share/examples/dspam/pgsql
# psql -U pgsql template1
Например, для sendmail следует указать в mc-файле
Добро пожаловать в psql 8.0.2 - Интерактивный Терминал PostgreSQL. следующие строки:
Наберите: \copyright для условий распространения
\h для подсказки по SQL командам deÞne('LOCAL _ MAILER _ PATH', `/usr/local/bin/dspam')dnl
\? для подсказки по командам psql deÞne('LOCAL _ MAILER _ ARGS', ↵
\g или наберите ";" для завершения запроса и его выполнения `dspam "--deliver=innocent,spam" --user $u -d %u')dnl
\q для выхода

template1=# create user dspam nocreatedb nocreateuser password 'wj30sh3hs32';


CREATE USER
Они должны быть добавлены до строки «MAILER(local)».
template1=# create database dspam owner dspam; Здесь объявляется путь до агента доставки и его парамет-
CREATE DATABASE
template1=# \c dspam dspam ры запуска. Параметр --deliver указывает, что должны до-
Вы подсоединились к базе данных "dspam" как пользователь "dspam". ставляться как «хорошие» письма (innocent), так и спам
dspam=> \! ls
pgsql_objects.sql purge.sql virtual_users.sql (spam). Чтобы на реальный LDA письма, признанные спа-
dspam=> \i pgsql_objects.sql
psql:pgsql_objects.sql:10: NOTICE: CREATE TABLE / UNIQUE
мом, не передавались, удалите соответствующее упоми-
создаст подразумеваемый индекс "dspam_token_data_token_key" нание из строки параметров.
для таблицы "dspam_token_data"
CREATE TABLE После компиляции нового конфигурационного файла и
CREATE INDEX
CREATE INDEX
перезапуска почтового сервера все входящие сообщения
CREATE INDEX будут поступать на вход dspam. Далее в зависимости от на-
строек и результата анализа полученные сообщения будут
CREATE INDEX
psql:pgsql_objects.sql:24: NOTICE: CREATE TABLE / UNIQUE
создаст подразумеваемый индекс "dspam_signature_data_signature_key" либо передаваться на реальный LDA для доставки в ящик
для таблицы "dspam_signature_data"
CREATE TABLE пользователя, либо помещаться в карантин.
psql:pgsql_objects.sql:36: NOTICE: CREATE TABLE / PRIMARY KEY
создаст подразумеваемый индекс "dspam_stats_pkey"
для таблицы "dspam_stats" Настраиваем DSPAM в режиме
CREATE TABLE
psql:pgsql_objects.sql:44: NOTICE: CREATE TABLE / UNIQUE POP3-proxy
создаст подразумеваемый индекс "dspam_neural_data_node_key"
для таблицы "dspam_neural_data"
Одно из основных преимуществ работы в таком режиме за-
CREATE TABLE ключается в независимости от конкретного MTA. Более то-
CREATE INDEX
psql:pgsql_objects.sql:55: NOTICE: CREATE TABLE / UNIQUE го, почтовый сервер может вообще не располагаться на ва-
создаст подразумеваемый индекс "dspam_neural_decisions_signature_key" шей машине. Например, ящики пользователей могут быть
для таблицы "dspam_neural_decisions"
CREATE TABLE размещены на сервере провайдера, и если настроить полу-
psql:pgsql_objects.sql:62: NOTICE: CREATE TABLE / UNIQUE
создаст подразумеваемый индекс "dspam_preferences_preference_key"
чение почты через POP3-proxy, то защиту от спама вы мо-
для таблицы "dspam_preferences" жете реализовать на своем шлюзе без каких-либо измене-
CREATE TABLE
dspam=> ний со стороны провайдера. Скачиваем последний архив с
pop3filter.sourceforge.net (в портах он отсутствует):
Здесь мы создали пользователя dspam и одноименную
базу данных (должны соответствовать настройкам в dspam. # tar –xvzf pop3Þlter-0.5.5.tar.gz
# cd pop3Þlter-0.5.5
conf). Затем выполнили команды из внешнего файла. Те- #./conÞgure
перь осталось убедиться, что в файле pg_hga.conf содер- # make
жатся разрешающие строки для локальных подключений
к этой базе от имени соответствующего пользователя, на- Вот здесь поджидала еще одна неприятность (вторая
пример такие: после отсутствия приложения в коллекции портов) – сбор-
ка окончилась ошибкой:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
if gcc -DHAVE_CONFIG_H -I. -I. -I.. -pedantic -Wall
# "local" is for Unix domain socket connections only -pedantic-errors -MT newopt.o -MD -MP -MF ".deps/newopt.Tpo"
local all all trust -c -o newopt.o `test -f 'newopt.c' || echo './'`newopt.c;

28
администрирование
then mv -f ".deps/newopt.Tpo" ".deps/newopt.Po"; # make install
else rm -f ".deps/newopt.Tpo"; exit 1; fi
newopt.c: In function `process':
newopt.c:464: error: ISO C forbids conversion of object pointer Запуск pop3filter можно выполнить такой командой:
to function pointer type
newopt.c: At top level:
newopt.c:146: warning: 'clone_argv' defined but not used # pop3Þlter --fork 127.0.0.1 110 7110 ↵
*** Error code 1 "dspam --user \$pop3 _ USERNAME ↵
--stdout --deliver=innocement,spam "
Поверхностный анализ исходного кода показал, что про-
блемные строки (464 в файле newopt.c и еще несколько в В данном случае входящие соединения будут ожидать-
main.c) используются только для обеспечения работы клю- ся на порту 7110 и передаваться на 110-й порт localhost. По-
чей --help и --version. Поскольку данными функциями впол- лученные от реального pop3-сервера сообщения будут от-
не можно пренебречь, было принято решение о небольшом даваться на обработку фильтру dspam, после чего переда-
хирургическом вмешательстве в указанные два файла (по- ваться пользователю в зависимости от настроек и резуль-
казаны различия в исходном и полученном файлах): тата классификации. Правда, должен признаться, что до-
биться устойчивой работы в этом режиме мне не удалось.
serg$ diff src/main.c.old src/main.c Довольно часто после обработки одного – двух сообщений
117,126c117,123
< {/*00*/ {"help", OPT _ NORMAL, 0, ↵ что-то где-то подвисало, и почтовый клиент при попытке ска-
OPT _ T _ FUNCT, (void *) help }, чать очередную порцию почты «отваливался» по истечении
< /*01*/ {"h", OPT _ NORMAL, 1, ↵
OPT _ T _ FUNCT, (void *) help }, тайм-аута. Возможно, кому-то из вас повезет больше.
< /*02*/ {"version", OPT _ NORMAL, 0, ↵
OPT _ T _ FUNCT, (void *) version},
< /*03*/ {"V", OPT _ NORMAL, 1, ↵ Запуск DSPAM в режиме демона
OPT _ T _ FUNCT, (void *) version}, По умолчанию dspam запускается как автономная програм-
< /*04*/ {"fork", OPT _ NORMAL, 0, ↵
OPT _ T _ FLAG, NULL }, ма. Однако при интенсивной нагрузке в этом случае тратит-
< /*05*/ {"f", OPT _ NORMAL, 1, ↵ ся много ресурсов на такие операции, как установка соеди-
OPT _ T _ FLAG, NULL },
< /*06*/ {"e", OPT _ NORMAL, 1, ↵ нения с СУБД. Более эффективным выглядит запуск в ре-
OPT _ T _ GENER, NULL }, жиме демона, когда серверный процесс dspam находится
< /*07*/ {"listen", OPT _ NORMAL, 0, ↵
OPT _ T _ GENER, NULL }, в памяти, поддерживая несколько постоянных соединений
< /*08*/ {"user", OPT _ NORMAL, 0, ↵ с СУБД. Для обработки же пользовательских соединений
OPT _ T _ GENER, NULL },
< /*09*/ {"group", OPT _ NORMAL, 0, ↵ dspam запускается как клиент, общающийся с сервером ли-
OPT _ T _ GENER, NULL }, бо по протоколу LMTP, либо через UNIX-socket.
---
> { Для работы в режиме демона нужно настроить парамет-
> /*04-0*/ {"fork", OPT _ NORMAL, 0, ↵ ры сервера и клиента в конфигурационном файле. Возмож-
OPT _ T _ FLAG, NULL },
> /*05-1*/ {"f", OPT _ NORMAL, 1, ↵ ны два режима работы – через локальные сокеты UNIX либо
OPT _ T _ FLAG, NULL }, по протоколу LMTP (используется 24-й TCP-порт). Для пер-
> /*06-2*/ {"e", OPT _ NORMAL, 1, ↵
OPT _ T _ GENER, NULL }, вого случая внесите в конфигурацию следующие строки:
> /*07-3*/ {"listen", OPT _ NORMAL, 0, ↵
OPT _ T _ GENER, NULL }, ServerDomainSocketPath "/var/run/dspam.sock"
> /*08-4*/ {"user", OPT _ NORMAL, 0, ↵ ClientHost "/var/run/dspam.sock"
OPT _ T _ GENER, NULL },
> /*09-5*/ {"group", OPT _ NORMAL, 0, ↵
OPT _ T _ GENER, NULL }, Естественно, пути к сокету для клиента и сервера должны
128,132c125,129 совпадать. Если вы собираетесь использовать LMTP (напри-
< }; lopt[4].data = lopt[5].data = ↵
(void *) &(opt->fork); мер, когда клиент и сервер находятся на разных машинах),
< lopt[6].data = (void *) &(opt->fstderr); то раскомментируйте и настройте следующие параметры:
< lopt[7].data = &(opt->listen _ addr);
< lopt[8].data = &(opt->username);
< lopt[9].data = &(opt->groupname); #ServerPort 24
--- #ServerPass.Relay1 "secret"
> }; lopt[0].data = lopt[1].data = ↵ #ServerPass.Relay2 "password"
(void *) &(opt->fork); #ClientHost 127.0.0.1
> lopt[2].data = (void *) &(opt->fstderr); #ClientPort 24
> lopt[3].data = &(opt->listen _ addr); #ClientIdent "secret@Relay1"
> lopt[4].data = &(opt->username);
> lopt[5].data = &(opt->groupname);
Строки Server* должны присутствовать в конфигураци-
serg$ diff lib/newopt.c.old lib/newopt.c онном файле сервера, Client* – соответственно клиента.
463,465c463,465
< case OPT _ T _ FUNCT: Заметьте, что если хотя бы одна строка ServerPass.RelayX
< (*(callbackT)table->data); будет раскомментирована, то dspam запустится для рабо-
< break;
--- ты по 24-му порту, даже если присутствуют строки, зада-
> /* case OPT _ T _ FUNCT: ющие UNIX-сокеты.
> (*table->data);
Далее установите в файле /etc/rc.conf переменную dspam_
То есть были удалены или закомментированы строки, в enable в «YES», что обеспечит автоматический запуск де-
которых упоминается OPT_T_FUNC, и соответственно ис- мона с помощью сценария /usr/local/etc/rc.d/dspam.sh. Этот
правлены индексы массива, используемые в дальнейшем. скрипт добавляется автоматически при установке из пор-
После этой «операции» сборка прошла успешно, а вслед тов, вам останется лишь проконтролировать его наличие
за ней и установка: и «исполняемость».

№8, август 2005 29


администрирование
Теперь, чтобы сервером электронной почты или pop3- Домашним каталогом виртуального хоста оставляем /usr/
фильтром программа dspam запускалась как клиент, ука- local/www/vhosts/dspam, при этом suexec должен быть собран
жите в соответствующих строках вызова дополнитель- таким образом, чтобы директория dspam находилась внут-
ный ключ --client либо используйте вместо dspam бинар- ри директории, определенной как suexec_docroot (задается
ник dspamc, специально предназначенный для работы в при компиляции Apache с помощью переменной APACHE_
режиме клиента. SUEXEC_DOCROOT либо правкой Makefile).
Если теперь выполнить следующую команду, то можно Далее, для работы suexec требуется, чтобы права на ка-
наблюдать основной процесс dspam и несколько процес- талог dspam и размещенные в нем скрипты принадлежали
сов для связи с базой данных (рекомендуется использо- пользователю и группе dspam, от имени которого будет ра-
вать MySQL или PostgreSQL): ботать наш виртуальный хост. Именно несоответствие прав
является наиболее частой причиной ошибок при работе с
# ps -ax |grep dspam suexec (которые можно будет найти в файле /var/log/httpd-
4843 ?? I 0:00,03 postmaster: dspam dspam 127.0.0.1(63076) idle (postgr suexec.log, если вы не меняли соответствующий параметр
4844 ?? I 0:00,12 postmaster: dspam dspam 127.0.0.1(58646) idle (postgr
4845 ?? I 0:00,03 postmaster: dspam dspam 127.0.0.1(54366) idle (postgr при компиляции).
4842 p0 S 0:00,25 /usr/local/bin/dspam -daemon
Помимо прав на CGI-сценарии, должны быть доступны
В результате, благодаря постоянным подключениям к и файлы, размещаемые в домашнем каталоге dspam (по
СУБД, нагрузка на систему несколько снижается. умолчанию /var/db/dspam). Именно для этой цели пользова-
тель dspam и был объявлен владельцем домашнего ката-
Подключаем CGI-модуль лога. Если что-то не будет работать через веб-интерфейс,
Этот модуль позволяет пользователям работать со свои- в первую очередь следует проверять именно наличие необ-
ми настройками, получать статистические данные о рабо- ходимых прав на файлах «проблемного» пользователя.
те фильтра, а также просматривать сообщения, помещен- Обратите внимание, что CGI-модуль не может быть
ные в карантин, и при необходимости инициировать пере- использован, если данные пользователей хранятся в их
обучение. В процессе инсталляции необходимые для рабо- домашних каталогах (был установлен параметр USER_
ты модуля файлы будут помещены в /usr/local/www/vhosts/ HOMEDIR). Конечно, запустив виртуальный хост с права-
dspam. Поскольку пользователь, от имени которого будут ми суперпользователя, можно разом решить все возмож-
исполняться данные cgi-скрипты, должен иметь доступ и ные проблемы доступа, но вряд ли в здравом уме можно
к иерархии файлов в /var/db/dspam, нужно либо дать со- пойти на подобный шаг.
ответствующие разрешения на домашний каталог dspam, Использование веб-интерфейса позволяет существенно
либо запускать веб-сервер от имени пользователя, имею- упростить настройку параметров работы фильтра. Кроме
щего необходимые привилегии. того, поскольку каждый пользователь может самостоятель-
Наиболее удобным мне показалось запустить для орга- но осуществлять большинство контрольно-управляющих
низации веб-интерфейса отдельный виртуальный хост от действий, то в итоге нагрузка на администратора сущест-
имени пользователя dspam. Для этого Apache должен быть венно снижается (правда, повышается нагрузка на сервер,
собран с поддержкой suexec. Проверить выполнение дан- особенно при интенсивном использовании графиков).
ного требования можно таким образом: Для доступа к веб-интерфейсу пользователь должен
пройти аутентификацию (используется Basic-аутентифи-
# /usr/local/sbin/httpd -l кация, по умолчанию проверка выполняется в файле паро-
... лей /usr/local/etc/apache/passwd, но вы можете перенастро-
mod_setenvif.c ить это в файле .htaccess). В зависимости от введенного
mod_ssl.c
suexec: enabled; valid wrapper /usr/local/sbin/suexec
имени (используется переменная $REMOTE_USER) стано-
вится доступным интерфейс пользователя или админист-
В дальнейшем конфигурируем Apache следующим об- ратора. Роль администратора может выполнять любой ау-
разом (естественно, далеко не единственным): тентифицированный пользователь, имя которого присутс-
твует в файле admins (здесь и далее речь идет о файлах,
NameVirtualHost 10.10.10.80 расположенных в каталоге виртуального хоста, в моем слу-
<VirtualHost 10.10.10.80>
ServerName dspam.test.ru чае это /usr/local/www/vhosts/dspam).
DocumentRoot /usr/local/www/vhosts/dspam Веб-интерфейс сценариев англоязычный, но, прило-
User dspam
Group dspam жив минимум усилий, его несложно перевести на русский
<Directory "/usr/local/www/vhosts/dspam"> язык, заодно добавив некоторые пояснения от себя в це-
Options Indexes FollowSymLinks ExecCGI
AllowOverride All лях сокращения числа вопросов. На сайте журнала в раз-
Order allow,deny деле «Исходный код» можно будет найти архив с моим пе-
Allow from all
DirectoryIndex index.html реводом.
AddHandler cgi-script .cgi Пользователь может просматривать только свою статис-
<IfModule mod _ perl.c>
PerlSendHeader On тику (рис. 2), выполнять некоторые настройки, если в кон-
AddHandler perl-script .cgi фигурационном файле не запрещено их переопределять
PerlHandler Apache::Registry
</IfModule> (рис. 3), работать с историей сообщений (рис. 4), просмат-
</Directory> ривать сообщения, помещенные в карантин (рис. 5), в час-
</VirtualHost>
тности, инициировать переобучение в случае ошибки. Так-

30
администрирование

Рисунок 2. Страница статистики пользователя Рисунок 3. Страница персональных настроек

Рисунок 4. Страница истории Рисунок 5. Страница карантина


же можно полюбоваться графическим отображением ста- </Limit>
<FilesMatch "(cgi|css|gif|html)$">
тистики за последний период времени (рис. 6), наглядно order deny,allow
демонстрирующим эффективность работы фильтра. allow from all
</FilesMatch>
Администратор, кроме того что может работать в ин- order deny,allow
терфейсе любого пользователя, имеет доступ также к об- deny from all
щим настройкам, которые применяются, если пользователь
не определит собственные. Кроме того, ему предоставля- Для еще большей безопасности вместо «allow from all»
ется графическая статистика работы фильтра в целом по для соответствующих расширений можно задать ограни-
серверу (рис. 7). ченный список разрешенных адресов.
Поскольку по умолчанию доступ возможен ко всем фай-
лам, расположенным в каталоге виртуального хоста (на- Обучаем фильтр
пример, можно получить содержимое файла admins), име- Процесс обучения играет чрезвычайно важную роль для
ет смысл несколько ужесточить требования, внеся допол- правильной работы фильтра. Чтобы dspam знал, какие
нительные настройки в .htaccess. Естественно, чтобы они письма являются спамом, требуется дать ему на обработ-
имели силу, конфигурация Apache должна позволять пере- ку примеры подобных сообщений, а также образцы нор-
определение базовых настроек; также можно указать эти мальных писем. Если у вас есть архив спамерских писем
строки непосредственно в httpd.conf в секции VirtualHost: (допустим, вы сбрасываете такие сообщения в отдельную
папку), то эти сообщения могут быть переданы для обуче-
# cat /usr/local/www/vhosts/dspam/.htaccess ния, используя следующую команду:
AuthName dspam.test.ru
AuthType Basic
AuthUserFile /usr/local/etc/apache/passwd # dspam _ corpus --addspam sergei ↵
<Limit GET POST> /var/db/dspam/data/gorod/gorod.mbox
require valid-user command: '/usr/local/bin/dspam' --class=spam ↵

№8, август 2005 31


администрирование

Рисунок 6. Графики активности Рисунок 7. Страница администратора


--source=corpus --user 'sergei' --mode=teft ↵ /etc/mail/aliases должны быть созданы псевдонимы следу-
--feature=chained,noise ющего вида:
/usr/local/bin/dspam _ corpus: 3 messages, ↵
00:00:57 elapsed, 0.05 msgs./sec.
# DSPAM aliases
spam-gorod: "|/usr/local/bin/dspam --user gorod ↵
В данном примере я обучил фильтр для sergei на основе --class=spam --source=error"
спама, собранного в карантине пользователя gorod. Обу-
чение «хорошими» сообщениями выполняется аналогично, Имя псевдонима в принципе может быть любым (роль
но без ключа -addspam. Для получения адекватных резуль- играет значение ключа --user при вызове dspam), но реко-
татов при обучении необходимо соблюдать баланс между мендуется формировать его как spam-<имя_пользователя>.
«хорошими» сообщениями и спамом, в идеале их количес- Теперь, если пользователь перенаправит спам, который
тво должно быть (примерно) одинаково. Также по умолча- попал в его ящик, на этот адрес будет инициировано пе-
нию dspam настраивается на постоянное обучение в про- реобучение.
цессе работы (режим TEFT). То есть им обрабатываются Нужно сказать, что каждое обработанное письмо помеча-
все входящие сообщения, и значения спамности для каж- ется сигнатурой вида «!DSPAM:42df44f092281550917839!», ко-
дого встречающегося в них слова пересчитываются в БД. торая обычно добавляется в тело сообщения. Когда письмо
Это увеличивает нагрузку на систему, но позволяет быстро перенаправляется для исправления ошибки, dspam ищет в
реагировать на изменение характера рассылок. нем эту сигнатуру и «откатывает» те изменения в базе, ко-
Если режим TEFT для вас не приемлем из-за слиш- торые были сделаны во время первоначальной обработки
ком высокой нагрузки, можно использовать другие (па- этого сообщения.
раметр TrainingMode конфигурационного файла или ключ Вспомогательная утилита dspam_genaliases автома-
запуска): тически формирует список псевдонимов на основе фай-
! TOE: обучение выполняется только в том случае, если ла /etc/passwd.
фильтр допускает ошибку.
! TUM: фильтр обучается на каждом сообщении, пока не Несколько слов о «вакцинации»
будет достигнуто определенное число повторений то- Это хорошо, что пользователь может самостоятельно обу-
кена, затем переходит в режим обучения по ошибке. чать фильтр. Благодаря этому число ложных срабатываний
! NOTRAIN: обучение не проводится. снижается до минимума. Но, с другой стороны, одно и то
же сообщение, впервые попавшее в почтовый ящик, каж-
Возникает вопрос: а как фильтр узнает, что он ошиб- дый пользователь должен обработать лично. Для преодо-
ся? Конечно, об этом ему должен сообщить пользователь. ления этого неудобства DSPAM поддерживает так называ-
Для обратной связи предусмотрено два механизма – с по- емую «вакцинацию». Суть ее заключается в том, что в на-
мощью CGI-сценариев и путем пересылки сообщений на стройки почтового сервера добавляется еще один псевдо-
специальный адрес. ним (или несколько), которые перенаправляются на dspam
В первом случае пользователь имеет возможность в в режиме прививки:
списке своей истории щелчком мыши инициировать пере-
обучение для сообщений, которые, по его мнению, были об- inoc-gorod: "|/usr/local/bin/dspam --user gorod ↵
--class=spam --source=inoculation"
работаны ошибочно (используя ссылки «Retrain as Spam»
и «Retrain as Innocent» соответственно). Также переобуче- Далее этот псевдо-адрес можно «засветить» на различ-
ние происходит, если пользователь возвращает сообще- ных досках объявлений, форумах и т. д. с тем, чтобы он по-
ние из карантина. пал по возможности в большее число спамерских баз. Так
Для реализации второго механизма обучения в файле же можно попросить своих друзей пересылать на этот ад-

32
администрирование
рес спам, который получают они. В результате dspam смо- ! dspam_admin: данная утилита предназначена для уп-
жет обработать большее число нежелательной почты и эф- равления персональными настройками пользователей
фективнее реагировать, когда подобные письма будут пос- или общими настройками dspam. Синтаксис команды
тупать на реальные ящики пользователей. можно посмотреть, введя ее без аргументов:
Чтобы не заводить отдельные адреса-ловушки для каж-
дого пользователя, используются группы, о которых пойдет # dspam _ admin
речь в следующем разделе. syntax: dspam_admin [function] [arguments] [--profile=PROFILE]
add preference [user] [attrib] [value]
Группы change preference [user] [attrib] [value]
delete preference [user] [attrib] [value]
Чтобы придать работе с пользователями большую гибкость, list preference [user] [attrib] [value]
а также «обобществлять» информацию о спаме, накоплен- aggregate preference [user]

ную отдельными пользователями, в системе DSPAM имеет- Например, так можно отключить использование авто-
ся поддержка групп. Также группы используются и для ре- матически заполняемого «белого» списка для пользова-
ализации идеи «вакцинации». теля gorod:
Фильтром поддерживаются следующие типы групп:
! Shared: пользователи, входящие в shared-группу, рабо- # dspam _ admin change preference gorod enableWhitelist off
тают каждый со своим карантином, но используют об-
щую базу токенов. Для однотипных пользователей эф- Файл с настройками будет размещаться в директории
фективность повышается за счет снижения размера ба- dspam в подкаталоге, соответствующем пользователю –
зы и ее более быстрой наполняемости. С другой сторо- /var/db/dspam/data/gorod, в СУБД либо в домашнем ката-
ны, если характер корреспонденции отдельного поль- логе пользователя. Это можно настроить в процессе инс-
зователя отличается от среднего по группе, возраста- талляции фильтра (см. выше).
ет вероятность ложных срабатываний. ! dspam_clean: выполняет очистку базы. В процессе ра-
! Inoculation: включение пользователя в одну из таких боты база маркеров может достигать значительных раз-
групп позволяет ему получать информацию из «при- меров. Очистка служит для того, чтобы удалить беспо-
вивок», обработанных любым из членов группы. Та- лезные (или малополезные) записи. В частности, мо-
ким образом, описанный в предыдущем разделе псев- гут быть удалены токены, коэффициент спамности ко-
до-адрес можно сопоставить с одним из пользовате- торых близок к 0,5, то есть нейтральные слова, а также
лей inoculation-группы, чтобы она оказывала влияние устаревшие сигнатуры (которые фильтр хранит на слу-
на всех остальных. чай переобучения). Очистка служит не только для опти-
! Classification: члены такой группы практически незави- мизации размера БД, но и для поддержания ее в акту-
симы, но если у фильтра возникают сомнения при клас- альном состоянии: удаление устаревших токенов поз-
сификации какого-то сообщения, то он сможет восполь- воляет более точно реагировать на изменение харак-
зоваться данными остальных членов группы для приня- тера рассылки.
тия окончательного решения.
! Global: такая группа позволяет создавать так называ- Например, для удаления сигнатур старше 7 дней для
емых глобальных пользователей. Любой новый поль- всех пользователей служит команда:
зователь сможет использовать данные, размещенные
в пространстве глобального пользователя, пока не на- # dspam _ clean –s7
копит достаточную для самостоятельной работы базу.
! Merged: пользователи, входящие в такую группу, полу- Удаление всех (в том числе и самых последних) ней-
чают возможность добавлять в процессе анализа к сво- тральных токенов из пространства пользователя gorod:
им данным информацию из пространства глобального
пользователя (описанного в группе Global). При этом имя # dspam _ clean –p0 gorod
merged-группы должно совпадать с именем используе-
мого глобального пользователя. Подробности по использованию утилиты см. на страни-
цах man dspam_cleanup.
Для того чтобы включить пользователя в ту или иную Говоря об очистке базы, следует также упомянуть уда-
группу, используется файл /var/db/dspam/group: ление малоэффективных и устаревших данных силами
СУБД. Например, для PostgreSQL cоответствующий sql-
group1:shared:user1,user2,user3 файл можно найти в /usr/local/share/examples/dspam/pgsql
group2:inoculation:user4,user5,user6
под именем purge.sql.
Существуют ограничения на вхождения одного и того Для регулярного автоматического запуска процедур
же пользователя в разные группы. Подробную информацию очистки можно использовать crontab.
можно получить из уже упоминавшегося файла README. ! dspam_stats: выводит статистику работы dspam по всем
или указанным пользователям (количество спама, «хо-
Вспомогательные утилиты роших» писем, ошибок):
В состав пакета DSPAM входит ряд служебных утилит, на-
значение которых – выполнение ряда сервисных функций: # dspam _ stats serg gorod alex

№8, август 2005 33


администрирование
serg TS: 0 TI: 12 SM: 0 IM: 0 SC: 0 IC: 0 циент спамности» (вероятность того, что следующее пись-
gorod TS: 1 TI: 44 SM: 11 IM: 0 SC: 0 IC: 0 мо с данным словом будет спамом), LH – время последнего
alex TS: 0 TI: 20 SM: 0 IM: 0 SC: 0 IC: 0
появления данного слова во входящих сообщениях.
С ключом -H утилита выдает более «читабельную» ин- Вопреки своему названию, наводящему на мысль о ре-
формацию: зервном копировании, dspam_dump используется только
для анализа работы фильтра.
# dspam _ stats -H gorod ! dspam_2sql: формирует SQL-команды, которые могут
gorod: быть использованы для заполнения таблиц данными
TS Total Spam: 1 практически в любой СУБД:
TI Total Innocent: 44
SM Spam Misclassified: 11
IM Innocent Misclassified: 0 # dspam _ 2sql
SC Spam Corpusfed: 0
insert into dspam_token_data (uid, token, spam_hits, innocent_hits, last_hit)
IC Innocent Corpusfed: 0 values(1002, "16628239873585525635", 0, 3, 1121889600);
TL Training Left: 2456 insert into dspam_token_data (uid, token, spam_hits, innocent_hits, last_hit)
SR Spam Catch Rate: 8.33% values(1002, "3386138115020307445", 0, 3, 1121889600);
IR Innocent Catch Rate: 100.00% .. .. .. ..
OR Overall Rate/Accuracy: 80.36%
Может использоваться при переносе данных на дру-
! dspam_corpus: данная утилита позволяет указать филь- гую систему управления БД для резервного копирования
тру файл в формате mbox, содержимое которого сле- (хотя и гораздо менее эффективного, чем силами самой
дует «изучить». Будучи выполненной без дополнитель- СУБД) и т. д.
ных аргументов, команда выведет на экран подсказку ! dspam_crc: эта служебная программа рассчитывает
по синтаксису. Также имеется man-страница. цифровой «отпечаток» для того или иного слова (как
! dspam_genaliases: с помощью этой команды можно ав- оно будет храниться в базе):
томатически добавить в файл /etc/mail/aliases нужные
псевдонимы, для генерации которых используется спи- # dspam _ crc "viagra"
сок пользователей из файла /etc/passwd. TOKEN: 'viagra' CRC: 6625426497525293056
! dspam_logrotate: лог-файлы имеют привычку разрас-
таться до немыслимых размеров. С помощью этой ути- Помимо удовлетворения любопытства, данная утилита
литы, помещенной в crontab, можно организовать пери- может быть полезной, например, при автоматизированной
одическую очистку логов, скажем, таким образом (при- обработке содержимого базы данных.
мер из README):
Итоги
0 0 * * * dspam _ logrotate -a 30 /var/db/dspam/system.log ↵ Система DSPAM, конечно, не уменьшает почтовый трафик
`Þnd /var/db/dspam/data -name "*.log"`
(все сообщения принимаются полностью), но зато сущес-
Преимущества этого способа перед другими способа- твенно упрощает жизнь конечному пользователю, выпол-
ми ротации (например, newsyslog) в том, что можно обра- няя за него работу по сортировке входящей корреспонден-
ботать сразу все лог-файлы. В приведенном выше приме- ции на спам и легальную почту. Благодаря персонифици-
ре с помощью find формируется список всех файлов с рас- рованному подходу к обучению пользователь практически
ширением log, найденных в каталоге data и его подкатало- не зависит от предпочтений системного администратора,
гах. Ключ -а задает возраст файлов в днях, которые долж- обслуживающего систему, самостоятельно формируя пра-
ны быть подвержены очистке. вила фильтрации. С другой стороны, DSPAM не относится
! dspam_merge: данная команда объединяет метадан- к системам типа «поставил – и спи». Прежде чем будет за-
ные нескольких пользователей, имена которых зада- метен положительный эффект от внедрения, как от адми-
ются как аргументы командной строки, и сохраняет их нистратора, так и от пользователей потребуется приложить
в пространство другого пользователя, заданного клю- немало усилий по обучению системы. Но, на мой взгляд,
чом –o. Частное применение утилиты – формирование оно того стоит.
«стартового» наполнения для вновь создаваемого поль-
зователя на основе некоторого существующего, уже Дополнительная информация:
прошедшего «цикл обучения». Подробности см. в man 1. Супрунов С. Запускаем spamd на FreeBSD. – Журнал
dspam_merge. «Системный админстратор», №7, 2005 г. – 14-19 с.
! dspam_dump: выводит на экран токены и характеризу- 2. http://dspam.nuclearelephant.com – домашняя страница
ющие их значения для указанного пользователя: проекта DSPAM.
3. http://www.paulgraham.com/spam.html – «A Plan for Spam»
# dspam _ dump gorod by Paul Graham.
2382717757724374224 S: 00007 I: 00000 P: 0.9998 LH: Wed Jul 27 00:00:00 2005 4. http://www.paulgraham.com/better.html – «Better Bayesian
2180264270330443047 S: 00004 I: 00000 P: 0.4000 LH: Mon Jul 25 00:00:00 2005
4180468462601491382 S: 00004 I: 00000 P: 0.4000 LH: Mon Jul 25 00:00:00 2005 Filtering» by Paul Graham.
.. .. .. ..
5. http://radio.weblogs.com/0101454/stories/2002/09/16/
Здесь в первом поле отображается токен в цифровой spamDetection.html – «Spam Detection» by Gary Robinson.
форме (см. dspam_crc в этом разделе) и далее: S – коли- 6. http://linuxjournal.com/article/6467 – «A Statistical Approach
чество спама, I – количество хороших писем, P – «коэффи- to the Spam Problem» by Gary Robinson.

34
администрирование

WrSpy – СЧИТАЕМ И КОНТРОЛИРУЕМ ТРАФИК


ПОЧТОВЫХ И ПРОКСИ-
ПРОКСИ-СЕРВЕРОВ
СЕРВЕРОВ

РОМАН МАРКОВ

Тема контроля за интернет-трафиком пользователей не теряет своей актуальности.


Различные решения этой задачи неоднократно описывались, но всегда приятнее выбирать
из множества решений, нежели без вариантов использовать что-то единственное. Сегодня
вы познакомитесь с WrSpy – продуктом, который я сам активно применяю уже несколько лет.

Н
емного истории. Название этого лог-анализатора анализатор. В процессе попыток внедрить данную систему у
пошло от популярного продукта для Windows – Kerio себя выявилось много неточностей и недоработок, которые
WinRoute Pro, несмотря на то что сейчас данный про- автор программы оперативно устранял по нашим советам.
дукт распознает форматы логов почти всех популярных В результате такой совместной работы продукт «отполиро-
прокси- и почтовых серверов. Причина в том, что сначала вали», добавили возможность анализа лог-файлов других
WrSpy был написан его автором «исключительно для собс- популярных серверов, прибавив при этом целый букет но-
твенной сети». Начало развития было положено около трех вых функций. Программа абсолютно бесплатна, за это ог-
лет назад на одной из интернет-конференций, посвященной ромная благодарность Аркадию Патрушеву.
администрированию локальных сетей. Аркадий Патрушев – Итак, начнем с традиционного описания возможностей.
системный администратор и программист из Новосибирс- Программа предназначена для анализа логов и форми-
ка, известный в сети под псевдонимом Walker, на очеред- рования разнообразных отчетов как в автоматическом (па-
ной вопрос в стиле: «Как считать трафик?» – предложил кетном), так и в интерактивном режиме. Именно изначаль-
всем желающим свою программу, честно предупредив, она ное наличие пакетного режима и, разумеется, бесплатность
что «жутко сырая» и была написана для себя. сделало программу столь привлекательной, вытеснив уже
Я также использовал встроенный прокси-сервер существовавшие на тот момент аналогичные Windows-сис-
WinRoute 4 Pro, и поэтому попросил выслать и мне данный темы. Однажды настроив систему импорта и анализа логов

36
администрирование
и прописав в планировщике задач автоматический запуск ределенного ресурса), нельзя не заметить, что, пожалуй,
администратор получал систему класса «настроил и за- единственным недостатком WrSpy является именно боль-
был». Помимо этого, автор использовал, казалось бы, прос- шая нагрузка на дисковую систему. Однако глубокий ана-
той, но остроумный способ блокировки доступа пользова- лиз plain-text файлов с накоплением статистики всегда под-
телей, превысивших персональный лимит. Автоматически разумевает это.
корректируя необходимые настройки программы в реест-
ре, WrSpy переносил пользователя в другую группу безо- Установка
пасности, не имеющую никаких прав. Позднее при развитии Рассмотрим пример настройки системы. Для написа-
продукта этот же принцип лег в основу блокировки пользо- ния данной статьи я использовал связку Kerio WinRoute
вателей в Squid-NT. Кстати, несмотря на то, что WrSpy ра- Firewall 6 и Alt-N Mdaemon 8, установленные на OS Windows
ботает под управлением ОС Windows, поддерживается ана- Server 2003. Принцип настройки взаимодействия c други-
лиз лог-файлов популярных прокси- и почтовых серверов ми поддерживаемыми ПП аналогичен. Если есть какие-ли-
для UNIX-систем. В данный момент WrSpy и утилиты под- бо особенности (например, настройка блокировки пользо-
держивают анализ лог-файлов следующих систем. вателей в Squid или Kerio WinRoute Pro 4), то они подробно
Proxy-серверы: WinRoute 4 Pro, Kerio WinRoute Firewall 5, описаны на официальном сайте WrSpy.
Kerio WinRoute Firewall 6, Kerio Network Monitor, BSB, Скачиваем дистрибутив (WrSpySetup.rar) и последнее
UserGate, Squid NT, Squid OS/2, WinGate, ISA, ExtraSystems обновление (WrSpyUpXXX.rar – где XXX номер версии) с
Proxy Server, WinProxy CZ, WinProxy, ISA2004. официального сайта программы (ссылки приведены в кон-
Почтовые серверы: WinRoute, MDaemon, Kerio Mail це статьи). Распаковываем архивы, устанавливаем основ-
Server, CommuniGate Pro, Postfix, SendMail, Weasel, WinProxy ной дистрибутив.
CZ и POPCon. Обратите внимание на предупреждение: «Будьте осо-
Помимо этого, на сайте программы имеется большое бенно внимательны, если в системе уже установлен Visual
количество отдельных утилит. FoxPro 6.0 (VFP6.0) или приложения, созданные с его ис-
Отдельные анализаторы для: MDaemon, Kerio Mail пользованием. Возможно нарушение их функционирова-
Server, Kerio Network Monitor, Serv-U, Apache, IIS. ния». Если при запуске обнаружится сообщение: «Несов-
падение версии файла ресурсов», то скорее всего в систе-
Системные требования ме установлен VFP6.0 или программа, из-под него писан-
Работа программы основана на анализе файлов форма- ная, с несовпадающей версией обновления. Чтобы обойти
та plain-text, что накладывает определенные требования данную ошибку, необходимо использовать режим полной
к производительности дисковой системы, процессорной установки поверх существующей версии VFP.
мощности и количеству памяти. Однако никаких минималь- Выполняем стандартные действия, отвечая на вопро-
ных требований нет, поскольку работоспособной окажет- сы инсталлятора о варианте установки и местоположении
ся практически любая система. С другой стороны, для по- файлов (рекомендуется устанавливать WrSpy на быстрые
лучения определенной скорости обработки лучше все-та- дисковые системы, как рекомендовалось выше). В конце
ки обеспечить разумный минимум. Тут все зависит от раз- установки отказываемся от запуска WrSpy (снимаем соот-
мера лог-файлов (соответственно – активности пользова- ветствующий флажок). Вы можете прочитать файл Readme.
телей) и необходимой частоты обновления статистики. Ес- txt (нажатием кнопки после завершения установки). В нем
ли размер анализируемых файлов не превышает 10-100 Мб кратко описываются принципы настройки, которые я рас-
в месяц, а статистику достаточно обновлять один-два ра- смотрю более подробно. Сразу после установки основно-
за в сутки, когда отсутствует активность пользователей, – го дистрибутива обновляем его до последней версии, за-
с поставленной задачей справится абсолютно любой ком- пустив файл обновления. Внимательно проверьте путь для
пьютер, на котором работают поддерживаемые програм- установки, так как инсталлятор не проверяет, куда именно
мные продукты. был установлен WrSpy. Это сделано не случайно, так как
При большом количестве пользователей, приросте раз- иногда требуется произвести несколько установок с раз-
мера лог-файлов до 1-2 Гб в месяц, рекомендуется реже об- ными настройками на один компьютер (например, для ана-
новлять статистику – 1-2 раза в сутки. При необходимости лиза архивных лог-файлов, не прерывая работу основной
более частого переиндексирования размещайте лог-файлы системы анализа). После установки обновления соглаша-
и формируемые отчеты на быстрых дисках SATA или SCSI. емся с предложением инсталлятора запустить WrSpy (ли-
Рекомендуется также озаботиться созданием ежедневных бо запускаем вручную файл WrSpy.exe). Запустится интер-
копий информации, находящейся на таком диске. Личный активная первоначальная настройка (рис. 1).
пример: для обновления статистики для 100 пользовате- Выбираем используемые нами прокси- и почтовый сер-
лей прокси-сервера Kerio WinRoute 4 Pro и 250 почтовых веры, задаем параметры сети (подсеть и маску). Созда-
ящиков Alt-N Mdaemon с интервалом один раз в час я ис- ем на диске папку для отчетов (именно в нее будут поме-
пользую компьютер следующей конфигурации: Intel Celeron щаться формируемые программой результаты) и указыва-
1.3 ГГц, 256 Мб RAM, 2 SATA HDD 40 Гб, SATA-RAID-1, OS ем путь к ней. Затем указываем пути к лог-файлам, а так-
Windows 2000 Server. же почтовые домены. Если какой-то из лог-файлов (почто-
При наличии неоспоримых достоинств этой програм- вый или прокси) анализироваться не должен – оставляем
мы, таких как подробнейшие отчеты (вплоть до того, ка- соответствующее поле пустым. Переходим к следующему
кой именно файл скачал конкретный пользователь с оп- экрану настроек (рис. 2).

№8, август 2005 37


администрирование
! Суммарный почтовый – входящий и исходящий почто-
вый трафик.
! Входящий почтовый – только входящий с детализаци-
ей по ящикам.
! Исходящий почтовый – только исходящий по почтовым
ящикам (можно отключить, в противном случае в отчет
попадут адреса получателей, которых может быть очень
много).
! Стоимость – рассчитанная стоимость потраченного тра-
фика, исходя из заданной стоимости 1 Мб. Внимание!
Не задавайте стоимость трафика равной нулю, так как
все внутренние расчеты программа ведет не в мегабай-
тах, а именно по итоговой стоимости. Если стоимость
непринципиальна – лучше просто скрыть эту графу из
раздела сводного отчета.
! Дата и время в имени – при включении этой опции WrSpy
будет формировать отчеты с разными именами файлов,
Рисунок 1. Список поддерживаемых продуктов
накапливая историю изменений. Я не использую этот
режим в ежечасной статистике – он полезен только для
формирования и архивации ежемесячного отчета.
! Учитывать служебный – при установке данного пере-
ключателя будет подсчитан не только «полезный» тра-
фик, но и зарегистрированные служебные пакеты.
! Почтовый бесплатно – почтовый трафик не будет учи-
тываться для ограничения трафика.
! Лимит по умолчанию – каждый новый пользователь ав-
томатически получит заданную квоту на период расче-
та (на месяц, неделю, день или ручной интервал).

Разделы сводного отчета:


! Открывать при создании – при установленном переклю-
чателе в интерактивном режиме после создания отчет
автоматически будет открыт.
! Сортировка по трафику – в HTML-отчете список пользо-
вателей будет выводиться в соответствии с использован-
ным трафиком – первыми будут идти «рекордсмены».
Рисунок 2. Настройка вида отчета
! Выделение цветом – наглядное отображение о прибли-
Обычно наибольшие трудности возникают при настрой- жении к персональному лимиту – от белого к красному.
ке именно этих параметров. Синий цвет графы пользователя означает, что персо-
Для краткости скажу, что обычно использую настрой- нальный лимит превышен и пользователь отключен.
ки, приведенные на рис. 2. Поясню функции каждого пе- ! Трафик по дням – при установке данной опции для каж-
реключателя: дого пользователя будет формироваться и сохранять-
Глубина анализа: ся в персональной папке дополнительный ежедневный
! Отчет по пользователям – анализ будет осуществлять- отчет (что, разумеется, увеличит нагрузку на систему).
ся по имени пользователя прокси-сервера.
! Отчет по станциям – учет по IP-адресам (DNS-именам) Формировать с головным – интеграция дополнитель-
станций независимо от имен пользователей прокси-сер- ных отчетов с основным:
вера. ! Сайты по пользователям – для ежечасного автомати-
! Отчет по почте – при анализе также будут учитываться ческого режима формирования отчетов рекомендует-
лог-файлы почтового сервера. ся включить только эту опцию – детализация трафика
! Отчет по группам – разделение пользователей по груп- пользователя по посещенным ресурсам.
пам (например, по отделам).
Остальные возможности используются не так часто, по-
Графы сводного отчета: этому для снятия нагрузки с системы их можно формиро-
! Группа – выводится статистика по заданным группам. вать только при необходимости в интерактивном режиме.
! Суммарный входящий – весь входящий трафик (прок- Например, очень интересен отчет «Бюджет времени», поз-
си и почтовый). воляющий получить общую картину активности пользовате-
! Суммарный прокси – суммарный трафик прокси-серве- ля в разрезе временного интервала. Данный режим не пред-
ра. назначен для временной тарификации – он всего лишь по-

38
администрирование
казывает приблизительные графики активности и относи-
тельно время, проведенное в сети. Для того чтобы понять,
чем занят сотрудник (если, конечно, серфинг по сайтам – не
его прямые обязанности), – этого вполне достаточно.
В следующем окне настроек задаем параметры режи-
мов анализа, а также рабочий интервал (рис. 3).
Минимально необходимо настроить два режима – ин-
терактивный и автоматический. Автоматических режимов
существует несколько. Каждый из них можно настроить в
соответствии со своими задачами – например, добавить
дополнительный режим для формирования и сохранения
ежемесячного отчета, так как после начала нового рабо-
чего периода отчеты обнуляются.
Режим «0» – интерактивный: формирование отчета про-
исходит в окне программы, в ручном режиме. Переключа-
тель «Блокировка пользователей» предназначен для при-
остановки доступа пользователям, превысившим свой пер-
сональный лимит в Kerio WinRoute 4 Pro или SquidNT, пос-
кольку в этих популярных продуктах нет встроенной систе-
Рисунок 3. Настройка режимов анализа
мы ограничения. В нашем случае этот влажок можно снять,
так как Kerio WinRoute Firewall уже имеет встроенную фун- На следующем экране «Учет реального трафика» необ-
кцию ограничения. Если вы используете Kerio WinRoute 4 ходимо указать, какой интерфейс является внешним. Дан-
Pro или SquidNT – включите этот режим и для интерактив- ный режим доступен для продуктов Kerio и может не поя-
ного, и для автоматического режима. Более подробно про виться при использовании других ПП.
настройку блокировки пользователей при использовании Последним шагом первоначальной настройки необходи-
этих продуктов можно прочитать на сайте программы. мо задать ширину полей формируемого отчета. Меню «На-
Итак, в режиме «0» включаем опцию «Отчет в html», от- стройка» – «Ширина полей» (из меню «Настройка» также
ключаем рассылку отчетов, при использовании Squid, ISA, можно изменить заданные при первоначальном запуске
ESPS или WinProxy указываем, какой трафик подсчиты- параметры). Помните, что чем больше задана ширина по-
вать (логичнее всего, конечно, считать «мимо кэша», так лей, тем дольше будет формироваться отчет, поэтому не-
как именно он берется снаружи. Задаем интервал сбора обходимо найти разумную середину. В принципе значения
статистики до обнуления (например, текущий месяц). по умолчанию оптимальны. Можно только увеличить поле
Затем настроим один из автоматических режимов. Пе- «адреса и доменные имена» до 30-40 символов.
реключаем опцию режим до «Автоматический-2» и также Если вы используете Kerio WinRoute Pro 4, то для на-
настраиваем его. стройки блокировки пользователей, превысивших персо-
Опция «Ротация логов» в настройках режимов позво- нальный лимит, создайте в конфигурации группу, которая
ляет настроить специальный режим для очистки накопив- не будет иметь никакого доступа к веб-ресурсам. После
шихся лог-файлов в тех ПП, которые не предусматрива- этого зайдите в меню «Настройка» – «Блокировка досту-
ют автоматическое удаление. Однако даже если указан- па» и выделите эту группу. При превышении персонального
ная возможность автоматической очистки лог-файлов при- лимита пользователь будет перенесен в нее и доступ пре-
сутствует в используемом вами прокси или почтовом сер- кратится. Настройка блокировки пользователей в SquidNT
вере – использовать указанный способ предпочтительнее описана на сайте программы.
во избежание потерь в логах. При запуске программы в Теперь произведем первичный ввод информации. Меню
данном режиме база отчетов очищается от введенной ин- «Данные» – «Очистка и закачка с нуля». Если лог-файлы
формации, сбрасываются внутренние счетчики, после че- велики, то потребуется довольно продолжительное время
го запускается файл savelog.bat из папки WrSpy. Универ- для первоначального ввода (дальнейший ввод будет быс-
сальность метода заключается в том, что в этот файл вы трее, так как чтение информации будет осуществляться
можете поместить любые команды, которые необходимо только с последней обработанной позиции).
выполнить после очистки базы данных WrSpy. Чаще всего После окончания ввода информации будет выдано со-
это копирование и архивация старых лог-файлов, секунд- общение о добавление новых пользователей и предложе-
ная остановка прокси и почтовых служб, удаление лог-фай- но исправить их. После утвердительного ответа мы полу-
лов, запуск служб. чим таблицу с четырьмя закладками:
Настройка «Рассылка отчетов» используется для опо- ! Адреса и имена. Здесь хранится информация о пользо-
вещения пользователей по e-mail о их персональном тра- вателях и их лимитах. Поле «Пользователь» заполняет-
фике. Для введения этого режима необходимо задать соот- ся автоматически, по логину пользователя. Для удобс-
ветствие почтовых адресов для пользователей и зарегис- тва восприятия значение этого поля можно менять на
трировать в системе дополнительную компоненту SMTP, любое, например на ФИО пользователя. Поле «Адрес»
которая доступна для скачивания на официальном сай- заполняется автоматически либо IP-адресом компью-
те программы. тера, с которого пользователь подключается к прокси-

№8, август 2005 39


администрирование
серверу, либо случайной последовательностью симво- ; запускаем программу с параметром "2" - указание номера
; режима
лов, если пользователь мигрирует между компьютера- wrspy.exe 2
ми (или наоборот – с одного IP подключались разные
пользователи). Поле «Логин» оставляем, как есть, а ли- Все! Настраиваем в любом планировщике задач за-
мит – также можно свободно изменять – каждому персо- пуск написанного нами bat-файла, повторяем задание с
нальный. При импорте новых пользователей это значе- необходимой периодичностью и проверяем работу систе-
ние берется из настройки «Лимит по умолчанию». Зна- мы в целом. Результатом будет автоматическая биллинго-
чение «0» – отсутствие ограничений. Если указать в по- вая система, не претендующая на абсолютную точность
ле «Группа» наименование подразделения – можно бу- (ведь подсчитывается только трафик, прошедший через
дет выводить отчет и суммарный трафик групп. прокси- и почтовый сервера, а не весь прошедший через
! Переходим на закладку «Почтовые сервера» и удаля- интерфейс), но полностью достаточная для малых и сред-
ем уже прописанные туда значения – там для примера них компаний.
указаны внешние почтовые сервера, которые должны Отчеты создаются в папке, указанной вами при перво-
восприниматься как корпоративные. начальной настройке (каталог отчетов). В зависимости от
! На закладке «Внешние ящики» (если мы импортирова- настроек они включают в себя различные файлы. При ука-
ли лог-файлы почтового сервера) будут внесены най- занных выше па-раметрах формирования отчетов на дис-
денные при обработке почтовые адреса. В поле «Поль- ке будет создана структура папок, соответствующая logon-
зователь» при этом будет автоматически подставлено именам пользователей и файлом общего отчета (Report.htm)
значение вида <@unknownNN>. Внимание! Если вы хо- в корне папки. Report.htm – это общий отчет, а html-файлы в
тите суммировать почтовый трафик пользователя с его персональных папках пользователей – детализация их ак-
трафиком на прокси-сервере – необходимо, сначала тивности. Для просмотра отчетов по сети просто организуй-
заполнив в закладке «Адреса и Имена» поле «Пользо- те общий доступ в эту папку. Однако из соображений кон-
ватель», в точности повторить значение этого поля для фиденциальности рекомендуется предоставлять пользова-
конкретных пользователей в строке его почтового ящи- телям доступ только к детализации их собственных отче-
ка. Только в суммарном отчете можно будет увидеть, тов. Если для авторизации на прокси-сервере используется
что почтовый трафик прибавился нужному пользовате- сквозная проверка (т.е. например, на контроллере домена),
лю. Если этого не сделать – трафик по почтовым ящи- то названия папок будут соответствовать их logon-именам.
кам будет выделен в HTML-отчете в отдельные строки. Делегировав права на чтение каждой папки только для со-
Все изменения отражаются только после обновления ответствующей учетной записи, вы создадите необходимый
информации в БД и формирования нового отчета. Уч- уровень конфиденциальности. Для удобства можно подклю-
тите, что отчет не обновится, если ни в одном из лог- чать поль-зователям папки с их персональными отчетами как
файлов не было изменений – программа поймет, что сетевой диск, используя переменные типа %USERNAME%
новой информации нет и анализировать ей, собствен- в сценарии входа в систему. При использовании такой ме-
но, нечего. тодики каждый пользо-ватель сможет самостоятельно кон-
тролировать свою активность, не имея при этом возмож-
После всех корректировок и переформирования отче- ности получить информацию о детализации трафика своих
та можно получить красивый и удобочитаемый отчет о тра- коллег, что соответствует принципам морали и неразглаше-
фике пользователей (если при первоначальных настрой- ния личной информации. При этом контролирующему руко-
ках была установлена опция «Открывать при создании», то
HTML-страница с отчетом будет открываться после каждо-
го формирования в интерактивном режиме).
Результат выглядит примерно так (см. рис. 4).
Кликнув по логину пользователя, можно просмотреть
подробную статистику – с какого ресурса и сколько было
скачано (см. рис. 5).

Настройка автоматического
формирования отчетов Рисунок 4. Общий отчет
Осталось решить главную задачу – обеспечение функцио-
нирования системы в автоматическом режиме, без участия
администратора. Здесь все крайне просто и удобно.
Формируем командный файл StartLog.bat для добавле-
ния новых данных и их анализа в пакетном режиме. Ранее
мы настроили для этого один из автоматических режимов.
Номер этого режима используется в качестве параметра
запуска исполняемого файла WrSpy.exe.

@echo off
; переходим в рабочую папку программы
cd /D c:\wrspy Рисунок 5. Подробный отчет по пользователю

40
администрирование
водству делегируются права на чтение всех отчетов, вклю- По таблице видно, что пользователь romadm закачивал
чая корневой отчет Report.htm. Просмотрев общую картину, с сайта speedownload.nai.com некие ZIP-архивы.
такой руководитель сможет самостоятельно просмотреть де- Отчет «Бюджет времени пользователя» покажет вам со-
тальную информацию об активности пользователя, не де- отношение времени, которое сотрудники проводят на веб-
ргая каждый раз системного администратора. сайтах. Обратите внимание – это не точное время, прове-
Детализация по пользователям крайне удобна для де- денное пользователем в сети, а относительная оценка вре-
мократичного регулирования ситуаций с превышением пер- мени, проведенного пользователем или станцией в Интер-
сонального лимита. Если пользователь жалуется на то, что нете, которая осуществляется косвенным методом. Однако
необходимо увели-чить ему квоту, так как это необходимо общую картину данный отчет хорошо показывает, и соглас-
для работы, достаточно просто совместно с ним просмот- но ему можно понять, кто «беспрерывно» занимается сер-
реть его подробную статистику. фингом по веб-сайтам. Принцип расчета довольно прост:
Весь интервал времени анализа разбивается на кван-
Создание истории отчетов ты от 1 до 30 минут. Величина кванта задается (см. рис. 2 –
Для того чтобы иметь возможность просматривать статис- «Интервал для учета бюджета времени») исходя из стиля
тику за предыдущие месяцы, не изменяя рабочий интервал работы ваших пользователей. Для быстрого серфинга –
и не формируя отчеты заново, рекомендуется настроить ав- меньшие значения, для длительного скачивания – большие.
томатиче-ское копирование статистики в конце выбранно- Если пользователь проявлял какую-то активность в тече-
го интервала. То есть написать скрипт создания архивных ние данного кванта, в его бюджет заносится его (кванта) ве-
копий и выполнять в последние часы перед сменой рабо- личина. Суммирование всех этих значений и дает величи-
чего интервала (например, в последний день месяца или ну оценки времени. Кроме того, формируется усредненное
недели – в зависимости от ваших настроек). распределение суммарного трафика по времени суток.
Например, используя консольную версию общеизвес-
тного архиватора WinRar – rar.exe можно создавать архи- Почтовые сервера
вы, содержащие рабочую дату в имени файла. Приведен- Отчеты, формируемые по лог-файлам почтовых серверов,
ный пример создаст файл Report_<текущая_дата>.rar и по- также удобны для восприятия и отличаются наличием более
местит в него содержимое папки E:\WrSpy\Report и всех ее глубокой статистики в интерактивном режиме. Возможна
подпапок, с максимальным сжатием, сохранением инфор- детализация по каждому пользователю (сколько писем, на
мации о правах и владельцах файлов. какой/с какого адреса, созданный трафик и пр.), наглядные
графики по самым активным пользователям и пр.
rar.exe a -m5 -os -ow -dh -ep1 -r ↵
-ag _ dd-mm-yyyy D:\BackUp\Report.rar ↵
E:\WrSpy\Report\*.* Анализ лог-файлов UNIX-систем
Как было упомянуто, WrSpy понимает форматы популяр-
ных UNIX-MTA и прокси. Для осуществления анализа дан-
Отчеты интерактивного режима ных файлов можно использовать два способа: анализ рабо-
В интерактивном режиме WrSpy позволяет формировать чих лог-файлов или их копий. Первый способ более прост,
еще более гибкие и удобные отчеты. Например, вы можете так как не придется копировать файлы большого размера
посмотреть – а какой именно файл скачал с определенно- (либо также писать обработку для копирования только но-
го ресурса конкретный пользователь. Запускаем програм- вых данных).
му без параметров, выбираем меню «По пользователям – В первом случае необходимо создать и предоставить се-
Файлы и сайты по пользователям». После вывода на экран тевой доступ к папке с этими файлами для учетной записи,
таблицы можно перемещаться по ней, выделяя курсором от имени которой WrSpy запускается в пакетном режиме.
интересующий нас ресурс и в нижней части просматривая Во втором случае данные файлы необходимо копиро-
список закачек (рис. 6): вать, что не всегда приемлемо по описанной выше причи-
не. Остальная работа с этими логами аналогична уже опи-
санной.
Я описал лишь некоторые, наиболее популярные воз-
можности программы WrSpy. Если ее функции показались
вам интересными – рекомендую установить ее для тести-
рования и самостоятельно оценить удобство (или неудобс-
тво – решать вам). Тем более, что никаких следов в ОС она
не оставляет и удаляется без последствий. Вкупе с этим –
наличие сайта поддержки и при этом абсолютная бесплат-
ность продукта делают его крайне привлекательным для
построения разнообразных отчетов.

Ссылки:
1. Официальный сайт программы: http://www.wrspy.ru. Дис-
трибутивы и обновления доступны для загрузки на глав-
Рисунок 6. Отчет «Файлы и сайты по пользователям» ной странице сайта.

№8, август 2005 41


администрирование

ЗНАКОМИМСЯ С HPC-КЛАСТЕРОМ OpenMosix


Большую часть времени ПЭВМ, скажем честно, простаивает.
Средняя загрузка не превышает 20%. Но как только
начинается сборка приложений, например на C++,
или оцифровка видео-, аудиофайлов, то становится
очевидным недостаток вычислительных ресурсов.
Основная идея HPC-кластеров – задействовать ресурсы,
свободные на других узлах кластера.
АНТОН БОРИСОВ
Что такое кластер ределенным количеством производителей и организация,
Кластер – это две или более самостоятельные системы, которая хотела купить суперкомпьютер, должна была об-
объединенные в единое целое посредством специального ладать немалым финансовым ресурсом. Естественно, что
программного и аппаратного обеспечения. Основное зве- большинство университетов не могли себе позволить тако-
но кластера – это единичный компьютер, называемый уз- го рода дорогую игрушку, поэтому в их недрах начала со-
лом. Кластеры могут расти – «масштабироваться» – путем здаваться концепция кластера для академических кругов.
добавления новых узлов. При этом синергетическое целое Цель данной концепции – подготовить условия для распа-
мощнее, нежели отдельный узел. Изменения в структуре раллеливания задачи между узлами, передать обработку
кластера, например, появление и удаление узлов из соста- подзадач на узлы и затем собрать результаты каждой под-
ва кластера (по разным причинам – авария или, наоборот, задачи. Кластер предполагалось собирать на PC-платфор-
восстановление после критической ситуации) фиксирует- ме, благо она становилась всё более и более распростра-
ся всеми оставшимися/новыми узлами. ненным явлением и по сути дешевой.

Типы кластеров Кластерные модели


На сегодняшний момент широко известны и распространены Существует несколько методов распараллеливания –
3 типа кластеров – отказоустойчивые (например, LifeKeeper – N(UMA), DSM, PVM и MPI. Некоторые из этих схем реали-
см. [1]), с балансировкой загрузки (Load-Balancing) и высо- зованы аппаратно, другие программно. Бывают и смешан-
копроизводительные (High-Perfomance Computing): ные решения:
! Отказоустойчивый кластер состоит из двух или более ! (N)UMA ((Non-)Uniform Memory Access) – узлы имеют до-
узлов, между которыми существует выделенное соеди- ступ к общей памяти, где выполняется код. Стоит отме-
нение (heartbeat), которое используется для обмена слу- тить, что в Linux-ядре есть NUMA-реализация.
жебной информацией между узлами. Как только какой- ! DSM (Distributed Shared memory) реализовано как про-
либо из узлов перестает функционировать, то второй граммно, так и аппаратно. Концепция этого метода за-
(резервный) узел берет его функции на себя. ключается в предоставлении уровня абстракции для
! Задача кластера с балансировкой нагрузки заключается физически распределенной памяти.
в том, чтобы перенаправить запрос, скажем к веб-сер- ! MPI (Message Passing Interface, интерфейс передачи со-
веру, к наименее загруженному в данный момент вре- общений) – это открытая спецификация для создания
мени узлу. По существу, этот тип кластера можно так- библиотек передачи сообщений. В частности, библио-
же назвать отказоустойчивым, только с дополнитель- тека MPICH – самое известное решение на базе MPI.
ным функционалом балансировки и с большим коли- Другое известное решение – библиотека LAM.
чеством узлов. ! PVM (Parallel Virtual Machine) является собратом MPI.
! В высокопроизводительном кластере узлы сконфи- Фунционирует PVM в пользовательском пространстве,
гурированы таким образом, чтобы общая производи- поэтому каких-то модификаций на уровне ядра не тре-
тельность была максимальной. В этом типе кластера буется. Пользователь с достаточными правами может
присутствуют и балансировочные механизмы – зада- запустить PVM.
ния распределяются между узлами. Самое интересное
в таком типе кластера – факторизация процесса (раз- Сущность OpenMosix
биение задачи на несколько параллельных подзадач). Пакет OpenMosix – это патчи к ядру Linux. На момент напи-
Процесс не ожидает освобождения CPU, а запускает сания этого материала существуют патчи для ядра 2.4.26
свои подзадачи на разных узлах. и для ветки 2.6. Так как OpenMosix реализован в виде пат-
чей, то сохраняется полная совместимость между програм-
Суперкомпьютеры и кластеры мами, файлами и другими ресурсами в Linux.
Традиционно ресурсоемкие математические вычисления Обычный пользователь может и не заметить изменений
выполнялись на суперкомпьютерах. Они выпускались оп- между Linux-машиной и OpenMosix-кластером, ибо послед-

42
администрирование
ний будет расматриваться как рядовая Linux-машина, толь-
ко немного производительнее. Внутренний механизм балан-
сировки прозрачно производит миграцию процессов на уз-
лы кластера. Оптимальная загрузка кластера вычисляется
динамически через определенные промежутки времени. Вы
также можете произвести нужную подстройку параметров
кластера. Прозрачный механизм миграции играет интерес-
ную роль – из-за него весь кластер выглядит как большая
SMP-машина со множеством процессоров (каждый узел в
роли процессора). В рамках OpenMosix разработана фай-
ловая система (oMFS) для HPC-приложений, которая в от-
личие от NFS поддерживает целостность ссылок, атрибу- Рисунок 1. Компоненты ядра, отвечающие за функционирование
ты времени и кеширование. OpenMosix
Сегодня в нашем обзоре в качестве узлов кластера бу- Для управления и тюнинга узлов в OpenMosix предус-
дут выступать 3 машины: мотрен специальный пакет утилит – openmosix-tools. Уста-
! Intel(R) Pentium(R) 4 CPU 1.80 ГГц (256 Мб ОЗУ) новим его.
! Intel Pentium III (Katmai) 602.149 МГц (256 Мб ОЗУ)
! Intel(R) Pentium(R) 4 CPU 3.00 ГГц (128 Мб ОЗУ) wget http://citkit.dl.sourceforge.net/sourceforge/ ↵
openmosix/openmosix-tools-0.3.6-2.tar.gz
# tar xzvf openmosix-tools-0.3.6-2.tar.gz
Все узлы соединены через хаб (100 МБит) в единое про- # cd openmosix-tools-0.3.6-2
# ./conÞgure --preÞx=/opt/OpenMosix ↵
странство. Операционная система, OC Linux, первоначаль- --with-kerneldir=/usr/src/linux-2.4.26-openmosix1
но установлена на самой быстрой машине, а затем была # make && make install
клонирована на все остальные. Стоит отметить, что при ус-
тановке, помимо базовых пакетов, также следует выбрать После установки этого пакета есть два варианта, каким
и QT-библиотеку (на базе QT мы впоследствии соберем именно образом узлы будут сообщать друг другу о своих
утилиты мониторинга кластера). характеристиках (загрузка, вычислительная мощность) и
Итак, первый шаг по установке и настройке ПЭВМ с яд- координатах (IP-адрес). Либо указать жестко в файле /etc/
ром по умолчанию пропускаем. Следует настроить SSH-сер- openmosix.map, либо положиться на сервис автоопределе-
вис, т.к. благодаря ему мы будем управлять узлами. ния узлов (omdiscd). Структура файла openmosix.map пред-
Далее заберем ядро (2.4.26) с включенными патчами ставлена ниже:
для OpenMosix (32 Мб):
# MOSIX-# IP number-of-nodes
wget http://citkit.dl.sourceforge.net/sourceforge/ ↵ # ============================
openmosix/ ↵ 1 10.0.0.1 1
openmosix-kernel-source-2.4.26-openmosix1.i386.rpm 100 0.0.0.100 1

Для экономии трафика можно взять только патчи и на- В первой колонке указывается номер узла (в моем слу-
ложить их на оригинальное ядро с kernel.org самостоятель- чае первый узел имеет номер 1, второй – 100), во второй
но (200 Кб): колонке IP-адрес, в третьей колонке – количество узлов в
диапазоне. Т.е. предполагая, что первые пять узлов имеют
wget http://citkit.dl.sourceforge.net/sourceforge/ ↵ последовательные адреса от 10.0.0.1 до 10.0.0.5 смысла их
openmosix/openMosix-2.4.26-1.bz2
перечислять нет. Стоит только указать, что количество уз-
# rpm -ih --nodeps ↵ лов равно в этом случае 5.
openmosix-kernel-source-2.4.26-openmosix1.i386.rpm
# cd /usr/src/linux-2.4.26-openmosix1/
# make xconÞg 1 10.0.0.1 5

Ставим галочки для компонентов OpenMosix (рис. 1), Так раздаются адреса статически. А для их динамическо-
остальные компоненты для ядра не изменяем, сохраняем го определения будет использоваться файл /etc/openmosix/
конфигурацию и собираем ядро. openmosix.config, где прописываются такие параметры, как:
! AUTODISCIF – имя интерфейса, через который произ-
# makedep&& make && make bzImage && make modules водит автопоиск (если на узле несколько сетевых ин-
# make modules _ install
терфейсов).
Добавляем нужную опцию в загрузчик. В случае lilo: ! MYOMID – номер данного узла.
! MIGRATE – разрешать ли процессам миграцию с дан-
image = /boot/mosix-bzImage ного узла или нет.
root = /dev/sda1
label = om.Linux ! MFS – использовать Mosix FileSystem или нет.
read-only

# /sbin/lilo -v Я пошел по пути динамического определения узлов и


для этого включил старт автоматического определения
И перезагрузка. omdiscd – добавил в /etc/rc.d/rc.local строку:

№8, август 2005 43


администрирование
/opt/OpenMosix/sbin/omdiscd -i eth0 #!/bin/sh

NODE1=/proc/hpc/nodes/573
Таким образом, при последовательном старте узлов NODE2=/proc/hpc/nodes/574
NODE3=/proc/hpc/nodes/575
вы можете отслеживать в логах процесс формирования
кластера: FILENAME=hpc _ load.txt
i=0
Jul 26 22:01:57 athlon kernel: openMosix #1 is at IP address 10.0.0.1
Jul 26 22:01:57 athlon omdiscd[1996]: Notified kernel to activate openMosix while true
Jul 26 22:02:55 athlon kernel: eth0: Setting full-duplex based on MII do
#1 link partner capability of 45e1. DateStr='date +%H-%M-%S'
Jul 26 22:04:11 athlon kernel: openMosix configuration changed: This is openMosix Load1='cat $NODE1/load'
#1 (of 2 configured)
Jul 26 22:04:11 athlon kernel: openMosix #1 is at IP address 10.0.0.1
Load2='cat $NODE2/load'
Jul 26 22:04:11 athlon kernel: openMosix #100 is at IP address 10.0.0.100 Load3='cat $NODE3/load'

echo "$DateStr ($i): $Load1, $Load2, $Load3" >> $FILENAME


Для того чтобы системные процессы (те, что отвечают echo "Time: $DateStr ($i). Load: $Load1, $Load2, $Load3";
за загрузку и выключение узла) не мигрировали на другие
i='expr $i + 1';
узлы, используем в файле /etc/inittab такую конструкцию: sleep 1s;
строки с участием директории rc.d:
done
si:S:sysinit:/etc/rc.d/rc.S Скрипт получился простеньким для понимания. Нагруз-
ку «в попугаях» мы трансформируем в график, где посмот-
перепишем так: рим, какое участие принял каждый конкретный узел в про-
цессе сборки.
si:S:sysinit:/bin/mosrun -h /etc/rc.d/rc.S Так как считается, что кластер в нашем случае – это еди-
ное пространство с увеличенным количеством процессо-
что дословно означает «запускать стартовый скрипт rc.S ров, то используем данный факт. Сначала посчитаем вре-
на домашнем узле». мя сборки, когда работает только один узел, самый быст-
Также следует поменять строки, где участвует rc.d, а рый. Предварительно распакуем MPlayer:
также строку:
# wget MPlayer
# tar xzvf MPlayer
ca::ctrlaltdel:/sbin/shutdown -t5 -r now # cd MPlayer
# ./conÞgure
которая будет выглядеть так:
Теперь запускаем наш скрипт collect_hpc_load.sh и счи-
ca::ctrlaltdel:/bin/mosrun -h /sbin/shutdown -t5 -r now таем время:

Все готово, чтобы первый настроенный узел клониро- # time make dep
# time make
вать на другие машины. Воспользуйтесь либо командой dd,
либо программой Norton Ghost. Затем в клонированных уз- real 0m19.068s
лах поменять IP-адреса, hostname, и дело в шляпе. user
sys
0m2.570s
0m16.410s
Для тестирования производительности сформирован-
ного кластера я решил проверить, за какое время будет real 5m11.963s
user 3m44.950s
собран MPlayer [2]. sys 1m26.410s

Тестируем быстродействие Включаем узел с самым медленным CPU. Теперь про-


Как я проводил замеры. Когда кластер обнаруживает новый изводим подсчет.
узел, он создает в виртуальном каталоге /proc/hpc/nodes real 0m20.693s
новую ветку, совпадающую с номером обнаруженного уз- user 0m2.670s
ла. Следует отметить, что весь каталог /proc/hpc относит- sys 0m17.450s

ся к функционированию OpenMosix. Таким образом, если real 5m17.013s


появляется новый узел с номером XXX, то автоматически user 4m5.820s
появляется каталог /proc/hpc/nodes/XXX, в котором хранят- sys 1m43.620s

ся файлы с характеристиками данного узла. В частности, Получили еще худший результат. Почему? Очень прос-
содержимое файла load нас и будет интересовать. Произ- то – у нас сформировалось много процессов, но с малень-
водительность узлов в OpenMosix оценивается по сравне- кими вычислительными запросами. Общее время мигра-
нию с виртуальной ПЭВМ класса Celeron 1 ГГц, поэтому не ции по 100-Мбитной сети плюс время компиляции превы-
удивляйтесь, когда увидите, что производительность кон- сило предыдущий результат.
кретного узла, например, равняется 20000. Это означает, Включаем третий узел с 1.8 ГГц CPU. Посмотрим на
что по сравнению с эталонным 1 ГГц данный узел в 2 раза цифры.
производительнее. real 0m24.860s
Итак, производим калькуляцию. Сохраним данный скрипт, user 0m2.800s
использующийся в наших подсчетах в дальнейшем. sys 0m17.610s

44
администрирование
real 4m18.754s # wget openmosixview-1.5.tar.gz
user 4m17.620s # tar xzvf openmosixview-1.5.tar.gz
sys 2m16.540s # cd openmosixview-1.5

Отлично. А что произойдет при отключении самого мед- Данное ПО написано на QT – надеюсь, вы его постави-
ленного узла? Отключаем, проверяем. ли, не забыли. Оно состоит из следующих программ:
real 0m23.539s
! openMosixview – приложение для мониторинга и управ-
user 0m3.260s ления кластера.
sys 0m17.580s ! openMosixprocs – приложение, показывающее процес-
real 4m24.304s сы и их свойства.
user 4m18.270s ! openMosixcollector – сервис по сбору статистики.
sys 2m14.320s
! openMosixanalyzer – приложение для анализа данных,
Выигрыш от медленного узла составил примерно 6 се- собранных сервисом статистики.
кунд. Как говорится – спорный результат. Стоит ли овчин- ! openMosixhistory – приложение, для просмотра мигра-
ка выделки – а именно, нужен ли третий узел? Очевидно ций процессов в определенный момент времени.
стоит отказаться в пользу двухузловой модели. ! openMosixpidlog – приложение для мониторинга еди-
Полученные результаты удобнее анализировать графи- ничных процессов.
чески. Импорт в OpenOffice и дальнейшее преобразование ! 3dmosmon – приложение для объемного мониторинга
в диаграммы закончилось получением этих рисунков. Си- кластера.
ним цветом отмечен узел на базе Pentium 4 CPU 3 ГГц, крас-
ным – узел Pentium 4 CPU 1.8 ГГц, белым – Pentuim 3 CPU К сожалению, у меня последняя программа не захоте-
600 МГц (рис. 2-5). ла собираться. Решение оказалось простым – при компи-
ляции приложения 3dmosmon следует заменить инициали-
Утилиты мониторинга зацию переменных в файле materials.h из вида:
Как производить текущий мониторинг загрузки? К счас-
тью, у OpenMosix достаточно широкая аудитория пользо- static material _ struct whiteMaterials = {
{1.0, 1.0, 1.0, 1.0},
вателей, благодаря которым появились утилиты визуаль- {0.0, 0.0, 0.0, 1.0},
ного контроля и управления. Нужный нам сейчас пакет на- {1.0, 1.0, 1.0, 1.0},
{20.0}
зывается openmosixview. };

Рисунок 2. Загрузка кластера при одноузловом варианте Рисунок 3. Загрузка кластера при двухузловом варианте
(оба узла Pentium 4)

Рисунок 4. Загрузка кластера при двухузловом варианте Рисунок 5. Загрузка кластера при трехузловом варианте
(один из узлов Pentium 3)

№8, август 2005 45


администрирование
в вид:

static material _ struct whiteMaterials = {


{1.0, 1.0, 1.0, 1.0},
{0.0, 0.0, 0.0, 1.0},
{1.0, 1.0, 1.0, 1.0}, 20.0
};

А для приложения mosstatd добавить ключи, чтобы стро-


ка выглядела следующим образом (красным шрифтом от-
мечены добавленные параметры):

gcc -I/usr/src/linux-2.4.26-openmosix1/include/ ↵
-I/usr/local/openmosix-tools/include/ -o mosstatd ↵
-L/usr/local/openmosix-tools/lib/ -lmos mosstatd.c

В итоге, запустив предварительно сервис сбора статис- Рисунок 6. Трехмерное изображение загрузки кластера
тики mosstatd (например, через инициализационный скрипт
/etc/rc.d/rc.local), мы сможем отслеживать загрузку класте-
ра в виде трехмерного изображения (см. рис. 6).

# 3dmosmon localhost

Сборка остальных программ достаточно тривиальна:


Рисунок 7. Визуальная картина загрузки посредством
утилиты openMosixview
# cd openmosixview
# make
# ./openmosixview Usage: mosctl command
Available commands: stay/nostay, lstay/nolstay, block/noblock, quiet/noquiet,
mfs/nomfs, expel, bring, gettune, getdecay,
По такому же принципу собираются и остальные ути- whois [mosix_no|IP-address|hostname],
getload [node-number], getspeed [node-number],
литы. status [node-number], getmem [node-number],
openMosixview – наглядный пример, какие узлы в дан- getfree [node-number], getutil [node-number],
getyard, setyard [node-type], setspeed speed,
ный момент загружены и общая картина по производитель- setdecay interval(seconds) slow(/1000) fast(/1000),
ности (см. рис. 7). isup [node-number]

Приведена ситуация, когда отключен наименее произ- ! mosctl whois node0 – выводит IP-адрес узла node0;
водительный узел. Отключение узла от кластера отобра- ! mosctl getload node0 – выводит загрузку узла node0;
жается индикатором красного цвета. ! mosctl getspeed node0 – выводит скоростную характе-
Графическая утилита openmosixmigmon позволяет, не ут- ристику узла node0;
руждая себя поисками PID конкретного процесса, перебро- ! mosctl gettune – выводит показатели для данного узла;
сить его выполнение на другой узел (см. рис. 8). ! mosctl bring – передает сигнал мигрированным процес-
В частности, некоторые процессы с головного узла уже сам для возврата на домашний узел.
насильно мигрированы к соседям и используют их вычис-
лительные мощности. Как видите, тот пример, что мы рассмотрели и исполь-
Следующая интересная утилита из данного пакета на- зовали в своей работе, можно переписать намного нагляд-
зывается openMosixanalyzer. Видна нагрузка как в целом нее при использовании утилиты mosctl.
на кластер, так и на отдельные узлы за определенный мо-
мент времени (см. рис. 9). # moslimit --help
А чтобы такая статистика велась на постоянной осно- Usage: moslimit command
ве, придуман сервис openMosixcollector, как видим из на- Available commands:
setloadlimit [numeric-value], setcpulimit [numeric-value],
звания, его работа заключается в сборе данных и сохра- setllimitmode [numeric-value], setcpulimitmode [numeric-value],
getloadlimit [node-number], getcpulimit [node-number],
нении их на диске. getllimitmode [node-number], getcpulimitmode [node-number],
Запускается он просто – «openmosixcollector -d» – ра- getloadlocal [node-number], getcpulocal [node-number],
getloadremote [node-number], getcpuremote [node-number]
ботает в качестве сервиса. Собранная информация раз в
сутки сбрасывается в директорию /tmp/openmosixcollector_ Для миграции процессов в пределах кластера предна-
ДАТА_ВРЕМЯ. значена утилита migrate.
Давайте теперь ознакомимся с утилитами по настрой-
ке кластера. # migrate --help
mosctl – утилита для просмотра/редактирования пара- Usage: migrate pid {OpenMosix-ID|home|balance}
метров узла.
Рассмотрим характерные конструкции на основе дан- А вот список процессов, который мы сможем увидеть
ной утилиты. при запуске утилиты ompsinfo.

# mosctl --help root@node0:~# ompsinfo

46
администрирование
Утилита mosmon предназначена для визуального отоб-
ражения текущей загрузки кластера. Она скомпилирована
на основе библиотеки ncurses, поэтому текстовой консоли
вполне будет достаточно для ее запуска.
Для запуска заданий предназначена утилита mosrun. С
ее помощью можно указать, к какому типу процессов при-
надлежит наше задание. Либо это CPU-intensive, т.е. за-
дание, использующее процессорные ресурсы, либо I/O-
intensive – задание, где основной упор делается на про-
цесс ввода/вывода.
Usage: mosrun [-{h|OpenMosix_ID|-jID1-ID2[,ID3-ID4]...} [-F] ] -{l|L|k}
[-{c|i|n|s|f | ([-d dec] [-t tt])} [-{e|E}] [-{r|R}] ]
[-z] prog [args]..

Утилита showmap выводит список узлов кластера.

root@node0:~# showmap

My Node-Id: 0x023d

Base Node-Id Address Count


------------ ---------------- -----
0x023d 192.168.2.61 1
0x023f 192.168.2.63 1

Рисунок 8. Контроль за миграцией процессов в кластере Сервис, отвечающий за динамическое определение уз-
лов кластера. В частности, когда на узле используется не-
сколько сетевых интерфейсов, следует явно указать, по ка-
кому из них проводить идентификацию узлов.

omdiscd-i eth0

Выводы
Как и в любом аспекте нашей жизни можно найти минусы и
плюсы, так и решения на базе OpenMosix-кластера содер-
жат некие «узкие» точки. В частности, оцифровка звуковых
файлов из формата .wav в формат .mp3 показала, что об-
щее время процесса обработки на кластере превысило ана-
логичное время на одной ПЭВМ. Повлияла на столь стран-
ный результат низкоскоростная среда передачи данных –
100-мегабитная сеть. В целом применение OpenMosix-клас-
Рисунок 9. Статистика по загрузке кластера в определенное теров целесообразно в тех случаях, когда требуется исполь-
время
зовать задачи с высокими интенсивными вычислительны-
CMD PID NODE NMIGS LOCK CANTMOVE ми запросами, например сборка программного обеспече-
init
keventd
1
2
0
0
0
0
0 system
0 clone_vm
ния (как показано в этой статье), симуляторы погоды, об-
ksoftirqd_CPU0 3 0 0 0 clone_vm работка геофизических данных, математических моделей
kswapd 4 0 0 0 clone_vm
bdflush 5 0 0 0 clone_vm и в других подобных ситуациях .
kupdated 6 0 0 0 clone_vm
khubd 8 0 0 0 clone_vm
kjournald
oM_migd
10
11
0
0
0
0
0 clone_vm
0 system, clone_vm
Ссылки, литература:
oM_infoD 12 0 0 0 system, clone_vm, rt_sched 1. Борисов А. «Стальной глаз на страже жизни». HA-клас-
memsorter
syslogd
13
62
0
0
0
0
0 system, clone_vm
1 migratable but locked
тер LifeKeeper компании SteelEye. – Журнал «Системный
klogd 65 0 0 1 migratable but locked администратор», №7, 2004 г. – 43-49 с.
inetd 340 0 0 1 migratable but locked
sshd 343 0 0 0 migratable 2. http://www.mplayerhq.hu.
crond
gpm
351
360
0
0
0
0
1 migratable but locked
1 migratable but locked
3. http://openmosix.sourceforge.net.
agetty 362 0 0 0 migratable 4. http://www-128.ibm.com/developerworks/eserver/articles/
agetty 363 0 0 0 migratable
agetty 364 0 0 0 migratable openmosix.html.
agetty
agetty
365
366
0
0
0
0
0 migratable
0 migratable
5. http://howto.x-tend.be/openMosixWiki.
agetty 367 0 0 0 migratable 6. http://howto.x-tend.be/openMosix-LCA2005.
omdiscd 398 0 0 0 migratable
mosstatd 476 0 0 0 migratable 7. http://tab.snarc.org/article/om_internals.xhtml.
sshd
bash
2778
2780
0
0
0
0
0 migratable
0 migratable
8. http://www.samag.com/documents/s=9658/sam0505a/
ompsinfo 2852 0 0 0 migratable 0505a.html.

№8, август 2005 47


администрирование

УПРАВЛЯЕМ УДАЛЕННЫМИ
БАЗАМИ AIDE

В один прекрасный день вы решаете оснастить


все ваши сервера программой локального
контроля от вторжений AIDE. Осуществлению
этого, несомненно правильного желания
мешает только одно – сервера территориально
разбросаны, а хотелось бы хранить базы AIDE
на съемных носителях... Сегодня мы расскажем
вам, как собрать данные со всех компьютеров,
не вставая с места.

РАШИД АЧИЛОВ

П
рограмма AIDE позволит вам контролировать из- нированного перехвата. Программа копирует базы на смен-
менения, происходящие в файловой системе. Для ный носитель небольшого физического размера, а также
этого она создает отдельную базу данных, содер- сохраняет несколько поколений баз на сменном носителе
жащую информацию об атрибутах файлов – дате и време- большого обьема.
ни создания, дате и времени модификации, размере, вла- Нужно ли защищаться от перехвата данных базы? Даже
дельце. База также содержит контрольную сумму содер- при невозможности ее модификации база все равно остает-
жимого файла для проверки его на неизменность содер- ся лакомым куском, потому что содержит список всех фай-
жимого. Контрольная сумма шифруется различными мето- лов (кроме тех, которые были исключены через конфигура-
дами для исключения возможности ее подделки. Правиль- ционный файл) с указанием их имен, размеров, дат созда-
ное использование AIDE гарантирует в достаточной степе- ния и владельцев, а это уже сама по себе немалая инфор-
ни неизменность файлов. Но вот работают несколько сер- мация. Поэтому копирование баз будем производить через
веров, на них всех установлена AIDE, базу которой реко- SSH с использованием скрипта, описанного в [1].
мендуется хранить на сменном носителе с целью не допус- Двойное копирование последнего поколения базы необ-
тить попадания ее в чужие руки. Как реализовать это тре- ходимо потому, что последнее поколение хранится «под ру-
бование? Не вручную же копировать базу с каждого сер- ками» – там, где контроль за неизменностью файлов ведет-
вера? Для автоматизации этой задачи и был разработан ся чисто визуально. Дубль же последнего поколения, а так-
скрипт AIDEControl. же несколько предыдущих поколений хранятся на RW-дис-
Итак: ке в сейфе, там же, где хранятся резервные копии данных.
! Базы AIDE на всех наших серверах размещаются При необходимости вы всегда сможете сравнить две ко-
(по умолчанию) в /var/db/aide/aide.db. пии, а также провести анализ, как изменялся тот или иной
! Обновление базы производится сторонними средства- файл (по предыдущим копиям базы).
ми (вручную, через cron или с помощью скриптов). На рис. 1 изображена связь между мастер-компьюте-
ром, компьютерами, с которых собираются базы, и носите-
Мы рассмотрим программу автоматического копирова- лями. Для каждого приведено расположение файлов базы
ния баз AIDE с множества удаленных машин на некую цен- AIDE в процессе работы скрипта. Следует учесть, что это
тральную машину, обеспечивающую при этом невозмож- расположение баз именно в процессе работы скрипта, по-
ность использования данных базы в случае ее несанкцио- тому что, когда база скопирована на мастер-компьютер, она

48
администрирование
стирается с удаленного компьютера, а при завершении ко-
пирования на Flash она удаляется и с мастер-компьютера.
Для подключения к удаленным компьютерам скрипт
использует пользовательский бюджет с именем aide. Это
бюджет не для запуска скрипта, запуск скрипта делается
только пользователем root. Скрипт реализован на языке
Bourne shell, с использованием типового комплекта инс-
трументов – sed, awk, grep.
В качестве мастер-компьютера использовался компью-
тер с операционной системой FreeBSD 5.3-RELEASE, USB
Flash Seitek BAR 128 Мб и CompactFlash PQI 128 Мб. Рабо-
та в других UNIX-системах не проверялась.

Какое программное обеспечение


потребуется
Для работы скрипта необходимо установить и настроить
соответствующим образом следующее програмное обес-
печение:
! SSH2 от SSH Communications или OpenSSH с подде-
ржкой протокола SSH2. SSH должен быть настроен на Рисунок 1. Расположение баз AIDE на «мастере»
возможность работы без предъявления паролей, с ав- и удаленных компьютерах
торизацией по публичному ключу. Описание того, как ! в файле /etc/usbd.conf опишите Flash таким образом,
это сделать, вы найдете в [1] . Единственное отличие – чтобы при ее установке происходило автоматическое
для авторизации используется имя пользователя aide. монтирование. Для этого добавьте в файл /etc/usbd.conf
Для FreeBSD устанавливается из портов secuirty/ssh2- следующие строки:
nox11.
! Bzip2. Для FreeBSD Bzip2 является стандартной програм- # Generic USB Flash drive (umass0)
device "USB Flash Drive"
мой и поставляется вместе с системой. При отсутствии devname "umass[0-9]+"
его программа выдаст предупредительное сообщение vendor 0x058f
product 0x9380
и аварийно завершит работу. release 0x0100
! Mkisofs и CDRecord. Программа из состава продвинуто- attach "/sbin/mount /mnt/umass"
го программного пакета cdrtools для создания и записи
ISO-образов. Для FreeBSD устанавливается из портов где vendor, product и release берутся из вывода usbd, за-
sysutils/cdrtools. пускаемого с ключом -dv. Для каждого типа Flash зна-
! Скрипт для пакетной записи ISO-образов BurnISO. Ска- чения отличаются!
чать его вы можете с домашней страницы [2].
! AIDE должна быть создана на каждом компьютере, с ко- Вы должны подставить свои значения, получив их сле-
торого предполагается их копировать, и располагаться дующим образом:
в каталоге по умолчанию /var/db/aide. Для FreeBSD ус-
танавливается из портов seciruty/aide. # usbd -dv
usbd: opened /dev/usb0
usbd: opened /dev/usb1
Настраиваем систему usbd: opened /dev/usb2
Вам потребуются: usbd: opened /dev/usb3
usbd: reading configuration file /etc/usbd.conf
! в /etc/fstab описания следующих точек монтирования: usbd: opened /dev/usb
usbd: device-attach event at 1121236066.985133000, Mass Storage Device, Generic:
! /cd-rw (или любую другую, описанную параметром vndr=0x058f prdct=0x9380 rlse=0x0100 clss=0x0000 subclss=0x0000 prtcl=0x0000

cdrwdevmp конфигурационного файла) для монти-


device names: umass0

рования RW-диска с полным комплектом поколений vndr – vendor (в данном случае 0x058f), prdct – product (в дан-
баз, например: ном случае 0x9380), rlse – release (в данном случае 0100)
подставляются в соответствующие места файла /etc/usbd.
/dev/acd1 /cd-rw cd9660 ↵ conf. Файл читается один раз при старте программы, поэ-
ro,noauto,noexec 0 0
тому для активации внесенных изменений usbd необходи-
! /mnt/umass (или любую другую, описанную парамет- мо перезапустить:
ром usbdevmp конфигурационного файла) для мон-
тирования Flash для хранения последнего поколения # killall usbd
# usbd
баз AIDE, например:
Внимание! Крайне не рекомендуется завершать работу
/dev/da0s1 /mnt/umass msdos ↵ usbd, запущенного с ключами -dv тогда, когда в USB встав-
rw,noauto,-l,-Wkoi2dos 0 0
лено какое-либо устройство, особенно если оно работает
(подробное описание полей fstab см. man fstab). по протоколу USB 1.1! Было замечено стабильное полное

№8, август 2005 49


администрирование
зависание системы, из которого можно выйти только нажа- remote2 10.87.2.254
remote3 10.87.2.120
тием «Reset». Настоятельно рекомендую сначала извлечь master 127.0.0.1
устройство, а потом завершать работу usbd.
Система должна обладать возможностью смонтировать Последняя запись отражает тот факт, что сам «мастер» мо-
USB Flash, а также обладать возможностью работать с IDE жет рассматриваться и как «агент». Для этого необходимо
СD-ROM как со SCSI. Для этого в конфигурационном фай- указывать в качестве IP-адреса 127.0.0.1.
ле ядра системы должны присутствовать (а если их нет, то AIDE на всех компьютерах, кроме «мастера», настра-
просто добавьте) следующие строки: ивается на путь к базе /var/db/aide/databases/aide.db. Пос-
ле копирования базы на «мастер» она удаляется. На «мас-
device umass тере» в каталоге databases создаются подкаталоги с име-
device scbus
device da нами, соответствующими именам в файле описания узлов
device pass (remote1, remote2,...), в которые база помещается на время
device cd
device atapicam копирования на Flash и RW-диск. После успешного копи-
device ata рования на съемные носители база удаляется с «мастера»
и существует только на съемных носителях.
после чего ядро системы должно быть пересобрано в со- Конфигурационный файл программы по формату пре-
ответствии с инструкциями по его пересборке, приведен- дельно прост: поскольку сама программа написана на язы-
ными, например в [3]. ке Bourne Shell, загрузка конфигурационных файлов про-
Кроме того, понадобится один носитель CompactFlash водится выполнением файла и, следовательно, формат
или USB Flash емкости, достаточной для того, чтобы вмес- имеет вид «имя=значение». Имя файла по умолчанию –
тить одно поколение копий баз со всех нужных компьюте- /usr/local/etc/aidecontrol.conf, все возможные переменные
ров, упакованное Bzip2, и один CD-RW или DVD-RW-диск описаны непосредственно в тексте файла. Пример файла
для хранения необходимого количества предыдущих по- приведен в Приложении 2 (см. www.samag.ru, раздел «Ис-
колений. ходный код»).
Полный текст скрипта приведен в Приложении 1 (см.
www.samag.ru, раздел «Исходный код»). Он снабжен доста- Блок-схема программы
точно подробными комментариями, а наиболее важные и Блок-схема программы приведена на рис. 2. Сбоку, на вы-
интересные моменты мы обсудим далее по ходу статьи. носках отмечены метки блоков, приводимые в комментари-
ях текста скрипта в Приложении 1 (см. www.samag.ru, раз-
Общее описание логики работы дел «Исходный код»).
и конфигурационный файл Первыми выполняются анализ командной строки и ус-
Предполагается, что «мастер» – доверенная машина. тановка значений, заданных в параметрах. Соответствую-
На рис. 1 показано размещение баз AIDE в процессе их об- щая метка в скрипте – CMDLINE.
работки скриптом. Общая связь между программами та- Возможные ключи командной строки:
кова: ! -c – указывает расположение конфигурационного фай-
! AIDE создает свою базу на каждом из компьютеров. ла. Если не задан, используется /usr/local/etc/aidecontrol.
! aidecontrol переписывает (именно переписывает, а не ко- conf.
пирует – после успешного копирования файл удаляется ! -l – указывает расположение файла списка узлов, фор-
с компьютера «агента») ее с удаленной машины («аген- мат которого приведен выше. Если не задан, использу-
та») на центральную машину («мастер») в свой каталог ется /var/db/aide/maint/aidehosts.
(показан на рис. 1, на компьютере Master, в рамке сле- ! -b – указывает на то, что будет установлен чистый RW-
ва). После чего aidecontrol запрашивает у оператора диск, который не нужно монтировать для копирования
установку RW-диска, монтирует его в указанную точку предыдущего содержимого.
монтирования, считывает его содержимое, дополняет ! -h – выведет краткую справку по формату командной
новым поколением и записывает заново. Для копиро- строки.
вания используется временный рабочий каталог, кото-
рый создается в процессе работы и после завершения Таким образом:
работы удаляется. Расположение файлов в момент, ког-
да они скопированы во временный каталог, приведено // запустит скрипт с параметрами по умолчанию
# aidecontrol
на рис. 1, на компьютере Master, справа. Расположение // запустит скрипт с параметрами из конфигурационного
файлов на съемных носителях (Flash и RW-диске) при- // файла /tmp/abcd.conf
# aidecontrol -c /tmp/abcd.conf
ведено на рис. 1, в нижней части на соответствующих // запустит скрипт со списком узлов из файла /tmp/nodes.lst
выносках. // и чистым RW-носителем.
# aidecontrol -l /tmp/nodes.lst -b

Все компьютеры, базы с которых должны собираться, Если в командной строке был задан вывод краткой
описываются в файле описания узлов. Формат его очень справки, то она выводится и скрипт завершает работу, ина-
простой: че выполняется загрузка конфигурационного файла.
После загрузки выполняется поиск вспомогательных
remote1 10.87.2.60 программ. Он имеет такую особенность, что программы,

50
администрирование
которые необходимы для работы, перечислены непосредс-
твенно в переменной wtools. Причем в этом списке не упо-
минается mkisofs, потому что burniso сам проверит ее на-
личие. Соответствующая метка в листинге WTOOLS. Эта
часть показалась мне достойной более подробного рас-
смотрения, которое приведено ниже.

wtools="bzip2 burniso"

for tool in $tools


do
# Вот это список программ, без которых работа невозможна
# (не считая SSH)
locator=`which $tool`

# Если which вернул пустую строку (а это происходит тогда,


# когда программа не найдена – ее физически нет
# или каталог не включен в PATH), то выдать сообщение
# и прекратить работу
if [ -z $locator ]; then
logline="Your system does not include $tool utility"; ↵
safe _ logger
exit
Þ
done

Реализация поиска SSH в скрипте полностью анало-


гична реализации скрипта safecopy, описанного в [1]. Со-
ответствующая метка в листинге SEARCHSSH. Дополни-
тельно процесс поиска описан в комментариях в тексте
скрипта.
После того как проверено наличие всех необходимых
программ, начинается разбор списка узлов. Этот разбор
будет делаться в течение работы скрипта неоднократно,
но особенности процесса его выполнения будут рассмот-
рены один раз.
Разбор производится посредством простого чтения фай-
ла командой cat. Для построчной работы с файлом исполь-
зуется особенность работы с потоком стандартного ввода,
которая заключается в том, что при чтении файла все про-
читанное разбивается на «поля», где значение переменной
IFS используется как разделитель. Если изменить ее зна-
чение, а потом прочитать файл, разбиение на «поля» будет
выполняться в соответствии с новым значением IFS. Пос-
кольку нам необходимо разобрать по записям (строкам),
используется следующая конструкция:

IFS="
"

Внимание! Значение «IFS=’’», перенесенное на сосед-


нюю строчку, – это не ошибка! Таким образом IFS присва-
ивается значение «конец строки» (\n), после чего организу-
ется обычный цикл перебора всех записей файла.
Если адресом компьютера является 127.0.0.1, то выпол-
няется локальное копирование, то есть просто копирова-
ние базы AIDE в то место, откуда она впоследствии будет Рисунок 2. Блок-схема скрипта AIDEcontrol
перенесена на съемный носитель. Соответствующая метка содержать ни одного, что будет указывать на ошибку). Со-
в листинге LOCALCOPY. Если же нет – предполагается уда- ответствующая метка в листинге RMTCOPY.
ленный компьютер и выполняется копирование с удален- Если при запуске скрипта не было указано, что уста-
ного компьютера. Процесс получения списка файлов, под- новлен чистый носитель, то RW-диск монтируется и его со-
лежащих копированию, и собственно процесс копирования держимое копируется во временный каталог, создаваемый
полностью аналогичны процессу, описанному в [1]. Процесс в корневом каталоге системы. Соответствующая метка в
получения списка файлов здесь вырождается просто в еще листниге MNTRWDISK.
одну проверку правильности настроек SSH, поскольку спи- Особенности монтирования съемных носителей состо-
сок файлов может содержать только один элемент (или не ят в том, что их наличие проверяется в бесконечном цикле

№8, август 2005 51


администрирование
до тех пор, пока носитель не будет установлен и подклю- ным количеством поколений баз является использование
чен. Сделано так потому, что на первом этапе базы не ко- скрипта burniso. Этот скрипт был написан для автоматиза-
пируются, а переносятся на «мастер» и при отмене и пов- ции задачи «взять все файлы, лежащие в определенном
торном запуске скрипта базы не будут найдены. Поэтому месте и записать их на RW, предварительно его почистив».
лучше разобраться с причиной невозможности смонтиро- Для создания образа burniso использует mkisofs, а для за-
вать диск (а это, как правило, банальная причина – опу- писи – cdrecord.
щен ключ -b при установке чистого диска, отсутствует или Скрипт имеет собственный конфигурационный файл
неверно указана точка монтирования и т. д) и попытать- burniso.conf, синтаксис которого полностью аналогичен
ся смонтировать его повторно. После каждой безуспеш- синтаксису aidecontrol.conf. В нем можно указать три пере-
ной попытки смонтировать диск программа спрашивает, менных: workdir – каталог, в котором будет создаваться об-
не желаем ли мы пропустить попытку монтирования дис- раз для последуюшей записи, devname – имя устройства
ка. Если согласиться с ней и монтирование диска пропус- для записи дисков и sourcedir – каталог, из которого будут
тить, то диск будет помечен как чистый, чтение с него вы- браться файлы для записи на RW. Имя устройства зада-
полняться не будет, все его предыдущее содержимое бу- ется в формате cdrecord в виде «bus,target.lun», например
дет перезаписано. devname=«2,1,0».
Если RW-диск успешно смонтирован, то происходит ре- Внимание! Приведенные выше значения являются при-
организация его содержимого – файлы, поколение кото- мером использования. На вашей системе они будут отли-
рых превышает максимально хранимое поколение, будут чаться! Получить значения, которые необходимо подста-
удалены, остальные переименованы в следующее поколе- вить сюда, можно командой:
ние. Процедура последовательного переименования фай-
лов (filename.0.ext → filename.1.ext → filename.2.ext и т. д.) # camcontrol devlist
будет описана несколько более подробно. Метка процеду- <SEAGATE DAT 9SP40-000 9030> at scbus0 target 6 lun 0 (sa0,pass0)
ры в листинге – RENAME, метка самой процедуры реорга- < DVD-E616P2 1.03> at scbus2 target 0 lun 0 (pass1,cd0)
<TEAC CD-W58E 1.0A> at scbus2 target 1 lun 0 (pass2,cd1)
низации – RWREORDER.
В данном случае использовалось устройство TEAC
shiftÞles() CD-W58E (2,1,0).
{
# Получаем список файлов в каталоге Более подробную информацию о возможностях cdrecord
lÞles=`ls -1` см. man cdrecord.
# Обрабатываем по одному элементу списка до тех пор, Запись диска может идти достаточно долго, перед нача-
# пока он не пуст лом записи cdrecord выводит большое количество инфор-
for lÞle in $lÞles
do мации о приводе, о диске, на который будет идти запись,
# Выбираем номер поколения (указываем awk, что разделителем о режимах работы... Ход выполнения записи отображает-
# полей является точка, и печатаем второе поле)
gener=`echo $lÞle | awk 'BEGIN {FS="."} {print $2}'` ся на консоли в виде:
# Дополнительная защита – если в качестве номера поколения
# выбрали «bz2», значит в каталоге находится файл Þlename.bz2, Starting to write CD/DVD at speed 8 in real TAO mode for single session.
# который не переименован из-за какой-либо ошибки. Last chance to quit, starting real write 0 seconds. Operation starts.
# Корректируем эту ситуацию, подразумевая нулевое Waiting for reader process to fill input buffer ... input buffer ready.
# (самое последнее) поколение Performing OPC...
if [ $gener = "bz2" ]; then Starting new track at sector: 0
logline="Invalid database Þle name $lÞle, assumed ↵ Track 01: 6 of 6 MB written (fifo 100%) [buf 98%] 8.2x.
zero generation"; safe _ logger Track 01: Total bytes read/written: 6391808/6391808 (3121 sectors).
Writing time: 9.625s
gener=0
Average write speed 4.3x.
mv $adbnam.bz2 $adbnam.$gener.bz2 Min drive buffer fill was 98%
Þ Fixating...
Fixating time: 31.892s
# Если номер поколения равен максимально хранимому cdrecord: fifo had 101 puts and 101 gets.
# поколению, этот файл удаляется. Иначе вычисляется cdrecord: fifo was 0 times empty and 27 times full, min fill was 95%.
# следующий номер и файл переименовывается.
if [ $gener -eq $abmax ]; then После записи диска со всеми поколениями копий вре-
rm -f $adbnam.$gener.bz2
else менный каталог, в котором создавался образ для записи
ngener=$(($gener+1)) на RW-диск, удаляется.
mv $adbnam.$gener.bz2 $adbnam.$ngener.bz2
Þ Последней фазой работы скрипта является перенос на
done Flash последней копии баз по всем узлам. Для этого снача-
}
ла монтируется Flash. Монтирование происходит аналогич-
В случае когда выполнялась установка чистого носите- но монтированию RW-диска – в бесконечном цикле.
ля, то копировать нечего и просто создается пустой каталог Ваша система должна быть уже настроена на автома-
для копирования в него последнего поколения баз. тическое монтирование Flash при ее установке. О том, как
это сделать, написано в разделе «Настраиваем систему».
if [ $blank = "no" ]; then Вполне возможно, что /sbin/mount не будет успевать отра-
shiftÞles
Þ ботать монтирование устройства в FreeBSD 5.x, посколь-
ку файлы устройств здесь создаются динамически, а devfs
cp $ringdir/$hostname/$adbnam.bz2 ./$adbnam.0.bz2
имеет некоторое время срабатывания. В особенности это
После этого выполняется запись нового содержимо- проявляется на старых Flash 1.1 типа Seitek BAR – требуе-
го RW-диска. Особенностью записи нового образа с пол- мая задержка может достигать двух секунд. Для избежа-

52
администрирование
ния этого был разработан скрипт mountflash, приведенный в ны копироваться базы. Если сразу же открывается терми-
Приложении 3 (см. www.samag.ru, раздел «Исходный код»). нал удаленного компьютера – все нормально (при этом motd
Скрипт может запускаться как вручную, так и через /etc/ показываться не должно). Если же появляются запрос па-
usbd.conf. В последнем случае строка attach должна иметь роля на разблокирование ключа, запрос пароля на регис-
следующий вид: трацию на удаленном компьютере или какие-либо сообще-
ния об ошибках – следует устранить ошибки и повторить.
attach "sh -c '/usr/local/bin/mountßash /mount/point'" Все наиболее типичные ошибки, связанные с настройкой
SSH для автоматического копирования файлов с исполь-
где /mount/point – точка монтирования Flash. По умолча- зованием метода авторизации по публичному ключу, при-
нию точка монтирования – /mnt/umass. Метка монтирова- ведены в [1].
ния Flash в листинге – MNTFLASH. Наиболее часто встречающиеся ошибки, не связанные
В очередной раз выполняется разбор файла описания с настройками SSH:
узлов и по одному узлу за один проход выполняется копи- ! Неверно указанные пути к каталогам баз AIDE либо раз-
рование файлов из соответствующего каталога на мастер- личные пути для различных компьютеров, из-за чего ба-
компьютере в соответствующий каталог на Flash. Если ко- зы не могут быть скопированы.
пирование файла прошло успешно, файл удаляется с мас- ! Неверно указана точка монтирования RW-диска, ука-
тер-компьютера. Метка в листинге – FLASHCOPY. занная точка монтирования не описана в /etc/fstab, RW-
Последней задачей скрипта является размонтирование диск помещен не в тот привод (когда на мастер-компью-
Flash и останов устройства. Эта часть будет рассмотрена тере более одного привода, а это не редкость).
более подробно ниже по тексту. ! Неверно указана точка монтирования Flash, указанная
точка монтирования не описана в /etc/fstab, для данно-
# /dev/da0s1 го типа Flash не настроен /etc/usbd.conf.
mpdev=`mount | grep -e "$usbdevmp " | awk ↵
'{print substr($1,6,3)}'` ! Система не поддерживает монтирование USB Flash.
# Размонтировать Flash
umount $usbdevmp Наиболее уязвимым является процесс монтирования и
status=$? размонтирования Flash, поскольку он требует значитель-
# Проверить статус размонтирования и выдать сообщение, ного числа предварительных настроек. Для проверки ус-
# если неудачно пешного монтирования Flash следует запустить usbd в ре-
if [ $status -ne 0 ]; then
logline="USB Flashdrive unmounting on device $usbdev ↵ жиме отладки и посмотреть, не появляются ли сообщения
failed, return code is $status"; safe _ logger об ошибках во время процесса монтирования Flash. Следу-
else
logline="USB Flashdrive was succesfully unmounted ↵ ет учесть, что даже для Flash одного типа могут быть раз-
after updating content"; safe _ logger ные release. Гарантированно одинаковыми являются толь-
# Найти устройство, на которое смонтировалась Flash. ко Flash из одной коробки.
# Устройство находится поиском в выводе команды
# camcontrol devlist строки «(<имя _ устройства»,
# например «(da0» Заключение
umdrive=`camcontrol devlist | grep -e "($mpdev"` Данный скрипт – инструмент, который поможет вам решить
# Выбрать BUS. Ищется строка «scbusX», потом берется одну конкретную задачу. Несмотря на кажущуюся громозд-
# подстрока с шестого символа от места, где найдена строка кость, он относится к классу программ «настроил и забыл» –
umbus=`echo $umdrive | awk ↵
'{print substr($0,index($0,"scbus"),6)}'` после двух-трех успешных циклов получения информации
umdig=`echo $umbus | awk '{print substr($1,6)}'` запуск скрипта можно было бы уже доверить младшему
# Так же ищется target и lun. target берется через 7 персоналу, если бы не крайняя важность копируемых дан-
# ("target ") символов от строки, lun берется через 4 ных. Проверять систему с использованием скопированных
# ("lun ") символа от строки
umtarget=`echo $umdrive | awk ↵ файлов можно либо с помощью скрипта AIDEstart, который
'{print substr($0,index($0,"target") + 7,1)}'` будет описан в следующей статье, либо с загружаемой USB
umlun=`echo $umdrive | awk ↵
'{print substr($0,index($0,"lun") + 4,1)}'` Flash, либо вручную, указывая путь к данным в конфигура-
ционном файле или при запуске AIDE.
# Выдать команду останова устройства (она погасит
# индикатор готовности на Flash, за исключением USB 1.1)

Þ
camcontrol eject $umdig:$umtarget:$umlun Литература и ссылки:
1. Ачилов Р. Копирование файлов в автоматическом ре-
жиме с множества компьютеров через SSH. – Журнал
Возможные ошибки «Системный администратор», № 12, 2004 г. – 12-17 с.
Если скрипт работает не так, как ожидается, то, возмож- 2. http://www.granch.ru/~shelton/fileZ/burniso.tar.bz2.
но, имеет место ошибка в настройке SSH. Это очень прос- 3. http://www.freebsd.org/doc/en_US.ISO8859-1/books/
то проверить – достаточно с консоли мастер-компьютера handbook/kernelconfig-building.html.
набрать: 4. Домашняя страница проекта AIDE http://sourceforge.net/
projects/aide.
# su aide 5. Домашняя страница автора проекта cdrecord (в числе
> ssh remotebox
набора других программ) – http://cdrecord.berlios.de/old/
где remotebox – имя любого компьютера, с которого долж- private/cdrecord.html.

№8, август 2005 53


администрирование

SAP + MySQL = MaxDB

При выборе СУБД для проекта часто встаёт проблема выбора между низкой
(часто нулевой) стоимостью открытых баз данных, таких как MySQL или PostgreSQL,
и мощью и широтой возможностей «серьёзных» СУБД – Oracle, DB2, MS SQL.
MaxDB от компании MySQL AB, наследница SAP DB – прекрасная альтернатива такому выбору.
Это промышленная SAB-сертифицированная база данных, распространяемая под лицензией GPL.

КИРИЛЛ СУХОВ

В
последних числах мая 2003 го- непосредственно MySQL AB, а внед- (если такие соображения и впрямь
да широкие массы IT-тружени- рение системы и поддержку продук- имели место, то, по крайней мере, на
ков потрясла неожиданная но- та компании планировали осущест- авторе этих строк план сработал). О бу-
вость. Солидная во всех отношениях влять совместно. Причиной такого ша- дущем SAP DB также строились раз-
компания SAP AG, один из мировых ли- га SAP AG назвали желание как мож- личные догадки. MySQL AB будет пози-
деров программного обеспечения для но больше соответствовать запросам ционировать SAP DB как «MySQL для
бизнеса, заявила о планах «стратеги- клиентов. взрослых», говорили также о том, что
ческого сотрудничества» с MySQL AB – Если в MySQL-сообществе извес- MySQL будет просто использовать код
разработчиком самой распространён- тие утвердило сдержанный оптимизм, SAP DB для внедрения в свой продукт,
ной открытой СУБД – MySQL. Данное то в среде пользователей продуктов а оригиналу суждено умереть.
сотрудничество касалось такого из- SAB реакция была, по крайней мере, Прошло более двух лет, и по-
вестного и заслужившего уважение неоднозначна. И в самом деле, что мо- ка, к счастью, события опроверга-
продукта SAP, как SAP DB – промыш- жет предоставить MySQL SAP, кроме… ют обе версии. Готовящаяся к выхо-
ленного сервера баз данных, стояще- кроме огромного количества пользо- ду MySQL 5 явно не «содрана» со сво-
го в одном ряду с гигантами – MSSQL вателей СУБД! В самом деле, причи- ей старшей сестры, а, в свою очередь,
Server, Oracle и DB2. При этом, как за- ной такого шага могло послужить же- SAP DB, под новым именем MaxDB, жи-
являлось, написанием кода и управ- лание привлечь новых пользователей вет и развивается. Несмотря на сме-
лением проектом будет заниматься за счёт огромной аудитории MySQL ну названия нумерация версий оста-

54
администрирование
лась прежней: так, в начале 2004 го- интерактивной работы с базой данных, лицензией GPL, причём последний ва-
да вышла MaxDB 7.5, а в июне 2005 речь о которых пойдёт ниже. риант СУБД ничем функционально от
года MaxDB 7.6, порадовавшая поль- В таблице 1 приведён список под- платной версии не отличается.
зователей графическим инсталлято- держиваемых в настоящее время плат-
ром (Installation Manager GUI), автома- форм и архитектур. Он не так впечат- Инсталляция
тическим обновлением статистических ляющ, как в случае с MySQL, но все на- Требования к ресурсам у MaxDB по ны-
данных, автоматическим восстановле- иболее распространённые конфигура- нешним меркам довольно скромны. Они
нием неисправных индексов и новыми ции в нём присутствуют. напрямую зависят от объёма базы дан-
алгоритмами кэширования. Если операционная система, на ко- ных. Самым критичным параметром для
В этом же году MySQL AB выпусти- торой вы планируете работать с MaxDB, работающего сервера является опера-
ли PHP- и Perl-драйверы для MaxDB, в таблице отсутствует, не отчаивай- тивная память. Для размещения ядра
расширив функциональность для раз- тесь. Вся необходимая информация по необходимо около 48 Мб, для каждого
работки приложений. портированию СУБД приведена здесь: активного соединения понадобятся еще
http://www.sapdb.org/develop/sap_db_ примерно 10 Мб ОЗУ, что по сравнению
Что собой представляет cvs.htm и здесь: http://sapdb.2scale.net/ с аналогами не выглядит непомерным.
MaxDB сегодня? moin.cgi/DevelopingSapdb. Основные Размер занимаемого дискового про-
Это полноценный, промышленный технические параметры MaxDB при- странства складывается из размера
сервер баз данных, поддерживающий ведены в таблице 2. файлов дистрибутива MaxDB и размера
стандарт SQL 92 на «расширенном» Как и остальные продукты от MySQL прикладной базы данных. Суммарный
уровне (хранимые процедуры, тригге- AB, MaxDB распространяется как под размер исполняемых файлов MaxDB
ры, последовательности, курсоры, ро- коммерческой лицензией, так и под составляет от 280 Мб для 32-разряд-
ли и т. д.). В СУБД реализована под- Таблица 2. Основные технические параметры MaxDB
держка UNICODE, поддержка клас-
терных систем, предусмотрена воз-
можность изменения размера базы и
создание резервной копии в режиме
Online. Возможности MaxDB включа-
ют статистику для оптимизации стра-
тегии построения запросов пользова-
телем и выполнения их ядром СУБД.
Программные интерфейсы, позволя-
ющие работать с MaxDB, включают
ODBC 3.5, C/C++ Precompiler (встро-
енный (Embedded) SQL), JDBC, вер-
сии 3.0, Perl DBI, Python, PHP и, разу-
меется, SQLCLI. Что ещё? Да в общем,
немало, скажем, режим совместимос-
ти синтаксиса SQL СУБД. с Oracle 7.
Помимо самой СУБД в состав дис-
трибутива включены все необходимые
приложения для администрирования и
Таблица 1. Платформы и архитектуры,
поддерживаемые MaxDB

№8, август 2005 55


администрирование
ных систем до 700 Мб для 64-разряд- тановки (я выбрал полный вариант) и ным пользователям и параметры базы
ных. Размер прикладной базы опреде- размещение папок с данными, про- данных (рис. 5), после чего инсталля-
ляется пользователем и может в даль- граммами и ядра базы данных, а затем тор выведет подробную информацию
нейшем быть изменён без необходи- заинтересованно следить за ходом ус- выбранной конфигурации (рис. 6). Если
мости перезагрузки сервера. тановки. По окончании программа по- внешне процесс вам напоминает уста-
Размер занимаемой MaxDB опера- радует вас сообщением о необходи- новку СУБД Oracle – не смущайтесь, во-
тивной памяти можно корректировать мости перезагрузки (рис. 2). первых, у меня такие же ассоциации, а
с учетом размера базы данных и ко- В новых версиях MaxDB доступен во-вторых, технологией java (против ра-
личества одновременно обрабатыва- также вариант установки с веб-интер- зумного применения которой я ничего
емых запросов. фейсом (требует дополнительного ком- не имею) там не пахнет – всё происхо-
Все действия производились на понента maxdb-webtools, входящего в дит довольно быстро (рис. 7). По окон-
компьютере под управлением опе- дистрибутив) и графический режим, на чании инсталляции будет предложено
рационной системы Windows XP Pro котором я и рекомендую остановиться. запустить Database Manage (рис. 8), и
(SP-2), под музыку группы Аквариум. В отличие, например от инсталлятора с этим серьёзным предложением луч-
Сначала скачиваем архив с дистри- MySQL, Installation Manager GUI совер- ше согласиться.
бутивом MaxDB, который доступен по шенно не ограничивает возможности Для использования графических и
адресу: http://dev.mysql.com/downloads/ установки. Итак, запускаем утилиту веб-инструментов их необходимо инс-
maxdb, затем графические инстру- SDBSETUP.exe (рис. 3). Если это не пер- таллировать отдельно.
менты для работы с СУБД – DBM GUI вая попытка установки, настоятельно На особенностях архитектуры и ор-
и SQL Studio, расположенные здесь: советую с помощью соответствующего ганизации СУБД остановимся как-ни-
http://dev.mysql.com/downloads/maxdb/ пункта меню снести результаты преды- будь в другой раз, а сейчас рассмот-
clients.html. Распаковав дистрибутив, дущих экспериментов – различные вер- рим основные инструменты админис-
приступаем к установке. сии СУБД и просто разные варианты ус- трирования и разработки.
Есть несколько путей для инсталля- тановки могут конфликтовать. В нача-
ции MaxDB. Прежде всего это стандар- ле инсталляции нам предлагают выбор Основные компоненты
тная инсталляция. Посредством кон- конфигурации (рис. 4), причём первый MaxDB
сольной утилиты SDBINST. Она доста- пункт предполагает полную установку. На рис. 9 приведены основные компо-
точно удобна и информативна (рис. 1). Затем, после выбора режима, предла- ненты MaxDB (состав которых опреде-
Всё, что требуется, выбрать режим ус- гается задать пароли привилегирован- ляется выбранным инсталляционным

Рисунок 1. Выбор инсталляционного профиля Рисунок 2. Инсталляция завершена. Перегружаемся!

Рисунок 3. Installation Manager – начало работы Рисунок 4. Берём всё!

56
администрирование
профилем). Это инструменты инстал- щью, – создание и инициализация эк- ветствующие программные интерфей-
ляции и администрирования СУБД, земпляров баз данных (Instance, в тер- сы. Полный список команд доступен
средства работы с данными и програм- минах MaxDB), управление пользова- во входящей в дистрибутив докумен-
мные интерфейсы. Ниже речь пойдёт телями и операторами баз данных, ус- тации, можно также вызвать dbmcli с
об наиболее значимых из них. тановка прав доступа и параметров ав- параметром help (рис. 12).
торизации. С помощью DBM осущест- Web DBM входит в инструмента-
Администрирование вляется запуск и остановка экземпля- рий Web Tools, в официальной доку-
(Database Manager) ров БД, создание объектов БД, уста- ментации декларируется, что эти ути-
Менеджер базы данных доступен в новка значений и индексов, управле- литы, позволяющие управлять серве-
MaxDB в трёх ипостасях, выполняю- ние сессиями. Кроме того – резервное ром через обычный браузер, коррект-
щих совершенно одинаковый набор копирование (рис. 11), восстановление но работают в следующих конфигура-
функций. данных из резервных копий, монито- циях (см. таблицу 3).
Database Manager GUI (рис. 10) ринг, диагностика системы и многое От себя могу добавить, что при ис-
представляет собой удобный графи- другое. Даже обновление программ и пользовании браузера Mozilla Firefox
ческий интерфейс, посредством кото- системных таблиц удобно делать имен- (1.0.4) проблем не возникало, а вот с
рого можно осуществить любые дейс- но из этой среды. Opera 7.0 были (это касается и осталь-
твия, связанные с администрировани- Database Manager CLI, в отличие от ных Web Tools).
ем СУБД. В операционной системе MS своего графического коллеги, досту-
Windows он вызывается из стартово- пен во всех поддерживаемых опера- Работа с данными (SQL Studio)
го меню («Start → Programs → MySQL ционных системах. Работа с DBMCLI Следующие три инструмента предна-
MaxDB → Database Manager») или из может быть легко автоматизирована значены для доступа к данным и ката-
командной строки командой dbmgui. с помощью администраторских сце- логам экземпляров MaxDB с использо-
На его примере хорошо видны основ- нариев. Функции менеджера доступ- ванием SQL-запросов.
ные возможности администрирования. ны также из приложений, написанных SQL Studio (GUI), имеющаяся только
В числе задач, решаемых с его помо- на Java, Python, Perl, PHP, через соот- для ОС MS Windows, представляет со-

Рисунок 5. Первые пользователи Рисунок 6. Всё готово! (ничего не напоминает?)

Рисунок 7. Процесс инсталляции Рисунок 8. Опять перезагружаться...

№8, август 2005 57


администрирование

Рисунок 9. Компоненты MaxDB

Рисунок 10. Database Manager (GUI) – начало работы

Рисунок 11. Database Manager (GUI) – резервное копирование


Рисунок 12. DBMCLI – работаем в консоли

Рисунок 13. SQL Studio (GUI) – пишем запрос Рисунок 14. Лог DBAnalyzer
бой удобную среду разработки, с гра- ледовательностей, процедур и т. д., со- Преимущества консольного клиен-
фическим интерфейсом (рис. 13). SQL здание и исполнение SQL-запросов, не- та SQLCLI заключаются в возможнос-
Studio позволяет оперировать данны- посредственное редактирование дан- ти использования его команд внешни-
ми, создавать объекты базы данных и ных с помощью визуальных таблиц. ми сценариями, в том числе написан-
управлять ими. SQL Studio (GUI) имеет Web SQL Studio основана на веб- ными на языках, имеющих интерфейс
окно навигации, средства просмотра интерфейсе, имеет сходные с графи- доступа к MaxDB.
таблиц и, разумеется, средства управ- ческим вариантом возможности по уп-
ления SQL-кодом. Такое сочетание раз- равлению данными. Меньший комфорт Мониторинг (Database Analyzer)
личных функций в одной оболочке поз- работы в ней компенсируется платфор- Крайне полезный инструмент, Data-
воляет комфортно решать такие зада- менной независимостью данного инс- base Analyzer (рис. 14), представляет
чи, как создание таблиц, индексов, пос- трумента. собой полноценную экспертную сис-

58
администрирование
тему для мониторинга MaxDB. Сущ-
ность его работы заключается в сня- Краткая история SAP DB Её версия, на тот момент была 7.2. За
тии и оценке данных о состоянии сис- 11 мая 1999 года известный разра- последующие года SAP DB стреми-
темы, через определённые интерва- ботчик ERP-систем, немецкая компа- тельно развивалась, находя примене-
лы времени (задаваемые настройка- ния SAP AG, объявила о приобрете- ние как самостоятельно, так и в качес-
ми). Полученные сведения диффе- нии у фирмы Software AG неисключи- тве встроенной СУБД.
ренцируются по классам – служеб- тельных прав на СУБД Adabas D. Мо- СУБД развивалась, обрастая но-
ная информация, предупреждения тивы этого действия были очевидны, выми возможностями, утилитами и ин-
(три различных уровня) и сообще- основной (более 75%) платформой терфейсами. Вокруг неё складывалось
ния об ошибках. Все полученные со- для EPR-системы R/3, выпускаемой сообщество разработчиков. В начале
общения проходят стандартную об- компанией была СУБД Oracle, про- 2003 года SAP AG пошла ещё дальше,
работку и дешифровку. Более того, дукт ближайшего конкурента на рын- объявив Open Source свою уникальную
Database Analyzer берёт на себя су- ке ERP-систем. Таким образом, SAP разработку – технологию LiveCache
щественную часть анализа информа- AG практически прямо финансирова- (объектно-ориентированное расши-
ции, предлагая в стандартных ситуа- ла Oracle Applications, продукт, конку- рение реляционной системы баз дан-
циях типовое разрешение возникших рировавший с их собственной разра- ных SAP DB, предоставляющее воз-
затруднений. боткой – R/3. можность более легкого и эффектив-
Database Analyzer облегчает вы- В 2000 году купленное решение ного отображения структур и потоков
явление ошибок в случае проблем с оформилось в самостоятельный про- данных), что ещё больше привлекло к
производительностью или пропуск- дукт – SAP DB и дальнейшие разра- ней внимание.
ной способностью сервера MaxDB. Это ботки, предлагаемые компанией (R/3 В мае 2003 года SAP AG объявила о
помогает, например, выявить пробле- и открытая платформа mySAP) бази- стратегическом партнёрстве с MySQL
мы, относящиеся к конфигурации ба- ровались на ней. AB, и передачи последней СУБД (до-
зы данных, синхронизации (блокиров- 5 октября 2000 года SAP AG объ- стигшей к тому времени версии 7.4)
ка, критические секции), оптимизации явила выход СУБД под лицензией для разработки и продвижении реше-
запросов базы данных (стратегия об- GPL, сделав её таким образом первой ний на рынопк. С 31 марта 2004 года
работки данных, индексирование, оп- Open Source СУБД такого класса. Про- SAP полностью прекратила самостоя-
тимизация статистики) или конфигу- мышленная, многоплатформенная ба- тельное распространение SAB DB, ог-
рации оборудования. Рекомендации за данных, с открытым исходным ко- раничившись поддержкой своих ста-
Database Analyzer могут предложить дом стала доступна разработчикам. рых партнёров.
создать добавочные индексы или по-
высить размер кэша БД. торые затем объединяются в ходе оче- циализированные программы для за-
редной синхронизации. грузки и выгрузки данных. Благодаря
Репликация Сервер сообщений Synchronization прямому соединению с экземпляром
(Synchronization Manager) Manager – это выделенный экземпляр MaxDB, Loader обычно помогает до-
Основное назначение этого инстру- MaxDB, который не зависит от масте- стичь существенного преимущества
мента – различные виды репликации ра и клиентов. Он буферизирует все в производительности.
данных MaxDB. Синхронизировать изменения до того, как их прохож- Более того, Loader поддерживает
мобильные или удалённые экземпля- дение завершится. Таким образом, перенос любых данных из одного эк-
ры баз данных с центральным серве- Synchronization Manager отделяет ра- земпляра MaxDB в другой, даже в том
ром БД – достаточно типовая задача, ботоспособность мастера и клиентов случае, когда исполняется на различ-
и Synchronization Manager достаточно от времени синхронизации. ных архитектурах и операционных сис-
хорошо с ней справляется. Узким местом является двунаправ- темах. По выбору администратора мо-
Репликация в MaxDB осуществля- ленная репликация – в этом случае су- гут быть загружены отдельные табли-
ется централизованно, с выделением ществует вероятность возникновения цы, все таблицы, относящиеся к опре-
одного главного экземпляра БД, в ко- конфликтов, которые необходимо раз- деленному пользователю БД, или даже
тором записываются настройки репли- решать вручную. полное содержание базы данных.
кации и произведённые изменения, ко- В этой статье я ограничился обзо-
Таблица 3. Поддержка Web Tools Импорт и экспорт данных ром основных средств и возможнос-
для различных платформ и браузеров (Loader) тей MaxDB, совершенно не упомянув
Последнее, о чём я хотел рассказать о таких вещах, как Standby/Hot Standby
в этой статье, это утилита Loader, поз- конфигурации, снимках (Snapshots),
воляющая импортировать данные при- кэшировании, автоматическом распре-
ложений из файлов данных в экземп- делении пространства и многом дру-
ляр базы данных, или экспортировать гом. Также я совершенно не касался
данные из MaxDB в файлы. Благода- вопросов архитектуры администриро-
ря поддержке большого количества вания и разработки. Если вы проявите
различных форматов и структур запи- интерес, я продолжу рассказ о данной
сей, Loader часто может заменять спе- СУБД в дальнейшем.

№8, август 2005 59


безопасность

ПРОВОДИМ АУДИТ СИСТЕМЫ


С ПОМОЩЬЮ SNARE

Полноценный контроль за системными событиями является трудоемкой задачей, забирающей


много времени и ресурсов. Тем не менее просмотр регистрационных записей журналов
позволяет получить наиболее полную информацию о работе системы и отдельных сервисов
и использовать их для обнаружения вторжения.

СЕРГЕЙ ЯРЕМЧУК

60
безопасность
ля защиты компьютерных систем в настоящее вре- сором для центрального сервера: Linux (обеспечивает ау-
мя разработано приличное количество разнообраз- дит, принятый в системах класса C2 или CAPP), Windows,
ного программного обеспечения, выполняющего ка- Solaris, Irix, AIX, IIS Web Server (используется для обработ-
кую-то определенную задачу. Антивирусы оберега- ки файлов регистрации в реальном времени) и ISA Server.
ют пользователей от вирусов, межсетевые экраны блоки- Распространяется SNARE под GNU Public License. В статье
руют нежелательный трафик, целый класс систем обнару- мы рассматриваем Linux-реализацию.
жения и остановки атак в той или иной мере противостоит
действиям злоумышлеников. Как работает SNARE
События, происходящие в последнее время, показыва- SNARE в варианте для Linux использует три компонента:
ют пока только неэффективность традиционных средств ! Патч к ядру (в версиях 0.9.3 и выше), ранее для этих це-
защиты, не срабатывающих при появлении новых алгорит- лей использовался динамически загружаемый модуль
мов нападения. Пока действительно хорошо справляются ядра auditmodule.o, который можно было установить без
со своей задачей инструменты, позволяющие определить перекомпиляции ядра. Разработчики стремятся сделать
уже произошедшее проникновение. Поэтому в настоящее систему контроля как можно более легкой и универсаль-
время особым вниманием пользуются проактивные сис- ной, способной работать как на маломощной рабочей
темы защиты, реагирующие на системные события, а не станции, так и загруженном сервере, этим вызвано та-
сравнивающие сигнатуры, сгенерированые специалиста- кое изменение в подходе.
ми по безопасности. Такие средства аудита контролируют ! auditd – демон, являющийся front end к модулю (нахо-
различные системные выводы и в результате дают полную дится в пакете snare-core).
картину происшедшего на контролируемом узле. А имен- ! snare – утилита графической конфигурации и просмот-
но: кто, когда обращался, к какому файлу, заходил по сети, ра отчетов (пакет snare-gui).
модифицировал те или иные данные, т.е. в итоге позволя-
ют получить полную картину происшедшего на контроли- Модуль проверки, работая в пространстве ядра, отлав-
руемом компьютере. Во всех операционных системах ве- ливает критические системные вызовы вроде «execve» (вы-
дутся более или менее подробные логи, но большей частью полнение команды), «open» (открыть файл), «mkdir» (со-
на основные события (за исключением модуля BSM (Basic здать каталог) и отправляет результат к подпрограмме, ко-
Security Module) в Solaris), чего в большинстве случаев до- торая собирает всю информацию относительно процесса
статочно. Но, например, в спецификациях выдвигаются и пользователя, его запустившего или просто попытавше-
дополнительные требования по регистрации событий для гося выполнить рассматриваемый системный вызов. Этот
защищенных систем, начиная с класса С. К тому же такие контрольный модуль сохраняет собранную информацию во
возможности могут понадобиться в системах, предназна- временном буфере, который и считывается демоном auditd.
ченных для обработки конфиденциальной информации. Демон читает данные от системы контроля через устройс-
Естественно, отслеживая потенциально опасные события, тво /proc/snare (ранее /proc/audit), преобразовывая двоич-
можно предотвратить взлом и утечку информации, поэто- ные контрольные данные в понятный текстовый формат,
му одним из требований к таким системам является быст- и отделяет информацию в ряд лексем, используя для отде-
рая реакция (под реакцией в данном случае подразумева- ления данных и улучшения дальнейшей обработки инфор-
ется оповещение). Для централизованного сбора, хранения мации три разделителя: табуляцию, запятые и пробел. По-
и обработки данных о событиях, происходящих на подчи- лучаем приблизительно следующее:
ненных системах, приветствуется отправка сообщений на
удаленные системы. grinder LinuxAudit objective,clear,Fri Dec 17 22:33:15 2004,
The program /usr/bin/links been executed by the user leigh
Австралийская фирма, занимающаяся безопасностью, event,execve(), Fri Dec 17 22:33:15 2004
InterSectAlliance (http://www.intersectalliance.com/projects/ user,leigh(500),users(500),leigh(500),users(500)
process,478,sh path,/usr/bin/links arguments,links
Snare), в разработке SNARE – System iNtrusion Analysis and return,0 sequence,11256
Reporting Environment основной упор сделала на регистра-
цию как можно большего количества событий. В том чис- Кстати, реализация под Windows отличается работой
ле контролируются открытые сетевые соединения, чтение всего двух компонентов: сервиса snarecore.exe и утилиты
и запись в файлы и каталоги, модификация данных поль- конфигурирования и получения отчетов snare.exe.
зователя и групп, изменение программ. Система SNARE
может быть сконфигурирована в двух вариантах. Первый Установка
позволяет обнаружить, когда какой-либо пользователь ос- Для установки SNARE под Linux понадобится два файла:
тановил ключевую программу, переключился к учетной за- snare-core и snare, а также патч к ядру (в настоящее время
писи администратора или установил файлы в системный ведется работа по включению кода в основное ядро). Для
каталог. В другом варианте использования SNARE контро- некоторых дистрибутивов (RHEL, Fedora, Debian) на сай-
лирует непосредственно определенные системные вызовы, те доступны ссылки на прекомпилированые пакеты, в том
например, открывающие или переименовывающие фай- числе и подготовленные ядра, которые и рекомендуется ис-
лы, chroot, reboot, mkdir, mknod и другие операции. Систе- пользовать. В целях эксперимента установим SNARE, ис-
ма реализована на нескольких платформах с учетом осо- пользуя исходные тексты.
беностей каждой, при этом она может использоваться как Скачиваем версию ядра, под которую имеются патчи
автономный инструмент анализа или быть удаленным сен- и сам патч.

№8, август 2005 61


безопасность
# cd /usr/src; wget -c http://www.kernel.org/pub/linux/ ↵ ! Auditing Control – метод контроля (Objectives или Kernel),
kernel/v2.6/linux-2.6.11.tar.gz
# tar xzfv linux-2.6.11.tar.gz место, куда отправлять логи (локальный файл, на уда-
# wget -c http://www.intersectalliance.com/projects/ ↵ ленный хост или оба варианта) и параметры настрой-
Snare/Download/snare-0.9.7-2.6.11.7.diff
ки сети, необходимые для посылки логов (имя локаль-
Накладываем патч, конфигурируем ядро. ного узла, IP-адрес или DNS-имя удаленного, UDP-порт
на удаленном компьютере, куда будут посылаться сооб-
# cd linux-2.6.11 щения).
# patch -p0 < snare-0.9.7-2.6.11.7.diff
# make menuconÞg ! Kernel events – тип ревизии, может быть или события яд-
ра, или настроенные пользователем фильтры. В данном
И в «General Setup» включаем пункт «SNARE C2 Auditing». пункте выбираются все те системные вызовы, которые
Далее компилируем как обычно и устанавливаем за- необходимо отслеживать, при этом в журнал будут запи-
грузчик. Затем скачиваем с сайта проекта SNARE архивы саны все такие вызовы без какой-либо дополнительной
snare-core-0.9.7.tar.gz и snare-gui-0.9.6.tar.gz. фильтрации, при установке большего количества конт-
ролируемых вызовов журнал начнет быстро заполнять-
# tar -xzvf snare-core-0.9.7.tar.gz ся, причем, как правило, будет много лишней информа-
# cd snare-core-0.9.7
# make clean ции. Этот метод ревизии больше подходит для класси-
# make ческого «C2»-стиля аудита, в котором все запросы долж-
# make install
# /etc/init.d/snare start ны быть зарегистрированы.
Starting /usr/sbin/auditd:
! Objectives (рис. 2) – более усовершенствованный метод
SNARE audit daemon: version 0.97 starting up аудита через определение объектов контроля и слежения
InterSect Alliance Pty Ltd за всеми изменениями состояния или обращения к ним.
http://www.intersectalliance.com/

Теперь необязательный графический интерфейс.

# snare-gui-0.9.6.tar.gz
# cd snare-gui-0.9.6
# ./autogen.sh
# make
# make install
# cp snare-icon.png /usr/share/pixmaps
# cp snare.desktop /usr/share/gnome/apps/System
# cp snare.desktop /usr/share/gnome/ximian/ ↵
Programs/Utilities/
# cp Snare.kdelnk /usr/share/applnk/System/

И запускаем, набрав snare в окне терминала или через


меню KDE (в Gnome «Система → Snare → Event Logging»).
Инсталляция под Windows заключается в получении Рисунок 2. Просмотр объектов контроля и слежения
одного файла SnareSetup.exe и запуске его обычным спо- При этом возможно задание любых правил и любого ко-
собом. личества объектов. Для этого нажимаем «Add an Objective»
и заполняем значения пяти параметров. Среди которых ин-
Конфигурация дентификация отслеживаемого события (открытие, запись,
Все настройки демона хранятся в файле /etc/audit/audit. считывание, удаление, модификация атрибутов, запуск или
conf с вполне понятной структурой. Лучший способ изме- остановка программ, файлов или каталогов, открытые или
нения настроек – использование графической утилиты разрешенные сетевые соединения), путь или имя объекта
SNARE (рис. 1). (возможно применение регулярных выражений), фильтр со-
После запуска которой заходим в пункт «Setup → Audit бытий (удалось, не удалось или оба), пользователи и уро-
Configuration» и устанавливаем необходимые параметры вень опасности, который будет соответствовать при наступ-
во вкладках: лении этого события (critical, priority, warning, information и
clear). Первоначальная настройка подходит для большинс-
тва случаев, т.к. контролирует наиболее важные систем-
ные файлы вроде /etc/passwd, /etc/shadow, создание новых
пользователей и групп, подключение по сети, использова-
ние su, изменение файлов и каталогов /sbin, /usr/sbin, /bin
и /usr/bin, изменения в /etc и /var/log и пр. Например, два ни-
жеприведенных правила зарегистрируют попытку доступа
к файлу /etc/shadow любым пользователем, кроме root, при
этом в зависимости от результата событию будет присво-
ен разный уровень опасности. Естественно, что если такая
попытка будет успешной, то это свидетельствует о пробле-
Рисунок 1. Графическая утилита позволяет просмотреть мах и такому событию необходимо присвоить наивысший
события в реальном времени и настроить систему уровень (основные параметры файла описаны в докумен-

62
безопасность
те «Guide_to_SNARE_for_Linux.pdf» в разделе «Appendix C – myguisystem# ssh auditedsystem
Configuration File Description»). ..
auditedsystem# /bin/su -
[password]
criticality=4 event=open(.*),mkdir,mknod,link,symlink ↵ auditedsystem# export DISPLAY=myguisystem:80
return=Success user!=root match=^/etc/shadow$ auditedsystem# snare &
criticality=2 event=open(.*),mkdir,mknod,link,symlink ↵
return=Failure user!=root match=^/etc/shadow$ И еще одна полезная возможность заложена в SNARE –
это отправка логов на удаленный узел по протоколу UDP,
Если оставить одну строку, то это снизит эффективность которая может помешать хакерам скрыть свое пребывание
системы, и действительно опасное предупреждение может чисткой логов, хотя при контроле большого количества ма-
просто затеряться среди подобных сообщений. шин и параметров это может существенно забить сеть па-
Для более тонкой настройки можно добавить индиви- кетами. Для этого в «Auditing Control» выбираем пункт «Log
дуальный контроль файлов, в которых прячутся rootkits events to the networked host and a local file» и далее устанав-
(их список большой, вот некоторые: login, telnet, ftp, netstat, ливаем имя узла и порт (по умолчанию 6161), которому будут
ifconfig, ls, ps, ssh, find, du, df, sync, reboot, halt и shutdown) отправляться сообщения. На сервере, предназначенном для
и основные настроечные системные и сетевые файлы /etc/ сбора всех логов, запускаем Perl-скрипт auditserver.pl (лежит
resolv.conf, /etc/hosts, /etc/lilo.conf, /boot/grub/grub.conf, и пр. в пакете snare-core), в котором нужно изменить перемен-
Список основных системных вызовов и их значения приве- ную $ServerPort, установив нужное значение, совпадающее
ден в разделе «Appendix A – Events Audited». с таковым у клиентов, и каталог, куда будут складываться
Единственное, о чем следует помнить, – это то, что при сообщения. Cервер в каталоге /var/log/audit создает отде-
увеличении контролируемых параметров увеличивается и льные файлы для каждого клиента вида YYYYMMDD-host.
потребление системных ресурсов, на маломощных систе- name.LinuxAudit. То есть в итоге получаем несколько фай-
мах этот показатель может быть критичным. лов вида /var/log/audit/20050821-host.com.LinuxAudit. В даль-
В Windows нет разделения на Objectives или Kernel, до- нейшем эти файлы можно заархивировать для истории или
ступна только Audit Reporting Objectives, и в силу специфи- распаковать при помощи скрипта extract.pl, который можно
ки системы отслеживаются другие события (logon, logoff, найти в документе «Guide to SNARE for Linux», потом прос-
обращение к файлу или каталогу, остановка и запуск про- то запуская его вручную или при помощи cron.
цесса, использование прав пользователя и администрато-
ра, изменение политики безопасности, перезагрузка, ос- #cat /var/log/audit/20050821-host.com.LinuxAudit | ↵
./extract.pl
танов системы и некоторые другие).
После внесения всех необходимых настроек необхо- На данный момент не поддерживается какая-либо защи-
димо перезапустить сервис «Activity → Apply and Restart та при передаче файлов журналов, что дает возможность
Audit», после чего в главном окне программы будут выво- злоумышленику подделать логи либо провести элементар-
диться все события, попадающие под установленные пра- ную DOS-атаку, поэтому пользоваться возможностью от-
вила. Щелкнув дважды мышкой по представляющему ин- правки логов в таком варианте необходимо осторожно и в
терес событию, можно получить дополнительную информа- защищенных сетях. Хотя стоит отметить, что отправка жур-
цию. Используя «Prev» и «Next», можно двигаться вперед- налов на централизованый сервер разработчиками ориен-
назад, просматривая события. Все, на мой взгляд, просто тируется больше при взаимодействии с SNARE Server (http://
и понятно. Просмотреть статус работы SNARE можно, вы- www.intersectalliance.com/snareserver/index.html). Основное
брав пункт «Bид → Audit Status», при этом можно увидеть об- назначение которого сбор и анализ информации, постав-
щее количество событий, обработанных модулем ядра без ляемой с различных систем. С его демо-версией можно оз-
фильтрации, а также ID процесса демона, версию SNARE накомиться на сайте проекта. Для централизованого сбо-
и активность демона. ра и отправки журналов с других систем с ним в паре бу-
дет работать SNARE Reflector, разработка которого ведет-
Удаленное управление ся в настоящее время.
К сожалению, версия под Linux лишена на данный момент Кстати, положительной стороной проекта является хоро-
возможности удаленного управления при помощи веб-ин- шая документация, помогающая разобраться в работе.
терфейса. А вот запустив SNARE под Windows и набрав в Как видите, в отличие от средств контроля целостности
строке браузера IP-адрес или имя компьютера, получаем системы, которые запускаются время от времени, SNARE
не только возможность сконфигурировать его удаленно, позволяет контролировать происходящее практически в
но и информацию о пользователях и группах локальных и реальном времени, что существенно повышает общую бе-
домена. Для подстраховки лучше зайти предварительно в зопасность. Также являются интересными сочетания вро-
пункт «Setup → Remote Control Configuration» и выставить де «IDS+SNARE» или «honeypots+SNARE». Первый вари-
IP-адрес, с которого можно удаленно заходить на компью- ант позволяет получить более подробную информацию об
тер и пароль для получения доступа, здесь же можно вы- инциденте и может помочь при обработке последствий. Во
брать и порт, на котором работает сервер. втором случае предоставляется хорошая возможность изу-
Но в Linux можно просто зайти на удаленную систему чить инструменты и действия взломщиков. Также подобные
при помощи SSH и запустить на ней клиента. Если на под- средства могут понадобиться тем, кому по роду деятель-
контрольной системе не используется X-Window, то перед ности нужна операционная система класса С2.
запуском экспортируем переменную DISPLAY. Удачи.

№8, август 2005 63


безопасность

CD, НЕ ПОДВЛАСТНЫЙ КОПИРОВАНИЮ

Копировщики лазерных дисков


совершенствуются с каждым днем,
но и разработчики защитных механизмов
не дремлют, тем не менее новые защиты
тут же ломаются. Почему?
Вашему вниманию предлагаем обзор
наиболее популярных ошибок
и конструктивных просчетов
с рекомендациями по их устранению,
а также законченный алгоритм
чрезвычайно стойкой защиты,
не копируемой никаким копировщиком.

КРИС КАСПЕРСКИ

Х
акерс ка я муд рос ть глас ит: ко взлому). Защита должна уверенно файлов, поскольку всегда найдется
«взломать можно все, это только работать на всем спектре програм- пользователь, пожелавший разделить
вопрос времени». Программный мно-аппаратного обеспечения с за- себя с миром, и, в общем-то, по-своему
продукт, ориентированный на массо- ранее непредсказуемыми свойства- он будет прав. Черные списки «засве-
вый рынок, такая ситуация вполне уст- ми. Антиотладочные приемы следу- ченных» серийных номеров и прочие
раивает. Какой-то процент пользовате- ет использовать с большой осторож- организационные меры, как показы-
лей покупает программу, какой-то нет. ностью или не использовать вообще, вает практика, недостаточно эффек-
Но для специализированных програм- поскольку от них слишком много про- тивны и со своей задачей не справ-
мных комплексов (расчет прецизион- блем. К тому же защита должна быть ляются.
ного литья или звездных спектров), ко- проста в реализации и отладке. Напри- Также недопустимо привязывать-
личество пользователей которых из- мер, если часть функционала вынесе- ся к оборудованию, поскольку потре-
меряется какими-то тысячами, такой на в микроконтроллер, смонтирован- бители очень не любят, когда ограни-
подход уже неприемлем. Потенциаль- ный на отдельной печатной плате, под- чивают их свободу. К тому же, если
ный рынок настолько мал, что каждая ключаемой через PCI-шину или COM/ стоимость защищенного комплекса
нелегальная копия чувствуется весьма USB/LPT-порт, взлом становится не составляет хотя бы 500$, хакеры мо-
болезненно. Значит, надо защищать только нерентабельным, но и практи- гут клонировать весь компьютер це-
так, чтобы не взломали, но как? чески невозможным. Конечно, при ус- ликом, особенно если это будут ки-
У нас две новости – хорошая и не ловии, что микроконтроллер не позво- тайские хакеры (цены на оборудова-
очень. Надежные защиты все-таки су- ляет считывать ПЗУ (некоторые при- ние в Азии намного ниже европейс-
ществуют, но их разработка требует емы аппаратного взлома можно най- ких). Наиболее популярным объек-
больших усилий и знания реалий. Это ти на страничке Сергея Скоробога- том привязки служит серийный но-
довольно заковыристая предметная того: http://www.cl.cam.ac.uk/~sps32). мер жесткого диска и MAC-адрес се-
область, и с одной лишь теоретической Однако отладить такой комплекс бу- тевой карты, которые легко изменить
подготовкой в нее не войдешь. Тем не дет намного сложнее, чем взломать, (в частности, для жесткого диска мож-
менее спрос рождает предложение, и поэтому для практического примене- но воспользоваться комплексом PC-
автор статьи делится своим многолет- ния он непригоден. В идеале защита 3000 от ACE Laboratory – www.acelab.
ним опытом по созданию стойких за- вообще не должна требовать никако- ru). Остальные же характеристики
щитных комплексов. го «внешнего» оборудования, а это «железа» еще менее уникальны и в
значит, что ее код заведомо будет до- пределах одной партии практически
Основные концепции ступен для анализа и модификации идентичны друг другу. К тому же не-
защиты (см. рис. 1, 2). льзя забывать про виртуальные ма-
Главное свойство защиты – это на- Защита не может отталкиваться ни шины (VMWare, Virtual PC и т. д.), при-
дежность (не путать со стойкостью от серийных номеров, ни от ключевых вязка к которым лишена всякого смыс-

64
безопасность

Рисунок 1. Электронный ключ… Рисунок 2. …и его взлом путем считывания содержимого


EEPROM под микроскопом с увеличением 500х

ла. Можно, конечно, распознать нали- тимость с различными моделями при- Третью группу возглавляют защи-
чие виртуальной машины и отказать- водов и предельная простота програм- ты, привязывающиеся к физической
ся работать под ней, только это не вы- мной реализации. Недостатки – при структуре носителя. Их можно разде-
ход. Виртуальных машин существует подготовке диска к тиражированию лить на две подгруппы. Первая выде-
огромное множество, и каждая из них придется долго объясняться с сотруд- ляет на диске некоторые более или ме-
детектируется по-своему, к тому же никами завода. Обычно им переда- нее уникальные характеристики, к ко-
для большинства из них существуют ют готовый диск или образ, содержа- торым, собственно, она и привязыва-
специальные «патчи», предотвраща- щий только пользовательские данные ется. Вторая же, не собираясь ждать
ющие детектирование. В общем, вло- (он же образ типа ISO9660, хотя это на- милости от природы, самостоятельно
женные в защиту усилия окажутся не- звание не вполне корректно), здесь же формирует трудновоспроизводимые
рентабельными. требуется «сырой» (RAW) образ в фор- дефекты на диске. Возьмем извест-
Привязываться можно только к но- мате 2352/96, который поддерживает ную защиту Laser Lock, которую лег-
сителю – дискете, лазерному или DVD- далеко не всякое оборудование! За- ко опознать по наличию крошечной
диску, карте FLASH-памяти и т. д. частую производитель игнорирует на- «дырки», проделанной лазером точ-
Это в наименьшей степени ущемля- ши требования, и вопреки всем обе- но посередине спиральной дорожки
ет права потребителей и практичес- щаниям и договорам с «конвейера» (аналогичный способ был широко из-
ки не создает непреодолимых не- сходят диски, записанные стандарт- вестен еще во времена дискет, при-
удобств, к тому же качественно защи- ным образом, то есть без ключевых чем их дырявили не только лазером,
щенный носитель чрезвычайно труд- меток, а для заказчика это катастро- но еще и гвоздем). На первый взгляд
но скопировать. Существует множес- фа! (Поверьте моему горькому опы- тут должен образоваться BAD-сектор,
тво хакерских групп, специализиру- ту, это довольно часто встречается). однако практика показывает, что диск
ющихся на взломе программного ко- Но это все равно напрасно, посколь- читается без проблем. А как же «ды-
да, но очень немногие разбираются в ку такие защиты уже давно копируют- ра»? Все дело в кодах Рида-Соломо-
устройстве носителей на профессио- ся специализированными копировщи- на, корректирующей способности ко-
нальном уровне. ками. Исключение составляет ключе- торых вполне хватает для исправле-
Весь вопрос в том, какой носи- вая метка в Q-подканале аудиотрека. ния «дыры». Но если отключить кор-
тель выбрать. Дискеты отбросим сра- Без спецоборудования она не копиру- рекцию ошибок, то в секторе сразу
зу. Их время уже прошло. DVD-дис- ется в принципе! Но это уже тема для же обнаружатся «дефективные» би-
ки только набирают силу, и требовать другого разговора. ты, причем начало разрушенной об-
обязательно наличия DVD-привода на Вторая группа защитных механиз- ласти будет соответствовать позиции
целевом компьютере по меньшей ме- мов основана на нестандартных фор- дырки в секторе. Это если объяснять
ре негуманно. То же самое относит- матах диска (необычная длина секто- на пальцах.
ся и к FLASH-картам. Остается толь- ра, нестандартные номера треков, ис- На самом деле все намного инте-
ко CD. Вот к нему-то мы и будем при- каженные заголовки и т. д.). Все они реснее и сложнее. Структура хранения
вязываться. крайне конфликтны и отказывают- данных на лазерном диске такова, что
ся идти на многих моделях приводов, физически смежные биты расположе-
Обзор популярных к тому же при тиражировании дисков ны на значительном удалении друг от
средств защиты возникают очень серьезные пробле- друга, зачастую даже в различных сек-
Механизмы привязки к CD-ROM мож- мы, намного более серьезные, чем торах! Информация как бы «размазы-
но разделить на три большие группы. в первом случае. Как правило, требу- вается» вдоль спиральной дорожки,
В первую (и наиболее древнюю) попа- ется специальное (и весьма дорогос- чтобы противодействовать царапинам
дают защиты, внедряющие ключевую тоящее!) оборудование, оправдываю- и дефектам. Дело в том, что корректи-
метку в служебные структуры данных, щее себя только на больших тиражах. рующие коды Рида-Соломона отлично
не копируемые штатными копировка- Но эти вложения вряд ли окупятся, пос- справляются с одиночными ошибками,
ми. Это может быть и область предза- кольку копировщики защищенных дис- но намного хуже – с групповыми. Что-
зора первого трека (first pre-gap), и суб- ков уже давно справились с нестан- бы ослабить влияние дефектов, при-
канальные данные, также называемые дартными форматами, так что не бу- шлось прибегнуть к перемешиванию.
данными подканалов (subchannel data), дем на них останавливаться и двинем- А это значит, что «дыра» затрагивает
и т. д. Достоинства – высокая совмес- ся дальше. не один сектор, а целую группу секто-

№8, август 2005 65


безопасность

Детектирование VMWare вания, защищаемая программа сразу Листинг 1. Определение версии VMWare
Автору известны по меньшей мере три поймет, куда ее занесло. mov eax, 564D5868h ; VMWARE _ MAGIC
способа обнаружения VMWare. Во-вторых, виртуальные сетевые mov ecx, 0Ah ; Get VMware version
mov edx, 5658h ; VMWARE _ PORT
Во-первых, по оборудованию: вир- карты имеют довольно предсказуе- in eax, dx
туальные машины несут на своем бор- мый диапазон MAC-адресов, а имен-
ту довольно специфический набор же- но: 00-05-69-xx-xx-xx, 00-0C-29-xx-xx-xx Для маскировки виртуальной ма-
леза, практически не встречающийся и 00-50-56-xx-xx-xx. Защите достаточ- шины Костей Кортчинским (Kostya
в живой природе. Это: но выполнить команду «arp -a», чтобы Kortchinsky) был написан специаль-
! видеокарта VMWare Inc [VMWare распознать хакерские планы. ный патч, изменяющий идентифи-
SVGA II] PCI Display Adapter; В-третьих, VMWare имеет коварный кационные строки оборудования,
! сетевая карта: Advanced Micro backdoor, оставленный разработчика- MAC-адреса и магический номер
Devices [AMD] 79c970 [PCnet 32 ми для служебных целей и управляе- backdoor (http://honeynet.rstack.org/
LANCE] (rev 10); мый через порт 5658h, при этом в ре- tools/vmpatch.c).
! жесткие диски: VMWare Virtual гистре EAX должно содержатся «маги- Подробнее о способах детектиро-
IDE Hard Drive и VMWare SCSI ческое» число 564D5868h. вания виртуальных машин можно про-
Controller. Ниже приведен фрагмент кода читать в подборке статей «Know your
червя Agobot, определяющий версию Enemy» (www.honeynet.org/misc/files/
Опросив конфигурацию оборудо- VMWare: papers.tar.gz).

ров! Это дает возможность распознавать «виртуальные» щищенного диска не вносится никаких изменений, и для
BAD-сектора, имитируемые копировщиками. Поразитель- его тиражирования можно использовать абсолютно лю-
но, но ни одна из коммерческих защит такой проверки не бое оборудование, в том числе и бытовой CD-R/RW-ре-
выполняет! Тем не менее копировщики защищенных дис- кордер. Скопировать физическую структуру спиральной
ков уже давно научились обходить Laser Lock, имитируя да- дорожки нереально (на CD-R/RW-дисках уже нанесена
же такие «тонкие» эффекты, как увеличение времени чте- предварительная разметка, причем у каждого типа бол-
ния «продырявленных» секторов и т. д., так что такой при- ванок своя), и хотя ее можно проэмулировать, от эмуля-
ем подходит только для борьбы со штатными копировщи- торов легко защититься (чуть позже мы покажем как). По
ками. К тому же очень трудно найти завод, располагающий правде говоря, существует возможность подбора болван-
соответствующим защитным оборудованием. Вообще-то в ки с похожей спиральной структурой, однако, если привя-
отсутствие лазера можно воспользоваться и обыкновен- зываться не к одной, а нескольким физическим характе-
ным маркером, однако он подходит только для крошечных ристикам, вероятность подобрать «правильный» диск бу-
тиражей (см. рис. 3). дет крайне мала.
Остается последний тип защиты – измерение физи- В принципе можно воспользоваться готовым защит-
ческих характеристик спиральной дорожки (также назы- ным пакетом, но, во-первых, за него придется платить.
ваемый снятием топологии). По такому принципу, в част- Во-вторых, все вышеперечисленные защиты легко копи-
ности, работают CD-Cops, SecureROM 4x, StarForce и не- руются в режиме эмуляции копировщиками Clone CD и
которые другие защиты. Методика отработанная, мож- Alcohol 120%.
но даже сказать вылизанная до зеркального блеска и не- Исключение составляет StarForce Professional Edition,
плохо себя зарекомендовавшая. Судите сами. В образ за- непосредственно скопировать который еще никому не уда-
лось, однако (и это в третьих!) защита слишком агрессивно
вгрызается в операционную систему, вызывая множество
проблем у легальных пользователей. Разработчики харак-
теризуют себя как людей с хакерским прошлым, сильных в
системном программировании. Что касается прошлого – с
этим можно согласиться. Операционную систему они зна-
ют лучше, чем свой задний двор. Но вот программировать
умеют едва ли. Программирование – это в первую очередь
проектирование. А проектирование – это учет рисков. Ни-
какой конструктор не позволит себе строить мост по непро-
веренным формулам или проводить на нем научные экс-
перименты, гадая, произойдет обрушение на этот раз или
не произойдет. Программа, ориентированная на массовое
применение, просто не может пользоваться недокументи-
рованными возможностями и прочими приемами нетради-
ционного программирования (в народе именуемых хаками).
У себя в заднем дворе делайте, что хотите, но вот пользо-
Рисунок 3. Лазерный диск, защищенный Laser Lock вателю требуется нормальный продукт.
(«снимок» получен сканером HP 1200) А давайте запрограммируем защиту самостоятельно!

66
безопасность
Ядро измерителя структуры спиральной дорожки занимает Исходный текст «измеряющей» программы приведен
всего несколько строк на Си. Вместе с обвязочным кодом ниже:
выходит около десятка… Полный цикл разработки вмес-
те с отладкой легко укладывается в пару недель. Так сто- Листинг 2. Макет программы sf.c для снятия топологий
ит ли за это платить? //-[чтение сектора с диска]---------------------------------
// ARG:
// CD указатель на строку с именем привода
Star-force своими руками // (например, "TEAC"), адрес на ASPI-шине
Спиральная дорожка лазерных дисков очень похожа на // (например, "1.1") или имя диска("\\.\G:");
// первые два варианта работают через ASPI,
грампластинку, только начинается не снаружи, а изнутри, // последний через SPTI;
наматываясь от центра к краю. Оптическая головка, удер- //
// buf указатель на буфер SECROR _ SIZE*2
живаемая в магнитном поле «звуковой катушки», движется //
на «салазках» поперек спиральной дорожки. Сама дорож- // sector номер сектора в LBA-формате
//
ка состоит из секторов с данными и каналов подкода. Но- // RETURN:
мера секторов находятся как в заголовках самих секторов, // 0 успешно
// -1 ошибка
так и в каналах подкода, «размазанных» вдоль спиральной read _ from _ cd(char *CD, unsigned char *buf, long sector)
дорожки. Для грубой наводки на требуемый сектор исполь- {
int stat;
зуются салазки и каналы подкода, а для точной – отклоне- stat=cd _ raw _ sector _ read(CD, buf, SECTOR _ SIZE, ↵
ние в магнитном поле и секторные заголовки. sector, ONE _ SECTOR, W _ USER _ DATA);
if (stat == SCSI _ OK) return 0; return -1;
Просто взять и измерить структуру спиральной до- }
рожки нельзя, но можно сделать вот что: допустим, голо-
//-[чтение TSC-счетчика]------------------------------------
вка считывает сектор X, а следом за ним сектор Y. Если unsigned int A()
угол XOY, образованный центром (O) диска, секторами X {
_ _ asm{
и Y составляет порядка ~15 град., а сами сектора распо- _ emit 0xF ; RDTSC
ложены на соседних витках спирали, то приводу достаточ- _ emit 0x31
}
но всего лишь немного отклонить головку и через мгно- }
вение сектор Y сам падает в руки, как перезревшее яб-
#deÞne argCD v[1]
локо – диск ведь вращается! Если же угол XOY составля-
ет менее ~15 град., тогда за время перемещения головки // КОНФИГУРАЦИЯ
//-----------------------------------------------------------
сектор Y уже «уплывет» и приводу придется ждать целый // номер первой точки измерения (LBA-адрес)
оборот лазерного диска, пока он не достигнет оптической // данная утилита измеряет топологию только по одной
// точке, что не есть хорошо, т.к. легко подобрать похожий
головки (см. рис. 4)! // диск, для уверенности следует выбрать несколько точек:
Замеряя время чтения различных пар секторов, мы мо- // в начале, середине и конце диска
#deÞne _ CFG _ BGN _ SEC _ 17699
жем приблизительно определить их взаимное расположе-
ние на спиральной дорожке. У каждой партии диска для // количество секторов для измерения
// должно быть не меньше утроенного количества секторов
заданных секторов X и Y оно будет своим (ведь степень // на виток в данной точке измерения
«закрутки» спирали неодинакова и варьируется от одного // (см. _ CFG _ BGN _ SEC _ ) число витков спирали N
// с поперечной плотностью D витков/мм от радиуса R1
производителя к другому). Чтобы побороть упреждающее // до радиуса R2 определяется формулой: N = (R2- R1) * D
считывание (которым «страдают» многие приводы), за- #deÞne _ CFG _ LEN _ SEC _ 0x669
щита должна читать сектора в порядке убывания их LBA- // максимальный шаг приращения
адресов. Также она должна измерять скорость вращения // в принципе должен быть равен удвоенному количеству
// секторов на данном витке спирали, что увеличивает
привода, чтобы, во-первых, определить постоянство вре- // точность измерений, но можно использовать и значение
менных замеров (пляшут ли они как пьяные человечки или // _ CFG _ LEN _ SEC _
#deÞne _ CFG _ LEN _ DEL _ _ CFG _ LEN _ SEC _
нет), а во-вторых, скорректировать формулу для вычисле-
ния угла, поскольку, чем быстрее вращается диск, тем ско- // начальный шаг приращения (должен быть
// по возможности мал)
рее «уплывает» сектор. #deÞne _ CFG _ BGN _ DEL _ 0x2

// приблизительное количество секторов на данном витке спирали


// (в данной версии программы это значение мало на что влияет)
#deÞne _ CFG _ xWHELL _ 27

// конечный сектор для проверки


#deÞne _ END _ SEC _ ( _ CFG _ BGN _ SEC _ + _ CFG _ LEN _ SEC _ )

// конечный шаг
#deÞne _ END _ DEL _ ( _ CFG _ BGN _ DEL _ + _ CFG _ LEN _ DEL _ )

// приращение шага
#deÞne FB(b) (##b = (##b + 1) % _ END _ DEL _ );

// шапка цикла
#deÞne FH(a,b) for (##a= _ END _ SEC _ , ↵
Рисунок 4. Когда угол между секторами X и Y составляет ##b= _ CFG _ BGN _ DEL _ ; ##a > _ CFG _ BGN _ SEC _ ; ↵
~15 град. при переходе на соседний виток, сектор Y ##a-=##b)
сразу же «подлетает» к оптической головке (рисунок слева)
при меньшем значении угла сектор Y успевает уплыть, main(int c, char** v)
и головка вынуждена ждать целый виток {

№8, август 2005 67


безопасность
int a, b; int x=0; int i=0; int A1, A2; тически просканирует системную шину и выведет адреса
unsigned char buf[SECTOR _ SIZE];
и названия всех обнаруженных приводов.
// проверка аргументов командной строки Это может выглядеть, например, так:
if (c < 2) {
fprintf(stderr,"USAGE:sf.exe CD\n\n");
printf( " SCSI _ INQUITY via ASPI32\n"\ Листинг 3. Результат запуска программы без ключей
"-------------------------------------\n");
read _ from _ cd("?.?", buf,0); return 0; >sf.exe
}
USAGE:sf.exe CD
// этап первый
//---------------------------------------------------- SCSI_INQUITY via ASPI32
// читаем случайные сектора для разгона привода -------------------------------------
fprintf(stderr,"%s\n", _ TEXT _ SPINEUP _ ); 0.0 <-- ELBY DVD-ROM 1.0 (5)
for (a = 0; a < 0x69; a++) 1.0 <-- ST380011A 3.06 (0)
{ 2.0 <-- IBM-DTLA-307015 TX2O (0)
read _ from _ cd(argCD, ↵ 2.1 <-- TEAC CD-W552E 1.09 (5)
buf,rand()% _ END _ SEC _ ); 3.0 <-- AXV CD/DVD-ROM 2.2a (5)
fprintf(stderr,"\r%02d%%",a*100/0x69); 3.1 <-- AXV CD/DVD-ROM 2.2a (5)
} 3.2 <-- AXV CD/DVD-ROM 2.2a (5)
// этап второй
//---------------------------------------------------- Ключ «СВ», отвечающий за выбор привода, задает не
// определяем количество секторов на дорожке только сам привод, но и интерфейс взаимодействия.
// и стабильность вращения привода, алгоритм
// определения количества секторов: читаем сектора Если имя привода выглядит как название устройства
// задом наперед, с циклически увеличивающимся (т.е. начинается с префикса «\\.\»), то управление будет осу-
// шагом, наименьшее значение шага, при котором
// время чтения секторов будет минимальным, и будет ществляться через интерфейс SPTI. Для этого вы должны
// равно количеству секторов на данном витке спирали иметь Windows NT/2000/XP и права администратора. Если
// (в данной версии не реализовано, поскольку
// слишком громоздко и не наглядно) имя выглядит как адрес устройства на шине или как часть
// идентификационной строки привода, то управление будет
// алгоритм определения стабильности: читаем сектора
// с шагом, равным количеству секторов на данном осуществляться через интерфейс ASPI, для работы через
// витке спирали, и оцениваем разброс; который необходимо установить ASPI-драйвер (его мож-
// если разброс будет слишком большим
// (превышает 10%-15%), следует уменьшить скорость но бесплатно скачать с сервера компании Adaptec – http://
// привода (как это сделать, показано в CD.snail.c) www.adaptec.com).
fprintf(stderr,»\r%s\n», _ TEXT _ TEST _ );
for (a = _ END _ SEC _ ; a > _ CFG _ BGN _ SEC _ ; ↵ Например, «sf.exe TEAC» (или «sf.exe 2.1») заставляет
a-= _ CFG _ xWHELL _ ) программу работать с приводом TEAC (адрес на ASPI-ши-
{
A1=A(&c);read _ from _ cd(argCD, ↵ не – 2.1) через ASPI-интерфейс, а «sf.exe \\.\G:» – с приводом
buf,a);A2=A(&c); «G:» через SPTI-интерфейс. Программа выводит данные в
fprintf(stderr,"\r%02d%%",( _ END _ ↵
SEC _ -a)*100/ _ CFG _ LEN _ SEC _ ); форме таблицы, предназначенной для импорта в MSGraph,
} причем вывод оптимизирован для перенаправления в файл
// этап третий (важнейший!) (на экране все выглядит кошмарно), поэтому правильный
//---------------------------------------------------- вызов выглядит примерно так: «sf.exe \\.\G: > C:\1.txt».
// производим, собственно, измерения
// (внимание: сюда еще необходимо добавить По окончании работы программы запускаем MS Word, от-
// «сглаживание» полученных данных) крываем меню «Вставка», там будет «Рисунок» и «Диаграм-
fprintf(stderr,"\r%s\n", _ TEXT _ ANGLE _ ); ма». В меню «Правка» находим «Импорт», «Тип файлов» →
// выводим шапку таблицы «*.txt», «Формат данных» → «С разделителем», «Начать им-
printf("delta:"); FH(a,b) { printf("\t%d",a); ↵ порт» со строки 1, «Далее >>», «Символом разделителя яв-
FB(b); } printf("\ntime:");
ляется»: «[x] символ табуляции», «Далее >>», «Формат дан-
// измеряем и тут же выводим результаты ных» → «Общий» и жмем кнопку «Готово». Далее действу-
FH(a,b)
{ ем по своему вкусу, то есть по обстановке.
A1=A(&c); read _ from _ cd("TEAC", ↵
buf,a); A2=A(&c);
printf("\t%d",(A2-A1)/100); Cбор топологий, испытания защиты
fprintf(stderr,"\r%02d%%",( _ END _ ↵
SEC _ -a)*100/ _ CFG _ LEN _ SEC _ ); и обсуждение результатов
FB(b); Вставляем подопытный диск в привод (пусть это будет, на-
} printf("\n");
пример, диск, прилагаемый к журналу «Компьютер пресс»
// всему конец 2005/07, условно обозначенный нами как диск «А») и сни-
fprintf(stderr,"\r%s\n", _ TEXT _ END _ ); return 0;
} маем с него топологию (см. рис. 5). Мы получаем харак-
терную «пилу», точки минимума и максимума которой ука-
Программа использует библиотечку SCSIlib, разрабо- зывают на то, что данная пара секторов лежит на одной
танную автором для низкоуровневого управления приво- прямой.
дами с прикладного уровня. Ее можно бесплатно скачать Очевидно, что на других дисках те же самые сектора бу-
с моего ftp-сайта автора (cм. «nezumi ftp»). дут иметь совсем другой угол, поэтому минимумы и мак-
симумы сместятся на некоторое расстояние. Берем диск
Запуск программы Microsoft Visual Basic 2005 (обозначенный нами как «B»),
При запуске без аргументов программа выдаст краткую прилагаемый к тому же самому журналу, и запускаем про-
справку по ключам, а при наличии ASPI-драйвера автома- грамму еще раз (см. рис. 6).

68
безопасность

Полезный совет
Перед снятием топологии скорость привода рекомендует-
ся уменьшить хотя бы до 16x-24х. Как это сделать, показа-
но в утилите CD.snail.c, исходный текст которой можно бес-
платно скачать с ftp автора.

Пилообразная кривая действительно сместилась при-


близительно на половину периода. Так же слегка измени-
лась и амплитуда колебаний, но нас она не интересует. Бу-
дем отталкиваться не от абсолютных, а от относительных
значений, т.е. от LBA-адресов «изломов» кривой (абсолют-
ные значения находятся в прямой зависимости от «окружа-
ющей среды» и потому ненадежны). Учитывая, что положе-
ния максимумов/минимумов зависят не только от тополо- Рисунок 5. Топология диска «А»
гии диска, но еще и от скорости вращения привода, необ-
ходимо расширить доверительный интервал до нескольких
секторов. А теперь возьмем диск с другого номера «Ком-
пьютер Пресс» (диск «C») и сравним его топологию с дис-
ком «A» (см. рис. 7).
Топологии обоих дисков полностью совпадают! Это оз-
начает, что диски «Компьютер Пресс» штамповались на
одном заводе, а диск с Visual Basic на другом! Любопыт-
ное наблюдение, не правда ли? С помощью этой програм-
мы мы можем не только защищаться от копирования, но и
проводить интересные исследования (кстати, эта програм-
ма была специально написана мной по заказу американс-
кого полицейского управления, занимающегося борьбой с
пиратством. Обычная история – продавец заказывает пар-
тию лицензионных дисков и затем перемешивает их с «пи-
раткой». Как установить факт обмана? Вот тут-то структу- Рисунок 6. Топология диска «B»
ра спиральной дорожки и выручает!).
Демонстрационная программа снимает топологию
только в одной точке (на участке между адресами 27532
и 18082). Разумеется, это ненадежно и при желании мож-
но подобрать диск с похожей топологией (для этого доста-
точно взять приблизительно 10 болванок от разных произ-
водителей). Для усиления защиты настоятельно рекомен-
дуется снимать топологию по меньшей мере в трех точках
– начале, конце и середине диска. В этом случае найти по-
хожий диск будет намного труднее.

Защита от анализа
Существует по меньшей мере два способа взлома: ко-
пирование диска специализированными копировщиками
или анализ защитного кода с последующей модификаци-
ей (он же bit hack). Создать некопируемый диск это толь-
ко полдела. Еще необходимо защитить свою программу Рисунок 7. Сравнение топологий дисков «A» и «C»
от анализа.
Обычно анализу противостоят шифровкой кода/дан- некрасивый, но убойный подход, основанный на генерации
ных, однако, это не слишком-то удачное решение, ведь «мусорного кода», внедряемого в защищаемую програм-
перед выполнением программы ее все равно приходится му. Похожая техника используется во многих полиморфных
расшифровывать. Хакеру остается всего лишь дождаться вирусах, из которых можно «выдрать» уже готовые «движ-
этого момента и снять дамп. Можно, конечно, расшифро- ки» (engine). Мусорный код чрезвычайно затрудняет ана-
вывать программу по частям или использовать несколь- лиз, делая его практически невозможным. Допустим, клю-
ко независимых расшифровщиков, но трудоемкость раз- чевая функция программы компилируется в тысячу ма-
работки защиты в этом случае практически не отстает от шинных команд. Исходя из «крейсерской» скорости дизас-
сложности взлома. семблирования 1 команда в секунду, хакер сможет «про-
В последнее время большое распространение получил честь» (только прочесть! не проанализировать!) весь код

№8, август 2005 69


безопасность
за ~15 минут, но после разбавления функции миллионом Можно ли этому противостоять? Разработчики StarForce
мусорных инструкций, чтение листинга потребует свыше использовали прямой доступ к IDE-контроллеру в обход
10 суток напряженной работы, а полный анализ растянет- всех установленных драйверов, в том числе и драйвера-
ся на долгие годы. эмулятора. А как быть, если у пользователя установлен
Звучит прекрасно, но без подводных камней не обхо- не IDE-привод? Тогда StarForce вынуждена работать че-
дится. Во-первых, если перестараться, то скорость про- рез уже установленные драйвера. Чтобы обойти защиту,
граммы упадет в разы, причем нужно учитывать, что да- достаточно выдернуть шлейф со своего привода или от-
леко не у всех стоит Pentium-4, поэтому «замусоривать» ключить соответствующий канал IDE-контроллера на ле-
можно только редко вызываемые функции. Во-вторых, му- ту, и StarForce падет. Не очень-то сильная защита, да к то-
сорный код должен быть достаточно нетривиальным, что- му же трудно реализуемая (см. рис. 8).
бы его «мусорность» не бросалась в глаза. Использование Мы же пойдем другим путем. Если открыть стандарт по
XCHG EBX,EBX или MOV EAX,EAX легко отсекается анали- SCSI- или ATAPI-устройства (их черновые версии лежат на
заторами. В-третьих, в некоторых случаях анализ защит- www.t10.org и www.t13.org соответственно), можно обнару-
ного алгоритма необязателен и хакер может взломать про- жить десятки «мультимедийных» команд, поддерживае-
грамму и так (см. «Защита от мониторов шины»), поэтому мых практически всеми современными приводами. В эму-
линия обороны должна быть хорошо продуманной и одно- ляторах же реализована лишь малая часть. Поэтому, что-
родной на всем своем протяжении. Бронебойные ворота бы защититься от эмуляторов, достаточно задействовать
бесполезны, если вокруг нет стен. хотя бы половину SCSI/ATAPI-команд (попутно это «убьет»
Еще лучше применять P-код, реализовав «виртуаль- мониторы шины и прочие анализаторы).
ную машину» и написав свой собственный интерпрета- Даже если последующие версии эмуляторов поумнеют
тор. Поскольку программировать в P-коде очень непро- и будут имитировать весь «лексикон» привода целиком, они
изводительно и неудобно, рекомендуется реализовать навряд ли смогут воспроизвести все особенности каждой
транслятор, «пережевывающий» исходный текст, напи- команды и их комбинаций. Впрочем, не будем забегать впе-
санный на Паскале или Си, и выдающий последователь- ред. Эмуляторы совершенствуются медленно и качествен-
ность инструкций Машины Тьюринга, Сетей Петри, Стрел- ных рывков с их стороны пока не ожидается.
ки Пирса и т. д. Чем ниже уровень абстракции, тем лучше
для нас и хуже для хакера. Программа, состоящая из не- Защита от мониторов шины
скольких сотен строк, превращается в десятки тысяч или Для взлома защиты не всегда требуется дизассемблиро-
даже миллионы инструкций Тьюринга, декомпиляторов с вать код. Вместо этого можно запустить монитор шины для
которой не существует! Как компромиссный вариант мож- перехвата обмена программы с приводом. Анализируя пос-
но использовать Форт, транслирующий исходный текст в ледовательность вызовов SCSI/ATAPI команд, вполне ре-
шитый код. Это легко (и с комфортом) программируется, ально разгадать алгоритм защиты, определив, к каким
быстро работает, но долго ломается. Тем не менее, трудо- именно характеристикам диска она привязалась.
емкость взлома порядка на два ниже, чем у Машины Тью- Большой популярностью пользуется монитор Bus Hound,
ринга или Стрелки Пирса. ознакомительную версию которого можно бесплатно ска-
чать с сайта http://www.perisoft.net/bushound. Он не толь-
Защита от эмуляторов ко позволяет перехватывать USB 1.0/2.0, SCSI/ATAPI/IDE/
Структуру спиральной дорожки невозможно скопировать, SATA, FireWire, Bluetooth, Fibre Channel порты, но еще и отоб-
но легко проэмулировать. Вместе с копировщиками защи- ражает относительное и абсолютное время выполнения за-
щенных дисков, как правило, поставляются программы- просов, что существенно облегчает исследование защит,
эмуляторы, создающие виртуальный CD-ROM/DVD при- основанных на временных характеристиках.
вод. Копировщик проделывает ту же самую операцию, что Наша защита никак не противодействует мониторам
и защита – снимает топологию с защищенного диска и пе- шины (Star-Force, кстати говоря, тоже), поэтому все коман-
редает ее эмулятору. ды видны как на ладони и алгоритм привязки становится
понятным с первого взгляда (см. рис. 9).
Ссылки по теме запутывания кода Как «ослепить» монитор? Можно, конечно, использовать
! Анализ запутывающих преобразований программ: те- прямой доступ к IDE-контроллеру или разнообразные ан-
оретическая статья, рассматривающая основные мето- тиотладочные (точнее, «анти-мониторные») приемы, толь-
ды «замусоривания» кода и проблемы его «прополки» ко… все это сложно, потенциально конфликтно и вообще
(на рус.): http://www.citforum.ru/security/articles/analysis. ненадежно. Лучше «разбавлять» наши команды большим
! A Taxonomy of Obfuscating Transformations: еще одна ста- количеством «мусорных» SCSI/ATAPI-команд, чтобы зате-
тья, посвященная «замусориванию» кода с большим ряться на их фоне. Алгоритм станет неочевидным и анализ
количеством примеров (на англ.): http://www.cs.arizona. потребует намного больше времени и усилий.
edu/~collberg/Research/Publications/CollbergThomborson Один нюанс: «мусорные» команды ни в коем случае не-
Low97a. льзя генерировать на случайной основе, в противном слу-
! Virtual Machine Design and Implementation in C/C++ by Bill чае хакер снимет несколько дампов, выделит в них посто-
Blunden: реализация виртуальных машин на Си/Си++ – янную часть, а все остальное отбросит за ненадобностью.
отличная бумажная книга на англ., электронная версия, А вот основные команды лучше выбирать случайным об-
по-видимому, недоступна. разом. В частности, для чтения сектора можно использо-

70
безопасность

Полезные советы
! положите на ключевой диск файл с заманчивым назва-
нием user_name.key и выполняйте над ним различные
запутанные операции, это слегка умерит прыть хакера
и остановит его на какое-то время;
! вносите на диск несколько принципиально различных
ключевых меток, но проверяйте только часть из них,
а часть – оставьте для последующих версий програм-
мы (или ее обновлений), тогда хакеру придется каждый
Рисунок 8. Виртуальный диск Virtual Clone CD раз проводить утомительные исследования, подолгу за-
в «Моем компьютере» висая над монитором шины, дизассемблером и отлад-
чиком;
! помните, что даже тщательно оттестированная защи-
та в силу некоторых причин может не сработать, «об-
ругав» легального пользователя; поэтому необходимо
использовать по меньшей мере три независимых за-
щитных механизма, основанных на различных харак-
теристиках носителя, и если срабатывают хотя бы два
из них, проверка считается пройденной; в данной ста-
тье мы рассмотрели всего лишь один такой механизм,
остальные – в следующий раз.

ворили в начале статьи), но с некоторыми предосторожнос-


тями использовать его все-таки можно. Тем более, что про-
жиг на CD-R снимает проблему тиражирования – клиентская
программа самостоятельно управляет пишущим приводом и
может свободно использовать все нестандартные режимы,
на которые он только способен. Большое количество разно-
образных защитных приемов описано в моей книге «Техни-
ка защиты лазерных дисков от копирования», демонстраци-
Рисунок 9. Исследование защиты с помощью монитора шины онную версию которой можно найти на моем ftp.
вать и READ 10/12, и READ CD и READ CD MSF, и некото-
рые другие. nezumi ftp
Автор поднял экспериментальный ftp-сервер, раздающий
Удаленный прожиг свои авторские материалы:
Ключевые лазерные диски хорошо подходят для «коробоч- ! IP-адрес: 83.239.33.46;
ного» ПО, но для программ, распространяемых преимущес- ! доменное имя: nezumi.org.ru;
твенно через Интернет, они создают множество трудностей. ! порт: 21 (стандартный),
Рассылка дисков – это огромная головная боль, но ведь не ! логин: WASM,
передавать же лазерный диск по модему. А почему бы и нет? ! пароль: не требуется;
Современные технологии еще и не на такое способны! ! папка: /pub,
Пользователь скачивает клиентскую программу, кото- ! канал: 500 Мб;
рая просит вставить чистый CD-R-диск в пишущий привод, ! приблизительное время работы: с 14:00 до 06:00, при
прожигает одну сессию, заполненную незначащими данны- возникновении проблем рекомендуется установить пас-
ми, снимает топологию и по криптографическому протоко- сивный режим ftp-клиента.
лу передает эту информацию серверу. Сервер «зашивает»
топологию внутрь защищаемой программы и отсылает ее Заключение
клиентcкой программе, которая либо записывает програм- Разработка собственных защит от копирования – это реаль-
му на диск, либо устанавливает на винчестер. ность. Забудьте о широко разрекламированных готовых па-
Конечно, такая схема взаимодействия существенно ос- кетах. Всякая серийная защита притягивает внимание сотен
лабляет защищенность программы. Ведь во всей партии тысяч хакеров со всего света, которые быстро находят более
болванок структура спиральной дорожки одинакова и по- или менее универсальный способ взлома, такой, что им мо-
тому, оплатив только одну копию, нечестный пользователь жет воспользоваться даже простой обыватель. Стойкость не-
сможет тиражировать ее чуть ли не в промышленном мас- серийных защит (даже спроектированных непрофессиона-
штабе. Чтобы этого не произошло, следует использовать лами) зачастую оказывается намного выше, потому что никто
аддитивную защиту, комбинирующую привязку к тополо- не хочет с ними связываться. Единичный взлом себя не оку-
гии с нестандартным форматом диска, например. Конечно, пит! Надеюсь, что эта статья поможет вам избежать ошибок
нестандартный формат – плохая штука (и об этом мы уже го- и разработать защиту своей мечты самостоятельно.

№8, август 2005 71


программирование

КОНТРОЛИРУЕМ И ОГРАНИЧИВАЕМ
СИСТЕМНЫЕ ВЫЗОВЫ
С ПОМОЩЬЮ SYSTRACE

АЛЕКСАНДР БАЙРАК

Наверняка вы не раз задумывались о том, как именно работает та или иная используемая
вами программа. Разобраться помогут исходные текcты программы. Но что делать,
если они недоступны? Как всегда быть в курсе того, что происходит у вас в системе?

S
ystrace – инструмент для ограничения и контроля сис- ли такие инструменты, как ktrace (kernel process tracing)
темных вызовов. Изначально systrace был написан и truss (tracing system call), позволяют нам выступать лишь
для NetBSD, позже был портирован под OpenBSD, в качестве наблюдателей, systrace позволяет нам вмеши-
а в настоящий момент ведутся работы по переносу на Linux, ваться в происходящее.
FreeBSD и OpenDarwin.
Любая программа в процессе свой работы использует Пример использования
системные вызовы. Что такое системный вызов? Его мож- Перейдем к практике. В качестве примера напишем про-
но определить как некую функцию, которая позволяет ва- стую программу:
шей программе обращаться к ядру ОС для выполнения не-
кого действия. В современных версиях UNIX-систем реа- #include <stdio.h>
void proc1();
лизовано около 300 различных системных вызовов. И ес- int main()

72
программирование
{ того, чтобы исключить возможность применения политики
printf("just a message\n");
mkdir(«test»); для файла с таким же именем, но располагающимся в дру-
proc1(); гом месте. Emulation: netbsd показывает, что будет исполь-
}
void proc1() зоваться ABI ОС NetBSD.
{
printf("just a dumb procedure\n"); netbsd-mmap: permit
}
Как видно из названия, системному вызову mmap раз-
Как ясно из исходного текста, наша подопытная про- решено исполняться. Для позволения выполнения систем-
грамма выполняет следующие действия: ного вызова используется действие – permit, для запреще-
! Выводит на экран сообщение. ния deny.
! Создает каталог «test».
netbsd-fsread: filename eq “/etc/ld.so.conf” then permit
! Передает управление процедуре «proc1».
! Процедура proc1 выводит на экран сообщение. Тут мы видим, что системному вызову fsread будет раз-
решено выполниться в том случае, если запрошенный им
Скомпилируем программу: файл будет /etc/ld.so.conf. Стоп, скажет внимательный чи-
татель, системного вызова fsread не существует! И будет
#gcc -o proga proga.c абсолютно прав. По умолчанию в systrace применяется ис-
пользование псевдонимов для системных вызовов. Напри-
На первый взгляд при выполнении нашей программы мер: fsread является псевдонимом для stat, lstat, readlink,
используются два системных вызова: mkdir и write. Хотя ло- access, open. Но при желании режим использования псев-
гично предположить, что, перед тем как «что-то» «куда-то» донимов можно отключить. В дальнейшем комментирова-
записать с помощью write, это самое «куда-то» нужно сна- нии всего файла конфигурации смысла не вижу – все долж-
чала открыть, а после записи закрыть, а значит, задейс- но быть понятно и без этого.
твованы системные вызовы open и close . Также не лише- Что ж, политика для нашей программы создана, да-
но смысла предположение, что используется еще один сис- вайте попробуем ее выполнить под чутким руководством
темный вызов – exit. Итого пять вызовов. Посмотрим, как systrace:
обстоят дела на самом деле:
#systrace -a /home/01mer/labs/systr/proga
#systrace -A /path/to/program/proga
just a message
just a dumb procedure
Ключ -A указывает systrace автоматически создать по-
литику для указанного исполняемого файла. Как мы видим, все функции нашей программы выпол-
Автоматический режим предполагает создание правил нились. Предположим, что логика нашей программы изме-
в режиме «разрешить все». нилась, что будет происходить в этом случае? Давайте для
После выполнения команды в домашнем каталоге поль- примера изменим функцию proc1 в нашей программе. Для
зователя появится подкаталог .systrace, в который будет по- начала мы должны точно знать, что будем менять. Просто
мещен файл c правилами. Рассмотрим его: изменить пару строчек в исходном коде и перекомпилиро-
вать программу, конечно, можно, но я предлагаю более ин-
Policy: /home/01mer/labs/systr/proga, Emulation: netbsd
netbsd-mmap: permit тересный подход.
netbsd-fsread: filename eq “/etc/ld.so.conf” then permit
netbsd-__fstat13: permit
netbsd-close: permit #objdump -d proga > proga.lst
netbsd-munmap: permit
netbsd-fsread: filename eq “/lib/libc.so.12.114.1” then permit
netbsd-__sysctl: permit Программа objdump показывает информацию из бинар-
netbsd-fsread: filename eq “/etc/mallic.conf” then permit
netbsd-break: permit ных/объектных файлов. Ключ -d указывает, что файл нуж-
netbsd-ioctl: permit
netbsd-write: permit
но дисассемблировать. Вывод информации для удобства
netbsd-fswrite: filename eq “/home/01mer/labs/systr/test” then permit произведем в proga.lst
netbsd-exit: permit
В полученном листинге находим нашу процедуру proc1.
Синтаксис правил достаточно прост:
08048833 <proc1>:
8048833: 55 push %ebp
[системный вызов] [условие] [действие] 8048834: 89 e5 mov %esp,%ebp
8048836: 83 ec 08 sub $0x8,%esp
8048839: 83 ec 0c sub $0xc,%esp
Мы видим, что в процессе исполнения нашей программы 804883c: 68 16 89 04 08 push $0x8048916
используется несколько больше системных вызовов, чем 8048841:
8048846:
e8 52
83 c4
fc ff ff
10
call
add
8048498 <init_fallthru+0x2d>
$0x10,%esp
можно было бы предположить с самого начала. 8048849: c9 leave
Рассмотрим полученные правила. 804884a:
804884b:
c3
90
ret
nop

Policy: /home/01mer/labs/systr/proga, Emulation: netbsd


Если не вдаваться в подробности, мы видим тут «под-
Указывается, для какого бинарного файла политика опи- готовку» стека, выполнение вывода на экран текста, очи-
сана ниже. Полный путь к исполняемому файлу нужен для щение стека и возврат в «основную» программу. Итого 25

№8, август 2005 73


программирование
байт, которые мы должны изменить на что то свое. Негус- в том, что мы запускаем. Во всех остальных случаях реко-
то, но вполне хватит для классического shell-кода вызыва- мендуется создавать правила в интерактивном режиме.
ющего /bin/sh, он занимает как раз 23 байта (не забывай- Рассмотрим пример:
те, что 2 байта нам нужны для возврата в «основную про-
грамму»). А это именно то, что нам нужно – используется #systrace -t /home/01mer/labs/systr/newproga
системный вызов, описания которого нет в наших прави-
лах. Читаем man 2 execve. Для запуска /bin/sh через execve Ключ -t указывает, чтобы интерактивное создание пра-
мы должны написать следующие: вил проходило в текстовом режиме. Если у вас на маши-
не установлены x-windows, вы можете воспользоваться
execve("/bin/sh/",0,0); xsystrace.
/home/01mer/labs/systr/newproga, pid: 729(0)[0],
Что можно свести к следующему коду на ассемблере: policy: /home/01mer/labs/systr/newproga, filters: 0,
syscall: netbsd-mmap(197), args: 32
xorl %eax,%eax Answer:
pushl %eax
pushl $0x68732f2f Тут systrace ожидает от нас ввода permit, в случае если
pushl $0x6e69622f мы желаем разрешить системный вызов или deny для за-
movl %esp,%ebx
pushl %eax прета. Конечно, интерактивное создание правил – процесс
pushl %esp достаточно трудоемкий и занимает много времени, но полу-
pushl %ebx
pushl %eax ченный результат того стоит. Вы будете точно знать, когда
movb $0x3b,%al и какие системные вызовы использует программа.
int $0x80

Все это можно представить в следующих опкодах: Дополнительные «полезности»


В синтаксисе правил вы можете использовать необязатель-
31 c0 ные опции протоколирования.
50
68 6e 2f 73 68 Например:
68 2f 2f 62 69
89 e3 netbsd-fsread: Þlename eq "/lib/libc.so.12.114.1" ↵
50 then permit log
54
53
50 параметр log указывает systrace протоколировать каждое
b0 3b обращение к указанному фильтру.
cd 80
По умолчанию протоколируются лишь попытки выпол-
Вооружившись hex-редактором, открываем исполняе- нить системные вызовы, о которых нет ни слова в прави-
мый файл с нашей программой и меняем содержимое proc1 лах. Для протоколирования systrace использует syslogd.
на представленные выше опкоды. Само собой, нам нужно А это значит, что мы можем немного поправить /etc/syslog.
оставить команды возврата в «основную» программу. Пос- conf, чтобы все сообщения от systrace размещались в от-
ле успешного редактирования проверяем результат: дельном файле.
При желании даже можно написать маленький парсер
#/home/01mer/labs/systr/proga для получаемых логов. Но это уже по желанию, все в ва-
Just a message ших руках.
# Нельзя не отметить еще одну необязательную опцию –
errorcode. С её помощью мы можем указать, какая ошибка
Как вы видите, вместо вывода на экран «just a dumb будет возвращаться при обращении к запрещенному сис-
procedure» у нас запустился /bin/sh. темному вызову.
А теперь попробуем выполнить то же самое, но уже под Например:
контролем systrace:
netbsd-fswrite: Þlename eq "/some/where/Þle" ↵
then deny[EIO]
#systrace -a /home/01mer/labs/systr/proga

Just a message В данном случае при попытке записи в файл систем-


Jul 11 16:53:25 darkthrone.net1 systrace: deny user: 01mer, ному вызову будет возвращена ошибка – input/outpu error.
prog: /home/01mer/labs/systr/proga, pid: 395(0)[0],
policy: /home/01mer/labs/systr/proga, filters: 13,
Для ознакомления с полным списком errno кодов возврата
syscall: netbsd-execve(59), filename: /bin/sh, argv: вы можете прочитать man errno.
#

Заключение
Как мы видим, попытка запустить модифицированную Мы рассмотрели простой пример использования systrace.
программу провалилась. Изложенных сведений вам будет достаточно и для созда-
ния более сложных собственных правил для различных про-
Автоматизируем создание правил грамм. Применение политик ограничения системных вызо-
Доверить автоматическое создание правил systrace допус- вов для конкретных программ поможет вам существенно
тимо только в том случае, когда есть уверенность на 99,9% повысить степень защиты ОС в целом.

74
bugtraq

Переполнение буфера в MySQL Уязвимость форматной строки


Программа: MySQL версии до 4.0.25, 4.1.13, 5.0.7-beta. в ProFTPD
Опасность: Низкая. Программа: ProFTPD версии до 1.3.0rc2.
Описание: Переполнение стека возможно в функции init_ Опасность: Средняя.
syms() из-за недостаточной обработки входных данных Описание: 1. Уязвимость форматной строки обнаружена
при создании определенных пользователем функций. Зло- при отображении сообщения об отключении, содержащее
умышленник может указать специально сформированное имя текущей директории. Злоумышленник может создать
название функции, вызвать переполнение буфера и пере- специально сформированное имя каталога и вызвать отказ
записать участок памяти на системе. Удачная эксплуата- в обслуживании или выполнить произвольный код на це-
ция уязвимости позволит злоумышленнику выполнить про- левой системе. Для удачной эксплуатации имя директории
извольный код на целевой системе. должно содержать переменные: «%C», «%R» или «%U».
URL производителя: www.mysql.com. 2. Уязвимость форматной строки обнаружена в модуле
Решение: Установите последнюю версию с сайта произ- mod_sql при получении информации из базы данных. Зло-
водителя. умышленник может создать специально сформированные
insert-запросы к БД и вызвать отказ в обслуживании или
Раскрытие информации и отказ выполнить произвольный код на целевой системе.
в обслуживании в реализации Kerberos URL производителя: www.proftpd.org.
в Microsoft Windows Решение: Установите исправление с сайта производите-
Программа: Microsoft Windows 2000, XP, 2003. ля.
Опасность: Средняя.
Описание: 1. Ошибка существует при обработке опреде- Удаление произвольных файлов
ленных Kerberos-сообщений и позволяет злоумышленнику в printd на Sun Solaris
вызвать отказ в обслуживании контроллера домена. Под- Программа: Sun Solaris 7, 8, 9, 10.
робности уязвимости не раскрываются. Опасность: Низкая.
2. Ошибка при обработке PKINIT-транзакций может поз- Описание: Уязвимость существует в демоне printd. Удален-
волить злоумышленнику получить данные других пользо- ный пользователь может с помощью специально сформи-
вателей с помощью атаки «Человек посредине». рованного запроса удалить произвольный файлы на сис-
URL производителя: www.microsoft.com. теме. Подробности уязвимости не сообщаются.
Решение: Установите исправления от производителя. URL производителя: www.sun.com.
Решение: Установите исправления с сайта производите-
Неавторизованный доступ ля.
в Cisco Clean Access API
Программа: Cisco Clean Access API 3.3.0 до 3.3.9; 3.4.0 Уязвимость форматной строки
до 3.4.5; 3.5.0 до 3.5.3. в nbSMTP-клиенте
Опасность: Высокая. Программа: no-brainer SMTP версии до 1.00.
Описание: CCA Application Program Interface (API) не требу- Опасность: Высокая.
ет авторизацию. Удаленный пользователь может вызвать Описание: Уязвимость форматной строки существует в
API-метод, чтобы поменять роль пользователя, отключить функции log_msg(). Удаленный пользователь может с по-
пользователя или поменять информацию о сконфигуриро- мощью специально сформированной строки выполнить
ванном пользователе. произвольный код на целевой системе.
URL производителя: www.cisco.com. URL производителя: www.nbsmtp.ferdyx.org.
Решение: Установите обновленную версию программы: Решение: Установите последнюю версию с сайта произ-
http://www.cisco.com/warp/public/707/cisco-sa-20050817- водителя.
cca.shtml.
Скриптинг между приложениями
Обход ограничений режима defanged в SPI Dynamics WebInspect
в Metasploit Framework Программа: SPI Dynamics WebInspect.
Программа: Metasploit Framework версии до 2.4. Опасность: Низкая.
Опасность: Высокая. Описание: Злоумышленник может создать специально
Описание: Уязвимость существует из-за ошибки в функ- сформированную веб-страницу и выполнить произволь-
ции StateToOptions() в msfweb, которая позволяет удален- ный сценарий в браузере жертвы. Подробности в статье:
ному пользователю переопределить переменную окруже- XSS – WEB = Cross-Applications Scripting.
ния «_Defanged», тем самым обойти ограничения безопас- URL производителя: www.spidynamics.com/products/
ности режима defanged и запустить проверки на уязвимос- webinspect/index.html.
ти и эксплоиты на целевой системе. Решение: Способов устранения уязвимости не существу-
URL производителя: www.metasploit.com. ет в настоящее время.
Решение: Установите последнюю версию с сайта произ-
водителя. Составил Александр Антипов

№8, август 2005 75


hardware

ИСПОЛЬЗУЕМ LLinux
inuxBIOS
BIOS
НА СИСТЕМАХ VIA EPIA-M

АНТОН БОРИСОВ

Почти каждый из вас в детстве играл в конструктор – собирал железную дорогу


или машинки. По мере взросления у сильной половины человечества игрушки не исчезают,
а только становятся более дорогими. В прошлом номере мы познакомились с историей
развития LinuxBIOS-проекта. Сегодня мы вдохнем жизнь в barebone-систему на базе EPIA-M
и LinuxBIOS.

Приготовления в аппаратной да, всего лишь один, 2 IDE-канала, FireWire-контроллер (ко-


Что для этого потребуется? Аппаратная часть, которая пред- му-то повезет, если приобретет к такой системе FireWire-пе-
ставлена материнской платой VIA EPIA-M 10000, корпусом реносное устройство информации), 6 портов USB. То есть
Morex Cubid 3677S, устройством сохранения FlashROM – вы начинаете понимать, какой универсальный конструктор
RD1-PL производства IOSS. В качестве носителя информа- мы сегодня рассматриваем, не правда ли?
ции используем обычный жесткий диск формата 3,5’, плот- Помимо «взрослости» данной платы на ней также есть
ностью в 160 Гб (кто-то скажет: «А почему не 500 Гб?» – ставшие уже обычным явлением интегрированные аудио-
что ж, у меня не оказалось под рукой жесткого диска та- и сетевой-контроллеры. Так как стандарт mini-ITX ориен-
кого объема). тируется на миниатюрность, то разработчикам пришлось
Обратимся на этом этапе к техническим характеристи- также интегрировать и видео-контроллер. Стоит подчер-
кам сегодняшних компонентов. Материнская плата – в ка- кнуть наличие выхода S-Video и возможности построить
кой-то степени шедевр на сегодняшний день. Некоторое звук в формате 5+1. Да, самое главное – процессор на
время назад компания VIA предложила форм-фактор для этой модели имеет тактовую частоту в 1 ГГц. Не так что-
материнских плат mini-ITX – это миниатюризированный ва- бы и много, но, с другой стороны, и немало. Для процессо-
риант материнских плат, всего-то 17x17 см. На таком про- ра с такой частотой уже используются активные системы
странстве уместился процессор C3/Nehemiah – разработка охлаждения, в то время как на более младших моделях в
компании VIA, созданный на фундаменте достижений ком- 800 МГц ограничились пассивным охлаждением, и поверь-
паний, приобретенных не так давно самой VIA – это Cyrix и те, вполне хватает.
WinChip. Тем, кто заинтересовался историей развития этих Данного малыша, или правильнее сказать малышку,
процессоров, следует ознакомиться с материалами [1-3]. следует пристроить в хорошие руки, с хорошим питанием
Как и на «взрослых» платах, у этого малыша есть север- и экологией – все правильно, надо подобрать правильную
ный и южный мосты, что означает, что есть PCI-слот, прав- «одежду» – корпус. Поэтому для малыша я выбрал «под-

76
hardware
ростковый» корпус с внешним источником питания Morex
Cubid 3677S. Его габариты предусматривают использование
только slim-компонентов – CD/DVD-привода, HDD-накопите-
ля и FDD-накопителя. К сожалению, от первого и последне-
го компонента пришлось отказаться, зато вместо них уда-
лось поставить HDD 3,5’. Поначалу казалось, что уместить
диск такого форм-фактора в столь тонком корпусе невоз-
можно. Но на практике оказалось иначе. Внешний источник
питания в 62 ватта мощностью подает на внутреннюю пла-
ту корпуса 12 вольт, которые преобразуются в дальнейшем
в +12, +5 вольт. Стоит отметить, что получить 12 вольт мож-
но и от бортовой системы автомобиля. Впрочем, область
применения мини-систем формата mini-ITX заслуживает от-
дельного разговора. Скажу, что именно на базе EPIA пост-
роены некоторые автомобильные системы.

Сбереги себя сам Рисунок 1. Жесткий диск лежит на радиаторах охлаждения


Чтобы не получилось ситуации «Знал бы – соломинку под-
ложил», придется приобрести или одолжить на некоторое
время у знакомых технических специалистов специальное
устройство сохранения FlashROM. Под устройством сохра-
нения FlashROM подразумевается BIOS Savior – это некий
симбиоз из 2 микросхем flash-памяти – одна из которых,
оригинальная, находящаяся в PLCC-слоте, – микросхема,
поставляющаяся в составе материнской платы. В ней на-
ходится PC BIOS – в нашем случае это AwardBIOS. Вторая
микросхема – резервная, на которую записываются моди-
фикации PC BIOS. Таким образом, у нас получается вариант
устройства с 2 чипами памяти, с помощью переключателя
производится выбор, откуда делать «холодный» старт сис-
темы – или с оригинальной микросхемы с AwardBIOS, или
с резервной, на которую мы будем записывать LinuxBIOS
(альтернативу AwardBIOS). Устройство действительно не- Рисунок 2. Расположение элементов охлаждения EPIA-M
и дополнительный вентилятор на корпусе Morex Cubid 3677S
обходимое, поэтому к его приобретению стоит отнестись с
вниманием. При удачном запуске системы вы записывае- скорости. Однако на корпусном вентиляторе скорость в пре-
те в оригинальную микросхему LinuxBIOS и в дальшейшем делах 3000 об/минуту, что характеризует его как бесшум-
можете прилепить на системный блок лейбл – «Designed ный, а вот вентилятор на процессоре пришлось заменить –
for LinuxBIOS». идущий в составе материнской платы экземпляр облада-
ет «бешеной» скоростью в 6 тыс. оборотов. Поэтому вен-
Тонкости охлаждения тилятор был заменен на аналогичный корпусному. В итоге
И последним аппаратным блоком сегодняшнего нашего температура процессора в работе в рабочем режиме ста-
конструктора идет жесткий диск. Я руководствовался при ла выше на 7-8 градусов, впрочем, не превысив допусти-
его выборе в первую очередь скоростью вращения шпин- мой нормы в 65 градусов Цельсия.
деля – главной характеристикой в конечном итоге был уро- Теперь соберем программные компоненты нашей сис-
вень шума. Жесткие диски со скоростью 5400 об/минуту, темы. Это Linux-дистрибутив – Slackware Linux 10.0 [4].
по всей видимости, становятся достоянием истории, поэто- Компоненты мониторинга температуры – lmsensors [5], i2c
му вместо SAMSUNG SV1604N пришлось взять SAMSUNG [6], hddtemp [7]. Компоненты для построения LinuxBIOS –
SP1604N (скорость вращения шпинделя – 7200 об/мину- сам LinuxBIOS [8]-[9], «полезная нагрузка» (payload) –
ту). Впрочем, разница в пару децибелов шума между эти- etherboot [10], filo [11]. На каком именно дистрибутиве вы бу-
ми винчестерами не особенно влияет на общий фон. Сто- дете собирать, в конечном итоге не принципиально.
ит приглядеться, как смонтирован жесткий диск на плате.
Его пришлось повернуть с ног на голову в буквальном смыс- Следим за температурой
ле и положить на радиаторы охлаждения северного моста Описывать установку и настройку системы я не буду. Сра-
(рис. 1). Отмечу, при закрытом корпусе кажется, что пла- зу расскажу, как мониторить температурные режимы са-
та жесткого диска соприкасается с крышкой, на самом де- мой платы и жесткого диска. Если в вашем дистрибутиве
ле это не так, зазор все равно остается. Благодаря зазору, используется ядро из серии 2.6, то озадачиваться интегра-
а также вентиляторам на процессоре и вентилятору на са- цией lmsensors и i2c в ядро, по-видимому, не стоит, т.к. по
мом корпусе перегрева не происходит (рис. 2). Обращу ва- заявлениям разработчиков данные пакеты уже есть в со-
ше внимание, что вентиляторы идут с датчиками вращения ставе ядра. Для тех же, кто работает на ядрах линейки 2.4,

№8, август 2005 77


hardware
стоит прочитать в первую очередь README указанных па- Добавляем в /etc/rc.d/rc.local автозагрузку службы мо-
кетов, понять, по какому из 3 вариантов установки следует ниторинга:
пойти – интеграция непосредственно в ядро и дальнейшая
его пересборка, сборка в качестве отдельных модулей или /usr/local/hddtemp/sbin/hddtemp -d -q /dev/hda
половинчатая интеграция с ядром.
Я выбрал вариант сборки в виде отдельных модулей. Теперь убедимся, что температура жесткого диска в
пределах нормы:
wget http://secure.netroedge.com/~lm78/archive/ ↵
i2c-2.9.1.tar.gz
tar xzvf i2c-2.9.1.tar.gz # telnet 127.0.0.1 7634
cd i2c-2.9.1
su Trying 127.0.0.1...
make && make install Connected to 127.0.0.1.
Escape character is '^]'.
wget http://secure.netroedge.com/~lm78/archive/ ↵ |/dev/hda|SAMSUNG SP1604N|35|C|Connection closed by foreign host.
lm _ sensors-2.9.1.tar.gz
tar xzvf lm _ sensors-2.9.1.tar.gz Что же, 35 градусов по Цельсию – вполне допустимая
cd lm _ sensors-2.9.1
su рабочая температура.
make && make install Подведем краткие итоги проделанной работы. Дистри-
бутив развернут, мониторинг температуры настроен, что
Добавим в /etc/rc.d/rc.local следующие строки для за- позволяет нам удаленно по сети следить за температур-
грузки модулей нашей платы EPIA. ным режимом. Осталось перевести рельсы на использо-
вание LinuxBIOS.
# I2C adapter drivers
modprobe i2c-viapro
modprobe i2c-isa Полезная нагрузка
LinuxBIOS, который было бы уместнее называть FreeBIOS, яв-
# I2C chip drivers
modprobe eeprom ляется замещением проприетарного BIOS. С его помощью
modprobe vt1211 происходит первичная инициализация устройств в системе
/usr/local/bin/sensors -s и затем передается управление на payload. Задача payload –
загрузить ядро Linux либо по сети, либо с локального устройс-
Теперь данные о температурном режиме у нас под ру- тва. Нам в первую очередь интересно посмотреть на загрузку
кой. Запускаем: Slackware Linux с жесткого диска, поэтому в качестве payload
выступит FILO – FIle Loader. Займемся подготовкой FILO.
# /usr/local/bin/sensors
wget http://te.to/~ts1/Þlo/Þlo-0.4.2.tar.bz
eeprom-i2c-0-50 tar xjvf Þlo-0.4.2.tar.bz
Adapter: SMBus Via Pro adapter at 0500 cd Þlo-0.4.2
Memory type: DDR SDRAM DIMM make
Memory size (MB): 256

vt1211-isa-6000
Adapter: ISA adapter
Отредактируем файл Config, заменив содержимое стро-
VCore1: +2.31 V (min = +1.79 V, max = +1.89 V) ALARM ки AUTOBOOT_FILE на:
+5V: +4.66 V (min = +4.73 V, max = +5.24 V) ALARM
+12V: +12.14 V (min = +10.77 V, max = +13.15 V) AUTOBOOT _ FILE = "hda3:/boot/vmlinuz ↵
+3.3V: +3.25 V (min = +3.13 V, max = +3.45 V) oot=/dev/hda3 console=tty0 console=ttyS0,115200"
fan1: 3343 RPM (min = 3006 RPM, div = 2) make
fan2: 0 RPM (min = 3006 RPM, div = 2) cp Þlo.elf ~/src/payloads/Þlo.m2.elf
ERROR: Can't get TEMP2 data!
Proc Temp: +44.1C (high = +65C, hyst = +60C)
MB2 Temp: -28.4C (high = +45C, hyst =
vid: +1.850 V (VRM Version 9.1)
+40C)
ELF-образ нашего payload положили в специально от-
веденное место и назвали как filo.m2.elf.
Как видите, некоторые значения с датчиков, отмечен- С сайта LinuxBIOS возьмем обе ветки, и стабильную,
ные подстрокой ALARM, не находятся в допустимых преде- известную под названием V1, и текущую, которая на дан-
лах. Очевидно, что формулы для этих значений, записан- ный момент находится в разработке, версия V2. Как толь-
ные в /etc/sensors.conf, не совсем верны, либо диапазон до- ко изменения для рабочей версии будут завершены и от-
пустимых значений слишком узок. тестированы, она также станет стабильной. Принципиаль-
Предлагаю не рассматривать полученный результат ные отличия между версиями все-таки есть – это наличие
слишком критически, ибо в дальнейших релизах этого про- только во второй версии поддержки ACPI. Изменен синтак-
граммного обеспечения такие неточности будут исправле- сис файла конфигурации. И самое главное, в новой вер-
ны. Приступим к настройке мониторинга температуры жес- сии поменялся каркас построения системного ROM-фай-
ткого диска. ла. Считается, что он стал удобнее для добавления нового
аппаратного обеспечения.
wget http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2
tar xjvf hddtemp-0.3-beta12.tar.bz2
cd hddtemp-0.3-beta12 wget http://snapshop.linuxbios.org/ ↵
./conÞgure --with-db-path=/etc/hddtemp.db ↵ freebios--devel--1.0--base-0.tar.bz2
--preÞx=/usr/local/hddtemp tar xjvf freebios--devel--1.0--base-0.tar.bz2
make && make install cd freebios

78
hardware
Предварительно подготовим VIDEOROM от интегриро- cd ~/src/epia-m/freebios
make
ванного видеоадаптера на плате:
В результате получили файл romimage. Его-то нам и нуж-
su но записать в чип flash-памяти. Для этой цели в директории
dd if=/dev/mem of=vgabios.bin skip=1536 count=128
~/src/freebios/util/flash_and_burn приготовлена утилита за-
Предполагается, что компоновка и компилирование про- писи во flash-память. Соберем ее и посмотрим, какие па-
исходит на EPIA-M-системе. раметры ей необходимы.
Получился файл размером в 64 Кб. Он нам понадобится
в дальнейшем при подготовке системного образа. cd ~/src/freebios/util/ßash _ and _ burn
make
В файле freebios/HOWTO/EPIA хранится инструкция ./ßash _ rom --h
по компоновке LinuxBIOS для EPIA-систем. Воспользуем-
The arguments are:
ся ею. Во-первых, нам потребуется файл конфигурации, в --h
котором указывается для какой системы подготавливает- ./flash_rom: invalid option -- -
usage: ./flash_rom [-rwv] [-c chipname] [-s exclude_start] [-e exclude_end] [file]
ся системный ROM-файл, «полезная нагрузка» (так назы- -r: read flash and save into file
-w: write file into flash (default when file is specified)
ваемая секция payload), параметры для порта RS232 и т. п. -v: verify flash against file
-c: probe only for specified flash chip
Приведу файл, который используется у меня: -s: exclude start position
-e: exclude end postion
If no file is specified, then all that happens is that flash info is dumped
#
# LinuxBIOS conÞg Þle for: VIA epia-m mini-itx
# Необходимо использовать в качестве параметра имя
файла системного ROM. Не забудем переключить с по-
target /home/anthony/epia-m
мощью BIOS Savior нужный нам чип flash-памяти и запус-
# via epia тим с правами суперпользователя программу записи во
mainboard via/epia-m
flash-чип:
# Enable Serial Console for debugging
option SERIAL _ CONSOLE=1 su
#option SERIAL _ POST=1 ./ßash _ rom romimage
option TTYS0 _ BAUD=115200

# for VGA support (optional) The arguments are:


option HAVE _ FRAMEBUFFER=0 romimage
option CONFIG _ VGABIOS=1 Calibrating timer since microsleep sucks ... takes a second
option CONFIG _ REALMODE _ IDT=1 Setting up microsecond timing loop
dir src/bioscall 332M loops per second
option CONFIG _ PCIBIOS=1 OK, calibrated, now do the deed
option VGABIOS _ START=0xfffe0000 Enabling flash write on VT8235...OK
addaction romimage dd if=./vgabios.bin of=romimage ↵ Trying Am29F040B, 512 KB
bs=65536 seek=2 conv=sync conv=notrunc probe_29f040b: id1 0x7f, id2 0x45
Trying At29C040A, 512 KB
# end VGA support
probe_jedec: id1 0xbf, id2 0xb6
option CONFIG _ EPIAMVERSIONSTRING="5.0.0E-" ↵ Trying Mx29f002, 256 KB
_ _ DATE _ _ " " _ _ TIME _ _ probe_29f002: id1 0xbf, id2 0xb6
target /home/anthony/src/epia-m/freebios/ Trying SST29EE020A, 256 KB
probe_jedec: id1 0xbf, id2 0xb6
option DEFAULT _ CONSOLE _ LOGLEVEL=9 Trying SST28SF040A, 512 KB
option DEBUG=1 probe_28sf040: id1 0x7f, id2 0x45
Trying SST39SF020A, 256 KB
# Use 256KB Standard Flash as Normal BIOS probe_jedec: id1 0xbf, id2 0xb6
option RAMTEST=1 SST39SF020A found at physical address: 0xfffc0000
option USE _ GENERIC _ ROM=1
Part is SST39SF020A
option STD _ FLASH=1
option ROM _ SIZE=262144 Programming Page: 0063 at address: 0x0003f000

# payload size = 192KB Итак, в чип SST39SF020A записан LinuxBIOS. Во второй


option PAYLOAD _ SIZE=196608
чип мы предварительно записали системный AwardBIOS, с
# use ELF Loader to load Etherboot которым поставлялась эта плата. На всякий случай.
option USE _ ELF _ BOOT=1
Теперь перейдем на второй компьютер и с помощью
# Use FILO as our payload нуль-модемного кабеля подключим порты RS232 на EPIA-
payload /home/anthony/src/payloads/Þlo.m2.elf
M и на нашем компьютере. Зачем это надо? Для того чтобы
Сохраним конфигурацию в файл config1 и подготовим отслеживать информацию, выводимую на терминал.
Makefile для дальнейшей компиляции следующим обра- Запускаем терминальную программу minicom. Устанав-
зом: ливаем нужный COM-порт, скорость в 115200 бод и гото-
вимся к холодному старту блока с LinuxBIOS на борту. Вы-
python /home/anthony/src/freebios/util/conÞg/ ↵ ключаем EPIA-M и, переведя дыхание, включаем заново.
NLBConÞg.py conÞg1 /home/anthony/src/freebios
Смотрим, что же получилось. Привожу не все сообщения,
В итоге получили новую директорию /home/anthony/src/ а только наиболее характерные.
epia-m/freebios, в которой и будет приготавливаться систем-
ный ROM-файл для нашей системы. Не забудем положить LinuxBIOS-1.0.0 Сбт Июн 25 21:48:38 MSD 2005 starting...
в эту же директорию файл от VIDEOROM. RB!0

№8, август 2005 79


hardware
LinuxBIOS-1.0.0 Сбт Июн 25 21:48:38 MSD 2005 starting... Дальнейшие записи уже вам привычны и знакомы.
80 08 07 0d 0a 01 40 00 04 60 70 00 82 08 00 01 С помощью SSH можно зайти в систему и проверить,
0e 04 08 01 02 20 00 00 00 00 00 48 30 48 2a 40
75 75 45 45 00 00 00 00 00 00 00 00 00 00 00 00
например, температуру.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 21
00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 # ssh -l anthony -C via
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
30 33 31 32 37 39 00 00 00 00 00 00 00 00 00 00 anthony@via's password:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Last login: Sat Jun 25 21:53:41 2005 from athlon.net
Copying LinuxBIOS to ram. Linux 2.4.26.
Jumping to LinuxBIOS.
anthony@via:~$ sensors
Выводятся сообщения о номере релиза LinuxBIOS и вре- eeprom-i2c-0-50
Adapter: SMBus Via Pro adapter at 0f00
мени компиляции. Из flash-памяти образ LinuxBIOS в даль- Memory type: DDR SDRAM DIMM
нейшем копируется в RAM для ускорения процесса загруз- Memory size (MB): 256
ки и последующие манипуляции проводятся уже в ОЗУ. vt1211-isa-ec00
На определенном этапе вы увидите такое сообщение: Adapter: ISA adapter
fan1: 3378 RPM (min = 3006 RPM, div = 2)
POST: 0x89 fan2: 0 RPM (min = 3006 RPM, div = 2)
POST: 0x70 Proc Temp: +47.2C (high = +65C, hyst = +60C)
totalram: 96M
Initializing CPU #0 anthony@via:~$ telnet 127.0.0.1 7634
Trying 127.0.0.1...
На самом деле памяти у меня в системе почти в 2 раза Connected to 127.0.0.1.
больше – 256 Мб, однако в стабильной ветке LinuxBIOS 1.0 Escape character is '^]'.
|/dev/hda|SAMSUNG SP1604N|37|C|Connection closed by foreign host.
на тот момент не существовало механизма определения
количества ОЗУ. Данная проблема решена во второй вер- В целом работу нашего конструктора можно считать
сии LB. Поэтому либо оставим как есть, либо вам придет- нормальной.
ся, исходя из ваших возможностей, поменять в исходном Подведем итоги. Мы скомпилировали LinuxBIOS, запи-
файле параметр, задающий количество ОЗУ. сали образ в ППЗУ и удачно загрузились. Также мы научи-
Далее интересная надпись – отработала инструк- лись снимать данные о температуре с критически важных
ция CPUID, и мы видим, что же за чудо выпускает компа- узлов нашей ПЭВМ. Полностью рабочая удаленная стан-
ния VIA: ция к вашим услугам.
Автор благодарит участников проекта LinuxBIOS за кон-
Max cpuid index : 1
Vendor ID : CentaurHauls сультации при подготовке данного материала, в частности
Processor Type : 0x00 Josiah England, Jonathan McDowell, Adam Talbot, Jun Okajima.
Processor Family
Processor Model
:
:
0x06
0x09
А также за краткую историю развития проекта LinuxBIOS
Processor Mask : 0x00 за 1999-2004 года R.Minnich [12-13].
Processor Stepping : 0x05 В следующем номере мы посмотрим, как запустить
Feature flags : 0x0380b13d
EPIA-M в качестве узла Beowulf-кластера, а также запустим
CentaurHauls когда-то выпускала компания WinChip. на EPIA-M операционную систему Windows 2000 Professional.
Следующая запись, заслуживающая вашего внима- Плюс посмотрим, как наш блок EPIA-M превращается в тер-
ния: минальное решение.
Welcome to elfboot, the open sourced starter.
January 2002, Eric Biederman. Ссылки:
Version 1.2 1. http://en.wikipedia.org/wiki/WinChip.
POST: 0xf8 2. http://de.wikipedia.org/wiki/WinChip.
37:init_bytes() - zkernel_start:0xfff00000 zkernel_mask:0x0000ffff 3. http://en.wikipedia.org/wiki/Cyrix.
Found ELF candidate at offset 0
4. ftp://ftp.chg.ru/pub/Linux/Slackware/slackware-10.0-iso.
LinuxBIOS дошел до стадии загрузки «полезной загруз- 5. http://secure.netroedge.com/~lm78/archive/lm_sensors-
ки» – прошу прощения за тавтологию. В качестве payload 2.9.1.tar.gz.
у нас выступает FILO. Вот что пишет FILO во время выпол- 6. http://secure.netroedge.com/~lm78/archive/i2c-2.9.1.tar.gz.
нения: 7. http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2.
8. http://snapshots.linuxbios.org/freebios--devel--1.0--base-
POST: 0xfe
FILO version 0.4.2 (anthony@athlon) Сбт Июн 25 21:47:32 MSD 2005 0.tar.bz2.
Press <Enter> for default boot, or <Esc> for boot prompt... 2. .1. .timed out
boot: hda3:/boot/vmlinuz root=/dev/hda3 console=tty0 console=ttyS0,115200 9. http://snapshots.linuxbios.org/freebios--devel--2.0--patch-
hda: LBA48 160GB: SAMSUNG SP1604N
Mounted ext2fs
51.tar.bz2.
Found Linux version 2.4.26 (root@tree) #8 Mon Jun 14 19:09:31 PDT 2004 bzImage.
Loading kernel... ok
10. http://citkit.dl.sourceforge.net/sourceforge/etherboot/
Jumping to entry point... etherboot-5.4.0.tar.bz2 (http://rom-o-matic.net).
Linux version 2.4.26 (root@tree) (gcc version 3.3.4) #8 Mon Jun 14 19:09:31 PDT 2004
11. http://te.to/~ts1/filo/filo-0.4.2.tar.bz.
FILO отрапортовал, что в качестве носителя найден жес- 12. http://www.linuxdevices.com/links/LK8294110575.html.
ткий диск SAMSUNG SP1604N, на котором в разделе hda3 13. http://www.beowulf.org/archive/2002-September/008021.
находятся ядро системы и корневой раздел, и передал уп- html.
равление ядру операционной системы.

80
web

СОВЕРШЕНСТВУЕМ ТЕХНОЛОГИЮ CMS

АЛЕКСЕЙ МОИСЕЕВ
Уже не один месяц интернет-сообщество и бизнес ожидают новое поколение CMS.
Наконец отдельные идеи, многие из которых революционные, были собраны воедино,
в проекте Habitat 2.0.

C
MS в их текущем виде сущес- лить: S.Builder, Q-Publishing, UMI.CMS, ! В систему изначально заложены
твуют уже довольно-таки дав- ABO.CMS, Bitrix, CimWebCenter, CMS способы упорядочивания компо-
но. Эксперты сходятся во мне- Master, CMS UlterSuite, Content Master, нентов, благодаря чему вы може-
нии, что в ближайшее время долж- MSTL-content, помимо перечисленных, те организовывать объекты пред-
но появиться что-то кардинально но- существует ещё очень много систем ставления (страницы, товары и т.д.)
вое – система, которая возведёт сай- управления. Один из таких продук- в любом порядке (линейный, иерар-
тостроение на качественно более вы- тов – Habitat – разрабатывался мной хический).
сокий уровень. В различных изданиях, в течение длительного времени. Пос- ! Для наполнения шаблонов страниц
преимущественно электронных, не раз ле двух с половиной лет исследования динамической информацией ис-
публиковались статьи, посвящённые CMS мною были сделаны выводы от- пользуются инфоисточники (Data-
несовершенству современных CMS. носительно конструктивных особен- Aware). К инфоисточникам относят-
Там же высказывались предложения ностей, не позволяющих развивать- ся константы (строки, определённые
о том, каковы должны быть CMS но- ся существующим системам в сторо- для всех компонентов), переменные
вого поколения, однако большинство ну usability. Неоднократно проводились (строки, определённые по месту, то
таких предложений уже давно реали- консультации с владельцами сайтов есть для конкретных компонентов) и
зовано (например, модульная структу- на основе Habitat, по теме сервисных сами Data-Aware, которые представ-
ра, редактор HTML-кода в администра- возможностей, однако далеко не всё ляют собой участок PHP-кода в ком-
торской части). можно реализовать на базе сущест- бинации с PIN. Последние необхо-
Подавляющее большинство разра- вующих CMS. димы для связи данных, возвраща-
ботчиков CMS основной акцент дела- емых скриптом Data-Aware, с пере-
ют на пользовательскую (клиентскую) Иное представление CMS менными внутри шаблонов.
часть, а администраторская панель яв- Результатом вышеописанных иссле- ! Среди неотъемлемых частей Hab-
ляется дополнением, позволяющим дований стал проект Habitat 2.0. Он itat 2.0 можно выделить магазин.
более комфортно управлять функция- является развитием большинства су- Его необходимость объясняется
ми системы. Одно из главных отличий ществующих CMS. Среди основных тем фактом, что в результате роста
предлагаемой вам сегодня системы нововведений, которые вы не увиди- числа российских пользователей
состоит в том, что ее основной частью те в других системах, имеет смысл Интернет с каждым днём увеличи-
является администраторская панель, а особо выделить объектно-ориенти- вается число Интернет-представи-
клиентская часть состоит из визуали- рованный метод построения шабло- тельств организаций, которые счи-
затора, отображающего скомпилиро- нов страниц. тают необходимым обеспечить воз-
ванные страницы пользователю. Д ля а дминистратора системы можность комфортного для пользо-
HTML-страница представляется в виде вателей заказа услуг компании.
Размышляем о новых дерева компонентов, каждый из кото-
возможностях CMS рых имеет свойства, позволяющие из- Разработка сайта отныне осущест-
Как правило, наиболее качествен- менить вид графического представле- вляется в новом ключе – веб-програм-
ными CMS являются платные систе- ния компонента. Система не опериру- мист разрабатывает компоненты, от-
мы. При покупке такой CMS пользо- ет понятиями HTML, CSS, JavaScript. То вечает за то, что они реализуют свои
ватель получает поддержку, а так- есть уровень абстрагирования на поря- функции, а затем собирает из этих ком-
же в большинстве случаев своевре- док выше, чем у ближайших аналогов. понентов шаблоны страниц (т.н. типо-
менное решение появляющихся воп- Компонент есть инициализированный вые страницы). Все это делается ради
росов при работе с системой. Сре- класс, который закачивается в систему нескольких «священных коров» про-
ди платных CMS следует особо выде- в формате XML-компонента. граммирования:

82
web
! установление четкой и прозрачной Aware, Переменные, Константы). Эту ких других данных. На этапе компонов-
взаимосвязи между содержанием операцию выполняет компилятор-сум- ки страниц компоненту указывается
(данные из БД) и формой (визуали- матор, который является частью поль- источник данных, откуда он и узнает то,
зация данных); зовательского визуализатора. что ему необходимо отображать.
! перенос понятия «сопровождения Для того чтобы полностью перело- И в-третьих, будем отличать «класс
сайта» из плоскости программиро- жить всю работу, над внешним видом компонента classMyComponent» и «ком-
вания в плоскость управления и со- сайта, на плечи системы (а точнее, её понент MyComponent класса classMy-
ответственно удешевление сопро- разработчика) помимо свойств (в кото- Component». Первый никогда не ис-
вождения; рых задаются параметры каждого ком- полняется сам по себе – это описание
! повторное использование кода понента, такие, как обрамление, вы- того, что должно быть передано движ-
(компоненты – вещь четкая и от- равнивание, положение и т.п.), у ком- ку и включено в цикл обработки движ-
делимая от всего остального); понента есть события. Определяя со- ка. То есть, говоря простым языком,
! повышение надежности серверной бытия для конкретных компонентов, classMyComponent – это заготовка, ее
части ПО за счет структурной чет- можно добавить динамику для стра- можно экспортировать из одного про-
кости реализации. ницы сайта (например, подсветка руб- екта и импортировать в другой, пусть и
рикаторов, элементов меню и т.п.). Для для похожего, но уже другого примене-
Шаблоны страниц могут состоять этого планируется: ния. По аналогии с языками высокого
из компонентов (элементарные шаб- ! Написание Data-Aware модулей, ре- уровня classMyComponent – это тип объ-
лоны) и других шаблонов (т.н. «типо- шающих все возможные вопросы, екта или его класс, а сам объект этого
вые страницы»), собранные на осно- которые только могут появиться у типа нужно еще породить и запустить.
ве компонентов. Под компонентом под- пользователей. Программист для нашего движка сна-
разумевается логически выделенный ! JavaScript-описание всех определён- чала создает компоненты, а потом уже
дизайнером и обычно повторяющий- ных событий в HTML, для того чтобы пытается правильно их применить.
ся элемент дизайна, несущий опреде- дать администратору максимально Работа с типами компонентов
ленную функциональность, например возможную гибкость при редакти- (классами), а также инициированными
отображение списка новостей. Рубри- ровании внешнего вида страниц. классами (будем их называть просто
каторы, меню, содержательные час- ! Создание множества классов, для «компоненты») нужна для того, чтобы
ти страниц и т. д. – все это компонен- того чтобы полностью исключить компоненты одного и того же класса
ты, на основе которых путем комби- необходимость редактирования ис- можно было использовать множество
нирования, взаимного их расположе- ходного кода HTML или CSS. раз для схожих и одновременно разных
ния можно построить шаблоны стра- целей. Точно так же, как программисты
ниц. Это обеспечит нам легкость и гиб- При работе с константами, пере- Delphi/VC++ используют классы, опи-
кость изменения внешнего вида. На- менными и DataAware всегда есть воз- сывающие в памяти некоторую струк-
пример, можно задавать, какие руб- можность просмотреть названия ком- туру данных. В данном же случае до-
рикаторы используются в различных понентов, где используется текущий стигается некоторая степень универ-
шаблонах, где используются колонти- источник данных. Для перехода к ре- сальности, позволяющая компоненты
тулы, а где нет, и т. д. дактированию компонента, использу- одного типа представлять в различном
Для реализации большей части но- ющего текущий источник, достаточно виде: форма, цвет, обрамление…
вовведений потребовалось более ак- двойного клика мышкой. И как следствие этого приема ком-
тивное использование БД, чем в обыч- понент перестает быть привязанным к
ных CMS, однако требования у систе- Компоненты конкретной реализации, он работает
мы не выходят за рамки возможностей как строительный как черный ящик для того, кто его ис-
дешёвых хостингов: PHP 5, MySQL 4, материал пользует. При создании шаблона стра-
20 Мб свободного места (обычно самое Компонент «движка» представляет со- ницы у разработчика есть свойства, со-
минимальное, что можно купить). бой строительный материал для стра- бытия компонента, заявленная функ-
ниц сайта. Он обладает рядом особен- циональность, всё остальное – дело
Ядро Habitat 2.0 ностей, делающих компоненты более самого компонента.
Важнейшую часть ядра системы со- универсальным средством.
ставляет компилятор-сборщик, который Во-первых, он визуальный, т.е. за- Интерфейс
на входе получает ссылку в корень де- нимает определенную территорию на Внешнее представление самой адми-
рева шаблона (который надо собрать), странице. Это накладывает ограниче- нистраторской панели спроектиро-
а на выходе отдаёт готовый шаблон для ние на свободу создателя компонен- вано таким образом, чтобы вы могли
страниц с расставленными «вкраплени- та, который должен гарантировать, что «добраться» до любого «уголка» па-
ями». Расстановка указанных «вкрапле- компонент не будет рисовать за преде- нели за минимально возможное вре-
ний» (шаблоновых переменных) являет- лами самого себя. мя. Это обеспечено за счёт иерархи-
ся наиболее интеллектуальной частью Во-вторых, компонент всегда по- ческой структуры всей администра-
компилятора. На место таких перемен- лучает данные извне, т.е. сам не уме- торской панели, то есть дерева в от-
ных вставляется информация, возвра- ет запрашивать данные из базы, – он дельном фрейме. Каждая ветка де-
щаемая от источников данных (Data- суть одеяние, способ отображения не- рева догружается по мере необходи-

№8, август 2005 83


web
мости, что позволяет более эффек- ! Начальные идеи отдельных раз- нительной услуги или даже в качест-
тивно использовать канал связи. В работчиков. Как правило, распро- ве обязательной функции будут пред-
отдельный верхний фрейм (так назы- странение за пределы одного ра- лагать использование CMS. Разработ-
ваемый Toolbar) вынесены сервисные бочего коллектива отсутствовало. ка таких CMS скорее всего будет вес-
кнопки, которые позволяют управлять ! Gopher. тись сторонними фирмами либо самой
структурой дерева, а также обезопа- ! Статические веб-страницы. организацией, предоставляющей услу-
сить себя от случайного удаления важ- ! Динамические веб-страницы, раз- ги хостинга. Примером подобных про-
ного элемента. витие CMS. граммных продуктов может служить
Рассматриваемая CMS изначаль- ! Конкретное название класса для Control Panel и Direct Admin. Предпола-
но создаётся для рядового пользова- CMS подобных Habitat 2.0 приду- гается, что CMS будет состоять из цен-
теля Интернета, коим вполне может мывать пока рано, однако есть ос- тральной администраторской панели,
оказаться руководитель предприятия нования полагать, что это первый в которой можно будет управлять аб-
или работник отдела маркетинга, ка- шаг к тем системам нового поколе- солютно всеми функциями веб-сай-
кой-либо организации. Этим объясня- ния, приход которых предсказыва- та и одним для всех визуализатором.
ется возможность включения подска- ют эксперты. Это позволит постоянно повышать бе-
зок везде, где это может принести хоть зопасность («единый фронт борьбы с
какую-то пользу. Если проследить развитие язы- хакерами»), а также оградит пользова-
Среди стандартных возможностей ков разметки от HTML 3.2 до XHTML, телей от таких ненужных в большинс-
системы можно упомянуть разделе- XML, то можно заметить, что важней- тве случаев определений, как «FTP»,
ние доступа для суперадминистрато- шей целью разработчиков Интернет- «закачать обновление». Всё это явля-
ров, администраторов, модераторов, консорциума, вероятно, является сде- ется задачами CMS и администрато-
редакторов, аудиторов и т. п, эргоно- лать труд веб-верстальщиков менее ров хостинга.
мичность, usability, accessibility, управ- рутинным (в конференциях, таких, как В России немало частных лиц и не-
ление рекламой, статистика (по рекла- fido7. RU.HTML.PROFY, высказывает- больших организаций, занимающихся
ме, посетителям и т. д), создание ре- ся мнение, что цель разработчиков за- различными разработками, не имеют
зервной копии всей системы… ставить верстальщиков использовать возможности рассказать о своих иде-
В истории немало фактов, когда со- программы класса XMLSpy, HomeSite, ях в прессе. Системы автоматизиро-
здание простых инструментов и техно- DreamWeaver, и не набирать код вруч- ванного построения веб-ресурсов, поз-
логий приводило к появлению на рын- ную), то есть вся рутинная вёрстка, как воляющие полностью оградить свое-
ке множества некачественных продук- предполагается, должна выполняться го владельца от необходимости веб-
тов, изрядно портящих жизнь их поль- специальными программами. Впол- разработки и при этом не требующие
зователям, однако с появлением Habitat не возможно, что профессия «верс- услуг дизайнера, делают реальностью
2.0 строение сайтов будет на порядок тальщик» вообще перестанет сущес- самостоятельную публикацию идей
проще, а безопасность в несколько раз твовать в её современном представ- или разработок.
выше, так как ей будут заниматься про- лении. В настоящий момент такая услу-
фессионалы, чья основная обязанность В ряды продуктов, выполняющих га, как создание и сопровождение
заключается в совершенствовании всю рутинную вёрстку, можно отнес- Интернет-ресурса компании, деятель-
Security и Usability модулей системы. ти Habitat 2.0. Точно так же, как визу- ность которой не связана с информа-
Многоязыковая поддержка позво- альное программирование позволяет ционными технологиями, обходится в
лит системе распространиться за пре- ускорить и упростить труд дизайнера крупную сумму. Однако увеличение
делы СНГ. В планах на будущее реа- программного обеспечения (а главное, доступности Интернета в совокупнос-
лизовать подход к вёрстке AJAX (под- не требует от него особых навыков про- ти с появлением CMBS-систем позво-
ход к созданию веб-страниц, позволя- граммиста), системы нового поколения лит интернет-пользователям заказы-
ющий при каждом новом запросе за- приблизят возможности WWW к поль- вать услуги не только относительно
гружать не полностью новую страни- зователям, не имеющим навыки веб- крупных компаний, но и более мелких
цу, а лишь те её части, которыми она разработчиков. организаций.
отличается от текущей. Этот принцип С большой долей вероятности мож- Наиболее вероятно внедрение по-
позволяет повысить скорость загруз- но утверждать, что будущее именно за добных идей у хостинг-провайдеров,
ки страниц во много раз по сравнению гибкими автоматизированными систе- постоянно улучшающих качество сво-
с традиционными методами вёрстки), мами управления содержимым веб- их услуг, понимающих, для чего не-
что становится вполне реальным, ес- ресурса. обходимо «грамотное регулирование
ли под рукой находится вышеописан- цен» на услуги. В России таких фирм
ная CMS платформа. Возможное развитие почти нет… разве что уже упоминав-
Есть предположение, появившееся при шаяся RuWEB. Или, может, о новых
Этапы развития анализе существующих систем управ- технологиях предоставления хостин-
сайтостроения ления сайтом, а также при проектиро- га задумаются те провайдеры, кото-
В итоге мы можем выделить следу- вании Habitat и Habitat 2.0, что через рые ещё только планируют появить-
ющие ступени эволюции интернет- некоторое время большинство хос- ся в ближайшем будущем? Возмож-
страниц: тинг-провайдеров в качестве допол- но, бой только начинается…

84
bugtraq

Обход требования использования Множественные уязвимости


клиента в Cisco Clean Access в OpenVPN
Программа: Cisco Clean Access 3.5.3.1, 3.5.4. Программа: OpenVPN 1.x 2.x.
Опасность: Низкая. Опасность: Средняя.
Описание: Пользователь может изменить HTTP User-Agent- Описание: 1. Уязвимость в обработке очереди OpenSSL-
строку браузера, чтобы подключиться к сети без необходи- ошибок, когда аутентифицируется пользователь с не-
мости запуска Cisco Clean Access. правильным сертификатом, позволяет отключить друго-
URL производителя: http://www.cisco.com/en/US/products/ го несвязанного пользователя. Для удачной эксплуатации
ps6128/index.html. этой ошибки, OpenVPN должен быть запущен с «verb 0»
Решение: Способов устранения обнаруженной уязвимос- и без «ls-auth».
ти не существует в настоящее время. 2. Уязвимость в обработке очереди OpenSSL-ошибок,
когда сервер не в состоянии расшифровать полученный
Поднятие привилегий и отказ пакет, может эксплуатироваться авторизованным клиен-
в обслуживании в CA Message Queuing том, чтобы отключить другого клиента через специально
Программа: Unicenter TNG. обработанный пакет.
Опасность: Средняя. 3. Авторизированный клиент в режиме Ethernet-мос-
Описание: Переполнение буфера обнаружено в CA та «dev tap» может затопить сервер множеством пакетов
Message Queuing, которую используют несколько программ с различными поддельными MAC-адресами, чтобы исчер-
Computer Associates. Удаленный пользователь может под- пать доступную системную память.
менить CA-File Transfer Protocol, чтобы выполнить произ- 4. Два или более клиентов, подключенных в одно и то
вольный код с поднятыми привилегиями. же время к серверу с одним и тем же сертификатом, могут
Удаленный пользователь может также вызвать условия использовать ошибку состояния операции, чтобы аварий-
отказа в обслуживании через CAM TCP-порт. но завершить работу уязвимого сервера. Для использова-
URL производителя: http://supportconnectw.ca.com/public/ ния этой уязвимости на сервере должна быть отключена
ca_common_docs/camsecurity_notice.asp. опция «duplicate-cn».
Решение: Fixes for CAM v1.11 prior to Build 29_13: http:// URL производителя: http://openvpn.net/changelog.html.
s u p p o r tc o n n e c t w.c a .c o m / p u b l i c / c a _ c o m m o n _ d o c s / Решение: Установите обновленную версию программы
camsecurity_cam111fixes.asp; Fixes for CAM v1.07 prior to Build (2.0.1).
220_13: http://supportconnectw.ca.com/public/ca_common_
docs/camsecurity_cam107fixes.asp; Fixes for CAM v1.05 Удаленный административный доступ
(any version): http://supportconnectw.ca.com/public/ca_ в Cisco Intrusion Prevention System
common_docs/camsecurity_cam107fixes.asp. Программа: Cisco Intrusion Prevention System (IPS) 5.0(1)
и 5.0(2).
Выполнение произвольного кода Опасность: Высокая.
в Sun Solaris DHCP-клиенте Описание: Авторизованный пользователь с OPERATOR-
Программа: Sun Solaris 10. или VIEWER-правами доступа может эксплуатировать уяз-
Опасность: Высокая. вимость в логике command line processing (CLI), чтобы по-
Описание: Уязвимость обнаружена в сценарии /lib/svc/ лучить полный административный доступ к целевому IPS-
method/net-svc. Удаленный DHCP-сервер может послать устройству.
большое количество DNS-имен в ответ на запрос DHCP- URL производителя: http://www.cisco.com/warp/public/707/
клиента и выполнить произвольный код на целевой систе- cisco-sa-20050824-ips.shtml.
ме с привилегиями пользователя root. Решение: Установите обновленную версию (5.0(3)): http://
URL производителя: www.sun.com. www.cisco.com/cgi-bin/tablebuild.pl/ips5.
Решение: Установите исправление с сайта произво-
дителя. Повышение привилегий
в продуктах Symantec
Переполнение буфера Программа: Symantec AntiVirus Corporate Edition 9.0, 9.0.1,
в Novell eDirectory Server 9.0.2; Symantec Client Security 2.0, 2.0.1, 2.0.2.
Программа: Novell eDirectory Server версии до 8.7.3. Опасность: Низкая.
Опасность: Критическая. Описание: Уязвимость существует в HELP-функции, ко-
Описание: Уязвимость существует в компоненте iMonitor. торая использует HTML-интерфейс помощи Windows. Не-
Удаленный пользователь может вызвать отказ в обслужи- привилегированный локальный пользователь может полу-
вании системы или выполнить произвольный код с приви- чить доступ на чтение и выполнение файлов с привилеги-
легиями Local System. Подробности уязвимости не сооб- ями Local System.
щаются. URL производителя: www.symantec.com.
URL производителя: www.novell.com. Решение: Установите обновление с сайта производителя.
Решение: Установите исправление с сайта производите-
ля. Составил Александр Антипов

№8, август 2005 85


бизнес-решения в IT

IT В СФЕРЕ РЕСТОРАННО-ГОСТИНИЧНОГО
БИЗНЕСА

КИРИЛЛ ТИХОНОВ
Современный гостиничный комплекс – очень сложная система, обычно включающая в себя
собственно гостиницу, ресторан, бары, развлекательные центры и т. п. Конечно, если вам
приходится администрировать придорожный мотель на 5 номеров, то хватит и таблички
в Excel. В остальных случаях без специализированной системы управления не обойтись.

С
егодня мы рассмотрим програм- ших кортов, игрок в боулинг – лучшие меров, их типе, калькуляция по требо-
мные и аппаратные продукты, предложения от ведущих боулинг-клу- ванию, лист ожидания, расширенные
позволяющие эффективно уп- бов города. возможности тарифной политики – все
равлять современными гостиничными В Fidelio V8 все данные по клиенту эти функции значительно ускоряют ра-
комплексами – Fidelio и Opera, и рес- объединяются в профайлы, хранящие- боту всего отдела.
торанами – Micros, входящими в гости- ся в единой центральной базе данных, Система позволяет в считанные
ничный комплекс. причем в каждом клиентском профай- минуты заселить и выписать гостя, без
ле можно заводить неограниченное необходимости оформления множест-
Управление гостиницами число контактных данных гостя, отде- ва бумаг, что особенно важно для гос-
Современные темпы развития гости- льно вносить такую маркетинговую ин- тей, ценящих свое время. Регистра-
ничного бизнеса предъявляют высочай- формацию, как степень важности кли- ция может производиться как по бро-
шие требования к автоматизирован- ента, вид его деятельности, долю ком- ни, так и без нее, возможен специаль-
ным системам управления для пред- пании на рынке, информацию по кре- ный «быстрый» вариант оформления
приятий индустрии гостеприимства. дитным картам гостя. Большим пре- выписки для групп.
Fidelio V8 – система управления имуществом является то, что система В Fidelio V8 доступен весь необ-
отелем, построенная на СУБД Oracle, позволяет не удалять профайлы, а де- ходимый набор кассирских функций,
способна решать задачи от продаж, лать их неактивными в случае необхо- включая специальные гостевые фун-
бронирования, приёма и размещения димости, при этом они могут быть вос- кции, такие как депозитирование, уп-
гостей, организации конференций и становлены в любой момент. равление валютами, платежами и вы-
банкетов и управления связями с кли- Одной из основных статей доходов ставлением счетов.
ентами до предоставления полных отеля является деятельность отдела Хранение счетов выписанных гос-
данных для финансового контроля и организации конференций и банкетов. тей для последующего восстановле-
управленческого учёта деятельности Модуль CCM позволяет быстро про- ния данных при необходимости, вы-
предприятия. верить доступность и текущую актив- бор группы для формирования еди-
Модуль управления связями с кли- ность по существующим броням, с лег- ного счета, ежедневное обновление
ентами (CRM) позволяет иметь полную костью вводить планируемые мероп- курса валют, возможность одновре-
картину всех пожеланий и предпочте- риятия и эффективно ими управлять. менного открытия и изменения сче-
ний гостей и соответственно оказы- Также одним из преимуществ данно- тов со сложной структурой в одно и то
вать высокий уровень сервиса. Инди- го модуля является возможность одно- же время из различных окон, ведение
видуальность подхода к клиенту за- временной брони как конкретного ме- журнала кассирских операций и мно-
ключается в предоставлении каждо- роприятия, так и номеров в отеле. гие другие особенности значительно
му гостю именно той информации, в Работа любого отеля начинается со упростят не только стандартные кас-
которой он нуждается. Например, фи- службы приема и размещения, кото- сирские операции, но и позволяют сде-
нансовый менеджер, остановившийся рая является центральным и важней- лать этот модуль интегрированной сис-
в вашем отеле, найдет в своем номе- шим звеном системы Fidelio. Создание темой с возможностью полного контро-
ре последний выпуск финансово-ана- и обновление броней, разделение де- ля за движением денежных средств в
литического журнала, любитель игры тей по возрастным категориям, предо- гостинице.
в большой теннис – адреса ближай- ставление информации о наличии но- C помощью Crystal Reports Fidelio

86
бизнес-решения в IT
позволяет создавать большое число равлять задачами; проверять статус мимо большого числа типовых отчетов
разнообразных отчетов (как стандар- номера; управлять взаимоотношени- есть возможность создавать собствен-
тных, так и нестандартных), которые ями с клиентами; составлять график ные формы статистики.
могут быть предварительно просмот- мероприятий. Система Micros 3700 работает на
рены или распечатаны. Все отчеты Система может работать как в ре- рабочих станциях Micros – прочных,
могут передаваться в формате Word, жиме клиент-серверного приложения, плоских, с сенсорными экранами, раз-
Excel, факсимильных и электронных так и в режиме тонкого клиента через работанных специально для исполь-
сообщений. браузер. Серверная часть Opera может зования в жёстких условиях. Удобный
работать на базе Microsoft Windows NT/ экран дает возможность сотрудникам
OPERA Enterprise Solution 2000, AIX и Sun Solaris. видеть полную картину расположения
В отличие от традиционных систем для Существует возможность осущест- столиков в ресторане в графическом
гостиниц, OPERA Enterprise Solution влять бронирование номеров клиента- формате. Micros 3700 предлагает са-
представляет собой самое полнофун- ми непосредственно с веб-сайта. мые совершенные функции POS, та-
кциональное на сегодняшний день Система OPERA поддерживает бо- кие как TouchAdvantage – для ускоре-
решение управления, предназначен- лее 350 интерфейсов, включая интер- ния процедуры разделения чека, фун-
ное как для независимых отелей, так фейс с системой управления ресто- кций перемещения и отмены, а также
и для гостиничных сетей; как для не- ранами, телефонными системами и мощные функции для управления рес-
больших отелей с ограниченным набо- системами тарификации телефонных тораном – сопровождающие и расши-
ром услуг, так и для шикарных 5-звез- звонков и Интернет-услуг, системой ав- ренные отчёты. Поддерживает стан-
дочных гостиниц. томатических минибаров, системой уп- дартную базу обмена данными Sybase
Система состоит из модулей, кото- равления счетами клиентов, система- SQL Anywhere.
рые с легкостью могут быть настрое- ми платного телевидения, системами Micros 8700 позволяет одновремен-
ны и добавлены в зависимости от по- электронных замков, системой авто- но вести управление большим числом
желаний конкретного отеля. Она вклю- ризации кредитных карт, бухгалтерс- точек продаж, которые могут сущест-
чает в себя: кими системами. венно отличаться друг от друга цена-
! систему автоматизации слу ж- ми, ассортиментом и условиями ре-
бы приема и размещения гостей Управление ресторанами ализации. Система функционирует
(Property Management System); Основой системы управления ресто- на разработанном Micros оборудова-
! систему автоматизации отдела ранами Micros являются рабочие стан- нии, устойчивом к попаданию жидкос-
продаж и маркетинга (Sales and ции – терминалы с сенсорным экра- ти, каплям масла и другим факторам
Catering); ном, которые устанавливаются в точ- эксплуатации оборудования на кух-
! систему управления качеством об- ках продаж (POS) – в местах, где вво- не. Помимо встроенных модулей уче-
служивания (Quality Management дится заказ и/или осуществляется оп- та продаж, себестоимости, регистра-
System); лата. Затем заказ автоматически пос- ции рабочего времени сотрудников и
! систему оптимизации прибыли тупает на кухню и распечатывается на многих других необходимых функций,
(Revenue Management); кухонных принтерах. Также для распе- Micros 8700 обладает открытой архи-
! систему управления мероприятия- чатки счетов гостей в кафе, фаст-фу- тектурой с другими системами, что
ми (OPERA Activity Scheduler); дах, в барах могут устанавливаться ру- позволяет оборудованию и програм-
! систему централизованного бро- лонные принтеры, которые дополни- мному обеспечению гибко интегриро-
нирования (OPERA Reservation тельно используются для печати спе- вать периферийные стандарты индус-
System); циализированных отчетов. Для рас- трии и модулей программного обеспе-
! модуль бронирования через Интер- печатки счетов гостей на фирменных чения. Micros 8700 работает на базе
нет (Web-Self Service); бланках в точках продаж устанавлива- процессора Intel и разработан в опе-
! централизованную информацион- ется принтер гостевых чеков. рационной среде SCO UNIX, облада-
ную систему по клиентам (Customer Доступ в системы обеспечивается ет высокой степенью надежности со-
Information System). с помощью персонального идентифи- хранения всех данных, обеспечивает
кационного кода или магнитной кар- стабильный и экономически безопас-
С помощью мобильного решения точки, что позволяет разграничить до- ный бизнес. Система внесена в Госу-
OPERA-Palm, работающего на кар- ступ к функциям систем в зависимости дарственный реестр контрольно-кас-
манных компьютерах, объединенных от должности сотрудника. Micros обес- совых машин, используемых на тер-
в беспроводную сеть, пользователи печивает максимальную защиту вве- ритории Российской Федерации и ря-
имеют доступ ко всей информации в денной информации и предотвраща- да стран СНГ, и может использовать-
базе данных в режиме реального вре- ет случаи ошибочного или некоррек- ся в фискальном режиме.
мени. OPERAPalm позволяет персо- тного использования данных любыми В заключение хочу сказать, что
налу осуществлять основные опера- пользователями. на этих системах построено управ-
ции, находясь практически в любой Все данные о деятельности ресто- ление большого количества широко
точке отеля и не будучи привязанны- рана в любой момент времени могут известных гостиничных комплексов
ми к одному рабочему месту: удален- быть представлены в виде отчетов, как не только в Москве и России, но и во
но поселять и выписывать гостей; уп- на экране, так и в бумажном виде. По- всем мире.

№8, август 2005 87


сказки

АДМИНСКИЕ СКАЗКИ
16 BIT EDITION

АЛЕКСЕЙ БАРАБАНОВ
Совершенно выдуманные истории, рассказанные в порядке двоичного сдвига,
без какой-нибудь видимой цели или морали, и даже не ко сну.

1. Сказка о первом Админе моментально. И как только в Конторе появлялись новые


и админском проклятии пользователи, наш Админ сразу же увеличивал сеть на
Давным-давно, когда ЭВМ были боль- нужное число рабочих мест. Так продолжалось долго. Сеть
шие, а оперативная память маленькая, росла. И вот настал такой день, когда пинг, выпущенный
все, кто работал на ЭВМ, были програм- Админом в локальную сеть, обратно не вернулся. Не при-
мистами, все писали программы. Но был дал этому значения Админ. Занят был, да и работало же
среди них один, который ленился. Надоело ему кодировать все, да и никто не жаловался. Но и на следующий день вы-
да перфорировать. Задумал он создать себе такое заня- пущенный пинг к Админу не вернулся. И на третий день то
тие, чтобы и ЭВМ работала, и ему трудиться не пришлось же самое. Теперь уже Админ боялся поверить в то, что он
бы. Так как был он программистом, то написал специаль- потерял пинг! Попытался решить проблему. Но как? Раз-
ную программу – Операционную систему, чтобы в ней ис- ве только демонтировать часть сети, созданную за три
полнять другие программы. И убедил всех программистов, дня, а пользователей повыгонять. Потерял радость жизни
что в Операционной системе работать удобнее. Первое Админ, замкнулся, посуровел. Понял он, что не далек тот
время так и было. Но потом оказалось, что не всё, что нуж- день, когда сеть вообще выйдет из повиновения. И так его
но для работы, он им объяснил! Только программист-лен- это огорчало, что однажды он уволился, не дожидаясь, по-
тяй знал самое важное о его Операционной системе. Стал ка случится непоправимое. И с тех пор каждый Админ пе-
он нужнее нужного для остальных программистов. Уважа- риодически пингует свою сеть, проверяя, а не пропадают
ли они его поневоле, называли Администратором. Забы- ли в ней пинги!
ли, что еще недавно считали лентяем. Жил он счастливо.
Да не долго продолжалось его счастье. Так как в прошлом 4. Сказка
Администратор был программистом-лентяем, то и Опера- о первом Ламере
ционную систему он сделал с большими пробелами в фун- и вездесущем глюке
кциональности. И чтобы эти пробелы восполнить, все вре- Где-то в самой дали Сети была
мя приходилось ему программировать. И с тех пор всех Ад- подключена некая Контора. В
министраторов преследует проклятие того первого Адми- этой Конторе работал Админ,
нистратора, бывшего ленивого программиста, и заставля- у которого иногда случались труднообъяснимые пробле-
ет их писать программы наспех и некачественно. мы. Не то чтобы он был совсем уж плохой, этот Админ, но
не очень грамотный. Поэтому никак не мог доделать ра-
2. Сказка о потерянном боту до конца. А чтобы никто не подумал, что проблемы
пинге из-за его безалаберности, он решил все валить на глюк
В одной большой Конторе работал Ад- в системе. Случится отказ рабочей станции, Админ взды-
министратор локальной сети. Он очень хает, во всем виноват глюк. Возникнут проблемы с сете-
любил сеть, созданную своими руками, вой печатью, снова та же песня, опять виноват глюк. На-
все в ней знал, любую проблему решал доело это всем однажды. Решили разобраться через го-

88
сказки
лову Админа и пригласили в Контору Эксперта. Тот, конеч- а Офисменеджер своим видом напоминает о его скрытой
но, сразу нашел причину всех проблем. Админ был с позо- слабости. А каждый Офисменеджер подозревает, что Ад-
ром изгнан с работы. И хотя он был неграмотным, но од- мин норовит стянуть с работы компьютер и раздражается
новременно и весьма предприимчивым, тот Админ. И по- от того, что нет у него технических знаний, чтобы прокон-
этому вскоре нашел другую работу. Однако и там повто- тролировать Админа.
рилась прежняя история, и в той локальной сети появил-
ся вездесущий глюк. Снова сменил работу Админ, и глюк 32. Сказка о волшебном
сменил сеть следом за ним. Так и повелось. Но молва пароле
бежит впереди Админа. И перестали его брать на рабо- В тридевятой Конторе, в тридеся-
ту все, кто знает о нем. И дали ему другое имя – Ламер. том Филиале работал системный
Так и ходят с тех пор вместе Ламер и его спутник – вез- Администратор. И все у него в ру-
десущий глюк. ках спорилось. За что ни возьмет-
ся, не успеешь оглянуться – готово. Ничего у него не ло-
8. Сказка малось. Аптайм серверов рос день ото дня. И позавидо-
об Админе-Дурачке вал ему Офисменеджер того филиала. Стал он нашепты-
Жил-был Администратор. Да такой вать Начальнику, что недоброе задумал Админ, мол, хо-
был неумеха: за что ни возьмется, все чет он хорошей работой усыпить бдительность, а сам за-
завалит. Ничего у него не получалось. думал уволиться. Поручил Начальник своему Офисме-
Со всех работ его гнали. Даже про- неджеру разузнать секрет Админа. И стал Офисменед-
звание ему придумали – Дурачок. Совсем отчаялся Ад- жер выпытывать у Администратора, расскажи, мол, в чем
мин-Дурачок. Хотел уж пойти работать курьером. Но был твой секрет. Но не соглашался Администратор на угово-
у него друг Хакер, и подсказал ему Хакер адрес сетево- ры, был тверд и деловит. Тогда задумал недруг коварс-
го форума заветного. Сходил на тот форум Админ и по- тво. Знал он за Админом слабость – любовь к пиву. При-
лучил там совет скачать с далекого-предалекого Фтп не- нес он Админу пива любимого. Расслабился Админист-
ведомую операционную систему. Так и сделал Дурачок. ратор, размечтался. Показалось ему, что друзья кругом.
Скачал он эту систему и запустил у себя на работе. И, о И рассказал он тогда, почему так у него все хорошо вы-
чудо, все заработало. Стал он эту систему ставить везде. ходит. Знал он волшебный рутовый пароль! И поделился
Никто этой системы не знает и не понимает. Знает толь- он этим знанием с Офисменеджером. А наутро, когда пи-
ко он. И стали его везде звать. Стали уважать. Прозви- во кончилось и запах солодовый выветрился, пришел Ад-
ще его обидное забыли. Стали звать его не Дурачком, мин на работу и узнал, что место его уже занято. Что вос-
а Линуксоидом. Да не долго продолжалось его счастье. пользовался его волшебным паролем Офисменеджер да
Другие администраторы тоже освоили эту операционную и взял на работу Ламера. И теперь Ламер выполняет всю
систему, принялись ее везде внедрять. И тогда смогли за- работу вместо Админа. Так остался Админ из-за своего
казчики сравнить работу настоящих администраторов и длинного языка да любви к пиву без работы! А Ламер не-
Линуксоида. И оказалось, что Линуксоид все тот же Ад- долго проработал вместо Админа. Выгнали его вместе
мин-Дурачок. с Офисменеджером. Оказалось, что знание волшебного
рутового пароля недостаточно, чтобы всю работу Адми-
16. Сказка о персональном нистратора выполнять. Хотя болтливого Админа на рабо-
компьютере Админа, ту обратно не приняли.
или Как поссорились Админ
и Офисменеджер 64. Сказка о тщеславном
Жил да был один Админ. Любил он свою Начальнике и трех
работу и больше всего компьютеры. И за- Сертификатах
хотелось ему иметь компьютер не толь- За далекими сетевыми рутерами, за
ко на работе, но и дома. Компьютеры к тому времени ста- километрами оптоволоконного кабе-
ли вполне компактными, так что желание его ограничива- ля, в одном далеком Офисе работал
лось лишь стоимостью желаемого. Накопил он денег на Админ. Был руководителем того Офиса тщеславный На-
XT и купил. А на работе уже появились AT. Он снова при- чальник. Не устраивало его то, что Админ просто выпол-
нялся копить и купил AT. А на работе уже i386. Купил он нял всю работу. Хотел Начальник иметь возможность пох-
i386, а на работе i486dx2-66 и так далее. Задумался Ад- валиться перед другими начальниками. И подсказал ему
мин, это сколько денег надо, чтобы иметь всегда такой же подхалим Офисменеджер, что в иностранных офисах, рас-
компьютер, как и на работе ? Понял Админ, что нет кон- положенных за многими хопами от их Офиса, водятся дива-
ца этой прогрессии. И придумал простой план. Решил он, дивные Сертификаты квалификационные! И поручил На-
что надо работе немного поделиться с ним компьютера- чальник Админу во что бы то ни стало добыть такой сер-
ми. Так и сделал. Но Офисменеджер обнаружил пропажу. тификат. Иначе, сказал он, уволит Админа по несоответс-
Админа не уволили, так как был он способным и нужным твию! Делать нечего, отправился Админ в путь в далекую
работником. Но компьютер ему пришлось вернуть. С тех сеть Оракл. Вернулся оттуда с Сертификатом по Оракл.
пор поссорились Админ с Офисменеджером. Каждый Ад- Но не унимается Начальник, и пуще прежнего науськивает
мин борется с желанием утащить с работы компьютер, его Офисменеджер. Посылают они Админа в другую даль-

№8, август 2005 89


сказки
нюю сеть Майкрософт. Добыл и этот сертификат Админ. 512. Сказка
Вернулся на работу и ждет, что его оставят в покое. Но не- об Админе-Хакере
ймется Начальнику да Офисменеджеру. И снова его отпра- В некотором Офисе, в некотором От-
вили за сертификатом в сеть Циско. Получил и этот Серти- деле работал Админ. Был он трудолю-
фикат Админ. Да обратно уже не вернулся. С тремя Серти- бив. Высоко было его мастерство. Все
фикатами ему лучшую работу предложили другие началь- он делал просто замечательно. Но по-
ники. А тщеславный Начальник и его Офисменеджер ос- казалось ему, что недостаточно ценят его труд, что недо-
тались ни с чем! статочно возносят его способности. И задумал тогда Ад-
мин стать умелым Хакером. Придумал ник позагадочнее,
128. Сказка да и начал временами выходить в Сеть на промысел недоб-
об Админе-идеалисте рый. Узнали везде о нем как о Хакере, перед мастерством
Жил да был Админ. Работал пома- которого не устоит ничто. Админа никто не знал за преде-
леньку. Все делал, как надо. На рабо- лами Отдела, а вот о Хакере знали все и боялись все. И тут
те его уважали и ценили. Лишь слу- еще более Админ запечалился от такой несправедливости,
чится малейшая проблема, он тут что его снова не уважают соответственно его способнос-
как тут и все исправляет. Но хоте- тям. Тогда Админ, прикинувшись Хакером, взломал собс-
лось ему идеала. Хотелось сделать так, чтобы все работа- твенную сеть. Да опять плохо получилось. Ведь вышло, что
ло еще лучше, чтобы совсем не ломалось, чтобы все было он как Админ уступает самому себе как Хакеру. И тогда Ад-
запрограммировано заранее. Админ был очень способный. мин стал убеждать всех, что поможет избавить их от Хаке-
Он потратил много труда и личного времени, чтобы добить- ра. Так долго убеждал, так долго доказывал, что прогово-
ся идеального функционирования управляемой им систе- рился, и истина стала всем известна. Хакера наказали, а
мы. И вот настало время, когда его участие в работе сис- Админа уволили с работы. И никто не оценил, что он, как и
темы стало минимальным. Админ расслабился. У него по- обещал, избавил Сеть от Хакера.
явилось много свободного времени. Он его с пользой тра-
тил. Но на работе стали замечать, что система работает без 1024. Сказка
участия Администратора. И сделали свои выводы. Однаж- о неистребимом вирусе
ды Админа уволили. Захотелось тут Админу вернуть все на В одной далекой-предалекой ло-
место. Захотелось, чтобы снова что-нибудь отказало, что- кальной сети случилась беда. На-
бы снова его позвали. Но этого не случилось. Система, на- пал на эту сеть вирус. Админу, ко-
строенная нашим Админом, еще долго работала беспере- нечно же, сразу стали жаловаться
бойно. А ему пришлось искать другую работу. пользователи. И он принялся неуто-
мимо вычищать вирус из пользовательских данных. Почис-
256. Сказка о жадном тит один компьютер, а ему сообщают, что заражены виру-
Начальнике сом еще четыре. Почистит один файл, а сканер показыва-
Далеко-далеко, за много хопов ет, что еще шестнадцать. Ответит на одну заявку в техпод-
от нас, жил да был Админ. Уп- держку, а их приходит еще 256! Очень устал Админ. Поч-
равлял местной локальной сет- ти отчаялся. Но осенила его мысль, что вирус ему попал-
кой. Выполнял всю нужную ра- ся неистребимый! И как понял это, то сразу же перестал
боту. Был очень сметлив. Он рассудил, что лучше будет, суетиться и тратить время на бесполезную борьбу. Достал
если система станет работать максимальное время, а он он из потаенного шкафчика заветные бэкапы и дистрибу-
ее обслуживать минимальное. Так и сделал, как решил. тивы да и переставил зараженные станции заново все ра-
Все работало замечательно, ломалось редко, и так же ред- зом. И с тех пор Админ был спокоен при любой вирусной
ко видели, чтобы Администратор что-то исправлял. И по- атаке, так как знал, что вирус – это проблема Пользовате-
думалось тогда местному Начальнику с подсказки вредно- ля, а у Админа на самый неистребимый вирус есть потаен-
го Офисменеджера, что несправедливо это, когда все ра- ный шкафчик с заветными бэкапами!
ботают, Админ отдыхает, а работает лишь изредка. Реши-
ли они, что надо Админу платить пропорционально труду. 2048. Сказка о жене Админа,
А поскольку они редко замечали труд Админа, так как бы- или Почему так мало
ли непрофессионалами, то все это привело к понижению Админов-женщин
зарплаты Администратора. Но Админ не согласился с та- Жил-был Админ. Все хорошо складыва-
кой оценкой своего труда и уволился. Приняли на работу лось у него на работе. Его ценили. Пос-
Ламера. Все изменилось в локальной сети. Ламер не пок- тоянно повышали зарплату. Но работа
ладая рук что-то настраивал, не пригибая ног везде бегал, не могла длиться 24 часа. И наступало время, когда Ад-
не закрывая глаз за всем наблюдал. Начальник и Офисме- мин приходил домой. Пусто было в его доме. И захотелось
неджер были очень довольны. Но со временем оказалось, ему уюта. Нашел Админ жену! Все у него с женой было пре-
что теперь работает лишь один Ламер, все же остальные красно. Он постоянно был окружен заботой. Но снова ста-
ждут, пока он все исправит. Спохватились тут Начальник ло ему неуютно. Захотелось еще, чтобы, как и на работе,
с Офисменеджером. Стали звать Админа обратно. Да он был у него дома компьютер. Купил он себе компьютер. Те-
к ним не вернулся. перь не было человека счастливее его. На работе успех.

90
сказки
Кончилась работа – дома уют и внимание. Устал от внима- И с тех пор нет большего кошмара для самых мужествен-
ния – включил компьютер и снова как на работе. Да не ус- ных Админов, как отключение электричества!
троило такое жену. Её ведь нельзя на время неиспользова-
ния выключить. Бросила она Админа. Долго Админ решал 16384. Сказка
эту нетехнологическую проблему. Сделал правильные вы- об отпуске Админа
воды, нашел новую жену и повел себя так, что больше она Однажды в далекую-предалекую
его не бросала. Но с тех пор у всех женщин осталось на- Контору, где работал Админ, при-
стороженное отношение к компьютерам. шло лето. И пользователи стали
уходить в отпуска. Работы стало
4096. Сказка о настырном меньше. И задумался Админ, а что если и ему уйти в от-
Пользователе пуск, чтобы отдохнуть. Стал прикидывать и так, и эдак. Что-
Однажды в Контору пришел работать бы ничего не сломалось, чтобы ничего не отказало, чтобы
настырный Пользователь. Захотелось ничего не случилось. Пока планировал, лето и кончилось.
ему показать, что понимает он много На другой год снова наступило лето. Теперь у Админа все
в сетевых технологиях. Думал он тем было согласовано технологически, и он сразу обратился к
самым сделать так, чтобы его заметил Начальник. Подго- Офисменеджеру с просьбой об отпуске. Но теперь стал при-
товил для него Админ рабочее место, как всем и как всег- кидывать Офисменеджер. То одно его не устроит, то дру-
да делал. А тому все не хорошо. Претензии предъявляет. гое. Админ все переделывает и согласовывает. И вот уже
Говорит, мол, не так надо делать. Раньше, мол, в другой осталось последнее согласование, как Офисменеджер сам
конторе все делалось иначе и лучше. Встретили его сло- ушел в отпуск. И снова Админ остался без отдыха. Только
ва поддержку у Офисменеджера. Тот уже давно невзлю- на третий год смог Админ вовремя уйти в заслуженный от-
бил Админа. Но Администратор им попался непростой. пуск. Так и повелось с того времени: Админ работает мень-
Стал он все делать так, как они ему скажут. И все сделан- ше всех, но и отдыхает реже всех.
ное описывать в отчетах. Скажут так, сделает так. Скажут
переделать эдак, переделает, не спросив причины. И вот 32768. Сказка
пришло время подводить итоги работы всей Конторы. Ад- об Админе-аутсорсере,
мин предъявил все свои отчеты и показал, что все время или Об Абсолютном
был занят. Офисменеджер ничего не показал, как обыч- Админе
но. А вот настырный пользователь, как оказалось, все это Далеко от этих мест за много-много
время был занят настройкой своего рабочего места, а не хопов работал один Админ. Был он
той работой, что ему надо делать. Понял это Начальник. необычайно способным. Все делал быстрее и лучше ос-
Выгнал он настырного Пользователя, а Офисменеджеру тальных. Особенно хорошо получалось у него удаленное
запретил встревать в технологические споры. И все ос- администрирование. Можно даже сказать, что он все де-
тальные пользователи этой Конторы сделали соответс- лал через линии связи. И это будет верно, так как был этот
твующие выводы. Админ аутсорсером. Обслуживал он несколько контор. Все
его клиенты были довольны его работой. Лишь изредка он
8192. Сказка об админском посещал эти конторы, так как сервера ломаются нечасто, а
кошмаре зарплату можно получать и на банковский счет. Но со вре-
Жил да был самоуверенный Админ. Он менем персонал контор менялся, и все меньше пользова-
не без оснований был такой самоуверен- телей знало Админа-аутсорсера в лицо. Пользователям ка-
ный. Он все держал под контролем. У не- залось, что по электронной почте им отвечает робот. Что
го все работало как надо. И уже давно. новые программы, которые они обнаруживали, придя ут-
И стало ему казаться, что все работает только благодаря ром на работу, ставятся сами собой. Что их рабочие стан-
тому, что он такой хороший. Что во всем лишь его личная ции не ломаются никогда. И что то оборудование, которое
заслуга. Возгордился Админ этим. Стал направо и налево Админ заказывал с доставкой в эти конторы, привозят пос-
всем хвалиться да ручаться, что пока он сетью управляет, тавщики по своей инициативе. И настал такой день, когда,
то и не будет никаких проблем. И сам настолько в это уве- посетив одну из обслуживаемых контор, был Админ задер-
ровал, что когда в Конторе временно выключили электро- жан на проходной, и никто, представьте себе – никто, не
питание и начали отключаться компьютеры, то осознание признал в нем сотрудника этой конторы. Опечалился Ад-
собственного бессилия стало для него ужасным потрясе- мин и поспешил в другую контору. Но и там повторилась та
нием. Он с потерянным видом сидел среди жалобно вере- же история. И в третьей тоже. И во всех остальных. Очень
щащих упсов, слушал, как один за другим, снижая оборо- был Админ огорчен. Решил он более не посещать эти кон-
ты, останавливаются винчестеры и кулеры, и его слезы ка- торы вообще. И далее не переставал грустить об утрачен-
пали на консольную клавиатуру. Потом, когда снова вклю- ном человеческом присутствии. Лишь то скрашивало его
чили электричество, Админ, ничего никому не объяснив, печаль, что зарплата от контор приходила в банк регуляр-
уволился из Конторы навсегда и даже сменил ник и элек- но, как и прежде.
тронную почту от столь сильного пережитого им стресса. Error: переполнение регистра. Авост1!

1
Примечание: Авост – сокращение от «аварийный останов».

№8, август 2005 91


книжная полка
DB2: решения Популярные
по интеграции Web-сервисы.
Роб Катлип, Практика
Джон Медик использования
Авторы книги, опираясь на Уилл Айверсон
свой личный опыт, повествуют Издание будет интересно
о проблемах и решениях в об- прежде всего Java-разра-
ласти интеграции базы данных ботчикам, участвующим
DB2 с различными приложени- в создании веб-проектов.
ями. Вы узнаете о том, как со- Основная тема книги –
гласовать DB2 с веб-сервера- работа с API популярных
ми, инструментами разработ- веб-служб, таких как Pay-
ки, инфраструктурами обмена Pal, amazon.com, google.
сообщениями. Подробно опи- com, CDDB, eBay, FedEx.
саны: разработка решений, тенденции, технология и инстру- В качестве примеров взаимодействия с вышеуказанными
ментарий, интеграция и управление бизнес-процессами, ин- службами автор рассматривает восемь проектов – анализ
теграция информации, CRM: программа расширения услуг конкуренции (анализ данных из amazon.com, eBay и google.
посредством электронной почты и с использованием DB2. com), аукционы и доставки (рассмотрены вопросы интег-
Отдельная глава посвящена теме динамического бизнеса: рации FedEx и eBay), система оплаты счетов и факсимиль-
B2B и B2C. Актуальная тема электронной коммерции рас- ная связь (использование PayPal для оплаты счетов). Также
смотрена достаточно подробно: проектирование масштаби- представлены проекты: сидицированный поиск, агрегатор
руемой архитектуры электронной коммерции, веб-ярус, ярус новостей, каталог аудиодисков, страница последних ново-
предприятия, управление бизнес-процессом электронной стей (rss), автоматизация ежедневных обсуждений. Любо-
коммерции. По большей части изложенный материал рас- пытны мысли автора о будущем развитии технологий веб-
считан на интеграторов и руководителей IT-отдела. служб (таких как REST, UDDI, BPEL/BPEL4WS).
Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 320 стр. ISBN Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 240 стр. ISBN
5-9579-0047-8 (ориг. 0-20017-5485-1). 5-9579-007-X (ориг. 0-596-00642-X).

WMI. Windows server 2003.


Программирование Для профессионалов
на JavaScript Алексей Вишневский
и VBScript Среди подобных изданий эту
Ален Лиссуар книгу можно выделить четкой
Основная задача книги – систематизацией излагаемо-
научить читателя эффек- го материала. Круг рассмот-
тивно использовать WMI ренных вопросов достаточно
(Windows Management In- широк. В книге подробно рас-
strumentation). Автору оп- сказано о протоколе аутенти-
ределенно удалось до- фикации Kerberos v5 (реализа-
стичь этой цели. Повество- ция, описание и структура про-
вание книги начинается с токола, служба ключей, вари-
объяснений основ Windows анты аутентификации), стеке
Script Host (рассмотрены использование возможностей XML, протоколов TCP/IP (рассмотрены базовые сведения, основные
контроль за выполнением, шифрование кода, отладка сце- утилиты, большинство широко используемых протоколов). От-
нариев). В главе, посвященной началу работы с WMI, автор дельные главы посвящены службам DNS и DHCP. Как логичес-
повествует о том, что такое DMTF, WBEM, CIM, xmlCIM. Тема кое продолжение главы, посвященной основам TCP/IP, в кни-
языка запросов WMI и практики написания сценариев с WMI ге рассмотрены вопросы управления маршрутизацией (вклю-
раскрыта очень подробно, рассказано о моникере, иссле- чая такие сложные темы, как протоколы RIP и OSPF). Боль-
довании API-сценариев, просмотре имен репозитария CIM шое внимание уделено рассмотрению AD. Автор не обошел
и сценариях для исследования репозитария CIM. Отдельно вниманием и рассмотрение механизмов групповой политики
рассмотрены продвинутые техники написания сценариев и WINS. В книге также рассмотрены: мониторинг производи-
WMI (асинхронная работа с экземплярами CIM, WMI DateTime тельности ОС Windows, развертывание службы сертифика-
Helper, расширение WMI для ADSI, представление данных ции, служба удаленной установки, протокол SNMP. Несомнен-
WMI в XML). Большое внимание уделяется программирова- ный интерес представляют главы, посвященные интеграции
нию с использованием событий WMI. Книга написана прос- Windows server 2003 с серверами Novell NetWare и UNIX.
тым и доступным языком, а большое количество примеров Издательство «Питер», 2005 г. – 767 стр. ISBN 5-94723-
позволит лучше усвоить излагаемый материал. 614-1.
Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 544 стр. ISBN Рубрику ведет
5-9579-0089-3 (ориг. 1-55558-266-4). Александр Байрак

№8, август 2005 93


bugtraq

Выполнение произвольного кода Обход ограничений безопасности


и отказ в обслуживании в IPSec во FreeBSD
в различных диссекторах в Ethereal Программа: FreeBSD 5.3, 5.4.
Программа: Ethereal версии до 0.10.11. Опасность: Низкая.
Опасность: Критическая. Описание: Уязвимость существует в реализации алгорит-
Описание: 1. Удаленный пользователь может с помощью ма аутентификации AES-XCBC-MAC в IPSec, что приводит к
специально сформированного пакета аварийно завершить тому, что для аутентификации используется ключ по умол-
работу приложения. Уязвимость существует в диссекторах: чанию вместо ключа, указанного администратором. Зло-
AgentX, BER, CAMEL, DCERPC, DHCP, DOCSIS, HTTP, IS-IS умышленник может послать специально сформированные
LSP, LDAP, NCP, PER, RADIUS, SCTP, Telnet. пакеты для аутентификации и обойти какие-либо ограни-
2. Злоумышленник может вызвать зацикливание прило- чения на уровне IP. Удачная эксплуатация уязвимости тре-
жения при обработке специально сформированных пакетов бует выключенного шифрования данных.
в диссекторах: 802.3, BER, DHCP, H1, MEGACO, SMPP. URL производителя: www.freebsd.org.
3. Злоумышленник может вызвать разыменование нуле- Решение: Установите исправление с сайта производите-
вого указателя в диссекторах: CAMEL, GIOP и WBXML. ля.
4. Атакующий может вызвать переполнение буфера в
SMB-диссекторе. Однобайтовое переполнение буфера
URL производителя: www.ethereal.com. в mod_ssl при обработке CRL
Решение: Установите последнюю версию (0.10.12) с сай- Программа: mod_ssl.
та производителя. Опасность: Высокая.
Описание: Уязвимость существует при обработке CRL
Выполнение произвольного кода (certificate revocation lists). Удаленный пользователь может
в Sophos Anti-Virus создать специальным образом CRL, который при обработ-
Программа: Sophos Anti-Virus версии до 3.96.0; версии ке функцией callback() вызовет однобайтовое переполне-
до 4.5.4. ние буфера и даст возможность злоумышленнику выпол-
Опасность: Высокая. нить произвольный код на целевой системе.
Описание: Переполнение буфера в Sophos Anti-Virus мо- URL производителя: www.modssl.org.
жет позволить злоумышленнику выполнить произвольный Решение: Установите исправление с сайта производите-
код на целевой системе. Подробности уязвимости не рас- ля.
крываются.
URL производителя: www.sophos.com. Переполнение буфера
Решение: Установите исправление с сайта производите- в CA BrightStor ARCserve Backup
ля. и Enterprise Backup-агентах
Программа: BrightStor ARCserve Backup v9.01, r11.0, r11.1;
Обход каталога в MDaemon BrightStor Enterprise Backup 10, 10.5.
Программа: MDaemon версии до 8.1.0. Опасность: Критическая.
Опасность: Высокая. Описание: Переполнение буфера обнаружено при обработ-
Описание: Уязвимость существует в контентном фильтре ке входных данных. Злоумышленник может послать специ-
приложения при обработке вложенных файлов со специ- ально сформированные данные на порт приложения 6070,
ально сформированными именами. Злоумышленник может вызвать переполнение буфера и выполнить произвольный
создать специально сформированный файл, содержащий код на целевой системе с привилегиями Local System или
в своем имени символы обхода каталога, и записать его в вызвать отказ в обслуживании.
произвольную директорию на системе. URL производителя: www.ca.com.
URL производителя: www.altn.com. Решение: Установите исправления с сайта производите-
Решение: Установите исправление с сайта производите- ля.
ля.
Отказ в обслуживании в ядре Linux
Выполнение произвольного кода Программа: Linux kernel версии до 2.6.13-rc6.
в Cisco IOS при обработке IPv6-пакетов Опасность: Средняя.
Программа: Cisco IOS 12.4 и более ранние версии. Описание: Уязвимость существует при обработке связок
Опасность: Высокая. ключей (keyrings). Локальный пользователь может опреде-
Описание: Удаленный пользователь может послать специ- ленным образом создать связку ключей, что приведет к от-
ально сформированный IPv6-пакет логическому интерфей- казу в обслуживании системы.
су устройства и вызвать перезагрузку устройства или вы- URL производителя: www.kernel.org.
полнить произвольный код на целевой системе. Решение: Установите исправление с сайта производите-
URL производителя: www.cisco.com. ля.
Решение: Установите исправление с сайта производите-
ля. Составил Александр Антипов

94
подписка на II полугодие 2005
Российская Федерация ! Казахстан – по каталогу «Российская Пресса» через
! Подписной индекс: 81655 ОАО «Казпочта» и ЗАО «Евразия пресс»
Каталог агентства «Роспечать» ! Беларусь – по каталогу изданий стран СНГ через РГО
! Подписной индекс: 87836 «Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)
Объединенный каталог «Пресса России» ! Узбекистан – по каталогу «Davriy nashrlar» российские
Адресный каталог «Подписка за рабочим столом» издания через агентство по распространению печати
Адресный каталог «Библиотечный каталог» «Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик,
! Альтернативные подписные агентства: 5/3, офис 33)
Агентство «Интер-Почта» (095) 500-00-60, курьерская ! Армения – по списку номенклатуры «АРЗИ» через ГЗАО
доставка по Москве «Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2)
Агентство «Вся Пресса» (095) 787-34-47 и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарьяна,
Агентство «Курьер-Прессервис» 22)
Агентство «ООО Урал-Пресс» (343) 375-62-74 ! Грузия – по списку номенклатуры «АРЗИ» через АО
! Подписка On-line «Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29) и
http://www.arzy.ru АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)
http://www.gazety.ru ! Молдавия – по каталогу через ГП «Пошта Молдавей»
http://www.presscafe.ru (МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)
по списку через ГУП «Почта Приднестровья» (МD-33-
СНГ 00, г.Тирасполь, ул.Ленина, 17)
В странах СНГ подписка принимается в почтовых отделе- по прайслисту через ООО Агентство «Editil Periodice»
ниях по национальным каталогам или по списку номен- (2012, г.Кишинев, бул. Штефан чел Маре, 134)
клатуры АРЗИ: ! Подписка для Украины:
! Азербайджан – по объединенному каталогу российских Киевский главпочтамп
изданий через предприятие по распространению печа- Подписное агентство «KSS»
ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21) Телефон/факс (044)464-0220

Подписные
индексы:

81655
по каталогу
агентства
«Роспечать»
87836
по каталогу
агентства
«Пресса
России»

№8, август 2005 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№8(33), Август, 2005 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Редакторы Ремонтируем трализованное управление» и «рабо-
Андрей Бешков и восстанавливаем чая группа» являются взаимоисключа-
Алексей Барабанов жесткие диски ющими. Именно в этот момент систем-
Рашид Ачилов Ценность обрабатываемой информа- ному администратору приходится при-
ции с каждым годом неуклонно рас- нимать решение о переходе к домен-
РЕКЛАМНАЯ СЛУЖБА тет, а надежность жестких дисков, на- ной структуре.
тел./факс: (095) 928-8253 против, стремительно падает. Но да- С какими трудностями придется
Константин Меделян же после физического выхода жест- столкнуться в первую очередь? Что
reсlama@samag.ru кого диска из строя в 90% случаев ин- необходимо предусмотреть заранее,
формацию можно восстановить! За- чтобы процесс перехода прошел без
Верстка и оформление частую даже без специального обору- сучка и задоринки?
maker_up@samag.ru дования! Речь пойдет об аппаратных В данной статье я попытаюсь обоб-
Дизайн обложки отказах (дефектах поверхности, вы- щить свой опыт подобных внедре-
Николай Петрочук ходе электроники из строя), также об- ний, чтобы заранее облегчить вашу
судим проблемы выбора накопителя: задачу.
По вопросам распространения сравним статистику отказов для раз-
обращайтесь по телефону: ных моделей и производителей и срав- Загрузочный Flash-диск
(095) 928-8253 (доб. 120) ним легкость ремонта. с DOS и FreeBSD
Вам удалось уговорить руководство
107045, г. Москва, Домены закупить новый сервер, и вот он, кра-
Ананьевский переулок, дом 4/2 стр. 1 Windows 2000/2003 – савец, стоит рядом, сверкая ручка-
тел./факс: (095) 928-8253 отказываемся от рабочей ми 19-дюймового корпуса... Одна про-
Сайт журнала: www.samag.ru группы блема – как поставить на него опе-
Очень часто наблюдается тенденция рационную систему? Дисковода гиб-
РУКОВОДИТЕЛЬ ПРОЕКТА быстрого роста локальных сетей не- ких дисков в нем нет, CD-ROM тоже...
Петр Положевец больших компаний. Сначала это два- Можно было бы, конечно, открыть его
УЧРЕДИТЕЛИ три компьютера для бухгалтерии, за- и воткнуть CD-ROM на время уста-
Владимир Положевец тем еще по одному для директора, его новки... А если придется восстанав-
Александр Михалев заместителя, секретаря, нескольких ливать систему? Вынимать из стой-
ИЗДАТЕЛЬ менеджеров и т.д. Через какое-то вре- ки? Так только за то время, пока бу-
ЗАО «Издательский дом мя их количество опять увеличивает- дешь вынимать, весь телефон обор-
«Учительская газета» ся, так как штат сотрудников расширя- вут. Если загрузиться с USB Flash-дис-
ется. Однако все эти компьютеры яв- ка? Его создавать надо... Впрочем, ни-
Отпечатано типографией ляются членами рабочей группы, в ко- чего сложного в этом нет, мы расска-
ГП «Московская Типография №13» торой каждый участник равноправен. жем вам, как очень просто создать за-
Тираж 8400 экз. Администрировать такую сеть стано- грузочный Flash-диск с разделами DOS
вится неудобно, так как понятие «цен- и FreeBSD.
Журнал зарегистрирован
в Министерстве РФ по делам печати, Уважаемые читатели!
телерадиовещания и средств массо-
вых коммуникаций (свидетельство Спешите оформить подписку
ПИ № 77-12542 от 24 апреля 2002 г.) на первое полугодие 2006 года!
За содержание статьи ответствен- Приобрести новые и старые номера журнала
ность несет автор. За содержание вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
рекламного обьявления ответствен-
ность несет рекламодатель. Все пра-
ва на опубликованные материалы за-
щищены.
Доставка почтой в любую точку России.

96