033 Системный Администратор 08 2005

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

Upload: vladimir-gromadin

Post on 23-Mar-2016

258 views

Category:

Documents


7 download

DESCRIPTION

№8(33) август 2005 подписной индекс 81655 www.samag.ru №8(33) август 2005 НЕОЖ ИДАННО ЗАКОНЧИЛИСЬ БЫСТРО РАСКУПИЛИ ТИРАЖ НОВОГОДНИЕ ЗАТЯНУЛИСЬ КАНИКУЛЫ ОТПУСКА ДЕНЬГИ РАБОТЕ АВРАЛ НА 82 72 10 Проводим аудит системы с помощью SNARE Готовое решение на примере УАТС LG GDK-162. Денис Соколов Обзор настольного дистрибутива PC-BSD, основан- ного на FreeBSD. Превратим сеть в единый суперкомпьютер! Антон Борисов Создаем систему учета исходящих телефонных звонков 6 [email protected]

TRANSCRIPT

Page 1: 033 Системный Администратор 08 2005

№8(

33)

авгу

ст 2

005

№8(33) август 2005подписной индекс 81655www.samag.ru

Сможет ли PC-BSDСможет ли PC-BSDконкурироватьконкурироватьс Linux-дистрибутивами?с Linux-дистрибутивами?

Оцените WrSpy!Оцените WrSpy!Считаем трафик почтовыхСчитаем трафик почтовыхи прокси-серверови прокси-серверов

Настраиваем DSPAM – Настраиваем DSPAM – ваш личный спам-фильтрваш личный спам-фильтр

Проводим аудит системы Проводим аудит системы с помощью SNAREс помощью SNARE

УпрощаемУпрощаем управление управлениеAsteriskAsterisk-сервером-сервером

OpenMosix – превратим сеть OpenMosix – превратим сеть в единый суперкомпьютер!в единый суперкомпьютер!

CD, не подвластныйCD, не подвластныйкопированиюкопированию

Админские сказкиАдминские сказки16 bit edition16 bit edition

Page 2: 033 Системный Администратор 08 2005

Роспечать – 81655Пресса России – 87836Интер-почта – тел. (095) 500-00-60

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

ПОДПИШИТЕСЬ И ЧИТАЙТЕ!

Так видит журнал читатель, оформивший подписку:

НОВОГОДНИЕ

КАНИКУЛЫ

ЗАТЯ

НУЛИСЬ

БЫСТР

О РАСКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

ЗАКОНЧИЛИСЬ Д

ЕНЬГИ

УЕХАЛ В

ОТП

УСК

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

Page 3: 033 Системный Администратор 08 2005

1№8, август 2005

оглавление

РЕПОРТАЖ2

ТЕНДЕНЦИИ3

АДМИНИСТРИРОВАНИЕ

Сможет ли PC-BSD конкурироватьс Linux-дистрибутивами?Обзор настольного дистрибутива PC-BSD, основан-ного на FreeBSD.

6

Asterisk и Linux: миссия IP-телефонияДействие 3 Рассматриваем несколько веб-интерфейсов, значи-тельно облегчающих работу пользователей и адми-нистраторов Asterisk.

10

Создаем систему учета исходящих телефонных звонковГотовое решение на примере УАТС LG GDK-162.

Денис Соколов

[email protected]

20

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

Сергей Супрунов

[email protected]

24

WrSpy – считаем и контролируем трафик почтовых и прокси-серверовОцените возможности бесплатной программы WrSpy для контроля за интернет-трафиком ваших пользо-вателей.

36

Знакомимся с HPC-кластером OpenMosixПревратим сеть в единый суперкомпьютер!

Антон Борисов

[email protected]

42

Управляем удаленными базами AIDEТребуется оснастить все сервера программой конт-роля от вторжений – AIDE. Но сервера территориаль-но разбросаны, а хотелось бы хранить базы AIDE на съемных носителях. Как собрать данные со всех ком-пьютеров, не вставая с места?

48

SAP+MySQL=MaxDBОбзор возможностей MaxDB – СУБД, базирующей-ся на исходном коде SAP DB.

54

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

Сергей Яремчук

[email protected]

60

БЕЗОПАСНОСТЬ

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

Крис Касперски

[email protected]

64

Контролируем и ограничиваем системные вызовы с помощью systraceКак всегда быть в курсе того, что происходит в ва-шей системе?

72

ПРОГРАММИРОВАНИЕ

Используем LinuxBIOS на системах VIA EPIA-MВдохнем жизнь в barebone-систему на базе EPIA-M и технологии LinuxBIOS.

76

HARDWARE

WEB

Совершенствуем технологию CMSВозможности проекта Habitat 2.0.

Алексей Моисеев

[email protected]

82

IT в сфере ресторанно-гостиничного бизнесаОбзор программных и аппаратных продуктов, позво-ляющих эффективно управлять современными гос-тиничными комплексами.

86

БИЗНЕС-РЕШЕНИЯ В IT

СКАЗКИ

Админские сказки. 16 bit editionСовершенно выдуманные истории, рассказанные без какой-нибудь видимой цели или морали, и да-же не ко сну.

88

КНИЖНАЯ ПОЛКА93

BUGTRAQ75, 85, 94

Сергей Супрунов

[email protected]

Михаил Платов

[email protected]

Роман Марков

[email protected]

Рашид Ачилов

[email protected]

Кирилл Сухов

[email protected]

Александр Байрак

[email protected]

Антон Борисов

[email protected]

Кирилл Тихонов

[email protected]

Алексей Барабанов

[email protected]

Page 4: 033 Системный Администратор 08 2005

2

репортаж

что поспать особо не удалось. Утром за нами прибыл ав-тобус, и мы отправились на второй день мероприятия. Про-грамма этого дня была не менее насыщенной по сравне-нию с первым днем.

Одновременно с CC’05 в том же зале проходила выстав-ка retro-компьютеров.

В этом году было представлено около 15 различных экс-понатов. За каждым компьютером можно было самому по-сидеть, поработать. Большинство владельцев были непо-далеку и с радостью отвечали на все вопросы.

После завершения всех конкурсов и подсчета голо-сов состоялось торжественное вручение дипломов побе-дителям.

Само собой, после официального завершения CC’05 бы-ло и неофициальное. Два дня пролетели просто незаметно, полученных впечатлений хватит до следующего года.

Ссылки:1. http://cc5.org.ru/index.php?uid=pubgrafik.2. Результаты: http://cc5.org.ru/index.php?uid=vote_result.3. Работы участников: ftp://ftp.cc5.org.ru/pub/2005.

Александр БайракФото Евгения Давыдова

Мероприятие происходило в здании Ленинградского дворца молодежи. В одном месте собирались твор-ческие личности: программисты, художники, музы-

канты, аниматоры.

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

После показа каждой работы зрители выставляли свою оценку, занося ее в специальный блокнот. После по-каза всех работ одного конкурса листок с выставленными оценками надлежало поместить в «урну для голосования». По завершении второго дня demo-party, исходя из этих дан-ных, были объявлены итоги.

По окончании первого дня желающие (предварительно оплатив) могли отправиться на hidden-party, которая про-ходила неподалеку от Ломоносова (Ораниенбаум) – приго-рода Санкт-Петербурга, на территории пионерского лаге-ря. По замыслу организаторов на hidden-party люди могли пообщаться в более неформальной обстановке, обсудить первый день CC’5 и отдохнуть. После ужина началось «про-должение банкета». Очень запомнился поход ночью к Фин-скому заливу и выступление музыкантов ChipCult. Жаль,

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

Игра StarWars for ZX Spectrum by Newart

Выставка retro-компьютеров

Вручение дипломов

ИТОГИ CHAOS CONSTRUCTIONS 200520-21 сентября в Санкт-Петербурге традиционно прошла demo-party Chaos Construction.

Я бы обозначил это событие как фестиваль компьютерного искусства.

Page 5: 033 Системный Администратор 08 2005

3№8, август 2005

тенденции

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 CorporationMozilla 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,

Page 6: 033 Системный Администратор 08 2005

4

тенденции

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.09 августа 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.

Кирилл Сухов

Page 7: 033 Системный Администратор 08 2005

5№8, август 2005

конкурс

IT-ACADEMY 2005НОВАЯ АКЦИЯ

ДЛЯ МОЛОДЫХ СПЕЦИАЛИСТОВ

Еще не закончился «Кубок сетевых проектов Microsoft», технические материалы с которого

мы планируем опубликовать в последующих номерах, как те же организаторы – компании

Microsoft, Softline и ZyXEL объявили о начале новой акции. Как и в прошлый раз, акция

проводится для молодежи – школьников, студентов, аспирантов и молодых специалистов

(недавних выпускников вузов), но теперь ее география расширилась – она проходит

в нескольких городах России: Москве, Томске, Омске, Воронеже и Самаре.

Полное название акции – «Моло-дежный чемпионат IT-Academy 2005». Несмотря на слово «чем-

пионат», акция не имеет ничего общего с турнирами для программистов и дру-гими соревнованиями, в которых мо-гут участвовать только очень опытные специалисты. Наоборот, чтобы при-нять участие в IT-Academy 2005 доста-точно лишь иметь общее представле-ние о том, чем занимаются компании Microsoft и ZyXEL.

Акция состоит из двух этапов, и у каждого этапа свои призы. На первом этапе нужно сдать на сайте http://www.it-academy.ru бесплатный онлайн-тест Microsoft или ZyXEL. Задачей теста не является проверка технических зна-ний участника. Вместо этого тест про-веряет общее знакомство с компани-ей, ее историей, новостями и продукта-ми/услугами. С учетом того, что все от-веты можно найти в Интернете, сдача теста не выглядит особо сложной за-дачей. Главный приз в каждом городе получит тот, кто сдаст тест раньше и лучше всех. Среди остальных участ-ников будут разыграны по лотерее два дополнительных приза.

Второй этап не является обязатель-ным, но если есть желание побороться за бесплатное обучение на несколь-ких авторизованных курсах Microsoft по программе MS IT Academy и за меж-дународный сертификат Профессиона-ла Microsoft (MCP), то предваритель-ным условием является набор на лю-

бом из тестов не менее 60 процентов правильных ответов. Участники второ-го этапа должны пройти специальный 12-часовой курс «Построение IT-инфра-структуры предприятия на основе про-дуктов Microsoft» стоимостью 599 руб-лей. Курс рассматривает ОС Windows XP и Windows Server 2003, Групповую политику и серверные продукты MS Exchange Server 2003 и MS ISA Server 2004. В каждом городе по результатам обучения определится тройка побе-дителей, которые и смогут бесплатно пройти профессиональное обучение.

Акция показалась нам интересной, и мы решили задать несколько вопро-сов организаторам. На наши вопросы отвечает директор по развитию реги-ональных образовательных проектов SoftLine Андрей Степанов.

В чем идея акции?

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

Как будут отбираться победители

второго этапа?

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

Почему во втором этапе нужно сна-

чала пройти платный курс и только

потом сдавать проверочный тест на

усвоение материала. Можно ли сда-

вать тест без курса?

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

Главный приз от компании ZyXEL �802.11g+ беспроводной модем ADSL2+с 2-портовым шлюзом VoIP и 4-портовымкоммутатором P-2602HW EE

Page 8: 033 Системный Администратор 08 2005

6

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

Мы рассмотрим дистрибутив PC-BSD. В руки мне по-палась версия 0.7.8, основанная на FreeBSD 5.4-RELEASE #2. Сейчас, когда я пишу эти строки, ве-

дутся работы над версией 0.8, и не исключено, что к момен-ту выхода журнала актуальной будет уже она. Тем не ме-нее основные свои черты дистрибутив должен сохранить, так что продолжим.

Процесс установкиИнсталляция, снабженная удобным графическим интер-фейсом, прошла без каких-либо эксцессов. При загрузке с диска вас встретит знакомая пользователям FreeBSD кар-

тинка (рис. 1), которая позволит воспользоваться различ-ными режимами загрузки в случае проблем.

Далее, перед переходом в графический режим, будет выведено еще одно текстовое окно, предоставляющее еще несколько путей для преодоления возможных трудно-стей, например, вы сможете загрузиться в режим команд-ной оболочки (рис. 2).

Инсталлятор потребует некоторого знания английского языка (можно надеяться, что в следующих релизах появит-ся и русский), однако для человека, в общих чертах пред-ставляющего себе установку операционной системы, ни-каких сложностей возникнуть не должно.

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

Новые дистрибутивы Linux появляются, как грибы после дождя. Фанаты же BSD по большей

части вынуждены собирать свои десктопы вручную. Однако появилась пара дистрибутивов,

основанных на FreeBSD, одному из которых и посвящается эта статья.

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

Page 9: 033 Системный Администратор 08 2005

7№8, август 2005

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

Итак, после приветствия и нескольких общих фраз (рис. 3) вам будет предложено выбрать место на имею-щихся у вас дисках, куда вы хотели бы выполнить уста-новку (рис. 4).

Если отметить опцию «Customize DiskLabel», то вы по-лучите возможность разбить выбранный слайс на подраз-делы по своему желанию (рис. 5). Иначе будет выполне-на нехитрая автоматическая разбивка, на мой взгляд, не совсем оптимальная – 999 Мб будет занято под Swap, ос-тальное место – под корневой раздел. При таком распре-делении слайса резко возрастает риск повредить систе-му при аварийном завершении работы. Учитывая, что ка-чество электросети в нашей стране по-прежнему остав-ляет желать лучшего, а ИБП дома – роскошь, вероятность неприятностей становится еще выше. Хотя файловая сис-тема FreeBSD достаточно устойчива к сбоям, все же луч-ше потратить несколько минут и указать более удачное разбиение, выделив, по крайней мере, отдельные разде-лы для /usr и /var. Кроме того, подобное разбиение позво-лит более гибко оптимизировать работу ФС в зависимос-ти от решаемых задач, например, включив асинхронный режим работы для /var.

Далее инсталлятор поинтересуется, желаете вы устано-вить загрузчик BSD или нет. После чего начнется процесс копирования файлов, который займет минут 15-20. (Кста-ти, если во время копирования ваш экран вдруг станет чер-ным, не пугайтесь – это screen-saver.) В конце вам нужно бу-дет ввести пароль суперпользователя, а также заполнить данные непривилегированного пользователя, от имени ко-торого вы будете в дальнейшем работать в системе. Здесь же вы сможете отметить, хотите ли входить в систему ав-томатически (опция «Autologon»). Теперь со спокойной со-вестью можно перезагрузиться.

Про маленькую проблемуУпомяну здесь про интересное поведение дистрибутива, когда я попытался его поставить на свой домашний ком-пьютер с отключенным Primary Master-диском (был подклю-чен только Slave). Сперва он не нашел никакие диски во-обще, но после нажатия кнопки «Обновить» в окне выбора диска предложил поставить систему на неизвестно откуда взявшийся BSD-раздел размером около 2 Гб.

Когда я ради интереса согласился и продолжил установ-ку, PC-BSD 15 минут честно копировал свои файлы в нику-да, сопровождая это сообщениями «Failed to create dir…», не прерывая тем не менее работы. После перезагрузки, естес-твенно, ничего установленного найдено не было.

Таким образом, прежде чем начинать установку, убеди-тесь, что в системе есть диск Primary Master (саму установ-ку не обязательно выполнять на него).

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

На рабочем столе не будет видно иконок быстрого мон-тирования CD и жестких дисков. Они размещены под икон-кой «Computer» и далее – «Drives». Там же можно найти и не-что вроде «Сетевого окружения» для Samba. Монтирование-размонтирование дисков выполнялось легко, что называет-ся, парой кликов (рис. 6). Подключение разделов NTFS тоже возможно, но только на чтение. Кстати говоря, для непри-вилегированного пользователя и FAT будет доступна толь-ко для чтения – писать туда по умолчанию может лишь root. И еще, что бросилось в глаза, – в папке автомонтирования были предложены только диски, размещенные на основных разделах. Логический диск с FAT32, который у меня находит-ся на дополнительном разделе, обнаружен не был.

Среди имеющихся приложений можно найти несколько простых текстовых редакторов (Kate, KWrite), средства для просмотра графики, PDF, аудиоплейер, десятка два обыч-ных для KDE игрушек.

Для работы в Интернете к вашим услугам браузер Konqueror, почтовый клиент KMail, менеджер закачек KGet. Столь популярный ныне Firefox в дистрибутив не попал, так же как и старушка Mozilla.

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

Установка дополнительных приложенийЕще на этапе инсталляции вы можете встретить подсказ-ку, что при желании вы можете закачать себе дерево пор-тов простой командой:

Рисунок 1. Стандартное меню загрузчика BSD

Рисунок 2. Окно выбора режима работы

# cvsup /root/ports-supÞle

Page 10: 033 Системный Администратор 08 2005

8

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

Но разработчики PC-BSD предлагают другое реше-ние – пакеты pbi. Скачать их можно с сайта http://www.pcbsd.org, однако на данный момент выбор не очень богатый – чуть больше 50. Зато это наиболее востребованное ПО – OpenOffice, Firefox, Opera, Thunderbird, GIMP, ClamAV и др.

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

Рисунок 4. Диалог выбора раздела для установки

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

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

ляторах. Как будто вы ставите msi-приложение в системе Windows.

Установленные таким образом приложения можно бу-дет найти в PC-BSD Package Manager (рис. 7). Из этого же окна лишнее можно и удалить.

Ну и помимо данного способа вы можете воспользо-ваться более традиционным менеджером пакетов KPackage (рис. 8) либо использовать коллекцию портов традицион-

Рисунок 3. Начинаем инсталляцию PC-BSD

Page 11: 033 Системный Администратор 08 2005

9№8, август 2005

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

Рисунок 9. KDE Control Center. Keyboard layout

ным способом, выполнив предварительно указанную вы-ше команду.

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

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

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

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

Рисунок 10. Настройка сети вручную

языка – огромный минус, однако можно надеяться, что в сле-дующих версиях ситуация изменится в лучшую сторону.

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

Таким образом, PC-BSD – хорошая отправная точка для установки FreeBSD на свой домашний или рабочий компьютер, хотя по сравнению с большинством дистрибу-тивов Linux этот дистрибутив пока еще заметно отстает и требует доводки «напильником». Впрочем, это можно объ-яснить его молодостью.

Page 12: 033 Системный Администратор 08 2005

10

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

Если использование setuid вас устраивает, проигно-рируйте это сообщение и перейдите к следующему шагу. В противном случае вы можете воспользоваться специаль-ным патчем для Asterisk, описанным в [3].

Отредактируем файл скрипта vmail.cgi, определив сле-дующее значение для контекста по умолчанию:

Откроем ваш любимый браузер и введем URL только что установленного интерфейса (в моем случае это будет http://ast-test/cgi-bin/vmail.cgi). Если все было сделано пра-вильно, то мы увидим следующее (см. рис. 1).

Введя имя пользователя (номер телефона) и пароль, мы попадем в папку «Входящие» нашего ящика (см. рис. 2).

Пользователей linux-систем придется немного расстро-ить – воспроизведение в браузере через плагин (кнопка

Послушаем почту?Как вы помните, для проверки голосовой почты в нашем номерном плане есть специальный номер – 8500. Позво-нив на него и введя личный пароль, наши пользователи мог-ли прослушать оставленные им сообщения. Правда, иног-да такой способ доступа бывает несколько неудобен (на-пример, вы находитесь в другом городе или просто под ру-кой нет телефона). Для решения этой проблемы можно от-сылать записанные сообщения на e-mail (см. [2]) или орга-низовать централизованный доступ через Интернет с ис-пользованием безопасного SSL-соединения. Отрадно то, что в состав стандартного дистрибутива Asterisk веб-ин-терфейс для работы с голосовой почтой уже входит, прос-то в целях безопасности автоматически он не устанавли-вается. Что, впрочем, не мешает нам сделать это самосто-ятельно. Для работы данного интерфейса необходим веб-сервер apache с пакетом perl-suid. Краткости ради будем считать, что эти пакеты у нас уже установлены и работают, а веб-сервер сконфигурирован так, что cgi-bin расположен в /var/www/cgi-bin, и cgi-скрипты, входящие в стандартную поставку, выполняются без проблем. Итак, перейдем в ка-талог /usr/src/asterisk и выполним команду make webvmail. Программа make скопирует все необходимые файлы и вы-даст следующее предупреждение:

ASTERISK И LINUX: МИССИЯ IP-ТЕЛЕФОНИЯ ASTERISK И LINUX: МИССИЯ IP-ТЕЛЕФОНИЯ ДЕЙСТВИЕ 3ДЕЙСТВИЕ 3

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

способное обеспечить связью сотрудников небольшого офиса. Но не будем останавливаться способное обеспечить связью сотрудников небольшого офиса. Но не будем останавливаться

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

как пользователей, так и администраторов Asterisk.как пользователей, так и администраторов Asterisk.

МИХАИЛ ПЛАТОВМИХАИЛ ПЛАТОВ

+--------- Asterisk Web Voicemail ----------+ + + + Asterisk Web Voicemail is installed in + + your cgi-bin directory. IT USES A SETUID + + ROOT PERL SCRIPT, SO IF YOU DON'T LIKE + + THAT, UNINSTALL IT! + + + +-------------------------------------------+

context="ofÞce"

Page 13: 033 Системный Администратор 08 2005

11№8, август 2005

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

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

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

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

MeetMe является исторически первым приложением, предоставившим возможности конференций. Модуль яв-ляется достаточно функциональным и позволяет решать широкий класс задач. Несмотря на то что MeetMe входит в стандартную поставку Asterisk, для его работы необходи-мы высокоточные таймеры, присутствующие в аппаратуре Digium. Модуль conference же, напротив, не требует нали-чия zaptel-устройств, однако он предоставляет несколько меньшую функциональность. Отличительной особенностью conference является более эффективное использование ре-сурсов сервера, что позволяет обеспечивать одновремен-ную работу большего числа пользователей. MeetMe2 яв-ляется переработанной версией MeetMe. Наиболее значи-мые отличия – хранение конфигурации в СУБД и несколь-ко другие возможности управления.

Все модули имеют схожую схему использования. Пос-ле звонка по определенному номеру абонент попадает в «виртуальную комнату». Как только в «комнате» окажут-ся хотя бы два участника, начнется разговор. В конферен-циях существует 3 типа пользователей: «слушатели», «ора-торы» и «администраторы». «Слушатели» лишены права голоса, «ораторы» могут не только слушать, но и разго-варивать. На «администраторов» возлагаются обязаннос-ти управления – изменение статуса, удаление и добавле-ние пользователей, открытие и закрытие «комнаты» и т. д. Основы работы с конференциями рассмотрим на приме-ре модуля MeetMe.

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

uhci) и 2.6.x. Откроем Makefile библиотеки zaptel и уберем комментарий (символ «#») перед ztdummy. Для zaptel 1.0.9 это строка 61. После этого пересоберем библиотеку (make & make install) и попробуем загрузить модуль ztdummy:

Убедимся, что у нас это получилось:

Настроим автоматическую загрузку модуля, добавив соответствующую запись в стартовые скрипты системы

Рисунок 1. Окно входа веб-интерфейса системыголосовой почты

Рисунок 2. «Входящие» сообщения голосовой почты

Рисунок 3. Прослушивание сообщения голосовой почты

# modpobe ztdummy

# lsmod |grep ztdummy

ztdummy 3620 0 zaptel 225732 1 ztdummy

Page 14: 033 Системный Администратор 08 2005

12

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

(в случае Gentoo это будет строка в одном из файлов внут-ри /etc/modules.autoload.d). После этого можно смело при-ступать к настройке конференций.

Определим «место встречи» (conference room) пользо-вателей. Для этого в файл /etc/asterisk/meetme.conf доба-вим следующее:

Этим мы создали «комнату» с номером 400. Теперь сде-лаем в ней «дверь». Для этого в файл extensions.conf доба-вим следующие строки:

Перезапустите Asterisk и позвоните на номер 400 со всех телефонов. Пользователи попадут в общую «комнату» №400 и смогут одновременно общаться друг с другом.

Кроме статического описания «комнат» конфереций (пример, который мы только что рассмотрели), MeetMe так-же может создавать их динамически. В этом случае чело-век, открывающий «комнату», определяет для нее соответс-твующий пароль доступа. После этого он сообщает номер комнаты и пароль остальным участникам, и они начинают обсуждение. А любители подслушивать телефонные разго-воры в это время злобно грызут ногти и кусают локти.

Реализовать эту возможность на практике можно с по-мощью следующей конструкции номерного плана:

Теперь сделаем еще один шаг в сторону «идеального сер-вера» и установим веб-интерфейс для управления конферен-циями. С его помощью можно легко и просто подключать и отключать участников, давать и отбирать «право» голоса, да и вообще – просто наблюдать за тем, что происходит в наших «комнатах». Для работы с интерфейсом нам так же, как и с голосовой почтой, понадобится веб-сервер, только теперь с интерпретатором PHP. Будем считать, что все это у нас име-ется, поэтому без промедлений приступим к установке.

Первым делом скачаем с [12] архив с Web-MeetMe и рас-пакуем его в Apache_DocumentRoot/meetme. Зайдем в ка-талог phpagi и скопируем файл phpagi.example.conf в /etc/asterisk/phpagi.conf. Внесем в этот файл некоторые изме-нения:

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

С конфигурационными файлами теперь все нормаль-но, а вот с самими PHP-скриптами не очень. Дело в том, что web-meetme написан с учетом того, что переменная PHP RegisterGlobals определена как «On». Из соображе-ний безопасности, начиная с PHP-4.2.0, значение по умол-чанию для этой переменной – Off. Поэтому, для того что-бы скрипты заработали, необходимо либо поменять зна-чение RegisterGlobals в файле php.ini, либо модифициро-вать файл conf_control.php, добавив в его начале следую-щие строки:

Кроме того, для нормальной работы с версией Aster-isk 1.0.9 мне пришлось закомментировать строку 113 (вы-зов break) в файле conf_control.php.

Если интерфейс установился нормально, то в браузере мы увидим следующее (см. рис. 4).

Системный телефонНеотъемлемым атрибутом любой мини-АТС является сис-темный телефон. С его помощью оператор может полностью контролировать состояние мини-АТС (какие линии в данный момент свободны, какие заняты и т. д.). Более функциональ-ным аналогом системного телефона для Asterisk является Flash Operator Panel. C помощью FOP можно переключать и завершать звонки, просматривать запаркованные вызо-вы, следить и управлять конференц-комнатами, да и прос-то наблюдать за тем, что происходит с Asterisk.

С точки зрения администратора, FOP является кли-ент-серверным приложением. В качестве клиента высту-пает flash-приложение, выполняемое в любом из популяр-ных браузеров (IE, Opera, Mozilla/Firefox). Серверная часть представлена perl-скриптом, в реальном времени получа-ющим от Asterisk информацию о совершаемых в нем дейс-твиях. На момент написания этих строк последняя доступ-

server=127.0.0.1port=5038username=webmmsecret=webmmpw

[general]enabled = yesport = 5038bindaddr = 127.0.0.1

[webmm]secret = webmmpwpermit=127.0.0.1read = system,call,log,verbose,command,agent,userwrite = system,call,log,verbose,command,agent,user

getpost _ ifset(array('confno'));getpost _ ifset(array('action'));getpost _ ifset(array('user _ id'));

Рисунок 4. Интерфейс управления конференциями

[rooms]conf=> 400

[confs]exten => 400 , 1, Meetme, 400[ofÞce]include=> confs

[confs-dynamic]exten => 500, 1,MeetMe(|MD)[ofÞce]include => confs-dynamic

Page 15: 033 Системный Администратор 08 2005

13№8, август 2005

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

Page 16: 033 Системный Администратор 08 2005

14

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

ная версия FOP – .22 (см. рис. 5). Домашняя страница про-екта – [4].

При работе с Asterisk FOP также использует Asterisk Manager Interface. Таким образом, первое, что нам нужно будет сделать, – добавить в файл manager.conf соответс-твующую разрешающую запись:

Теперь перейдем к FOP. Настройки серверной части за-даются в файле op_server.cfg. Наиболее значимыми для нас параметрами являются:

Этим мы указали perl-серверу, где и как нужно искать Asterisk. К слову, с помощью FOP можно отслеживать состо-яние несколько серверов Asterisk. В этом случае надо про-дублировать эти строки необходимое количество раз, задав в них соответствующие параметры других серверов.

Первой строкой мы задали местоположение файлов панели. Второй – имя, по которому к серверу будут обра-щаться клиенты (это необходимо для того чтобы FOP пра-вильно формировал URL в процессе своей работы). Пара-метр security_code назначает пароль, который необходимо будет вводить для выполнения действий (переключение, завершение звонков). Четвертый параметр говорит сер-веру о том, что ему следует периодически самостоятельно проверять состояние голосовых ящиков (без использова-ния AMI). Данный параметр необходим в случаях, если для доступа к почте используется веб-интерфейс. Следующие настройки касаются работы с конференциями:

Первая строка тривиальна – контекст номерного пла-на, содержащий внутренний номер для доступа к конфе-ренции.

А вот на последних двух остановимся более подробно. Дело в том, что с помощью fop можно «собирать» людей в конференции. Третий параметр очень полезен в тех ситу-ациях, когда оператору необходимо прослушать разговор других абонентов. При значении «1» у пользователей, до-бавляемых FOP к конференции, будет «отключены микро-фоны», таким образом можно незаметно подключать учас-тников к конференции или организовывать прослушивание разговоров оператором. При необходимости «микрофон» можно включить, воспользовавшись все тем же веб-интер-фейсом. Строкой barge_rooms мы определяем те номера

«комнат», которые будут использоваться для реализации этой возможности. Кроме того, на панели FOP можно груп-пировать кнопки по контекстам. Для этого перед ними необ-ходимо написать имя соответствующего контекста.

Параметры визуализации (клиентская часть) задаются в файле op_buttons. Синтаксис его достаточно прост. Сначала описываются кнопки, отвечающие за абонентов Asterisk:

Чтобы не определять настройки для каждого пользова-теля вручную, можно задать общее описание с использо-ванием регулярного выражения:

Для отображения состояния места парковки восполь-зуемся следующим:

А вот так опишем «комнату» конференций:

Следующие строки покажут нам состояние внешней zaptel-линии:

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

В качестве последнего штриха настроим автоматичес-кий запуск perl-сервера при старте системы. Для этого мож-

ßash _ dir=/var/www/html/fopweb _ hostname=ast-testsecurity _ code=fop _ pwd poll _ voice _ mail=1

conference _ context=confsbarge _ rooms=400barge _ muted=1

[SIP/200] ; имя абонентаPosition=1 ; номер кнопки на консолиLabel="Vasya" ; надпись на кнопкеExtension=200 ; номер абонентаContext=ofÞce ; контекст, в котором ; определен абонентMailbox=200@ofÞce ; ящик голосовой почты пользователяIcon=1 ; номер иконки для данного ; пользователя (то 1 до 6)

[ _ SIP/.*] Position=n ; использовать следующий ; незанятый номер Label="SIP Users"Extension=-1 ; на эту кнопку перенаправлять ; звонки нельзяContext=generic _ incIcon=2

[PARK701] Position=nIcon=3Extension=700Label="Park 701"

[400] Position=nLabel="Meetme 400"Extension=400Context=confsIcon=6

[Zap/1]Position=10Label="External 1"Extension=-1Icon=2

Рисунок 5. Структура Flash Operator Panel

[fop _ user]secret = superfopsecretdeny=0.0.0.0/0.0.0.0permit=127.0.0.1/255.255.255.0read = system,call,log,verbose,command,agent,userwrite = system,call,log,verbose,command,agent,user

manager _ host=127.0.0.1manager _ user=fop _ usermanager _ secret=superfopsecret

Page 17: 033 Системный Администратор 08 2005

15№8, август 2005

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

Рисунок 6. Связь AMP и Asterisk

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

Единый центр управления Как вы могли заметить, настраивая Asterisk, мы редакти-ровали те или иные конфигурационные файлы. Некоторым такой способ администрирования может показаться не-сколько неудобным. В таком случае рекомендую посмот-реть в сторону Asterisk Management Portal. AMP представ-ляет собой веб-приложение, позволяющее управлять на-стройками Asterisk с помощью популярного веб-браузера. Для лучшего понимания его работы обратимся к следую-щей схеме (см. рис. 6).

Управление производится следующим образом: пос-редством веб-интерфейса администратор редактирует базу данных, задавая в ней необходимые параметры (добавле-ние/удаление пользователя, смена пароля, изменение пра-вил маршрутизации и т. д.). Затем, по информации, храни-мой в этой базе, веб-сервер обновляет конфигурационные файлы Asterisk и с помощью AMI сообщает серверу о том, что настройки необходимо применить заново. Кроме того, используя дополнительный модуль (веб-интерфейс, для ко-торого также входит в состав AMP), Asterisk помещает ин-формацию о всех совершенных звонках непосредственно в MySQL, что открывает дополнительные возможности для анализа исходящего голосового трафика организации.

После некоторого практического изучения данного про-дукта сложилось впечатление, что больше всего AMP под-ходит для 2 групп пользователей:! Начинающие пользователи, имеющие лишь общее пред-

ставление об Asterisk.! Администраторы, уже имеющие опыт работы с Asterisk,

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

Для первой группы пользователей AMP позволит на-строить наиболее популярные вещи, не вдаваясь при этом в дебри конфигурационных файлов с их многочисленными и зачастую непонятными параметрами. Для данной катего-рии самым сложным этапом является правильная установ-ка портала. Впрочем, эта проблема легко решается приме-нением специализированных дистрибутивов, уже имеющих в своем составе все необходимое, в том числе и AMP. На-иболее известный из них – Asterisk@Home [5].

Для второй категории пользователей AMP является мощным средством, позволяющим в короткие сроки по-лучить законченное и достаточно функциональное реше-ние на базе Asterisk. Причем здесь AMP выступает не как полный отказ от ручного редактирования конфигурацион-ных файлов (как это было в первом случае), а скорее как удобное дополнение к ним (например, стандартные вещи делаются в портале, а нестандартные – путем custom-ко-манд AMP или непосредственным редактированием кон-фигурационных файлов).

На этом позвольте закончить описание теоритеское и перейти к практическому рассмотрению AMP. Учитывая

характер работы данного приложения, не имеет смысла придерживаться уже созданной нами конфигурации. По-этому при настройке Asterisk с использованием AMP бу-дем считать, что перед нами вновь лежит «чистый лист». Итак, возьмем клавиатуру в руки и отправимся навстречу к нашей цели!

Устанавливаем AMP Для установки портала нам понадобятся все компоненты популярной платформы LAMP – Linux, Apache, MySQL и PHP (последний должен быть скомпилирован с поддержкой nls). Кроме того, нам также потребуются PHP-PEAR-DB, интер-претатор perl, а также perl-модули: Net::Telnet, IPC:Signal и Proc:WaitStat.

Первые установим с помощью средств, имеющихся в распоряжении вашего дистрибутива, а для вторых вос-пользуемся репозитарием CPAN:

Помимо этого нам потребуется добавить поддержку perl к самому Asterisk. Для этого установим модуль asterisk-perl, предварительно загрузив его с [6].

На этом подготовительные действия завершены, и мы можем смело приступить к установке самого AMP. По уже сложившейся традиции, воспользуемся последней стабиль-ной версией, доступной на момент написания этих строк – 1.10.008. Загрузим и распакуем tarball с файлами проек-та в удобное для нас место. Для определенности пусть это будет /usr/src:

Создадим две базы данных в MySQL. В первой будет храниться служебная информация AMP, во второй – инфор-мация о совершенных пользователями звонках.

Первая база создана. Теперь дадим пользователю Asterisk необходимые права доступа:

# perl -MCPAN -e "install Net::Telnet"# perl -MCPAN -e "install IPC::Signal"# perl -MCPAN -e "install Proc::WaitStat"

# cd /usr/src# wget http://citkit.dl.sourceforge.net/sourceforge/ ↵ amportal/AMP-1.10.008.tar.gz# tar xfz ./AMP-1.10.008.tar

# mysqladmin create asterisk -p

Enter password: <пароль root-пользователя MySQL>

# mysql-u root asterisk -p < usr/src/AMP/SQL/newinstall.sql

# mysql -u root -p

Page 18: 033 Системный Администратор 08 2005

16

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

Создадим вторую базу:

Теперь установим модуль регистрации звонков cdr_mysql, входящий в состав пакета asterisk-addons.:

В Makefile добавим следующую запись (строка 21):

И завершим инсталляцию модулей, выполнив команды:

Стандартная схема установки AMP предполагает, что Asterisk и веб-сервер должны выполняться одним пользо-вателем:

Настроим запуск веб-сервера от пользователя Asterisk. Для этого в конфигурационном файле apache напишем:

Теперь установим файлы самого AMP. Для этого запус-тим соответствующий установочный скрипт (учтите, что после его выполнения существующие файлы конфигура-ции Asterisk будут замещены, поэтому при необходимости не забудьте сделать резервные копии):

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

Убедимся, что автозапуск op_server.pl настроен и сам сер-вер запущен. Если все было сделано правильно, то, открыв http://имя_машины, мы увидим следующее (см. рис. 7).

Настройка AMPС интерфейсом голосовой почты мы уже знакомы, поэтому без лишних проволочек перейдем в основной раздел управ-ления, щелкнув по ссылке «Asterisk Management Portal».

Перед нами предстанут три раздела меню: настройка (Setup), отчеты (Reports) и панель FOP. Как следует из на-звания, для конфигурации системы используется Setup. Воз-можные действия в этом разделе перечислены в меню слева. Первым делом перейдем в подраздел Extensions и создадим несколько учетных записей пользователей (см. рис. 8).

При настройках по умолчанию (и с уставленным zaptel-оборудованием) сразу же после добавления пользователей и применения конфигурации уже можно совершать звонки, в том числе и с использованием ZAP-каналов через пре-фикс 7. Правда, скорее всего нам предварительно потребу-ется немного подправить настройки zaptel для учета специ-фики отечественных АТС, но, учитывая наш опыт из [1], это вряд ли вызовет у нас какие либо серьезные трудности.

Для настройки междугородней IP-телефонии необхо-димо создать транки (способ описания точек терминации внешнего по отношению к Asterisk трафика) и добавить со-ответствующие правила маршрутизации (раздел Outbound Routing). Формат этих правил во многом совпадает с тем, что мы определяли в текстовых файлах, поэтому практи-ческое рассмотрение данной возможности мы оставим для самостоятельного изучения. Благо с использованием кон-текстных подсказок веб-интерфейса этот процесс не явля-ется очень сложным.

В разделе Ring Groups мы несколькими движениями мышки можем объединить абонентов в единую группу вы-зова. Кроме того, также имеется возможность задать аль-тернативное поведение системы для случаев, когда ни один из абонентов группы не доступен (см. рис. 9).

В Incoming Calls определяются правила обработки звон-ков, приходящих с ZAP-каналов. Стандартной функцио-нальностью коробочного номерного плана AMP является возможность определения различных правил маршрутиза-ции для рабочего и нерабочего времени. При этом в качес-тве адресатов могут выступать группы вызова, системы го-лосовых меню, очереди или обычные абоненты.

# groupadd asterisk# useradd -c "asterisk PBX" -d /var/lib/asterisk -u ↵ 5060 �g asterisk asterisk

UserasteriskGroupasterisk

# /usr/src/AMP/install _ amp

/usr/sbin/asterisk -U asterisk

Рисунок 7. Стартовая страница AMP

Enter password: <пароль root-пользователя MySQL>mysql> GRANT ALL PRIVILEGES-> ON asterisk.*-> TO auser@localhost-> IDENTIFIED BY 'p0rtalpwd';Query OK, 0 rows affected (0.00 sec)mysql> \q

# mysqladmin create asteriskcdrdb �p

Enter password: <пароль root-пользователя MySQL>

# mysql -u root asterisk -p < ↵ usr/src/AMP/SQL/cdr _ mysql _ table.sql

Enter password: <пароль root-пользователя MySQL>mysql> GRANT ALL PRIVILEGES-> ON asteriskcdrdb.*-> TO auser@localhost-> IDENTIFIED BY 'p0rtalpwd';Query OK, 0 rows affected (0.00 sec)mysql> \q

# wget http://www.asterisk.org/html/downloads/ ↵ asterisk-addons-1.0.9.tar.gz# tar xfz ./asterisk-addons-1.0.9.tar.gz# cd ./asterisk-addons-1.0.9

CFLAGS+=DMYSQL _ LOGUNIQUEID

# make && make install

Page 19: 033 Системный Администратор 08 2005

17№8, август 2005

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

Рисунок 8. Создание абонентов в AMP

Для остальных разделов конфигурации ограничимся кратким описанием их назначения.! Queues – здесь определяются параметры очередей и

агентов. Более подробно эти параметры будут рассмот-рены в одном из следующих номеров журнала.

! Digital Receptionist – автосекретать. С помощью этого пункта можно быстро создать голосовое меню. Напри-мер, запишем такой текст: «Здравствуйте! Вы позвони-ли в СамуюЛучшуюКомпанию. Для соединения с ком-мерческим отделом нажмите 1. Технический отдел – 2. Бухгалтерия – 3 и т. д.» Затем с помощью того же мас-тера создадим правила маршрутизации для этого ме-ню, перенаправляющие пользователей в соответству-ющие отделы (в общем случае правила могут не соот-ветствовать текстовому сообщению). И, наконец, назна-чим созданное меню для входящих звонков в подраз-деле Incoming Calls. Этим самым мы значительно сни-зим нагрузку на нашего секретаря, освободив его вре-мя для более интересной работы.

! DID Routes – маршруты прямого вызова. С помощью данной функции можно напрямую позвонить внутрен-нему абоненту/агенту/группе вызова Asterisk с исполь-зованием механизма DID (при этом DID также должен поддерживаться городской телефонной станцией).

! On Hold Music – в этом подразделе мы можем загру-зить на сервер дополнительные мелодии для музыки при ожидании.

! System Recording – с помощью этого пункта меню мож-но добавлять (или записывать) в Asterisk дополнитель-ные звуковые сообщения, которые впоследствии могут быть использованы в голосовых меню.

! Backup & Restore – как следует из названия, с помощью данного раздела можно резервировать и восстанавли-вать конфигурацию Asterisk-сервера. Для работы этой функции необходимо добавить в crontab выполнение со-держимого /etc/asterisk/backup.conf.

! General Settings – в этом пункте определяются некото-рые системные параметры AMP – время дозвона до або-нента перед перенаправлением к голосовой почте, па-раметры работы с каталогом пользователей и настрой-ки обработки входящих факсов.

Более менее разобравшись с имеющимися возможнос-тями настройки, остановимся на модуле отчетов. С его по-мощью администратор может не только получить деталь-ную информацию за любой интересующий его период вре-мени, но и просмотреть статистическую информацию о за-грузке сервера в течение дня или на протяжении месяца.

Рисунок 10. Модуль отчетов AMP Рисунок 11. Интерфейс Flash Operator Panel

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

Page 20: 033 Системный Администратор 08 2005

18

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

Поддерживается выгрузка отчетных данных в формате pdf и csv (см. рис. 10).

Интерфейс панели управленияТретьим разделом интерфейса управления является уже знакомая нам Flash Operator Panel. В состав последней вер-сии AMP входит несколько устаревшая версия FOP (20 про-тив 22 на сайте разработчика). Правда, некоторой компен-сацией за это является интеграция AMP и FOP при установ-ке «из коробки».

Так, добавляя нового пользователя в AMP, запись о нем автоматически появляется и в FOP, что избавляет нас

от необходимости лишний раз редактировать файлы кон-фигурации.

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

Лирическое отступлениео факсахКак вы могли заметить, один из раз-делов меню AMP посвящен настройке приема факсов в Asterisk, однако в ста-тье об этой возможности не было ска-зано ни единого слова. Причиной тому является текущий уровень реализации поддержки работы с факсами в систе-мах IP-телефонии в целом и в Asterisk в частности. Давайте рассмотрим эту проблему более внимательно.

На самом верхнем уровне можно выделить два основных способа пере-дачи факсимильных сообщений в сис-темах IP-телефонии:! Поверх существующего голосово-

го кодека.! С использованием протокола T.38.

Первый способ фактически пред-ставляет собой обычный факс, под-ключенный к голосовому шлюзу, на-пример с интерфейсом FXS. При этом, если мы хотим передать факс, мы на-бираем нужный нам номер, пытаем-ся установить соединение с аппара-том на другой стороне и т. д. А теперь вопрос на засыпку: «Помните ли вы, как работает модем? А как он работа-ет на очень плохих или «старых» ли-ниях?» Факс, обработанный одним из голосовых кодеков с сильным сжати-ем (GSM, G723, G729), будет работать еще хуже, вернее, скорее всего он не будет работать вообще. С кодеками, не использующими сильное сжатие с потерями (в Asterisk это G711 в вариан-тах a-law и u-law), ситуация будет луч-ше. При этом качество передачи фак-сов во многом будет зависеть от ре-ального состояния IP-канала (потери, джиттер, задержка) между абонента-ми (ведь на самом деле мы переда-ем «голос», следовательно, исполь-

зуем протокол UDP, не предоставляю-щий гарантий доставки пакетов). Ес-ли вдобавок еще и взглянуть на пер-вую строчку таблицы в [8], то мы уви-дим, что при передаче факса через Интернет нам потребуется канал с ре-альной пропускной способностью око-ло 80 кБит, что, согласитесь, уже не-мало. По этим и другим причинам для передачи факсов через голосовые се-ти все чаще стараются использовать T.38. Данный протокол был разрабо-тан организацией ITU-T специально для передачи факсов в VoIP-сетях. Механизм работы устройств, подде-рживающих данный протокол, следу-ющий – при обнаружении голосовым шлюзом сигналов факса он пытается установить дополнительное соедине-ние с другим шлюзом (благо и H323 и SIP это позволяют), но уже с исполь-зованием T.38. Благодаря использова-нию помехоустойчивого кодирования, а также протокола с гарантией достав-ки – TCP с использованием T.38 мож-но получить практически идеальное качество передачи факсов. Правда, и для этой ложки меда имеется своя бочка дегтя – поддержка протокола T.38 в существующих на сегодняш-ний день устройствах все еще остав-ляет желать лучшего. Дело в том, что согласно стандартам, на данный мо-мент существует 3 (!) различных спо-соба передачи факсов с использова-нием T.38:! Поверх протокола UDP.! Поверх протокола TCP.! Передача в RTP-пакетах.

Первые два способа фактически представляют собой специализиро-ванные протоколы для передачи фак-сов (протоколы IFP/udptl и IFP/TCP со-ответственно), в то время как третий

больше похож на использование T.38 вместо обычного кодека (факсовые данные упаковываются в обычные RTP-пакеты). Проще говоря, подде-ржка в прокси-серверах первых двух протоколов требует дополнительных усилий от разработчиков, в то время как для третьего варианта достаточ-но поддержки в конечных устройствах. К тому же ситуация усугубляется тем, что зачастую производители голосово-го оборудования если и реализуют под-держку T.38 в своих устройствах, то ог-раничиваются лишь одним из вариан-тов реализации (чаще первым), со все-ми вытекающими отсюда несовмести-мостями и проблемами.

Что же касается Asterisk, то на дан-ный момент он абсолютно точно не поддерживает два первых варианта использования T.38 (заметьте, это вов-се не означает, что такая поддержка невозможна в принципе). С третьим способом ситуация комичнее – до на-стоящего времени ни одного устройс-тва, использующего T.38 поверх RTP, сообществом разработчиков Asterisk обнаружено не было, поэтому инфор-мации о его практической работоспо-собности нет. Таким образом, реаль-ная поддержка передачи факсимиль-ных сообщений в Asterisk на данный момент возможна только с использо-ванием кодека G711, причем наиболее предпочтительна следующая схема: входящий факс-сервер, работающий поверх G711 c использованием zaptel-устройств Asterisk.

В завершение упомянем и другой взгляд на эту проблему. А нужна ли во-обще передача факсов в VoIP-сетях? Если IP-инфраструктура уже сущес-твует, то не проще ли в данном слу-чае использовать что-то другое, на-пример e-mail?

Page 21: 033 Системный Администратор 08 2005

19№8, август 2005

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

AMP мини-FAQСтраница FOP «зависает» при открытии. В чем может

быть причина?

Убедитесь, что серверный perl-скрипт запущен.

При работе с веб-интерфейсом выдаются сообщения

об ошибках записи.

Возможно, установлены неверные права доступа к файлам конфигурации Asterisk. Для автоматического исправления запустите скрипт apply_conf.sh из дистрибутива AMP.

При работе с интерфейсом выдается сообщение об

ошибке соединения с manager.

Неверно сконфигурирован (или отключен) интерфейс уп-равления Asterisk. Проверьте содержимое файлов /etc/asterisk.manager.conf и /etc/amportal.conf.

К сожалению, текущая реализация совместной работы FOP и Asterisk не лишена недостатков. Так, в варианте «из короб-ки» FOP не видит стандартных конференций AMP. Для реше-ния этой проблемы воспользуемся нашими знаниями о струк-туре конфигурационных файлов. Первым делом в файле op_server.cfg в качестве контекста для конференций укажем ext-meetme, для параметра barge_roooms выберем одно из стан-дартных для AMP значений, например 8200, и опишем соот-ветствующие кнопки в файле op_buttons_custom.cfg согласно инструкции, приведенной выше для FOP. После этого переза-пустим perl-сервер, обновим страницу интерфейса клиента и порадуемся, увидев в нем кнопки, соответствующие MeetMe. Теперь с помощью веб-интерфейса мы можем «собирать» лю-дей в виртуальных «комнатах» для проведения совместных об-суждений (drag-and-drop на картинку конференции), а также подключаться к уже идущим разговорам. (правда, для неза-метной работы последнего, возможно, потребуется более тон-ко настроить работу модуля MeetMe). С отображением состоя-ния парковочных мест можно поступить аналогично.

ЗаключениеВ заключение давайте еще раз кратко рассмотрим сильные и слабые стороны AMP. Итак, преимущества:! Возможность редактирования параметров Asterisk че-

рез веб-интерфейс.! Возможность получения информации о совершенных

звонках.! Быстрое создание голосовых меню.! Возможности автосекретаря.! Использование «транков».! Определение правил маршрутизации .! Загрузка мелодий для «музыки при ожидании».! Определение групп вызова.

Но, как известно, у каждой медали есть и вторая сторо-на. У AMP она выглядит так:! Необходимость перезаписи конфигурационных фай-

лов.! Необходимость функционирования всех ключевых ком-

понент на одном компьютере (как следствие из преды-дущего).

! Возможные проблемы с масштабируемостью (как следс-твие из предыдущего).

! Отсутствие управления параметрами MeetMe через веб-интерфейс.

! Отсутствие встроенной системы безопасности.! Достаточно сложная структура номерного плана (осо-

бенно для начинающих пользователей).! Шероховатости в интеграции с FOP.! Отсутствие русского интерфейса меню.! Проблемы совместимости между номерным планом

и аппаратным голосовым оборудованием (некоторые шлюзы не могут корректно набирать символы «#,*» кото-рые очень активно используются в номерном плане).

При всем этом, несмотря на указанные недостатки, Asterisk Management Portal, безусловно, можно считать од-ним из лучших веб-интерфейсов для Asterisk. Проект очень активно развивается, и вполне возможно, что многие из пе-речисленных недочетов будут исправлены в следующей версии. При этом не стоит забывать, что AMP полностью открыт и вы сами можете принять непосредственное учас-тие в его дальнейшем развитии. Ну а если разработка веб-приложений вам не близка, а AMP вам просто понравился как пользователю, не забудьте сделать 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.

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.

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

zap-устройств, процесс внезапно завершается.

Проверьте, что модули ядра zaptel и wcfxo загружены и устройства проинициализировались без ошибок (lsmod, dmesg).

Или проверьте, что файл /etc/asterisk/zaptel.conf сущест-вует и в нем правильно заданы параметры устройств.

Не показываются (или показываются неверно) сообще-

ния голосовой почты через веб-интерфейс.

Убедитесь, что пользователь веб-сервера имеет доступ к файлам голосовой почты (/var/spool/asterisk/voicemail).

Добавил пользователей, но в FOP они не появились.

В чем может быть дело?

Необходимо перезапустить op_server.pl

Page 22: 033 Системный Администратор 08 2005

20

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

Недавно руководство поставило задачу – необходи-мо вести учет всех исходящих телефонных звон-ков. В офисе установлена УАТС LG GDK-162 емкос-

тью 48 внутренних номеров и 8 внешних линий. Различные программы тарификации имеются в избытке. Но ни одна меня не устроила. Большинство из них платные и написа-ны под Windows, из некоммерческих только SMDR 1.0 под-держивает LG GDK-162.

Для операционных систем Linux и FreeBSD существует очень интересный проект ATSlog: http://www.atslog.dp.ua. Вот описание с сайта программы: «ATSlog предоставляет удобный интерфейс с доступом через веб-браузер для про-смотра и анализа звонков различных моделей мини-АТС. Программа бесплатная, распространяется под лицензией GPL, имеет полностью открытый код. Программа успеш-но работает с моделями Panasonic KX-TA308, KX-TA308RU, KX-TA616RU, KX-TD816RU, KX-TD1232; Samsung SKP-816». К сожалению, не нашел в списке поддерживаемых АТС LG GDK. Для добавления поддержки нужной модели мож-но отослать автору образцы текстовых лог-файлов. Но это требует времени. Я решил попробовать справиться с зада-чей своими силами. Это оказалось несложным. Надеюсь, что мой опыт окажется вам полезен.

LG GDK-162, как и большинство офисных АТС, можно подключить к компьютеру через порт RS-232. Парамет-ры порта: 9600 бит/с, 8 бит данных, без контроля парите-та, 1 стоповый бит.

Я подключился к последовательному порту УАТС при по-мощи терминальной программы и стал анализировать счи-тываемые данные. Оказалось, что LG GDK-162 протоколи-рует свою работу в режиме реального времени, а записи об исходящих звонках выглядят следующим образом:

Рассмотрим её содержимое:! первое поле – порядковый номер записи;! второе – номер станции, с которой сделан вызов;! третье – номер внешней линии;! четвертое – длительность звонка (mm:ss);! пятое – дата;! шестое – время (hh:mm);! седьмое – вызванный номер с ведущим символом O.

Седьмое поле может кроме цифр содержать символы «#» и «*» – это происходит при звонках на голосовые шлюзы операторов IP-телефонии.

Таким образом, задача учета исходящих телефонных звонков свелась к написанию программы для считывания журнала работы УАТС через порт RS-232, обработки и со-хранения соответствующих записей. Можно приступать к реализации.

Исходные данные: учет будет осуществляться на маши-не Cel 1200/RAM 128 Мб/HDD 20 Гб, операционная систе-ма – Debian GNU/Linux 3.1r Sarg, СУБД – PostgreSQL v. 7.4.7, УАТС подключена к последовательному порту /dev/ttyS1.

Создадим пользователя, от которого будет работать программа и рабочий каталог. Кроме этого, изменим пра-ва доступа к /dev/ttyS1:

Сегодня мы займемся созданием системы учета исходящих телефонных звонков на примере

УАТС LG GDK-162. От вас требуется: навыки работы в UNIX-подобных операционных системах,

умение программировать на Perl и базовые знания в SQL.

СОЗДАЁМ СИСТЕМУ УЧЕТАИСХОДЯЩИХ ТЕЛЕФОННЫХ ЗВОНКОВ

ДЕНИС СОКОЛОВДЕНИС СОКОЛОВ

Таблица 1. Распайка кабеля (стандартный нуль-модем)

1035 144 06 00:11 21/08/2005 16:21 O1234567 **

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

Page 23: 033 Системный Администратор 08 2005

21№8, август 2005

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

Создадим пользователя и базу данных в PostgreSQL:

Создадим таблицу gdklog для хранения статистики. Таб-лица имеет пять полей:! d_time – дата и время;! station – станция;! line – внешняя линия;! t_call – продолжительность разговора;! c_number – вызванный номер (я выбрал для этого поля

тип numeric, т.е. номер телефона сохраняется, как чис-ло, при этом ведущие нули усекаются, например, номер 01 сохранится в БД как 1).

Писать программу учета я решил на perl. Полный текст вы можете скачать с сайта www.samag.ru, раздел «Исходный код». Для чтения данных из последовательного порта впол-не подойдут стандартные функции для работы с файлами. Естественно, порт необходимо предварительно настроить. Для этого я использовал вызов программы sty:

Функция parse_log – единственная в программе, специ-фичная для LG GDK-162.

Допустим, надо добавить поддержку АТС, пишущую протокол в формате:

Для этого достаточно будет дописать еще одну конструк-цию if в функцию parse_log (кроме этого, надо не забыть проверить параметры последовательного порта).

Постоянно держать открытым соединение с базой дан-ных – не очень хорошая идея. Поэтому все строки, соответс-твующие регулярному выражению «/O\d/g» (журнал исходя-щих вызовов), сначала заносятся в массив @log. Как только в нем накапливается $m_cache строк – вызывается проце-дура push_to_db, которая устанавливает соединение с ба-зой pbxbilling и записывает данные в таблицу gdklog:

Кроме этого, мне нужно было, чтобы программа могла работать в режиме демона:

# createuser -U postgres -A -D gdk# createdb -U postgres -O gdk pbxbilling

# vi gdklog.sql

CREATE TABLE gdklog ( "d _ time" timestamp, "station" int2, "line" int2, "t _ call" time, "c _ number" numeric (30, 0));REVOKE ALL on "gdklog" from PUBLIC;GRANT ALL on "gdklog" to "gdk";

# psql -U gdk -d pbxbilling < gdklog.sql

my $ttys = "/dev/ttyS1";

# Количество строк журнала, кэшируемых в памятиmy $m _ cache = 50;

system ("/bin/stty -F $ttys 9600 cs8 -parenb -cstopb");

# Читаем данные из последовательного портаopen (TTYS, "< $ttys") or die "Can�t open $ttys!";while (<TTYS>){ parse _ log;}

sub parse _ log{# Если массив log содержит m _ cache строк,# то заносим данные в БДif (@log >= $m _ cache){ push _ to _ db;} # Отбираем строки фиксирующие исходящие звонки if (/O\d+/) { # Удаляем символы *, #, O s/[\*,O,\#]+//g; # Сохраняем полученную строку в массив log push (@log, $ _ );

2005-08-21 16-21-00 06 1234567 00:00:11 144

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+{ push (@log, "00 $6 $3 $5 $1 $2 $4");}

# $d _ time // Дата и время# $station // Внутренний номер# $line // Внешняя линия# $t _ call // Продолжительность вызова# $date // Дата# $time // Время# $c _ number // Вызванный номерmy ($d _ time, $station, $line, $t _ call, $date, $time, $c _ number, @log);

# Параметры соединения с базой данныхmy $base = "pbxbilling";my $user = "gdk";my $pass = "";

sub push _ to _ db{ # Подготовка соединения my $dbh=DBI->connect("DBI:Pg:dbname=$base", "$user", "$pass", {PrintError => 0, RaiseError => 0} ) or return 2; # Подготовка запроса my $ins = $dbh->prepare(q{ INSERT INTO gdklog (d _ time , station, ↵ line, t _ call, c _ number) VALUES (?, ?, ?, ?, ?) }); # Перебираем в цикле все сохраненные строки foreach my $log (@log) { # Разбираем строку (undef, $station, $line, $t _ call, $date, ↵ $time, $c _ number) = ↵ split (/\s+/, $log); if (length ($t _ call) < 6) { $t _ call="00:$t _ call"; } $d _ time = "$date $time"; # Выполняем INSERT $ins->execute($d _ time, $station, $line, ↵ $t _ call, $c _ number) or return 2; } # Очистим массив undef (@log); $dbh->disconnect(); return 0;}

# sudo passwd gdk# sudo mkdir /var/gdklog# sudo chown gdk:gdk /var/gdklog# sudo chown root:gdk /dev/ttyS1# sudo chmod 640 /dev/ttyS1

}print;}

Page 24: 033 Системный Администратор 08 2005

22

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

Чтобы обеспечить целостность данных, я установил об-работчики сигналов INT и TERM. Получая один из них, про-грамма будет пытаться немедленно записать данные в базу, если это окончится неудачей (например, сервер БД отклю-чен), то выполнится процедура dump_to_file, которая прос-то запишет содержимое @log в текстовый файл. После это-го работа программы будет завершена. Второй обработчик добавляет возможность записи данных в базу по сигналу HUP без выхода из программы.

Меняем владельца и права доступа:

Напишем стартовый сценарий:

Запустим:

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

Если все сделано правильно, то через некоторое время таблица gdklog начнет заполняться записями.

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

Успехов!

$SIG{INT} = $SIG{TERM} = sub { dump _ to _ Þle if ↵ push _ to _ db; exit };$SIG{HUP} = sub { dump _ to _ Þle if push _ to _ db };

# sudo chown root:gdk /usr/local/sbin/gdklogd# sudo chmod 750 /usr/local/sbin/gdklogd

# vi /etc/init.d/gdklogd

#!/bin/sh

DAEMON=/usr/local/sbin/gdklogdDAEMONFLAGS="-D"KILL=/bin/killPID=/var/gdklog/gdklogd.pidCAT=/bin/catSU=/bin/su

start (){ echo -n $"Starting $DAEMON: " # Запуск с правами непривилегированного пользователя $SU -c "$DAEMON $DAEMONFLAGS" gdk 2>/dev/null 1>&2}

stop (){ echo -n $"Stopping $DAEMON: " $KILL `$CAT $PID 2>/dev/null 1>&2}

case "$1" instart) start ;;stop) stop ;;restart) stop start ;;*) echo $"Usage: $0 {start|stop|restart}" exit 1esac

# sudo chown root:root /etc/init.d/gdklogd# sudo chmod 700 /etc/init.d/gdklogd

# sudo /etc/init.d/gdklogd start

# 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 запись)

Рисунок 1. Схема учета исходящих телефонных звонков

# В режиме демона в этот файл перенаправляем все # сообщения об ошибкахmy $err _ Þle = "/var/gdklog/gdklogd.err";# PID-файлmy $pid _ Þle = "/var/gdklog/gdklogd.pid";

sub begin _ daemon{ # Делаем fork my $pid = fork; exit if $pid; die "Couldn�t fork: $!" unless deÞned($pid); # Сохраняем PID в файл open (F _ PID, ">$pid _ Þle") or die "Can�t open ↵ $pid _ Þle: $!"; print F _ PID "$$\n"; close F _ PID; # Перенаправляем вывод STDERR в файл open (*STDERR, ">> $err _ Þle") or die "Can�t ↵ reopen *STDERR to $err _ Þle: $!"; # Перенаправляем STDIN и STDOUT в /dev/null for my $handle (*STDIN, *STDOUT) { open ($handle, "> /dev/null") or die ↵"Can�t reopen $handle to /dev/null: $!"; } # Установка sid процесса POSIX::setsid() or die "Can�t start a new session: $!";}

Page 25: 033 Системный Администратор 08 2005
Page 26: 033 Системный Администратор 08 2005

24

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

В одной из предыдущих статей [1] рассматривалась система защиты от нежелательной почты, – spamd, использующая блокировку входящих соединений на

основе «черных» списков. Такие способы эффективны для снижения входящего почтового трафика, однако не в состо-

янии защитить от писем, идущих с новых, еще не «засве-ченных», адресов. Кроме того, подобные фильтры, будучи запущенными на провайдерских серверах, могут стать ис-точниками конфликтов с пользователями, адресат которых случайно попал в тот или иной список.

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

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

не может брать на себя вынесение вердикта, что доставить абоненту, а что нет.

Система DSPAM позволяет переложить принятие такого решения на пользователя.

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

Page 27: 033 Системный Администратор 08 2005

25№8, август 2005

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

Сегодняшняя статья посвящена второму эшелону спам-обороны, который будем строить на базе DSPAM (разра-ботчик Jonathan Zdziarski, www.nuclearelephant.com). Дан-ная обучаемая статистическая система обрабатывает со-общения, благополучно прошедшие через MTA и направ-ляющиеся в ящик пользователя. Основным ее достоинс-твом является возможность персональной настройки для каждого пользователя.

Как происходит классификация писемВ основе работы системы DSPAM лежит несколько наибо-лее популярных алгоритмов статистического анализа, кото-рые, в свою очередь, опираются на теорему Байеса (Thomas Bayes). Формула Байеса позволяет рассчитать вероятность наступления некоторого события в зависимости от того, ка-кова была вероятность данного события в прошлом. Приме-нительно к спаму, упрощенно принцип работы байесового классификатора можно описать такой формулой:

где:! P – вероятность того, что сообщение окажется спа-

мом,! S – суммарный коэффициент «спамности» сообще-

ния,! G – суммарный коэффициент «неспамности» сообще-

ния.

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

Здесь p(w1) и другие – коэффициенты «спамности» отде-льных слов, входящих в анализируемое сообщение, получен-ные на основе ранее классифицированных писем. Так, если в прошлом 9 писем со словом «английский» было спамом и одно – не спамом, то p(‘английский’) = 9 / (9 + 1) = 0.9.

В качестве примера проанализируем такое короткое сообщение:

Пусть ранее указанные слова встречались в следую-щих письмах:

Таким образом, приведенный выше пример будет с ве-роятностью 82% нежелательным сообщением, в основном за счет высокой спамности слова «Купи».

В алгоритме, предложенном Полом Грэмом (Paul Graham), для расчета применяется приведенная выше ме-тодика с использованием следующих правил:! Для анализа сообщений используются не все слова, а

15 наиболее «интересных», для которых p(w) наиболее сильно отклоняется от нейтрального значения 0,5.

! Если ранее слово встречалось менее чем в пяти пись-мах, оно игнорируется.

! Новое слово, не встречавшееся ранее, получает стар-товую «спамность» 0,4 (своего рода презумпция неви-новности).

Алгоритм Бартона (Brian Burton) работает аналогич-но, но использует для анализа не 15, а 27 наиболее ярких слов, а также допускает «удвоенное» использование сло-ва, если оно встречается в сообщении несколько раз. Это несколько повышает эффективность при ограниченных данных. Кроме того, поддерживаются цепочки «токенов», когда два стоящих рядом слова рассматриваются вместе. Также некоторые отличия от подхода Грэма имеются в на-боре символов, которые считаются составной частью сло-ва (такие, как $, ! и т. д.).

Следующий популярный алгоритм, разработанный Гари Робинсоном (Gary Robinson), модернизирует формулу Грэ-ма таким образом, чтобы решить проблему недостаточных исторических данных:

где :! p(w) – вероятность для слова, рассчитанная на основе

исторических данных;! n(w) – количество ранее обработанных сообщений со

словом w.

Таким образом, если анализируемое слово ранее не встречалось, оно автоматически получит коэффициент 0,5, а по мере накопления статистики это значение будет выхо-дить на свой естественный уровень.

В дальнейшем в формулах (2) вместо величин p(w) ис-пользуется f(w).

Для анализа по алгоритму Робинсона используется вы-борка из 25 слов.

На базе алгоритма Робинсона был разработан улучшен-ный алгоритм Фишера-Робинсона, известный также как Chi-Square (переводить на русский язык не рискну). Помимо рас-чета «спамности» сообщения вычисляется также вероят-ность его «неспамности» по формуле Фишера, и в дальней-шем рассматривается интегральная вероятность.

В фильтре DSPAM реализована поддержка всех четырех описанных здесь алгоритмов. Причем анализу подвергается не только тело сообщения, но и заголовок. Разработчик не рекомендует совмещать фильтры Грэма и Бартона с филь-трами Робинсона во избежание ложных срабатываний.

Способы интеграции DSPAMс почтовой системойСистема DSPAM поддерживает два способа взаимодейс-твия с почтовым сервером. В первом случае он может быть

P= S / (S + G) (1)

S = p(w1)*p(w2)*�*p(wn) (2)G = (1 � p(w1))*(1 � p(w2))*�*(1 � p(wn))

Привет! Купи меня!

p('Привет') = 35 / (35 + 64) = 0,35p('Купи') = 187 / (187 + 19) = 0,91p('меня') = 9 / (9 + 11) = 0,45S= 0,35 * 0,91 * 0,45 = 0,14G= (1 � 0,35) * (1 � 0,91) * (1 � 0,45) = 0,03P= 0,14 / (0,14 + 0,03) = 0,82

f(w) = (0,5 + n(w) * p(w)) / (1 + n(w)) (3)

Page 28: 033 Системный Администратор 08 2005

26

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

настроен как локальный агент доставки (LDA – local delivery agent). При этом сообщения анализируются по пути от MTA к почтовому ящику. После обработки фильтром почта от-дается на обработку реальному LDA, который и заверша-ет доставку.

Второй способ – работа DSPAM в сотрудничестве с POP3-proxy. При этом спам отсеивается в то время, когда пользователь выкачивает корреспонденцию из своего поч-тового ящика по протоколу POP3.

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

Устанавливаем DSPAMиз коллекции портовДля конкретизации в данной статье будет рассматривать-ся работа DSPAM на системе со следующим версиями про-граммного обеспечения:! Операционная система: FreeBSD 5.4.! Веб-сервер: Apache 1.3.33 с включенной поддержкой

suexec.! Система управления базами данных: PostgreSQL 8.0.2.

Наиболее удобный способ инсталляции ПО в системе FreeBSD (естественно, на мой взгляд – навязываться нико-му не буду) – использование коллекции портов.

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

Конечно, вместо редактирования файла Makefile можно использовать ключи в командах make и make install, но их может оказаться слишком много, да и мне удобнее, чтобы информация о параметрах оставалась не только в истории командной оболочки. По большому счету, этот этап мож-но вообще опустить – настройки, используемые по умол-чанию, подходят в большинстве случаев, тонкую же под-стройку можно будет выполнить в дальнейшем путем ре-дактирования конфигурационного файла.

Я выполнил только одну правку (красным показана ис-ключенная строка, синим – добавленная):

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

это существенно упростит нам жизнь при настройке CGI-кли-ента. Сам же демон dspam будет работать с правами root, что определяется второй строкой приведенного выше фрагмента (см. следующий раздел про права доступа). Если вам удоб-нее работать с ключами команды make, то же самое можно сделать, задав ключ DSPAM_HOME_OWNER=dspam.

После ввода команды make вам будет предложено диа-логовое окно (рис. 1), в котором следует отметить необходи-мые опции. Обратите внимание на то, что должен быть отме-чен только один драйвер СУБД. Также отметьте опцию «Install CGI (pulls in apache)», если планируете использовать CGI-мо-дуль. Еще следует указать используемый вами MTA.

Некоторые другие полезные опции приведены ниже:! USER_HOMEDIR: использовать для хранения данных

пользователя его домашний каталог вместо директо-рии, определенной переменной DSPAM_HOME.

! TRUSTED_USERS: отключить (!) использование дове-ренных пользователей. Если данная опция будет отмече-на, все пользователи смогут управлять фильтром dspam (если, конечно, будут обладать достаточными правами для запуска соответствующих исполняемых файлов).

! LARGE_SCALE: опция полезна в системах с большим числом абонентов. При ее активации домашние катало-ги пользователей будут находиться не непосредствен-но в папке data каталога /var/db/dspam, а во вложенных подкаталогах по начальным буквам имени пользовате-ля. Например, каталог с данными пользователя gorod будет находиться по следующему пути: /var/db/dspam/data/g/o/gorod. Данная опция и USER_HOMEDIR взаи-моисключаемы.

! VIRT_USERS: этот ключ используется, если ваш почто-вый сервер работает с виртуальными пользователями. При этом дополнительно будет создана таблица иден-тификаторов пользователей (по умолчанию dspam в процессе работы руководствуется данными реальных пользователей из /etc/passwd).

После сборки (необходимые зависимости, такие как библиотека GD, будут удовлетворены автоматически) пе-реходим к конфигурации.

Несколько слов о правах доступаДля нормальной работы DSPAM большое значение играют правильно установленные права доступа, особенно если используется CGI-модуль. Как было показано выше, в про-

Рисунок 1. Конфигурационный диалог

# cd /usr/ports/mail/dspam# vi MakeÞle# make# make install

DSPAM _ MODE?= 4510DSPAM _ OWNER?= rootDSPAM _ GROUP?= mail

DSPAM _ HOME?= ${ _ VAR _ DIR}/db/dspam#DSPAM _ HOME _ OWNER?= ${DSPAM _ OWNER}DSPAM _ HOME _ OWNER?= dspamDSPAM _ HOME _ GROUP?= ${DSPAM _ GROUP}DSPAM _ HOME _ MODE?=

Page 29: 033 Системный Администратор 08 2005

27№8, август 2005

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

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

Во-первых, при работе в режиме LDA dspam должен быть способен вызывать агент доставки и передавать ему необ-ходимые для дальнейшей работы права. А чтобы положить почту в ящик пользователя при стандартных настройках, эти права должны соответствовать пользователю root.

Во-вторых, dspam должен иметь достаточно прав, что-бы создать pid-файл при запуске в режиме демона, а так-же быть способным создать сокет на привилегированном порту 24 (LMTP), что опять-таки требует прав суперполь-зователя.

Так, у меня попытка запустить dspam в режиме демона после сборки с пользователем dspam, указанным как вла-делец, завершилась такими ошибками:

Учитывая вышеизложенное, я решил оставить владель-цем dspam пользователя root, как это определено по умол-чанию. Хотя при наличии огромного желания и крепких не-рвов можно добиться работы и от имени непривилегиро-ванного пользователя.

Основные настройки в dspam.confПеред первым запуском необходимо переименовать файл /usr/local/etc/dspam.conf.sample в dspam.conf и произвести в нем нужные изменения. Прежде всего введите правиль-ные настройки для взаимодействия с СУБД. DSPAM уме-ет использовать для хранения рабочей информации такие СУБД, как MySQL, PostgreSQL, SQLite, Oracle. Для слабо нагруженных систем можно использовать DB3 или DB4, но разработчики это не рекомендуют. Например, мои значения для PostgreSQL выглядят следующим образом:

Для других СУБД будут свои настройки, раскоммен-тируйте соответствующие шаблоны и заполните нужные строки. Дополнительно потребуется выполнить ряд дейс-твий для создания необходимых таблиц, смотрите следу-ющий раздел.

Потребуется также указать правильный LDA (если вы планируете использовать подключение dspam в качестве агента доставки). Просто снимите комментарий с той стро-ки, которая подходит для вашей системы:

Далее, в строках Trust перечислены пользователи, ко-торым будет позволено управлять работой dspam. Допи-шите туда пользователя, от имени которого работает поч-товый сервер, и пользователя dspam (если вы его добав-ляли), а заодно удалите лишних:

Режим обучения (TrainingMode), используемые алго-ритмы и т. д. можно оставить по умолчанию. Если же вам захочется поэкспериментировать или работа с текущими настройками будет показывать неудовлетворительные ре-зультаты, в файле /usr/local/share/doc/dspam/README мож-но найти достаточно подробное описание доступных ре-жимов (см. также раздел «Обучаем фильтр» далее в этой статье).

Среди параметров Feature отметим два следующих:

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

Второй строкой включается режим автоматического за-несения отправителя в «белый» список – если число писем с одного и того же адреса превысит некоторое значение и ни одно из них не будет признано спамом, их отправитель заносится в «белый» список, и в дальнейшем сообщения от него не будут анализироваться.

Группы строк Preference задают параметры по умол-чанию:

Группа AllowOverride позволяет указать, какие из пара-метров могут быть переопределены личными настройками пользователя (для примера показаны лишь две строки):

Остальные параметры пока оставим без внимания. Те из них, которые важны для выбора желаемого режима ра-боты, будут рассмотрены ниже, в соответствующих разде-лах. С остальными, вроде «SystemLog», думаю, вы без тру-

# /usr/local/etc/rc.d/dspam.sh start

PgSQLServer 127.0.0.1PgSQLPort 5432PgSQLUser dspamPgSQLPass wj30sh3hs32PgSQLDb dspam

# Most operating system defaults:#TrustedDeliveryAgent "/usr/bin/procmail" # Linux#TrustedDeliveryAgent "/usr/bin/mail" # SolarisTrustedDeliveryAgent "/usr/libexec/mail.local" # FreeBSD

Trust root#Trust mail#Trust mailnullTrust smmsp # на моей системе от имени этого # пользователя работает sendmailTrust daemonTrust dspam

FeaturechainedFeaturewhitelist

# 'quarantine' or 'tag'Preference "spamAction=quarantine"# 'message' or 'headers'Preference "signatureLocation=message"Preference "showFactors=off"Preference "spamSubject=SPAM"

AllowOverridetrainingModeAllowOverride whitelistThreshold

Starting dspam.486: [7/26/2005 9:10:17] Daemon process starting486: [7/26/2005 9:10:18] Unable to open file for writing: /var/run/dspam.pid: Permission denied486: [7/26/2005 9:10:18] Could not bind to :24 (Permission denied)486: [7/26/2005 9:10:18] daemon_listen() failed486: [7/26/2005 9:10:18] Daemon process exiting

#TrustedDeliveryAgent "/usr/bin/procmail" # Cygwin## Other popular conÞgurations:#TrustedDeliveryAgent "/usr/cyrus/bin/deliver" # Cyrus#TrustedDeliveryAgent "/bin/maildrop" # Maildrop#TrustedDeliveryAgent "/usr/local/sbin/exim ↵ -oMr spam-scanned" # Exim

Page 30: 033 Системный Администратор 08 2005

28

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

да разберетесь самостоятельно – файл достаточно хоро-шо прокомментирован.

Настраиваем СУБД для работы с DSPAMПримеры настройки взаимодействия с конкретной СУБД можно найти в соответствующих README-файлах. В дан-ной статье рассмотрим работу с PostgreSQL.

В /usr/local/share/examples/dspam/pgsql располагаются sql-файлы, содержащие необходимые для работы коман-ды. Сейчас нас интересует файл pgsql_objects.sql, кото-рый поможет создать все нужные таблицы, индексы и т. д. Но базу данных и пользователя придется создать самосто-ятельно (хотя вы можете использовать и уже существую-щие). Последовательность нужных шагов представлена на следующем листинге:

Здесь мы создали пользователя dspam и одноименную базу данных (должны соответствовать настройкам в dspam.conf). Затем выполнили команды из внешнего файла. Те-перь осталось убедиться, что в файле pg_hga.conf содер-жатся разрешающие строки для локальных подключений к этой базе от имени соответствующего пользователя, на-пример такие:

Все. База данных к работе готова.

Настраиваем DSPAM для работыкак LDAВ этом режиме почтовый сервер (MTA) конфигурируется та-ким образом, чтобы в качестве локального агента достав-ки выступал dspam. Способы «прикручивания» DSPAM к конкретному 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

Например, для sendmail следует указать в mc-файле следующие строки:

Они должны быть добавлены до строки «MAILER(local)». Здесь объявляется путь до агента доставки и его парамет-ры запуска. Параметр --deliver указывает, что должны до-ставляться как «хорошие» письма (innocent), так и спам (spam). Чтобы на реальный LDA письма, признанные спа-мом, не передавались, удалите соответствующее упоми-нание из строки параметров.

После компиляции нового конфигурационного файла и перезапуска почтового сервера все входящие сообщения будут поступать на вход dspam. Далее в зависимости от на-строек и результата анализа полученные сообщения будут либо передаваться на реальный LDA для доставки в ящик пользователя, либо помещаться в карантин.

Настраиваем DSPAM в режимеPOP3-proxyОдно из основных преимуществ работы в таком режиме за-ключается в независимости от конкретного MTA. Более то-го, почтовый сервер может вообще не располагаться на ва-шей машине. Например, ящики пользователей могут быть размещены на сервере провайдера, и если настроить полу-чение почты через POP3-proxy, то защиту от спама вы мо-жете реализовать на своем шлюзе без каких-либо измене-ний со стороны провайдера. Скачиваем последний архив с pop3filter.sourceforge.net (в портах он отсутствует):

Вот здесь поджидала еще одна неприятность (вторая после отсутствия приложения в коллекции портов) – сбор-ка окончилась ошибкой:

deÞne('LOCAL _ MAILER _ PATH', /usr/local/bin/dspam')dnldeÞne('LOCAL _ MAILER _ ARGS', ↵ `dspam "--deliver=innocent,spam" --user $u -d %u')dnl

# tar �xvzf pop3Þlter-0.5.5.tar.gz# cd pop3Þlter-0.5.5#./conÞgure# make

# cd /usr/local/share/examples/dspam/pgsql# psql -U pgsql template1

Добро пожаловать в psql 8.0.2 - Интерактивный Терминал PostgreSQL.

Наберите: \copyright для условий распространения \h для подсказки по SQL командам \? для подсказки по командам psql \g или наберите ";" для завершения запроса и его выполнения \q для выхода

template1=# create user dspam nocreatedb nocreateuser password 'wj30sh3hs32';CREATE USERtemplate1=# create database dspam owner dspam;CREATE DATABASEtemplate1=# \c dspam dspamВы подсоединились к базе данных "dspam" как пользователь "dspam".dspam=> \! lspgsql_objects.sql purge.sql virtual_users.sqldspam=> \i pgsql_objects.sqlpsql:pgsql_objects.sql:10: NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "dspam_token_data_token_key" для таблицы "dspam_token_data"CREATE TABLECREATE INDEXCREATE INDEXCREATE INDEXCREATE INDEXpsql:pgsql_objects.sql:24: NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "dspam_signature_data_signature_key" для таблицы "dspam_signature_data"CREATE TABLEpsql:pgsql_objects.sql:36: NOTICE: CREATE TABLE / PRIMARY KEY создаст подразумеваемый индекс "dspam_stats_pkey" для таблицы "dspam_stats"CREATE TABLEpsql:pgsql_objects.sql:44: NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "dspam_neural_data_node_key" для таблицы "dspam_neural_data"CREATE TABLECREATE INDEXpsql:pgsql_objects.sql:55: NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "dspam_neural_decisions_signature_key" для таблицы "dspam_neural_decisions"CREATE TABLEpsql:pgsql_objects.sql:62: NOTICE: CREATE TABLE / UNIQUE создаст подразумеваемый индекс "dspam_preferences_preference_key" для таблицы "dspam_preferences"CREATE TABLEdspam=>

# TYPE DATABASE USER CIDR-ADDRESS METHOD

# "local" is for Unix domain socket connections onlylocal all all trust

# IPv4 local connections:host all all 127.0.0.1/32 trust

if gcc -DHAVE_CONFIG_H -I. -I. -I.. -pedantic -Wall -pedantic-errors -MT newopt.o -MD -MP -MF ".deps/newopt.Tpo" -c -o newopt.o `test -f 'newopt.c' || echo './'`newopt.c;

Page 31: 033 Системный Администратор 08 2005

29№8, август 2005

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

Поверхностный анализ исходного кода показал, что про-блемные строки (464 в файле newopt.c и еще несколько в main.c) используются только для обеспечения работы клю-чей --help и --version. Поскольку данными функциями впол-не можно пренебречь, было принято решение о небольшом хирургическом вмешательстве в указанные два файла (по-казаны различия в исходном и полученном файлах):

То есть были удалены или закомментированы строки, в которых упоминается OPT_T_FUNC, и соответственно ис-правлены индексы массива, используемые в дальнейшем. После этой «операции» сборка прошла успешно, а вслед за ней и установка:

Запуск pop3filter можно выполнить такой командой:

В данном случае входящие соединения будут ожидать-ся на порту 7110 и передаваться на 110-й порт localhost. По-лученные от реального pop3-сервера сообщения будут от-даваться на обработку фильтру dspam, после чего переда-ваться пользователю в зависимости от настроек и резуль-тата классификации. Правда, должен признаться, что до-биться устойчивой работы в этом режиме мне не удалось. Довольно часто после обработки одного – двух сообщений что-то где-то подвисало, и почтовый клиент при попытке ска-чать очередную порцию почты «отваливался» по истечении тайм-аута. Возможно, кому-то из вас повезет больше.

Запуск DSPAM в режиме демонаПо умолчанию dspam запускается как автономная програм-ма. Однако при интенсивной нагрузке в этом случае тратит-ся много ресурсов на такие операции, как установка соеди-нения с СУБД. Более эффективным выглядит запуск в ре-жиме демона, когда серверный процесс dspam находится в памяти, поддерживая несколько постоянных соединений с СУБД. Для обработки же пользовательских соединений dspam запускается как клиент, общающийся с сервером ли-бо по протоколу LMTP, либо через UNIX-socket.

Для работы в режиме демона нужно настроить парамет-ры сервера и клиента в конфигурационном файле. Возмож-ны два режима работы – через локальные сокеты UNIX либо по протоколу LMTP (используется 24-й TCP-порт). Для пер-вого случая внесите в конфигурацию следующие строки:

Естественно, пути к сокету для клиента и сервера должны совпадать. Если вы собираетесь использовать LMTP (напри-мер, когда клиент и сервер находятся на разных машинах), то раскомментируйте и настройте следующие параметры:

Строки Server* должны присутствовать в конфигураци-онном файле сервера, Client* – соответственно клиента. Заметьте, что если хотя бы одна строка ServerPass.RelayX будет раскомментирована, то dspam запустится для рабо-ты по 24-му порту, даже если присутствуют строки, зада-ющие UNIX-сокеты.

Далее установите в файле /etc/rc.conf переменную dspam_enable в «YES», что обеспечит автоматический запуск де-мона с помощью сценария /usr/local/etc/rc.d/dspam.sh. Этот скрипт добавляется автоматически при установке из пор-тов, вам останется лишь проконтролировать его наличие и «исполняемость».

serg$ diff src/main.c.old src/main.c117,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, ↵ OPT _ T _ FUNCT, (void *) version},< /*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 },< /*07*/ {"listen", OPT _ NORMAL, 0, ↵ OPT _ T _ GENER, NULL },< /*08*/ {"user", OPT _ NORMAL, 0, ↵ OPT _ T _ GENER, NULL },< /*09*/ {"group", OPT _ NORMAL, 0, ↵ OPT _ T _ GENER, NULL },---> {> /*04-0*/ {"fork", OPT _ NORMAL, 0, ↵ OPT _ T _ FLAG, NULL },> /*05-1*/ {"f", OPT _ NORMAL, 1, ↵ OPT _ T _ FLAG, NULL },> /*06-2*/ {"e", OPT _ NORMAL, 1, ↵ OPT _ T _ GENER, NULL },> /*07-3*/ {"listen", OPT _ NORMAL, 0, ↵ OPT _ T _ GENER, NULL },> /*08-4*/ {"user", OPT _ NORMAL, 0, ↵ OPT _ T _ GENER, NULL },> /*09-5*/ {"group", OPT _ NORMAL, 0, ↵ OPT _ T _ GENER, NULL },128,132c125,129< }; 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);---> }; lopt[0].data = lopt[1].data = ↵ (void *) &(opt->fork);> lopt[2].data = (void *) &(opt->fstderr);> lopt[3].data = &(opt->listen _ addr);> lopt[4].data = &(opt->username);> lopt[5].data = &(opt->groupname);

serg$ diff lib/newopt.c.old lib/newopt.c463,465c463,465< case OPT _ T _ FUNCT:< (*(callbackT)table->data);< break;---> /* case OPT _ T _ FUNCT:> (*table->data);

# make install

# pop3Þlter --fork 127.0.0.1 110 7110 ↵ "dspam --user \$pop3 _ USERNAME ↵ --stdout --deliver=innocement,spam "

ServerDomainSocketPath "/var/run/dspam.sock"ClientHost "/var/run/dspam.sock"

#ServerPort 24#ServerPass.Relay1 "secret"#ServerPass.Relay2 "password"#ClientHost 127.0.0.1#ClientPort 24#ClientIdent "secret@Relay1"

then mv -f ".deps/newopt.Tpo" ".deps/newopt.Po"; else rm -f ".deps/newopt.Tpo"; exit 1; finewopt.c: In function `process':newopt.c:464: error: ISO C forbids conversion of object pointer to function pointer typenewopt.c: At top level:newopt.c:146: warning: 'clone_argv' defined but not used*** Error code 1

Page 32: 033 Системный Администратор 08 2005

30

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

Теперь, чтобы сервером электронной почты или pop3-фильтром программа dspam запускалась как клиент, ука-жите в соответствующих строках вызова дополнитель-ный ключ --client либо используйте вместо dspam бинар-ник dspamc, специально предназначенный для работы в режиме клиента.

Если теперь выполнить следующую команду, то можно наблюдать основной процесс dspam и несколько процес-сов для связи с базой данных (рекомендуется использо-вать MySQL или PostgreSQL):

В результате, благодаря постоянным подключениям к СУБД, нагрузка на систему несколько снижается.

Подключаем CGI-модульЭтот модуль позволяет пользователям работать со свои-ми настройками, получать статистические данные о рабо-те фильтра, а также просматривать сообщения, помещен-ные в карантин, и при необходимости инициировать пере-обучение. В процессе инсталляции необходимые для рабо-ты модуля файлы будут помещены в /usr/local/www/vhosts/dspam. Поскольку пользователь, от имени которого будут исполняться данные cgi-скрипты, должен иметь доступ и к иерархии файлов в /var/db/dspam, нужно либо дать со-ответствующие разрешения на домашний каталог dspam, либо запускать веб-сервер от имени пользователя, имею-щего необходимые привилегии.

Наиболее удобным мне показалось запустить для орга-низации веб-интерфейса отдельный виртуальный хост от имени пользователя dspam. Для этого Apache должен быть собран с поддержкой suexec. Проверить выполнение дан-ного требования можно таким образом:

В дальнейшем конфигурируем Apache следующим об-разом (естественно, далеко не единственным):

Домашним каталогом виртуального хоста оставляем /usr/local/www/vhosts/dspam, при этом suexec должен быть собран таким образом, чтобы директория dspam находилась внут-ри директории, определенной как suexec_docroot (задается при компиляции Apache с помощью переменной APACHE_SUEXEC_DOCROOT либо правкой Makefile).

Далее, для работы suexec требуется, чтобы права на ка-талог dspam и размещенные в нем скрипты принадлежали пользователю и группе dspam, от имени которого будет ра-ботать наш виртуальный хост. Именно несоответствие прав является наиболее частой причиной ошибок при работе с suexec (которые можно будет найти в файле /var/log/httpd-suexec.log, если вы не меняли соответствующий параметр при компиляции).

Помимо прав на CGI-сценарии, должны быть доступны и файлы, размещаемые в домашнем каталоге dspam (по умолчанию /var/db/dspam). Именно для этой цели пользова-тель dspam и был объявлен владельцем домашнего ката-лога. Если что-то не будет работать через веб-интерфейс, в первую очередь следует проверять именно наличие необ-ходимых прав на файлах «проблемного» пользователя.

Обратите внимание, что CGI-модуль не может быть использован, если данные пользователей хранятся в их домашних каталогах (был установлен параметр USER_HOMEDIR). Конечно, запустив виртуальный хост с права-ми суперпользователя, можно разом решить все возмож-ные проблемы доступа, но вряд ли в здравом уме можно пойти на подобный шаг.

Использование веб-интерфейса позволяет существенно упростить настройку параметров работы фильтра. Кроме того, поскольку каждый пользователь может самостоятель-но осуществлять большинство контрольно-управляющих действий, то в итоге нагрузка на администратора сущест-венно снижается (правда, повышается нагрузка на сервер, особенно при интенсивном использовании графиков).

Для доступа к веб-интерфейсу пользователь должен пройти аутентификацию (используется Basic-аутентифи-кация, по умолчанию проверка выполняется в файле паро-лей /usr/local/etc/apache/passwd, но вы можете перенастро-ить это в файле .htaccess). В зависимости от введенного имени (используется переменная $REMOTE_USER) стано-вится доступным интерфейс пользователя или админист-ратора. Роль администратора может выполнять любой ау-тентифицированный пользователь, имя которого присутс-твует в файле admins (здесь и далее речь идет о файлах, расположенных в каталоге виртуального хоста, в моем слу-чае это /usr/local/www/vhosts/dspam).

Веб-интерфейс сценариев англоязычный, но, прило-жив минимум усилий, его несложно перевести на русский язык, заодно добавив некоторые пояснения от себя в це-лях сокращения числа вопросов. На сайте журнала в раз-деле «Исходный код» можно будет найти архив с моим пе-реводом.

Пользователь может просматривать только свою статис-тику (рис. 2), выполнять некоторые настройки, если в кон-фигурационном файле не запрещено их переопределять (рис. 3), работать с историей сообщений (рис. 4), просмат-ривать сообщения, помещенные в карантин (рис. 5), в час-тности, инициировать переобучение в случае ошибки. Так-

# ps -ax |grep dspam

4843 ?? I 0:00,03 postmaster: dspam dspam 127.0.0.1(63076) idle (postgr4844 ?? I 0:00,12 postmaster: dspam dspam 127.0.0.1(58646) idle (postgr4845 ?? I 0:00,03 postmaster: dspam dspam 127.0.0.1(54366) idle (postgr4842 p0 S 0:00,25 /usr/local/bin/dspam -daemon

# /usr/local/sbin/httpd -l

... mod_setenvif.c mod_ssl.csuexec: enabled; valid wrapper /usr/local/sbin/suexec

NameVirtualHost 10.10.10.80<VirtualHost 10.10.10.80> ServerName dspam.test.ru 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 AddHandler perl-script .cgi PerlHandler Apache::Registry </IfModule> </Directory></VirtualHost>

Page 33: 033 Системный Администратор 08 2005

31№8, август 2005

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

же можно полюбоваться графическим отображением ста-тистики за последний период времени (рис. 6), наглядно демонстрирующим эффективность работы фильтра.

Администратор, кроме того что может работать в ин-терфейсе любого пользователя, имеет доступ также к об-щим настройкам, которые применяются, если пользователь не определит собственные. Кроме того, ему предоставля-ется графическая статистика работы фильтра в целом по серверу (рис. 7).

Поскольку по умолчанию доступ возможен ко всем фай-лам, расположенным в каталоге виртуального хоста (на-пример, можно получить содержимое файла admins), име-ет смысл несколько ужесточить требования, внеся допол-нительные настройки в .htaccess. Естественно, чтобы они имели силу, конфигурация Apache должна позволять пере-определение базовых настроек; также можно указать эти строки непосредственно в httpd.conf в секции VirtualHost:

Для еще большей безопасности вместо «allow from all» для соответствующих расширений можно задать ограни-ченный список разрешенных адресов.

Обучаем фильтрПроцесс обучения играет чрезвычайно важную роль для правильной работы фильтра. Чтобы dspam знал, какие письма являются спамом, требуется дать ему на обработ-ку примеры подобных сообщений, а также образцы нор-мальных писем. Если у вас есть архив спамерских писем (допустим, вы сбрасываете такие сообщения в отдельную папку), то эти сообщения могут быть переданы для обуче-ния, используя следующую команду:# cat /usr/local/www/vhosts/dspam/.htaccess

AuthName dspam.test.ru AuthType BasicAuthUserFile /usr/local/etc/apache/passwd<Limit GET POST> require valid-user

# dspam _ corpus --addspam sergei ↵ /var/db/dspam/data/gorod/gorod.mboxcommand: '/usr/local/bin/dspam' --class=spam ↵

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

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

</Limit><FilesMatch "(cgi|css|gif|html)$"> order deny,allow allow from all</FilesMatch>order deny,allowdeny from all

Page 34: 033 Системный Администратор 08 2005

32

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

В данном примере я обучил фильтр для sergei на основе спама, собранного в карантине пользователя gorod. Обу-чение «хорошими» сообщениями выполняется аналогично, но без ключа -addspam. Для получения адекватных резуль-татов при обучении необходимо соблюдать баланс между «хорошими» сообщениями и спамом, в идеале их количес-тво должно быть (примерно) одинаково. Также по умолча-нию dspam настраивается на постоянное обучение в про-цессе работы (режим TEFT). То есть им обрабатываются все входящие сообщения, и значения спамности для каж-дого встречающегося в них слова пересчитываются в БД. Это увеличивает нагрузку на систему, но позволяет быстро реагировать на изменение характера рассылок.

Если режим TEFT для вас не приемлем из-за слиш-ком высокой нагрузки, можно использовать другие (па-раметр TrainingMode конфигурационного файла или ключ запуска):! TOE: обучение выполняется только в том случае, если

фильтр допускает ошибку.! TUM: фильтр обучается на каждом сообщении, пока не

будет достигнуто определенное число повторений то-кена, затем переходит в режим обучения по ошибке.

! NOTRAIN: обучение не проводится.

Возникает вопрос: а как фильтр узнает, что он ошиб-ся? Конечно, об этом ему должен сообщить пользователь. Для обратной связи предусмотрено два механизма – с по-мощью CGI-сценариев и путем пересылки сообщений на специальный адрес.

В первом случае пользователь имеет возможность в списке своей истории щелчком мыши инициировать пере-обучение для сообщений, которые, по его мнению, были об-работаны ошибочно (используя ссылки «Retrain as Spam» и «Retrain as Innocent» соответственно). Также переобуче-ние происходит, если пользователь возвращает сообще-ние из карантина.

Для реализации второго механизма обучения в файле

/etc/mail/aliases должны быть созданы псевдонимы следу-ющего вида:

Имя псевдонима в принципе может быть любым (роль играет значение ключа --user при вызове dspam), но реко-мендуется формировать его как spam-<имя_пользователя>. Теперь, если пользователь перенаправит спам, который попал в его ящик, на этот адрес будет инициировано пе-реобучение.

Нужно сказать, что каждое обработанное письмо помеча-ется сигнатурой вида «!DSPAM:42df44f092281550917839!», ко-торая обычно добавляется в тело сообщения. Когда письмо перенаправляется для исправления ошибки, dspam ищет в нем эту сигнатуру и «откатывает» те изменения в базе, ко-торые были сделаны во время первоначальной обработки этого сообщения.

Вспомогательная утилита dspam_genaliases автома-тически формирует список псевдонимов на основе фай-ла /etc/passwd.

Несколько слов о «вакцинации»Это хорошо, что пользователь может самостоятельно обу-чать фильтр. Благодаря этому число ложных срабатываний снижается до минимума. Но, с другой стороны, одно и то же сообщение, впервые попавшее в почтовый ящик, каж-дый пользователь должен обработать лично. Для преодо-ления этого неудобства DSPAM поддерживает так называ-емую «вакцинацию». Суть ее заключается в том, что в на-стройки почтового сервера добавляется еще один псевдо-ним (или несколько), которые перенаправляются на dspam в режиме прививки:

Далее этот псевдо-адрес можно «засветить» на различ-ных досках объявлений, форумах и т. д. с тем, чтобы он по-пал по возможности в большее число спамерских баз. Так же можно попросить своих друзей пересылать на этот ад-

inoc-gorod: "|/usr/local/bin/dspam --user gorod ↵ --class=spam --source=inoculation"

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

--source=corpus --user 'sergei' --mode=teft ↵ --feature=chained,noise/usr/local/bin/dspam _ corpus: 3 messages, ↵ 00:00:57 elapsed, 0.05 msgs./sec.

# DSPAM aliasesspam-gorod: "|/usr/local/bin/dspam --user gorod ↵ --class=spam --source=error"

Page 35: 033 Системный Администратор 08 2005

33№8, август 2005

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

рес спам, который получают они. В результате dspam смо-жет обработать большее число нежелательной почты и эф-фективнее реагировать, когда подобные письма будут пос-тупать на реальные ящики пользователей.

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

ГруппыЧтобы придать работе с пользователями большую гибкость, а также «обобществлять» информацию о спаме, накоплен-ную отдельными пользователями, в системе DSPAM имеет-ся поддержка групп. Также группы используются и для ре-ализации идеи «вакцинации».

Фильтром поддерживаются следующие типы групп:! Shared: пользователи, входящие в shared-группу, рабо-

тают каждый со своим карантином, но используют об-щую базу токенов. Для однотипных пользователей эф-фективность повышается за счет снижения размера ба-зы и ее более быстрой наполняемости. С другой сторо-ны, если характер корреспонденции отдельного поль-зователя отличается от среднего по группе, возраста-ет вероятность ложных срабатываний.

! Inoculation: включение пользователя в одну из таких групп позволяет ему получать информацию из «при-вивок», обработанных любым из членов группы. Та-ким образом, описанный в предыдущем разделе псев-до-адрес можно сопоставить с одним из пользовате-лей inoculation-группы, чтобы она оказывала влияние на всех остальных.

! Classification: члены такой группы практически незави-симы, но если у фильтра возникают сомнения при клас-сификации какого-то сообщения, то он сможет восполь-зоваться данными остальных членов группы для приня-тия окончательного решения.

! Global: такая группа позволяет создавать так называ-емых глобальных пользователей. Любой новый поль-зователь сможет использовать данные, размещенные в пространстве глобального пользователя, пока не на-копит достаточную для самостоятельной работы базу.

! Merged: пользователи, входящие в такую группу, полу-чают возможность добавлять в процессе анализа к сво-им данным информацию из пространства глобального пользователя (описанного в группе Global). При этом имя merged-группы должно совпадать с именем используе-мого глобального пользователя.

Для того чтобы включить пользователя в ту или иную группу, используется файл /var/db/dspam/group:

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

Вспомогательные утилитыВ состав пакета DSPAM входит ряд служебных утилит, на-значение которых – выполнение ряда сервисных функций:

! dspam_admin: данная утилита предназначена для уп-равления персональными настройками пользователей или общими настройками dspam. Синтаксис команды можно посмотреть, введя ее без аргументов:

Например, так можно отключить использование авто-матически заполняемого «белого» списка для пользова-теля gorod:

Файл с настройками будет размещаться в директории dspam в подкаталоге, соответствующем пользователю – /var/db/dspam/data/gorod, в СУБД либо в домашнем ката-логе пользователя. Это можно настроить в процессе инс-талляции фильтра (см. выше).! dspam_clean: выполняет очистку базы. В процессе ра-

боты база маркеров может достигать значительных раз-меров. Очистка служит для того, чтобы удалить беспо-лезные (или малополезные) записи. В частности, мо-гут быть удалены токены, коэффициент спамности ко-торых близок к 0,5, то есть нейтральные слова, а также устаревшие сигнатуры (которые фильтр хранит на слу-чай переобучения). Очистка служит не только для опти-мизации размера БД, но и для поддержания ее в акту-альном состоянии: удаление устаревших токенов поз-воляет более точно реагировать на изменение харак-тера рассылки.

Например, для удаления сигнатур старше 7 дней для всех пользователей служит команда:

Удаление всех (в том числе и самых последних) ней-тральных токенов из пространства пользователя gorod:

Подробности по использованию утилиты см. на страни-цах man dspam_cleanup.

Говоря об очистке базы, следует также упомянуть уда-ление малоэффективных и устаревших данных силами СУБД. Например, для PostgreSQL cоответствующий sql-файл можно найти в /usr/local/share/examples/dspam/pgsql под именем purge.sql.

Для регулярного автоматического запуска процедур очистки можно использовать crontab.! dspam_stats: выводит статистику работы dspam по всем

или указанным пользователям (количество спама, «хо-роших» писем, ошибок):

group1:shared:user1,user2,user3group2:inoculation:user4,user5,user6

# 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 _ admin change preference gorod enableWhitelist off

# dspam _ clean �s7

# dspam _ clean �p0 gorod

# dspam _ stats serg gorod alex

Page 36: 033 Системный Администратор 08 2005

34

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

С ключом -H утилита выдает более «читабельную» ин-формацию:

! dspam_corpus: данная утилита позволяет указать филь-тру файл в формате mbox, содержимое которого сле-дует «изучить». Будучи выполненной без дополнитель-ных аргументов, команда выведет на экран подсказку по синтаксису. Также имеется man-страница.

! dspam_genaliases: с помощью этой команды можно ав-томатически добавить в файл /etc/mail/aliases нужные псевдонимы, для генерации которых используется спи-сок пользователей из файла /etc/passwd.

! dspam_logrotate: лог-файлы имеют привычку разрас-таться до немыслимых размеров. С помощью этой ути-литы, помещенной в crontab, можно организовать пери-одическую очистку логов, скажем, таким образом (при-мер из README):

Преимущества этого способа перед другими способа-ми ротации (например, newsyslog) в том, что можно обра-ботать сразу все лог-файлы. В приведенном выше приме-ре с помощью find формируется список всех файлов с рас-ширением log, найденных в каталоге data и его подкатало-гах. Ключ -а задает возраст файлов в днях, которые долж-ны быть подвержены очистке.! dspam_merge: данная команда объединяет метадан-

ные нескольких пользователей, имена которых зада-ются как аргументы командной строки, и сохраняет их в пространство другого пользователя, заданного клю-чом –o. Частное применение утилиты – формирование «стартового» наполнения для вновь создаваемого поль-зователя на основе некоторого существующего, уже прошедшего «цикл обучения». Подробности см. в man dspam_merge.

! dspam_dump: выводит на экран токены и характеризу-ющие их значения для указанного пользователя:

Здесь в первом поле отображается токен в цифровой форме (см. dspam_crc в этом разделе) и далее: S – коли-чество спама, I – количество хороших писем, P – «коэффи-

циент спамности» (вероятность того, что следующее пись-мо с данным словом будет спамом), LH – время последнего появления данного слова во входящих сообщениях.

Вопреки своему названию, наводящему на мысль о ре-зервном копировании, dspam_dump используется только для анализа работы фильтра.! dspam_2sql: формирует SQL-команды, которые могут

быть использованы для заполнения таблиц данными практически в любой СУБД:

Может использоваться при переносе данных на дру-гую систему управления БД для резервного копирования (хотя и гораздо менее эффективного, чем силами самой СУБД) и т. д.! dspam_crc: эта служебная программа рассчитывает

цифровой «отпечаток» для того или иного слова (как оно будет храниться в базе):

Помимо удовлетворения любопытства, данная утилита может быть полезной, например, при автоматизированной обработке содержимого базы данных.

ИтогиСистема DSPAM, конечно, не уменьшает почтовый трафик (все сообщения принимаются полностью), но зато сущес-твенно упрощает жизнь конечному пользователю, выпол-няя за него работу по сортировке входящей корреспонден-ции на спам и легальную почту. Благодаря персонифици-рованному подходу к обучению пользователь практически не зависит от предпочтений системного администратора, обслуживающего систему, самостоятельно формируя пра-вила фильтрации. С другой стороны, DSPAM не относится к системам типа «поставил – и спи». Прежде чем будет за-метен положительный эффект от внедрения, как от адми-нистратора, так и от пользователей потребуется приложить немало усилий по обучению системы. Но, на мой взгляд, оно того стоит.

Дополнительная информация:1. Супрунов С. Запускаем spamd на FreeBSD. – Журнал

«Системный админстратор», №7, 2005 г. – 14-19 с.2. http://dspam.nuclearelephant.com – домашняя страница

проекта DSPAM.3. http://www.paulgraham.com/spam.html – «A Plan for Spam»

by Paul Graham.4. http://www.paulgraham.com/better.html – «Better Bayesian

Filtering» by Paul Graham.5. http://radio.weblogs.com/0101454/stories/2002/09/16/

spamDetection.html – «Spam Detection» by Gary Robinson.6. http://linuxjournal.com/article/6467 – «A Statistical Approach

to the Spam Problem» by Gary Robinson.

# dspam _ crc "viagra"

TOKEN: 'viagra' CRC: 6625426497525293056

serg TS: 0 TI: 12 SM: 0 IM: 0 SC: 0 IC: 0gorod TS: 1 TI: 44 SM: 11 IM: 0 SC: 0 IC: 0alex TS: 0 TI: 20 SM: 0 IM: 0 SC: 0 IC: 0

# dspam _ stats -H gorod

gorod: TS Total Spam: 1 TI Total Innocent: 44 SM Spam Misclassified: 11 IM Innocent Misclassified: 0 SC Spam Corpusfed: 0 IC Innocent Corpusfed: 0 TL Training Left: 2456 SR Spam Catch Rate: 8.33% IR Innocent Catch Rate: 100.00% OR Overall Rate/Accuracy: 80.36%

0 0 * * * dspam _ logrotate -a 30 /var/db/dspam/system.log ↵ `Þnd /var/db/dspam/data -name "*.log"

# dspam _ dump gorod

2382717757724374224 S: 00007 I: 00000 P: 0.9998 LH: Wed Jul 27 00:00:00 20052180264270330443047 S: 00004 I: 00000 P: 0.4000 LH: Mon Jul 25 00:00:00 20054180468462601491382 S: 00004 I: 00000 P: 0.4000 LH: Mon Jul 25 00:00:00 2005.. .. .. ..

# dspam _ 2sql

insert into dspam_token_data (uid, token, spam_hits, innocent_hits, last_hit)values(1002, "16628239873585525635", 0, 3, 1121889600);insert into dspam_token_data (uid, token, spam_hits, innocent_hits, last_hit)values(1002, "3386138115020307445", 0, 3, 1121889600);.. .. .. ..

Page 37: 033 Системный Администратор 08 2005
Page 38: 033 Системный Администратор 08 2005

36

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

Немного истории. Название этого лог-анализатора пошло от популярного продукта для Windows – Kerio WinRoute Pro, несмотря на то что сейчас данный про-

дукт распознает форматы логов почти всех популярных прокси- и почтовых серверов. Причина в том, что сначала WrSpy был написан его автором «исключительно для собс-твенной сети». Начало развития было положено около трех лет назад на одной из интернет-конференций, посвященной администрированию локальных сетей. Аркадий Патрушев – системный администратор и программист из Новосибирс-ка, известный в сети под псевдонимом Walker, на очеред-ной вопрос в стиле: «Как считать трафик?» – предложил всем желающим свою программу, честно предупредив, она что «жутко сырая» и была написана для себя.

Я также использовал встроенный прокси-сервер WinRoute 4 Pro, и поэтому попросил выслать и мне данный

анализатор. В процессе попыток внедрить данную систему у себя выявилось много неточностей и недоработок, которые автор программы оперативно устранял по нашим советам. В результате такой совместной работы продукт «отполиро-вали», добавили возможность анализа лог-файлов других популярных серверов, прибавив при этом целый букет но-вых функций. Программа абсолютно бесплатна, за это ог-ромная благодарность Аркадию Патрушеву.

Итак, начнем с традиционного описания возможностей.Программа предназначена для анализа логов и форми-

рования разнообразных отчетов как в автоматическом (па-кетном), так и в интерактивном режиме. Именно изначаль-ное наличие пакетного режима и, разумеется, бесплатность сделало программу столь привлекательной, вытеснив уже существовавшие на тот момент аналогичные Windows-сис-темы. Однажды настроив систему импорта и анализа логов

WWrrSSpypy – СЧИТАЕМ И КОНТРОЛИРУЕМ ТРАФИК – СЧИТАЕМ И КОНТРОЛИРУЕМ ТРАФИКПОЧТОВЫХПОЧТОВЫХ И И ПРОКСИ-ПРОКСИ-СЕРВЕРОВСЕРВЕРОВ

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

Различные решения этой задачи неоднократно описывались, но всегда приятнее выбирать

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

вы познакомитесь с WrSpy – продуктом, который я сам активно применяю уже несколько лет.

РОМАН МАРКОВРОМАН МАРКОВ

Page 39: 033 Системный Администратор 08 2005

37№8, август 2005

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

и прописав в планировщике задач автоматический запуск администратор получал систему класса «настроил и за-был». Помимо этого, автор использовал, казалось бы, прос-той, но остроумный способ блокировки доступа пользова-телей, превысивших персональный лимит. Автоматически корректируя необходимые настройки программы в реест-ре, WrSpy переносил пользователя в другую группу безо-пасности, не имеющую никаких прав. Позднее при развитии продукта этот же принцип лег в основу блокировки пользо-вателей в Squid-NT. Кстати, несмотря на то, что WrSpy ра-ботает под управлением ОС Windows, поддерживается ана-лиз лог-файлов популярных прокси- и почтовых серверов для UNIX-систем. В данный момент WrSpy и утилиты под-держивают анализ лог-файлов следующих систем.

Proxy-серверы: WinRoute 4 Pro, Kerio WinRoute Firewall 5, Kerio WinRoute Firewall 6, Kerio Network Monitor, BSB, UserGate, Squid NT, Squid OS/2, WinGate, ISA, ExtraSystems Proxy Server, WinProxy CZ, WinProxy, ISA2004.

Почтовые серверы: WinRoute, MDaemon, Kerio Mail Server, CommuniGate Pro, Postfix, SendMail, Weasel, WinProxy CZ и POPCon.

Помимо этого, на сайте программы имеется большое количество отдельных утилит.

Отдельные анализаторы для: MDaemon, Kerio Mail Server, Kerio Network Monitor, Serv-U, Apache, IIS.

Системные требованияРабота программы основана на анализе файлов форма-та plain-text, что накладывает определенные требования к производительности дисковой системы, процессорной мощности и количеству памяти. Однако никаких минималь-ных требований нет, поскольку работоспособной окажет-ся практически любая система. С другой стороны, для по-лучения определенной скорости обработки лучше все-та-ки обеспечить разумный минимум. Тут все зависит от раз-мера лог-файлов (соответственно – активности пользова-телей) и необходимой частоты обновления статистики. Ес-ли размер анализируемых файлов не превышает 10-100 Мб в месяц, а статистику достаточно обновлять один-два ра-за в сутки, когда отсутствует активность пользователей, – с поставленной задачей справится абсолютно любой ком-пьютер, на котором работают поддерживаемые програм-мные продукты.

При большом количестве пользователей, приросте раз-мера лог-файлов до 1-2 Гб в месяц, рекомендуется реже об-новлять статистику – 1-2 раза в сутки. При необходимости более частого переиндексирования размещайте лог-файлы и формируемые отчеты на быстрых дисках SATA или SCSI. Рекомендуется также озаботиться созданием ежедневных копий информации, находящейся на таком диске. Личный пример: для обновления статистики для 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.

При наличии неоспоримых достоинств этой програм-мы, таких как подробнейшие отчеты (вплоть до того, ка-кой именно файл скачал конкретный пользователь с оп-

ределенного ресурса), нельзя не заметить, что, пожалуй, единственным недостатком WrSpy является именно боль-шая нагрузка на дисковую систему. Однако глубокий ана-лиз plain-text файлов с накоплением статистики всегда под-разумевает это.

УстановкаРассмотрим пример настройки системы. Для написа-ния данной статьи я использовал связку Kerio WinRoute Firewall 6 и Alt-N Mdaemon 8, установленные на OS Windows Server 2003. Принцип настройки взаимодействия c други-ми поддерживаемыми ПП аналогичен. Если есть какие-ли-бо особенности (например, настройка блокировки пользо-вателей в Squid или Kerio WinRoute Pro 4), то они подробно описаны на официальном сайте WrSpy.

Скачиваем дистрибутив (WrSpySetup.rar) и последнее обновление (WrSpyUpXXX.rar – где XXX номер версии) с официального сайта программы (ссылки приведены в кон-це статьи). Распаковываем архивы, устанавливаем основ-ной дистрибутив.

Обратите внимание на предупреждение: «Будьте осо-бенно внимательны, если в системе уже установлен Visual FoxPro 6.0 (VFP6.0) или приложения, созданные с его ис-пользованием. Возможно нарушение их функционирова-ния». Если при запуске обнаружится сообщение: «Несов-падение версии файла ресурсов», то скорее всего в систе-ме установлен VFP6.0 или программа, из-под него писан-ная, с несовпадающей версией обновления. Чтобы обойти данную ошибку, необходимо использовать режим полной установки поверх существующей версии VFP.

Выполняем стандартные действия, отвечая на вопро-сы инсталлятора о варианте установки и местоположении файлов (рекомендуется устанавливать WrSpy на быстрые дисковые системы, как рекомендовалось выше). В конце установки отказываемся от запуска WrSpy (снимаем соот-ветствующий флажок). Вы можете прочитать файл Readme.txt (нажатием кнопки после завершения установки). В нем кратко описываются принципы настройки, которые я рас-смотрю более подробно. Сразу после установки основно-го дистрибутива обновляем его до последней версии, за-пустив файл обновления. Внимательно проверьте путь для установки, так как инсталлятор не проверяет, куда именно был установлен WrSpy. Это сделано не случайно, так как иногда требуется произвести несколько установок с раз-ными настройками на один компьютер (например, для ана-лиза архивных лог-файлов, не прерывая работу основной системы анализа). После установки обновления соглаша-емся с предложением инсталлятора запустить WrSpy (ли-бо запускаем вручную файл WrSpy.exe). Запустится интер-активная первоначальная настройка (рис. 1).

Выбираем используемые нами прокси- и почтовый сер-веры, задаем параметры сети (подсеть и маску). Созда-ем на диске папку для отчетов (именно в нее будут поме-щаться формируемые программой результаты) и указыва-ем путь к ней. Затем указываем пути к лог-файлам, а так-же почтовые домены. Если какой-то из лог-файлов (почто-вый или прокси) анализироваться не должен – оставляем соответствующее поле пустым. Переходим к следующему экрану настроек (рис. 2).

Page 40: 033 Системный Администратор 08 2005

38

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

Обычно наибольшие трудности возникают при настрой-ке именно этих параметров.

Для краткости скажу, что обычно использую настрой-ки, приведенные на рис. 2. Поясню функции каждого пе-реключателя:

Глубина анализа:! Отчет по пользователям – анализ будет осуществлять-

ся по имени пользователя прокси-сервера.! Отчет по станциям – учет по IP-адресам (DNS-именам)

станций независимо от имен пользователей прокси-сер-вера.

! Отчет по почте – при анализе также будут учитываться лог-файлы почтового сервера.

! Отчет по группам – разделение пользователей по груп-пам (например, по отделам).

Графы сводного отчета:! Группа – выводится статистика по заданным группам.! Суммарный входящий – весь входящий трафик (прок-

си и почтовый).! Суммарный прокси – суммарный трафик прокси-серве-

ра.

! Суммарный почтовый – входящий и исходящий почто-вый трафик.

! Входящий почтовый – только входящий с детализаци-ей по ящикам.

! Исходящий почтовый – только исходящий по почтовым ящикам (можно отключить, в противном случае в отчет попадут адреса получателей, которых может быть очень много).

! Стоимость – рассчитанная стоимость потраченного тра-фика, исходя из заданной стоимости 1 Мб. Внимание! Не задавайте стоимость трафика равной нулю, так как все внутренние расчеты программа ведет не в мегабай-тах, а именно по итоговой стоимости. Если стоимость непринципиальна – лучше просто скрыть эту графу из раздела сводного отчета.

! Дата и время в имени – при включении этой опции WrSpy будет формировать отчеты с разными именами файлов, накапливая историю изменений. Я не использую этот режим в ежечасной статистике – он полезен только для формирования и архивации ежемесячного отчета.

! Учитывать служебный – при установке данного пере-ключателя будет подсчитан не только «полезный» тра-фик, но и зарегистрированные служебные пакеты.

! Почтовый бесплатно – почтовый трафик не будет учи-тываться для ограничения трафика.

! Лимит по умолчанию – каждый новый пользователь ав-томатически получит заданную квоту на период расче-та (на месяц, неделю, день или ручной интервал).

Разделы сводного отчета:! Открывать при создании – при установленном переклю-

чателе в интерактивном режиме после создания отчет автоматически будет открыт.

! Сортировка по трафику – в HTML-отчете список пользо-вателей будет выводиться в соответствии с использован-ным трафиком – первыми будут идти «рекордсмены».

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

! Трафик по дням – при установке данной опции для каж-дого пользователя будет формироваться и сохранять-ся в персональной папке дополнительный ежедневный отчет (что, разумеется, увеличит нагрузку на систему).

Формировать с головным – интеграция дополнитель-ных отчетов с основным:! Сайты по пользователям – для ежечасного автомати-

ческого режима формирования отчетов рекомендует-ся включить только эту опцию – детализация трафика пользователя по посещенным ресурсам.

Остальные возможности используются не так часто, по-этому для снятия нагрузки с системы их можно формиро-вать только при необходимости в интерактивном режиме. Например, очень интересен отчет «Бюджет времени», поз-воляющий получить общую картину активности пользовате-ля в разрезе временного интервала. Данный режим не пред-назначен для временной тарификации – он всего лишь по-

Рисунок 1. Список поддерживаемых продуктов

Рисунок 2. Настройка вида отчета

Page 41: 033 Системный Администратор 08 2005

39№8, август 2005

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

казывает приблизительные графики активности и относи-тельно время, проведенное в сети. Для того чтобы понять, чем занят сотрудник (если, конечно, серфинг по сайтам – не его прямые обязанности), – этого вполне достаточно.

В следующем окне настроек задаем параметры режи-мов анализа, а также рабочий интервал (рис. 3).

Минимально необходимо настроить два режима – ин-терактивный и автоматический. Автоматических режимов существует несколько. Каждый из них можно настроить в соответствии со своими задачами – например, добавить дополнительный режим для формирования и сохранения ежемесячного отчета, так как после начала нового рабо-чего периода отчеты обнуляются.

Режим «0» – интерактивный: формирование отчета про-исходит в окне программы, в ручном режиме. Переключа-тель «Блокировка пользователей» предназначен для при-остановки доступа пользователям, превысившим свой пер-сональный лимит в Kerio WinRoute 4 Pro или SquidNT, пос-кольку в этих популярных продуктах нет встроенной систе-мы ограничения. В нашем случае этот влажок можно снять, так как Kerio WinRoute Firewall уже имеет встроенную фун-кцию ограничения. Если вы используете Kerio WinRoute 4 Pro или SquidNT – включите этот режим и для интерактив-ного, и для автоматического режима. Более подробно про настройку блокировки пользователей при использовании этих продуктов можно прочитать на сайте программы.

Итак, в режиме «0» включаем опцию «Отчет в html», от-ключаем рассылку отчетов, при использовании Squid, ISA, ESPS или WinProxy указываем, какой трафик подсчиты-вать (логичнее всего, конечно, считать «мимо кэша», так как именно он берется снаружи. Задаем интервал сбора статистики до обнуления (например, текущий месяц).

Затем настроим один из автоматических режимов. Пе-реключаем опцию режим до «Автоматический-2» и также настраиваем его.

Опция «Ротация логов» в настройках режимов позво-ляет настроить специальный режим для очистки накопив-шихся лог-файлов в тех ПП, которые не предусматрива-ют автоматическое удаление. Однако даже если указан-ная возможность автоматической очистки лог-файлов при-сутствует в используемом вами прокси или почтовом сер-вере – использовать указанный способ предпочтительнее во избежание потерь в логах. При запуске программы в данном режиме база отчетов очищается от введенной ин-формации, сбрасываются внутренние счетчики, после че-го запускается файл savelog.bat из папки WrSpy. Универ-сальность метода заключается в том, что в этот файл вы можете поместить любые команды, которые необходимо выполнить после очистки базы данных WrSpy. Чаще всего это копирование и архивация старых лог-файлов, секунд-ная остановка прокси и почтовых служб, удаление лог-фай-лов, запуск служб.

Настройка «Рассылка отчетов» используется для опо-вещения пользователей по e-mail о их персональном тра-фике. Для введения этого режима необходимо задать соот-ветствие почтовых адресов для пользователей и зарегис-трировать в системе дополнительную компоненту SMTP, которая доступна для скачивания на официальном сай-те программы.

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

Последним шагом первоначальной настройки необходи-мо задать ширину полей формируемого отчета. Меню «На-стройка» – «Ширина полей» (из меню «Настройка» также можно изменить заданные при первоначальном запуске параметры). Помните, что чем больше задана ширина по-лей, тем дольше будет формироваться отчет, поэтому не-обходимо найти разумную середину. В принципе значения по умолчанию оптимальны. Можно только увеличить поле «адреса и доменные имена» до 30-40 символов.

Если вы используете Kerio WinRoute Pro 4, то для на-стройки блокировки пользователей, превысивших персо-нальный лимит, создайте в конфигурации группу, которая не будет иметь никакого доступа к веб-ресурсам. После этого зайдите в меню «Настройка» – «Блокировка досту-па» и выделите эту группу. При превышении персонального лимита пользователь будет перенесен в нее и доступ пре-кратится. Настройка блокировки пользователей в SquidNT описана на сайте программы.

Теперь произведем первичный ввод информации. Меню «Данные» – «Очистка и закачка с нуля». Если лог-файлы велики, то потребуется довольно продолжительное время для первоначального ввода (дальнейший ввод будет быс-трее, так как чтение информации будет осуществляться только с последней обработанной позиции).

После окончания ввода информации будет выдано со-общение о добавление новых пользователей и предложе-но исправить их. После утвердительного ответа мы полу-чим таблицу с четырьмя закладками:! Адреса и имена. Здесь хранится информация о пользо-

вателях и их лимитах. Поле «Пользователь» заполняет-ся автоматически, по логину пользователя. Для удобс-тва восприятия значение этого поля можно менять на любое, например на ФИО пользователя. Поле «Адрес» заполняется автоматически либо IP-адресом компью-тера, с которого пользователь подключается к прокси-

Рисунок 3. Настройка режимов анализа

Page 42: 033 Системный Администратор 08 2005

40

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

серверу, либо случайной последовательностью симво-лов, если пользователь мигрирует между компьютера-ми (или наоборот – с одного IP подключались разные пользователи). Поле «Логин» оставляем, как есть, а ли-мит – также можно свободно изменять – каждому персо-нальный. При импорте новых пользователей это значе-ние берется из настройки «Лимит по умолчанию». Зна-чение «0» – отсутствие ограничений. Если указать в по-ле «Группа» наименование подразделения – можно бу-дет выводить отчет и суммарный трафик групп.

! Переходим на закладку «Почтовые сервера» и удаля-ем уже прописанные туда значения – там для примера указаны внешние почтовые сервера, которые должны восприниматься как корпоративные.

! На закладке «Внешние ящики» (если мы импортирова-ли лог-файлы почтового сервера) будут внесены най-денные при обработке почтовые адреса. В поле «Поль-зователь» при этом будет автоматически подставлено значение вида <@unknownNN>. Внимание! Если вы хо-тите суммировать почтовый трафик пользователя с его трафиком на прокси-сервере – необходимо, сначала заполнив в закладке «Адреса и Имена» поле «Пользо-ватель», в точности повторить значение этого поля для конкретных пользователей в строке его почтового ящи-ка. Только в суммарном отчете можно будет увидеть, что почтовый трафик прибавился нужному пользовате-лю. Если этого не сделать – трафик по почтовым ящи-кам будет выделен в HTML-отчете в отдельные строки. Все изменения отражаются только после обновления информации в БД и формирования нового отчета. Уч-тите, что отчет не обновится, если ни в одном из лог-файлов не было изменений – программа поймет, что новой информации нет и анализировать ей, собствен-но, нечего.

После всех корректировок и переформирования отче-та можно получить красивый и удобочитаемый отчет о тра-фике пользователей (если при первоначальных настрой-ках была установлена опция «Открывать при создании», то HTML-страница с отчетом будет открываться после каждо-го формирования в интерактивном режиме).

Результат выглядит примерно так (см. рис. 4).Кликнув по логину пользователя, можно просмотреть

подробную статистику – с какого ресурса и сколько было скачано (см. рис. 5).

Настройка автоматического формирования отчетовОсталось решить главную задачу – обеспечение функцио-нирования системы в автоматическом режиме, без участия администратора. Здесь все крайне просто и удобно.

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

Все! Настраиваем в любом планировщике задач за-пуск написанного нами bat-файла, повторяем задание с необходимой периодичностью и проверяем работу систе-мы в целом. Результатом будет автоматическая биллинго-вая система, не претендующая на абсолютную точность (ведь подсчитывается только трафик, прошедший через прокси- и почтовый сервера, а не весь прошедший через интерфейс), но полностью достаточная для малых и сред-них компаний.

Отчеты создаются в папке, указанной вами при перво-начальной настройке (каталог отчетов). В зависимости от настроек они включают в себя различные файлы. При ука-занных выше па-раметрах формирования отчетов на дис-ке будет создана структура папок, соответствующая logon-именам пользователей и файлом общего отчета (Report.htm) в корне папки. Report.htm – это общий отчет, а html-файлы в персональных папках пользователей – детализация их ак-тивности. Для просмотра отчетов по сети просто организуй-те общий доступ в эту папку. Однако из соображений кон-фиденциальности рекомендуется предоставлять пользова-телям доступ только к детализации их собственных отче-тов. Если для авторизации на прокси-сервере используется сквозная проверка (т.е. например, на контроллере домена), то названия папок будут соответствовать их logon-именам. Делегировав права на чтение каждой папки только для со-ответствующей учетной записи, вы создадите необходимый уровень конфиденциальности. Для удобства можно подклю-чать поль-зователям папки с их персональными отчетами как сетевой диск, используя переменные типа %USERNAME% в сценарии входа в систему. При использовании такой ме-тодики каждый пользо-ватель сможет самостоятельно кон-тролировать свою активность, не имея при этом возмож-ности получить информацию о детализации трафика своих коллег, что соответствует принципам морали и неразглаше-ния личной информации. При этом контролирующему руко-

Рисунок 4. Общий отчет

Рисунок 5. Подробный отчет по пользователю

@echo off; переходим в рабочую папку программыcd /D c:\wrspy

; запускаем программу с параметром "2" - указание номера; режимаwrspy.exe 2

Page 43: 033 Системный Администратор 08 2005

41№8, август 2005

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

водству делегируются права на чтение всех отчетов, вклю-чая корневой отчет Report.htm. Просмотрев общую картину, такой руководитель сможет самостоятельно просмотреть де-тальную информацию об активности пользователя, не де-ргая каждый раз системного администратора.

Детализация по пользователям крайне удобна для де-мократичного регулирования ситуаций с превышением пер-сонального лимита. Если пользователь жалуется на то, что необходимо увели-чить ему квоту, так как это необходимо для работы, достаточно просто совместно с ним просмот-реть его подробную статистику.

Создание истории отчетовДля того чтобы иметь возможность просматривать статис-тику за предыдущие месяцы, не изменяя рабочий интервал и не формируя отчеты заново, рекомендуется настроить ав-томатиче-ское копирование статистики в конце выбранно-го интервала. То есть написать скрипт создания архивных копий и выполнять в последние часы перед сменой рабо-чего интервала (например, в последний день месяца или недели – в зависимости от ваших настроек).

Например, используя консольную версию общеизвес-тного архиватора WinRar – rar.exe можно создавать архи-вы, содержащие рабочую дату в имени файла. Приведен-ный пример создаст файл Report_<текущая_дата>.rar и по-местит в него содержимое папки E:\WrSpy\Report и всех ее подпапок, с максимальным сжатием, сохранением инфор-мации о правах и владельцах файлов.

Отчеты интерактивного режимаВ интерактивном режиме WrSpy позволяет формировать еще более гибкие и удобные отчеты. Например, вы можете посмотреть – а какой именно файл скачал с определенно-го ресурса конкретный пользователь. Запускаем програм-му без параметров, выбираем меню «По пользователям – Файлы и сайты по пользователям». После вывода на экран таблицы можно перемещаться по ней, выделяя курсором интересующий нас ресурс и в нижней части просматривая список закачек (рис. 6):

Рисунок 6. Отчет «Файлы и сайты по пользователям»

rar.exe a -m5 -os -ow -dh -ep1 -r ↵ -ag _ dd-mm-yyyy D:\BackUp\Report.rar ↵ E:\WrSpy\Report\*.*

По таблице видно, что пользователь romadm закачивал с сайта speedownload.nai.com некие ZIP-архивы.

Отчет «Бюджет времени пользователя» покажет вам со-отношение времени, которое сотрудники проводят на веб-сайтах. Обратите внимание – это не точное время, прове-денное пользователем в сети, а относительная оценка вре-мени, проведенного пользователем или станцией в Интер-нете, которая осуществляется косвенным методом. Однако общую картину данный отчет хорошо показывает, и соглас-но ему можно понять, кто «беспрерывно» занимается сер-фингом по веб-сайтам. Принцип расчета довольно прост:

Весь интервал времени анализа разбивается на кван-ты от 1 до 30 минут. Величина кванта задается (см. рис. 2 – «Интервал для учета бюджета времени») исходя из стиля работы ваших пользователей. Для быстрого серфинга – меньшие значения, для длительного скачивания – большие. Если пользователь проявлял какую-то активность в тече-ние данного кванта, в его бюджет заносится его (кванта) ве-личина. Суммирование всех этих значений и дает величи-ну оценки времени. Кроме того, формируется усредненное распределение суммарного трафика по времени суток.

Почтовые сервераОтчеты, формируемые по лог-файлам почтовых серверов, также удобны для восприятия и отличаются наличием более глубокой статистики в интерактивном режиме. Возможна детализация по каждому пользователю (сколько писем, на какой/с какого адреса, созданный трафик и пр.), наглядные графики по самым активным пользователям и пр.

Анализ лог-файлов UNIX-системКак было упомянуто, WrSpy понимает форматы популяр-ных UNIX-MTA и прокси. Для осуществления анализа дан-ных файлов можно использовать два способа: анализ рабо-чих лог-файлов или их копий. Первый способ более прост, так как не придется копировать файлы большого размера (либо также писать обработку для копирования только но-вых данных).

В первом случае необходимо создать и предоставить се-тевой доступ к папке с этими файлами для учетной записи, от имени которой WrSpy запускается в пакетном режиме.

Во втором случае данные файлы необходимо копиро-вать, что не всегда приемлемо по описанной выше причи-не. Остальная работа с этими логами аналогична уже опи-санной.

Я описал лишь некоторые, наиболее популярные воз-можности программы WrSpy. Если ее функции показались вам интересными – рекомендую установить ее для тести-рования и самостоятельно оценить удобство (или неудобс-тво – решать вам). Тем более, что никаких следов в ОС она не оставляет и удаляется без последствий. Вкупе с этим – наличие сайта поддержки и при этом абсолютная бесплат-ность продукта делают его крайне привлекательным для построения разнообразных отчетов.

Ссылки:1. Официальный сайт программы: http://www.wrspy.ru. Дис-

трибутивы и обновления доступны для загрузки на глав-ной странице сайта.

Page 44: 033 Системный Администратор 08 2005

42

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

Что такое кластерКластер – это две или более самостоятельные системы, объединенные в единое целое посредством специального программного и аппаратного обеспечения. Основное зве-но кластера – это единичный компьютер, называемый уз-лом. Кластеры могут расти – «масштабироваться» – путем добавления новых узлов. При этом синергетическое целое мощнее, нежели отдельный узел. Изменения в структуре кластера, например, появление и удаление узлов из соста-ва кластера (по разным причинам – авария или, наоборот, восстановление после критической ситуации) фиксирует-ся всеми оставшимися/новыми узлами.

Типы кластеровНа сегодняшний момент широко известны и распространены 3 типа кластеров – отказоустойчивые (например, LifeKeeper – см. [1]), с балансировкой загрузки (Load-Balancing) и высо-копроизводительные (High-Perfomance Computing):! Отказоустойчивый кластер состоит из двух или более

узлов, между которыми существует выделенное соеди-нение (heartbeat), которое используется для обмена слу-жебной информацией между узлами. Как только какой-либо из узлов перестает функционировать, то второй (резервный) узел берет его функции на себя.

! Задача кластера с балансировкой нагрузки заключается в том, чтобы перенаправить запрос, скажем к веб-сер-веру, к наименее загруженному в данный момент вре-мени узлу. По существу, этот тип кластера можно так-же назвать отказоустойчивым, только с дополнитель-ным функционалом балансировки и с большим коли-чеством узлов.

! В высокопроизводительном кластере узлы сконфи-гурированы таким образом, чтобы общая производи-тельность была максимальной. В этом типе кластера присутствуют и балансировочные механизмы – зада-ния распределяются между узлами. Самое интересное в таком типе кластера – факторизация процесса (раз-биение задачи на несколько параллельных подзадач). Процесс не ожидает освобождения CPU, а запускает свои подзадачи на разных узлах.

Суперкомпьютеры и кластерыТрадиционно ресурсоемкие математические вычисления выполнялись на суперкомпьютерах. Они выпускались оп-

ределенным количеством производителей и организация, которая хотела купить суперкомпьютер, должна была об-ладать немалым финансовым ресурсом. Естественно, что большинство университетов не могли себе позволить тако-го рода дорогую игрушку, поэтому в их недрах начала со-здаваться концепция кластера для академических кругов. Цель данной концепции – подготовить условия для распа-раллеливания задачи между узлами, передать обработку подзадач на узлы и затем собрать результаты каждой под-задачи. Кластер предполагалось собирать на PC-платфор-ме, благо она становилась всё более и более распростра-ненным явлением и по сути дешевой.

Кластерные моделиСуществует несколько методов распараллеливания – N(UMA), DSM, PVM и MPI. Некоторые из этих схем реали-зованы аппаратно, другие программно. Бывают и смешан-ные решения:! (N)UMA ((Non-)Uniform Memory Access) – узлы имеют до-

ступ к общей памяти, где выполняется код. Стоит отме-тить, что в Linux-ядре есть NUMA-реализация.

! DSM (Distributed Shared memory) реализовано как про-граммно, так и аппаратно. Концепция этого метода за-ключается в предоставлении уровня абстракции для физически распределенной памяти.

! MPI (Message Passing Interface, интерфейс передачи со-общений) – это открытая спецификация для создания библиотек передачи сообщений. В частности, библио-тека MPICH – самое известное решение на базе MPI. Другое известное решение – библиотека LAM.

! PVM (Parallel Virtual Machine) является собратом MPI. Фунционирует PVM в пользовательском пространстве, поэтому каких-то модификаций на уровне ядра не тре-буется. Пользователь с достаточными правами может запустить PVM.

Сущность OpenMosixПакет OpenMosix – это патчи к ядру Linux. На момент напи-сания этого материала существуют патчи для ядра 2.4.26 и для ветки 2.6. Так как OpenMosix реализован в виде пат-чей, то сохраняется полная совместимость между програм-мами, файлами и другими ресурсами в Linux.

Обычный пользователь может и не заметить изменений между Linux-машиной и OpenMosix-кластером, ибо послед-

ЗНАКОМИМСЯ С HPC-КЛАСТЕРОМ OpenMosixБольшую часть времени ПЭВМ, скажем честно, простаивает.

Средняя загрузка не превышает 20%. Но как только

начинается сборка приложений, например на C++,

или оцифровка видео-, аудиофайлов, то становится

очевидным недостаток вычислительных ресурсов.

Основная идея HPC-кластеров – задействовать ресурсы,

свободные на других узлах кластера.

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

Page 45: 033 Системный Администратор 08 2005

43№8, август 2005

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

ний будет расматриваться как рядовая Linux-машина, толь-ко немного производительнее. Внутренний механизм балан-сировки прозрачно производит миграцию процессов на уз-лы кластера. Оптимальная загрузка кластера вычисляется динамически через определенные промежутки времени. Вы также можете произвести нужную подстройку параметров кластера. Прозрачный механизм миграции играет интерес-ную роль – из-за него весь кластер выглядит как большая SMP-машина со множеством процессоров (каждый узел в роли процессора). В рамках OpenMosix разработана фай-ловая система (oMFS) для HPC-приложений, которая в от-личие от NFS поддерживает целостность ссылок, атрибу-ты времени и кеширование.

Сегодня в нашем обзоре в качестве узлов кластера бу-дут выступать 3 машины:! 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 Мб ОЗУ)

Все узлы соединены через хаб (100 МБит) в единое про-странство. Операционная система, OC Linux, первоначаль-но установлена на самой быстрой машине, а затем была клонирована на все остальные. Стоит отметить, что при ус-тановке, помимо базовых пакетов, также следует выбрать и QT-библиотеку (на базе QT мы впоследствии соберем утилиты мониторинга кластера).

Итак, первый шаг по установке и настройке ПЭВМ с яд-ром по умолчанию пропускаем. Следует настроить SSH-сер-вис, т.к. благодаря ему мы будем управлять узлами.

Далее заберем ядро (2.4.26) с включенными патчами для OpenMosix (32 Мб):

Для экономии трафика можно взять только патчи и на-ложить их на оригинальное ядро с kernel.org самостоятель-но (200 Кб):

Ставим галочки для компонентов OpenMosix (рис. 1), остальные компоненты для ядра не изменяем, сохраняем конфигурацию и собираем ядро.

Добавляем нужную опцию в загрузчик. В случае lilo:

И перезагрузка.

Для управления и тюнинга узлов в OpenMosix предус-мотрен специальный пакет утилит – openmosix-tools. Уста-новим его.

После установки этого пакета есть два варианта, каким именно образом узлы будут сообщать друг другу о своих характеристиках (загрузка, вычислительная мощность) и координатах (IP-адрес). Либо указать жестко в файле /etc/openmosix.map, либо положиться на сервис автоопределе-ния узлов (omdiscd). Структура файла openmosix.map пред-ставлена ниже:

В первой колонке указывается номер узла (в моем слу-чае первый узел имеет номер 1, второй – 100), во второй колонке IP-адрес, в третьей колонке – количество узлов в диапазоне. Т.е. предполагая, что первые пять узлов имеют последовательные адреса от 10.0.0.1 до 10.0.0.5 смысла их перечислять нет. Стоит только указать, что количество уз-лов равно в этом случае 5.

Так раздаются адреса статически. А для их динамическо-го определения будет использоваться файл /etc/openmosix/openmosix.config, где прописываются такие параметры, как:! AUTODISCIF – имя интерфейса, через который произ-

водит автопоиск (если на узле несколько сетевых ин-терфейсов).

! MYOMID – номер данного узла.! MIGRATE – разрешать ли процессам миграцию с дан-

ного узла или нет.! MFS – использовать Mosix FileSystem или нет.

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

wget http://citkit.dl.sourceforge.net/sourceforge/ ↵ openmosix/ ↵ openmosix-kernel-source-2.4.26-openmosix1.i386.rpm

wget http://citkit.dl.sourceforge.net/sourceforge/ ↵ openmosix/openMosix-2.4.26-1.bz2

# rpm -ih --nodeps ↵ openmosix-kernel-source-2.4.26-openmosix1.i386.rpm# cd /usr/src/linux-2.4.26-openmosix1/# make xconÞg

Рисунок 1. Компоненты ядра, отвечающие за функционированиеOpenMosix

# makedep&& make && make bzImage && make modules # make modules _ install

image = /boot/mosix-bzImageroot = /dev/sda1label = om.Linuxread-only

# /sbin/lilo -v

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# cd openmosix-tools-0.3.6-2# ./conÞgure --preÞx=/opt/OpenMosix ↵ --with-kerneldir=/usr/src/linux-2.4.26-openmosix1# make && make install

# MOSIX-# IP number-of-nodes# ============================1 10.0.0.1 1100 0.0.0.100 1

1 10.0.0.1 5

Page 46: 033 Системный Администратор 08 2005

44

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

Таким образом, при последовательном старте узлов вы можете отслеживать в логах процесс формирования кластера:

Для того чтобы системные процессы (те, что отвечают за загрузку и выключение узла) не мигрировали на другие узлы, используем в файле /etc/inittab такую конструкцию: строки с участием директории rc.d:

перепишем так:

что дословно означает «запускать стартовый скрипт rc.S на домашнем узле».

Также следует поменять строки, где участвует rc.d, а также строку:

которая будет выглядеть так:

Все готово, чтобы первый настроенный узел клониро-вать на другие машины. Воспользуйтесь либо командой dd, либо программой Norton Ghost. Затем в клонированных уз-лах поменять IP-адреса, hostname, и дело в шляпе.

Для тестирования производительности сформирован-ного кластера я решил проверить, за какое время будет собран MPlayer [2].

Тестируем быстродействиеКак я проводил замеры. Когда кластер обнаруживает новый узел, он создает в виртуальном каталоге /proc/hpc/nodes новую ветку, совпадающую с номером обнаруженного уз-ла. Следует отметить, что весь каталог /proc/hpc относит-ся к функционированию OpenMosix. Таким образом, если появляется новый узел с номером XXX, то автоматически появляется каталог /proc/hpc/nodes/XXX, в котором хранят-ся файлы с характеристиками данного узла. В частности, содержимое файла load нас и будет интересовать. Произ-водительность узлов в OpenMosix оценивается по сравне-нию с виртуальной ПЭВМ класса Celeron 1 ГГц, поэтому не удивляйтесь, когда увидите, что производительность кон-кретного узла, например, равняется 20000. Это означает, что по сравнению с эталонным 1 ГГц данный узел в 2 раза производительнее.

Итак, производим калькуляцию. Сохраним данный скрипт, использующийся в наших подсчетах в дальнейшем.

Скрипт получился простеньким для понимания. Нагруз-ку «в попугаях» мы трансформируем в график, где посмот-рим, какое участие принял каждый конкретный узел в про-цессе сборки.

Так как считается, что кластер в нашем случае – это еди-ное пространство с увеличенным количеством процессо-ров, то используем данный факт. Сначала посчитаем вре-мя сборки, когда работает только один узел, самый быст-рый. Предварительно распакуем MPlayer:

Теперь запускаем наш скрипт collect_hpc_load.sh и счи-таем время:

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

Получили еще худший результат. Почему? Очень прос-то – у нас сформировалось много процессов, но с малень-кими вычислительными запросами. Общее время мигра-ции по 100-Мбитной сети плюс время компиляции превы-сило предыдущий результат.

Включаем третий узел с 1.8 ГГц CPU. Посмотрим на цифры.

/opt/OpenMosix/sbin/omdiscd -i eth0

Jul 26 22:01:57 athlon kernel: openMosix #1 is at IP address 10.0.0.1Jul 26 22:01:57 athlon omdiscd[1996]: Notified kernel to activate openMosixJul 26 22:02:55 athlon kernel: eth0: Setting full-duplex based on MII#1 link partner capability of 45e1.Jul 26 22:04:11 athlon kernel: openMosix configuration changed: This is openMosix#1 (of 2 configured)Jul 26 22:04:11 athlon kernel: openMosix #1 is at IP address 10.0.0.1Jul 26 22:04:11 athlon kernel: openMosix #100 is at IP address 10.0.0.100

si:S:sysinit:/etc/rc.d/rc.S

si:S:sysinit:/bin/mosrun -h /etc/rc.d/rc.S

ca::ctrlaltdel:/sbin/shutdown -t5 -r now

ca::ctrlaltdel:/bin/mosrun -h /sbin/shutdown -t5 -r now

#!/bin/sh

NODE1=/proc/hpc/nodes/573NODE2=/proc/hpc/nodes/574NODE3=/proc/hpc/nodes/575

FILENAME=hpc _ load.txti=0

while true do DateStr='date +%H-%M-%S' Load1='cat $NODE1/load' Load2='cat $NODE2/load' Load3='cat $NODE3/load' echo "$DateStr ($i): $Load1, $Load2, $Load3" >> $FILENAME echo "Time: $DateStr ($i). Load: $Load1, $Load2, $Load3"; i='expr $i + 1'; sleep 1s; done

# wget MPlayer# tar xzvf MPlayer# cd MPlayer# ./conÞgure

# time make dep# time make

real 0m19.068suser 0m2.570ssys 0m16.410s

real 5m11.963suser 3m44.950ssys 1m26.410s

real 0m20.693suser 0m2.670ssys 0m17.450s

real 5m17.013suser 4m5.820ssys 1m43.620s

real 0m24.860suser 0m2.800ssys 0m17.610s

Page 47: 033 Системный Администратор 08 2005

45№8, август 2005

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

Отлично. А что произойдет при отключении самого мед-ленного узла? Отключаем, проверяем.

Выигрыш от медленного узла составил примерно 6 се-кунд. Как говорится – спорный результат. Стоит ли овчин-ка выделки – а именно, нужен ли третий узел? Очевидно стоит отказаться в пользу двухузловой модели.

Полученные результаты удобнее анализировать графи-чески. Импорт в OpenOffice и дальнейшее преобразование в диаграммы закончилось получением этих рисунков. Си-ним цветом отмечен узел на базе Pentium 4 CPU 3 ГГц, крас-ным – узел Pentium 4 CPU 1.8 ГГц, белым – Pentuim 3 CPU 600 МГц (рис. 2-5).

Утилиты мониторингаКак производить текущий мониторинг загрузки? К счас-тью, у OpenMosix достаточно широкая аудитория пользо-вателей, благодаря которым появились утилиты визуаль-ного контроля и управления. Нужный нам сейчас пакет на-зывается openmosixview.

Данное ПО написано на QT – надеюсь, вы его постави-ли, не забыли. Оно состоит из следующих программ:! openMosixview – приложение для мониторинга и управ-

ления кластера.! openMosixprocs – приложение, показывающее процес-

сы и их свойства.! openMosixcollector – сервис по сбору статистики.! openMosixanalyzer – приложение для анализа данных,

собранных сервисом статистики.! openMosixhistory – приложение, для просмотра мигра-

ций процессов в определенный момент времени.! openMosixpidlog – приложение для мониторинга еди-

ничных процессов.! 3dmosmon – приложение для объемного мониторинга

кластера.

К сожалению, у меня последняя программа не захоте-ла собираться. Решение оказалось простым – при компи-ляции приложения 3dmosmon следует заменить инициали-зацию переменных в файле materials.h из вида:

real 0m23.539suser 0m3.260ssys 0m17.580s

real 4m24.304suser 4m18.270ssys 2m14.320s

# wget openmosixview-1.5.tar.gz# tar xzvf openmosixview-1.5.tar.gz# cd openmosixview-1.5

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}};

real 4m18.754suser 4m17.620ssys 2m16.540s

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

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

Page 48: 033 Системный Администратор 08 2005

46

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

в вид:

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

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

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

По такому же принципу собираются и остальные ути-литы.

openMosixview – наглядный пример, какие узлы в дан-ный момент загружены и общая картина по производитель-ности (см. рис. 7).

Приведена ситуация, когда отключен наименее произ-водительный узел. Отключение узла от кластера отобра-жается индикатором красного цвета.

Графическая утилита openmosixmigmon позволяет, не ут-руждая себя поисками PID конкретного процесса, перебро-сить его выполнение на другой узел (см. рис. 8).

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

Следующая интересная утилита из данного пакета на-зывается openMosixanalyzer. Видна нагрузка как в целом на кластер, так и на отдельные узлы за определенный мо-мент времени (см. рис. 9).

А чтобы такая статистика велась на постоянной осно-ве, придуман сервис openMosixcollector, как видим из на-звания, его работа заключается в сборе данных и сохра-нении их на диске.

Запускается он просто – «openmosixcollector -d» – ра-ботает в качестве сервиса. Собранная информация раз в сутки сбрасывается в директорию /tmp/openmosixcollector_ДАТА_ВРЕМЯ.

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

mosctl – утилита для просмотра/редактирования пара-метров узла.

Рассмотрим характерные конструкции на основе дан-ной утилиты.

! mosctl whois node0 – выводит IP-адрес узла node0;! mosctl getload node0 – выводит загрузку узла node0;! mosctl getspeed node0 – выводит скоростную характе-

ристику узла node0;! mosctl gettune – выводит показатели для данного узла;! mosctl bring – передает сигнал мигрированным процес-

сам для возврата на домашний узел.

Как видите, тот пример, что мы рассмотрели и исполь-зовали в своей работе, можно переписать намного нагляд-нее при использовании утилиты mosctl.

Для миграции процессов в пределах кластера предна-значена утилита migrate.

А вот список процессов, который мы сможем увидеть при запуске утилиты ompsinfo.

Рисунок 6. Трехмерное изображение загрузки кластера

Рисунок 7. Визуальная картина загрузки посредствомутилиты openMosixview

# mosctl --help

Usage: mosctl commandAvailable 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], getfree [node-number], getutil [node-number], getyard, setyard [node-type], setspeed speed, setdecay interval(seconds) slow(/1000) fast(/1000), isup [node-number]

# moslimit --help

Usage: moslimit commandAvailable 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], getloadlocal [node-number], getcpulocal [node-number], getloadremote [node-number], getcpuremote [node-number]

# migrate --help

Usage: migrate pid {OpenMosix-ID|home|balance}

root@node0:~# ompsinfo

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};

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

# 3dmosmon localhost

# cd openmosixview# make# ./openmosixview

Page 49: 033 Системный Администратор 08 2005

47№8, август 2005

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

Утилита mosmon предназначена для визуального отоб-ражения текущей загрузки кластера. Она скомпилирована на основе библиотеки ncurses, поэтому текстовой консоли вполне будет достаточно для ее запуска.

Для запуска заданий предназначена утилита mosrun. С ее помощью можно указать, к какому типу процессов при-надлежит наше задание. Либо это CPU-intensive, т.е. за-дание, использующее процессорные ресурсы, либо I/O-intensive – задание, где основной упор делается на про-цесс ввода/вывода.

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

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

ВыводыКак и в любом аспекте нашей жизни можно найти минусы и плюсы, так и решения на базе OpenMosix-кластера содер-жат некие «узкие» точки. В частности, оцифровка звуковых файлов из формата .wav в формат .mp3 показала, что об-щее время процесса обработки на кластере превысило ана-логичное время на одной ПЭВМ. Повлияла на столь стран-ный результат низкоскоростная среда передачи данных – 100-мегабитная сеть. В целом применение OpenMosix-клас-теров целесообразно в тех случаях, когда требуется исполь-зовать задачи с высокими интенсивными вычислительны-ми запросами, например сборка программного обеспече-ния (как показано в этой статье), симуляторы погоды, об-работка геофизических данных, математических моделей и в других подобных ситуациях .

Ссылки, литература:1. Борисов А. «Стальной глаз на страже жизни». HA-клас-

тер LifeKeeper компании SteelEye. – Журнал «Системный администратор», №7, 2004 г. – 43-49 с.

2. http://www.mplayerhq.hu.3. http://openmosix.sourceforge.net.4. http://www-128.ibm.com/developerworks/eserver/articles/

openmosix.html.5. http://howto.x-tend.be/openMosixWiki.6. http://howto.x-tend.be/openMosix-LCA2005.7. http://tab.snarc.org/article/om_internals.xhtml.8. http://www.samag.com/documents/s=9658/sam0505a/

0505a.html.

Рисунок 9. Статистика по загрузке кластера в определенноевремя

Рисунок 8. Контроль за миграцией процессов в кластере

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]..

root@node0:~# showmap

My Node-Id: 0x023d

Base Node-Id Address Count------------ ---------------- -----0x023d 192.168.2.61 10x023f 192.168.2.63 1

omdiscd-i eth0

CMD PID NODE NMIGS LOCK CANTMOVE init 1 0 0 0 system keventd 2 0 0 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 10 0 0 0 clone_vm oM_migd 11 0 0 0 system, clone_vm oM_infoD 12 0 0 0 system, clone_vm, rt_sched memsorter 13 0 0 0 system, clone_vm syslogd 62 0 0 1 migratable but locked klogd 65 0 0 1 migratable but locked inetd 340 0 0 1 migratable but locked sshd 343 0 0 0 migratable crond 351 0 0 1 migratable but locked gpm 360 0 0 1 migratable but locked agetty 362 0 0 0 migratable agetty 363 0 0 0 migratable agetty 364 0 0 0 migratable agetty 365 0 0 0 migratable agetty 366 0 0 0 migratable agetty 367 0 0 0 migratable omdiscd 398 0 0 0 migratable mosstatd 476 0 0 0 migratable sshd 2778 0 0 0 migratable bash 2780 0 0 0 migratable ompsinfo 2852 0 0 0 migratable

Page 50: 033 Системный Администратор 08 2005

48

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

Программа AIDE позволит вам контролировать из-менения, происходящие в файловой системе. Для этого она создает отдельную базу данных, содер-

жащую информацию об атрибутах файлов – дате и време-ни создания, дате и времени модификации, размере, вла-дельце. База также содержит контрольную сумму содер-жимого файла для проверки его на неизменность содер-жимого. Контрольная сумма шифруется различными мето-дами для исключения возможности ее подделки. Правиль-ное использование AIDE гарантирует в достаточной степе-ни неизменность файлов. Но вот работают несколько сер-веров, на них всех установлена AIDE, базу которой реко-мендуется хранить на сменном носителе с целью не допус-тить попадания ее в чужие руки. Как реализовать это тре-бование? Не вручную же копировать базу с каждого сер-вера? Для автоматизации этой задачи и был разработан скрипт AIDEControl.

Итак:! Базы AIDE на всех наших серверах размещаются

(по умолчанию) в /var/db/aide/aide.db.! Обновление базы производится сторонними средства-

ми (вручную, через cron или с помощью скриптов).

Мы рассмотрим программу автоматического копирова-ния баз AIDE с множества удаленных машин на некую цен-тральную машину, обеспечивающую при этом невозмож-ность использования данных базы в случае ее несанкцио-

нированного перехвата. Программа копирует базы на смен-ный носитель небольшого физического размера, а также сохраняет несколько поколений баз на сменном носителе большого обьема.

Нужно ли защищаться от перехвата данных базы? Даже при невозможности ее модификации база все равно остает-ся лакомым куском, потому что содержит список всех фай-лов (кроме тех, которые были исключены через конфигура-ционный файл) с указанием их имен, размеров, дат созда-ния и владельцев, а это уже сама по себе немалая инфор-мация. Поэтому копирование баз будем производить через SSH с использованием скрипта, описанного в [1].

Двойное копирование последнего поколения базы необ-ходимо потому, что последнее поколение хранится «под ру-ками» – там, где контроль за неизменностью файлов ведет-ся чисто визуально. Дубль же последнего поколения, а так-же несколько предыдущих поколений хранятся на RW-дис-ке в сейфе, там же, где хранятся резервные копии данных. При необходимости вы всегда сможете сравнить две ко-пии, а также провести анализ, как изменялся тот или иной файл (по предыдущим копиям базы).

На рис. 1 изображена связь между мастер-компьюте-ром, компьютерами, с которых собираются базы, и носите-лями. Для каждого приведено расположение файлов базы AIDE в процессе работы скрипта. Следует учесть, что это расположение баз именно в процессе работы скрипта, по-тому что, когда база скопирована на мастер-компьютер, она

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

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

все ваши сервера программой локального все ваши сервера программой локального

контроля от вторжений AIDE. Осуществлению контроля от вторжений AIDE. Осуществлению

этого, несомненно правильного желания этого, несомненно правильного желания

мешает только одно – сервера территориально мешает только одно – сервера территориально

разбросаны, а хотелось бы хранить базы AIDEразбросаны, а хотелось бы хранить базы AIDE

на съемных носителях... Сегодня мы расскажем на съемных носителях... Сегодня мы расскажем

вам, как собрать данные со всех компьютеров, вам, как собрать данные со всех компьютеров,

не вставая с места.не вставая с места.

РАШИД АЧИЛОВРАШИД АЧИЛОВ

Page 51: 033 Системный Администратор 08 2005

49№8, август 2005

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

стирается с удаленного компьютера, а при завершении ко-пирования на 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. Для FreeBSD устанавливается из портов secuirty/ssh2-nox11.

! Bzip2. Для FreeBSD Bzip2 является стандартной програм-мой и поставляется вместе с системой. При отсутствии его программа выдаст предупредительное сообщение и аварийно завершит работу.

! Mkisofs и CDRecord. Программа из состава продвинуто-го программного пакета cdrtools для создания и записи ISO-образов. Для FreeBSD устанавливается из портов sysutils/cdrtools.

! Скрипт для пакетной записи ISO-образов BurnISO. Ска-чать его вы можете с домашней страницы [2].

! AIDE должна быть создана на каждом компьютере, с ко-торого предполагается их копировать, и располагаться в каталоге по умолчанию /var/db/aide. Для FreeBSD ус-танавливается из портов seciruty/aide.

Настраиваем системуВам потребуются:! в /etc/fstab описания следующих точек монтирования:! /cd-rw (или любую другую, описанную параметром

cdrwdevmp конфигурационного файла) для монти-рования RW-диска с полным комплектом поколений баз, например:

! /mnt/umass (или любую другую, описанную парамет-ром usbdevmp конфигурационного файла) для мон-тирования Flash для хранения последнего поколения баз AIDE, например:

(подробное описание полей fstab см. man fstab).

! в файле /etc/usbd.conf опишите Flash таким образом, чтобы при ее установке происходило автоматическое монтирование. Для этого добавьте в файл /etc/usbd.conf следующие строки:

где vendor, product и release берутся из вывода usbd, за-пускаемого с ключом -dv. Для каждого типа Flash зна-чения отличаются!

Вы должны подставить свои значения, получив их сле-дующим образом:

vndr – vendor (в данном случае 0x058f), prdct – product (в дан-ном случае 0x9380), rlse – release (в данном случае 0100) подставляются в соответствующие места файла /etc/usbd.conf. Файл читается один раз при старте программы, поэ-тому для активации внесенных изменений usbd необходи-мо перезапустить:

Внимание! Крайне не рекомендуется завершать работу usbd, запущенного с ключами -dv тогда, когда в USB встав-лено какое-либо устройство, особенно если оно работает по протоколу USB 1.1! Было замечено стабильное полное

/dev/acd1 /cd-rw cd9660 ↵ ro,noauto,noexec 0 0

/dev/da0s1 /mnt/umass msdos ↵ rw,noauto,-l,-Wkoi2dos 0 0

# Generic USB Flash drive (umass0)device "USB Flash Drive" devname "umass[0-9]+" vendor 0x058f product 0x9380 release 0x0100 attach "/sbin/mount /mnt/umass"

# usbd -dv

# killall usbd# usbd

Рисунок 1. Расположение баз AIDE на «мастере»и удаленных компьютерах

usbd: opened /dev/usb0usbd: opened /dev/usb1usbd: opened /dev/usb2usbd: opened /dev/usb3usbd: reading configuration file /etc/usbd.confusbd: opened /dev/usbusbd: device-attach event at 1121236066.985133000, Mass Storage Device, Generic: vndr=0x058f prdct=0x9380 rlse=0x0100 clss=0x0000 subclss=0x0000 prtcl=0x0000 device names: umass0

Page 52: 033 Системный Администратор 08 2005

50

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

зависание системы, из которого можно выйти только нажа-тием «Reset». Настоятельно рекомендую сначала извлечь устройство, а потом завершать работу usbd.

Система должна обладать возможностью смонтировать USB Flash, а также обладать возможностью работать с IDE СD-ROM как со SCSI. Для этого в конфигурационном фай-ле ядра системы должны присутствовать (а если их нет, то просто добавьте) следующие строки:

после чего ядро системы должно быть пересобрано в со-ответствии с инструкциями по его пересборке, приведен-ными, например в [3].

Кроме того, понадобится один носитель CompactFlash или USB Flash емкости, достаточной для того, чтобы вмес-тить одно поколение копий баз со всех нужных компьюте-ров, упакованное Bzip2, и один CD-RW или DVD-RW-диск для хранения необходимого количества предыдущих по-колений.

Полный текст скрипта приведен в Приложении 1 (см. www.samag.ru, раздел «Исходный код»). Он снабжен доста-точно подробными комментариями, а наиболее важные и интересные моменты мы обсудим далее по ходу статьи.

Общее описание логики работыи конфигурационный файлПредполагается, что «мастер» – доверенная машина. На рис. 1 показано размещение баз AIDE в процессе их об-работки скриптом. Общая связь между программами та-кова:! AIDE создает свою базу на каждом из компьютеров.! aidecontrol переписывает (именно переписывает, а не ко-

пирует – после успешного копирования файл удаляется с компьютера «агента») ее с удаленной машины («аген-та») на центральную машину («мастер») в свой каталог (показан на рис. 1, на компьютере Master, в рамке сле-ва). После чего aidecontrol запрашивает у оператора установку RW-диска, монтирует его в указанную точку монтирования, считывает его содержимое, дополняет новым поколением и записывает заново. Для копиро-вания используется временный рабочий каталог, кото-рый создается в процессе работы и после завершения работы удаляется. Расположение файлов в момент, ког-да они скопированы во временный каталог, приведено на рис. 1, на компьютере Master, справа. Расположение файлов на съемных носителях (Flash и RW-диске) при-ведено на рис. 1, в нижней части на соответствующих выносках.

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

Последняя запись отражает тот факт, что сам «мастер» мо-жет рассматриваться и как «агент». Для этого необходимо указывать в качестве IP-адреса 127.0.0.1.

AIDE на всех компьютерах, кроме «мастера», настра-ивается на путь к базе /var/db/aide/databases/aide.db. Пос-ле копирования базы на «мастер» она удаляется. На «мас-тере» в каталоге databases создаются подкаталоги с име-нами, соответствующими именам в файле описания узлов (remote1, remote2,...), в которые база помещается на время копирования на Flash и RW-диск. После успешного копи-рования на съемные носители база удаляется с «мастера» и существует только на съемных носителях.

Конфигурационный файл программы по формату пре-дельно прост: поскольку сама программа написана на язы-ке Bourne Shell, загрузка конфигурационных файлов про-водится выполнением файла и, следовательно, формат имеет вид «имя=значение». Имя файла по умолчанию – /usr/local/etc/aidecontrol.conf, все возможные переменные описаны непосредственно в тексте файла. Пример файла приведен в Приложении 2 (см. www.samag.ru, раздел «Ис-ходный код»).

Блок-схема программыБлок-схема программы приведена на рис. 2. Сбоку, на вы-носках отмечены метки блоков, приводимые в комментари-ях текста скрипта в Приложении 1 (см. www.samag.ru, раз-дел «Исходный код»).

Первыми выполняются анализ командной строки и ус-тановка значений, заданных в параметрах. Соответствую-щая метка в скрипте – CMDLINE.

Возможные ключи командной строки:! -c – указывает расположение конфигурационного фай-

ла. Если не задан, используется /usr/local/etc/aidecontrol.conf.

! -l – указывает расположение файла списка узлов, фор-мат которого приведен выше. Если не задан, использу-ется /var/db/aide/maint/aidehosts.

! -b – указывает на то, что будет установлен чистый RW-диск, который не нужно монтировать для копирования предыдущего содержимого.

! -h – выведет краткую справку по формату командной строки.

Таким образом:

Если в командной строке был задан вывод краткой справки, то она выводится и скрипт завершает работу, ина-че выполняется загрузка конфигурационного файла.

После загрузки выполняется поиск вспомогательных программ. Он имеет такую особенность, что программы, remote1 10.87.2.60

// запустит скрипт с параметрами по умолчанию# aidecontrol// запустит скрипт с параметрами из конфигурационного// файла /tmp/abcd.conf# aidecontrol -c /tmp/abcd.conf// запустит скрипт со списком узлов из файла /tmp/nodes.lst // и чистым RW-носителем.# aidecontrol -l /tmp/nodes.lst -b

device umassdevice scbusdevice dadevice passdevice cddevice atapicamdevice ata

remote2 10.87.2.254remote3 10.87.2.120master 127.0.0.1

Page 53: 033 Системный Администратор 08 2005

51№8, август 2005

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

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

Реализация поиска SSH в скрипте полностью анало-гична реализации скрипта safecopy, описанного в [1]. Со-ответствующая метка в листинге SEARCHSSH. Дополни-тельно процесс поиска описан в комментариях в тексте скрипта.

После того как проверено наличие всех необходимых программ, начинается разбор списка узлов. Этот разбор будет делаться в течение работы скрипта неоднократно, но особенности процесса его выполнения будут рассмот-рены один раз.

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

Внимание! Значение «IFS=’’», перенесенное на сосед-нюю строчку, – это не ошибка! Таким образом IFS присва-ивается значение «конец строки» (\n), после чего организу-ется обычный цикл перебора всех записей файла.

Если адресом компьютера является 127.0.0.1, то выпол-няется локальное копирование, то есть просто копирова-ние базы AIDE в то место, откуда она впоследствии будет перенесена на съемный носитель. Соответствующая метка в листинге LOCALCOPY. Если же нет – предполагается уда-ленный компьютер и выполняется копирование с удален-ного компьютера. Процесс получения списка файлов, под-лежащих копированию, и собственно процесс копирования полностью аналогичны процессу, описанному в [1]. Процесс получения списка файлов здесь вырождается просто в еще одну проверку правильности настроек SSH, поскольку спи-сок файлов может содержать только один элемент (или не

содержать ни одного, что будет указывать на ошибку). Со-ответствующая метка в листинге RMTCOPY.

Если при запуске скрипта не было указано, что уста-новлен чистый носитель, то RW-диск монтируется и его со-держимое копируется во временный каталог, создаваемый в корневом каталоге системы. Соответствующая метка в листниге MNTRWDISK.

Особенности монтирования съемных носителей состо-ят в том, что их наличие проверяется в бесконечном цикле

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

IFS=""

Рисунок 2. Блок-схема скрипта AIDEcontrol

Page 54: 033 Системный Администратор 08 2005

52

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

до тех пор, пока носитель не будет установлен и подклю-чен. Сделано так потому, что на первом этапе базы не ко-пируются, а переносятся на «мастер» и при отмене и пов-торном запуске скрипта базы не будут найдены. Поэтому лучше разобраться с причиной невозможности смонтиро-вать диск (а это, как правило, банальная причина – опу-щен ключ -b при установке чистого диска, отсутствует или неверно указана точка монтирования и т. д) и попытать-ся смонтировать его повторно. После каждой безуспеш-ной попытки смонтировать диск программа спрашивает, не желаем ли мы пропустить попытку монтирования дис-ка. Если согласиться с ней и монтирование диска пропус-тить, то диск будет помечен как чистый, чтение с него вы-полняться не будет, все его предыдущее содержимое бу-дет перезаписано.

Если RW-диск успешно смонтирован, то происходит ре-организация его содержимого – файлы, поколение кото-рых превышает максимально хранимое поколение, будут удалены, остальные переименованы в следующее поколе-ние. Процедура последовательного переименования фай-лов (filename.0.ext → filename.1.ext → filename.2.ext и т. д.) будет описана несколько более подробно. Метка процеду-ры в листинге – RENAME, метка самой процедуры реорга-низации – RWREORDER.

В случае когда выполнялась установка чистого носите-ля, то копировать нечего и просто создается пустой каталог для копирования в него последнего поколения баз.

После этого выполняется запись нового содержимо-го RW-диска. Особенностью записи нового образа с пол-

ным количеством поколений баз является использование скрипта burniso. Этот скрипт был написан для автоматиза-ции задачи «взять все файлы, лежащие в определенном месте и записать их на RW, предварительно его почистив». Для создания образа burniso использует mkisofs, а для за-писи – cdrecord.

Скрипт имеет собственный конфигурационный файл burniso.conf, синтаксис которого полностью аналогичен синтаксису aidecontrol.conf. В нем можно указать три пере-менных: workdir – каталог, в котором будет создаваться об-раз для последуюшей записи, devname – имя устройства для записи дисков и sourcedir – каталог, из которого будут браться файлы для записи на RW. Имя устройства зада-ется в формате cdrecord в виде «bus,target.lun», например devname=«2,1,0».

Внимание! Приведенные выше значения являются при-мером использования. На вашей системе они будут отли-чаться! Получить значения, которые необходимо подста-вить сюда, можно командой:

В данном случае использовалось устройство TEAC CD-W58E (2,1,0).

Более подробную информацию о возможностях cdrecord см. man cdrecord.

Запись диска может идти достаточно долго, перед нача-лом записи cdrecord выводит большое количество инфор-мации о приводе, о диске, на который будет идти запись, о режимах работы... Ход выполнения записи отображает-ся на консоли в виде:

После записи диска со всеми поколениями копий вре-менный каталог, в котором создавался образ для записи на RW-диск, удаляется.

Последней фазой работы скрипта является перенос на Flash последней копии баз по всем узлам. Для этого снача-ла монтируется Flash. Монтирование происходит аналогич-но монтированию RW-диска – в бесконечном цикле.

Ваша система должна быть уже настроена на автома-тическое монтирование Flash при ее установке. О том, как это сделать, написано в разделе «Настраиваем систему». Вполне возможно, что /sbin/mount не будет успевать отра-ботать монтирование устройства в FreeBSD 5.x, посколь-ку файлы устройств здесь создаются динамически, а devfs имеет некоторое время срабатывания. В особенности это проявляется на старых Flash 1.1 типа Seitek BAR – требуе-мая задержка может достигать двух секунд. Для избежа-

# camcontrol devlist

shiftÞles(){# Получаем список файлов в каталоге lÞles=`ls -1

# Обрабатываем по одному элементу списка до тех пор,# пока он не пуст for lÞle in $lÞles do# Выбираем номер поколения (указываем awk, что разделителем# полей является точка, и печатаем второе поле) gener= echo $lÞle | awk 'BEGIN {FS="."} {print $2}'# Дополнительная защита � если в качестве номера поколения# выбрали «bz2», значит в каталоге находится файл Þlename.bz2,# который не переименован из-за какой-либо ошибки.# Корректируем эту ситуацию, подразумевая нулевое# (самое последнее) поколение if [ $gener = "bz2" ]; then logline="Invalid database Þle name $lÞle, assumed ↵ zero generation"; safe _ logger gener=0 mv $adbnam.bz2 $adbnam.$gener.bz2 Þ

# Если номер поколения равен максимально хранимому# поколению, этот файл удаляется. Иначе вычисляется# следующий номер и файл переименовывается. if [ $gener -eq $abmax ]; then rm -f $adbnam.$gener.bz2 else ngener=$(($gener+1)) mv $adbnam.$gener.bz2 $adbnam.$ngener.bz2 Þ done}

if [ $blank = "no" ]; then shiftÞles Þ

cp $ringdir/$hostname/$adbnam.bz2 ./$adbnam.0.bz2

<SEAGATE DAT 9SP40-000 9030> at scbus0 target 6 lun 0 (sa0,pass0)< 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)

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...Starting new track at sector: 0Track 01: 6 of 6 MB written (fifo 100%) [buf 98%] 8.2x.Track 01: Total bytes read/written: 6391808/6391808 (3121 sectors).Writing time: 9.625sAverage write speed 4.3x.Min drive buffer fill was 98%Fixating...Fixating time: 31.892scdrecord: fifo had 101 puts and 101 gets.cdrecord: fifo was 0 times empty and 27 times full, min fill was 95%.

Page 55: 033 Системный Администратор 08 2005

53№8, август 2005

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

ния этого был разработан скрипт mountflash, приведенный в Приложении 3 (см. www.samag.ru, раздел «Исходный код»). Скрипт может запускаться как вручную, так и через /etc/usbd.conf. В последнем случае строка attach должна иметь следующий вид:

где /mount/point – точка монтирования Flash. По умолча-нию точка монтирования – /mnt/umass. Метка монтирова-ния Flash в листинге – MNTFLASH.

В очередной раз выполняется разбор файла описания узлов и по одному узлу за один проход выполняется копи-рование файлов из соответствующего каталога на мастер-компьютере в соответствующий каталог на Flash. Если ко-пирование файла прошло успешно, файл удаляется с мас-тер-компьютера. Метка в листинге – FLASHCOPY.

Последней задачей скрипта является размонтирование Flash и останов устройства. Эта часть будет рассмотрена более подробно ниже по тексту.

Возможные ошибкиЕсли скрипт работает не так, как ожидается, то, возмож-но, имеет место ошибка в настройке SSH. Это очень прос-то проверить – достаточно с консоли мастер-компьютера набрать:

где remotebox – имя любого компьютера, с которого долж-

ны копироваться базы. Если сразу же открывается терми-нал удаленного компьютера – все нормально (при этом motd показываться не должно). Если же появляются запрос па-роля на разблокирование ключа, запрос пароля на регис-трацию на удаленном компьютере или какие-либо сообще-ния об ошибках – следует устранить ошибки и повторить. Все наиболее типичные ошибки, связанные с настройкой SSH для автоматического копирования файлов с исполь-зованием метода авторизации по публичному ключу, при-ведены в [1].

Наиболее часто встречающиеся ошибки, не связанные с настройками SSH:! Неверно указанные пути к каталогам баз AIDE либо раз-

личные пути для различных компьютеров, из-за чего ба-зы не могут быть скопированы.

! Неверно указана точка монтирования RW-диска, ука-занная точка монтирования не описана в /etc/fstab, RW-диск помещен не в тот привод (когда на мастер-компью-тере более одного привода, а это не редкость).

! Неверно указана точка монтирования Flash, указанная точка монтирования не описана в /etc/fstab, для данно-го типа Flash не настроен /etc/usbd.conf.

! Система не поддерживает монтирование USB Flash.

Наиболее уязвимым является процесс монтирования и размонтирования Flash, поскольку он требует значитель-ного числа предварительных настроек. Для проверки ус-пешного монтирования Flash следует запустить usbd в ре-жиме отладки и посмотреть, не появляются ли сообщения об ошибках во время процесса монтирования Flash. Следу-ет учесть, что даже для Flash одного типа могут быть раз-ные release. Гарантированно одинаковыми являются толь-ко Flash из одной коробки.

ЗаключениеДанный скрипт – инструмент, который поможет вам решить одну конкретную задачу. Несмотря на кажущуюся громозд-кость, он относится к классу программ «настроил и забыл» – после двух-трех успешных циклов получения информации запуск скрипта можно было бы уже доверить младшему персоналу, если бы не крайняя важность копируемых дан-ных. Проверять систему с использованием скопированных файлов можно либо с помощью скрипта AIDEstart, который будет описан в следующей статье, либо с загружаемой USB Flash, либо вручную, указывая путь к данным в конфигура-ционном файле или при запуске AIDE.

Литература и ссылки:1. Ачилов Р. Копирование файлов в автоматическом ре-

жиме с множества компьютеров через SSH. – Журнал «Системный администратор», № 12, 2004 г. – 12-17 с.

2. http://www.granch.ru/~shelton/fileZ/burniso.tar.bz2.3. http://www.freebsd.org/doc/en_US.ISO8859-1/books/

handbook/kernelconfig-building.html.4. Домашняя страница проекта AIDE http://sourceforge.net/

projects/aide.5. Домашняя страница автора проекта cdrecord (в числе

набора других программ) – http://cdrecord.berlios.de/old/private/cdrecord.html.

attach "sh -c '/usr/local/bin/mountßash /mount/point'"

# /dev/da0s1mpdev=`mount | grep -e "$usbdevmp " | awk ↵ '{print substr($1,6,3)}'

# Размонтировать Flashumount $usbdevmpstatus=$?

# Проверить статус размонтирования и выдать сообщение,# если неудачноif [ $status -ne 0 ]; then logline="USB Flashdrive unmounting on device $usbdev ↵ failed, return code is $status"; safe _ logger else logline="USB Flashdrive was succesfully unmounted ↵ after updating content"; safe _ logger

# Найти устройство, на которое смонтировалась 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 ↵ '{print substr($0,index($0,"target") + 7,1)}' umlun= echo $umdrive | awk ↵ '{print substr($0,index($0,"lun") + 4,1)}'

# Выдать команду останова устройства (она погасит# индикатор готовности на Flash, за исключением USB 1.1) camcontrol eject $umdig:$umtarget:$umlunÞ

# su aide> ssh remotebox

Page 56: 033 Системный Администратор 08 2005

54

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

(если такие соображения и впрямь имели место, то, по крайней мере, на авторе этих строк план сработал). О бу-дущем SAP DB также строились раз-личные догадки. MySQL AB будет пози-ционировать SAP DB как «MySQL для взрослых», говорили также о том, что MySQL будет просто использовать код SAP DB для внедрения в свой продукт, а оригиналу суждено умереть.

Прошло более двух лет, и по-ка, к счастью, события опроверга-ют обе версии. Готовящаяся к выхо-ду MySQL 5 явно не «содрана» со сво-ей старшей сестры, а, в свою очередь, SAP DB, под новым именем MaxDB, жи-вет и развивается. Несмотря на сме-ну названия нумерация версий оста-

SAP + MySQL = MaxDB

При выборе СУБД для проекта часто встаёт проблема выбора между низкой

(часто нулевой) стоимостью открытых баз данных, таких как MySQL или PostgreSQL,

и мощью и широтой возможностей «серьёзных» СУБД – Oracle, DB2, MS SQL.

MaxDB от компании MySQL AB, наследница SAP DB – прекрасная альтернатива такому выбору.

Это промышленная SAB-сертифицированная база данных, распространяемая под лицензией GPL.

КИРИЛЛ СУХОВ

В последних числах мая 2003 го-да широкие массы IT-тружени-ков потрясла неожиданная но-

вость. Солидная во всех отношениях компания SAP AG, один из мировых ли-деров программного обеспечения для бизнеса, заявила о планах «стратеги-ческого сотрудничества» с MySQL AB – разработчиком самой распространён-ной открытой СУБД – MySQL. Данное сотрудничество касалось такого из-вестного и заслужившего уважение продукта SAP, как SAP DB – промыш-ленного сервера баз данных, стояще-го в одном ряду с гигантами – MSSQL Server, Oracle и DB2. При этом, как за-являлось, написанием кода и управ-лением проектом будет заниматься

непосредственно MySQL AB, а внед-рение системы и поддержку продук-та компании планировали осущест-влять совместно. Причиной такого ша-га SAP AG назвали желание как мож-но больше соответствовать запросам клиентов.

Если в MySQL-сообществе извес-тие утвердило сдержанный оптимизм, то в среде пользователей продуктов SAB реакция была, по крайней мере, неоднозначна. И в самом деле, что мо-жет предоставить MySQL SAP, кроме… кроме огромного количества пользо-вателей СУБД! В самом деле, причи-ной такого шага могло послужить же-лание привлечь новых пользователей за счёт огромной аудитории MySQL

Page 57: 033 Системный Администратор 08 2005

55№8, август 2005

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

Таблица 1. Платформы и архитектуры,поддерживаемые MaxDB

лась прежней: так, в начале 2004 го-да вышла MaxDB 7.5, а в июне 2005 года MaxDB 7.6, порадовавшая поль-зователей графическим инсталлято-ром (Installation Manager GUI), автома-тическим обновлением статистических данных, автоматическим восстановле-нием неисправных индексов и новыми алгоритмами кэширования.

В этом же году MySQL AB выпусти-ли PHP- и Perl-драйверы для MaxDB, расширив функциональность для раз-работки приложений.

Что собой представляетMaxDB сегодня?Это полноценный, промышленный сервер баз данных, поддерживающий стандарт SQL 92 на «расширенном» уровне (хранимые процедуры, тригге-ры, последовательности, курсоры, ро-ли и т. д.). В СУБД реализована под-держка UNICODE, поддержка клас-терных систем, предусмотрена воз-можность изменения размера базы и создание резервной копии в режиме Online. Возможности MaxDB включа-ют статистику для оптимизации стра-тегии построения запросов пользова-телем и выполнения их ядром СУБД. Программные интерфейсы, позволя-ющие работать с MaxDB, включают ODBC 3.5, C/C++ Precompiler (встро-енный (Embedded) SQL), JDBC, вер-сии 3.0, Perl DBI, Python, PHP и, разу-меется, SQLCLI. Что ещё? Да в общем, немало, скажем, режим совместимос-ти синтаксиса SQL СУБД. с Oracle 7.

Помимо самой СУБД в состав дис-трибутива включены все необходимые приложения для администрирования и

интерактивной работы с базой данных, речь о которых пойдёт ниже.

В таблице 1 приведён список под-держиваемых в настоящее время плат-форм и архитектур. Он не так впечат-ляющ, как в случае с MySQL, но все на-иболее распространённые конфигура-ции в нём присутствуют.

Если операционная система, на ко-торой вы планируете работать с MaxDB, в таблице отсутствует, не отчаивай-тесь. Вся необходимая информация по портированию СУБД приведена здесь: http://www.sapdb.org/develop/sap_db_cvs.htm и здесь: http://sapdb.2scale.net/moin.cgi/DevelopingSapdb. Основные технические параметры MaxDB при-ведены в таблице 2.

Как и остальные продукты от MySQL AB, MaxDB распространяется как под коммерческой лицензией, так и под

лицензией GPL, причём последний ва-риант СУБД ничем функционально от платной версии не отличается.

ИнсталляцияТребования к ресурсам у MaxDB по ны-нешним меркам довольно скромны. Они напрямую зависят от объёма базы дан-ных. Самым критичным параметром для работающего сервера является опера-тивная память. Для размещения ядра необходимо около 48 Мб, для каждого активного соединения понадобятся еще примерно 10 Мб ОЗУ, что по сравнению с аналогами не выглядит непомерным. Размер занимаемого дискового про-странства складывается из размера файлов дистрибутива MaxDB и размера прикладной базы данных. Суммарный размер исполняемых файлов MaxDB составляет от 280 Мб для 32-разряд-

Таблица 2. Основные технические параметры MaxDB

Page 58: 033 Системный Администратор 08 2005

56

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

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

ных систем до 700 Мб для 64-разряд-ных. Размер прикладной базы опреде-ляется пользователем и может в даль-нейшем быть изменён без необходи-мости перезагрузки сервера.

Размер занимаемой MaxDB опера-тивной памяти можно корректировать с учетом размера базы данных и ко-личества одновременно обрабатыва-емых запросов.

Все действия производились на компьютере под управлением опе-рационной системы Windows XP Pro (SP-2), под музыку группы Аквариум.

Сначала скачиваем архив с дистри-бутивом MaxDB, который доступен по адресу: http://dev.mysql.com/downloads/maxdb, затем графические инстру-менты для работы с СУБД – DBM GUI и SQL Studio, расположенные здесь: http://dev.mysql.com/downloads/maxdb/clients.html. Распаковав дистрибутив, приступаем к установке.

Есть несколько путей для инсталля-ции MaxDB. Прежде всего это стандар-тная инсталляция. Посредством кон-сольной утилиты SDBINST. Она доста-точно удобна и информативна (рис. 1). Всё, что требуется, выбрать режим ус-

тановки (я выбрал полный вариант) и размещение папок с данными, про-граммами и ядра базы данных, а затем заинтересованно следить за ходом ус-тановки. По окончании программа по-радует вас сообщением о необходи-мости перезагрузки (рис. 2).

В новых версиях MaxDB доступен также вариант установки с веб-интер-фейсом (требует дополнительного ком-понента maxdb-webtools, входящего в дистрибутив) и графический режим, на котором я и рекомендую остановиться. В отличие, например от инсталлятора MySQL, Installation Manager GUI совер-шенно не ограничивает возможности установки. Итак, запускаем утилиту SDBSETUP.exe (рис. 3). Если это не пер-вая попытка установки, настоятельно советую с помощью соответствующего пункта меню снести результаты преды-дущих экспериментов – различные вер-сии СУБД и просто разные варианты ус-тановки могут конфликтовать. В нача-ле инсталляции нам предлагают выбор конфигурации (рис. 4), причём первый пункт предполагает полную установку. Затем, после выбора режима, предла-гается задать пароли привилегирован-

ным пользователям и параметры базы данных (рис. 5), после чего инсталля-тор выведет подробную информацию выбранной конфигурации (рис. 6). Если внешне процесс вам напоминает уста-новку СУБД Oracle – не смущайтесь, во-первых, у меня такие же ассоциации, а во-вторых, технологией java (против ра-зумного применения которой я ничего не имею) там не пахнет – всё происхо-дит довольно быстро (рис. 7). По окон-чании инсталляции будет предложено запустить Database Manage (рис. 8), и с этим серьёзным предложением луч-ше согласиться.

Для использования графических и веб-инструментов их необходимо инс-таллировать отдельно.

На особенностях архитектуры и ор-ганизации СУБД остановимся как-ни-будь в другой раз, а сейчас рассмот-рим основные инструменты админис-трирования и разработки.

Основные компоненты MaxDBНа рис. 9 приведены основные компо-ненты MaxDB (состав которых опреде-ляется выбранным инсталляционным

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

Page 59: 033 Системный Администратор 08 2005

57№8, август 2005

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

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

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

профилем). Это инструменты инстал-ляции и администрирования СУБД, средства работы с данными и програм-мные интерфейсы. Ниже речь пойдёт об наиболее значимых из них.

Администрирование(Database Manager)Менеджер базы данных доступен в MaxDB в трёх ипостасях, выполняю-щих совершенно одинаковый набор функций.

Database Manager GUI (рис. 10) представляет собой удобный графи-ческий интерфейс, посредством кото-рого можно осуществить любые дейс-твия, связанные с администрировани-ем СУБД. В операционной системе MS Windows он вызывается из стартово-го меню («Start → Programs → MySQL MaxDB → Database Manager») или из командной строки командой dbmgui. На его примере хорошо видны основ-ные возможности администрирования. В числе задач, решаемых с его помо-

щью, – создание и инициализация эк-земпляров баз данных (Instance, в тер-минах MaxDB), управление пользова-телями и операторами баз данных, ус-тановка прав доступа и параметров ав-торизации. С помощью DBM осущест-вляется запуск и остановка экземпля-ров БД, создание объектов БД, уста-новка значений и индексов, управле-ние сессиями. Кроме того – резервное копирование (рис. 11), восстановление данных из резервных копий, монито-ринг, диагностика системы и многое другое. Даже обновление программ и системных таблиц удобно делать имен-но из этой среды.

Database Manager CLI, в отличие от своего графического коллеги, досту-пен во всех поддерживаемых опера-ционных системах. Работа с DBMCLI может быть легко автоматизирована с помощью администраторских сце-нариев. Функции менеджера доступ-ны также из приложений, написанных на Java, Python, Perl, PHP, через соот-

ветствующие программные интерфей-сы. Полный список команд доступен во входящей в дистрибутив докумен-тации, можно также вызвать dbmcli с параметром help (рис. 12).

Web DBM входит в инструмента-рий Web Tools, в официальной доку-ментации декларируется, что эти ути-литы, позволяющие управлять серве-ром через обычный браузер, коррект-но работают в следующих конфигура-циях (см. таблицу 3).

От себя могу добавить, что при ис-пользовании браузера Mozilla Firefox (1.0.4) проблем не возникало, а вот с Opera 7.0 были (это касается и осталь-ных Web Tools).

Работа с данными (SQL Studio)Следующие три инструмента предна-значены для доступа к данным и ката-логам экземпляров MaxDB с использо-ванием SQL-запросов.

SQL Studio (GUI), имеющаяся только для ОС MS Windows, представляет со-

Page 60: 033 Системный Администратор 08 2005

58

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

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

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

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

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

Рисунок 13. SQL Studio (GUI) � пишем запрос Рисунок 14. Лог DBAnalyzer

бой удобную среду разработки, с гра-фическим интерфейсом (рис. 13). SQL Studio позволяет оперировать данны-ми, создавать объекты базы данных и управлять ими. SQL Studio (GUI) имеет окно навигации, средства просмотра таблиц и, разумеется, средства управ-ления SQL-кодом. Такое сочетание раз-личных функций в одной оболочке поз-воляет комфортно решать такие зада-чи, как создание таблиц, индексов, пос-

ледовательностей, процедур и т. д., со-здание и исполнение SQL-запросов, не-посредственное редактирование дан-ных с помощью визуальных таблиц.

Web SQL Studio основана на веб-интерфейсе, имеет сходные с графи-ческим вариантом возможности по уп-равлению данными. Меньший комфорт работы в ней компенсируется платфор-менной независимостью данного инс-трумента.

Преимущества консольного клиен-та SQLCLI заключаются в возможнос-ти использования его команд внешни-ми сценариями, в том числе написан-ными на языках, имеющих интерфейс доступа к MaxDB.

Мониторинг (Database Analyzer)Крайне полезный инструмент, Data-base Analyzer (рис. 14), представляет собой полноценную экспертную сис-

Page 61: 033 Системный Администратор 08 2005

59№8, август 2005

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

Таблица 3. Поддержка Web Toolsдля различных платформ и браузеров

Краткая история SAP DB11 мая 1999 года известный разра-ботчик ERP-систем, немецкая компа-ния SAP AG, объявила о приобрете-нии у фирмы Software AG неисключи-тельных прав на СУБД Adabas D. Мо-тивы этого действия были очевидны, основной (более 75%) платформой для EPR-системы R/3, выпускаемой компанией была СУБД Oracle, про-дукт ближайшего конкурента на рын-ке ERP-систем. Таким образом, SAP AG практически прямо финансирова-ла Oracle Applications, продукт, конку-рировавший с их собственной разра-боткой – R/3.

В 2000 году купленное решение оформилось в самостоятельный про-дукт – SAP DB и дальнейшие разра-ботки, предлагаемые компанией (R/3 и открытая платформа mySAP) бази-ровались на ней.

5 октября 2000 года SAP AG объ-явила выход СУБД под лицензией GPL, сделав её таким образом первой Open Source СУБД такого класса. Про-мышленная, многоплатформенная ба-за данных, с открытым исходным ко-дом стала доступна разработчикам.

тему для мониторинга MaxDB. Сущ-ность его работы заключается в сня-тии и оценке данных о состоянии сис-темы, через определённые интерва-лы времени (задаваемые настройка-ми). Полученные сведения диффе-ренцируются по классам – служеб-ная информация, предупреждения (три различных уровня) и сообще-ния об ошибках. Все полученные со-общения проходят стандартную об-работку и дешифровку. Более того, Database Analyzer берёт на себя су-щественную часть анализа информа-ции, предлагая в стандартных ситуа-циях типовое разрешение возникших затруднений.

Database Analyzer облегчает вы-явление ошибок в случае проблем с производительностью или пропуск-ной способностью сервера MaxDB. Это помогает, например, выявить пробле-мы, относящиеся к конфигурации ба-зы данных, синхронизации (блокиров-ка, критические секции), оптимизации запросов базы данных (стратегия об-работки данных, индексирование, оп-тимизация статистики) или конфигу-рации оборудования. Рекомендации Database Analyzer могут предложить создать добавочные индексы или по-высить размер кэша БД.

Репликация(Synchronization Manager)Основное назначение этого инстру-мента – различные виды репликации данных MaxDB. Синхронизировать мобильные или удалённые экземпля-ры баз данных с центральным серве-ром БД – достаточно типовая задача, и Synchronization Manager достаточно хорошо с ней справляется.

Репликация в MaxDB осуществля-ется централизованно, с выделением одного главного экземпляра БД, в ко-тором записываются настройки репли-кации и произведённые изменения, ко-

торые затем объединяются в ходе оче-редной синхронизации.

Сервер сообщений Synchronization Manager – это выделенный экземпляр MaxDB, который не зависит от масте-ра и клиентов. Он буферизирует все изменения до того, как их прохож-дение завершится. Таким образом, Synchronization Manager отделяет ра-ботоспособность мастера и клиентов от времени синхронизации.

Узким местом является двунаправ-ленная репликация – в этом случае су-ществует вероятность возникновения конфликтов, которые необходимо раз-решать вручную.

Импорт и экспорт данных (Loader)Последнее, о чём я хотел рассказать в этой статье, это утилита Loader, поз-воляющая импортировать данные при-ложений из файлов данных в экземп-ляр базы данных, или экспортировать данные из MaxDB в файлы. Благода-ря поддержке большого количества различных форматов и структур запи-сей, Loader часто может заменять спе-

циализированные программы для за-грузки и выгрузки данных. Благодаря прямому соединению с экземпляром MaxDB, Loader обычно помогает до-стичь существенного преимущества в производительности.

Более того, Loader поддерживает перенос любых данных из одного эк-земпляра MaxDB в другой, даже в том случае, когда исполняется на различ-ных архитектурах и операционных сис-темах. По выбору администратора мо-гут быть загружены отдельные табли-цы, все таблицы, относящиеся к опре-деленному пользователю БД, или даже полное содержание базы данных.

В этой статье я ограничился обзо-ром основных средств и возможнос-тей MaxDB, совершенно не упомянув о таких вещах, как Standby/Hot Standby конфигурации, снимках (Snapshots), кэшировании, автоматическом распре-делении пространства и многом дру-гом. Также я совершенно не касался вопросов архитектуры администриро-вания и разработки. Если вы проявите интерес, я продолжу рассказ о данной СУБД в дальнейшем.

Её версия, на тот момент была 7.2. За последующие года SAP DB стреми-тельно развивалась, находя примене-ние как самостоятельно, так и в качес-тве встроенной СУБД.

СУБД развивалась, обрастая но-выми возможностями, утилитами и ин-терфейсами. Вокруг неё складывалось сообщество разработчиков. В начале 2003 года SAP AG пошла ещё дальше, объявив Open Source свою уникальную разработку – технологию LiveCache (объектно-ориентированное расши-рение реляционной системы баз дан-ных SAP DB, предоставляющее воз-можность более легкого и эффектив-ного отображения структур и потоков данных), что ещё больше привлекло к ней внимание.

В мае 2003 года SAP AG объявила о стратегическом партнёрстве с MySQL AB, и передачи последней СУБД (до-стигшей к тому времени версии 7.4) для разработки и продвижении реше-ний на рынопк. С 31 марта 2004 года SAP полностью прекратила самостоя-тельное распространение SAB DB, ог-раничившись поддержкой своих ста-рых партнёров.

Page 62: 033 Системный Администратор 08 2005

60

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

ПРОВОДИМ АУДИТ СИСТЕМЫС ПОМОЩЬЮ SNARE

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

много времени и ресурсов. Тем не менее просмотр регистрационных записей журналов

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

и использовать их для обнаружения вторжения.

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

Page 63: 033 Системный Администратор 08 2005

61№8, август 2005

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

ля защиты компьютерных систем в настоящее вре-мя разработано приличное количество разнообраз-ного программного обеспечения, выполняющего ка-кую-то определенную задачу. Антивирусы оберега-

ют пользователей от вирусов, межсетевые экраны блоки-руют нежелательный трафик, целый класс систем обнару-жения и остановки атак в той или иной мере противостоит действиям злоумышлеников.

События, происходящие в последнее время, показыва-ют пока только неэффективность традиционных средств защиты, не срабатывающих при появлении новых алгорит-мов нападения. Пока действительно хорошо справляются со своей задачей инструменты, позволяющие определить уже произошедшее проникновение. Поэтому в настоящее время особым вниманием пользуются проактивные сис-темы защиты, реагирующие на системные события, а не сравнивающие сигнатуры, сгенерированые специалиста-ми по безопасности. Такие средства аудита контролируют различные системные выводы и в результате дают полную картину происшедшего на контролируемом узле. А имен-но: кто, когда обращался, к какому файлу, заходил по сети, модифицировал те или иные данные, т.е. в итоге позволя-ют получить полную картину происшедшего на контроли-руемом компьютере. Во всех операционных системах ве-дутся более или менее подробные логи, но большей частью на основные события (за исключением модуля BSM (Basic Security Module) в Solaris), чего в большинстве случаев до-статочно. Но, например, в спецификациях выдвигаются дополнительные требования по регистрации событий для защищенных систем, начиная с класса С. К тому же такие возможности могут понадобиться в системах, предназна-ченных для обработки конфиденциальной информации. Естественно, отслеживая потенциально опасные события, можно предотвратить взлом и утечку информации, поэто-му одним из требований к таким системам является быст-рая реакция (под реакцией в данном случае подразумева-ется оповещение). Для централизованного сбора, хранения и обработки данных о событиях, происходящих на подчи-ненных системах, приветствуется отправка сообщений на удаленные системы.

Австралийская фирма, занимающаяся безопасностью, InterSectAlliance (http://www.intersectalliance.com/projects/Snare), в разработке SNARE – System iNtrusion Analysis and Reporting Environment основной упор сделала на регистра-цию как можно большего количества событий. В том чис-ле контролируются открытые сетевые соединения, чтение и запись в файлы и каталоги, модификация данных поль-зователя и групп, изменение программ. Система SNARE может быть сконфигурирована в двух вариантах. Первый позволяет обнаружить, когда какой-либо пользователь ос-тановил ключевую программу, переключился к учетной за-писи администратора или установил файлы в системный каталог. В другом варианте использования SNARE контро-лирует непосредственно определенные системные вызовы, например, открывающие или переименовывающие фай-лы, chroot, reboot, mkdir, mknod и другие операции. Систе-ма реализована на нескольких платформах с учетом осо-беностей каждой, при этом она может использоваться как автономный инструмент анализа или быть удаленным сен-

сором для центрального сервера: Linux (обеспечивает ау-дит, принятый в системах класса C2 или CAPP), Windows, Solaris, Irix, AIX, IIS Web Server (используется для обработ-ки файлов регистрации в реальном времени) и ISA Server. Распространяется SNARE под GNU Public License. В статье мы рассматриваем Linux-реализацию.

Как работает SNARESNARE в варианте для Linux использует три компонента:! Патч к ядру (в версиях 0.9.3 и выше), ранее для этих це-

лей использовался динамически загружаемый модуль ядра auditmodule.o, который можно было установить без перекомпиляции ядра. Разработчики стремятся сделать систему контроля как можно более легкой и универсаль-ной, способной работать как на маломощной рабочей станции, так и загруженном сервере, этим вызвано та-кое изменение в подходе.

! auditd – демон, являющийся front end к модулю (нахо-дится в пакете snare-core).

! snare – утилита графической конфигурации и просмот-ра отчетов (пакет snare-gui).

Модуль проверки, работая в пространстве ядра, отлав-ливает критические системные вызовы вроде «execve» (вы-полнение команды), «open» (открыть файл), «mkdir» (со-здать каталог) и отправляет результат к подпрограмме, ко-торая собирает всю информацию относительно процесса и пользователя, его запустившего или просто попытавше-гося выполнить рассматриваемый системный вызов. Этот контрольный модуль сохраняет собранную информацию во временном буфере, который и считывается демоном auditd. Демон читает данные от системы контроля через устройс-тво /proc/snare (ранее /proc/audit), преобразовывая двоич-ные контрольные данные в понятный текстовый формат, и отделяет информацию в ряд лексем, используя для отде-ления данных и улучшения дальнейшей обработки инфор-мации три разделителя: табуляцию, запятые и пробел. По-лучаем приблизительно следующее:

Кстати, реализация под Windows отличается работой всего двух компонентов: сервиса snarecore.exe и утилиты конфигурирования и получения отчетов snare.exe.

УстановкаДля установки SNARE под Linux понадобится два файла: snare-core и snare, а также патч к ядру (в настоящее время ведется работа по включению кода в основное ядро). Для некоторых дистрибутивов (RHEL, Fedora, Debian) на сай-те доступны ссылки на прекомпилированые пакеты, в том числе и подготовленные ядра, которые и рекомендуется ис-пользовать. В целях эксперимента установим SNARE, ис-пользуя исходные тексты.

Скачиваем версию ядра, под которую имеются патчи и сам патч.

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 user,leigh(500),users(500),leigh(500),users(500) process,478,sh path,/usr/bin/links arguments,links return,0 sequence,11256

Page 64: 033 Системный Администратор 08 2005

62

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

Накладываем патч, конфигурируем ядро.

И в «General Setup» включаем пункт «SNARE C2 Auditing».Далее компилируем как обычно и устанавливаем за-

грузчик. Затем скачиваем с сайта проекта SNARE архивы snare-core-0.9.7.tar.gz и snare-gui-0.9.6.tar.gz.

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

И запускаем, набрав snare в окне терминала или через меню KDE (в Gnome «Система → Snare → Event Logging»).

Инсталляция под Windows заключается в получении одного файла SnareSetup.exe и запуске его обычным спо-собом.

КонфигурацияВсе настройки демона хранятся в файле /etc/audit/audit.conf с вполне понятной структурой. Лучший способ изме-нения настроек – использование графической утилиты SNARE (рис. 1).

После запуска которой заходим в пункт «Setup → Audit Configuration» и устанавливаем необходимые параметры во вкладках:

! Auditing Control – метод контроля (Objectives или Kernel), место, куда отправлять логи (локальный файл, на уда-ленный хост или оба варианта) и параметры настрой-ки сети, необходимые для посылки логов (имя локаль-ного узла, IP-адрес или DNS-имя удаленного, UDP-порт на удаленном компьютере, куда будут посылаться сооб-щения).

! Kernel events – тип ревизии, может быть или события яд-ра, или настроенные пользователем фильтры. В данном пункте выбираются все те системные вызовы, которые необходимо отслеживать, при этом в журнал будут запи-саны все такие вызовы без какой-либо дополнительной фильтрации, при установке большего количества конт-ролируемых вызовов журнал начнет быстро заполнять-ся, причем, как правило, будет много лишней информа-ции. Этот метод ревизии больше подходит для класси-ческого «C2»-стиля аудита, в котором все запросы долж-ны быть зарегистрированы.

! Objectives (рис. 2) – более усовершенствованный метод аудита через определение объектов контроля и слежения за всеми изменениями состояния или обращения к ним.

При этом возможно задание любых правил и любого ко-личества объектов. Для этого нажимаем «Add an Objective» и заполняем значения пяти параметров. Среди которых ин-дентификация отслеживаемого события (открытие, запись, считывание, удаление, модификация атрибутов, запуск или остановка программ, файлов или каталогов, открытые или разрешенные сетевые соединения), путь или имя объекта (возможно применение регулярных выражений), фильтр со-бытий (удалось, не удалось или оба), пользователи и уро-вень опасности, который будет соответствовать при наступ-лении этого события (critical, priority, warning, information и clear). Первоначальная настройка подходит для большинс-тва случаев, т.к. контролирует наиболее важные систем-ные файлы вроде /etc/passwd, /etc/shadow, создание новых пользователей и групп, подключение по сети, использова-ние su, изменение файлов и каталогов /sbin, /usr/sbin, /bin и /usr/bin, изменения в /etc и /var/log и пр. Например, два ни-жеприведенных правила зарегистрируют попытку доступа к файлу /etc/shadow любым пользователем, кроме root, при этом в зависимости от результата событию будет присво-ен разный уровень опасности. Естественно, что если такая попытка будет успешной, то это свидетельствует о пробле-мах и такому событию необходимо присвоить наивысший уровень (основные параметры файла описаны в докумен-

Рисунок 2. Просмотр объектов контроля и слежения

# cd /usr/src; wget -c http://www.kernel.org/pub/linux/ ↵ 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

# cd linux-2.6.11# patch -p0 < snare-0.9.7-2.6.11.7.diff# make menuconÞg

# tar -xzvf snare-core-0.9.7.tar.gz # cd snare-core-0.9.7# make clean# make# make install# /etc/init.d/snare start

Starting /usr/sbin/auditd:SNARE audit daemon: version 0.97 starting upInterSect Alliance Pty Ltdhttp://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/

Рисунок 1. Графическая утилита позволяет просмотреть события в реальном времени и настроить систему

Page 65: 033 Системный Администратор 08 2005

63№8, август 2005

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

И еще одна полезная возможность заложена в SNARE – это отправка логов на удаленный узел по протоколу UDP, которая может помешать хакерам скрыть свое пребывание чисткой логов, хотя при контроле большого количества ма-шин и параметров это может существенно забить сеть па-кетами. Для этого в «Auditing Control» выбираем пункт «Log events to the networked host and a local file» и далее устанав-ливаем имя узла и порт (по умолчанию 6161), которому будут отправляться сообщения. На сервере, предназначенном для сбора всех логов, запускаем Perl-скрипт auditserver.pl (лежит в пакете snare-core), в котором нужно изменить перемен-ную $ServerPort, установив нужное значение, совпадающее с таковым у клиентов, и каталог, куда будут складываться сообщения. Cервер в каталоге /var/log/audit создает отде-льные файлы для каждого клиента вида YYYYMMDD-host.name.LinuxAudit. То есть в итоге получаем несколько фай-лов вида /var/log/audit/20050821-host.com.LinuxAudit. В даль-нейшем эти файлы можно заархивировать для истории или распаковать при помощи скрипта extract.pl, который можно найти в документе «Guide to SNARE for Linux», потом прос-то запуская его вручную или при помощи cron.

На данный момент не поддерживается какая-либо защи-та при передаче файлов журналов, что дает возможность злоумышленику подделать логи либо провести элементар-ную DOS-атаку, поэтому пользоваться возможностью от-правки логов в таком варианте необходимо осторожно и в защищенных сетях. Хотя стоит отметить, что отправка жур-налов на централизованый сервер разработчиками ориен-тируется больше при взаимодействии с SNARE Server (http://www.intersectalliance.com/snareserver/index.html). Основное назначение которого сбор и анализ информации, постав-ляемой с различных систем. С его демо-версией можно оз-накомиться на сайте проекта. Для централизованого сбо-ра и отправки журналов с других систем с ним в паре бу-дет работать SNARE Reflector, разработка которого ведет-ся в настоящее время.

Кстати, положительной стороной проекта является хоро-шая документация, помогающая разобраться в работе.

Как видите, в отличие от средств контроля целостности системы, которые запускаются время от времени, SNARE позволяет контролировать происходящее практически в реальном времени, что существенно повышает общую бе-зопасность. Также являются интересными сочетания вро-де «IDS+SNARE» или «honeypots+SNARE». Первый вари-ант позволяет получить более подробную информацию об инциденте и может помочь при обработке последствий. Во втором случае предоставляется хорошая возможность изу-чить инструменты и действия взломщиков. Также подобные средства могут понадобиться тем, кому по роду деятель-ности нужна операционная система класса С2.

Удачи.

те «Guide_to_SNARE_for_Linux.pdf» в разделе «Appendix C – Configuration File Description»).

Если оставить одну строку, то это снизит эффективность системы, и действительно опасное предупреждение может просто затеряться среди подобных сообщений.

Для более тонкой настройки можно добавить индиви-дуальный контроль файлов, в которых прячутся rootkits (их список большой, вот некоторые: login, telnet, ftp, netstat, ifconfig, ls, ps, ssh, find, du, df, sync, reboot, halt и shutdown) и основные настроечные системные и сетевые файлы /etc/resolv.conf, /etc/hosts, /etc/lilo.conf, /boot/grub/grub.conf, и пр. Список основных системных вызовов и их значения приве-ден в разделе «Appendix A – Events Audited».

Единственное, о чем следует помнить, – это то, что при увеличении контролируемых параметров увеличивается и потребление системных ресурсов, на маломощных систе-мах этот показатель может быть критичным.

В Windows нет разделения на Objectives или Kernel, до-ступна только Audit Reporting Objectives, и в силу специфи-ки системы отслеживаются другие события (logon, logoff, обращение к файлу или каталогу, остановка и запуск про-цесса, использование прав пользователя и администрато-ра, изменение политики безопасности, перезагрузка, ос-танов системы и некоторые другие).

После внесения всех необходимых настроек необхо-димо перезапустить сервис «Activity → Apply and Restart Audit», после чего в главном окне программы будут выво-диться все события, попадающие под установленные пра-вила. Щелкнув дважды мышкой по представляющему ин-терес событию, можно получить дополнительную информа-цию. Используя «Prev» и «Next», можно двигаться вперед-назад, просматривая события. Все, на мой взгляд, просто и понятно. Просмотреть статус работы SNARE можно, вы-брав пункт «Bид → Audit Status», при этом можно увидеть об-щее количество событий, обработанных модулем ядра без фильтрации, а также ID процесса демона, версию SNARE и активность демона.

Удаленное управлениеК сожалению, версия под Linux лишена на данный момент возможности удаленного управления при помощи веб-ин-терфейса. А вот запустив SNARE под Windows и набрав в строке браузера IP-адрес или имя компьютера, получаем не только возможность сконфигурировать его удаленно, но и информацию о пользователях и группах локальных и домена. Для подстраховки лучше зайти предварительно в пункт «Setup → Remote Control Configuration» и выставить IP-адрес, с которого можно удаленно заходить на компью-тер и пароль для получения доступа, здесь же можно вы-брать и порт, на котором работает сервер.

Но в Linux можно просто зайти на удаленную систему при помощи SSH и запустить на ней клиента. Если на под-контрольной системе не используется X-Window, то перед запуском экспортируем переменную DISPLAY.

criticality=4 event=open(.*),mkdir,mknod,link,symlink ↵ return=Success user!=root match=^/etc/shadow$criticality=2 event=open(.*),mkdir,mknod,link,symlink ↵ return=Failure user!=root match=^/etc/shadow$

myguisystem# ssh auditedsystem..auditedsystem# /bin/su -[password]auditedsystem# export DISPLAY=myguisystem:80auditedsystem# snare &

#cat /var/log/audit/20050821-host.com.LinuxAudit | ↵ ./extract.pl

Page 66: 033 Системный Администратор 08 2005

64

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

Хакерская мудрость гласит: «взломать можно все, это только вопрос времени». Программный

продукт, ориентированный на массо-вый рынок, такая ситуация вполне уст-раивает. Какой-то процент пользовате-лей покупает программу, какой-то нет. Но для специализированных програм-мных комплексов (расчет прецизион-ного литья или звездных спектров), ко-личество пользователей которых из-меряется какими-то тысячами, такой подход уже неприемлем. Потенциаль-ный рынок настолько мал, что каждая нелегальная копия чувствуется весьма болезненно. Значит, надо защищать так, чтобы не взломали, но как?

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

Основные концепции защитыГлавное свойство защиты – это на-дежность (не путать со стойкостью

ко взлому). Защита должна уверенно работать на всем спектре програм-мно-аппаратного обеспечения с за-ранее непредсказуемыми свойства-ми. Антиотладочные приемы следу-ет использовать с большой осторож-ностью или не использовать вообще, поскольку от них слишком много про-блем. К тому же защита должна быть проста в реализации и отладке. Напри-мер, если часть функционала вынесе-на в микроконтроллер, смонтирован-ный на отдельной печатной плате, под-ключаемой через PCI-шину или COM/USB/LPT-порт, взлом становится не только нерентабельным, но и практи-чески невозможным. Конечно, при ус-ловии, что микроконтроллер не позво-ляет считывать ПЗУ (некоторые при-емы аппаратного взлома можно най-ти на страничке Сергея Скоробога-того: http://www.cl.cam.ac.uk/~sps32). Однако отладить такой комплекс бу-дет намного сложнее, чем взломать, поэтому для практического примене-ния он непригоден. В идеале защита вообще не должна требовать никако-го «внешнего» оборудования, а это значит, что ее код заведомо будет до-ступен для анализа и модификации (см. рис. 1, 2).

Защита не может отталкиваться ни от серийных номеров, ни от ключевых

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

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

совершенствуются с каждым днем,

но и разработчики защитных механизмов

не дремлют, тем не менее новые защиты

тут же ломаются. Почему?

Вашему вниманию предлагаем обзор

наиболее популярных ошибок

и конструктивных просчетов

с рекомендациями по их устранению,

а также законченный алгоритм

чрезвычайно стойкой защиты,

не копируемой никаким копировщиком.

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

файлов, поскольку всегда найдется пользователь, пожелавший разделить себя с миром, и, в общем-то, по-своему он будет прав. Черные списки «засве-ченных» серийных номеров и прочие организационные меры, как показы-вает практика, недостаточно эффек-тивны и со своей задачей не справ-ляются.

Также недопустимо привязывать-ся к оборудованию, поскольку потре-бители очень не любят, когда ограни-чивают их свободу. К тому же, если стоимость защищенного комплекса составляет хотя бы 500$, хакеры мо-гут клонировать весь компьютер це-ликом, особенно если это будут ки-тайские хакеры (цены на оборудова-ние в Азии намного ниже европейс-ких). Наиболее популярным объек-том привязки служит серийный но-мер жесткого диска и MAC-адрес се-тевой карты, которые легко изменить (в частности, для жесткого диска мож-но воспользоваться комплексом PC-3000 от ACE Laboratory – www.acelab.ru). Остальные же характеристики «железа» еще менее уникальны и в пределах одной партии практически идентичны друг другу. К тому же не-льзя забывать про виртуальные ма-шины (VMWare, Virtual PC и т. д.), при-вязка к которым лишена всякого смыс-

Page 67: 033 Системный Администратор 08 2005

65№8, август 2005

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

ла. Можно, конечно, распознать нали-чие виртуальной машины и отказать-ся работать под ней, только это не вы-ход. Виртуальных машин существует огромное множество, и каждая из них детектируется по-своему, к тому же для большинства из них существуют специальные «патчи», предотвраща-ющие детектирование. В общем, вло-женные в защиту усилия окажутся не-рентабельными.

Привязываться можно только к но-сителю – дискете, лазерному или DVD-диску, карте FLASH-памяти и т. д. Это в наименьшей степени ущемля-ет права потребителей и практичес-ки не создает непреодолимых не-удобств, к тому же качественно защи-щенный носитель чрезвычайно труд-но скопировать. Существует множес-тво хакерских групп, специализиру-ющихся на взломе программного ко-да, но очень немногие разбираются в устройстве носителей на профессио-нальном уровне.

Весь вопрос в том, какой носи-тель выбрать. Дискеты отбросим сра-зу. Их время уже прошло. DVD-дис-ки только набирают силу, и требовать обязательно наличия DVD-привода на целевом компьютере по меньшей ме-ре негуманно. То же самое относит-ся и к FLASH-картам. Остается толь-ко CD. Вот к нему-то мы и будем при-вязываться.

Обзор популярных средств защитыМеханизмы привязки к CD-ROM мож-но разделить на три большие группы. В первую (и наиболее древнюю) попа-дают защиты, внедряющие ключевую метку в служебные структуры данных, не копируемые штатными копировка-ми. Это может быть и область предза-зора первого трека (first pre-gap), и суб-канальные данные, также называемые данными подканалов (subchannel data), и т. д. Достоинства – высокая совмес-

тимость с различными моделями при-водов и предельная простота програм-мной реализации. Недостатки – при подготовке диска к тиражированию придется долго объясняться с сотруд-никами завода. Обычно им переда-ют готовый диск или образ, содержа-щий только пользовательские данные (он же образ типа ISO9660, хотя это на-звание не вполне корректно), здесь же требуется «сырой» (RAW) образ в фор-мате 2352/96, который поддерживает далеко не всякое оборудование! За-частую производитель игнорирует на-ши требования, и вопреки всем обе-щаниям и договорам с «конвейера» сходят диски, записанные стандарт-ным образом, то есть без ключевых меток, а для заказчика это катастро-фа! (Поверьте моему горькому опы-ту, это довольно часто встречается). Но это все равно напрасно, посколь-ку такие защиты уже давно копируют-ся специализированными копировщи-ками. Исключение составляет ключе-вая метка в Q-подканале аудиотрека. Без спецоборудования она не копиру-ется в принципе! Но это уже тема для другого разговора.

Вторая группа защитных механиз-мов основана на нестандартных фор-матах диска (необычная длина секто-ра, нестандартные номера треков, ис-каженные заголовки и т. д.). Все они крайне конфликтны и отказывают-ся идти на многих моделях приводов, к тому же при тиражировании дисков возникают очень серьезные пробле-мы, намного более серьезные, чем в первом случае. Как правило, требу-ется специальное (и весьма дорогос-тоящее!) оборудование, оправдываю-щее себя только на больших тиражах. Но эти вложения вряд ли окупятся, пос-кольку копировщики защищенных дис-ков уже давно справились с нестан-дартными форматами, так что не бу-дем на них останавливаться и двинем-ся дальше.

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

Третью группу возглавляют защи-ты, привязывающиеся к физической структуре носителя. Их можно разде-лить на две подгруппы. Первая выде-ляет на диске некоторые более или ме-нее уникальные характеристики, к ко-торым, собственно, она и привязыва-ется. Вторая же, не собираясь ждать милости от природы, самостоятельно формирует трудновоспроизводимые дефекты на диске. Возьмем извест-ную защиту Laser Lock, которую лег-ко опознать по наличию крошечной «дырки», проделанной лазером точ-но посередине спиральной дорожки (аналогичный способ был широко из-вестен еще во времена дискет, при-чем их дырявили не только лазером, но еще и гвоздем). На первый взгляд тут должен образоваться BAD-сектор, однако практика показывает, что диск читается без проблем. А как же «ды-ра»? Все дело в кодах Рида-Соломо-на, корректирующей способности ко-торых вполне хватает для исправле-ния «дыры». Но если отключить кор-рекцию ошибок, то в секторе сразу же обнаружатся «дефективные» би-ты, причем начало разрушенной об-ласти будет соответствовать позиции дырки в секторе. Это если объяснять на пальцах.

На самом деле все намного инте-реснее и сложнее. Структура хранения данных на лазерном диске такова, что физически смежные биты расположе-ны на значительном удалении друг от друга, зачастую даже в различных сек-торах! Информация как бы «размазы-вается» вдоль спиральной дорожки, чтобы противодействовать царапинам и дефектам. Дело в том, что корректи-рующие коды Рида-Соломона отлично справляются с одиночными ошибками, но намного хуже – с групповыми. Что-бы ослабить влияние дефектов, при-шлось прибегнуть к перемешиванию. А это значит, что «дыра» затрагивает не один сектор, а целую группу секто-

Page 68: 033 Системный Администратор 08 2005

66

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

ров! Это дает возможность распознавать «виртуальные» BAD-сектора, имитируемые копировщиками. Поразитель-но, но ни одна из коммерческих защит такой проверки не выполняет! Тем не менее копировщики защищенных дис-ков уже давно научились обходить Laser Lock, имитируя да-же такие «тонкие» эффекты, как увеличение времени чте-ния «продырявленных» секторов и т. д., так что такой при-ем подходит только для борьбы со штатными копировщи-ками. К тому же очень трудно найти завод, располагающий соответствующим защитным оборудованием. Вообще-то в отсутствие лазера можно воспользоваться и обыкновен-ным маркером, однако он подходит только для крошечных тиражей (см. рис. 3).

Остается последний тип защиты – измерение физи-ческих характеристик спиральной дорожки (также назы-ваемый снятием топологии). По такому принципу, в част-ности, работают CD-Cops, SecureROM 4x, StarForce и не-которые другие защиты. Методика отработанная, мож-но даже сказать вылизанная до зеркального блеска и не-плохо себя зарекомендовавшая. Судите сами. В образ за-

щищенного диска не вносится никаких изменений, и для его тиражирования можно использовать абсолютно лю-бое оборудование, в том числе и бытовой CD-R/RW-ре-кордер. Скопировать физическую структуру спиральной дорожки нереально (на CD-R/RW-дисках уже нанесена предварительная разметка, причем у каждого типа бол-ванок своя), и хотя ее можно проэмулировать, от эмуля-торов легко защититься (чуть позже мы покажем как). По правде говоря, существует возможность подбора болван-ки с похожей спиральной структурой, однако, если привя-зываться не к одной, а нескольким физическим характе-ристикам, вероятность подобрать «правильный» диск бу-дет крайне мала.

В принципе можно воспользоваться готовым защит-ным пакетом, но, во-первых, за него придется платить. Во-вторых, все вышеперечисленные защиты легко копи-руются в режиме эмуляции копировщиками Clone CD и Alcohol 120%.

Исключение составляет StarForce Professional Edition, непосредственно скопировать который еще никому не уда-лось, однако (и это в третьих!) защита слишком агрессивно вгрызается в операционную систему, вызывая множество проблем у легальных пользователей. Разработчики харак-теризуют себя как людей с хакерским прошлым, сильных в системном программировании. Что касается прошлого – с этим можно согласиться. Операционную систему они зна-ют лучше, чем свой задний двор. Но вот программировать умеют едва ли. Программирование – это в первую очередь проектирование. А проектирование – это учет рисков. Ни-какой конструктор не позволит себе строить мост по непро-веренным формулам или проводить на нем научные экс-перименты, гадая, произойдет обрушение на этот раз или не произойдет. Программа, ориентированная на массовое применение, просто не может пользоваться недокументи-рованными возможностями и прочими приемами нетради-ционного программирования (в народе именуемых хаками). У себя в заднем дворе делайте, что хотите, но вот пользо-вателю требуется нормальный продукт.

А давайте запрограммируем защиту самостоятельно! Рисунок 3. Лазерный диск, защищенный Laser Lock(«снимок» получен сканером HP 1200)

Листинг 1. Определение версии VMWare

mov eax, 564D5868h ; VMWARE _ MAGICmov ecx, 0Ah ; Get VMware versionmov edx, 5658h ; VMWARE _ PORTin eax, dx

Детектирование VMWareАвтору известны по меньшей мере три способа обнаружения VMWare.

Во-первых, по оборудованию: вир-туальные машины несут на своем бор-ту довольно специфический набор же-леза, практически не встречающийся в живой природе. Это:! видеокарта VMWare Inc [VMWare

SVGA II] PCI Display Adapter;! сетевая карта: Advanced Micro

Devices [AMD] 79c970 [PCnet 32 LANCE] (rev 10);

! жесткие диски: VMWare Virtual IDE Hard Drive и VMWare SCSI Controller.

Опросив конфигурацию оборудо-

вания, защищаемая программа сразу поймет, куда ее занесло.

Во-вторых, виртуальные сетевые карты имеют довольно предсказуе-мый диапазон MAC-адресов, а имен-но: 00-05-69-xx-xx-xx, 00-0C-29-xx-xx-xx и 00-50-56-xx-xx-xx. Защите достаточ-но выполнить команду «arp -a», чтобы распознать хакерские планы.

В-третьих, VMWare имеет коварный backdoor, оставленный разработчика-ми для служебных целей и управляе-мый через порт 5658h, при этом в ре-гистре EAX должно содержатся «маги-ческое» число 564D5868h.

Ниже приведен фрагмент кода червя Agobot, определяющий версию VMWare:

Для маскировки виртуальной ма-шины Костей Кортчинским (Kostya Kortchinsky) был написан специаль-ный патч, изменяющий идентифи-кационные строки оборудования, MAC-адреса и магический номер backdoor (http://honeynet.rstack.org/tools/vmpatch.c).

Подробнее о способах детектиро-вания виртуальных машин можно про-читать в подборке статей «Know your Enemy» (www.honeynet.org/misc/files/papers.tar.gz).

Page 69: 033 Системный Администратор 08 2005

67№8, август 2005

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

Ядро измерителя структуры спиральной дорожки занимает всего несколько строк на Си. Вместе с обвязочным кодом выходит около десятка… Полный цикл разработки вмес-те с отладкой легко укладывается в пару недель. Так сто-ит ли за это платить?

Star-force своими рукамиСпиральная дорожка лазерных дисков очень похожа на грампластинку, только начинается не снаружи, а изнутри, наматываясь от центра к краю. Оптическая головка, удер-живаемая в магнитном поле «звуковой катушки», движется на «салазках» поперек спиральной дорожки. Сама дорож-ка состоит из секторов с данными и каналов подкода. Но-мера секторов находятся как в заголовках самих секторов, так и в каналах подкода, «размазанных» вдоль спиральной дорожки. Для грубой наводки на требуемый сектор исполь-зуются салазки и каналы подкода, а для точной – отклоне-ние в магнитном поле и секторные заголовки.

Просто взять и измерить структуру спиральной до-рожки нельзя, но можно сделать вот что: допустим, голо-вка считывает сектор X, а следом за ним сектор Y. Если угол XOY, образованный центром (O) диска, секторами X и Y составляет порядка ~15 град., а сами сектора распо-ложены на соседних витках спирали, то приводу достаточ-но всего лишь немного отклонить головку и через мгно-вение сектор Y сам падает в руки, как перезревшее яб-локо – диск ведь вращается! Если же угол XOY составля-ет менее ~15 град., тогда за время перемещения головки сектор Y уже «уплывет» и приводу придется ждать целый оборот лазерного диска, пока он не достигнет оптической головки (см. рис. 4)!

Замеряя время чтения различных пар секторов, мы мо-жем приблизительно определить их взаимное расположе-ние на спиральной дорожке. У каждой партии диска для заданных секторов X и Y оно будет своим (ведь степень «закрутки» спирали неодинакова и варьируется от одного производителя к другому). Чтобы побороть упреждающее считывание (которым «страдают» многие приводы), за-щита должна читать сектора в порядке убывания их LBA-адресов. Также она должна измерять скорость вращения привода, чтобы, во-первых, определить постоянство вре-менных замеров (пляшут ли они как пьяные человечки или нет), а во-вторых, скорректировать формулу для вычисле-ния угла, поскольку, чем быстрее вращается диск, тем ско-рее «уплывает» сектор.

Исходный текст «измеряющей» программы приведен ниже:

Рисунок 4. Когда угол между секторами X и Y составляет~15 град. при переходе на соседний виток, сектор Yсразу же «подлетает» к оптической головке (рисунок слева)при меньшем значении угла сектор Y успевает уплыть,и головка вынуждена ждать целый виток

Листинг 2. Макет программы sf.c для снятия топологий

//-[чтение сектора с диска]---------------------------------// ARG:// CD указатель на строку с именем привода// (например, "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-счетчика]------------------------------------unsigned int A(){ _ _ asm{ _ emit 0xF ; RDTSC _ emit 0x31 }}

#deÞne argCD v[1]

// КОНФИГУРАЦИЯ//-----------------------------------------------------------// номер первой точки измерения (LBA-адрес)// данная утилита измеряет топологию только по одной// точке, что не есть хорошо, т.к. легко подобрать похожий// диск, для уверенности следует выбрать несколько точек:// в начале, середине и конце диска#deÞne _ CFG _ BGN _ SEC _ 17699

// количество секторов для измерения// должно быть не меньше утроенного количества секторов// на виток в данной точке измерения// (см. _ CFG _ BGN _ SEC _ ) число витков спирали N// с поперечной плотностью D витков/мм от радиуса R1// до радиуса R2 определяется формулой: N = (R2- R1) * D#deÞne _ CFG _ LEN _ SEC _ 0x669

// максимальный шаг приращения// в принципе должен быть равен удвоенному количеству// секторов на данном витке спирали, что увеличивает// точность измерений, но можно использовать и значение// _ 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 _ , ↵ ##b= _ CFG _ BGN _ DEL _ ; ##a > _ CFG _ BGN _ SEC _ ; ↵ ##a-=##b)

main(int c, char** v){

Page 70: 033 Системный Администратор 08 2005

68

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

Программа использует библиотечку SCSIlib, разрабо-танную автором для низкоуровневого управления приво-дами с прикладного уровня. Ее можно бесплатно скачать с моего ftp-сайта автора (cм. «nezumi ftp»).

Запуск программыПри запуске без аргументов программа выдаст краткую справку по ключам, а при наличии ASPI-драйвера автома-

тически просканирует системную шину и выведет адреса и названия всех обнаруженных приводов.

Это может выглядеть, например, так:

Ключ «СВ», отвечающий за выбор привода, задает не только сам привод, но и интерфейс взаимодействия.

Если имя привода выглядит как название устройства (т.е. начинается с префикса «\\.\»), то управление будет осу-ществляться через интерфейс SPTI. Для этого вы должны иметь Windows NT/2000/XP и права администратора. Если имя выглядит как адрес устройства на шине или как часть идентификационной строки привода, то управление будет осуществляться через интерфейс ASPI, для работы через который необходимо установить ASPI-драйвер (его мож-но бесплатно скачать с сервера компании Adaptec – http://www.adaptec.com).

Например, «sf.exe TEAC» (или «sf.exe 2.1») заставляет программу работать с приводом TEAC (адрес на ASPI-ши-не – 2.1) через ASPI-интерфейс, а «sf.exe \\.\G:» – с приводом «G:» через SPTI-интерфейс. Программа выводит данные в форме таблицы, предназначенной для импорта в MSGraph, причем вывод оптимизирован для перенаправления в файл (на экране все выглядит кошмарно), поэтому правильный вызов выглядит примерно так: «sf.exe \\.\G: > C:\1.txt».

По окончании работы программы запускаем MS Word, от-крываем меню «Вставка», там будет «Рисунок» и «Диаграм-ма». В меню «Правка» находим «Импорт», «Тип файлов» → «*.txt», «Формат данных» → «С разделителем», «Начать им-порт» со строки 1, «Далее >>», «Символом разделителя яв-ляется»: «[x] символ табуляции», «Далее >>», «Формат дан-ных» → «Общий» и жмем кнопку «Готово». Далее действу-ем по своему вкусу, то есть по обстановке.

Cбор топологий, испытания защитыи обсуждение результатовВставляем подопытный диск в привод (пусть это будет, на-пример, диск, прилагаемый к журналу «Компьютер пресс» 2005/07, условно обозначенный нами как диск «А») и сни-маем с него топологию (см. рис. 5). Мы получаем харак-терную «пилу», точки минимума и максимума которой ука-зывают на то, что данная пара секторов лежит на одной прямой.

Очевидно, что на других дисках те же самые сектора бу-дут иметь совсем другой угол, поэтому минимумы и мак-симумы сместятся на некоторое расстояние. Берем диск Microsoft Visual Basic 2005 (обозначенный нами как «B»), прилагаемый к тому же самому журналу, и запускаем про-грамму еще раз (см. рис. 6).

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"\ "-------------------------------------\n"); read _ from _ cd("?.?", buf,0); return 0; } // этап первый //---------------------------------------------------- // читаем случайные сектора для разгона привода fprintf(stderr,"%s\n", _ TEXT _ SPINEUP _ ); for (a = 0; a < 0x69; a++) { read _ from _ cd(argCD, ↵ buf,rand()% _ END _ SEC _ ); fprintf(stderr,"\r%02d%%",a*100/0x69); } // этап второй //---------------------------------------------------- // определяем количество секторов на дорожке // и стабильность вращения привода, алгоритм // определения количества секторов: читаем сектора // задом наперед, с циклически увеличивающимся // шагом, наименьшее значение шага, при котором // время чтения секторов будет минимальным, и будет // равно количеству секторов на данном витке спирали // (в данной версии не реализовано, поскольку // слишком громоздко и не наглядно) // // алгоритм определения стабильности: читаем сектора // с шагом, равным количеству секторов на данном // витке спирали, и оцениваем разброс; // если разброс будет слишком большим // (превышает 10%-15%), следует уменьшить скорость // привода (как это сделать, показано в CD.snail.c) fprintf(stderr,»\r%s\n», _ TEXT _ TEST _ ); for (a = _ END _ SEC _ ; a > _ CFG _ BGN _ SEC _ ; ↵ a-= _ CFG _ xWHELL _ ) { A1=A(&c);read _ from _ cd(argCD, ↵ buf,a);A2=A(&c); fprintf(stderr,"\r%02d%%",( _ END _ ↵ SEC _ -a)*100/ _ CFG _ LEN _ SEC _ ); } // этап третий (важнейший!) //---------------------------------------------------- // производим, собственно, измерения // (внимание: сюда еще необходимо добавить // «сглаживание» полученных данных) fprintf(stderr,"\r%s\n", _ TEXT _ ANGLE _ ); // выводим шапку таблицы printf("delta:"); FH(a,b) { printf("\t%d",a); ↵ FB(b); } printf("\ntime:"); // измеряем и тут же выводим результаты FH(a,b) { A1=A(&c); read _ from _ cd("TEAC", ↵ buf,a); A2=A(&c); printf("\t%d",(A2-A1)/100); fprintf(stderr,"\r%02d%%",( _ END _ ↵ SEC _ -a)*100/ _ CFG _ LEN _ SEC _ ); FB(b); } printf("\n"); // всему конец fprintf(stderr,"\r%s\n", _ TEXT _ END _ ); return 0;}

Листинг 3. Результат запуска программы без ключей

>sf.exe

USAGE:sf.exe CD

SCSI_INQUITY via ASPI32-------------------------------------0.0 <-- ELBY DVD-ROM 1.0 (5)1.0 <-- ST380011A 3.06 (0)2.0 <-- IBM-DTLA-307015 TX2O (0)2.1 <-- TEAC CD-W552E 1.09 (5)3.0 <-- AXV CD/DVD-ROM 2.2a (5)3.1 <-- AXV CD/DVD-ROM 2.2a (5)3.2 <-- AXV CD/DVD-ROM 2.2a (5)

Page 71: 033 Системный Администратор 08 2005

69№8, август 2005

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

Пилообразная кривая действительно сместилась при-близительно на половину периода. Так же слегка измени-лась и амплитуда колебаний, но нас она не интересует. Бу-дем отталкиваться не от абсолютных, а от относительных значений, т.е. от LBA-адресов «изломов» кривой (абсолют-ные значения находятся в прямой зависимости от «окружа-ющей среды» и потому ненадежны). Учитывая, что положе-ния максимумов/минимумов зависят не только от тополо-гии диска, но еще и от скорости вращения привода, необ-ходимо расширить доверительный интервал до нескольких секторов. А теперь возьмем диск с другого номера «Ком-пьютер Пресс» (диск «C») и сравним его топологию с дис-ком «A» (см. рис. 7).

Топологии обоих дисков полностью совпадают! Это оз-начает, что диски «Компьютер Пресс» штамповались на одном заводе, а диск с Visual Basic на другом! Любопыт-ное наблюдение, не правда ли? С помощью этой програм-мы мы можем не только защищаться от копирования, но и проводить интересные исследования (кстати, эта програм-ма была специально написана мной по заказу американс-кого полицейского управления, занимающегося борьбой с пиратством. Обычная история – продавец заказывает пар-тию лицензионных дисков и затем перемешивает их с «пи-раткой». Как установить факт обмана? Вот тут-то структу-ра спиральной дорожки и выручает!).

Демонстрационная программа снимает топологию только в одной точке (на участке между адресами 27532 и 18082). Разумеется, это ненадежно и при желании мож-но подобрать диск с похожей топологией (для этого доста-точно взять приблизительно 10 болванок от разных произ-водителей). Для усиления защиты настоятельно рекомен-дуется снимать топологию по меньшей мере в трех точках – начале, конце и середине диска. В этом случае найти по-хожий диск будет намного труднее.

Защита от анализаСуществует по меньшей мере два способа взлома: ко-пирование диска специализированными копировщиками или анализ защитного кода с последующей модификаци-ей (он же bit hack). Создать некопируемый диск это толь-ко полдела. Еще необходимо защитить свою программу от анализа.

Обычно анализу противостоят шифровкой кода/дан-ных, однако, это не слишком-то удачное решение, ведь перед выполнением программы ее все равно приходится расшифровывать. Хакеру остается всего лишь дождаться этого момента и снять дамп. Можно, конечно, расшифро-вывать программу по частям или использовать несколь-ко независимых расшифровщиков, но трудоемкость раз-работки защиты в этом случае практически не отстает от сложности взлома.

В последнее время большое распространение получил

некрасивый, но убойный подход, основанный на генерации «мусорного кода», внедряемого в защищаемую програм-му. Похожая техника используется во многих полиморфных вирусах, из которых можно «выдрать» уже готовые «движ-ки» (engine). Мусорный код чрезвычайно затрудняет ана-лиз, делая его практически невозможным. Допустим, клю-чевая функция программы компилируется в тысячу ма-шинных команд. Исходя из «крейсерской» скорости дизас-семблирования 1 команда в секунду, хакер сможет «про-честь» (только прочесть! не проанализировать!) весь код

Рисунок 5. Топология диска «А»

Рисунок 6. Топология диска «B»

Рисунок 7. Сравнение топологий дисков «A» и «C»

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

Page 72: 033 Системный Администратор 08 2005

70

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

за ~15 минут, но после разбавления функции миллионом мусорных инструкций, чтение листинга потребует свыше 10 суток напряженной работы, а полный анализ растянет-ся на долгие годы.

Звучит прекрасно, но без подводных камней не обхо-дится. Во-первых, если перестараться, то скорость про-граммы упадет в разы, причем нужно учитывать, что да-леко не у всех стоит Pentium-4, поэтому «замусоривать» можно только редко вызываемые функции. Во-вторых, му-сорный код должен быть достаточно нетривиальным, что-бы его «мусорность» не бросалась в глаза. Использование XCHG EBX,EBX или MOV EAX,EAX легко отсекается анали-заторами. В-третьих, в некоторых случаях анализ защит-ного алгоритма необязателен и хакер может взломать про-грамму и так (см. «Защита от мониторов шины»), поэтому линия обороны должна быть хорошо продуманной и одно-родной на всем своем протяжении. Бронебойные ворота бесполезны, если вокруг нет стен.

Еще лучше применять P-код, реализовав «виртуаль-ную машину» и написав свой собственный интерпрета-тор. Поскольку программировать в P-коде очень непро-изводительно и неудобно, рекомендуется реализовать транслятор, «пережевывающий» исходный текст, напи-санный на Паскале или Си, и выдающий последователь-ность инструкций Машины Тьюринга, Сетей Петри, Стрел-ки Пирса и т. д. Чем ниже уровень абстракции, тем лучше для нас и хуже для хакера. Программа, состоящая из не-скольких сотен строк, превращается в десятки тысяч или даже миллионы инструкций Тьюринга, декомпиляторов с которой не существует! Как компромиссный вариант мож-но использовать Форт, транслирующий исходный текст в шитый код. Это легко (и с комфортом) программируется, быстро работает, но долго ломается. Тем не менее, трудо-емкость взлома порядка на два ниже, чем у Машины Тью-ринга или Стрелки Пирса.

Защита от эмуляторовСтруктуру спиральной дорожки невозможно скопировать, но легко проэмулировать. Вместе с копировщиками защи-щенных дисков, как правило, поставляются программы-эмуляторы, создающие виртуальный CD-ROM/DVD при-вод. Копировщик проделывает ту же самую операцию, что и защита – снимает топологию с защищенного диска и пе-редает ее эмулятору.

Можно ли этому противостоять? Разработчики StarForce использовали прямой доступ к IDE-контроллеру в обход всех установленных драйверов, в том числе и драйвера-эмулятора. А как быть, если у пользователя установлен не IDE-привод? Тогда StarForce вынуждена работать че-рез уже установленные драйвера. Чтобы обойти защиту, достаточно выдернуть шлейф со своего привода или от-ключить соответствующий канал IDE-контроллера на ле-ту, и StarForce падет. Не очень-то сильная защита, да к то-му же трудно реализуемая (см. рис. 8).

Мы же пойдем другим путем. Если открыть стандарт по SCSI- или ATAPI-устройства (их черновые версии лежат на www.t10.org и www.t13.org соответственно), можно обнару-жить десятки «мультимедийных» команд, поддерживае-мых практически всеми современными приводами. В эму-ляторах же реализована лишь малая часть. Поэтому, что-бы защититься от эмуляторов, достаточно задействовать хотя бы половину SCSI/ATAPI-команд (попутно это «убьет» мониторы шины и прочие анализаторы).

Даже если последующие версии эмуляторов поумнеют и будут имитировать весь «лексикон» привода целиком, они навряд ли смогут воспроизвести все особенности каждой команды и их комбинаций. Впрочем, не будем забегать впе-ред. Эмуляторы совершенствуются медленно и качествен-ных рывков с их стороны пока не ожидается.

Защита от мониторов шиныДля взлома защиты не всегда требуется дизассемблиро-вать код. Вместо этого можно запустить монитор шины для перехвата обмена программы с приводом. Анализируя пос-ледовательность вызовов SCSI/ATAPI команд, вполне ре-ально разгадать алгоритм защиты, определив, к каким именно характеристикам диска она привязалась.

Большой популярностью пользуется монитор Bus Hound, ознакомительную версию которого можно бесплатно ска-чать с сайта http://www.perisoft.net/bushound. Он не толь-ко позволяет перехватывать USB 1.0/2.0, SCSI/ATAPI/IDE/SATA, FireWire, Bluetooth, Fibre Channel порты, но еще и отоб-ражает относительное и абсолютное время выполнения за-просов, что существенно облегчает исследование защит, основанных на временных характеристиках.

Наша защита никак не противодействует мониторам шины (Star-Force, кстати говоря, тоже), поэтому все коман-ды видны как на ладони и алгоритм привязки становится понятным с первого взгляда (см. рис. 9).

Как «ослепить» монитор? Можно, конечно, использовать прямой доступ к IDE-контроллеру или разнообразные ан-тиотладочные (точнее, «анти-мониторные») приемы, толь-ко… все это сложно, потенциально конфликтно и вообще ненадежно. Лучше «разбавлять» наши команды большим количеством «мусорных» SCSI/ATAPI-команд, чтобы зате-ряться на их фоне. Алгоритм станет неочевидным и анализ потребует намного больше времени и усилий.

Один нюанс: «мусорные» команды ни в коем случае не-льзя генерировать на случайной основе, в противном слу-чае хакер снимет несколько дампов, выделит в них посто-янную часть, а все остальное отбросит за ненадобностью. А вот основные команды лучше выбирать случайным об-разом. В частности, для чтения сектора можно использо-

Ссылки по теме запутывания кода! Анализ запутывающих преобразований программ: те-

оретическая статья, рассматривающая основные мето-ды «замусоривания» кода и проблемы его «прополки» (на рус.): http://www.citforum.ru/security/articles/analysis.

! A Taxonomy of Obfuscating Transformations: еще одна ста-тья, посвященная «замусориванию» кода с большим количеством примеров (на англ.): http://www.cs.arizona.edu/~collberg/Research/Publications/CollbergThomborsonLow97a.

! Virtual Machine Design and Implementation in C/C++ by Bill Blunden: реализация виртуальных машин на Си/Си++ – отличная бумажная книга на англ., электронная версия, по-видимому, недоступна.

Page 73: 033 Системный Администратор 08 2005

71№8, август 2005

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

вать и READ 10/12, и READ CD и READ CD MSF, и некото-рые другие.

Удаленный прожигКлючевые лазерные диски хорошо подходят для «коробоч-ного» ПО, но для программ, распространяемых преимущес-твенно через Интернет, они создают множество трудностей. Рассылка дисков – это огромная головная боль, но ведь не передавать же лазерный диск по модему. А почему бы и нет? Современные технологии еще и не на такое способны!

Пользователь скачивает клиентскую программу, кото-рая просит вставить чистый CD-R-диск в пишущий привод, прожигает одну сессию, заполненную незначащими данны-ми, снимает топологию и по криптографическому протоко-лу передает эту информацию серверу. Сервер «зашивает» топологию внутрь защищаемой программы и отсылает ее клиентcкой программе, которая либо записывает програм-му на диск, либо устанавливает на винчестер.

Конечно, такая схема взаимодействия существенно ос-лабляет защищенность программы. Ведь во всей партии болванок структура спиральной дорожки одинакова и по-тому, оплатив только одну копию, нечестный пользователь сможет тиражировать ее чуть ли не в промышленном мас-штабе. Чтобы этого не произошло, следует использовать аддитивную защиту, комбинирующую привязку к тополо-гии с нестандартным форматом диска, например. Конечно, нестандартный формат – плохая штука (и об этом мы уже го-

Рисунок 9. Исследование защиты с помощью монитора шины

Полезные советы! положите на ключевой диск файл с заманчивым назва-

нием user_name.key и выполняйте над ним различные запутанные операции, это слегка умерит прыть хакера и остановит его на какое-то время;

! вносите на диск несколько принципиально различных ключевых меток, но проверяйте только часть из них, а часть – оставьте для последующих версий програм-мы (или ее обновлений), тогда хакеру придется каждый раз проводить утомительные исследования, подолгу за-висая над монитором шины, дизассемблером и отлад-чиком;

! помните, что даже тщательно оттестированная защи-та в силу некоторых причин может не сработать, «об-ругав» легального пользователя; поэтому необходимо использовать по меньшей мере три независимых за-щитных механизма, основанных на различных харак-теристиках носителя, и если срабатывают хотя бы два из них, проверка считается пройденной; в данной ста-тье мы рассмотрели всего лишь один такой механизм, остальные – в следующий раз.

ворили в начале статьи), но с некоторыми предосторожнос-тями использовать его все-таки можно. Тем более, что про-жиг на CD-R снимает проблему тиражирования – клиентская программа самостоятельно управляет пишущим приводом и может свободно использовать все нестандартные режимы, на которые он только способен. Большое количество разно-образных защитных приемов описано в моей книге «Техни-ка защиты лазерных дисков от копирования», демонстраци-онную версию которой можно найти на моем ftp.

nezumi ftpАвтор поднял экспериментальный ftp-сервер, раздающий свои авторские материалы:! IP-адрес: 83.239.33.46;! доменное имя: nezumi.org.ru;! порт: 21 (стандартный),! логин: WASM,! пароль: не требуется;! папка: /pub,! канал: 500 Мб;! приблизительное время работы: с 14:00 до 06:00, при

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

ЗаключениеРазработка собственных защит от копирования – это реаль-ность. Забудьте о широко разрекламированных готовых па-кетах. Всякая серийная защита притягивает внимание сотен тысяч хакеров со всего света, которые быстро находят более или менее универсальный способ взлома, такой, что им мо-жет воспользоваться даже простой обыватель. Стойкость не-серийных защит (даже спроектированных непрофессиона-лами) зачастую оказывается намного выше, потому что никто не хочет с ними связываться. Единичный взлом себя не оку-пит! Надеюсь, что эта статья поможет вам избежать ошибок и разработать защиту своей мечты самостоятельно.

Рисунок 8. Виртуальный диск Virtual Clone CDв «Моем компьютере»

Page 74: 033 Системный Администратор 08 2005

72

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

Systrace – инструмент для ограничения и контроля сис-темных вызовов. Изначально systrace был написан для NetBSD, позже был портирован под OpenBSD,

а в настоящий момент ведутся работы по переносу на Linux, FreeBSD и OpenDarwin.

Любая программа в процессе свой работы использует системные вызовы. Что такое системный вызов? Его мож-но определить как некую функцию, которая позволяет ва-шей программе обращаться к ядру ОС для выполнения не-кого действия. В современных версиях UNIX-систем реа-лизовано около 300 различных системных вызовов. И ес-

ли такие инструменты, как ktrace (kernel process tracing) и truss (tracing system call), позволяют нам выступать лишь в качестве наблюдателей, systrace позволяет нам вмеши-ваться в происходящее.

Пример использованияПерейдем к практике. В качестве примера напишем про-стую программу:

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

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

Наверняка вы не раз задумывались о том, как именно работает та или иная используемая

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

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

#include <stdio.h>void proc1();int main()

Page 75: 033 Системный Администратор 08 2005

73№8, август 2005

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

Как ясно из исходного текста, наша подопытная про-грамма выполняет следующие действия:! Выводит на экран сообщение.! Создает каталог «test».! Передает управление процедуре «proc1».! Процедура proc1 выводит на экран сообщение.

Скомпилируем программу:

На первый взгляд при выполнении нашей программы используются два системных вызова: mkdir и write. Хотя ло-гично предположить, что, перед тем как «что-то» «куда-то» записать с помощью write, это самое «куда-то» нужно сна-чала открыть, а после записи закрыть, а значит, задейс-твованы системные вызовы open и close . Также не лише-но смысла предположение, что используется еще один сис-темный вызов – exit. Итого пять вызовов. Посмотрим, как обстоят дела на самом деле:

Ключ -A указывает systrace автоматически создать по-литику для указанного исполняемого файла.

Автоматический режим предполагает создание правил в режиме «разрешить все».

После выполнения команды в домашнем каталоге поль-зователя появится подкаталог .systrace, в который будет по-мещен файл c правилами. Рассмотрим его:

Синтаксис правил достаточно прост:

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

Рассмотрим полученные правила.

Указывается, для какого бинарного файла политика опи-сана ниже. Полный путь к исполняемому файлу нужен для

того, чтобы исключить возможность применения политики для файла с таким же именем, но располагающимся в дру-гом месте. Emulation: netbsd показывает, что будет исполь-зоваться ABI ОС NetBSD.

Как видно из названия, системному вызову mmap раз-решено исполняться. Для позволения выполнения систем-ного вызова используется действие – permit, для запреще-ния deny.

Тут мы видим, что системному вызову fsread будет раз-решено выполниться в том случае, если запрошенный им файл будет /etc/ld.so.conf. Стоп, скажет внимательный чи-татель, системного вызова fsread не существует! И будет абсолютно прав. По умолчанию в systrace применяется ис-пользование псевдонимов для системных вызовов. Напри-мер: fsread является псевдонимом для stat, lstat, readlink, access, open. Но при желании режим использования псев-донимов можно отключить. В дальнейшем комментирова-нии всего файла конфигурации смысла не вижу – все долж-но быть понятно и без этого.

Что ж, политика для нашей программы создана, да-вайте попробуем ее выполнить под чутким руководством systrace:

Как мы видим, все функции нашей программы выпол-нились. Предположим, что логика нашей программы изме-нилась, что будет происходить в этом случае? Давайте для примера изменим функцию proc1 в нашей программе. Для начала мы должны точно знать, что будем менять. Просто изменить пару строчек в исходном коде и перекомпилиро-вать программу, конечно, можно, но я предлагаю более ин-тересный подход.

Программа objdump показывает информацию из бинар-ных/объектных файлов. Ключ -d указывает, что файл нуж-но дисассемблировать. Вывод информации для удобства произведем в proga.lst

В полученном листинге находим нашу процедуру proc1.

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

#gcc -o proga proga.c

#systrace -A /path/to/program/proga

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 netbsd-munmap: permit netbsd-fsread: filename eq “/lib/libc.so.12.114.1” then permit netbsd-__sysctl: permit netbsd-fsread: filename eq “/etc/mallic.conf” then permit netbsd-break: permit netbsd-ioctl: permit netbsd-write: permit netbsd-fswrite: filename eq “/home/01mer/labs/systr/test” then permit netbsd-exit: permit

[системный вызов] [условие] [действие]

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

{printf("just a message\n");mkdir(«test»);proc1();}void proc1(){printf("just a dumb procedure\n");}

netbsd-mmap: permit

netbsd-fsread: filename eq “/etc/ld.so.conf” then permit

#systrace -a /home/01mer/labs/systr/proga

just a messagejust a dumb procedure

#objdump -d proga > proga.lst

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: e8 52 fc ff ff call 8048498 <init_fallthru+0x2d> 8048846: 83 c4 10 add $0x10,%esp 8048849: c9 leave 804884a: c3 ret 804884b: 90 nop

Page 76: 033 Системный Администратор 08 2005

74

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

байт, которые мы должны изменить на что то свое. Негус-то, но вполне хватит для классического shell-кода вызыва-ющего /bin/sh, он занимает как раз 23 байта (не забывай-те, что 2 байта нам нужны для возврата в «основную про-грамму»). А это именно то, что нам нужно – используется системный вызов, описания которого нет в наших прави-лах. Читаем man 2 execve. Для запуска /bin/sh через execve мы должны написать следующие:

Что можно свести к следующему коду на ассемблере:

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

Вооружившись hex-редактором, открываем исполняе-мый файл с нашей программой и меняем содержимое proc1 на представленные выше опкоды. Само собой, нам нужно оставить команды возврата в «основную» программу. Пос-ле успешного редактирования проверяем результат:

Как вы видите, вместо вывода на экран «just a dumb procedure» у нас запустился /bin/sh.

А теперь попробуем выполнить то же самое, но уже под контролем systrace:

Как мы видим, попытка запустить модифицированную программу провалилась.

Автоматизируем создание правилДоверить автоматическое создание правил systrace допус-тимо только в том случае, когда есть уверенность на 99,9%

в том, что мы запускаем. Во всех остальных случаях реко-мендуется создавать правила в интерактивном режиме. Рассмотрим пример:

Ключ -t указывает, чтобы интерактивное создание пра-вил проходило в текстовом режиме. Если у вас на маши-не установлены x-windows, вы можете воспользоваться xsystrace.

Тут systrace ожидает от нас ввода permit, в случае если мы желаем разрешить системный вызов или deny для за-прета. Конечно, интерактивное создание правил – процесс достаточно трудоемкий и занимает много времени, но полу-ченный результат того стоит. Вы будете точно знать, когда и какие системные вызовы использует программа.

Дополнительные «полезности»В синтаксисе правил вы можете использовать необязатель-ные опции протоколирования.

Например:

параметр log указывает systrace протоколировать каждое обращение к указанному фильтру.

По умолчанию протоколируются лишь попытки выпол-нить системные вызовы, о которых нет ни слова в прави-лах. Для протоколирования systrace использует syslogd. А это значит, что мы можем немного поправить /etc/syslog.conf, чтобы все сообщения от systrace размещались в от-дельном файле.

При желании даже можно написать маленький парсер для получаемых логов. Но это уже по желанию, все в ва-ших руках.

Нельзя не отметить еще одну необязательную опцию – errorcode. С её помощью мы можем указать, какая ошибка будет возвращаться при обращении к запрещенному сис-темному вызову.

Например:

В данном случае при попытке записи в файл систем-ному вызову будет возвращена ошибка – input/outpu error. Для ознакомления с полным списком errno кодов возврата вы можете прочитать man errno.

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

#systrace -t /home/01mer/labs/systr/newproga

/home/01mer/labs/systr/newproga, pid: 729(0)[0],policy: /home/01mer/labs/systr/newproga, filters: 0,syscall: netbsd-mmap(197), args: 32Answer:

netbsd-fsread: Þlename eq "/lib/libc.so.12.114.1" ↵ then permit log

netbsd-fswrite: Þlename eq "/some/where/Þle" ↵ then deny[EIO]

execve("/bin/sh/",0,0);

xorl %eax,%eaxpushl %eax pushl $0x68732f2fpushl $0x6e69622fmovl %esp,%ebxpushl %eaxpushl %esppushl %ebxpushl %eax movb $0x3b,%alint $0x80

31 c05068 6e 2f 73 6868 2f 2f 62 6989 e350545350b0 3bcd 80

#/home/01mer/labs/systr/proga

Just a message#

#systrace -a /home/01mer/labs/systr/proga

Just a messageJul 11 16:53:25 darkthrone.net1 systrace: deny user: 01mer,prog: /home/01mer/labs/systr/proga, pid: 395(0)[0],policy: /home/01mer/labs/systr/proga, filters: 13,syscall: netbsd-execve(59), filename: /bin/sh, argv:#

Page 77: 033 Системный Администратор 08 2005

75№8, август 2005

bugtraq

Переполнение буфера в MySQLПрограмма: MySQL версии до 4.0.25, 4.1.13, 5.0.7-beta.Опасность: Низкая.Описание: Переполнение стека возможно в функции init_syms() из-за недостаточной обработки входных данных при создании определенных пользователем функций. Зло-умышленник может указать специально сформированное название функции, вызвать переполнение буфера и пере-записать участок памяти на системе. Удачная эксплуата-ция уязвимости позволит злоумышленнику выполнить про-извольный код на целевой системе.URL производителя: www.mysql.com.Решение: Установите последнюю версию с сайта произ-водителя.

Раскрытие информации и отказв обслуживании в реализации Kerberos в Microsoft WindowsПрограмма: Microsoft Windows 2000, XP, 2003.Опасность: Средняя.Описание: 1. Ошибка существует при обработке опреде-ленных Kerberos-сообщений и позволяет злоумышленнику вызвать отказ в обслуживании контроллера домена. Под-робности уязвимости не раскрываются.

2. Ошибка при обработке PKINIT-транзакций может поз-волить злоумышленнику получить данные других пользо-вателей с помощью атаки «Человек посредине».URL производителя: www.microsoft.com.Решение: Установите исправления от производителя.

Удаление произвольных файловв printd на Sun SolarisПрограмма: Sun Solaris 7, 8, 9, 10.Опасность: Низкая.Описание: Уязвимость существует в демоне printd. Удален-ный пользователь может с помощью специально сформи-рованного запроса удалить произвольный файлы на сис-теме. Подробности уязвимости не сообщаются.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.Опасность: Высокая.Описание: CCA Application Program Interface (API) не требу-ет авторизацию. Удаленный пользователь может вызвать API-метод, чтобы поменять роль пользователя, отключить пользователя или поменять информацию о сконфигуриро-ванном пользователе.URL производителя: www.cisco.com.Решение: Установите обновленную версию программы: http://www.cisco.com/warp/public/707/cisco-sa-20050817-cca.shtml.

Уязвимость форматной строкив ProFTPDПрограмма: ProFTPD версии до 1.3.0rc2.Опасность: Средняя.Описание: 1. Уязвимость форматной строки обнаружена при отображении сообщения об отключении, содержащее имя текущей директории. Злоумышленник может создать специально сформированное имя каталога и вызвать отказ в обслуживании или выполнить произвольный код на це-левой системе. Для удачной эксплуатации имя директории должно содержать переменные: «%C», «%R» или «%U».

2. Уязвимость форматной строки обнаружена в модуле mod_sql при получении информации из базы данных. Зло-умышленник может создать специально сформированные insert-запросы к БД и вызвать отказ в обслуживании или выполнить произвольный код на целевой системе.URL производителя: www.proftpd.org.Решение: Установите исправление с сайта производите-ля.

Скриптинг между приложениямив SPI Dynamics WebInspectПрограмма: SPI Dynamics WebInspect.Опасность: Низкая.Описание: Злоумышленник может создать специально сформированную веб-страницу и выполнить произволь-ный сценарий в браузере жертвы. Подробности в статье: XSS – WEB = Cross-Applications Scripting.URL производителя: www.spidynamics.com/products/webinspect/index.html.Решение: Способов устранения уязвимости не существу-ет в настоящее время.

Составил Александр Антипов

Уязвимость форматной строкив nbSMTP-клиентеПрограмма: no-brainer SMTP версии до 1.00.Опасность: Высокая.Описание: Уязвимость форматной строки существует в функции log_msg(). Удаленный пользователь может с по-мощью специально сформированной строки выполнить произвольный код на целевой системе.URL производителя: www.nbsmtp.ferdyx.org.Решение: Установите последнюю версию с сайта произ-водителя.

Обход ограничений режима defangedв Metasploit FrameworkПрограмма: Metasploit Framework версии до 2.4.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки в функ-ции StateToOptions() в msfweb, которая позволяет удален-ному пользователю переопределить переменную окруже-ния «_Defanged», тем самым обойти ограничения безопас-ности режима defanged и запустить проверки на уязвимос-ти и эксплоиты на целевой системе.URL производителя: www.metasploit.com.Решение: Установите последнюю версию с сайта произ-водителя.

Page 78: 033 Системный Администратор 08 2005

76

hardware

Приготовления в аппаратнойЧто для этого потребуется? Аппаратная часть, которая пред-ставлена материнской платой VIA EPIA-M 10000, корпусом Morex Cubid 3677S, устройством сохранения FlashROM – RD1-PL производства IOSS. В качестве носителя информа-ции используем обычный жесткий диск формата 3,5’, плот-ностью в 160 Гб (кто-то скажет: «А почему не 500 Гб?» – что ж, у меня не оказалось под рукой жесткого диска та-кого объема).

Обратимся на этом этапе к техническим характеристи-кам сегодняшних компонентов. Материнская плата – в ка-кой-то степени шедевр на сегодняшний день. Некоторое время назад компания VIA предложила форм-фактор для материнских плат mini-ITX – это миниатюризированный ва-риант материнских плат, всего-то 17x17 см. На таком про-странстве уместился процессор C3/Nehemiah – разработка компании VIA, созданный на фундаменте достижений ком-паний, приобретенных не так давно самой VIA – это Cyrix и WinChip. Тем, кто заинтересовался историей развития этих процессоров, следует ознакомиться с материалами [1-3]. Как и на «взрослых» платах, у этого малыша есть север-ный и южный мосты, что означает, что есть PCI-слот, прав-

да, всего лишь один, 2 IDE-канала, FireWire-контроллер (ко-му-то повезет, если приобретет к такой системе FireWire-пе-реносное устройство информации), 6 портов USB. То есть вы начинаете понимать, какой универсальный конструктор мы сегодня рассматриваем, не правда ли?

Помимо «взрослости» данной платы на ней также есть ставшие уже обычным явлением интегрированные аудио- и сетевой-контроллеры. Так как стандарт mini-ITX ориен-тируется на миниатюрность, то разработчикам пришлось также интегрировать и видео-контроллер. Стоит подчер-кнуть наличие выхода S-Video и возможности построить звук в формате 5+1. Да, самое главное – процессор на этой модели имеет тактовую частоту в 1 ГГц. Не так что-бы и много, но, с другой стороны, и немало. Для процессо-ра с такой частотой уже используются активные системы охлаждения, в то время как на более младших моделях в 800 МГц ограничились пассивным охлаждением, и поверь-те, вполне хватает.

Данного малыша, или правильнее сказать малышку, следует пристроить в хорошие руки, с хорошим питанием и экологией – все правильно, надо подобрать правильную «одежду» – корпус. Поэтому для малыша я выбрал «под-

ИСПОЛЬЗУЕМ LИСПОЛЬЗУЕМ LinuxinuxBIOSBIOSНА СИСТЕМАХ VIA EPIA-MНА СИСТЕМАХ VIA EPIA-M

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

или машинки. По мере взросления у сильной половины человечества игрушки не исчезают,

а только становятся более дорогими. В прошлом номере мы познакомились с историей

развития LinuxBIOS-проекта. Сегодня мы вдохнем жизнь в barebone-систему на базе EPIA-M

и LinuxBIOS.

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

Page 79: 033 Системный Администратор 08 2005

77№8, август 2005

hardware

скорости. Однако на корпусном вентиляторе скорость в пре-делах 3000 об/минуту, что характеризует его как бесшум-ный, а вот вентилятор на процессоре пришлось заменить – идущий в составе материнской платы экземпляр облада-ет «бешеной» скоростью в 6 тыс. оборотов. Поэтому вен-тилятор был заменен на аналогичный корпусному. В итоге температура процессора в работе в рабочем режиме ста-ла выше на 7-8 градусов, впрочем, не превысив допусти-мой нормы в 65 градусов Цельсия.

Теперь соберем программные компоненты нашей сис-темы. Это Linux-дистрибутив – Slackware Linux 10.0 [4]. Компоненты мониторинга температуры – lmsensors [5], i2c [6], hddtemp [7]. Компоненты для построения LinuxBIOS – сам LinuxBIOS [8]-[9], «полезная нагрузка» (payload) – etherboot [10], filo [11]. На каком именно дистрибутиве вы бу-дете собирать, в конечном итоге не принципиально.

Следим за температуройОписывать установку и настройку системы я не буду. Сра-зу расскажу, как мониторить температурные режимы са-мой платы и жесткого диска. Если в вашем дистрибутиве используется ядро из серии 2.6, то озадачиваться интегра-цией lmsensors и i2c в ядро, по-видимому, не стоит, т.к. по заявлениям разработчиков данные пакеты уже есть в со-ставе ядра. Для тех же, кто работает на ядрах линейки 2.4,

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

Сбереги себя самЧтобы не получилось ситуации «Знал бы – соломинку под-ложил», придется приобрести или одолжить на некоторое время у знакомых технических специалистов специальное устройство сохранения FlashROM. Под устройством сохра-нения FlashROM подразумевается BIOS Savior – это некий симбиоз из 2 микросхем flash-памяти – одна из которых, оригинальная, находящаяся в PLCC-слоте, – микросхема, поставляющаяся в составе материнской платы. В ней на-ходится PC BIOS – в нашем случае это AwardBIOS. Вторая микросхема – резервная, на которую записываются моди-фикации PC BIOS. Таким образом, у нас получается вариант устройства с 2 чипами памяти, с помощью переключателя производится выбор, откуда делать «холодный» старт сис-темы – или с оригинальной микросхемы с AwardBIOS, или с резервной, на которую мы будем записывать LinuxBIOS (альтернативу AwardBIOS). Устройство действительно не-обходимое, поэтому к его приобретению стоит отнестись с вниманием. При удачном запуске системы вы записывае-те в оригинальную микросхему LinuxBIOS и в дальшейшем можете прилепить на системный блок лейбл – «Designed for LinuxBIOS».

Тонкости охлажденияИ последним аппаратным блоком сегодняшнего нашего конструктора идет жесткий диск. Я руководствовался при его выборе в первую очередь скоростью вращения шпин-деля – главной характеристикой в конечном итоге был уро-вень шума. Жесткие диски со скоростью 5400 об/минуту, по всей видимости, становятся достоянием истории, поэто-му вместо SAMSUNG SV1604N пришлось взять SAMSUNG SP1604N (скорость вращения шпинделя – 7200 об/мину-ту). Впрочем, разница в пару децибелов шума между эти-ми винчестерами не особенно влияет на общий фон. Сто-ит приглядеться, как смонтирован жесткий диск на плате. Его пришлось повернуть с ног на голову в буквальном смыс-ле и положить на радиаторы охлаждения северного моста (рис. 1). Отмечу, при закрытом корпусе кажется, что пла-та жесткого диска соприкасается с крышкой, на самом де-ле это не так, зазор все равно остается. Благодаря зазору, а также вентиляторам на процессоре и вентилятору на са-мом корпусе перегрева не происходит (рис. 2). Обращу ва-ше внимание, что вентиляторы идут с датчиками вращения

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

Рисунок 2. Расположение элементов охлаждения EPIA-Mи дополнительный вентилятор на корпусе Morex Cubid 3677S

Page 80: 033 Системный Администратор 08 2005

78

hardware

стоит прочитать в первую очередь README указанных па-кетов, понять, по какому из 3 вариантов установки следует пойти – интеграция непосредственно в ядро и дальнейшая его пересборка, сборка в качестве отдельных модулей или половинчатая интеграция с ядром.

Я выбрал вариант сборки в виде отдельных модулей.

Добавим в /etc/rc.d/rc.local следующие строки для за-грузки модулей нашей платы EPIA.

Теперь данные о температурном режиме у нас под ру-кой. Запускаем:

Как видите, некоторые значения с датчиков, отмечен-ные подстрокой ALARM, не находятся в допустимых преде-лах. Очевидно, что формулы для этих значений, записан-ные в /etc/sensors.conf, не совсем верны, либо диапазон до-пустимых значений слишком узок.

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

Добавляем в /etc/rc.d/rc.local автозагрузку службы мо-ниторинга:

Теперь убедимся, что температура жесткого диска в пределах нормы:

Что же, 35 градусов по Цельсию – вполне допустимая рабочая температура.

Подведем краткие итоги проделанной работы. Дистри-бутив развернут, мониторинг температуры настроен, что позволяет нам удаленно по сети следить за температур-ным режимом. Осталось перевести рельсы на использо-вание LinuxBIOS.

Полезная нагрузкаLinuxBIOS, который было бы уместнее называть FreeBIOS, яв-ляется замещением проприетарного BIOS. С его помощью происходит первичная инициализация устройств в системе и затем передается управление на payload. Задача payload – загрузить ядро Linux либо по сети, либо с локального устройс-тва. Нам в первую очередь интересно посмотреть на загрузку Slackware Linux с жесткого диска, поэтому в качестве payload выступит FILO – FIle Loader. Займемся подготовкой FILO.

Отредактируем файл Config, заменив содержимое стро-ки AUTOBOOT_FILE на:

ELF-образ нашего payload положили в специально от-веденное место и назвали как filo.m2.elf.

С сайта LinuxBIOS возьмем обе ветки, и стабильную, известную под названием V1, и текущую, которая на дан-ный момент находится в разработке, версия V2. Как толь-ко изменения для рабочей версии будут завершены и от-тестированы, она также станет стабильной. Принципиаль-ные отличия между версиями все-таки есть – это наличие только во второй версии поддержки ACPI. Изменен синтак-сис файла конфигурации. И самое главное, в новой вер-сии поменялся каркас построения системного ROM-фай-ла. Считается, что он стал удобнее для добавления нового аппаратного обеспечения.

wget http://www.guzu.net/linux/hddtemp-0.3-beta12.tar.bz2tar xjvf hddtemp-0.3-beta12.tar.bz2cd hddtemp-0.3-beta12./conÞgure --with-db-path=/etc/hddtemp.db ↵ --preÞx=/usr/local/hddtempmake && make install

/usr/local/hddtemp/sbin/hddtemp -d -q /dev/hda

# telnet 127.0.0.1 7634

Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.|/dev/hda|SAMSUNG SP1604N|35|C|Connection closed by foreign host.

wget http://te.to/~ts1/Þlo/Þlo-0.4.2.tar.bztar xjvf Þlo-0.4.2.tar.bzcd Þlo-0.4.2make

AUTOBOOT _ FILE = "hda3:/boot/vmlinuz ↵ oot=/dev/hda3 console=tty0 console=ttyS0,115200"makecp Þlo.elf ~/src/payloads/Þlo.m2.elf

wget http://snapshop.linuxbios.org/ ↵ freebios--devel--1.0--base-0.tar.bz2tar xjvf freebios--devel--1.0--base-0.tar.bz2cd freebios

wget http://secure.netroedge.com/~lm78/archive/ ↵ i2c-2.9.1.tar.gztar xzvf i2c-2.9.1.tar.gzcd i2c-2.9.1sumake && make install

wget http://secure.netroedge.com/~lm78/archive/ ↵ lm _ sensors-2.9.1.tar.gztar xzvf lm _ sensors-2.9.1.tar.gzcd lm _ sensors-2.9.1sumake && make install

# I2C adapter driversmodprobe i2c-viapromodprobe i2c-isa

# I2C chip driversmodprobe eeprommodprobe vt1211

/usr/local/bin/sensors -s

# /usr/local/bin/sensors

eeprom-i2c-0-50Adapter: SMBus Via Pro adapter at 0500Memory type: DDR SDRAM DIMMMemory size (MB): 256

vt1211-isa-6000Adapter: ISA adapterVCore1: +2.31 V (min = +1.79 V, max = +1.89 V) ALARM+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) +3.3V: +3.25 V (min = +3.13 V, max = +3.45 V) fan1: 3343 RPM (min = 3006 RPM, div = 2) fan2: 0 RPM (min = 3006 RPM, div = 2) ERROR: Can't get TEMP2 data!Proc Temp: +44.1C (high = +65C, hyst = +60C) MB2 Temp: -28.4C (high = +45C, hyst = +40C) vid: +1.850 V (VRM Version 9.1)

Page 81: 033 Системный Администратор 08 2005

79№8, август 2005

hardware

Предварительно подготовим VIDEOROM от интегриро-ванного видеоадаптера на плате:

Предполагается, что компоновка и компилирование про-исходит на EPIA-M-системе.

Получился файл размером в 64 Кб. Он нам понадобится в дальнейшем при подготовке системного образа.

В файле freebios/HOWTO/EPIA хранится инструкция по компоновке LinuxBIOS для EPIA-систем. Воспользуем-ся ею. Во-первых, нам потребуется файл конфигурации, в котором указывается для какой системы подготавливает-ся системный ROM-файл, «полезная нагрузка» (так назы-ваемая секция payload), параметры для порта RS232 и т. п. Приведу файл, который используется у меня:

Сохраним конфигурацию в файл config1 и подготовим Makefile для дальнейшей компиляции следующим обра-зом:

В итоге получили новую директорию /home/anthony/src/epia-m/freebios, в которой и будет приготавливаться систем-ный ROM-файл для нашей системы. Не забудем положить в эту же директорию файл от VIDEOROM.

В результате получили файл romimage. Его-то нам и нуж-но записать в чип flash-памяти. Для этой цели в директории ~/src/freebios/util/flash_and_burn приготовлена утилита за-писи во flash-память. Соберем ее и посмотрим, какие па-раметры ей необходимы.

Необходимо использовать в качестве параметра имя файла системного ROM. Не забудем переключить с по-мощью BIOS Savior нужный нам чип flash-памяти и запус-тим с правами суперпользователя программу записи во flash-чип:

Итак, в чип SST39SF020A записан LinuxBIOS. Во второй чип мы предварительно записали системный AwardBIOS, с которым поставлялась эта плата. На всякий случай.

Теперь перейдем на второй компьютер и с помощью нуль-модемного кабеля подключим порты RS232 на EPIA-M и на нашем компьютере. Зачем это надо? Для того чтобы отслеживать информацию, выводимую на терминал.

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

sudd if=/dev/mem of=vgabios.bin skip=1536 count=128

## LinuxBIOS conÞg Þle for: VIA epia-m mini-itx#

target /home/anthony/epia-m

# via epiamainboard via/epia-m

# Enable Serial Console for debuggingoption SERIAL _ CONSOLE=1#option SERIAL _ POST=1option TTYS0 _ BAUD=115200

# for VGA support (optional)option HAVE _ FRAMEBUFFER=0option CONFIG _ VGABIOS=1option CONFIG _ REALMODE _ IDT=1dir src/bioscalloption CONFIG _ PCIBIOS=1option VGABIOS _ START=0xfffe0000addaction romimage dd if=./vgabios.bin of=romimage ↵ bs=65536 seek=2 conv=sync conv=notrunc

# end VGA support

option CONFIG _ EPIAMVERSIONSTRING="5.0.0E-" ↵ _ _ DATE _ _ " " _ _ TIME _ _target /home/anthony/src/epia-m/freebios/

option DEFAULT _ CONSOLE _ LOGLEVEL=9option DEBUG=1

# Use 256KB Standard Flash as Normal BIOSoption RAMTEST=1option USE _ GENERIC _ ROM=1option STD _ FLASH=1option ROM _ SIZE=262144

# payload size = 192KBoption PAYLOAD _ SIZE=196608

# use ELF Loader to load Etherbootoption USE _ ELF _ BOOT=1

# Use FILO as our payloadpayload /home/anthony/src/payloads/Þlo.m2.elf

python /home/anthony/src/freebios/util/conÞg/ ↵ NLBConÞg.py conÞg1 /home/anthony/src/freebios

cd ~/src/epia-m/freebiosmake

cd ~/src/freebios/util/ßash _ and _ burnmake./ßash _ rom --h

su./ßash _ rom romimage

The arguments are:romimageCalibrating timer since microsleep sucks ... takes a secondSetting up microsecond timing loop332M loops per secondOK, calibrated, now do the deedEnabling flash write on VT8235...OKTrying Am29F040B, 512 KBprobe_29f040b: id1 0x7f, id2 0x45Trying At29C040A, 512 KBprobe_jedec: id1 0xbf, id2 0xb6Trying Mx29f002, 256 KBprobe_29f002: id1 0xbf, id2 0xb6Trying SST29EE020A, 256 KBprobe_jedec: id1 0xbf, id2 0xb6Trying SST28SF040A, 512 KBprobe_28sf040: id1 0x7f, id2 0x45Trying SST39SF020A, 256 KBprobe_jedec: id1 0xbf, id2 0xb6SST39SF020A found at physical address: 0xfffc0000Part is SST39SF020AProgramming Page: 0063 at address: 0x0003f000

The arguments are:--h./flash_rom: invalid option -- -usage: ./flash_rom [-rwv] [-c chipname] [-s exclude_start] [-e exclude_end] [file]-r: read flash and save into file-w: write file into flash (default when file is specified)-v: verify flash against file-c: probe only for specified flash chip-s: exclude start position-e: exclude end postionIf no file is specified, then all that happens is that flash info is dumped

LinuxBIOS-1.0.0 Сбт Июн 25 21:48:38 MSD 2005 starting...RB!0

Page 82: 033 Системный Администратор 08 2005

80

hardware

Выводятся сообщения о номере релиза LinuxBIOS и вре-мени компиляции. Из flash-памяти образ LinuxBIOS в даль-нейшем копируется в RAM для ускорения процесса загруз-ки и последующие манипуляции проводятся уже в ОЗУ.

На определенном этапе вы увидите такое сообщение:

На самом деле памяти у меня в системе почти в 2 раза больше – 256 Мб, однако в стабильной ветке LinuxBIOS 1.0 на тот момент не существовало механизма определения количества ОЗУ. Данная проблема решена во второй вер-сии LB. Поэтому либо оставим как есть, либо вам придет-ся, исходя из ваших возможностей, поменять в исходном файле параметр, задающий количество ОЗУ.

Далее интересная надпись – отработала инструк-ция CPUID, и мы видим, что же за чудо выпускает компа-ния VIA:

CentaurHauls когда-то выпускала компания WinChip.Следующая запись, заслуживающая вашего внима-

ния:

LinuxBIOS дошел до стадии загрузки «полезной загруз-ки» – прошу прощения за тавтологию. В качестве payload у нас выступает FILO. Вот что пишет FILO во время выпол-нения:

FILO отрапортовал, что в качестве носителя найден жес-ткий диск SAMSUNG SP1604N, на котором в разделе hda3 находятся ядро системы и корневой раздел, и передал уп-равление ядру операционной системы.

Дальнейшие записи уже вам привычны и знакомы.С помощью SSH можно зайти в систему и проверить,

например, температуру.

В целом работу нашего конструктора можно считать нормальной.

Подведем итоги. Мы скомпилировали LinuxBIOS, запи-сали образ в ППЗУ и удачно загрузились. Также мы научи-лись снимать данные о температуре с критически важных узлов нашей ПЭВМ. Полностью рабочая удаленная стан-ция к вашим услугам.

Автор благодарит участников проекта LinuxBIOS за кон-сультации при подготовке данного материала, в частности Josiah England, Jonathan McDowell, Adam Talbot, Jun Okajima. А также за краткую историю развития проекта LinuxBIOS за 1999-2004 года R.Minnich [12-13].

В следующем номере мы посмотрим, как запустить EPIA-M в качестве узла Beowulf-кластера, а также запустим на EPIA-M операционную систему Windows 2000 Professional. Плюс посмотрим, как наш блок EPIA-M превращается в тер-минальное решение.

Ссылки:1. http://en.wikipedia.org/wiki/WinChip.2. http://de.wikipedia.org/wiki/WinChip.3. http://en.wikipedia.org/wiki/Cyrix.4. ftp://ftp.chg.ru/pub/Linux/Slackware/slackware-10.0-iso.5. http://secure.netroedge.com/~lm78/archive/lm_sensors-

2.9.1.tar.gz.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-

0.tar.bz2.9. http://snapshots.linuxbios.org/freebios--devel--2.0--patch-

51.tar.bz2.10. http://citkit.dl.sourceforge.net/sourceforge/etherboot/

etherboot-5.4.0.tar.bz2 (http://rom-o-matic.net).11. http://te.to/~ts1/filo/filo-0.4.2.tar.bz.12. http://www.linuxdevices.com/links/LK8294110575.html.13. http://www.beowulf.org/archive/2002-September/008021.

html.

# ssh -l anthony -C via

anthony@via's password:Last login: Sat Jun 25 21:53:41 2005 from athlon.netLinux 2.4.26.

anthony@via:~$ sensorseeprom-i2c-0-50Adapter: SMBus Via Pro adapter at 0f00Memory type: DDR SDRAM DIMMMemory size (MB): 256

vt1211-isa-ec00Adapter: ISA adapterfan1: 3378 RPM (min = 3006 RPM, div = 2)fan2: 0 RPM (min = 3006 RPM, div = 2)Proc Temp: +47.2C (high = +65C, hyst = +60C)

anthony@via:~$ telnet 127.0.0.1 7634Trying 127.0.0.1...Connected to 127.0.0.1.Escape character is '^]'.|/dev/hda|SAMSUNG SP1604N|37|C|Connection closed by foreign host.

POST: 0x89POST: 0x70totalram: 96MInitializing CPU #0

Max cpuid index : 1Vendor ID : CentaurHaulsProcessor Type : 0x00Processor Family : 0x06Processor Model : 0x09Processor Mask : 0x00Processor Stepping : 0x05Feature flags : 0x0380b13d

Welcome to elfboot, the open sourced starter.January 2002, Eric Biederman.Version 1.2

POST: 0xf8 37:init_bytes() - zkernel_start:0xfff00000 zkernel_mask:0x0000ffffFound ELF candidate at offset 0

POST: 0xfeFILO version 0.4.2 (anthony@athlon) Сбт Июн 25 21:47:32 MSD 2005Press <Enter> for default boot, or <Esc> for boot prompt... 2. .1. .timed outboot: hda3:/boot/vmlinuz root=/dev/hda3 console=tty0 console=ttyS0,115200hda: LBA48 160GB: SAMSUNG SP1604NMounted ext2fsFound Linux version 2.4.26 (root@tree) #8 Mon Jun 14 19:09:31 PDT 2004 bzImage.Loading kernel... okJumping to entry point...Linux version 2.4.26 (root@tree) (gcc version 3.3.4) #8 Mon Jun 14 19:09:31 PDT 2004

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 010e 04 08 01 02 20 00 00 00 00 00 48 30 48 2a 4075 75 45 45 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2100 00 00 00 00 00 00 00 03 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0030 33 31 32 37 39 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00Copying LinuxBIOS to ram.Jumping to LinuxBIOS.

Page 83: 033 Системный Администратор 08 2005
Page 84: 033 Системный Администратор 08 2005

82

web

CMS в их текущем виде сущес-твуют уже довольно-таки дав-но. Эксперты сходятся во мне-

нии, что в ближайшее время долж-но появиться что-то кардинально но-вое – система, которая возведёт сай-тостроение на качественно более вы-сокий уровень. В различных изданиях, преимущественно электронных, не раз публиковались статьи, посвящённые несовершенству современных CMS. Там же высказывались предложения о том, каковы должны быть CMS но-вого поколения, однако большинство таких предложений уже давно реали-зовано (например, модульная структу-ра, редактор HTML-кода в администра-торской части).

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

Размышляем о новых возможностях CMSКак правило, наиболее качествен-ными CMS являются платные систе-мы. При покупке такой CMS пользо-ватель получает поддержку, а так-же в большинстве случаев своевре-менное решение появляющихся воп-росов при работе с системой. Сре-ди платных CMS следует особо выде-

лить: S.Builder, Q-Publishing, UMI.CMS, ABO.CMS, Bitrix, CimWebCenter, CMS Master, CMS UlterSuite, Content Master, MSTL-content, помимо перечисленных, существует ещё очень много систем управления. Один из таких продук-тов – Habitat – разрабатывался мной в течение длительного времени. Пос-ле двух с половиной лет исследования CMS мною были сделаны выводы от-носительно конструктивных особен-ностей, не позволяющих развивать-ся существующим системам в сторо-ну usability. Неоднократно проводились консультации с владельцами сайтов на основе Habitat, по теме сервисных возможностей, однако далеко не всё можно реализовать на базе сущест-вующих CMS.

Иное представление CMSРезультатом вышеописанных иссле-дований стал проект Habitat 2.0. Он является развитием большинства су-ществующих CMS. Среди основных нововведений, которые вы не увиди-те в других системах, имеет смысл особо выделить объектно-ориенти-рованный метод построения шабло-нов страниц.

Для администратора системы HTML-страница представляется в виде дерева компонентов, каждый из кото-рых имеет свойства, позволяющие из-менить вид графического представле-ния компонента. Система не опериру-ет понятиями HTML, CSS, JavaScript. То есть уровень абстрагирования на поря-док выше, чем у ближайших аналогов. Компонент есть инициализированный класс, который закачивается в систему в формате XML-компонента.

! В систему изначально заложены способы упорядочивания компо-нентов, благодаря чему вы може-те организовывать объекты пред-ставления (страницы, товары и т.д.) в любом порядке (линейный, иерар-хический).

! Для наполнения шаблонов страниц динамической информацией ис-пользуются инфоисточники (Data-Aware). К инфоисточникам относят-ся константы (строки, определённые для всех компонентов), переменные (строки, определённые по месту, то есть для конкретных компонентов) и сами Data-Aware, которые представ-ляют собой участок PHP-кода в ком-бинации с PIN. Последние необхо-димы для связи данных, возвраща-емых скриптом Data-Aware, с пере-менными внутри шаблонов.

! Среди неотъемлемых частей Hab-itat 2.0 можно выделить магазин. Его необходимость объясняется тем фактом, что в результате роста числа российских пользователей Интернет с каждым днём увеличи-вается число Интернет-представи-тельств организаций, которые счи-тают необходимым обеспечить воз-можность комфортного для пользо-вателей заказа услуг компании.

Разработка сайта отныне осущест-вляется в новом ключе – веб-програм-мист разрабатывает компоненты, от-вечает за то, что они реализуют свои функции, а затем собирает из этих ком-понентов шаблоны страниц (т.н. типо-вые страницы). Все это делается ради нескольких «священных коров» про-граммирования:

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

Уже не один месяц интернет-сообщество и бизнес ожидают новое поколение CMS.

Наконец отдельные идеи, многие из которых революционные, были собраны воедино,

в проекте Habitat 2.0.

АЛЕКСЕЙ АЛЕКСЕЙ МОИСЕЕВМОИСЕЕВ

Page 85: 033 Системный Администратор 08 2005

83№8, август 2005

web

! установление четкой и прозрачной взаимосвязи между содержанием (данные из БД) и формой (визуали-зация данных);

! перенос понятия «сопровождения сайта» из плоскости программиро-вания в плоскость управления и со-ответственно удешевление сопро-вождения;

! повторное использование кода (компоненты – вещь четкая и от-делимая от всего остального);

! повышение надежности серверной части ПО за счет структурной чет-кости реализации.

Шаблоны страниц могут состоять из компонентов (элементарные шаб-лоны) и других шаблонов (т.н. «типо-вые страницы»), собранные на осно-ве компонентов. Под компонентом под-разумевается логически выделенный дизайнером и обычно повторяющий-ся элемент дизайна, несущий опреде-ленную функциональность, например отображение списка новостей. Рубри-каторы, меню, содержательные час-ти страниц и т. д. – все это компонен-ты, на основе которых путем комби-нирования, взаимного их расположе-ния можно построить шаблоны стра-ниц. Это обеспечит нам легкость и гиб-кость изменения внешнего вида. На-пример, можно задавать, какие руб-рикаторы используются в различных шаблонах, где используются колонти-тулы, а где нет, и т. д.

Для реализации большей части но-вовведений потребовалось более ак-тивное использование БД, чем в обыч-ных CMS, однако требования у систе-мы не выходят за рамки возможностей дешёвых хостингов: PHP 5, MySQL 4, 20 Мб свободного места (обычно самое минимальное, что можно купить).

Ядро Habitat 2.0Важнейшую часть ядра системы со-ставляет компилятор-сборщик, который на входе получает ссылку в корень де-рева шаблона (который надо собрать), а на выходе отдаёт готовый шаблон для страниц с расставленными «вкраплени-ями». Расстановка указанных «вкрапле-ний» (шаблоновых переменных) являет-ся наиболее интеллектуальной частью компилятора. На место таких перемен-ных вставляется информация, возвра-щаемая от источников данных (Data-

Aware, Переменные, Константы). Эту операцию выполняет компилятор-сум-матор, который является частью поль-зовательского визуализатора.

Для того чтобы полностью перело-жить всю работу, над внешним видом сайта, на плечи системы (а точнее, её разработчика) помимо свойств (в кото-рых задаются параметры каждого ком-понента, такие, как обрамление, вы-равнивание, положение и т.п.), у ком-понента есть события. Определяя со-бытия для конкретных компонентов, можно добавить динамику для стра-ницы сайта (например, подсветка руб-рикаторов, элементов меню и т.п.). Для этого планируется:! Написание Data-Aware модулей, ре-

шающих все возможные вопросы, которые только могут появиться у пользователей.

! JavaScript-описание всех определён-ных событий в HTML, для того чтобы дать администратору максимально возможную гибкость при редакти-ровании внешнего вида страниц.

! Создание множества классов, для того чтобы полностью исключить необходимость редактирования ис-ходного кода HTML или CSS.

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

Компонентыкак строительный материалКомпонент «движка» представляет со-бой строительный материал для стра-ниц сайта. Он обладает рядом особен-ностей, делающих компоненты более универсальным средством.

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

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

ких других данных. На этапе компонов-ки страниц компоненту указывается источник данных, откуда он и узнает то, что ему необходимо отображать.

И в-третьих, будем отличать «класс компонента classMyComponent» и «ком-понент MyComponent класса classMy-Component». Первый никогда не ис-полняется сам по себе – это описание того, что должно быть передано движ-ку и включено в цикл обработки движ-ка. То есть, говоря простым языком, classMyComponent – это заготовка, ее можно экспортировать из одного про-екта и импортировать в другой, пусть и для похожего, но уже другого примене-ния. По аналогии с языками высокого уровня classMyComponent – это тип объ-екта или его класс, а сам объект этого типа нужно еще породить и запустить. Программист для нашего движка сна-чала создает компоненты, а потом уже пытается правильно их применить.

Работа с типами компонентов (классами), а также инициированными классами (будем их называть просто «компоненты») нужна для того, чтобы компоненты одного и того же класса можно было использовать множество раз для схожих и одновременно разных целей. Точно так же, как программисты Delphi/VC++ используют классы, опи-сывающие в памяти некоторую струк-туру данных. В данном же случае до-стигается некоторая степень универ-сальности, позволяющая компоненты одного типа представлять в различном виде: форма, цвет, обрамление…

И как следствие этого приема ком-понент перестает быть привязанным к конкретной реализации, он работает как черный ящик для того, кто его ис-пользует. При создании шаблона стра-ницы у разработчика есть свойства, со-бытия компонента, заявленная функ-циональность, всё остальное – дело самого компонента.

ИнтерфейсВнешнее представление самой адми-нистраторской панели спроектиро-вано таким образом, чтобы вы могли «добраться» до любого «уголка» па-нели за минимально возможное вре-мя. Это обеспечено за счёт иерархи-ческой структуры всей администра-торской панели, то есть дерева в от-дельном фрейме. Каждая ветка де-рева догружается по мере необходи-

Page 86: 033 Системный Администратор 08 2005

84

web

мости, что позволяет более эффек-тивно использовать канал связи. В отдельный верхний фрейм (так назы-ваемый Toolbar) вынесены сервисные кнопки, которые позволяют управлять структурой дерева, а также обезопа-сить себя от случайного удаления важ-ного элемента.

Рассматриваемая CMS изначаль-но создаётся для рядового пользова-теля Интернета, коим вполне может оказаться руководитель предприятия или работник отдела маркетинга, ка-кой-либо организации. Этим объясня-ется возможность включения подска-зок везде, где это может принести хоть какую-то пользу.

Среди стандартных возможностей системы можно упомянуть разделе-ние доступа для суперадминистрато-ров, администраторов, модераторов, редакторов, аудиторов и т. п, эргоно-мичность, usability, accessibility, управ-ление рекламой, статистика (по рекла-ме, посетителям и т. д), создание ре-зервной копии всей системы…

В истории немало фактов, когда со-здание простых инструментов и техно-логий приводило к появлению на рын-ке множества некачественных продук-тов, изрядно портящих жизнь их поль-зователям, однако с появлением Habitat 2.0 строение сайтов будет на порядок проще, а безопасность в несколько раз выше, так как ей будут заниматься про-фессионалы, чья основная обязанность заключается в совершенствовании Security и Usability модулей системы.

Многоязыковая поддержка позво-лит системе распространиться за пре-делы СНГ. В планах на будущее реа-лизовать подход к вёрстке AJAX (под-ход к созданию веб-страниц, позволя-ющий при каждом новом запросе за-гружать не полностью новую страни-цу, а лишь те её части, которыми она отличается от текущей. Этот принцип позволяет повысить скорость загруз-ки страниц во много раз по сравнению с традиционными методами вёрстки), что становится вполне реальным, ес-ли под рукой находится вышеописан-ная CMS платформа.

Этапы развития сайтостроенияВ итоге мы можем выделить следу-ющие ступени эволюции интернет-страниц:

! Начальные идеи отдельных раз-работчиков. Как правило, распро-странение за пределы одного ра-бочего коллектива отсутствовало.

! Gopher.! Статические веб-страницы.! Динамические веб-страницы, раз-

витие CMS.! Конкретное название класса для

CMS подобных Habitat 2.0 приду-мывать пока рано, однако есть ос-нования полагать, что это первый шаг к тем системам нового поколе-ния, приход которых предсказыва-ют эксперты.

Если проследить развитие язы-ков разметки от HTML 3.2 до XHTML, XML, то можно заметить, что важней-шей целью разработчиков Интернет-консорциума, вероятно, является сде-лать труд веб-верстальщиков менее рутинным (в конференциях, таких, как fido7. RU.HTML.PROFY, высказывает-ся мнение, что цель разработчиков за-ставить верстальщиков использовать программы класса XMLSpy, HomeSite, DreamWeaver, и не набирать код вруч-ную), то есть вся рутинная вёрстка, как предполагается, должна выполняться специальными программами. Впол-не возможно, что профессия «верс-тальщик» вообще перестанет сущес-твовать в её современном представ-лении.

В ряды продуктов, выполняющих всю рутинную вёрстку, можно отнес-ти Habitat 2.0. Точно так же, как визу-альное программирование позволяет ускорить и упростить труд дизайнера программного обеспечения (а главное, не требует от него особых навыков про-граммиста), системы нового поколения приблизят возможности WWW к поль-зователям, не имеющим навыки веб-разработчиков.

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

Возможное развитиеЕсть предположение, появившееся при анализе существующих систем управ-ления сайтом, а также при проектиро-вании Habitat и Habitat 2.0, что через некоторое время большинство хос-тинг-провайдеров в качестве допол-

нительной услуги или даже в качест-ве обязательной функции будут пред-лагать использование CMS. Разработ-ка таких CMS скорее всего будет вес-тись сторонними фирмами либо самой организацией, предоставляющей услу-ги хостинга. Примером подобных про-граммных продуктов может служить Control Panel и Direct Admin. Предпола-гается, что CMS будет состоять из цен-тральной администраторской панели, в которой можно будет управлять аб-солютно всеми функциями веб-сай-та и одним для всех визуализатором. Это позволит постоянно повышать бе-зопасность («единый фронт борьбы с хакерами»), а также оградит пользова-телей от таких ненужных в большинс-тве случаев определений, как «FTP», «закачать обновление». Всё это явля-ется задачами CMS и администрато-ров хостинга.

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

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

Наиболее вероятно внедрение по-добных идей у хостинг-провайдеров, постоянно улучшающих качество сво-их услуг, понимающих, для чего не-обходимо «грамотное регулирование цен» на услуги. В России таких фирм почти нет… разве что уже упоминав-шаяся RuWEB. Или, может, о новых технологиях предоставления хостин-га задумаются те провайдеры, кото-рые ещё только планируют появить-ся в ближайшем будущем? Возмож-но, бой только начинается…

Page 87: 033 Системный Администратор 08 2005

85№8, август 2005

bugtraq

Множественные уязвимостив OpenVPNПрограмма: OpenVPN 1.x 2.x.Опасность: Средняя.Описание: 1. Уязвимость в обработке очереди OpenSSL-ошибок, когда аутентифицируется пользователь с не-правильным сертификатом, позволяет отключить друго-го несвязанного пользователя. Для удачной эксплуатации этой ошибки, OpenVPN должен быть запущен с «verb 0» и без «ls-auth».

2. Уязвимость в обработке очереди OpenSSL-ошибок, когда сервер не в состоянии расшифровать полученный пакет, может эксплуатироваться авторизованным клиен-том, чтобы отключить другого клиента через специально обработанный пакет.

3. Авторизированный клиент в режиме Ethernet-мос-та «dev tap» может затопить сервер множеством пакетов с различными поддельными MAC-адресами, чтобы исчер-пать доступную системную память.

4. Два или более клиентов, подключенных в одно и то же время к серверу с одним и тем же сертификатом, могут использовать ошибку состояния операции, чтобы аварий-но завершить работу уязвимого сервера. Для использова-ния этой уязвимости на сервере должна быть отключена опция «duplicate-cn».URL производителя: http://openvpn.net/changelog.html.Решение: Установите обновленную версию программы (2.0.1).

Удаленный административный доступв Cisco Intrusion Prevention SystemПрограмма: Cisco Intrusion Prevention System (IPS) 5.0(1) и 5.0(2).Опасность: Высокая.Описание: Авторизованный пользователь с OPERATOR- или VIEWER-правами доступа может эксплуатировать уяз-вимость в логике command line processing (CLI), чтобы по-лучить полный административный доступ к целевому IPS-устройству.URL производителя: http://www.cisco.com/warp/public/707/cisco-sa-20050824-ips.shtml.Решение: Установите обновленную версию (5.0(3)): http://www.cisco.com/cgi-bin/tablebuild.pl/ips5.

Переполнение буферав Novell eDirectory ServerПрограмма: Novell eDirectory Server версии до 8.7.3.Опасность: Критическая.Описание: Уязвимость существует в компоненте iMonitor. Удаленный пользователь может вызвать отказ в обслужи-вании системы или выполнить произвольный код с приви-легиями Local System. Подробности уязвимости не сооб-щаются.URL производителя: www.novell.com.Решение: Установите исправление с сайта производите-ля.

Обход требования использования клиента в Cisco Clean AccessПрограмма: Cisco Clean Access 3.5.3.1, 3.5.4.Опасность: Низкая.Описание: Пользователь может изменить HTTP User-Agent-строку браузера, чтобы подключиться к сети без необходи-мости запуска Cisco Clean Access.URL производителя: http://www.cisco.com/en/US/products/ps6128/index.html.Решение: Способов устранения обнаруженной уязвимос-ти не существует в настоящее время.

Выполнение произвольного кодав Sun Solaris DHCP-клиенте

Программа: Sun Solaris 10.Опасность: Высокая.Описание: Уязвимость обнаружена в сценарии /lib/svc/

method/net-svc. Удаленный DHCP-сервер может послать большое количество DNS-имен в ответ на запрос DHCP-клиента и выполнить произвольный код на целевой систе-ме с привилегиями пользователя root.

URL производителя: www.sun.com.Решение: Установите исправление с сайта произво-

дителя.

Поднятие привилегий и отказв обслуживании в CA Message QueuingПрограмма: Unicenter TNG.Опасность: Средняя.Описание: Переполнение буфера обнаружено в CA Message Queuing, которую используют несколько программ Computer Associates. Удаленный пользователь может под-менить CA-File Transfer Protocol, чтобы выполнить произ-вольный код с поднятыми привилегиями.

Удаленный пользователь может также вызвать условия отказа в обслуживании через CAM TCP-порт.URL производителя: http://supportconnectw.ca.com/public/ca_common_docs/camsecurity_notice.asp.Решение: Fixes for CAM v1.11 prior to Build 29_13: http://suppor tconnec tw.ca .com /pub l ic /ca _common_docs /camsecurity_cam111fixes.asp; Fixes for CAM v1.07 prior to Build 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_common_docs/camsecurity_cam107fixes.asp.

Повышение привилегийв продуктах SymantecПрограмма: Symantec AntiVirus Corporate Edition 9.0, 9.0.1, 9.0.2; Symantec Client Security 2.0, 2.0.1, 2.0.2.Опасность: Низкая.Описание: Уязвимость существует в HELP-функции, ко-торая использует HTML-интерфейс помощи Windows. Не-привилегированный локальный пользователь может полу-чить доступ на чтение и выполнение файлов с привилеги-ями Local System.URL производителя: www.symantec.com.Решение: Установите обновление с сайта производителя.

Составил Александр Антипов

Page 88: 033 Системный Администратор 08 2005

86

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

Сегодня мы рассмотрим програм-мные и аппаратные продукты, позволяющие эффективно уп-

равлять современными гостиничными комплексами – Fidelio и Opera, и рес-торанами – Micros, входящими в гости-ничный комплекс.

Управление гостиницамиСовременные темпы развития гости-ничного бизнеса предъявляют высочай-шие требования к автоматизирован-ным системам управления для пред-приятий индустрии гостеприимства.

Fidelio V8 – система управления отелем, построенная на СУБД Oracle, способна решать задачи от продаж, бронирования, приёма и размещения гостей, организации конференций и банкетов и управления связями с кли-ентами до предоставления полных данных для финансового контроля и управленческого учёта деятельности предприятия.

Модуль управления связями с кли-ентами (CRM) позволяет иметь полную картину всех пожеланий и предпочте-ний гостей и соответственно оказы-вать высокий уровень сервиса. Инди-видуальность подхода к клиенту за-ключается в предоставлении каждо-му гостю именно той информации, в которой он нуждается. Например, фи-нансовый менеджер, остановившийся в вашем отеле, найдет в своем номе-ре последний выпуск финансово-ана-литического журнала, любитель игры в большой теннис – адреса ближай-

ших кортов, игрок в боулинг – лучшие предложения от ведущих боулинг-клу-бов города.

В Fidelio V8 все данные по клиенту объединяются в профайлы, хранящие-ся в единой центральной базе данных, причем в каждом клиентском профай-ле можно заводить неограниченное число контактных данных гостя, отде-льно вносить такую маркетинговую ин-формацию, как степень важности кли-ента, вид его деятельности, долю ком-пании на рынке, информацию по кре-дитным картам гостя. Большим пре-имуществом является то, что система позволяет не удалять профайлы, а де-лать их неактивными в случае необхо-димости, при этом они могут быть вос-становлены в любой момент.

Одной из основных статей доходов отеля является деятельность отдела организации конференций и банкетов. Модуль CCM позволяет быстро про-верить доступность и текущую актив-ность по существующим броням, с лег-костью вводить планируемые мероп-риятия и эффективно ими управлять. Также одним из преимуществ данно-го модуля является возможность одно-временной брони как конкретного ме-роприятия, так и номеров в отеле.

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

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

Система позволяет в считанные минуты заселить и выписать гостя, без необходимости оформления множест-ва бумаг, что особенно важно для гос-тей, ценящих свое время. Регистра-ция может производиться как по бро-ни, так и без нее, возможен специаль-ный «быстрый» вариант оформления выписки для групп.

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

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

C помощью Crystal Reports Fidelio

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

Современный гостиничный комплекс – очень сложная система, обычно включающая в себя

собственно гостиницу, ресторан, бары, развлекательные центры и т. п. Конечно, если вам

приходится администрировать придорожный мотель на 5 номеров, то хватит и таблички

в Excel. В остальных случаях без специализированной системы управления не обойтись.

КИРИЛЛ ТИХОНОВКИРИЛЛ ТИХОНОВ

Page 89: 033 Системный Администратор 08 2005

87№8, август 2005

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

позволяет создавать большое число разнообразных отчетов (как стандар-тных, так и нестандартных), которые могут быть предварительно просмот-рены или распечатаны. Все отчеты могут передаваться в формате Word, Excel, факсимильных и электронных сообщений.

OPERA Enterprise SolutionВ отличие от традиционных систем для гостиниц, OPERA Enterprise Solution представляет собой самое полнофун-кциональное на сегодняшний день решение управления, предназначен-ное как для независимых отелей, так и для гостиничных сетей; как для не-больших отелей с ограниченным набо-ром услуг, так и для шикарных 5-звез-дочных гостиниц.

Система состоит из модулей, кото-рые с легкостью могут быть настрое-ны и добавлены в зависимости от по-желаний конкретного отеля. Она вклю-чает в себя:! систему автоматизации служ-

бы приема и размещения гостей (Property Management System);

! систему автоматизации отдела продаж и маркетинга (Sales and Catering);

! систему управления качеством об-служивания (Quality Management System);

! систему оптимизации прибыли (Revenue Management);

! систему управления мероприятия-ми (OPERA Activity Scheduler);

! систему централизованного бро-нирования (OPERA Reservation System);

! модуль бронирования через Интер-нет (Web-Self Service);

! централизованную информацион-ную систему по клиентам (Customer Information System).

С помощью мобильного решения OPERA-Palm, работающего на кар-манных компьютерах, объединенных в беспроводную сеть, пользователи имеют доступ ко всей информации в базе данных в режиме реального вре-мени. OPERAPalm позволяет персо-налу осуществлять основные опера-ции, находясь практически в любой точке отеля и не будучи привязанны-ми к одному рабочему месту: удален-но поселять и выписывать гостей; уп-

равлять задачами; проверять статус номера; управлять взаимоотношени-ями с клиентами; составлять график мероприятий.

Система может работать как в ре-жиме клиент-серверного приложения, так и в режиме тонкого клиента через браузер. Серверная часть Opera может работать на базе Microsoft Windows NT/2000, AIX и Sun Solaris.

Существует возможность осущест-влять бронирование номеров клиента-ми непосредственно с веб-сайта.

Система OPERA поддерживает бо-лее 350 интерфейсов, включая интер-фейс с системой управления ресто-ранами, телефонными системами и системами тарификации телефонных звонков и Интернет-услуг, системой ав-томатических минибаров, системой уп-равления счетами клиентов, система-ми платного телевидения, системами электронных замков, системой авто-ризации кредитных карт, бухгалтерс-кими системами.

Управление ресторанамиОсновой системы управления ресто-ранами Micros являются рабочие стан-ции – терминалы с сенсорным экра-ном, которые устанавливаются в точ-ках продаж (POS) – в местах, где вво-дится заказ и/или осуществляется оп-лата. Затем заказ автоматически пос-тупает на кухню и распечатывается на кухонных принтерах. Также для распе-чатки счетов гостей в кафе, фаст-фу-дах, в барах могут устанавливаться ру-лонные принтеры, которые дополни-тельно используются для печати спе-циализированных отчетов. Для рас-печатки счетов гостей на фирменных бланках в точках продаж устанавлива-ется принтер гостевых чеков.

Доступ в системы обеспечивается с помощью персонального идентифи-кационного кода или магнитной кар-точки, что позволяет разграничить до-ступ к функциям систем в зависимости от должности сотрудника. Micros обес-печивает максимальную защиту вве-денной информации и предотвраща-ет случаи ошибочного или некоррек-тного использования данных любыми пользователями.

Все данные о деятельности ресто-рана в любой момент времени могут быть представлены в виде отчетов, как на экране, так и в бумажном виде. По-

мимо большого числа типовых отчетов есть возможность создавать собствен-ные формы статистики.

Система Micros 3700 работает на рабочих станциях Micros – прочных, плоских, с сенсорными экранами, раз-работанных специально для исполь-зования в жёстких условиях. Удобный экран дает возможность сотрудникам видеть полную картину расположения столиков в ресторане в графическом формате. Micros 3700 предлагает са-мые совершенные функции POS, та-кие как TouchAdvantage – для ускоре-ния процедуры разделения чека, фун-кций перемещения и отмены, а также мощные функции для управления рес-тораном – сопровождающие и расши-ренные отчёты. Поддерживает стан-дартную базу обмена данными Sybase SQL Anywhere.

Micros 8700 позволяет одновремен-но вести управление большим числом точек продаж, которые могут сущест-венно отличаться друг от друга цена-ми, ассортиментом и условиями ре-ализации. Система функционирует на разработанном Micros оборудова-нии, устойчивом к попаданию жидкос-ти, каплям масла и другим факторам эксплуатации оборудования на кух-не. Помимо встроенных модулей уче-та продаж, себестоимости, регистра-ции рабочего времени сотрудников и многих других необходимых функций, Micros 8700 обладает открытой архи-тектурой с другими системами, что позволяет оборудованию и програм-мному обеспечению гибко интегриро-вать периферийные стандарты индус-трии и модулей программного обеспе-чения. Micros 8700 работает на базе процессора Intel и разработан в опе-рационной среде SCO UNIX, облада-ет высокой степенью надежности со-хранения всех данных, обеспечивает стабильный и экономически безопас-ный бизнес. Система внесена в Госу-дарственный реестр контрольно-кас-совых машин, используемых на тер-ритории Российской Федерации и ря-да стран СНГ, и может использовать-ся в фискальном режиме.

В заключение хочу сказать, что на этих системах построено управ-ление большого количества широко известных гостиничных комплексов не только в Москве и России, но и во всем мире.

Page 90: 033 Системный Администратор 08 2005

88

сказки

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

2. Сказка о потерянном пингеВ одной большой Конторе работал Ад-министратор локальной сети. Он очень любил сеть, созданную своими руками, все в ней знал, любую проблему решал

моментально. И как только в Конторе появлялись новые пользователи, наш Админ сразу же увеличивал сеть на нужное число рабочих мест. Так продолжалось долго. Сеть росла. И вот настал такой день, когда пинг, выпущенный Админом в локальную сеть, обратно не вернулся. Не при-дал этому значения Админ. Занят был, да и работало же все, да и никто не жаловался. Но и на следующий день вы-пущенный пинг к Админу не вернулся. И на третий день то же самое. Теперь уже Админ боялся поверить в то, что он потерял пинг! Попытался решить проблему. Но как? Раз-ве только демонтировать часть сети, созданную за три дня, а пользователей повыгонять. Потерял радость жизни Админ, замкнулся, посуровел. Понял он, что не далек тот день, когда сеть вообще выйдет из повиновения. И так его это огорчало, что однажды он уволился, не дожидаясь, по-ка случится непоправимое. И с тех пор каждый Админ пе-риодически пингует свою сеть, проверяя, а не пропадают ли в ней пинги!

4. Сказкао первом Ламереи вездесущем глюкеГде-то в самой дали Сети была подключена некая Контора. В этой Конторе работал Админ, у которого иногда случались труднообъяснимые пробле-мы. Не то чтобы он был совсем уж плохой, этот Админ, но не очень грамотный. Поэтому никак не мог доделать ра-боту до конца. А чтобы никто не подумал, что проблемы из-за его безалаберности, он решил все валить на глюк в системе. Случится отказ рабочей станции, Админ взды-хает, во всем виноват глюк. Возникнут проблемы с сете-вой печатью, снова та же песня, опять виноват глюк. На-доело это всем однажды. Решили разобраться через го-

АЛЕКСЕЙ БАРАБАНОВАЛЕКСЕЙ БАРАБАНОВ

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

Совершенно выдуманные истории, рассказанные в порядке двоичного сдвига,

без какой-нибудь видимой цели или морали, и даже не ко сну.

Page 91: 033 Системный Администратор 08 2005

89№8, август 2005

сказки

лову Админа и пригласили в Контору Эксперта. Тот, конеч-но, сразу нашел причину всех проблем. Админ был с позо-ром изгнан с работы. И хотя он был неграмотным, но од-новременно и весьма предприимчивым, тот Админ. И по-этому вскоре нашел другую работу. Однако и там повто-рилась прежняя история, и в той локальной сети появил-ся вездесущий глюк. Снова сменил работу Админ, и глюк сменил сеть следом за ним. Так и повелось. Но молва бежит впереди Админа. И перестали его брать на рабо-ту все, кто знает о нем. И дали ему другое имя – Ламер. Так и ходят с тех пор вместе Ламер и его спутник – вез-десущий глюк.

8. Сказкаоб Админе-ДурачкеЖил-был Администратор. Да такой был неумеха: за что ни возьмется, все завалит. Ничего у него не получалось. Со всех работ его гнали. Даже про-звание ему придумали – Дурачок. Совсем отчаялся Ад-мин-Дурачок. Хотел уж пойти работать курьером. Но был у него друг Хакер, и подсказал ему Хакер адрес сетево-го форума заветного. Сходил на тот форум Админ и по-лучил там совет скачать с далекого-предалекого Фтп не-ведомую операционную систему. Так и сделал Дурачок. Скачал он эту систему и запустил у себя на работе. И, о чудо, все заработало. Стал он эту систему ставить везде. Никто этой системы не знает и не понимает. Знает толь-ко он. И стали его везде звать. Стали уважать. Прозви-ще его обидное забыли. Стали звать его не Дурачком, а Линуксоидом. Да не долго продолжалось его счастье. Другие администраторы тоже освоили эту операционную систему, принялись ее везде внедрять. И тогда смогли за-казчики сравнить работу настоящих администраторов и Линуксоида. И оказалось, что Линуксоид все тот же Ад-мин-Дурачок.

16. Сказка о персональном компьютере Админа,или Как поссорились Админи ОфисменеджерЖил да был один Админ. Любил он свою работу и больше всего компьютеры. И за-хотелось ему иметь компьютер не толь-ко на работе, но и дома. Компьютеры к тому времени ста-ли вполне компактными, так что желание его ограничива-лось лишь стоимостью желаемого. Накопил он денег на XT и купил. А на работе уже появились AT. Он снова при-нялся копить и купил AT. А на работе уже i386. Купил он i386, а на работе i486dx2-66 и так далее. Задумался Ад-мин, это сколько денег надо, чтобы иметь всегда такой же компьютер, как и на работе ? Понял Админ, что нет кон-ца этой прогрессии. И придумал простой план. Решил он, что надо работе немного поделиться с ним компьютера-ми. Так и сделал. Но Офисменеджер обнаружил пропажу. Админа не уволили, так как был он способным и нужным работником. Но компьютер ему пришлось вернуть. С тех пор поссорились Админ с Офисменеджером. Каждый Ад-мин борется с желанием утащить с работы компьютер,

а Офисменеджер своим видом напоминает о его скрытой слабости. А каждый Офисменеджер подозревает, что Ад-мин норовит стянуть с работы компьютер и раздражается от того, что нет у него технических знаний, чтобы прокон-тролировать Админа.

32. Сказка о волшебном паролеВ тридевятой Конторе, в тридеся-том Филиале работал системный Администратор. И все у него в ру-ках спорилось. За что ни возьмет-ся, не успеешь оглянуться – готово. Ничего у него не ло-малось. Аптайм серверов рос день ото дня. И позавидо-вал ему Офисменеджер того филиала. Стал он нашепты-вать Начальнику, что недоброе задумал Админ, мол, хо-чет он хорошей работой усыпить бдительность, а сам за-думал уволиться. Поручил Начальник своему Офисме-неджеру разузнать секрет Админа. И стал Офисменед-жер выпытывать у Администратора, расскажи, мол, в чем твой секрет. Но не соглашался Администратор на угово-ры, был тверд и деловит. Тогда задумал недруг коварс-тво. Знал он за Админом слабость – любовь к пиву. При-нес он Админу пива любимого. Расслабился Админист-ратор, размечтался. Показалось ему, что друзья кругом. И рассказал он тогда, почему так у него все хорошо вы-ходит. Знал он волшебный рутовый пароль! И поделился он этим знанием с Офисменеджером. А наутро, когда пи-во кончилось и запах солодовый выветрился, пришел Ад-мин на работу и узнал, что место его уже занято. Что вос-пользовался его волшебным паролем Офисменеджер да и взял на работу Ламера. И теперь Ламер выполняет всю работу вместо Админа. Так остался Админ из-за своего длинного языка да любви к пиву без работы! А Ламер не-долго проработал вместо Админа. Выгнали его вместе с Офисменеджером. Оказалось, что знание волшебного рутового пароля недостаточно, чтобы всю работу Адми-нистратора выполнять. Хотя болтливого Админа на рабо-ту обратно не приняли.

64. Сказка о тщеславном Начальнике и трех СертификатахЗа далекими сетевыми рутерами, за километрами оптоволоконного кабе-ля, в одном далеком Офисе работал Админ. Был руководителем того Офиса тщеславный На-чальник. Не устраивало его то, что Админ просто выпол-нял всю работу. Хотел Начальник иметь возможность пох-валиться перед другими начальниками. И подсказал ему подхалим Офисменеджер, что в иностранных офисах, рас-положенных за многими хопами от их Офиса, водятся дива-дивные Сертификаты квалификационные! И поручил На-чальник Админу во что бы то ни стало добыть такой сер-тификат. Иначе, сказал он, уволит Админа по несоответс-твию! Делать нечего, отправился Админ в путь в далекую сеть Оракл. Вернулся оттуда с Сертификатом по Оракл. Но не унимается Начальник, и пуще прежнего науськивает его Офисменеджер. Посылают они Админа в другую даль-

Page 92: 033 Системный Администратор 08 2005

90

сказки

нюю сеть Майкрософт. Добыл и этот сертификат Админ. Вернулся на работу и ждет, что его оставят в покое. Но не-ймется Начальнику да Офисменеджеру. И снова его отпра-вили за сертификатом в сеть Циско. Получил и этот Серти-фикат Админ. Да обратно уже не вернулся. С тремя Серти-фикатами ему лучшую работу предложили другие началь-ники. А тщеславный Начальник и его Офисменеджер ос-тались ни с чем!

128. Сказкаоб Админе-идеалистеЖил да был Админ. Работал пома-леньку. Все делал, как надо. На рабо-те его уважали и ценили. Лишь слу-чится малейшая проблема, он тут как тут и все исправляет. Но хоте-лось ему идеала. Хотелось сделать так, чтобы все работа-ло еще лучше, чтобы совсем не ломалось, чтобы все было запрограммировано заранее. Админ был очень способный. Он потратил много труда и личного времени, чтобы добить-ся идеального функционирования управляемой им систе-мы. И вот настало время, когда его участие в работе сис-темы стало минимальным. Админ расслабился. У него по-явилось много свободного времени. Он его с пользой тра-тил. Но на работе стали замечать, что система работает без участия Администратора. И сделали свои выводы. Однаж-ды Админа уволили. Захотелось тут Админу вернуть все на место. Захотелось, чтобы снова что-нибудь отказало, что-бы снова его позвали. Но этого не случилось. Система, на-строенная нашим Админом, еще долго работала беспере-бойно. А ему пришлось искать другую работу.

256. Сказка о жадном НачальникеДалеко-далеко, за много хопов от нас, жил да был Админ. Уп-равлял местной локальной сет-кой. Выполнял всю нужную ра-боту. Был очень сметлив. Он рассудил, что лучше будет, если система станет работать максимальное время, а он ее обслуживать минимальное. Так и сделал, как решил. Все работало замечательно, ломалось редко, и так же ред-ко видели, чтобы Администратор что-то исправлял. И по-думалось тогда местному Начальнику с подсказки вредно-го Офисменеджера, что несправедливо это, когда все ра-ботают, Админ отдыхает, а работает лишь изредка. Реши-ли они, что надо Админу платить пропорционально труду. А поскольку они редко замечали труд Админа, так как бы-ли непрофессионалами, то все это привело к понижению зарплаты Администратора. Но Админ не согласился с та-кой оценкой своего труда и уволился. Приняли на работу Ламера. Все изменилось в локальной сети. Ламер не пок-ладая рук что-то настраивал, не пригибая ног везде бегал, не закрывая глаз за всем наблюдал. Начальник и Офисме-неджер были очень довольны. Но со временем оказалось, что теперь работает лишь один Ламер, все же остальные ждут, пока он все исправит. Спохватились тут Начальник с Офисменеджером. Стали звать Админа обратно. Да он к ним не вернулся.

512. Сказкаоб Админе-ХакереВ некотором Офисе, в некотором От-деле работал Админ. Был он трудолю-бив. Высоко было его мастерство. Все он делал просто замечательно. Но по-казалось ему, что недостаточно ценят его труд, что недо-статочно возносят его способности. И задумал тогда Ад-мин стать умелым Хакером. Придумал ник позагадочнее, да и начал временами выходить в Сеть на промысел недоб-рый. Узнали везде о нем как о Хакере, перед мастерством которого не устоит ничто. Админа никто не знал за преде-лами Отдела, а вот о Хакере знали все и боялись все. И тут еще более Админ запечалился от такой несправедливости, что его снова не уважают соответственно его способнос-тям. Тогда Админ, прикинувшись Хакером, взломал собс-твенную сеть. Да опять плохо получилось. Ведь вышло, что он как Админ уступает самому себе как Хакеру. И тогда Ад-мин стал убеждать всех, что поможет избавить их от Хаке-ра. Так долго убеждал, так долго доказывал, что прогово-рился, и истина стала всем известна. Хакера наказали, а Админа уволили с работы. И никто не оценил, что он, как и обещал, избавил Сеть от Хакера.

1024. Сказкао неистребимом вирусеВ одной далекой-предалекой ло-кальной сети случилась беда. На-пал на эту сеть вирус. Админу, ко-нечно же, сразу стали жаловаться пользователи. И он принялся неуто-мимо вычищать вирус из пользовательских данных. Почис-тит один компьютер, а ему сообщают, что заражены виру-сом еще четыре. Почистит один файл, а сканер показыва-ет, что еще шестнадцать. Ответит на одну заявку в техпод-держку, а их приходит еще 256! Очень устал Админ. Поч-ти отчаялся. Но осенила его мысль, что вирус ему попал-ся неистребимый! И как понял это, то сразу же перестал суетиться и тратить время на бесполезную борьбу. Достал он из потаенного шкафчика заветные бэкапы и дистрибу-тивы да и переставил зараженные станции заново все ра-зом. И с тех пор Админ был спокоен при любой вирусной атаке, так как знал, что вирус – это проблема Пользовате-ля, а у Админа на самый неистребимый вирус есть потаен-ный шкафчик с заветными бэкапами!

2048. Сказка о жене Админа,или Почему так мало Админов-женщинЖил-был Админ. Все хорошо складыва-лось у него на работе. Его ценили. Пос-тоянно повышали зарплату. Но работа не могла длиться 24 часа. И наступало время, когда Ад-мин приходил домой. Пусто было в его доме. И захотелось ему уюта. Нашел Админ жену! Все у него с женой было пре-красно. Он постоянно был окружен заботой. Но снова ста-ло ему неуютно. Захотелось еще, чтобы, как и на работе, был у него дома компьютер. Купил он себе компьютер. Те-перь не было человека счастливее его. На работе успех.

Page 93: 033 Системный Администратор 08 2005

91№8, август 2005

сказки

Кончилась работа – дома уют и внимание. Устал от внима-ния – включил компьютер и снова как на работе. Да не ус-троило такое жену. Её ведь нельзя на время неиспользова-ния выключить. Бросила она Админа. Долго Админ решал эту нетехнологическую проблему. Сделал правильные вы-воды, нашел новую жену и повел себя так, что больше она его не бросала. Но с тех пор у всех женщин осталось на-стороженное отношение к компьютерам.

4096. Сказка о настырном ПользователеОднажды в Контору пришел работать настырный Пользователь. Захотелось ему показать, что понимает он много в сетевых технологиях. Думал он тем самым сделать так, чтобы его заметил Начальник. Подго-товил для него Админ рабочее место, как всем и как всег-да делал. А тому все не хорошо. Претензии предъявляет. Говорит, мол, не так надо делать. Раньше, мол, в другой конторе все делалось иначе и лучше. Встретили его сло-ва поддержку у Офисменеджера. Тот уже давно невзлю-бил Админа. Но Администратор им попался непростой. Стал он все делать так, как они ему скажут. И все сделан-ное описывать в отчетах. Скажут так, сделает так. Скажут переделать эдак, переделает, не спросив причины. И вот пришло время подводить итоги работы всей Конторы. Ад-мин предъявил все свои отчеты и показал, что все время был занят. Офисменеджер ничего не показал, как обыч-но. А вот настырный пользователь, как оказалось, все это время был занят настройкой своего рабочего места, а не той работой, что ему надо делать. Понял это Начальник. Выгнал он настырного Пользователя, а Офисменеджеру запретил встревать в технологические споры. И все ос-тальные пользователи этой Конторы сделали соответс-твующие выводы.

8192. Сказка об админском кошмареЖил да был самоуверенный Админ. Он не без оснований был такой самоуверен-ный. Он все держал под контролем. У не-го все работало как надо. И уже давно. И стало ему казаться, что все работает только благодаря тому, что он такой хороший. Что во всем лишь его личная заслуга. Возгордился Админ этим. Стал направо и налево всем хвалиться да ручаться, что пока он сетью управляет, то и не будет никаких проблем. И сам настолько в это уве-ровал, что когда в Конторе временно выключили электро-питание и начали отключаться компьютеры, то осознание собственного бессилия стало для него ужасным потрясе-нием. Он с потерянным видом сидел среди жалобно вере-щащих упсов, слушал, как один за другим, снижая оборо-ты, останавливаются винчестеры и кулеры, и его слезы ка-пали на консольную клавиатуру. Потом, когда снова вклю-чили электричество, Админ, ничего никому не объяснив, уволился из Конторы навсегда и даже сменил ник и элек-тронную почту от столь сильного пережитого им стресса.

И с тех пор нет большего кошмара для самых мужествен-ных Админов, как отключение электричества!

16384. Сказкаоб отпуске АдминаОднажды в далекую-предалекую Контору, где работал Админ, при-шло лето. И пользователи стали уходить в отпуска. Работы стало меньше. И задумался Админ, а что если и ему уйти в от-пуск, чтобы отдохнуть. Стал прикидывать и так, и эдак. Что-бы ничего не сломалось, чтобы ничего не отказало, чтобы ничего не случилось. Пока планировал, лето и кончилось. На другой год снова наступило лето. Теперь у Админа все было согласовано технологически, и он сразу обратился к Офисменеджеру с просьбой об отпуске. Но теперь стал при-кидывать Офисменеджер. То одно его не устроит, то дру-гое. Админ все переделывает и согласовывает. И вот уже осталось последнее согласование, как Офисменеджер сам ушел в отпуск. И снова Админ остался без отдыха. Только на третий год смог Админ вовремя уйти в заслуженный от-пуск. Так и повелось с того времени: Админ работает мень-ше всех, но и отдыхает реже всех.

32768. Сказкаоб Админе-аутсорсере,или Об Абсолютном АдминеДалеко от этих мест за много-много хопов работал один Админ. Был он необычайно способным. Все делал быстрее и лучше ос-тальных. Особенно хорошо получалось у него удаленное администрирование. Можно даже сказать, что он все де-лал через линии связи. И это будет верно, так как был этот Админ аутсорсером. Обслуживал он несколько контор. Все его клиенты были довольны его работой. Лишь изредка он посещал эти конторы, так как сервера ломаются нечасто, а зарплату можно получать и на банковский счет. Но со вре-менем персонал контор менялся, и все меньше пользова-телей знало Админа-аутсорсера в лицо. Пользователям ка-залось, что по электронной почте им отвечает робот. Что новые программы, которые они обнаруживали, придя ут-ром на работу, ставятся сами собой. Что их рабочие стан-ции не ломаются никогда. И что то оборудование, которое Админ заказывал с доставкой в эти конторы, привозят пос-тавщики по своей инициативе. И настал такой день, когда, посетив одну из обслуживаемых контор, был Админ задер-жан на проходной, и никто, представьте себе – никто, не признал в нем сотрудника этой конторы. Опечалился Ад-мин и поспешил в другую контору. Но и там повторилась та же история. И в третьей тоже. И во всех остальных. Очень был Админ огорчен. Решил он более не посещать эти кон-торы вообще. И далее не переставал грустить об утрачен-ном человеческом присутствии. Лишь то скрашивало его печаль, что зарплата от контор приходила в банк регуляр-но, как и прежде.

Error: переполнение регистра. Авост1!

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

Page 94: 033 Системный Администратор 08 2005
Page 95: 033 Системный Администратор 08 2005

93№8, август 2005

книжная полка

WMI. Программированиена JavaScriptи VBScriptАлен Лиссуар Основная задача книги – научить читателя эффек-тивно использовать WMI (Windows Management In-strumentation). Автору оп-ределенно удалось до-стичь этой цели. Повество-вание книги начинается с объяснений основ Windows

Script Host (рассмотрены использование возможностей XML, контроль за выполнением, шифрование кода, отладка сце-нариев). В главе, посвященной началу работы с WMI, автор повествует о том, что такое DMTF, WBEM, CIM, xmlCIM. Тема языка запросов WMI и практики написания сценариев с WMI раскрыта очень подробно, рассказано о моникере, иссле-довании API-сценариев, просмотре имен репозитария CIM и сценариях для исследования репозитария CIM. Отдельно рассмотрены продвинутые техники написания сценариев WMI (асинхронная работа с экземплярами CIM, WMI DateTime Helper, расширение WMI для ADSI, представление данных WMI в XML). Большое внимание уделяется программирова-нию с использованием событий WMI. Книга написана прос-тым и доступным языком, а большое количество примеров позволит лучше усвоить излагаемый материал.

Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 544 стр. ISBN

5-9579-0089-3 (ориг. 1-55558-266-4).

Windows server 2003.Для профессионаловАлексей ВишневскийСреди подобных изданий эту книгу можно выделить четкой систематизацией излагаемо-го материала. Круг рассмот-ренных вопросов достаточно широк. В книге подробно рас-сказано о протоколе аутенти-фикации Kerberos v5 (реализа-ция, описание и структура про-токола, служба ключей, вари-анты аутентификации), стеке

протоколов TCP/IP (рассмотрены базовые сведения, основные утилиты, большинство широко используемых протоколов). От-дельные главы посвящены службам DNS и DHCP. Как логичес-кое продолжение главы, посвященной основам TCP/IP, в кни-ге рассмотрены вопросы управления маршрутизацией (вклю-чая такие сложные темы, как протоколы RIP и OSPF). Боль-шое внимание уделено рассмотрению AD. Автор не обошел вниманием и рассмотрение механизмов групповой политики и WINS. В книге также рассмотрены: мониторинг производи-тельности ОС Windows, развертывание службы сертифика-ции, служба удаленной установки, протокол SNMP. Несомнен-ный интерес представляют главы, посвященные интеграции Windows server 2003 с серверами Novell NetWare и UNIX.

Издательство «Питер», 2005 г. – 767 стр. ISBN 5-94723-

614-1.Рубрику ведет

Александр Байрак

ПопулярныеWeb-сервисы. Практика использованияУилл АйверсонИздание будет интересно прежде всего Java-разра-ботчикам, участвующим в создании веб-проектов. Основная тема книги – работа с API популярных веб-служб, таких как Pay-Pal, amazon.com, google.com, CDDB, eBay, FedEx.

В качестве примеров взаимодействия с вышеуказанными службами автор рассматривает восемь проектов – анализ конкуренции (анализ данных из amazon.com, eBay и google.com), аукционы и доставки (рассмотрены вопросы интег-рации FedEx и eBay), система оплаты счетов и факсимиль-ная связь (использование PayPal для оплаты счетов). Также представлены проекты: сидицированный поиск, агрегатор новостей, каталог аудиодисков, страница последних ново-стей (rss), автоматизация ежедневных обсуждений. Любо-пытны мысли автора о будущем развитии технологий веб-служб (таких как REST, UDDI, BPEL/BPEL4WS).

Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 240 стр. ISBN

5-9579-007-X (ориг. 0-596-00642-X).

DB2: решенияпо интеграцииРоб Катлип,Джон Медик Авторы книги, опираясь на свой личный опыт, повествуют о проблемах и решениях в об-ласти интеграции базы данных DB2 с различными приложени-ями. Вы узнаете о том, как со-гласовать DB2 с веб-сервера-ми, инструментами разработ-ки, инфраструктурами обмена сообщениями. Подробно опи-

саны: разработка решений, тенденции, технология и инстру-ментарий, интеграция и управление бизнес-процессами, ин-теграция информации, CRM: программа расширения услуг посредством электронной почты и с использованием DB2. Отдельная глава посвящена теме динамического бизнеса: B2B и B2C. Актуальная тема электронной коммерции рас-смотрена достаточно подробно: проектирование масштаби-руемой архитектуры электронной коммерции, веб-ярус, ярус предприятия, управление бизнес-процессом электронной коммерции. По большей части изложенный материал рас-считан на интеграторов и руководителей IT-отдела.

Издательство «КУДИЦ-ОБРАЗ», 2005 г. – 320 стр. ISBN

5-9579-0047-8 (ориг. 0-20017-5485-1).

Page 96: 033 Системный Администратор 08 2005

94

bugtraq

Обход ограничений безопасностив IPSec во FreeBSDПрограмма: FreeBSD 5.3, 5.4.Опасность: Низкая.Описание: Уязвимость существует в реализации алгорит-ма аутентификации AES-XCBC-MAC в IPSec, что приводит к тому, что для аутентификации используется ключ по умол-чанию вместо ключа, указанного администратором. Зло-умышленник может послать специально сформированные пакеты для аутентификации и обойти какие-либо ограни-чения на уровне IP. Удачная эксплуатация уязвимости тре-бует выключенного шифрования данных.URL производителя: www.freebsd.org.Решение: Установите исправление с сайта производите-ля.

Выполнение произвольного кодаи отказ в обслуживаниив различных диссекторах в EtherealПрограмма: Ethereal версии до 0.10.11.Опасность: Критическая.Описание: 1. Удаленный пользователь может с помощью специально сформированного пакета аварийно завершить работу приложения. Уязвимость существует в диссекторах: AgentX, BER, CAMEL, DCERPC, DHCP, DOCSIS, HTTP, IS-IS LSP, LDAP, NCP, PER, RADIUS, SCTP, Telnet.

2. Злоумышленник может вызвать зацикливание прило-жения при обработке специально сформированных пакетов в диссекторах: 802.3, BER, DHCP, H1, MEGACO, SMPP.

3. Злоумышленник может вызвать разыменование нуле-вого указателя в диссекторах: CAMEL, GIOP и WBXML.

4. Атакующий может вызвать переполнение буфера в SMB-диссекторе.URL производителя: www.ethereal.com.Решение: Установите последнюю версию (0.10.12) с сай-та производителя.

Однобайтовое переполнение буфера в mod_ssl при обработке CRLПрограмма: mod_ssl.Опасность: Высокая.Описание: Уязвимость существует при обработке CRL (certificate revocation lists). Удаленный пользователь может создать специальным образом CRL, который при обработ-ке функцией callback() вызовет однобайтовое переполне-ние буфера и даст возможность злоумышленнику выпол-нить произвольный код на целевой системе.URL производителя: www.modssl.org.Решение: Установите исправление с сайта производите-ля.

Выполнение произвольного кода в Sophos Anti-VirusПрограмма: Sophos Anti-Virus версии до 3.96.0; версии до 4.5.4.Опасность: Высокая.Описание: Переполнение буфера в Sophos Anti-Virus мо-жет позволить злоумышленнику выполнить произвольный код на целевой системе. Подробности уязвимости не рас-крываются.URL производителя: www.sophos.com.Решение: Установите исправление с сайта производите-ля.

Обход каталога в MDaemonПрограмма: MDaemon версии до 8.1.0.Опасность: Высокая.Описание: Уязвимость существует в контентном фильтре приложения при обработке вложенных файлов со специ-ально сформированными именами. Злоумышленник может создать специально сформированный файл, содержащий в своем имени символы обхода каталога, и записать его в произвольную директорию на системе.URL производителя: www.altn.com.Решение: Установите исправление с сайта производите-ля.

Выполнение произвольного кодав Cisco IOS при обработке IPv6-пакетовПрограмма: Cisco IOS 12.4 и более ранние версии.Опасность: Высокая.Описание: Удаленный пользователь может послать специ-ально сформированный IPv6-пакет логическому интерфей-су устройства и вызвать перезагрузку устройства или вы-полнить произвольный код на целевой системе.URL производителя: www.cisco.com.Решение: Установите исправление с сайта производите-ля.

Переполнение буферав CA BrightStor ARCserve Backupи Enterprise Backup-агентахПрограмма: BrightStor ARCserve Backup v9.01, r11.0, r11.1; BrightStor Enterprise Backup 10, 10.5.Опасность: Критическая.Описание: Переполнение буфера обнаружено при обработ-ке входных данных. Злоумышленник может послать специ-ально сформированные данные на порт приложения 6070, вызвать переполнение буфера и выполнить произвольный код на целевой системе с привилегиями Local System или вызвать отказ в обслуживании.URL производителя: www.ca.com.Решение: Установите исправления с сайта производите-ля.

Отказ в обслуживании в ядре LinuxПрограмма: Linux kernel версии до 2.6.13-rc6.Опасность: Средняя.Описание: Уязвимость существует при обработке связок ключей (keyrings). Локальный пользователь может опреде-ленным образом создать связку ключей, что приведет к от-казу в обслуживании системы.URL производителя: www.kernel.org.Решение: Установите исправление с сайта производите-ля.

Составил Александр Антипов

Page 97: 033 Системный Администратор 08 2005

95№8, август 2005

подписка на II полугодие 2005

Российская Федерация! Подписной индекс: 81655 Каталог агентства «Роспечать»! Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог»! Альтернативные подписные агентства: Агентство «Интер-Почта» (095) 500-00-60, курьерская

доставка по Москве Агентство «Вся Пресса» (095) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74! Подписка On-line http://www.arzy.ru http://www.gazety.ru http://www.presscafe.ru

СНГ В странах СНГ подписка принимается в почтовых отделе-ниях по национальным каталогам или по списку номен-клатуры АРЗИ: ! Азербайджан – по объединенному каталогу российских

изданий через предприятие по распространению печа-ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)

! Казахстан – по каталогу «Российская Пресса» через ОАО «Казпочта» и ЗАО «Евразия пресс»

! Беларусь – по каталогу изданий стран СНГ через РГО «Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)

! Узбекистан – по каталогу «Davriy nashrlar» российские издания через агентство по распространению печати «Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик, 5/3, офис 33)

! Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарьяна, 22)

! Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29) и АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)

! Молдавия – по каталогу через ГП «Пошта Молдавей» (МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)

по списку через ГУП «Почта Приднестровья» (МD-33-00, г.Тирасполь, ул.Ленина, 17)

по прайслисту через ООО Агентство «Editil Periodice» (2012, г.Кишинев, бул. Штефан чел Маре, 134)

! Подписка для Украины: Киевский главпочтамп Подписное агентство «KSS» Телефон/факс (044)464-0220

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

81655

по каталогу агентства «Роспечать»

87836

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

Page 98: 033 Системный Администратор 08 2005

96

СИСТЕМНЫЙ АДМИНИСТРАТОР

№8(33), Август, 2005 год

РЕДАКЦИЯ

Исполнительный директор

Владимир ПоложевецОтветственный секретарь

Наталья Хвостова[email protected]Технический редактор

Владимир ЛукинРедакторы

Андрей БешковАлексей БарабановРашид Ачилов

РЕКЛАМНАЯ СЛУЖБА

тел./факс: (095) 928-8253Константин Меделянreс[email protected]

Верстка и оформление

[email protected]Дизайн обложки

Николай Петрочук

По вопросам распространения

обращайтесь по телефону:(095) 928-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2 стр. 1тел./факс: (095) 928-8253Сайт журнала: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТА

Петр ПоложевецУЧРЕДИТЕЛИ

Владимир ПоложевецАлександр МихалевИЗДАТЕЛЬ

ЗАО «Издательский дом«Учительская газета»

Отпечатано типографией

ГП «Московская Типография №13»Тираж 8400 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002 г.)

За содержание статьи ответствен-ность несет автор. За содержание рекламного обьявления ответствен-ность несет рекламодатель. Все пра-ва на опубликованные материалы за-щищены.

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

Спешите оформить подпискуна первое полугодие 2006 года!

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

Доставка почтой в любую точку России.

Ремонтируеми восстанавливаем жесткие дискиЦенность обрабатываемой информа-ции с каждым годом неуклонно рас-тет, а надежность жестких дисков, на-против, стремительно падает. Но да-же после физического выхода жест-кого диска из строя в 90% случаев ин-формацию можно восстановить! За-частую даже без специального обору-дования! Речь пойдет об аппаратных отказах (дефектах поверхности, вы-ходе электроники из строя), также об-судим проблемы выбора накопителя: сравним статистику отказов для раз-ных моделей и производителей и срав-ним легкость ремонта.

ДоменыWindows 2000/2003 – отказываемся от рабочей группыОчень часто наблюдается тенденция быстрого роста локальных сетей не-больших компаний. Сначала это два-три компьютера для бухгалтерии, за-тем еще по одному для директора, его заместителя, секретаря, нескольких менеджеров и т.д. Через какое-то вре-мя их количество опять увеличивает-ся, так как штат сотрудников расширя-ется. Однако все эти компьютеры яв-ляются членами рабочей группы, в ко-торой каждый участник равноправен. Администрировать такую сеть стано-вится неудобно, так как понятие «цен-

трализованное управление» и «рабо-чая группа» являются взаимоисключа-ющими. Именно в этот момент систем-ному администратору приходится при-нимать решение о переходе к домен-ной структуре.

С какими трудностями придется столкнуться в первую очередь? Что необходимо предусмотреть заранее, чтобы процесс перехода прошел без сучка и задоринки?

В данной статье я попытаюсь обоб-щить свой опыт подобных внедре-ний, чтобы заранее облегчить вашу задачу.

Загрузочный Flash-дискс DOS и FreeBSDВам удалось уговорить руководство закупить новый сервер, и вот он, кра-савец, стоит рядом, сверкая ручка-ми 19-дюймового корпуса... Одна про-блема – как поставить на него опе-рационную систему? Дисковода гиб-ких дисков в нем нет, CD-ROM тоже... Можно было бы, конечно, открыть его и воткнуть CD-ROM на время уста-новки... А если придется восстанав-ливать систему? Вынимать из стой-ки? Так только за то время, пока бу-дешь вынимать, весь телефон обор-вут. Если загрузиться с USB Flash-дис-ка? Его создавать надо... Впрочем, ни-чего сложного в этом нет, мы расска-жем вам, как очень просто создать за-грузочный Flash-диск с разделами DOS и FreeBSD.