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

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

№5(30) май 2005


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

СЬ
www.samag.ru

ЛИ
Почему MS SQL медленно работает?
Ищем причины
ЛИ
ТЯ Е

Ж ПИ
Строим защищенную беспроводную сеть:
ЗА ДНИ

WPA-Enterprise, 802.1x EAP-TLS


НУ

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

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

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

№5(42) май 2006

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

ТР
в корпоративной сети
Эффективно управляем

С
подписной индекс 20780
полями пользователей в AD

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

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


создателем языка Perl
www.samag.ru

Самый подробный материал

№5(42) май 2006


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

ИС НН
ЕН
о программе Sendmail
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

РА Е О

в истории IT-журналистики!

КО НЕО
АВ СЛ
Л

Л
ХА

ПО
УЕ

ЗА
Настраиваем эффективную
систему сетевой защиты Zorp
Так видит журнал читатель, оформивший подписку:
Windows SharePoint Services:
№5(30) май 2005
подписной индекс 81655
www.samag.ru

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


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

Box Backup: узнайте всё


Эффективно управляем
полями пользователей в AD
Контролируем безопасность сети
с помощью OSSIM
Интервью с Ларри Уоллом –
создателем языка Perl

о горячих резервных копиях!


Лицензию? Вам какую?
Как построить
отказоустойчивый кластер
с минимальным бюджетом
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Обзор дистрибутива Arch Linux

Роспечать – 20780, 81655 Генная инженерия на службе


распаковки PE-файлов
Пресса России – 87836
Интер-почта – тел. (495) 500-00-60
оглавление

3 ТЕНДЕНЦИИ БЕЗОПАСНОСТЬ
4 РЕПОРТАЖ 52 Настраиваем эффективную
систему сетевой защиты Zorp
АДМИНИСТРИРОВАНИЕ ModSecurity – Open Source firewall седьмого уровня –
позволяет защититься от угроз, типичных для веб-сер-
6 Box Backup – горячие резервные копии вера. Но в обычной сети встречаются и другие серви-
Резервное копирование – это то, без чего невозможно сы, нуждающиеся в защите. Сергей Яремчук
представить ни одну информационную структуру. Су- grinder@ua.fm
ществует необычный способ создания резервных ко-
пий, а именно – метод online-бэкапирования. 58 Генная инженерия на службе
Алексей Коршунов распаковки PE-файлов
akeeper@samag.ru Алгоритм универсального распаковщика, «снимающе-
го» даже сложные полиморфные протекторы.
12 Как работает Sendmail? Крис Касперски
Полезные подробности kk@sendmail.ru
Ещё лет десять назад само понятие «электронная поч-
та» прочно ассоциировалось с программой Sendmail. 70 Используем средства библиотеки OpenSSL
Сейчас ситуация несколько изменилась, но проект для криптографической защиты данных
Sendmail по-прежнему остаётся одним из лидеров. Часть 2
Сергей Супрунов Благодаря своим уникальным свойствам ассиметрич-
amsand@rambler.ru ные алгоритмы шифрования применяются для защи-
ты информации в тех областях, где использование сим-
20 Возможности технологии метричных алгоритмов затруднительно. Самый попу-
MS Windows SharePoint Services лярный представитель семейства ассиметричных ал-
Развитие IT-отдела связано с переходом от обслужи- горитмов – алгоритм RSA. Владимир Мешков
вания базовой IT-инфраструктуры к созданию интра- ubob@mail.ru
нет-порталов и автоматизации бизнес-процессов. Эф-
фективный инструмент для решения подобных задач – IMHO
MS SharePoint. Иван Хрипунов
i-ivank@microsoft.com 76 Лицензию? Вам какую?
Артем Черневский Как часто мы слышим, что открытых лицензий на про-
achern@microsoft.com граммное обеспечение развелось слишком много. BSD,
Apache, CDDL, GPL2/3, LGPL… Даже для юристов это
28 Узнай секреты WMI: события и провайдеры настоящий кошмар. А что же тогда говорить о нас, про-
Часть 2 стых (хотя и системных) администраторах?
Ключ к управлению системой и приложениями. Сергей Супрунов
Константин Леонтьев amsand@rambler.ru
klеоnt@miсrоsоft.соm
WEB
36 Отказоустойчивый кластер
с минимальным бюджетом 80 Возможности поискового движка
Строим эффективный кластер и используем его в ка- DataparkSearch
честве платформы для критически важных приложений Как организовать поиск информации на файловом сер-
на примере СУБД Oracle 9i. Сергей Довганюк вере не только по названию и типу документа, но и по его
dovganuk_sergey@mail.ru контенту? Возможно ли создать подходящий инструмент,
доступный и прозрачный для пользователей?
42 Arch Linux: руководство к быстрому старту Иван Максимов
Обзор дистрибутива Arch Linux. admin@ksanf.spb.ru
Валентин Синицын
val@linuxcenter.ru РЕТРОСПЕКТИВА
ЧЕЛОВЕК НОМЕРА 86 Надежда умирает последней:
история компании SGI. Часть 2
48 Прихоти судьбы. Уход основателя Silicon Graphics Джима Кларка изна-
Биография IT-просветителя чально не был воспринят всерьёз. «Подумаешь, ушёл
Когда-то, протестуя против навязанных жизнью ролей один человек, когда в компании таких, как он, – тысячи».
Алексей Сальников, директор крупнейшего в России Однако поломка даже единственной шестерёнки мо-
IT-портала «ЦИТ Форум», вступил с судьбой в перего- жет стать причиной выхода из строя всего механизма.
воры. Мол, ты дай мне другой вариант самореализации, Дмитрий Мороз
а я обещаю не ныть на крутых поворотах. Договор всту- akuji@list.ru
пил в силу. Оксана Родионова
rodion@dol.ru 92 КНИЖНАЯ ПОЛКА
41, 69, 85 BUGTRAQ

СПЕШИТЕ ОФОРМИТЬ ПОДПИСКУ НА II ПОЛУГОДИЕ 2006 ГОДА!

№5, май 2006 1


тенденции
Red Hat купила JBoss тальных – на машинах представлены по две операцион-
Компания Red Hat сообщила о приобретении JBoss, извес- ные системы». Также он сообщил, что переход оставших-
тной своим связующим Java-ПО. Сумма контракта оцени- ся 3000 сотрудников на компьютеры с исключительно от-
вается в 350 млн. долларов. Информация о готовящемся крытым программным обеспечением должен осуществить-
поглощении JBoss какой-либо крупной организацией ИТ- ся приблизительно в течение ближайшего года. Переход
индустрии циркулировала в СМИ не один месяц, однако персонала Novell с MS Windows и MS Office на Open Source
ни у кого до недавнего времени не было определенности начался в марте 2004 года. Тогда Дебра Андерсон (Debra
насчет того, кто же будет новым владельцем. Марк Флери Anderson), главный ИТ-руководитель Novell, выражала на-
(Marc Fleury), исполнительный директор и основатель JBoss, дежду, что большая часть сотрудников будет пользовать-
объяснил выбор Red Hat тем, что обе компании схожи в вы- ся операционной системой GNU/Linux и офисным пакетом
бранной модели Open Source, и заинтересованностью в со- OpenOffice.org к середине 2005 года.
здании одной крупной фирмы, занимающейся ПО с откры-
тым кодом и имеющей в своем арсенале полный набор про- Google начинает «Лето кода» 2006
дуктов и услуг. Это станет возможным благодаря интегра- Крис Дибона (Chris DiBona) из компании Google в середине
ции разработок JBoss и Red Hat. JBoss станет независи- апреля объявил, что акция «Лето кода» состоится и в этом
мым подразделением Red Hat, возглавляемым Флери, ко- году. На участие в The Summer of Code 2006 уже подали за-
торый будет отчитываться только перед главой Linux-ком- явки многие популярные в сообществе Open Source орга-
пании Мэтью Шуликом (Matthew Szulik). низации и проекты. Так, например, в списке можно найти
Apache Software Foundation, Debian, FreeBSD Project, GCC,
Linspire запустила Freespire Gentoo, GNOME, KDE, NetBSD, Postgresql, Python Software
Компания Linspire последовала примеру Red Hat и Novell Foundation, Subversion Corporation, The Perl Foundation, The
и объявила об учреждении бесплатного Linux-дистрибу- Wine Project. Причем большая их часть подготовила и обна-
тива, поддержкой которого будет заниматься сообщество родовала основные задачи, решение которых будет прохо-
разработчиков-энтузиастов, – Freespire. У дистрибутива бу- дить в рамках инициативы Google. Присылать свои разра-
дет две редакции: обычная, в которую войдет не только ПО ботки в Google можно начиная уже с 1 мая. Основные тре-
с открытым кодом, но и некоторые проприетарные продук- бования для желающих проявить себя и помочь проектам –
ты (некоторые кодеки, драйверы и т. п.), и «свободная», со- нужно быть студентом в возрасте от 18 лет.
стоящая исключительно из Open Source. Выход первой бе-
та-версии Freespire состоится в августе этого года. С более Составил Дмитрий Шурупов
подробной информацией о новом проекте можно ознако- по материалам www.nixp.ru
миться на www.freespire.org.

Китай назвали крупнейшим


Linux-рынком в мире
Очередное исследование специалистов из компании IDC
показало, что Китай на данный момент является самым
большим в мире рынком ОС GNU/Linux и Open Source. Бла-
годаря росту заинтересованности в открытом ПО со сторо-
ны государственных учреждений, банков и телекоммуника-
ционных предприятий объем Linux-рынка Китая в 2005 году
вырос почти на треть по сравнению с 2004 годом, составив
11,8 млрд. долларов. Особую роль в наблюдаемом явлении
в IDC отводят местным компаниям China Standart Software
и Red Flag Linux, которые активно продвигают Linux-реше-
ния в различные отрасли. Но на пути дальнейшего распро-
странения свободного ПО в азиатской стране стоят тради-
ционные проблемы: недостаток опыта работы со системой
и Linux-программистов, малая заинтересованность в откры-
тых решениях среди обычных пользователей.

Персонал Novell медленно переходит


на свободное ПО
Уже два года минуло с того момента, когда был дан
старт миграции персонала компании Novell на GNU/Linux
и OpenOffice.org, однако до сих пор у 60% служащих ус-
тановлена и MS Windows. Рон Овсепян (Ron Hovsepian),
президент Novell, на пресс-конференции в Сиднее (Авс-
тралия) заявил, что «на данный момент у 2000 сотрудни-
ков из 5000 установлена одна система, GNU/Linux, а у ос-

№5, май 2006 3


репортаж

Впервые в России: Solaris Day


Корпорация Sun Microsystems оправдала свое название и озарила пасмурные московские
будни, превратив их в День Solaris.

К
онференция для разработчи- щедоступной кодовой базе, распро- можно увидеть изменения в последней
ков Solaris Day прошла 19 апре- страняемой под лицензией CDDL. версии Solaris?» – разработчики ука-
ля в один день с NetBeans Day. Выступление Каррэна заверши- зывают на значительно уменьшенное
Эти два мероприятия стали отправ- лось курьезным случаем, вызванным время загрузки системы (благодаря
ной точкой для впервые проводившей- вопросом слушателя о поддержке про- асинхронному запуску сервисов в SMF
ся в России акции Sun Tech Days (20-21 цессоров Itanium в Solaris. Он снача- с учетом их зависимостей).
апреля). И несмотря на то что на Tech ла не мог понять (сделал вид, что не Питер Карлсон продолжил рас-
Days приехал с докладом легендарный мог?), о чем его спрашивают, а после крытие темы для разработчиков. Его
Джеймс Гослинг, меня во всем этом того как несколько раз повторили сло- доклад был посвящен общим вопро-
3-дневном празднике, организован- во «Itanium», он ответил отчетливым сам миграции ПО с Linux на Solaris.
ном Sun, заинтересовало именно пер- смешком в адрес этой разработки Intel, Иногда он почти в сатирической ма-
вое событие, полностью посвященное что изрядно повеселило весь зал. Пос- нере пытался показать достоинства
операционной системе компании. ле чего Фрэнк шутливо раскритиковал ОС от Sun, провоцируя слушателей
На третьем этаже московской гос- процессор, «с которым теперь никто не вопросами в стиле «неужели вам еще
тиницы «Альфа» всех гостей встреча- знает, что делать». что-то нужно?» и просьбами «назвать
ли девушки, которые выдавали бей- Затем на продолжительное время программу, которой не хватает в этом
джи, программки для двух грядущих место докладчиков заняли наши со- списке!». (В это время за его спиной
мероприятий (Solaris Day и NetBeans отечественники. «Рубрику» для раз- демонстрировались перечни привыч-
Day) и анкеты. Никакого столпотворе- работчиков открыл обзор Sun Studio 11, ных для Linux-пользователей приложе-
ния и суеты не было. Оживление воз- сообщение о котором разбили на две ний, доступных и для Solaris.) В общем,
никло к началу конференции, когда части. В первой рассказывалось о том, такой красноречивый тезис из докла-
всех пригласили пройти в зал. что из себя представляет данный про- да Карлсона, как «Solaris is better Linux
дукт, из чего состоит и на что спосо- than Linux», очень точно отображает
Какие доклады бен, а во второй – о способах оптими- суть всего того, что он пытался донес-
Из иностранных докладчиков Sun зации, используемых в Sun Studio для ти до публики.
на конференцию прибыли два «техно- повышения производительности со- А вот уже следующее сообщение,
логических евангелиста»: Фрэнк Кар- здаваемого ПО. посвященное контейнерам Solaris, по-
рэн и Питер Карлсон. Первому и выпа- Последовавший кофе-брейк (стоит казало, что в этой операционной систе-
ла честь открывать Solaris Day в Моск- отметить, что как перерывы на кофе, ме пока не все идеально, как того хо-
ве. Каррэна рассказал о том, что и как так и обед оставили исключительно телось бы Карлсону (разумеется, пов-
поменялось в процессе разработки ОС положительные впечатления об орга- семестно, а не только в процессе пе-
компании после открытия исходно- низации конференции) перешел в до- реноса приложений с Linux). Некото-
го кода, запуска проекта OpenSolaris, клад о разработке многопоточных при- рые вопросы, адресованные Андрею
а также попутно в лаконичной форме ложений в среде ОС Solaris, существу- Дорофееву по поводу использования
сообщил общие сведения о новшест- ющих для этого API и утилит. По «уров- зон в Solaris, показали, что данной
вах Solaris 10. ню технической информации» (оценку технологии еще не хватает некоторых
Фрэнк акцентировал всеобщее вни- под таким заголовком предлагали ста- ожидаемых заказчиками возможнос-
мание на том, что OpenSolaris не явля- вить каждому докладу в раздававших- тей. Хотя, конечно, нужно учитывать,
ется дистрибутивом – это лишь кодовая ся анкетах) это было, пожалуй, самое что зоны в Solaris появились не так
база, на основе которой любой желаю- серьезное выступление. давно и ведется активная работа над
щий может создать свою систему. Сре- Однако наибольший резонанс вы- их совершенствованием.
ди существующих на сегодняшний день звал доклад Андрея Дорофеева о но- Завершать Solaris Day доверили
подобных решений он выделил Nexenta вой системе управления сервисами Карлсону с самым продолжительным
OS, SchilliX и Belenix. Пример использо- в Solaris (Service Management Facility, докладом из всех, что были представ-
вания OpenSolaris для построения пол- SMF), во время которого появилась не- лены на конференции. Питеру предсто-
ноценной ОС уже с ближайшим рели- бывалая оживленность. Инновацион- яло подробно рассказать о DTrace. Еще
зом, естественно, покажет и сама Sun: ный подход Sun к работе с сервисами в своем вступлении его коллега подго-
Solaris 11 (и дальнейшие версии флаг- вызвал существенный интерес у слу- товил аудиторию, отметив, что DTrace
манской ОС) будет основываться на об- шателей. На вопрос: «Как наглядно по праву считается одной из самых

4
репортаж
выдающихся инновационных техноло- рерывов. Попутно я сослался на то, его главных достоинствах и новшест-
гий последнего времени, поэтому ни- что даже Мартин Финк, один из глав- вах, – у Sun прибавилась острая необ-
чего удивительного в таком распоряд- ных Linux-специалистов HP, не так дав- ходимость в продвижeнии OpenSolaris.
ке докладов нет. Карлсон начал с об- но на одной из конференций заметил, Этот решительный шаг, что предприня-
зора данного инструмента и простых, что лицензий на открытое ПО стало ла компания в недавнее время, и те-
но наглядных демонстраций того, как слишком много. Через некоторое вре- перь в Sun не без оснований делают
он работает на своем ноутбуке, а за- мя в дискуссию ввязался и стоявший ставку на дальнейшее развитие идеи
тем перешел к языку D. Затянувше- рядом Питер Карлсон, который про- использования модели Open Source.
еся описание многочисленных конс- явил себя убедительным адвокатом Чем больше им удастся заинтере-
трукций средства создания программ CDDL. В общих чертах их идеология совать в этом сообщество, тем луч-
(предназначенных в первую очередь (защиты новой лицензии) сводится к шую они получат отдачу, необходи-
для мониторинга и отслеживания ис- тому, что разработчик должен иметь мую для продуктов, лежащих в осно-
точников возникающих в системе про- возможность самостоятельно решать, ве их бизнеса, – это обычное правило,
блем) на базе DTrace, возможно, бы- под какой лицензией ему опубликовы- работающее для всех компаний, при-
ло не самым удачным завершением вать продукт, но при этом есть потреб- меняющих данную стратегию в отно-
конференции. Слушателей уже оста- ность в том, чтобы все модификации шении ПО с открытым кодом.
валось не так много, да и сам Питер, были доступны другим. В этом отно- Бытует мнение, что OpenSolaris –
ощущая «настроение масс», постарал- шении Sun приглянулась MPL, однако последняя отчаянная попытка Sun со-
ся по возможности быстро завершить и здесь потребовались некоторые поп- хранить свои позиции на рынке сервер-
свое сообщение. равки для того, чтобы сделать лицен- ных операционных систем, где GNU/
зию более универсальной (убрать при- Linux-системы теснят UNIX-конкурен-
Почему CDDL? вязку к Mozilla и к США). тов. Если модель Open Source так по-
Упоминание CDDL в первом докла- могла Linux, то почему она не возымеет
де Каррэна вкупе со словами, что это Вместо заключения подобного эффекта для UNIX? Мнения
«истинное ПО с открытым кодом», по- Участники конференции, не поле- на этот счет среди членов сообщест-
будило меня к достаточно распростра- нившиеся заполнить анкеты, получи- ва, журналистов и аналитиков расхо-
ненному в сообществе вопросу. Зачем ли в подарок футболку с символикой дятся – причем обычно не в пользу Sun.
Sun было придумывать очередную ли- OpenSolaris и лицензионную коробку А вот в компании думают иначе. Кто
цензию Open Source, когда их и так су- Solaris с двумя DVD: редакциями этой был прав, как обычно, покажет время.
ществует изрядное множество? С та- ОС для x86 и для SPARC. Учитывая, что на OpenSolaris будет ос-
ким вопросом, предварительно осве- Вполне естественно, что к обыч- нован уже следующий релиз Solaris, –
домив ответчика о том, что собираюсь ным задачам, возлагаемым на подоб- это будущее вполне обозримо.
говорить на «религиозные» темы, я по- ные мероприятия: рассказать о самом
дошел к Фрэнку во время одного из пе- продукте (применительно к Solaris), Дмитрий Шурупов

Пятая международная конференция


Современные технологии эффективной разработки веб-приложений с использованием PHP
 Когда: 25-26 мая тию в работе организаций больше людей – и все с гораздо
 Где: г. Москва, Центральный Дом Предпринимателя, большим успехом, чем если бы каждая организация зани-
ул. Покровка, д. 47/24, стр. 1 (м. Красные Ворота) малась этим самостоятельно. Вы сможете познакомиться
 Организаторы: Клуб разработчиков PHP и Интер- как с историями успеха крупных интернет-проектов, так и
нет-агентство WebProfy с неудачными примерами. Участники конференции – про-
 Подробности: www.phpconf.ru фессиональные и повышающие свою квалификацию веб-
разработчики, руководители IT-отделов, крупных интернет-
Вот уже пять лет подряд в конце мая это мероприятие со- проектов, директора по развитию, а также потенциальные
бирает профессионалов в области разработок веб-прило- инвесторы и пресса.
жений на РНР. Впервые в России в этом году на конферен- Программа конференции предусматривает: тематичес-
ции выступят два легендарных человека, имеющих непос- кие выступления, мастер-класс по экстремальному про-
редственное отношение к созданию языка программиро- граммированию на РНР, олимпиада по РНР-програмирова-
вания PHP: Расмус Лердорф (Rasmus Lerdorf) – основатель нию. Впервые в 2006 году материалы конференции будут
проекта PHP, и Андрей Змиевский – активный разработчик напечатаны в оффлайновой версии журнала «PhpInside».
ядра и модулей PHP. Мы приглашаем принять учатие в данном мероприятии
Это значимое событие в среде профессионалов веб- всех активных разработчиков веб-приложений и тех, кому
программирования, которое предоставляет уникальный это интересно! Поторопитесь, количество мест ограничен-
шанс продемонстрировать свой потенциал и познако- но! По всем вопросам, связанным с регистрацией в качест-
миться с новыми технологиями, последними тенденция- ве участников конференции обращайтесь к Максиму Смир-
ми в области веб-разработок, поделиться идеями и дости- нову по телефону: +7 (495) 585-9261, или пишите по адре-
жениями, установить новые связи, чтобы привлечь к учас- су: phpconf2006@rambler.ru.

№5, май 2006 5


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

Box Backup – горячие резервные копии

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

Как делают «обычное» или иным причинам. Как правило, не-  Раз в две недели копируются все
резервировное обходимость инкрементного резерв- изменённые за этот период фай-
копирование ного копирования объясняется огром- лы или же объединяются архивы
Когда говорят о создании бэкапов су- ными объёмами той информации, ко- за две недели.
ществующей информационной струк- торая постоянно меняется и нуждает-  Схема повторяется до тех пор, по-
туры, на ум сразу приходят скрип- ся в резервировании. ка не наступит новый месяц.
ты из cron, инкрементальные архивы, Вы берёте за основу одну из схем
мощный сервер с огромным дисковым резервировного копирования, добав- Вы можете хранить по две поне-
массивом, стример и другие устройства ляете необходимую, на ваш взгляд, дельные копии или по одной, в зави-
записи на внешние носители. Без все- избыточность и вводите получен- симости от ваших предпочтений или
го этого довольно сложно представить ное решение в эксплуатацию. Не са- принятых в вашей компании стандар-
себе полноценную систему резервного мым плохим вариантом будет следу- тов. Процедура восстановления фай-
копирования, хотя многие до сих пор ка- ющая схема: лов обратна процедуре их занесения
ким-то образом работают вообще без  Раз в месяц делается полное ре- в архив.
бэкапов. Не стану доказывать необхо- зервное копирование всех нужда-  Восстановление последней месяч-
димость иметь «крепкие тылы», пото- ющихся в этом файлов. ной копии.
му что это известно всем.  Ежедневно происходит копирова-  Восстановление двухнедельной ко-
Вышеперечисленные программные ние изменённых за текущий день пии.
и аппаратные составляющие призваны данных.  Восстановление недельной копии.
обеспечить возможность восстановле-  Еженедельно копируются все из-  Восстановление копий по дням
ния файлов в случае их утраты по тем менённые за неделю данные. в обратном порядке.

6
администрирование
Схемы, подобные описанной, ис- вышедшего из строя блока питания пии они лишь помечаются как удалён-
пользуются во многих компаниях. сервера без его выключения. (Думаю, ные. Пользователь (да-да, пользова-
Применяя их, можно быть уверенным вы сталкивались с такими компьюте- тель, а не системный администратор,
в том, что все файлы будут восста- рами или хотя бы слышали о них.) Со- но об этом позже) в любое время может
новлены на момент создания послед- здание резервной копии файлов поль- спокойно попросить систему вернуть
ней «дневной» копии. При достаточ- зователя происходит в интерактивном удалённый по ошибке файл. Из архи-
но больших объёмах данных (что ра- режиме по мере их изменения. Схема ва промаркированные данные исчез-
зумеется не редкость) вы вынуждены работы проста: нут только тогда, когда допустимый
использовать внешние носители для  При первоначальном запуске, сис- объём, отведённый под резервирова-
хранения и иметь необходимое коли- тема сканирует указанные ей ди- ние, приблизится к той отметке, за ко-
чество пространства на жёстких дис- ректории и переносит их в архив. торой выбора нет – либо вычищать по-
ках для создания хотя бы одной пол- После чего следит за происходя- меченные файлы, либо будет некуда
ноценной копии. (Условие не обяза- щим в файловой системе. копировать новые.
тельное, но значительно упрощающее  По мере обнаружения изменивших-
жизнь.) Однако подобные схемы рабо- ся файлов она переносит их в ар- Требовательность к ресурсам
ты имеют ряд существенных недостат- хив. Большую сетевую нагрузку, как и сле-
ков. Среди которых: довало ожидать, можно наблюдать
 Известные проблемы при резерв- Другими словами, в резервной ко- только при создании первоначально-
ном копировании «внешних» поль- пии всегда находятся самые послед- го бэкапа, когда системе необходимо
зователей. Вы не можете заста- ние версии файлов. В случае потери единовременно перенести большое
вить пользователей ноутбуков еже- данных на исходной системе вы мо- количество данных. Однако приори-
дневно оставлять свои компьютеры жете безболезненно и быстро восста- тет процесса (по умолчанию) клиента
в офисе включёнными. новить их в полном объёме. Заманчи- Box Backup довольно низок и рассчи-
 Проблемы обеспечения безопас- во, не правда ли? тан так, чтобы не мешать общей ра-
ности резервных копий. Система Box Backup может рабо- боте компьютера. Он работает в фо-
 Громоздкость системы с большим тать в довольно внушительном спис- новом режиме и не вносит ощущения
количеством этапов. ке OS: дискомфорта от «задумчивости» сис-
 Сравнительно большое количес-  OpenBSD; темы в целом. Впоследствии системе
тво времени для восстановления,  Linux; потребуется переносить только новые
как единичных утраченных фай-  NetBSD; или изменённые файлы, а это не такой
лов, так и больших массивов.  FreeBSD; большой трафик.
 Неудобство работы с архивами –  Darwin / Mac OS X 10.5;
время поиска по базе резервных  Cygwin (Windows) (только клиент); Безопасность резервного
копий может оказаться весьма про-  Native Windows (только клиент); копирования
должительным.  Solaris. Обеспечению безопасности уделено
 Требуется помощь системного ад- немало внимания.
министратора для работы с архи- Несколько вполне закономерных  Авторизация клиента на сервере
вами. вопросов, которые возникают при пер- бэкапов.
вом ознакомлении с этой системой го-  Безопасность передачи данных.
Перечислены далеко не все сущес- рячего резервного копирования:  Шифрование данных.
твующие проблемы, а только те, с ко-  Если пользователь удалил файлы,  Защита структуры данных.
торыми приходилось мне сталкивать- что будет с резервной копией?  Безопасность хранения данных.
ся. Возможно, решение, которое ис-  Постоянное копирование файлов
пользуется вами, лишено этих недо- подразумевает огромный сетевой Для авторизации клиента на сер-
статков. Возможно, вы приобрели го- трафик и большую загрузку серве- верной стороне системы Box Backup
товый программный комплекс резер- ра бэкапов. Как решить эту прою- используется SSL. На каждом ком-
вирования и он отвечает всем вашим лему? пьютере, данные которого нуждают-
требованиям. И тем не менее обрати-  Чем обеспечивается безопасность ся в резервировании, создаётся SSL-
те внимание на еще один принцип со- копий? сертификат, подписываемый на сер-
здания бэкапов.  Если файлов очень много, то сколь- вере.
ко ресурсов для своей работы пот- Для обеспечения безопасной сре-
Online-бэкапирование ребуется программе для проверки ды передачи данных используется TLS-
Box Backup изменений? шифрование. Любые операции меж-
Система относится к так называемому ду клиентом и сервером происходят
online-резервному копированию. Поче- Процедура удаления по шифрованому каналу. Это позво-
му оно носит такое название? Файлы, которые были удалены из сис- ляет использовать систему резервно-
В отличие от описаной выше схе- темы, на самом деле никуда не исче- го копирования даже в небезопасной
мы, «горячее» резервное копирование зают. (Я говорю, разумеется, не о кли- среде без опасений, что данные могут
делается... постоянно. Это как замена ентском компьютере.) В резервной ко- быть перехвачены.

№5, май 2006 7


администрирование
Безопасность файлов в резервных копиях обеспечива-  /etc/boxbackup – директория, где будут созданы конфи-
ется шифрованием. Каждый клиент системы Box Backup гурационные файлы. (Если вы устанавливаете систему
при конфигурировании создаёт уникальный ключ. С этим не в Gentoo Linux, то по умолчанию используйте дирек-
ключом шифруются все передаваемые файлы. И только торию /etc/box);
имея ключ можно получить доступ в архив для просмотра  2048 – размер блока файлов;
или восстановления файлов.  /raid/0.0 и остальные – директории, где будут храниться
Более того, на сервере резервных копий файлы хра- непосредственно бэкапы. Эти директории должны быть
нятся под уникальными номерами, а не названиями. созданы вами. Автоматически они созданы не будут.
Не зная, где какой файл находится, невозможно дога-
даться, что это. Впрочем, даже зная, что за файл перед После того как файл конфигурации готов, создадим
вами, вы ничего не сможете добиться. Ведь они зашиф- пользователя, от которого будет работать Box Backup.
рованы, а для доступа нужен ключ. Никаких паролей не
требуется. #useradd _bbstored

Установка серверной части И создадим основной конфигурационный файл сис-


Box Backup темы:
Я буду рассматривать установку Box Backup на примере
системы Gentoo Linux. Установка в других системах будет #bbstored-config /etc/boxbackup hostname _bbstored
отличаться только несколькими деталями.
Итак, сначала установим серверную часть системы. Где:
Ebuild Box Backup есть в стандартном дереве портов, так что  /etc/boxbackup – директория конфигурационных фай-
мы воспользуемся стандартной процедурой установки па- лов;
кетов в системе Gentoo Linux.  hostname – имя компьютера;
 _bbstored – имя пользователя, от которого работает
#emerge -av boxbackup система.

Обратите внимание, что по умолчанию вам будет пред- Если вы собирали пакет самостоятельно в другой сис-
ложено установить более старую версию системы – 0.09. теме – для конфигурационных файлов используйте ди-
Я бы рекомендовал проследовать по дереву портов до нуж- ректорию /etc/box. Выполнение этой команды создаст ос-
ной ветки и установить более новую версию, так как в неё новной конфигурационный файл системы Box Backup
внесли множество исправлений. /etc/boxbackup/bbstored.conf, в котором прописываются
основные параметры. Присвоим нашему пользователю
#cd /usr/portage/app-backup/boxbackup _bbstored права на директорию:
#emerge -av boxbackup-0.10.ebuild

Разумеется, можно внести исправления в ваш /etc/ #chown -R _bbstored /etc/boxbackup/bbstored


#chmod -R go-rwx /etc/boxbackup/bbstored
portage/package.keywords, но я не вижу смысла делать это
ради одного пакета (система не потребует других пакетов На этом конфигурирование серверной части системы
для своей работы). Box Backup закончено. Остаётся лишь создать сертифи-
После того как сборка пакета закончится, можно при- кат SSL нашей системы и добавить учётные записи поль-
ступить непосредственно к конфигурированию. Здесь ва- зователей. Сделаем это после установки клиентской час-
жен один момент. ти на машину, с которой будет производиться резервное
Если в вашей системе для резервного копирования нет копирование.
raid-контролера, а просто используются несколько дис-
ков, Box Backup предлагает создать несколько директо- Установка клиентской части системы
рий, которые обеспечат избыточность в случае ошибок Box Backup в Linux
на дисках. Так как мы говорим о Gentoo Linux и в предыдущем выво-
Если raid установлен, то от применения этой структуры де команды:
можно смело отказываться.
Для использования «raid» от Box Backup выполним сле- #emerge -av boxbackup-0.10.ebuild
дующую команду:
наверняка заметили флаг -client-only, то им и воспользуем-
#raidfile-config /etc/boxbackup 2048 /raid/0.0 /raid/0.1 ↵ ся. Выполним на системе, нуждающейся в резервировании,
/raid/0.2
следующую команду:
Или откажемся от его использования командой друго-
го вида: #cd /usr/portage/app-backup/boxbackup
#USE='client-only' emerge boxbackup-0.10.ebuild
#raidfile-config /etc/boxbackup 2048 /raid/0.0 это установит в нашу систему клиента системы Box Backup.
После того как клиент установлен, настроим его на рабо-
Список параметров в этой команде: ту с нашим сервером.

8
администрирование
Здесь возможны два варианта: BackupLocations
{
 lazy – в этом режиме демон резервного копирования home-directory
bbackupd постоянно следит за изменениями файлов, {
Path = /home
и как только изменённый файл закрывается, – перено- ExcludeDir = /home/ftp
сит его в резервную копию. ExcludeFilesRegex = *.(avi|AVI)$
}
 snapshot – работа этого режима понятна по его на- etc
званию. Один раз в установленный вами промежуток {
Path = /etc
времени запускается команда bbackupctl sync, полу- }
чив которую демон bbackupd начинает сканировать }
все указанные в конфигурационном файле директо-
рии. В случае обнаружения несовпадений даты пос- Где:
леднего изменения файл переносится на сервер ре-  home-directory и etc – в данном случае это условные
зервных копий. описания директорий для системы Box Backup. Именно
под этими названиями они будут отображаться при за-
Какой режим предпочесть зависит напрямую от коли- просе в резервную копию.
чества файлов, нуждающихся в резервировании, загружен-  Path – собственно путь до директорий и файлов, нужда-
ности компьютера и сетевого трафика. Думаю, зависимос- ющихся в резервном копировании. При указании путей
ти вполне очевидны. Скажу только, что если вы устанав- следует учитывать, что резервное копирование будет про-
ливаете систему Box Backup на ноутбук, который часто ра- изводиться рекурсивно, то есть со всеми подпапками.
ботает вне локальной сети, где находится сервер бэкапов,  ExcludeDir – это, как несложно догадаться, опция ис-
то, наверное, стоит предпочесть режим snapshot. ключения из резервирования некоторой подпапки.
Разумеется, никто не мешает вам установить сервер  ExcludeFilesRegex – маска, указывающая расширения
Box Backup так, чтобы он был доступен извне. Но в та- файлов, которые следует игнорировать и не переносить
ком случае следует учитывать количество трафика, кото- в резервную копию.
рое будет создаваться компьютерами при резервном ко-
пировании. Остальные опции не менее понятны и в отдельном опи-
Запустим команду, которой создадим основной конфи- сании не нуждаются.
гурационный файл, ключ системы и SSL-сертификат для ав- Режимы lazy и snapshot в конфигурационных файлах
торизации на удалённом сервере. отличаются только параметрами:

#bbackupd-config /etc/boxbackup lazy account_name ↵ AutomaticBackup = no


hostname /var/bbackupd /home UpdateStoreInterval = 0
MinimumFileAge = 0
Где: MaxUploadWait = 0
 /etc/boxbackup – место хранения конфигурационных
файлов; (в случае режима snapshot). Для изменения режима работы
 lazy – способ резервирования; достаточно поменять значения этих переменных на другие
 99 – имя учётной записи на сервере бэкапов (обычно параметры, которые всегда можно посмотреть на соседней
я использую просто последние цифры IP-адреса ком- системе. Не стоит заново запускать команду конфигуриро-
пьютера); вания, так как она подменит ваш ключ шифрования и SSL-
 hostname – сетевое имя сервера бэкапов (не укажите сертификаты. В таком случае процедуру подписи придётся
в данном параметре случайно имя вашего компьюте- повторять. (Конечно, можно предварительно скопировать
ра!); ключ и SSL-сертификат, но... не проще ли изменить значе-
 /var/bbackupd – место, где будут храниться временные ние нескольких переменных?)
файлы системы Box Backup (убедитесь, что там доста- Теперь, когда мы настроили клиентскую и серверную
точно свободного места); часть системы Box Backup, самое время разобраться с сер-
 /home – путь для резервного копирования (папки легко тификатами SSL для авторизации.
настраиваются в конфигурационном файле, и мы скоро
об этом поговорим). SSL-сертификаты для серверной части
Для создания базовой структуры сертификатов запустим
Теперь нам осталось только указать папки, резерв- команду:
ные копии которых мы хотим делать, и правила для них.
Основной конфигурационный файл Box Backup клиен- #bbstored-certs ca init
та находится в директории /etc/boxbackup и называется
bbackupd.conf. Если вы получили какие-либо ошибки при выполнении
Параметры, устанавливаемые в этом файле, содер- этой команды, убедитесь в первую очередь, что у вас уста-
жат необходимые и весьма прозрачные пояснения, поэто- новлен пакет OpenSSL.
му я остановлюсь только на описании путей для резервно- После формирования сертификата, подпишем его:
го копирования.
Структура описания такова: #bbstored-certs ca sign-server hostname-csr.pem

№5, май 2006 9


администрирование
На этом подготовка сертификатов для серверной час- Blocks used by old files: 110818 (216.44Mb)
ти Box Backup завершена. Blocks used by deleted files: 1670369 (3262.44Mb)
Blocks used by directories: 73637 (143.82Mb)
Block soft limit: 61440000 (120000.00Mb)
SSL-сертификаты для клиентской части Block hard limit: 64000000 (125000.00Mb)
Client store marker: 1145862657000000
У нас уже есть клиентский SSL-сертификат, нам нужно под-
писать его на сервере, а заодно и скопировать на клиен- Как вы видите, всё довольно прозрачно и понятно.
та сертификат с сервера. Для этого необходимо передать Команда:
(scp, samba, ftp или другим способом) на сервер файл /etc/
boxbackup/bbackupd/account_name-csr.pem. #bbstoreaccounts setlimit account_name 30000M 35000M
Лучше всего поместить клиентский сертификат на сер-
вере в папку /etc/boxbackup/bbackupd/. изменит допустимый объём резервной копии для данного
После этого выполнить на сервере команду: пользователя. (Как я уже писал выше, объём можно ука-
зывать и в гигабайтах.)
#bbstored-certs /ca sign ↵ Для проверки резервной используйте команду:
/etc/boxbackup/bbackupd/account_name-csr.pem

Ответив на запрос «Yes», мы подпишем сертификат #bbstoreaccounts check account_name


и увидим инструкцию о том, что нам необходимо скопиро-
вать на клиента два файла: и, в случае возникновения ошибок, исправляем с помо-
 /ca/clients/account_name-cert.pem щью:
 /ca/roots/serverCA.pem
#bbstoreaccount check account_name fix
На клиентской стороне эти файлы положим в /etc/
boxbackup/bbackupd. Теперь осталось создать учётную за- Ну и напоследок, команда:
пись для нашего клиента на резервирование.
#bbstoreaccounts delete account_name
Создание учётной записи в системе
резервного копирования удалит существующую учётную запись.
Для создания учётной записи воспользуемся командой:
Восстановление файлов из резервной
#bbstoreaccounts create account_name 0 10000M 15000M копии
После всего, о чем мы поговорили, пожалуй, пришло время
Где: узнать, каким же собственно образом файлы восстанавли-
 account_name – имя учётной записи в числовом виде ваются из резервной копии. Для этого существует утилита
(например, как я уже говорил, последняя цифра в IP-ад- bbackupquery (см. рис. 1).
ресе клиента). Эта утилита работает как удалённый шелл. Она не нуж-
 10000M – мягкий лимит на размер бэкапа. В данном слу- дается в работающем демоне bbackupd и позволяет общать-
чае я выделил 10 Гб на пользователя (можно также ука- ся с сервером бэкапов посредством вводимых команд. Со-
зать 10G). единение с сервером устанавливается при помощи всё тех
 15000М – жёсткий лимит на размер бэкапа. же SSL-сертификатов и по-прежнему проходит при TLS-
шифровании канала.
После этого можно смело запускать сервисы клиента На рис. 1 показан вывод команды help. Как вы видите,
и сервера системы Box Backup. Система резервного копи- доступно большое количество команд, среди которых есть
рования готово! даже compare, позволяющая сравнивать версии файлов
на локальном жёстком диске и файлов, имеющихся в ре-
Другие операции с учётными записями зервной копии. Работа с bbackupquery в чем-то аналогич-
Помимо создания учётных записей, можно их удалять, ме- на общению с ftp-сервером посредством консольного кли-
нять размер допустимого занимаемого бэкапами места, ента, поэтому останавливаться на ней подробно я не бу-
смотреть информацию по занятому пространству, а также ду (см. рис. 2).
проверять резервные копии на ошибки.
Команда: Графическая оболочка Boxi
Существует графическая оболочка для работы с бэка-
#bbstoreaccounts info account_name пом. Проект под названием Boxi [1]. Она обладает спар-
танским интерфейсом, но тем не менее позволяет гораз-
покажет детальную информацию о существующем поло- до удобнee общаться с вашей резервной копией, нежели
жении дел в указанной учётной записи. Выглядеть это бу- консольная bbackupquery и позволяет выполнять все ос-
дет так: новные операции по работе с резервной копией. Такие
как сравнение версий, удаление из архива, восстанов-
Account ID: 00000003
Last object ID: 390831 ление файлов, обзор структуры каталогов и так далее
Blocks used: 59659618 (116522.69Mb) (см. рис. 3).

10
администрирование
Однако на данный момент использование Boxi невоз-
можно. Причина в том, что эта утилита может работать толь-
ко с версией Box Backup 0.09, а как я уже писал выше, вер-
сия 0.10 претерпела множество изменений и рекомендо-
вана к уставновке. По словам разработчика этой утилиты,
следующей версии Boxi, готовой к работе с Box Buckup 0.10,
следует ожидать не ранее чем через три месяца.
Но если удобство для вас важнее, то, может быть, имеет
смысл установить более старую версию, чтобы иметь воз-
можность работать с графической утилитой.
Следует так же отметить, что для работы Boxi нуждает-
ся во всех конфигурационных файлах Box Backup-системы.
Поэтому при её использовании многие запускают процесс Рисунок 1. Вывод справки утилитой bbackupquery
bbackupd не от системы, а от своего пользователя.

Резервное копирование Windows-систем


Пока что я обходил вниманием использование системы ре-
зервного копирования Windows-рабочих станций (и серве-
ров, конечно). Объясню почему.
На сайте [2] вы можете найти Windows native client, ра-
ботающий, как минимум, в системах семейства Windows
2000 и Windows XP. В архиве вы найдёте все необходимые Рисунок 2. Список директорий (по меткам из конфигурационного
файлы, которые рекомендуется скопировать в директорию файла)
c:\Program Files\Box Backup\.
Останется только сформировать сертификат клиента,
подписать его на сервере и передать подписанный и сер-
верный сертификаты обратно. Тут могут возникнуть не-
которые сложности. Дело в том, что скрипты отвечаю-
щие за формирование сертификатов, написаны на язы-
ке Perl, и нет никаких гарантий, что он окажется в вашей
Windows-системе. Можно путём долгих мучений добиться
желаемого результата, но есть способ гораздо более быс-
трый и удобный.
На любой вашей Linux-системе, предварительно сохра-
нив директорию /etc/boxbackup/bbackupd в надёжном мес-
те, сформировать сертификаты для Windows-системы. А по-
чему нет? Ведь не важно, где будет создан ключ шифро-
вания и сертификат. После этого останется только подпи-
сать вновь созданный сертификат и передать необходимые
файлы на Windows-систему. И не забудьте вернуть содер-
жимое папки bbackupd на его законное место.
Таким образом осуществление «горячего» резервного Рисунок 3. Аскетичная Boxi
копирования на Windows рабочих станциях так же стано-
вится весьма простой задачей. FileEncKeys.raw. Поэтому настоятельно рекомендуется ско-
В MS Windows вам точно так же доступны все опции кон- пировать содержимое всех папок /etc/boxbackup/bbackupd
фигурационных файлов Box Backup и оба режима – lazy, в какое-то выделенное, защищённое от несанкционирован-
snapshot. Для того чтобы проинсталировать bbackupd в ка- ного доступа место, а также перенести на внешний носи-
честве системного сервиса достаточно запустить команду: тель и убрать подальше.
В случае утраты ключа восстановление файлов из ар-
bbackupd -i хива станет невозможным.
Также следует обратить внимание на синхронизацию
Графическая оболочка Boxi также существует под времени на клиентских и серверной машинах, так как Box
Windows, но по описанным выше причинам она вам вряд ли Backup использует в работе дату последнего изменения
пока пригодится, только если вы не собираетесь вернуться файлов.
к версии 0.09 Box Backup. Удачного вам горячего резервного копирования!

Это важно Ссылки:


Помните, что вся информация в резервной копии зашиф- 1. http://boxi.sourceforge.net
рована и не может быть извлечена без наличия ключа 2. http://boxbackup.hostworks.ca/index.php/0.10

№5, май 2006 11


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

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


Полезные подробности

Сергей Супрунов
Современная жизнь немыслима без электронной почты. Ещё лет десять назад само понятие
«электронная почта» прочно ассоциировалось с программой Sendmail. Сейчас ситуация
несколько изменилась, но проект Sendmail по-прежнему остаётся одним из лидеров, и вполне
заслуженно.

С
реди системных администра- будут помнить червя Морриса, потряс- эффективной, появилось более чёт-
торов, особенно начинающих, шего мир в 1988 году) серьёзно подор- кое разделение на задачи, причём уже
бытует мнение, что Sendmail – вали доверие к Sendmail в плане защи- не все из них требуют наличия прав су-
чрезвычайно сложная, неуклюжая, не- щённости системы. перпользователя. Говоря же о безопас-
эффективная и небезопасная програм- Однако идёт время, меняется ситу- ности, надо признать, что последняя
ма. Конечно, дыма без огня не бывает, ация. Кое-что из сказанного выше не- критическая уязвимость была обнару-
и причины для подобных мнений есть. сколько улучшилось, что-то вообще жена сравнительно недавно – 22 марта
Достаточно взглянуть на основной стало неправдой. Скажем, конфигу- 2006 года (к чести разработчиков, бы-
конфигурационный файл – sendmail.cf, рационный файл по-прежнему остал- ла она исправлена достаточно быстро).
чтобы согласиться с первым утвержде- ся пугающе непонятным. Но ведь ник- Но вот предпоследняя датируется аж
нием. Монолитная архитектура, когда то вас и не заставляет его править! 18 сентября 2003 года.
практически все функции выполняют- Для этого существуют более удобные Конечно, если сравнивать Sendmail
ся одним двоичным файлом, навевает и простые инструменты. Монолитность с такими альтернативами, как Postfix,
мысли о втором и третьем. Нередкие сохранилась, но работа этого единс- Exim, Qmail, то по некоторым пара-
взломы в прошлом (долго ещё люди твенного «бинарника» стала более метрам он проигрывает своим конку-

12
администрирование
рентам. Но только не в плане функциональности. Так что
вряд ли стоит так просто сбрасывать его со счетов. Тем бо- Как всё начиналось
лее что Sendmail по-прежнему остаётся почтовой програм- В конце семидесятых Эрик Олман (Eric Allman), работая в Универ-
мой, устанавливаемой по умолчанию во FreeBSD, OpenBSD, ситете Беркли, бился над одной проблемой – как обмениваться
Solaris и ряде других систем. электронной почтой в университетской сети, объединяющей не-
Впрочем, я не ставлю своей целью поднять очередную сколько машин, взаимодействующих между собой по разным про-
волну религиозных войн среди приверженцев того или токолам. Существовали, конечно, отдельные программы, обеспе-
иного MTA. Каждый вправе пользоваться тем инструмен- чивающие взаимодействие каждой пары машин, но Эрику хоте-
том, какой ему ближе по духу и лучше подходит для тех лось создать именно универсальную программу.
или иных задач. Надеюсь, что аргумент «я не понимаю эту И вот в 1983 году появилась первая версия программы
программу» не является для вас основным критерием вы- Sendmail, основанной на менее универсальной delivermail (раз-
бора, что ставить и использовать. И после прочтения дан- работанной для сети ARPANET). Первоначально созданная
ной серии вы сможете более осознанно подходить к вы- для BSD 4.1c, она постоянно развивалась, переносилась на дру-
бору почтовой программы, руководствуясь исключитель- гие системы. Многие компании брали Sendmail за основу для пос-
но объективными данными. троения собственных почтовых программ.
Всё, о чём будет идти речь сегодня, относится к вер- В настоящее время наиболее известной и распространён-
сии Sendmail 8.13.4 с последним патчем, работающей ной версией Sendmail является открытая программа, разрабаты-
во FreeBSD 6.0 (используется дистрибутивная установка). ваемая Sendmail Consortium при спонсорской помощи компании
Применимость утверждений, примеров конфигурации, пу- Sendmail Inc. Последняя выпущенная версия – 8.13.6.
тей к файлам и т. д. к другим системам и версиям не про-
верялась, но в большинстве случаев всё должно работать Чем же они занимаются? Два верхних (с PID 596 и 600
аналогично. соответственно) запускаются при старте системы и посто-
Учитывая, что на системах Linux в последнее время бо- янно присутствуют в памяти. Первый, как следует из опи-
лее распространён Postfix (за исключением некоторых дис- сания, обслуживает входящие соединения, поступающие
трибутивов), отвлекаться на особенности Sendmail в этих на порты, выделенные для SMTP-соединений:
системах я не буду.
serg$ sockstat | grep 596
Архитектура и основы root sendmail 596 3 tcp4 1.2.3.4:25 *:*
функционирования root
root
sendmail
sendmail
596
596
4
5
dgram
tcp4
-> /var/run/logpriv
127.0.0.1:25 *:*
Как уже упоминалось, Sendmail является монолитной root sendmail 596 6 tcp4 10.0.0.254:25 *:*
программой. Единственный двоичный файл – /usr/sbin/ root sendmail 596 7 tcp4 *:587 *:*
mailwrapper – отвечает за все функции, но вручную его обыч-
но не запускают. Все же программы, которыми мы обычно Как видите, помимо стандартного 25-го порта на обслу-
пользуемся, являются не более чем простыми символьны- живаемых интерфейсах (рассматриваемая система име-
ми ссылками на этот «бинарник»: ет две сетевые карты – внешнюю, с условным IP-адресом
1.2.3.4, и внутреннюю – 10.0.0.254, а также непременный
serg$ ls -l /usr/sbin | grep mailwrapper loopback-интерфейс 127.0.0.1) процесс 596 прослушивает
lrwxr-xr-x 1 root wheel 21 11 ноя 10:01 hoststat -> /usr/sbin/mailwrapper порт 587. Этот порт (в /etc/services определён как «submission
-r-xr-xr-x 1 root wheel 5236 11 ноя 10:01 mailwrapper
lrwxr-xr-x 1 root wheel 21 11 ноя 10:01 purgestat -> /usr/sbin/mailwrapper 587/tcp») предназначен согласно RFC 2476 для приёма но-
lrwxr-xr-x 1 root wheel 21 11 ноя 10:01 sendmail -> /usr/sbin/mailwrapper вых писем от клиентов, чтобы не перегружать данной ра-
serg$ ls -l /usr/bin | grep mailwrapper ботой основной, 25-й порт, служащий для пересылки сооб-
lrwxr-xr-x 1 root wheel 21 11 ноя 10:01 mailq -> /usr/sbin/mailwrapper
щений между серверами. (То есть более правильно в на-
lrwxr-xr-x 1 root wheel 21 11 ноя 10:01 newaliases -> /usr/sbin/mailwrapper стройках почтовых клиентов – The Bat, Thunderbird, Outlook
и проч. – указывать для исходящих соединений 587-й порт.)
Если говорить точнее, то собственно работа выполня- В настоящее время протокол Submission используется не
ется файлом /usr/libexec/sendmail/sendmail, а mailwrapper, слишком широко, и клиенты для отправки электронной поч-
как следует из его названия, является «обёрткой» к этому ты задействуют тот же 25-й порт, но ничего плохого в том,
файлу. Система, как правило, пользуется ссылкой sendmail, что данный порт открыт, в принципе нет. Тем более что дан-
остальные же запускаются администратором для решения ная рекомендация (я про RFC 2476) рано или поздно должна
конкретных задач. стать популярной. UNIX-сокет на /var/run/logpriv (с дескрип-
Посмотрим, какие задачи возлагаются на программу тором 4) используется для записи журнальной информации
Sendmail. Если посмотреть на вывод команды ps, то мож- с помощью syslog (обратите внимание, что поскольку этот
но увидеть, что в системе активны сразу несколько про- процесс sendmail работает с правами суперпользователя,
цессов sendmail: то используется привилегированный сокет).
Думаю, задача этого процесса понятна – получив запрос
serg$ ps awxo pid,user,command | grep sendmail | grep -v grep на соединение, он порождает дочерний процесс (в нашем
596 root sendmail: accepting connections (sendmail) выводе команды ps вы можете наблюдать два экземпляра
600 smmsp sendmail: Queue runner@00:30:00 for /var/spool/clientmqueue (sendmail) оных – с PID 83329 и 83670), который и занимается обслу-
83329 root sendmail: k35B3pRn083329 [59.42.1.71]: DATA (sendmail)
83670 root sendmail: server N023143.ppp.ne.jp [61.20.23.14] cmd read (sendmail) живанием данного соединения согласно протоколу SMTP.

№5, май 2006 13


администрирование
кальных пользователей на удалённые Передача сообщения от локаль-
серверы и осуществлять транзитную ного пользователя на удалённый сер-
передачу от одного удалённого серве- вер выполняется в следующем поряд-
ра к другому. Как правило, эти опера- ке (см. рис. 2):
ции выполняются одной и той же сис- 1. Локальный клиент (MUA – Mail User
темой, но рассматривать их удобнее Agent), такой как утилита mail, вы-
всё же по очереди. зывает процесс send-mail (выступа-
ющий в роли MSA – Mail Submission
Кто кому родитель Agent).
Итак, при обработке сообщения для 2. Процесс send-mail принимает со-
локального клиента, выполняется сле- общение, переданное клиентом,
Рисунок 1. Приём сообщения дующая последовательность действий и подключается на 25-й порт хоста
(см. рис. 1): localhost.
1. Удалённый сервер, желая передать 3. Процесс, прослушивающий соеди-
нам сообщение, отправляет запрос нения на 25-м порту, порождает до-
на соединение на 25-й порт нашего черний процесс sm1 для обработки
сервера. данного соединения.
2. Процесс sendmail, обслуживающий 4. Sm1, приняв сообщение и поста-
соединения (тот, который в приме- вив его в очередь, предпринима-
ре выше имеет PID 596), порожда- ет попытку передать его получате-
ет дочерний процесс (назовём его лю, для чего составляет маршрут
sm1). движения письма и устанавлива-
3. Дочерний процесс sm1 проверя- ет соединение с первым сервером
Рисунок 2. Передача сообщения ет возможность принять данное (в большинстве случаев он же яв-
сообщение (анализируя конверт, ляется и последним, т.е. сервером,
прежде всего «rcpt to:») и в случае непосредственно обслуживающим
положительного ответа помещает домен получателя).
сообщение в очередь, в файлы qf 5. Дождавшись подтверждения о при-
(заголовки) и df (тело сообщения). ёме сообщения от удалённого
Причём qf обычно создаётся в па- сервера, sm1 удаляет сообщение
мяти и записывается на диск толь- из очереди и завершает работу.
ко в случае невозможности пере-
слать письмо сразу. То есть оче- В случае транзитной передачи сна-
редь – это каталог, куда временно чала выполняются пункты 1-4 алгорит-
сохраняются почтовые сообщения, ма приёма сообщения, затем выполня-
проходящие через сервер элект- ется доставка согласно пунктам 4-5 ал-
ронной почты (по умолчанию ис- горитма передачи локального сообще-
пользуется /var/spool/mqueue). ния (см. рис. 3).
Рисунок 3. Транзитная передача 4. Если запись пройдёт успешно, Обратите внимание, что здесь всё
Sendmail подтверждает факт при- завязано на выполнении основопола-
Второй процесс, PID которого ра- ёма сообщения (принимая тем са- гающего требования – надёжности пе-
вен 600, отвечает за обслуживание мым на себя всю ответственность редачи. Ни при каких обстоятельствах
очереди. Если говорить точнее, то сам за его дальнейшую судьбу) и завер- письмо не должно потеряться (разве
он очередь не обслуживает, а лишь шает соединение с удалённым сер- что в случае прямого попадания в сер-
запускает с заданным интервалом вером. вер из «базуки»). Промежуточная за-
(в данном случае он составляет 30 ми- 5. Далее sm1 анализирует заголовок пись на диск, даже когда это, казалось
нут, как видно из листинга) другой про- сообщения и принимает решение бы, излишне, является обязательной,
цесс, который и выполняет всю гряз- о том, что нужно с ним делать. Если поскольку только это гарантирует це-
ную работу. оно предназначено для локально- лостность данных в случае сбоя на сер-
Ах да, я же ещё не рассказал, что го пользователя, то вызывается ло- вере. Впрочем, «если нельзя, но очень
такое очередь! Ничего, скоро этот про- кальный агент доставки, LDA (Local хочется – то можно», и здесь есть при-
бел будет восполнен… Delivery Agent), которому даётся по- ёмы, позволяющие обойтись без «лиш-
Оставим на время наши процессы ручение положить письмо в почто- ней» записи на диск (это мы обсудим
и разберёмся с базовыми принципами вый ящик пользователя. в одной из последующих частей ста-
функционирования почтовой системы. 6. Когда LDA успешно выполняет до- тьи, где будем говорить об оптимиза-
В общем случае почтовый сервер мо- ставку, он рапортует об этом про- ции и нестандартной настройке).
жет выполнять три рода операций: при- цессу sm1, который удаляет со- Если доставить сообщение по на-
нимать сообщения для локальных кли- общение из очереди и завершает значению с налёта не удалось (из-за
ентов, отправлять сообщения от ло- свою работу. проблем с каналом, блокировки почто-

14
администрирование
вого ящика пользователя и т. п.), то письмо остаётся в оче- Таблица 1. Ключи sendmail и специальные ссылки
реди и обрабатывается уже отвечающим за это процессом, Команда sendmail Ссылка-аналог Назначение
пока сообщение не будет доставлено или безнадёжность sendmail -bi newaliases Пересоздаёт базу псевдонимов
попыток не станет очевидной. Если письмо так и не удалось sendmail -bp mailq Работа с очередью сообщений
доставить, оно возвращается отправителю.
sendmail -bh hoststat Статистическая информация

Возвращаясь к процессам sendmail -bH purgestat Очистка статистики

Как видите, Sendmail может выступать в трёх ипостасях –


MTA, MSA и MDA. В таких инструментах, как Postfix и Qmail, ные для решения конкретных задач. В таблице 1 приво-
применяется понятная структура «одна задача – одна про- дится соответствие «специализированной» команды клю-
грамма». Здесь же всё делает один исполнимый файл. чам программы sendmail.
Так что не мудрено, что он обладает огромным количест- Если вы посмотрите на сценарии инициализации, ис-
вом самых разных параметров. Перечислю здесь наибо- пользуемые системой, то увидите, что FreeBSD использу-
лее востребованные (за подробностями обратитесь к стра- ет преимущественно ссылку sendmail с необходимыми для
нице man sendmail(8)): решения той или иной задачи ключами.
 -b: этот ключ указывает на то, что необходимо выпол-
нить какое-то действие, и всегда дополняется уточня- Основы настройки
ющим ключом; Как же всё это настраивается? Начиная с 4-й (если не оши-
 -bd: работать в режиме демона; баюсь) ветви, в системе FreeBSD основные настройки со-
 -bm: работать в режиме отправки сообщения – анало- средоточены в каталоге /etc/mail (ранее, по крайней мере
гично команде mail; в 3.5-RELEASE, они размещались непосредственно в /etc).
 -bs: выводить команды SMTP на стандартный вывод Здесь вы найдёте следующие основные файлы:
(фактически, то же самое, что и «telnet localhost 25»);  your.domain.mc: основной конфигурационный файл
 -bt: работать в режиме тестирования (позволяет выпол- (так называемый master config, или просто mc-файл).
нить ряд команд, например, обработать адрес или оп- Его имя будет соответствовать доменному имени ваше-
ределить MX-запись для хоста); го сервера. Именно в него вносятся необходимые изме-
 -bv: проверить адрес получателя (фактически, «раз- нения, и на его основе автоматически будет собирать-
ворачивает» псевдонимы, показывая реального поль- ся рабочий файл sendmail.cf.
зователя или скрипт, которые получат письмо). Сле-  your.domain.submit.mc: конфигурационный файл для
дующий пример показывает, что на моей системе ад- работы в режиме доставки сообщений, когда Sendmail
ресу postmaster соответствует скрипт maildigest.py, ис- не обслуживает внешние соединения, а только отправ-
пользуемый для обработки сообщений антивирусно- ляет почту от локальных пользователей (в этом слу-
го пакета и сбора статистики по вирусной активности чае Sendmail запускается с правами обычного поль-
на узле: зователя и использует для работы очередь /var/spool/
clientmqueue).
root# sendmail -bv postmaster  sendmail.cf, submit.cf: рабочие файлы конфигурации,
"| /usr/local/scripts/maildigest/maildigest.py"... deliverable: которые и использует Sendmail. Настоятельно не реко-
mailer prog, user "| /usr/local/scripts/maildigest/maildigest.py"
мендуется вносить в них исправления вручную, хотя ник-
то и не запрещает это делать. Просто нужно иметь в ви-
Другие полезные ключи: ду, что в данном случае все сделанные вами изменения
 -C: с помощью этого ключа вы можете указать альтер- будут потеряны при первом же выполнении make install,
нативный файл конфигурации (отличный от /etc/mail/ поскольку утилита make при сборке cf-файлов руководс-
sendmail.cf). твуется исключительно данными, содержащимися в mc-
 -q: этот ключ задаёт период обработки очереди. Напри- файлах. Безусловно, учитываются и m4-шаблоны, разме-
мер, указанный как -q30m, он установит обработку оче- щённые в /usr/share/sendmail/cf/, но их тоже лучше не из-
реди сообщений каждые 30 минут. менять.
 -t: даёт указание извлечь адрес получателя из соответс-  aliases: здесь хранятся псевдонимы пользователей. Го-
твующих полей заголовка самого почтового сообщения. воря упрощённо, псевдоним позволяет вам наиболее
Может быть полезен при ручной отправке почты. простым способом перенаправлять почту, приходящую
 -d: эти ключи задают уровень отладки. на тот или иной почтовый ящик, на конкретного пользо-
вателя. Этот же механизм используется для создания
Вот, кстати, приём, позволяющий получить информа- списков рассылки или перенаправления почты на вход
цию о версии вашего Sendmail: какой-либо программы.
 access: этот файл позволяет управлять доступом к поч-
serg$ echo '' | /usr/sbin/sendmail -bt -d0 | grep Version товому серверу извне. Например, вы можете запретить
Version 8.13.4 доступ из конкретной подсети или разрешить пересылку
(relaying) почты для некоторых нелокальных адресов.
Для сокращения числа ключей можно использовать  local-host-names: список хостов (их доменных имён),
другие ссылки на mailwrapper, специально предназначен- для которых сервер Sendmail будет принимать почту.

№5, май 2006 15


администрирование
если mailwrapper будет вызван по ссылке mailq, то он за-
Несколько слов про SMTP пустит программу sendmail, которая размещается по ука-
Simple Mail Transfer Protocol (SMTP) – простой протокол переда- занному пути. Собственно говоря, любая команда будет
чи электронной почты – является основным протоколом, на кото- запускать этот файл (архитектура-то монолитная), но те-
ром основана работа электронной почты в сети Интернет. Описан оретически здесь заложена возможность использовать
он в RFC 821, который дополнен рядом других рекомендаций. На- для тех или иных задач внешние файлы или в дальней-
иболее серьёзным дополнением (скорее даже заменяющим доку- шем безболезненно перейти на модульную структуру
ментом) является RFC 2821, описывающий расширенный протокол (это, в частности, используется в Postfix).
SMTP и более соответствующий современным реалиям.  helpfile: здесь размещаются строки, которые Sendmail
SMTP является, скажем так, «терминальным» протоколом, будет выводить во время SMTP-сеанса в ответ на ко-
то есть взаимодействие двух систем осуществляется путём об- манды HELP.
мена текстовыми строками. Клиент (хост, инициировавший со-
единение) передаёт на сервер (хост, принимающий соединение) Более подробно использование того или иного файла
команды, состоящие из четырёх букв и следующих далее пара- будет рассматриваться во второй части статьи.
метров. Сервер отвечает трёхзначным числовым кодом с после- Обратите внимание, что около aliases, access и ряда
дующей строкой-пояснением. других будут размещаться файлы с таким же именем, но
Типичный пример SMTP-диалога может выглядеть таким об- суффиксом «.db». Это базы (обычно в формате hash, но
разом: также поддерживаются dbm и btree), которые и использу-
serg$ telnet localhost 25
ет Sendmail в своей работе, чем достигается сокращение
Connected to localhost. времени, расходуемого на разбор этих файлов. Следова-
Escape character is '^]'. тельно, после внесения изменений в «хэшируемые» кон-
220 server.ru ESMTP Sendmail 8.13.4/8.13.4; .. ..
HELO me.domain.ru фигурационные файлы вы должны пересоздавать соот-
250 server.ru Hello localhost [127.0.0.1], pleased to meet you ветствующие базы.
MAIL From: me@me.domain.ru
Традиционно это выполняется командой makemap
250 2.1.0 me@me.domain.ru... Sender ok
RCPT To: serg@server.ru (для базы aliases – команда newaliases, являющаяся одной
250 2.1.5 serg@server.ru... Recipient ok из ссылок на mailwrapper). Однако разработчики FreeBSD
DATA
354 Enter mail, end with "." on a line by itself предоставили нам замечательный Makefile, который дела-
Hello! It’s a test message. ет большую часть работы по обслуживанию почтовой сис-
. темы, самостоятельно вызывая необходимые служебные
250 2.0.0 k3BAK9Je017265 Message accepted for delivery
QUIT утилиты.
221 2.0.0 server.ru closing connection В данном случае достаточно перейти в каталог /etc/mail
Connection closed by foreign host.
и выполнить команду make:
Как видите, смоделировать работу SMTP-протокола достаточ-
но просто. Но нужно заметить, что полная поддержка протокола – root# cd /etc/mail
root# make
достаточно сложная задача, требующая учёта многих факторов.
При этом make самостоятельно определит, какие фай-
Используется, в частности, для организации виртуаль- лы были изменены, и пересоздаст соответствующие ба-
ного почтового хостинга. зы. Если были изменения в конфигурационном mc-файле,
 mailertable: этот файл используется для определения то эта же команда построит на его основе cf-файл (напри-
специфических обработчиков для некоторых адресов. мер, your.domain.cf; далее нужно будет ещё выполнить make
Например, так может выглядеть строка для обработки install, чтобы этот файл был скопирован как sendmail.cf).
UUCP-почты пользователя account. При желании вы можете явно указать, что именно должно
быть пересобрано:
account.myserver.ru uucp-dom : account
root# make aliases
То есть для обработки почты локального пользователя /usr/sbin/sendmail -bi -OAliasFile=/etc/mail/aliases
account будет использоваться протокол UUCP с соот- /etc/mail/aliases: 167 aliases, longest 47 bytes, 2529 bytes total
chmod 0640 /etc/mail/aliases.db
ветствующим преобразованием адреса.
 virtusertable: здесь размещаются записи, определяю- Как видите, всё предельно просто. Кстати, раз уж у нас
щие виртуальных пользователей. Подробнее вопросы зашла речь о Makefile, помимо сборки и установки конфи-
виртуального хостинга будут рассмотрены во второй гурационных файлов, он же позволяет управлять запуском/
части статьи. остановом/перезагрузкой необходимых процессов (make
 mailer.conf: конфигурационный файл для /usr/sbin/ start, make stop, make restart соответственно). Можно даже
mailwrapper. Здесь задаётся соответствие «удобных» работать по отдельности с каждым процессом:
имён файлов, таких как mailq, реально вызываемому
двоичному файлу. Например, согласно такой строке root# make restart-mspq
root# make stop-mta
в этом файле:
Нужно заметить, что сами команды управления про-
mailq /usr/libexec/sendmail/sendmail цессами размещаются в /etc/rc.sendmail. Makefile лишь вы-

16
администрирование
зывает этот сценарий с нужными параметрами. Обратите
внимание, что в рассматриваемой версии FreeBSD запуск Что такое UUCP?
sendmail при загрузке системы может выполняться дру- Unix to Unix Copy Program (UUCP) – некогда очень популярный
гим сценарием – /etc/rc.d/sendmail. Это более соответству- протокол взаимодействия между удалёнными хостами. Пере-
ет принятому начиная с 5-й ветви порядку инициализации сылка электронной почты не была его единственной обязаннос-
(он был позаимствован из NetBSD), но подобное «двоев- тью, но эта услуга была наиболее востребована. Sendmail, будучи
ластие» может в некоторых случаях привести к путанице разработанным как универсальный почтовый сервер, призванный
и ошибкам (например, если вам нужно внести в эти файлы объединить разнородные сети, обладает поддержкой этого про-
какие-то специфические изменения, то приходится особо токола (правда, реализация осуществляется сторонней програм-
следить за их синхронизацией). мой – во FreeBSD это Taylor UUCP, установить её можно из кол-
Раз уж мы заговорили о сценариях инициализа- лекции портов: /usr/ports/net/freebsd-uucp).
ции, рассмотрим параметры rc.conf, определяющие ра- В настоящее время необходимости использовать этот прото-
боту Sendmail. Основные настройки сосредоточены кол уже нет, но в редких случаях (например, в условиях коммути-
в файле /etc/defaults/rc.conf. По умолчанию переменная руемого доступа) он может оказаться полезен.
sendmail_enable установлена в значение «NO», что под-
разумевает работу Sendmail только для отправки сообще- строки. Если вы хотите закомментировать какую-то дирек-
ний локальных пользователей. MTA, обслуживающий вне- тиву, перенесите dnl в начало строки.
шние соединения, запускаться не будет. Чтобы разрешить
работу Sendmail в режиме MTA, следует установить значе- OSTYPE(freebsd6)dnl
ние этой переменной в «YES». Кстати, если вы хотите пол-
ностью запретить работу Sendmail, используйте значение Тип операционной системы. Согласно данному пара-
«NONE», а не «NO». метру m4 будет выбирать необходимые для работы шаб-
Обратите внимание на одну важную переменную: лоны (из /usr/share/sendmail/cf/ostype/), поэтому очень важ-
но следить здесь за актуальностью информации (особен-
mta_start_script="/etc/rc.sendmail" но когда выполняется обновление системы на другую «вет-
ку»). В первую очередь от этого параметра зависят приня-
Именно она определяет, какой из сценариев – /etc/ тые в той или иной системе полные имена агентов достав-
rc.sendmail или /etc/rc.d/sendmail – будет использоваться ки (LDA), используемые флаги и т. д.
при загрузке системы. По соображениям «однозначности»
лучше оставить использование rc.sendmail, как это и пре- DOMAIN(generic)dnl
дусмотрено по умолчанию.
Подробнее узнать об опциях, которые вы можете изме- Ещё один параметр, влияющий на выбор шаблонов.
нить, можно в самом файле /etc/defaults/rc.conf – он доста- Шаблоны можно найти в /usr/share/sendmail/cf/domain/,
точно хорошо прокомментирован. Ну и при необходимос- в большинстве случаев следует использовать домен
ти что-то переопределить внесите соответствующие стро- «generic». Впрочем, если вам нужны специфические пара-
ки в /etc/rc.conf (надеюсь, вы даже спросонья без запинки метры, которые по тем или иным причинам вам не хотелось
скажете, почему не рекомендуется делать изменения не- бы выносить в конфигурационный файл, можно создать
посредственно в default-скриптах). здесь свой «доменный» шаблон (посмотрите здесь же при-
меры для доменов Berkley.EDU) и использовать его.
Пример файла конфигурации
Рассмотрим небольшой пример mc-файла, для того чтобы dnl DAEMON_OPTIONS('Name=IPv4, Family=inet')dnl
DAEMON_OPTIONS('Port=smtp,Addr=1.2.3.4,Name=MTA')dnl
в общих чертах познакомиться с синтаксисом и наиболее DAEMON_OPTIONS('Port=smtp,Addr=127.0.0.1,Name=MTA')dnl
типичными директивами (подробно конфигурация будет DAEMON_OPTIONS('Port=smtp,Addr=10.0.0.254,Name=MTA')dnl
рассматриваться во второй части статьи). Он представляет
собой набор команд макропроцессору m4, который исполь- Подобным образом указывается, на каких адресах и пор-
зуется для сборки cf-файла. Подробнее о m4 мы поговорим тах следует прослушивать входящие соединения. Первая
в следующий раз, пока же просто рассмотрим некоторые строка из приведённых (закомментированная) указывает ожи-
опции, не вдаваясь в подробности. Поскольку комментарии дать входящие соединения на всех IPv4-интерфейсах. Если
в m4 выглядят не совсем привычно, то вместо пояснений прослушивать нужно только конкретные интерфейсы, можно
в самом файле разобьём его на отдельные строки: поступить так, как показано в последующих двух строках.

divert(-1)dnl FEATURE(use_cw_file)dnl
. . . . . define('confCW_FILE', '-o /etc/mail/local-host-names')dnl
divert(0)dnl
Эти строки задают использование файла local-host-
Директива divert() служит для переключения режимов names и указывают путь к нему.
макропроцессора. Собственно, сама конфигурация начи-
нается после divert(0), поэтому между указанными строка- dnl FEATURE('accept_unqualified_senders')dnl
dnl FEATURE('accept_unresolvable_domains')dnl
ми часто помещают комментарии к файлу. Буквы dnl, при-
сутствующие в конце каждой строки, в m4 означают конец Данные две директивы (сейчас они закомментированы)

№5, май 2006 17


администрирование
из указанных списков. Для таких адресов Sendmail выдаёт
Системы-конкуренты код 550 и разрывает соединение. Если же адреса в базе
По различным данным, среди наиболее популярных открытых сер- rbl-сервера нет, то соединение принимается. На страни-
веров электронной почты наблюдается примерно такое соотно- цах журнала уже неоднократно обсуждались недостатки
шение: Sendmail – 24%, Postfix – 17%, Exim – 9%, Qmail – 4%. Если такого подхода, так что использовать его следует с осо-
сравнить эти цифры с данными за 2001 год (соответственно 42%, бой аккуратностью.
2%, 1%, 17%), то можно отметить довольно существенное сниже-
ние доли Sendmail, прежде всего за счёт Postfix, активно исполь- define('confMAX_MESSAGE_SIZE', '12500000')dnl
зуемого на небольших серверах и домашних системах. Тем не ме-
нее, Sendmail по-прежнему занимает лидирующие позиции. Эта строка задаёт ограничение на максимальный раз-
В качестве основных характеристик конкурирующих откры- мер сообщения, которое может быть обработано сервером.
тых систем можно отметить следующие: Весьма полезная опция, если вы хотите защитить свой сер-
Postfix: выросший из IBM Secure Mailer разрабатывается как вер и почтовые ящики ваших пользователей от чьих-ни-
быстрая и безопасная альтернатива Sendmail. Отличается мо- будь «шалостей».
дульной структурой, простым форматом конфигурационного фай-
ла. Благодаря имитации взаимодействия Sendmail с операцион- define('confMAX_DAEMON_CHILDREN','45')dnl
ной системой миграция на Postfix может быть выполнена сравни-
тельно безболезненно. Максимальное число дочерних процессов, которые мо-
Exim: был разработан в 1995 году Филипом Хазелем (Philip гут быть запущены одновременно. Эта опция помогает ос-
Hazel) на базе MTA Smail для почтовой системы Кембриджского лабить последствия DoS-атаки на почтовую подсистему, ог-
университета. Достаточно мощная и гибкая почтовая система. К её раничивая число запущенных процессов и не позволяя, тем
преимуществам также часто относят хорошую документирован- самым, вызвать катастрофическую перегрузку системы.
ность. Как и Sendmail, имеет монолитную архитектуру, но (по от-
зывам) работает несколько быстрее. define('confPRIVACY_FLAGS', 'noexpn,novrfy')dnl
Qmail: при разработке этого MTA (автор – Даниэль Бернштайн
(Daniel J. Bernstein)) основной акцент делался на вопросах безопас- Эта опция позволяет задать ряд дополнительных фла-
ности. Имеет модульную структуру. Для решения различных задач гов, управляющих работой протокола SMTP. В данном слу-
запускает процессы от имени разных пользователей, чем дости- чае запрещается выполнять smtp-команды VRFY и EXPN,
гается максимальный уровень защищённости в случае обнаруже- которые по умолчанию позволяют любому пользователю
ния проблем в одном из модулей. Довольно странную лицензию, (в том числе и спамеру) достаточно легко проверить нали-
допускающую распространение только в исходных кодах и сильно чие на сервере конкретного почтового ящика и «развер-
осложняющую развитие программы (текущая версия – 1.03 – да- нуть» списки рассылки (если таковые имеются).
тируется аж 1998 годом), можно назвать одной из причин, по ко-
торым Qmail стремительно теряет популярность. MAILER(local)dnl
MAILER(smtp)dnl
Существуют и другие MTA (например, Comminigate Pro), име- dnl MAILER(uucp)
ющие свои достоинства и недостатки. В общем выбирать есть
из чего. Ну а так указывается, какие агенты доставки будут ис-
пользоваться. Здесь определены локальный агент достав-
позволяют несколько ослабить требования стандартов. Пер- ки (LDA), и использование протокола SMTP для доставки
вая разрешает обслуживать не полностью квалифицирован- на удалённые серверы (MDA). Закомментированная стро-
ных отправителей (т.е. не имеющих полного имени формата ка отвечала некогда за подключение агента, работающего
user@domain). Вторая допускает работу с доменами, для ко- по протоколу UUCP, ныне практически вымершему.
торых не удалось определить их DNS-имя по IP-адресу. Немного подробнее мы поговорим о конфигурации
в следующий раз. После внесения всех изменений в mc-
FEATURE(mailertable, 'hash -o /etc/mail/mailertable')dnl файл нужно выполнить следующие действия:
FEATURE(access_db, 'hash -o -T<TMPF> /etc/mail/access')dnl
FEATURE(virtusertable, 'hash -o /etc/mail/virtusertable')dnl
root# cd /etc/mail
root# make
Эти строки описывают пути к специальным файлам root# make install
конфигурации. Обратите внимание, что имена баз указа- root# make restart
ны без суффикса «.db».
После этого Sendmail будет перезапущен в новой кон-
FEATURE(blacklist_recipients)dnl фигурации.
dnl FEATURE('dnsbl', 'sbl.spamhaus.org')dnl
FEATURE('dnsbl', 'relays.ordb.org')dnl
FEATURE('dnsbl', 'dul.ru')dnl Продолжение следует…
FEATURE('dnsbl', 'bl.spamcop.net')dnl
На этом первую часть цикла, пожалуй, и завершим. В следу-
Строки, реализующие встроенный в Sendmail механизм ющий раз мы более детально обсудим настройку Sendmail
борьбы с так любимым нами спамом. Он основан на «чёр- (в частности, формат cf-файла и работу макропроцессо-
ных списках», отклоняя любые попытки установить соеди- ра m4), некоторые примеры конфигураций и ряд других
нение со стороны IP-адреса, присутствующего в одном вопросов.

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

Возможности технологии
MS Windows SharePoint Services

Иван Хрипунов,
Артем Черневский
Развитие современного отдела информационных технологий неизбежно связано с переходом
от обслуживания базовой IT-инфраструктуры компании к созданию интранет-порталов
и автоматизации бизнес-процессов. Один из эффективных инструментов для решения
подобных задач – Microsoft SharePoint.

M
icrosoft Windows SharePoint ный справочник организации. Соста- справочник» и http://server01/phones
Ser vices (WSS), входящие вим список возможностей, которыми соответственно. После ввода требу-
в состав Windows Server 2003, должен обладать справочник: емых параметров обязательным ша-
простой в применении инструмент  Предоставление полных данных гом является выбор шаблона сайта.
для совместного создания, редакти- о сотруднике. Все стандартно поставляемые шаб-
рования, публикации и поиска инфор-  Персональные – имя, фамилия, лоны описаны на странице выбора.
мации сотрудниками компании. Удоб- фотография. Отдельно стоит упомянуть шаблоны
ный графический интерфейс и мно-  Рабочие – место работы (отдел) для создания рабочих областей. Все
жество встроенных шаблонов позво- и должность. рабочие области представляют собой
лят быстро получить «осязаемый» ре-  Контактная информация – но- веб-узлы, ориентированные на конк-
зультат. Являясь платформой-конс- мера телефонов, адрес элект- ретную задачу. Вследствие этого у них
труктором, Microsoft SharePoint име- ронной почты и т. д. немного изменена стандартная фун-
ет тысячи примеров реализации раз-  Возможность экспорта данных кциональность. Например, для рабо-
личных задач из области маркетин- на локальные компьютеры пользо- чих областей собраний WSS пред-
га, оказания сервисных услуг, рабо- вателей для работы в режиме оф- ставляют более тесную интеграцию
ты с персоналом, сбора отчетности флайн с поддержкой синхрониза- с Outlook 2003 и немного ограничен-
и других. А расширенные возможнос- ции данных по запросу. ные возможности веб-узла.
ти по настройке и добавлению ново- Для нашего веб-сайта подойдет
го функционала с помощью Microsoft Кроме того, справочник можно бу- шаблон «Пустой узел». После создания
FrontPage и Microsoft Visual Studio поз- дет просматривать и управлять им, ис- мы автоматически попадаем на глав-
волят модернизировать любое реше- пользуя браузер. ную страницу узла (см. рис. 1), ее ад-
ние на базе WSS соответственно за- рес: http://server01/phones/default.aspx.
дачам компании. Создаем веб-узел
Большинство возможностей WSS Это первое, что необходимо сделать. Создаем список контактов
вы сможете оценить на примере узла, При создании сайта нужно задать имя Самый простой путь реализовать теле-
на котором располагается телефон- узла и его URL-адрес: «Телефонный фонный справочник на узле WSS – со-

20
администрирование
На странице представления также
Преимущества SharePoint перед «традицонными» средствами присутствует панель ссылок или па-
работы с данными – почтой и файловыми серверами нель инструментов, она содержит сле-
 Возможность представления информа- Даже когда вы находитесь вне сети. дующие команды:
ции в читаемом виде так, как на обыч-  Возможность задания дополнительных  Создать элемент – создает новую
ных веб-сайтах. свойств документов в списке. запись в списке;
 Доступ через интернет-браузер.  Блокировка файлов определенных ти-  Фильтр – позволяет задать фильтр
 Версионность документов. пов от публикации. по любому из представленных по-
 Удобная настройка прав на доступ са-  Быстрый контекстный поиск информа- лей;
мими пользователями. ции с удаленного компьютера по индек-  Изменить в таблице данных – по-
 Оповещение пользователей об изме- су SQL-сервера во внутренних и вне- казывает информацию в виде таб-
нениях содержимого списков и библи- шних источниках. По названию, опи- лицы, по аналогии с листом Excel;
отек файлов. санию или содержимому файла.  Связать с Outlook – открывает
 Возможность заблокировать файл от ре-  Статистика доступа к файлам и дан- в приложении Outlook папку кон-
дактирования другими пользователями. ным. тактов, связанную с данным спис-
ком. Эта команда доступна толь-
здать список на основе шаблона «Кон- Заполнив все поля, нажимаем ко в списках, созданных с исполь-
такты». Для создания списка на глав- кнопку «Создать». Попадаем на стра- зованием шаблона «Контакты»
ной странице узла: http://server01/ ницу представления «Все контакты» или «События»;
phones/default.aspx в верхней панели (AllItems.aspx) вновь созданного спис-  Импортировать контакты – позво-
ссылок выбираем «Создать». ка, его адрес – http://server01/phones/ ляет импортировать контакты, ис-
На странице создания находим Lists/Employees/AllItems.aspx – легко пользуя адресную книгу. Команда
раздел «Списки» и выбираем нужный читается и воспроизводится: сервер доступна только в списках на осно-
нам шаблон – «Контакты». Открывает- (server01); сайт телефонного справоч- ве шаблона «Контакты».
ся страница создания нового списка. ника (phones); списки (lists); сотрудни-
При заполнении полей обратите вни- ки (employees). Названия полей представлены ги-
мание на следующие моменты: Имя файла представления можно перссылками для осуществления сор-
 В поле «Имя» введите название не указывать – в этом случае откроет- тировки.
списка по-английски – Employees ся представление по умолчанию.
(сотрудники). При создании спис- На странице представления отобра- Изменяем общие
ка или библиотеки документов жаются поля «Вложения», «Фамилия», параметры
SharePoint использует значение «Имя», «Организация», «Рабочий теле- Переходим по ссылке «Изменить на-
этого поля для создания адреса фон», «Домашний телефон» и «Адрес стройки и столбцы». Открывается
URL. Если это поле целиком состо- электронной почты». Обратите внима- страница настройки списка. Первый
ит из национальных символов, ад- ние, что помимо контактной информа- раздел – «Общие параметры» содер-
рес будет сформирован из стан- ции в списке присутствует поле «Вло- жит ссылки на изменение общих на-
дартной строки: List, List1, DocLib жение». Каждый элемент списка может строек списка, сохранение в качестве
и т. д. При наличии в этом поле сме- содержать вложения, то есть некоторое шаблона, удаление, настройку разре-
шанного набора символов (латинс- количество файлов, связанных с дан- шений на данный список. Перейдем по
ких, национальных и спецсимволов ным элементом. При просмотре эле- ссылке «Изменить общие параметры»
«&, *» и т. д.) в URL попадут только мента списка в поле «Вложения» отоб- и на открывшейся странице парамет-
латинские. Пробелы будут замене- ражаются ссылки на вложенные фай- ров изменим в поле «Имя» название
ны кодами «%20». Если получив- лы. Сами файлы хранятся в отдельной «Employees» на «Сотрудники».
шийся адрес уже существует, в ко- папке на веб-узле. Поддержку вложе- Раздел «Утверждение содержимо-
нец будет добавлена цифра. Исхо- ний в списке можно отключить на стра- го» позволяет настроить утверждение
дя из этого, рекомендуется при со- нице изменения параметров. каждого элемента списка. Это озна-
здании задавать имена латински-
ми символами, заменяя пробелы
знаками подчеркивания. Это обес-
печит более удобное чтение и вос-
произведение адреса URL. Впос-
ледствии имя можно будет изме-
нить, но адрес URL не изменится.
 Выберите, будет ли список отобра-
жаться на панели быстрого запус-
ка. Для облегчения доступа к спис-
ку с главной страницы отметим
«Отображать этот список на пане-
ли быстрого запуска? : Да». Рисунок 1. Вид веб-узла после создания

№5, май 2006 21


администрирование
чает, что после добавления элемен- боте со списками и библиотеками до- Также обратите внимание на по-
та в список он не будет виден до мо- кументов. Например, при запросе дан- ле «Изменить (ссылка на изменение
мента, пока пользователь с правами ных этого списка с помощью веб-сер- элемента)». Если показать это по-
«Управление списками» не пометит висов WSS, возвращено будет поле ле в представлении, то для каждого
его как утвержденный. По умолчанию «Company», а не «Отдел». элемента будет отображена картин-
данная функциональность выключе- ка со ссылкой на форму изменения
на. Нам она не требуется, поэтому ни- Представления списка элемента.
каких изменений в данной секции про- На данный момент у нас есть только Отмеченные в данном представ-
водить не будем. одно представление – «Все контак- лении столбцы служат для просмот-
Осталось указать лишь разреше- ты». Давайте рассмотрим его настрой- ра краткой информации о сотруднике.
ния для пользователей на уровне эле- ки подробнее. Это его имя, организация и контакт-
ментов. В соответствующем разделе Переходим по ссылке на имени ная информация – телефоны и адрес
укажем, что пользователи могут читать представления, попадаем на страницу электронной почты. Наверное, полез-
все элементы и не могут их редактиро- «Изменение представления». На стра- нее будет выводить вместо домашнего
вать. Сохраняем параметры нажатием нице видим уже привычное деление номер сотового телефона сотрудника.
на кнопку «Ок». на разделы. Снимаем отметку напротив поля «До-
В разделе «Имя» можно изменить машний телефон» и устанавливаем ее
Столбцы списка название и имя файла для данного у поля «Сотовый телефон». Также для
В разделе «Столбцы» на странице на- представления. Будьте осторожны – поля «Сотовый телефон» задаем поря-
стройки перечислены все имеющие- если вы измените имя файла пред- док 5 – такой же, как у поля с домаш-
ся столбцы за исключением служеб- ставления, файл *.aspx будет переиме- ним телефоном. Заметьте, что поря-
ных, их типы данных и признак того, нован. Пользователи, имеющие пря- док полей автоматически изменился.
что поле является обязательным для мые ссылки на данный файл, получат Тот факт, что поле «Домашний теле-
заполнения при добавлении или из- ошибку 404. фон» имеет порядок 6, не должен сму-
менении элемента списка. Служебные Доступные в списке столбцы пе- щать – это поле не отображается, и при
столбцы списков – «Создано», «Со- речислены в одноименном разделе. следующем изменении представления
здатель», «Изменено», «Автор изме- Те столбцы, которые отображаются всем полям будет выставлен правиль-
нений», «Идентификатор». В эти поля в представлении, помечены и находят- ный порядок следования.
автоматически заносится информация ся вверху списка. Справа от названия Также добавим в представление
о дате создания или изменения и поль- каждого поля можно изменить поря- поле «Изменить», отметив его в спис-
зователе, создавшем или изменившем док следования столбцов. ке и указав самый последний порядок
элемент. В поле «Идентификатор» за- Обратите внимание, что «Фамилия» следования. Заменим поле «Фами-
носится уникальный порядковый но- присутствует в списке столбцов не- лия (ссылка на элемент с меню прав-
мер элемента. Для изменения пара- сколько раз в виде полей «Фамилия», ки)» на поле «Фамилия (ссылка на эле-
метров столбца (типа хранимых дан- «Фамилия (ссылка на элемент с меню мент)» – с целью не перегружать поль-
ных, длины поля и т. д.) или его уда- правки)» и «Фамилия (ссылка на эле- зователей лишними элементами уп-
ления необходимо перейти по гиперс- мент)». На самом деле это один и тот равления (имеется в виду контекстное
сылке на его имени. Можно добавить же столбец, но в первом случае отоб- меню элемента). Для изменения эле-
новый столбец и изменить их порядок ражается просто содержимое в виде ментов будет служить столбец «Изме-
по умолчанию. текста, во втором – к нему добавляет- нить», он будет находиться в самом
Заметьте, в списке столбцов при- ся возможность вывода контекстного конце. Для просмотра полной инфор-
сутствует поле «Организация». Под- меню со ссылками на просмотр, прав- мации можно воспользоваться ссыл-
разумевается, что это поле содержит ки, удаления элемента и т. д. и в треть- кой в поле «Фамилия».
сведения о месте работы человека. ем случае формируется ссылка на про- В разделе «Сортировка» уже про-
Для решения нашей задачи – созда- смотр данного элемента списка. Под- ставлена сортировка сначала по фа-
ние телефонного справочника – это по- держка этих вариантов для одного по- милии, а затем по имени. Эти пара-
ле не требуется, так как подразумева- ля позволяет создавать представле- метры были заданы в шаблоне спис-
ется, что все сотрудники работают в од- ния списка с разными возможностями. ка. Здесь также можно указать по-
ной компании. В то же время в списке Стоит отметить, такие варианты воз- рядок сортировки – по возрастанию
не хватает поля «Отдел». Мы переиме- можны лишь для единственного поля, или по убыванию, для каждого из по-
нуем поле «Организация» в «Отдел». создаваемого автоматически. Это по- лей сортировки. Для целей сортиров-
Для переименования переходим ле нельзя удалить, нельзя изменить ки списка доступны только два поля,
по ссылке «Организация» в спис- его тип, и оно является обязательным по которым можно проводить сорти-
ке полей и на открывшейся страни- к заполнению. Такое поле присутствует ровку в каждом представлении.
це в поле «Имя столбца» вводим «От- во всех списках и является единствен- Раздел «Фильтр» позволяет отоб-
дел» и сохраняем изменения. Мы по- ным полем при создании произвольно- рать элементы списка по определен-
меняли только название поля. Его имя, го списка. Поле имеет имя «Title», его ным критериям. Вы можете указать не-
«Company», осталось неизменным. название может быть разным, в нашем сколько значений фильтра. Добавление
Это важно понимать и помнить при ра- случае – это «Фамилия». полей производится нажатием на ссыл-

22
администрирование
ку «Другие столбцы…». Интересным
моментом здесь является использова-
ние в качестве условия значений «[Се-
годня]» для полей с датами и «[Я]» для
полей «Создатель» и «Автор измене-
ний». Например, при указании условия
«[Сегодня]» для поля «Создано» в пред-
ставлении будут показаны все элемен-
ты списка, созданные сегодня. А усло-
вие «[Я]» для поля «Создатель» позво-
лит отображать в представлении все
элементы списка, созданные текущим
пользователем. Нам не требуется ука-
зание каких-либо фильтров для наше-
го списка. Поэтому оставим этот раздел
без изменений, то есть должен быть от-
мечен пункт «Отображать в этом пред-
ставлении все элементы».
В разделе «Группировка» можно
указать поля для группировки данных.
Например, элементы нашего справоч-
ника можно сгруппировать по органи-
зации или отделу. Для этих целей мож-
но создать новое представление и на-
звать его, например, «По отделам».
При этом вывод данных будет произ-
водиться группами, содержимое ко-
торых можно будет сворачивать или Рисунок 2. Ввод данных о сотруднике
разворачивать так же, как это сдела-
но с разделами на данной странице. воде группами есть возможность про- лаем в качестве примера. На странице
Указание группировки более чем для листывать группы. Такие ограничения представления «Все контакты» на па-
двух полей не имеет смысла, так как полезны при наличии в списке большо- нели инструментов нажимаем кнопку
вывод информации будет переполнен го количества элементов. При выводе «Создать элемент» (см. рис. 2).
названиями групп и замедлен их фор- группами или ограничении числа эле- Открывается страница ввода ново-
мированием, поэтому для группиров- ментов значительно ускоряется про- го элемента со всеми полями для ввода.
ки, как и для фильтров, доступно ука- цесс формирования и загрузки страни- Красными звездочками отмечены те
зание только двух полей. цы. Это имеет и свой минус – для того, поля, заполнение которых обязатель-
По любому полю, отображаемому чтобы добраться до конца списка, не- но. В нашем случае – это поле «Фами-
в представлении, есть возможность обходимо перейти по ссылкам некото- лия». Вводим данные во все поля и на-
подводить итоги – подсчитывать сред- рое количество раз. жимаем кнопку «Сохранить и закрыть»
нее, максимум, минимум и т. д. для чис- Мы рассмотрели все разделы пред- на панели инструментов. Возвраща-
ловых элементов и количество значе- ставления и внесли необходимые прав- емся в представление «Все контакты»
ний – для текстовых. Настроить расчет ки. Нажимаем на кнопку «Ок» для со- и видим, что запись добавлена.
итогов можно в разделе «Итоги». Такая хранения результатов и вновь попада- Второй способ – использование
функциональность вряд ли необходи- ем на страницу «Настройка». для ввода файла Excel или таблично-
ма для телефонного справочника. го представления данных, связанно-
Раздел «Стиль» предоставляет Ввод данных в список го со списком. Для ввода информа-
возможность настройки вида (распо- Остался еще один немаловажный мо- ции придется создать дополнитель-
ложение полей, цветовое выделение мент: откуда в списке появятся дан- ное представление, содержащее все
и т. д.) выводимой информации. Вы мо- ные? Можно дать возможность сотруд- поля, кроме служебных, и экспортиро-
жете поэкспериментировать с различ- никам вводить данные самостоятель- вать данные в Excel. После чего с дан-
ными стилями, но для нашего примера но, используя разрешения на уровне ными можно работать, как с обычным
изменять мы ничего не будем, оставим элемента списка. Но тогда не избе- файлом Excel, только список необходи-
стиль по умолчанию. жать беспорядка. мо синхронизировать для отражения
В разделе «Максимальное коли- Можно рассмотреть централизо- изменений. Для ввода данных созда-
чество элементов» можно задать ли- ванные варианты попадания данных в дим представление типа «Таблица дан-
бо вывод группами с определенным список. Первый, самый простой – до- ных», в котором выведем все необходи-
числом элементов, либо вывод огра- бавление данных вручную на сайте те- мые для заполнения поля. Назовем его
ниченного числа элементов. При вы- лефонного справочника, что мы и сде- «Таблица данных». Создавая представ-

№5, май 2006 23


администрирование
Фильтрация и сортировка осущест-
Разрешения на веб-узле дующие разрешения для пользователей вляются стандартными способами. По-
На любом веб-узле могут быть настроены или групп: иск по списку можно осуществлять, ис-
разрешения как для отдельных пользова-  Просмотр элементов списков. пользуя средства WSS – в правом вер-
телей, так и для групп. Вы можете добав-  Добавление элементов списков. хнем углу домашней страницы есть со-
лять на веб-узел пользователей и группы  Изменение элементов списков. ответствующая область.
как локального сервера, так и домена.  Удаление элементов списков. Для создания локальной копии
По умолчанию на веб-узле существуют  Управление личными представления- списка на компьютерах пользовате-
следующие группы: ми. лей можно воспользоваться экспор-
 Читатель – доступ к веб-узлу только  Управление разрешениями списка. том в электронную таблицу или свя-
на чтение.  Управление списками. зать данный список с Microsoft Office
 Участник – добавление содержимого Если права доступа на список не назна- Outlook 2003. Экспортированные таким
в существующие библиотеки докумен- чаются явно, то используются разрешения образом данные можно будет исполь-
тов и списки. установленные для пользователя или груп- зовать в режиме оффлайн и при необ-
 Веб-дизайнер – создание списков пы на уровне узла. ходимости синхронизировать.
и библиотек документов; настройка Также могут быть установлены разре- Для экспорта списка в электрон-
страниц веб-узла. шения на уровне элементов списка. Поль- ную таблицу предназначена одноимен-
 Администратор. зователю можно разрешить просматривать ная ссылка, которая находится слева
все элементы списка или только свои; ре- на панели «Действия». Имейте в виду,
Вы можете создавать собственные дактировать все элементы, только свои что при экспорте используются поля
группы узла и назначать им права досту- или запретить редактирование элемен- и данные текущего представления. Ра-
па, гибко оперируя разрешениями на узел, тов. Эти разрешения не действуют при на- нее мы создали представление «Табли-
списки, библиотеки документов и персо- личии разрешения «Управление списками» ца данных», его и можно использовать
нальные возможности. Так же можно со- у пользователя или группы, по умолчанию для экспорта. После нажатия на ссылку
здавать многоузловые группы, которым это право есть у группы «Администраторы» будет выдан запрос на открытие или со-
можно назначать права доступа на не- и «Веб-дизайнеры». хранение стандартного файла веб-за-
скольких узлах. Права на узел верхне- Разрешения для библиотек докумен- проса Microsoft Office Excel 2003 –*.iqy,
го уровня могут наследоваться дочерни- тов точно такие же, как и у списков. Обра- затем предупреждение Excel о безо-
ми узлами. тите внимание, что разрешения на уров- пасности открытия такого запроса. Эти
Каждому списку, отдельно от разре- не элементов для библиотек файлов от- запросы зависят от настроек безопас-
шений узла, могут быть назначены сле- сутствуют. ности Windows и Excel. После откры-
тия на листе Excel отображается спи-
ление, помните, что при первоначаль- рантирует уникальности данных, что сок с данными контактов сотрудников.
ном задании имени представления оно может привести к дублированию кон- Его можно сохранить и использовать
будет использоваться в качестве име- тактов. Выход из ситуации – удаление локально. Впоследствии можно обнов-
ни файла. Поэтому рекомендуется за- контактов перед импортом, но это не лять данные, запрашивая изменения
дать сначала имя datasheet (таблица), самый удобный вариант. на сервере, или редактировать список,
а потом переименовать представление. Помимо перечисленных, есть так- отправляя данные на сервер, при нали-
После создания переходим во вновь же другие способы. Например, созда- чии прав на эти операции.
созданное представление, используя ние собственного приложения импор- Вы можете использовать список
ссылку «Таблица данных» слева, в раз- та данных в список, используя объек- контактов в Outlook, для этого необ-
деле «Выберите представление». Как тную модель SharePoint. При исполь- ходимо на панели инструментов на-
видите, ввод в таком представлении го- зовании Access 2003 можно работать жать на кнопку «Связать с Outlook».
раздо удобнее и не отличается от вво- со списком как с таблицей в базе дан- В структуру папок Outlook будут до-
да данных на листе Excel. ных и записывать туда данные. бавлены «Папки SharePoint», где и бу-
Третий способ – импорт контактов дут располагаться контакты из нашего
из адресной книги Outlook. В качестве Подведем итоги списка. В папке Контакты в Outlook бу-
источника может служить и глобаль- Итак, что у нас получилось? На страни- дет добавлен раздел Общие контакты
ная адресная книга сервера Exchange. це представления по умолчанию спис- с данными из нашего списка на серве-
Для такого импорта служит кнопка ка отображается необходимая кон- ре. Этот список можно использовать
«Импортировать контакты» на панели тактная информация по сотрудникам. автономно, и обновлять данные с сер-
инструментов списка. После нажатия Для просмотра полной информации, вера при необходимости. К сожалению,
на кнопку необходимо выбрать кон- назовем ее «Карточка сотрудника», в Outlook нельзя редактировать дан-
такты для импорта из адресной кни- есть ссылка в столбце «Фамилия». Ре- ные, полученные с серверов WSS. От-
ги и ответить на запрос об импорте дактирование элементов осуществля- кройте карточку любого контакта и пос-
из Outlook. ется по ссылке в колонке «Изменить». мотрите, какие поля заполнены. Прото-
Все описанные способы предпола- Мы создали представление «По отде- кол передачи данных между SharePoint
гают ручное обновление списка, а это лам», где данные списка сгруппирова- и Outlook поддерживает те поля, кото-
не всегда удобно и, к сожалению, не га- ны по отделам. рые по умолчанию присутствуют в спис-

24
администрирование
ке, созданном на основе шаблона «Кон-
такты». Мы не зря переименовали поле Взаимодействие с почтовым сервером
«Организация» в «Отдел» – иначе мы При указании в настройках WSS сервера пользования почтового сервера является
бы не смогли выгружать в Outlook све- исходящей почты SMTP предоставляется функциональность оповещений об измене-
дения об отделе, а они нам более важ- возможность использовать запросы на до- ниях. При просмотре списка библиотеки до-
ны, раз речь идет о справочнике одной ступ и оповещения об изменениях. кументов на панели «Действия» есть ссыл-
компании. Обратите внимание, что по- Если на веб-узел пытается зайти поль- ка «Оповещать меня». При просмотре эле-
ле «Организация» в карточке контакта зователь, не имеющий должных разреше- мента списка или свойств файла в библио-
Outlook содержит сведения об отделе. ний, он видит веб-страницу с формой за- теке документов такая же ссылка «Опове-
Получился достаточно функцио- проса на доступ. Эта же страница появ- щать меня» есть на панели инструментов.
нальный телефонный справочник, в ко- ляется, когда пользователь пытается пре- При использовании этой ссылки пользова-
тором пока не хватает фотографий. высить свои разрешения. В форме запро- тель задает свой адрес электронной почты,
са на доступ указывается текущий логин тип изменений и частоту оповещений. Типы
Добавляем фотографии пользователя, и есть возможность указать изменений включают все изменения, добав-
сотрудников причины запроса. После нажатия на кноп- ление элементов, изменение элементов,
Для крупных компаний наличие фо- ку отправить запрос администратор сай- удаление элементов. Сообщения могут от-
тографий в телефонном справочни- та получит по электронной почте сообще- правляться немедленно, раз в день или раз
ке особенно актуально. Для реализа- ние. В нем будет указан пользователь, ад- в неделю. После сохранения пользователь
ции нам необходимо место для хра- рес узла и ссылки для администрирования при каждом изменении в списке, библиоте-
нения фотографий. Это может быть разрешений. ке или их элементе будет получать уведом-
библиотека документов или библи- Запросы на доступ можно отключить ления о совершенных действиях по элек-
отека рисунков. Ее можно располо- в пределах всего сайта, или отдельно взято- тронной почте. В сообщение будет указы-
жить на нашем сайте или на любом го списка, или библиотеки документов. ваться тип изменения и будут даны гиперс-
другом. А в списке контактов сотруд- Еще одним интересным моментом ис- сылки для просмотра изменений.
ников мы будем хранить лишь ссыл-
ки на файлы. кциональность полезна при совмест- Помимо представления «Все ри-
Создадим библиотеку рисунков. ной работе над документами, но тре- сунки» в списке присутствует еще од-
Как уже было сказано, это модифи- бует дополнительного дискового про- но. «Проводник» является стандарт-
цированная библиотека документов, странства. ным для всех библиотек документов
в которой добавлена функциональ- Заполняем поля на странице: и позволяет отображать файлы так,
ность для просмотра изображений.  В поле «Имя» вводим название по- как если бы вы открыли папку в про-
Для создания библиотеки на вер- английски – photos (фотографии). воднике Windows. Кстати, доступ
хней панели ссылок нашего узла  В поле «Описание» вводим «Фото- к серверу SharePoint через провод-
http://server01/phones выбираем «Со- графии сотрудников». ник возможен – достаточно лишь ука-
здать». На странице создания идем  Выбираем, будет ли библиотека зать UNC-адрес. Для нашего сервера
по ссылке «Библиотека рисунков». отображаться на панели быстрого http://server01/phones/ путь будет вы-
Открывается страница создания но- запуска. глядеть как \\server01\phones. При этом
вой библиотеки. Как видите, стра-  В данной библиотеке поддержка все компоненты веб-узла отображают-
ница аналогична странице создания версионности не нужна, поэтому ся в виде папок и файлов. При работе
списка. Добавлен лишь раздел «Вер- отключаем ее. с сайтом через проводник будьте вни-
сии рисунков». В этом разделе любой мательны – не удалите случайно слу-
библиотеки (рисунков, форм или до- Нажимаем кнопку «Создать». По- жебные папки или файлы!
кументов) можно включить поддержку падаем в библиотеку рисунков, в пред- Переименуем созданную библи-
версионности, то есть возможность ставление по умолчанию «Все рисун- отеку на «Фотографии сотрудников».
сохранения и восстановления пре- ки». Страница похожа на представле- На панели «Действия» выберем «Из-
дыдущих версий файла. Данная фун- ние списка. менить настройки и столбцы», далее –
«Изменить общие параметры» и в поле
«Имя» введем новое название библио-
теки. Сохраним изменения и вернем-
ся в библиотеку.
У нас уже есть несколько записей
в телефонном справочнике. Загрузим
для них фотографии. На панели инс-
трументов выберем «Добавить рису-
нок». Здесь возможно указать один
файл для загрузки в поле «Имя» или,
перейдя по ссылке «Отправить не-
сколько файлов», указать файлы в от-
Рисунок 3. Библиотека рисунков крывшемся окне проводника.

№5, май 2006 25


администрирование
использовать адрес электронной поч-  В ыч и с л я е м ы й ( в ыч и с л е н и е
Персонализация веб-сайтов ты или логин сотрудника. Мы так и сде- по другим столбцам). В столбце
WSS позволяют настраивать внешний вид лаем (см. рис. 3). такого типа можно написать фор-
страниц и представления списков индиви- мулу, похожую на те, что использу-
дуально для каждого пользователя. Что дальше? ются в ячейках Excel. Подробную
Пользователи получают возможность Теперь нам надо добавить ссылку информацию о вычисляемых ячей-
изменить параметры веб-частей на стра- на фотографию в строку с контакта- ках можно получить по ссылке «До-
ницах веб-сайтов согласно своим поже- ми сотрудника. Добавим в список но- полнительные сведения» в разделе
ланиям. Изменить можно такие парамет- вый столбец. Переходим на страницу «Дополнительные параметры стол-
ры, как отображение веб-части, ее место- настроек списка «Сотрудники», выби- бца». Используя формулу, мы смо-
положение и т. д. раем «Добавить новый столбец». При- жем автоматически формировать
В случае со списками и библиотеками сваиваем имя столбца – photo. В слу- ссылку на картинку, правда, пока
документов пользователи могут создавать чае создания поля при вводе его име- вместо рисунка будет отображать-
персональные представления. ни, например, по-русски все символы ся гиперссылка. Далее мы испра-
будут заменены кодами. Это не меша- вим ситуацию.
Стоит отметить, что для библио- ет в дальнейшей работе, но все же ре-
теки рисунков для загрузки несколь- комендуется придерживаться правил Итак, вводим в поле «Формула»
ких файлов открывается приложение именования с использованием латин- следующее:
Microsoft Office Picture Manager 2003, ских символов без пробелов.
но только в том случае, если оно ус- Теперь необходимо выбрать тип =СЦЕПИТЬ("http://server01/phones/ ↵
photos/";ЛЕВСИМВ ↵
тановлено. В Picture Manager нахо- столбца из следующих: ([Адрес электронной почты]; ↵
дим нужные фотографии, выделя-  Однострочный текст. В столбец НАЙТИ("@";[Адрес электронной ↵
почты])-1);".jpg")
ем их и нажатием кнопки «Отправить такого типа придется вводить ссыл-
и закрыть» отправляем изображения ку на рисунок вручную. В представ- Результатом работы формулы бу-
в библиотеку. лении будет отображаться актив- дет полная ссылка на фото сотрудни-
Для хранения всех фотографий ная ссылка на фотографию. ка в библиотеке рисунков, основанная
нам необходимы уникальные имена  Гиперссылка или рисунок. Дан- на его имени, которое указано в столб-
файлов, чтобы легко идентифициро- ные вводятся вручную, но отобра- це «Адрес электронной почты» до сим-
вать сотрудников. Например, можно жаться будет фотография. вола «@». Каждый раз, когда вы буде-

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

Рисунок 4. Получившийся веб-узел

те заполнять столбец с адресом элект- Теперь необходимо настроить вне- пает в роли поставщика данных, дру-
ронной почты, в столбце с фото будетшний вид веб-части – она не отобража- гая – в качестве приемника. Веб-часть-
обновляться ссылка. ет некоторых полей. Справа в заголовке приемник может на основе получен-
Сохраняем новый столбец. Теперь веб-части нажмем кнопку со стрелкой ных данных изменять (фильтровать)
можно его переименовать, например, вниз. Откроется меню веб-части. Его отображаемую информацию. Соеди-
пусть его названием будет «Фото». первые три пункта позволяют управ- нения актуальны для веб-частей спис-
Следующим шагом по улучшению лять отображением веб-части на стра- ков, библиотек документов, рисунков,
справочника будет отображение дан- нице. Пункт «Свернуть» позволяет по- представления данных и т. д.
ных на первой странице веб-узла. казывать только заголовок. Пункт «За- Добавим отображение фотогра-
П е р ехо д и м н а гл а в н у ю с т р а -
крыть» сделает веб-часть невидимой. фии сотрудника на нашей странице.
ницу сайта, в нашем примере это Чтобы вновь ее отобразить, придет- Для этого соединим веб-часть списка
ся открывать страницу во FrontPage контактов с присутствующей на стра-
http://server01/phones. Заходим в вы-
падающее меню «Изменить общую или другом редакторе, совместимом нице веб-частью рисунка. При этом
страницу». Если такого меню нет или с WSS. Для удаления веб-части со стра- в качестве передаваемой информации
оно называется «Изменить мою стра- ницы выберите «Удалить». будем использовать ссылку на фото-
ницу», возможно, у вас нет соответс- Для изменения настроек веб-час- графию сотрудника.
твующих прав. Краткое назначение ти выберем пункт «Изменить общую Открываем страницу в конструкто-
пунктов меню: веб-часть». В правой части окна от- ре. В меню веб-части «Сотрудники» по-
 Добавить веб-части. Открыва- кроется страница с параметрами веб- явился пункт «Соединения». Выбира-
части. Разделы «Вид», «Макет» и «До- ем его и далее «Предоставить строку».
ет страницу в конструкторе и окно
со списком веб-частей. Кроме то-полнительно» присутствуют для всех Затем выбираем веб-часть, которой
го, есть возможность поиска или веб-частей. В этих разделах можно мы будем передавать данные, «Рису-
импорта веб-части. задать название веб-части, разме- нок узла». В открывшемся окне выби-
 Изменить эту страницу в конструк-ры и отображения веб-части и ее ме- раем поле, которое содержит путь к ри-
торе. Отображает страницу в виденю. Самый верхний раздел управляет сунку, в нашем случае это поле «Фото»,
конструктора, с веб-зонами и воз-
текущим представлением списка для и нажимаем кнопку «Готово».
можностью изменять местоположе- веб-части. Выберем в списке «Выбран- Заметьте, что слева в каждой стро-
ние веб-частей. ное представление» пункт «Все кон- ке списка сотрудников появился эле-
 Изменить общие веб-части. От- такты» и укажем, что нам не нужна мент со ссылкой. При нажатии на него
крывает окно свойств выбранной панель инструментов. Заметьте, спи- в правой части страницы загружается
веб-части для изменения ее на- сок отображается с использованием фотография сотрудника. Если не вы-
строек. представления «Все контакты». Неко- брано ничего, то есть когда мы пер-
 Общее представление. Переклю- торые поля этого представления мож- вый раз заходим на страницу, вместо
чается в представление для всех но скрыть. Переходим по ссылке «Из- рисунка отобразится текст, сообщаю-
пользователей. Данный пункт до- менить текущее представление». От- щий о необходимости выбора сотруд-
ступен при наличии соответству- крывается окно редактирования пред- ника (см. рис. 4).
ющих разрешений на изменения ставления. Все изменения, которые бу-
страниц на узле. дут сделаны на этой странице, будут Заключение
 Личное представление. Позво- касаться только одной веб-части. Сни- Созданный в примере телефонный
ляет настроить внешний вид стра-маем отметки напротив поля «Изме- справочник вы можете модерни-
ницы и веб-частей по своему вку-нить». Сохраняем представление на- зировать, расширив функциональ-
су для конкретного пользователя.жатием кнопки «Ок». ность и улучшив внешний вид. Для
Одна из возможностей веб-час- этого можно использовать редак-
Выберем пункт «Добавить веб-час- тей – поддержка соединения между тор, совместимый с технологиями
ти → Обзор». Перетащим мышкой веб- ними. Две веб-части могут быть со- SharePoint, например Microsoft Office
часть списка «Сотрудники» из правой единены в пределах страницы или уз- FrontPage 2003. Но это – тема для сле-
части окна в левую. ла. При этом одна веб-часть высту- дующих статей.

№5, май 2006 27


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

Узнай секреты WMI: события и провайдеры


Часть II: ключ к управлению системой и приложениями

Константин Леонтьев
Технология управления системами через WMI позволяет решать ваши задачи гораздо
эффективнее, если вы знаете потенциальные возможности WMI-провайдеров.

В
предыдущей части статьи [1] ностей WMI нам осталось рассмотреть позволяет разработчикам добавлять
мы подробно рассмотрели спо- только специфику работы с различны- к единому пространству классов WMI
собы, которые предоставляет ми провайдерами. Как вы помните из новые классы, отвечающие за мони-
WMI системным администраторам для предыдущей статьи [2], WMI на ниж- торинг и управление их программно-
отслеживания и реакции на системные нем уровне имеет модульную расширя- го обеспечения. Такие модули в WMI
события. Из всех основных возмож- емую архитектуру. Такая архитектура имеют название провайдеров и обыч-

28
администрирование
но оформлены в виде DLL-библиотеки, взаимодействую- dtmInstallDate = strOS.InstallDate
Wscript.Echo WMIDateStringToDate(dtmInstallDate)
щей с WMI через COM+. Next
Замечу, что есть ряд провайдеров WMI, которые яв-
Function WMIDateStringToDate(dtmInstallDate)
ляются посредниками между WMI и другими широко рас- WMIDateStringToDate = CDate(Mid(dtmInstallDate, ↵
пространенными системами управления. К таким провай- 5, 2) & "/" & Mid(dtmInstallDate, 7, 2) & "/" & ↵
Left(dtmInstallDate, 4) & " " & ↵
дерам в частности относятся: WMI SNMP Provider и WMI Mid (dtmInstallDate, 9, 2) & ":" & ↵
Performance provider. Конечно же, в задачу системного ад- Mid(dtmInstallDate, 11, 2) & ":" & ↵
Mid(dtmInstallDate, 13, 2))
министратора не входит разработка провайдеров WMI – это End Function
удел программистов, однако весьма полезно иметь пред-
ставление об основных провайдерах и их функциях. Возникает вопрос, почему дата и время в WMI пред-
В операционной системе Windows XP существует бо- ставлены столь странным образом. Ответ на самом де-
лее 20 различных провайдеров WMI, каждый из которых ле прост. Вспомните, что одним из важнейших элемен-
решает свой собственный узкий набор задач. Кроме того, тов WMI является язык WQL. Для удобства обработки да-
устанавливая драйверы, а также системное и прикладное ты и времени в WMI с помощью языка WQL (внутренней
программное обеспечение, вы можете обнаружить, что их сортировки и группировки) все даты представлены так,
разработчики включили в состав своего продукта допол- что в самых старших разрядах идет год, затем месяц, по-
нительные WMI-провайдеры и классы. Из наиболее широ- том – день, потом часы, минуты и секунды. Соответствен-
ко известных программных продуктов, устанавливающих но для того, чтобы отсортировать массив данных, получен-
свои WMI-провайдеры, можно отметить следующие: Intel ных из WMI по дате времени, не нужно делать никаких до-
ProSet II, Citrix Metaframe и Presentation Server, Symantec полнительных усилий.
Antivirus, Dell Open Manage, IBM DB2, HP Open View, Altiris Некоторые усилия потребуются при отображении этих
Software Virtualization Solution, а также большинство продук- данных пользователю или сохранении их в отчете. С вы-
тов и сервисов Microsoft. Замечу, что это далеко не полный ходом Windows XP эта задача стала решаться еще легче.
список, а лишь то, что наиболее часто встречается в кор- В наборе объектов для сценариев WMI появился специаль-
поративных сетях. ный класс объекта SWbemDateTime. Он отвечает за пред-
Поскольку все провайдеры нацелены на предостав- ставление даты и времени в удобном для чтения виде.
ление различных функций и решение различных задач, То есть фактически проделывает ту же работу, что и фун-
то всё описание и примеры будут строиться не от одной об- кция WMIDateStringToDate из листинга 1. Пример исполь-
щей задачи, как это было в предыдущей части, а от функ- зования этого класса дан в листинге 2.
ций провайдера.
Листинг 2. Использование объекта SWbemDateTime.
Работает только на Windows XP и новее.
Обработка даты и времени
в сценариях WMI Set dtmInstallDate = ↵
CreateObject("WbemScripting.SWbemDateTime")
Разберём простой пример по обработке даты и времени
в сценариях WMI. Многие провайдеры WMI возвращают strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & ↵
обратившейся к ним программе различные характеристи- strComputer & "\root\cimv2")
ки операционной системы и приложений, которые содер-
Set objOS = objWMIService.ExecQuery("Select * ↵
жат даты и время. Эти данные представлены в специаль- from Win32_OperatingSystem")
ном формате и нуждаются в предварительной обработке,
For Each strOS in objOS
прежде чем принять удобный для чиения вид. dtmInstallDate.Value = strOS.InstallDate
До выхода Windows XP эта задача оставалась на со- Wscript.Echo dtmInstallDate.GetVarDate
Next
вести вызывающей программы и требовала от админис-
тратора написания подпрограммы преобразования фор- В дополнение к этим новым возможностям в самом ре-
матов. Несмотря на то что алгоритм этой подпрограммы позитории WMI появились классы, представляющие ло-
довольно прост – это требовало дополнительных усилий. кальное время и часовой пояс не во внутреннем форма-
Пример такой подпрограммы представлен в листинге 1. те WMI, а в удобном для пользователя виде. Эти классы:
Если взглянуть внимательно, то эта подпрограмма всего Win32_LocalTime и Win32_TimeZone – удобное дополне-
лишь разбирает дату и время, которые вернула система ние для работы с датами и временем. Кроме того, класс
WMI, на составляющие и представляет в более удобном Win32_LocalTime рекомендуется использовать для отслежи-
для чтения виде. вания интервалов времени с помошью обработчиков собы-
тий WMI, которым была посвящена предыдущая часть ста-
Листинг 1. Работа с датой и временем в WMI-сценариях. тьи. Обратите внимане, что минимальный интервал време-
Работает на всех версиях ОС
ни, который позволяет отслеживать класс Win32_LocalTime,
strComputer = "." равен 1 секунде.
Set objWMIService = GetObject("winmgmts:\\" & ↵
strComputer & "\root\cimv2") Сканирование хостов сети
Set objOS = objWMIService.ExecQuery("Select * ↵ и провайдер Ping
from Win32_OperatingSystem") Провайдер Ping предоставляет в репозиторий WMI всего
For Each strOS in objOS один класс Win32_PingStatus. Они позволяют из сценариев

№5, май 2006 29


администрирование
WMI посылать ICMP ECHO-запросы в сеть. Попросту пинго- темы и предоставляет подробный отчет о статусе послан-
вать хосты сети. К сожалению, этот провайдер поддержи- ного ICMP-пакета и ответа на него.
вается только в Windows XP и Windows Server 2003. Помимо мониторинга доступности хоста по сети, неза-
Если вам нужно написать сценарий WMI, который под- менимый класс Win32_PingStatus позволяет решать и мно-
ключается к удаленной машине (как это делать, мы об- жество других задач. В приведенном примере (см. лис-
суждали в предыдущей статье [2]), то перед подключени- тинг 4) мы определяем MTU (Maximum Transmission Unit)
ем хорошо бы проверить – доступна ли эта машина. Ес- трассы от нашего хоста к хосту удаленному. Для тех,
ли машина по сети не доступна (выключена или отсоеди- кто не знаком с понятием MTU стека TCP/IP, я поясню:
нена от сети), то подключение к WMI не состоится и в ваш MTU – это максимальный размер пакета, который мо-
сценарий будет возвращена ошибка. Сама по себе ошиб- жет быть передан по маршруту (трассе) от одного хоста
ка не представляет большой проблемы, но перед тем как до другого, не будучи фрагментирован (разрезан на час-
WMI вернет ее вам, пройдет довольно большой тайм-аут ти для последующей сборки) ни одним промежуточным
(около 30-60 секунд). маршрутизатором.
Таким образом, если вы запустите сценарий, который Отмечу, что этот сценарий может быть весьма полезен
должен будет подключиться к 100 машинам по сети и 25 в задачах оптимизации производительности сети и диа-
из них будут недоступны, то время выполнения сценария гностике проблем.
займёт от 15 до 30 минут.
Если мы сможем перед попыткой подключения к уда- Листинг 4. Определение максимального размера фрейма (MTU)
трассы
ленной машине быстро проверить, доступна ли она, то это
значительно сократит время ожидания. Вот как раз эту за- strComputer = "."
дачу и позволяет эффективно решать Ping. Вам следует Set objWMIService = GetObject("winmgmts:\\" & ↵
не забывать, что проверка доступности хоста по ICMP эхо- strComputer & "\root\CIMV2")
запросу может быть неудачной и из-за применения в сети strDestAddress = "www.ya.ru"
на маршруте следования пакета фильтрующих маршрути-
If WScript.Arguments.Count > 0 Then
заторов или firewall. strDestAddress = WScript.Arguments(0)
В операционных системах Windows 2000, а также End If
Windows NT 4.0 и Windows 98 эту проблему можно было ре- WScript.Echo "Посылаем ICMP-пакеты хосту: " & ↵
шить только одним способом: запускать из сценария кон- strDestAddress & " различного размера..."
сольную команду ping и разбирать то, что эта утилита вер- varMaxPacket = 0
нула на STDOUT, или анализировать код возврата утили- For varBuffSize = 8 to 1472 step 8
ты PING. Пример представлен в листинге 3. Способ, конеч- Set colItems = objWMIService.ExecQuery( _
но, не плохой, но не универсальный. Как известно, на ло- "SELECT * FROM Win32_PingStatus where Address='" & ↵
strDestAddress & "' and BufferSize=" & varBuffSize & ↵
кализованных версиях Windows ответы команды ping вы- " and NoFragmentation=true and TimeOut=700" ,,48)
водятся на локальном языке. Поэтому для каждой языко-
For Each objItem in colItems
вой версии ОС пришлось бы писать свой разборщик выво- Select Case objItem.StatusCode
да – согласитесь, что это не удобно. С другой стороны ана- Case 0
WScript.Echo "Ответ на ping-запрос за " & ↵
лиз кода возврата команды PING не позволяет понять при- objItem.ResponseTime & " миллисекунд, ↵
чину ошибки при отправке ICMP-пакета. TTL = " & objItem.ResponseTimeToLive & ↵
", размер пакета ответа " & ↵
objItem.ReplySize
Листинг 3. Старый способ, разбирающий вывод на STDOUT Case 11001
команды ping WScript.Echo "Слишком маленький буфер" & ↵
". Buffer Size is: " & varBuffSize
strComputer = "www.ya.ru" Case 11002
WScript.Echo "Конечная сеть не доступна" & ↵
Set objShell = CreateObject("WScript.Shell") ". Buffer Size is: " & varBuffSize
Set objScriptExec = objShell.Exec("ping -n 1 -w 700 –f ↵ Case 11003
–l 8 " & strComputer) WScript.Echo "Конечный хост не доступен" & ↵
". Buffer Size is: " & varBuffSize
strPingResults = LCase(objScriptExec.StdOut.ReadAll) Case 11004
If InStr(strPingResults, "reply from") Then WScript.Echo "Протокол не доступен" & ↵
If InStr(strPingResults, "destination net unreachable") ↵ ". Buffer Size is: " & varBuffSize
Then Case 11005
WScript.Echo strComputer & " не отвечает на ping." WScript.Echo "Конечный порт не доступен" & ↵
Else ". Buffer Size is: " & varBuffSize
WScript.Echo strComputer & " отвечает на ping." Case 11006
End If WScript.Echo "Недостаточно ресурсов" & ↵
Else ". Buffer Size is: " & varBuffSize
WScript.Echo strComputer & " не отвечает на ping." Case 11007
End If WScript.Echo "Неверная опция IP" & ↵
". Buffer Size is: " & varBuffSize
Положение существенно поменялось с выходом Windows Case 11008
WScript.Echo "Аппаратная ошибка" & ↵
XP и Windows Server 2003 – теперь нет необходимости вы- ". Buffer Size is: " & varBuffSize
зывать консольную команду ping. В нашем вооружении по- Case 11009
If varMaxPacket = 0 Then varMaxPacket = ↵
явился класс Win32_PingStatus. Запрос к этому классу поз- varBuffSize - 8
воляет выполнить это процедуру гораздо быстрее и проще. WScript.Echo "Пакет превышает предельный ↵
размер трассы" & ". Buffer Size is: " & ↵
Этот способ не зависит от локализации операционной сис- varBuffSize

30
администрирование
Case 11010 strComputer & "\root\CIMV2")
WScript.Echo "Превышен интервал ожидания" ↵
& ". Buffer Size is: " & varBuffSize Set objEvents = objWMIService.ExecNotificationQuery _
varBuffSize = varBuffSize - 8 ("SELECT * FROM __InstanceCreationEvent WHERE ↵
Case 11011 TargetInstance ISA 'Win32_NTLogEvent'")
WScript.Echo "Неверный запрос" & ↵
". Buffer Size is: " & varBuffSize Wscript.Echo "Ожидаем записи в системные журналы событий ..."
Case 11012 Do While(True)
WScript.Echo "Неверный маршрут" & ↵ Set objReceivedEvent = objEvents.NextEvent
". Buffer Size is: " & varBuffSize
Case 11013 Select Case ↵
WScript.Echo "Достигнут максимальный ↵ CInt(objReceivedEvent.TargetInstance.EventType)
TimeToLive" & ". Buffer Size is: " & ↵ Case 1
varBuffSize strType = "Ошибка"
Case 11014 case 2
WScript.Echo "Достигнут максимальный ↵ strType = "Предупреждение"
TimeToLive при сборке" & ↵ case 3
". Buffer Size is: " & varBuffSize strType = "Информация"
Case 11015 case 4
WScript.Echo "Ошибка параметра" & ↵ strType = "Успешный аудит"
". Buffer Size is: " & varBuffSize case 5
Case 11016 strType = "Аудит отказа"
WScript.Echo "Требование снизить скорость ↵ End Select
передачи" & ". Buffer Size is: " & ↵
varBuffSize WScript.Echo "----- Новое Событие -----"
Case 11017 Wscript.Echo "Event ID: " & ↵
WScript.Echo "Переполнение опции IP" & ↵ objReceivedEvent.TargetInstance.EventCode & ↵
". Buffer Size is: " & varBuffSize " Значимость: " & strType & " Log: " & ↵
Case 11018 objReceivedEvent.TargetInstance.LogFile
WScript.Echo "Неверное назначение" & ↵ WScript.Echo "Сообщение: " & ↵
". Buffer Size is: " & varBuffSize objReceivedEvent.TargetInstance.Message
Case 11032
WScript.Echo "Установление соединения ↵ Loop
по IPSEC" & ". Buffer Size is: " & ↵
varBuffSize
Case 11050 Как видно из примера, код WQL-запроса достаточ-
WScript.Echo "Общий сбой" & ↵ но простой, поэтому, я полагаю, детально пояснять его
". Buffer Size is: " & varBuffSize
End Select не нужно. Обращу внимание лишь на одно существен-
Next ное обстоятельство: при работе с журналами необходи-
Next мо использовать привилегию Security. В противном слу-
чае многие из запросов будут отклонены системой безо-
WScript.Echo "Удалось определить MTU трассы: " & ↵
CStr(varMaxPacket + 28) пасности Windows.
Следующий пример, приведенный на листинге 6, пока-
Алгоритм работы этого сценария прост: мы посыла- зывает, как произвести очистку журнала приложений (хотя
ем от нашего хоста до указанного целевого хоста пакеты, это может быть любой системный журнал аудита), исполь-
с каждым шагом увеличивая их размер на 8 байт, устано- зуя метод ClearEventlog класса Win32_NTEventlogFile. Поми-
вив специальный IP-флаг, запрещающий фрагментировать мо того, что нам необходимо указать привилегию Security,
пакет. При этом мы следим за результатом, и как только нам также необходимо открыть конкретный экземпляр объ-
нам вернется диагностический пакет, сообщающий о том, екта класса Win32_NTEventlogFile соответствующего жур-
что размер нашего исходного пакета больше допустимого, налу приложений.
мы запоминаем размер последнего успешно прошедшего
по трассе пакета. Листинг 6. Очистка системного журнала приложений
(Application Event Log)

Обработка системных журналов strComputer = "."


Следующий провайдер WMI, который может оказаться Set objWMIService = GetObject("winmgmts: ↵
вам полезеным, – это провайдер системных журналов {impersonationlevel=impersonate,(security)}!\\" & ↵
strComputer & "\root\CIMV2")
Windows. Классы, которые предоставляет в наше пользо-
вание этот провайдер, имеют названия: Win32_NTLogEvent, Set objNTEventLog = objWMIService.Get ↵
("Win32_NTEventlogFile.Name='C:\WINDOWS\system32\ ↵
Win32 _ NTEventLogFile, Win32 _ NTLogEventLog, config\AppEvent.Evt'")
Win32_NTLogEventUser, Win32_NTLogEventComputer.
objNTEventLog.ClearEventlog("c:\app.evt")
Для нас наибольший интерес представляют первые два.
Win32_NTLogEvent позволяет нам отслеживать собы- Обратите внимание на единственный аргумент мето-
тия появления в системных журналах аудита новых запи- да ClearEventlog: «c:\app.evt». Этот аргумент задает файл,
сей. Для этого используется синхронная техника внутрен- в который при очистке журнала будет сохранено старое со-
них событий WMI. держимое журнала.

Листинг 5. Отслеживание событий в системных журналах Работа с реестром из WMI


аудита
и провайдер StdRegProv
strComputer = "." Одним из самых полезных провайдеров WMI является про-
Set objWMIService = GetObject("winmgmts: ↵ вайдер работы с реестром. В отличие от множества других
{impersonationlevel=impersonate,(security)}!\\" & ↵ провайдеров все его классы определены не в пространс-

№5, май 2006 31


администрирование
тве имен root\CIMv2, а в пространстве имен root\default. ча в цикле while, попутно делая раз в секунду (1000 милли-
В примере, приведенном в листинге 7, можно увидеть секунд) изменение этого самого ключа с помощью другого
все основные приемы, необходимые для работы с реестром метода WMI: SetStringValue. Как только пройдет 20 секунд,
через WMI. В их число входит создание и удаление клю- и мы 20 раз изменим указанный выше ключ, цикл завер-
чей и значений реестра, а также запись данных в значе- шается, и в самом конце сценария мы отменяем подписку
ния реестра и отслеживание событий по изменению клю- на события WMI вызовом метода Cancel объекта MySink,
чей и значений реестра. Провайдер StdRegProv предо- а также удаляем созданный ранее ключ реестра.
ставляет системе WMI набор внешних источников собы-
тий для отслеживания изменений в реестре, что сущес- Работа с Active Directory через
твенно повышает эффективность и скорость отслежива- WMI Directory Service provider
ния этих событий. Еще один полезный и интересный провайдер WMI – это про-
вайдер для работы со службой каталогов Microsoft Active
Листинг 7. Работа с реестром через WMI Directory. Все классы этого провайдера определены в про-
Sub REG_OnObjectReady(objObject, objAsyncContext) странстве имен root\deirctory\ldap. Сразу хочу обратить вни-
Wscript.Echo "Изменение в реестре: " & ↵ мание, что существует альтернативное средство для рабо-
objObject.GetObjectText_()
End Sub ты с Active Directory из сценариев и приложений – это ADSI
(Active Directory Services Interfaces). Объектная библиотека
'--------------------------------------------------------
strComputer = "." ADSI более проста и удобна в использовании, чем провай-
Const HKEY_LOCAL_MACHINE = &H80000002 дер WMI Directory Services, тем более что он является над-
strKeyName = "SOFTWARE\aRegKey"
strValName = "MyValue" стройкой над всё тем же ADSI.
Зачем же тогда нужен этот провайдер?! – спросите вы.
Set objWMIService = GetObject("winmgmts:\\" & ↵
strComputer & "\root\DEFAULT") Все довольно просто – поскольку WMI универсальное
Set objReg = objWMIService.Get("StdRegProv") средство мониторинга и управления системой Windows
objReg.CreateKey HKEY_LOCAL_MACHINE, strKeyName и ее компонентами, то есть необходимость интегрировать
objReg.SetStringValue HKEY_LOCAL_MACHINE, strKeyName, ↵ все средства управления системой через WMI. Кроме то-
strValName, "test0"
го, поскольку некоторые программные продукты по сво-
Set MySink = WScript.CreateObject( _ ей архитектуре могут использовать только WMI, то зада-
"WbemScripting.SWbemSink","REG_")
ча управления Active Directory должна быть решена и че-
objWMIservice.ExecNotificationQueryAsync MySink, _ рез WMI в том числе.
"SELECT * FROM RegistryValueChangeEvent WHERE " & ↵
"Hive = 'HKEY_LOCAL_MACHINE'" &_" AND KeyPath = ‘" & ↵ В листинге 8 приведен пример простого сценария WMI,
Join(Split(strKeyName, "\"), "\\") & "'" & ↵ который модифицирует поле displayname указанного поль-
" AND ValueName = '" & strValName &"'"
зователя Active Directory.
WScript.Echo "Ожидаем события..."
Листинг 8. Изменение свойств пользователя в Active Directory
i = 0 через WMI
While (i < 20)
Wscript.Sleep(1000) strComputer = "."
i = i + 1 strUserID = "MyNew_WMI_User"
objReg.SetStringValue HKEY_LOCAL_MACHINE, ↵
strKeyName, strValName, «test» & i Set objWMIService = GetObject("Winmgmts:\\" & ↵
Wend strComputer & "\root\directory\ldap")
MySink.Cancel Set objValSet = ↵
objReg.DeleteKey HKEY_LOCAL_MACHINE, strKeyName CreateObject("wbemscripting.swbemnamedvalueset")

Разберем пример, приведенный в листинге 7, под- objValSet.add "__PUT_EXT_PROPERTIES", ↵


array("ds_displayname")
робнее. Мы используем асинхронную технику обра- objValSet.add "__PUT_EXTENSIONS", true
ботки внешних (extrinsic) событий WMI для к ласса objValSet.add "__PUT_EXT_CLIENT_REQUEST", true
RegistryValueChangeEvent. Set objEnum = objWMIService.ExecQuery( _
В самом начале (сразу после подключения к репозито- "select * from ds_user where ds_cn = '" & ↵
strUserID & "'", "WQL", 32)
рию WMI и классу StdRegProv) мы создаем ключ, измене-
ние которого мы будем в последующем отслеживать. Да- For each objUser in objEnum
objUser.ds_DisplayName = "Обновленноое поле ↵
лее мы регистрируем процедуру – обработчик событий DisplayName"
(Event Sink) под названием REG_OnObjectReady. Объявля- objUser.put_ 1, objValSet
Next
ем мы ее с использованием метода CreateObject для класса
WbemScripting.SWbemSink. Далее мы вызываем метод асин- WScript.Echo "Свойства прользователя Active Directory ↵
обновлены"
хронной обработки событий WMI ExecNotificationQueryAsync.
Этот метод подписывает наш сценарий (вернее его проце- При изменении свойств объектов Active Directory через
дуру REG_OnObjectReady) на получение событий об изме- WMI есть одна существенная особенность – необходимо яв-
нении интересующего нас значения реестра. В данном при- но определять, какие из атрибутов объекта вы хотите мо-
мере это значение HKEY_LOCAL_MACHINE\SOFTWARE\ дифицировать. Для этого их названия нужно перечислить
aRegKey\MyValue. После того как обработчик зарегистри- в специальном объекте класса swbemnamedvalueset. В ос-
рован, мы начинаем ожидать события изменения этого клю- тальном взаимодействие с классами провайдера службы

32
администрирование
каталогов практически не отличается от работы с други- В этом примере сценарий выводит показания счетчи-
ми классами WMI. ков производительности для процессора. Для того чтобы
понять, чем отличаются классы нормированных счетчиков
Работа со счетчиками производительности от ненормированных, я привел в лис-
производительности тинге 10 почти тот же пример, но использующий класс
Следующий интересный провайдер – провайдер доступа с нормированными счетчиками производительности.
к счетчикам производительности. Эти же самые счетчи-
ки вы можете увидеть, когда используете утилиту System Листинг 10. Использование форматированных и нормированных
счетчиков (все значения соответствуют System Monitor)
Monitor (Performance Monitor). Этот провайдер предостав-
ляет две группы классов, олицетворяющих счетчики про- strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & ↵
изводительности системы. К первой группе относятся клас- strComputer & "\root\CIMV2")
сы, представляющие ненормированные системные показа- Set colItems = objWMIService.ExecQuery( _
"SELECT * FROM ↵
тели. Эта группа классов имеет общую часть в их назва- Win32_PerfFormattedData_PerfOS_Processor",,48)
нии – Win32_PerfRawData_, и наследуют все свои свойс-
For Each objItem in colItems
тва от класса Win32_PerfRawData. Ко второй группе отно- Wscript.Echo "-----------------------------------"
сятся классы, предоставляющие нормированные и форма- Wscript.Echo ↵
"Win32_PerfFormattedData_PerfOS_Processor instance"
тированные данные. В их названии также имеется общая Wscript.Echo "-----------------------------------"
часть: Win32_PerfFormattedData_, а их свойства выведены Wscript.Echo "C1TransitionsPersec: " & ↵
objItem.C1TransitionsPersec
из класса Win32_PerfFormattedData. Wscript.Echo "C2TransitionsPersec: " & ↵
Пример работы с ненормированными счетчиками про- objItem.C2TransitionsPersec
Wscript.Echo "C3TransitionsPersec: " & ↵
изводительности смотрите в листинге 9. objItem.C3TransitionsPersec
Wscript.Echo "DPCRate: " & objItem.DPCRate
Листинг 9. Использование неформатированных счетчиков Wscript.Echo "DPCsQueuedPersec: " & ↵
(более быстрый доступ к данным) objItem.DPCsQueuedPersec
Wscript.Echo "Frequency_Object: " & ↵
strComputer = "." objItem.Frequency_Object
Wscript.Echo "Frequency_PerfTime: " & ↵
Set objWMIService = GetObject("winmgmts:\\" & ↵ objItem.Frequency_PerfTime
strComputer & "\root\CIMV2") Wscript.Echo "Frequency_Sys100NS: " & ↵
Set colItems = objWMIService.ExecQuery( _ objItem.Frequency_Sys100NS
"SELECT * FROM ↵ Wscript.Echo "InterruptsPersec: " & ↵
Win32_PerfRawData_PerfOS_Processor",,48) objItem.InterruptsPersec
Wscript.Echo "Name: " & objItem.Name
For Each objItem in colItems Wscript.Echo "PercentC1Time: " & objItem.PercentC1Time
Wscript.Echo "-----------------------------------" Wscript.Echo "PercentC2Time: " & objItem.PercentC2Time
Wscript.Echo ↵ Wscript.Echo "PercentC3Time: " & objItem.PercentC3Time
"Win32_PerfRawData_PerfOS_Processor instance" Wscript.Echo "PercentDPCTime: " & ↵
Wscript.Echo "-----------------------------------" objItem.PercentDPCTime
Wscript.Echo "C1TransitionsPersec: " & ↵ Wscript.Echo "PercentIdleTime: " & ↵
objItem.C1TransitionsPersec objItem.PercentIdleTime
Wscript.Echo "C2TransitionsPersec: " & ↵ Wscript.Echo "PercentInterruptTime: " & ↵
objItem.C2TransitionsPersec objItem.PercentInterruptTime
Wscript.Echo "C3TransitionsPersec: " & ↵ Wscript.Echo "PercentPrivilegedTime: " & ↵
objItem.C3TransitionsPersec objItem.PercentPrivilegedTime
Wscript.Echo "DPCRate: " & objItem.DPCRate Wscript.Echo "PercentProcessorTime: " & ↵
Wscript.Echo "DPCsQueuedPersec: " & ↵ objItem.PercentProcessorTime
objItem.DPCsQueuedPersec Wscript.Echo "PercentUserTime: " & ↵
Wscript.Echo "Frequency_Object: " & ↵ objItem.PercentUserTime
objItem.Frequency_Object Wscript.Echo "Timestamp_Object: " & ↵
Wscript.Echo "Frequency_PerfTime: " & ↵ objItem.Timestamp_Object
objItem.Frequency_PerfTime Wscript.Echo "Timestamp_PerfTime: " & ↵
Wscript.Echo "Frequency_Sys100NS: " & ↵ objItem.Timestamp_PerfTime
objItem.Frequency_Sys100NS Wscript.Echo "Timestamp_Sys100NS: " & ↵
Wscript.Echo "InterruptsPersec: " & ↵ objItem.Timestamp_Sys100NS
objItem.InterruptsPersec Next
Wscript.Echo "Name: " & objItem.Name
Wscript.Echo "PercentC1Time: " & objItem.PercentC1Time
Wscript.Echo "PercentC2Time: " & objItem.PercentC2Time Видите – сам по себе исходный код сценария в лис-
Wscript.Echo "PercentC3Time: " & objItem.PercentC3Time тинге 10 отличается от примера в листинге 9 только од-
Wscript.Echo "PercentDPCTime: " & objItem.PercentDPCTime
Wscript.Echo "PercentIdleTime: " & ↵ ной строкой. Эта строка – WQL-запрос: «SELECT * FROM
objItem.PercentIdleTime Win32_PerfFormattedData_PerfOS_Processor». В сущности,
Wscript.Echo "PercentInterruptTime: " & ↵
objItem.PercentInterruptTime отличается только имя класса, набор его свойств в точности
Wscript.Echo "PercentPrivilegedTime: " & ↵ совпадает, однако сами значения свойств будут отличаться.
objItem.PercentPrivilegedTime
Wscript.Echo "PercentProcessorTime: " & ↵ Для каждого свойства существует специальная формула
objItem.PercentProcessorTime перевода из ненормированного значения в нормированное.
Wscript.Echo "PercentUserTime: " & ↵
objItem.PercentUserTime Узнать эту формулу можно из файла Winperf.h.
Wscript.Echo "Timestamp_Object: " & ↵
objItem.Timestamp_Object
Wscript.Echo "Timestamp_PerfTime: " & ↵ WMI SNMP-провайдер
objItem.Timestamp_PerfTime Подробно рассмотреть здесь провайдер WMI SNMP не по-
Wscript.Echo "Timestamp_Sys100NS: " & ↵
objItem.Timestamp_Sys100NS лучится, тем не менее упомянуть об этом провайдере стоит.
Next Этот провайдер фактически является мостом между SNMP-

№5, май 2006 33


администрирование
совместимыми устройствами и системой WMI. Те, кто не- Таким образом, команда компиляции MOF файла должна
плохо знаком с SNMP, понимают, что в основе WMI и SNMP выглядеть так:
лежат похожие решения по хранению и представлению ин-
формации. И WMI и SMNP поддерживают события (в тер- mofcomp –AUTORECOVER <moffilename>
минологии SNMP это Trap-сообщения) и расширение базы
данных (репозитория): в терминологии WMI это MOF-фай- Очевидно, что эти файлы должны быть доступны ло-
лы, а в терминологии SNMP это базы MIB (Management кально, когда процесс автоматического восстановления
Information Base). будет запущен, поэтому при компиляции с этим ключом
В итоге при использовании SNMP-провайдера WMI ад- MOF-файлы копируются в папку %systemroot%\system32\
министратор получает в пространстве имен root\snmp пред- wbem.
ставление всех необходимых устройств, поддерживающих Относительно недавно (10 марта 2006 года) вышла об-
протокол SNMP. Присылаемые SNMP-устройствами Trap- новленная версия 1.1 сценария WMIDiag.vbs. Этот сцена-
сообщения преобразуются в события WMI, которые можно рий разработан специалистами Microsoft для дополнитель-
также отслеживать. Для добавления информации из баз ной диагностики WMI. Он обязательно должен запускать-
данных в формате SNMP MIB в репозиторий WMI сущест- ся локально на той машине, на которой следует провести
вует специальная утилита smi2smir.exe. диагностику. Он поддерживает множество ключей команд-
При инсталляции ОС Windows по умолчанию провайдер ной строки для управления режимом своей работы. В час-
SNMP WMI не устанавливается – его необходимо устанав- тности его можно работать в «тихом режиме» (без вывода
ливать через установку и удаление системных компонен- диагностических сообщений на экран – они будут записы-
тов консоли Add/Remove Programs. ваться в файл, в системный журнал и/или отправляться по
Затем необходимо произвести настройку SNMP-окру- электронной почте) или запускаться как задание Microsoft
жения. В эту задачу входит определение в свойствах про- SMS 2003.
странств имен раздела root\snmp так называемых SNMP- С его помощью можно осуществлять множество раз-
community для чтения, записи и оповещений, и импорти- ных тестов по проверке работоспособности WMI: провер-
ровать в репозиторий WMI MIB-файлы. Некоторую допол- ку службы и COM-объектов WMI, чтение и запись в репо-
нительную информацию по этой теме можно прочитать в зиторий, проверку целостности репозитория и определе-
библиотеке MSDN [4]. ния классов и пространств имен, а также параметров ре-
После того как SNMP-окружение настроено для этого естра и других системных служб и компонентов, влияющих
провайдера, можно начинать работать с SNMP-совмести- на работу WMI. Пожалуй, самым ценным в этом сценарии
мыми устройствами из сценариев WMI. Пример WQL-за- является то, что помимо диагностики и констатации про-
проса для чтения свойств SNMP-совместимых устройств блем он выдает рекомендации по исправлению неисправ-
выглядит примерно так: ностей. В будущих версиях планируется сделать режим ав-
томатического исправления некоторых типичных проблем,
SELECT * FROM SNMP_DEVICE_ADDRESS WHERE ↵ которые он обнаруживает.
SNMP_PROPERTY_NAME > 100
Подробное описание этого сценария (утилиты) с приме-
Таким образом, провайдер SNMP позволяет интегриро- рами и иллюстрациями можно найти по ссылке [5].
вать любые системы и устройства, поддерживающие SNMP,
с технологией WMI. Вместо заключения
В цикле статей о технологии WMI я постарался рассказать
Устраняем ошибки в WMI вам о всех важных и практически применимых сторонах
В данном разделе мы рассмотрим вопрос диагностики этого поистине универсального инструмента. Надеюсь, вы
и устранения ошибок в WMI. Помимо штатного резерв- оцените его полезность.
ного копирования и восстановления, выполнение которо-
го доступно через консоль wmimgmt.msc. Существует еще Ссылки и литература:
ряд средств диагностики и восстановления WMI. Для то- 1. Леонтьев К. Узнай секреты WMI: события и провайдеры.
го чтобы разобраться, как они работают, нужно вспомнить, Часть I: дополнительные возможности. – Журнал «Систем-
что все элементы репозитория WMI могут быть описаны ный администратор», №3, март 2006 г. – 6-13 с.
на языке MOF-файлов. Таким образом, используя компи- 2. Леонтьев К. Вы все еще не используете WMI? Часть I. – Журнал
лятор MOF-файлов mofcomp.exe, вы можете заново вос- «Системный администратор», №1, январь 2006 г. – 4-11 с.
создать весь репозиторий WMI – главное для этого иметь Леонтьев К. Вы все еще не используете WMI? Часть II: пишем
эти самые исходные MOF-файлы. При компиляции некото- сценарии. – Журнал «Системный администратор», №2, фев-
рые MOF-файлы могут быть помечены как компоненты ав- раль 2006 г. – 6-14 с.
томатического восстановления – это означает, что при об- 3. Windows Management Instrumentation – http://msdn.microsoft.
наружении серьезной ошибки в базе данных репозитория com/library/en-us/dnanchor/html/anch_wmi.asp.
WMI запущенный процесс автоматического восстановле- 4. Setting up the WMI SNMP Environment – http://msdn.microsoft.
ния самостоятельно скомпилирует и импортирует в репо- com/library/en-us/wmisdk/wmi/setting_up_the_wmi_snmp_
зиторий такие MOF-файлы. Для того чтобы пометить MOF- environment.asp?frame=true.
файлы как компонент автоматического восстановления при 5. WMIDiag – http://www.microsoft.com/technet/scriptcenter/topics/
его компиляции, нужно добавить опцию – AUTORECOVER. help/wmidiag.mspx.

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

Отказоустойчивый кластер
с минимальным бюджетом

Сергей Довганюк
Как с минимальным бюджетом эффективно построить отказоустойчивый кластер
и использовать его в качестве платформы для критически важных приложений на примере
СУБД Oracle 9i.

К
огда работа предприятия зави- ности, то варианты из нижнего ряда ется другой пакет, менеджер класте-
сит от функционирования сер- второй таблицы отвергаем сразу. Рас- ра – Heartbeat.
веров, всегда хочется быть уве- смотрим оставшиеся варианты с уче- Свежую версию DRBD, на момент
ренным в их надежности. И надежность том требуемого бюджета. Выбираем написания статьи, можно было взять
эту даже можно измерить. DRBD + Heartbeat. по ссылке http://oss.linbit.com/drbd/0.7/
Применительно к серверам эта ве- Перевод статьи, посвященной бюд- drbd-0.7.17.tar.gz, а версию Heartbeat –
личина называется «доступность» или жетным системам высокой готовности, http://linux-ha.org/download/heartbeat-
«готовность», измеряется в процентах в которой рассматривается выбран- 2.0.2.tar.gz.
и означает, сколько времени в году ное нами решение, находится по ад- В нашем кластере два узла, один
сервер исправно функционирует. Иде- ресу: http://www.opennet.ru/docs/RUS/ из них является ведущим (основным),
альное ее значение – 100%. ha_cluster. второй ведомым (вторичным).
В таблице 1 приведены типичные
значения готовности и расчетное вре- Назначение DRBD Конфигурация системы
мя простоя для каждой из них. и Heartbeat За основу берем однодисковый ва-
Что делать, чтобы увеличить этот DRBD – это блочное устройство, кото- риант дистрибутива ALT Linux Master
показатель? Оптимальное решение – рое позволяет организовывать зерка- 2.4.
это дублирование всех узлов (т.е. сер- лирование (RAID1-массив) через сеть. В качестве узлов кластера ис-
веров). Это решение позволит допи- На каждом из узлов DRBD связыва- пользуются две системы. Одна (ос-
сать к показателю готовности еще од- ет виртуальное устройство /dev/drbdX новная) – это 2 х Xeon 2.8 ГГц, 1 Гб,
ну «9». А два функционально идентич- (Х – номер) и локальный раздел дис- 2 x RAID1 (/dev/sda и /dev/sdb; 4 дис-
ных сервера, работающих как один, – ка, далее не доступный напрямую. За- ка Seagate SCSI 73 Гб, 10000 rpm).
это уже кластер. пись информации осуществляется на Вторая проще – Athlon 1700+, 256 Мб,
Варианты построения кластера вы- первичном узле (DRBD разрешает за- ATA WD 80 Гб (/dev/hda) + RAID1 (/dev/
бираются в каждом конкретном случае. пись только на первичном узле) на ус- sda; 2 х ATA WD 80 Гб). На обоих уз-
Я хочу привести пример построения тройство /dev/drbdX, которое переда- лах по две сетевые карты, одна бу-
кластера на примере СУБД Oracle 9i. ет эти данные для записи на связан- дет использоваться для выхода в кор-
Как я и писал выше, есть несколько ный локальный раздел диска и отсы- поративную сеть, вторая (желательно
вариантов решений. Их можно разде- лает по сети на другие узлы кластера. gigabit ethernet)– используется DRBD
лить по нескольким критериям: стои- Чтение данных происходит с локаль- для синхронизации дисков. Скорость
мость решения, оперативность восста- ного раздела. работы этого сетевого RAID-масси-
новления системы после сбоя (см. таб- Для управления кластером и пе- ва не будет выше, чем скорость ва-
лицу 2). реключения с одного узла класте- шей сети. Еще соединим оба узла че-
Поскольку основное требование ра на другой (запуск/останов необ- рез COM-порты (нуль модем) для то-
к кластеру – высокая степень доступ- ходимых сервисов и т. д.) использу- го, чтобы Heartbeat мог с большей ве-

36
администрирование
роятностью определить, «умер» один из узлов кластера Таблица 1. Типичные значения готовности
или нет. Может так случиться, что между узлами пропадет Готовность, % Время простоя в год
связь через Ethernet и тогда получится, что каждый узел бу- 99 3.5 дня
дет считать себя главным, справедливо полагая, что дру-
99.9 9 часов
гие узлы «мертвы» (т.н. split-brain или раздвоение личнос-
ти), чего стоит всячески избегать. 99.99 52.5 минуты
На каждом из узлов должен быть выделен раздел 99.999 5 минут
для использования с DRBD. Выделим на обеих машинах
по RAID1-массиву. Во время и после установки операцион-  Руководство «Установка БД Oracle 9.2.0.4.0 и Oracle
ной системы (вплоть до установки DRBD) они должны ос- Application Server 10g на RED HAT Enterprise Linux AS 2.1» рас-
таваться неиспользуемыми! положенное по адресу: http://pm4u.narod.ru/oracle.htm –
также замечательный материал.
Порядок установки системы  Книга из официальной документации по Oracle 9i
Для начала нужно установить Oracle на основном узле «Oracle 9i installation guide». Электронная версия распо-
кластера. Затем создать базу. Предполагается, что сам ложена по адресу: http://download-west.oracle.com/docs/
Oracle и база имеют некую общую родительскую директо- html/A96167_01/toc.htm.
рию (например /D01). После этого, используя конфигураци-
онные файлы от первой установки, Oracle устанавливает- Я не буду описывать весь подготовительный процесс,
ся и на вторичном узле. Делается это для того, чтобы быть о котором вы можете прочесть в фирменной документации.
уверенным, что Oracle работает (!) на обоих узлах в иден- Остановлюсь только на отличительных особенностях для
тичной (!) конфигурации. нашей ситуации. Учитывая, что мы с вами создаем клас-
Затем устанавливаем DRBD и Heartbeat. Конфигуриру- тер, то на разных узлах пользователь oracle и группы, с ко-
ем их. Создаем раздел на основном узле кластера на за- торыми он связан, должны иметь одинаковые идентифи-
пасенном RAID1-массиве. Oracle переносим во временную каторы (uid и gid)
директорию. Настраиваем DRBD и монтируем созданный
раздел к той директории, в которой был установлен Oracle altora1#> groupadd –g 789 oracle
altora1#> useradd –g oracle –u 1234 oracle
(в нашем случае /D01) и переносим Oracle обратно из вре-
менной директории. Проверяем работоспособность пос- и
леднего и работоспособность кластера в целом.
А теперь все то же самое подробнее. altora2#> groupadd –g 789 oracle
altora2#> useradd –g oracle –u 1234 oracle

Установка Oracle 9i Заметьте: и номера, и имена одинаковы на обоих узлах!


Свои действия я основывал на информации из несколь- В качестве точки монтирования будем использовать ка-
ких источниках: талог /D01. Итак.
 Руководство по установке, расположенное по адресу Для упрощения установки и автоматизации процесса за-
http://www.surw.ru/~dalth/orafedora2.html. Этот матери- пуска Oracle будем использовать скрипты из пакетов oracle-
ал написан, на мой взгляд, очень грамотно. preinstall и oracle9-tuning из репозитория Alt Linux:
Таблица 2. Варианты построения кластера
Высокая стоимость Удовлетворительная стоимость

 Использование встроенных средств Oracle для организации репликации в ре-  DRBD и Heartbeat (http://www.drbd.org, http://www.linux-ha.org)
Восстановление в реальном

альном времени между несколькими серверами (книга из документации «+» высокая надежность;
(или почти) времени

под названием «Oracle Data Guard Concepts and Administration») низкая стоимость решения
«+» высокая надежность (в идеале, максимально возможная); «–» возможные ошибки при записи данных из-за программного сбоя
гарантия сохранения информации на уровне транзакции; (драйвер диска и т. д.) будут немедленно скопированы на все узлы
практически полная незаметность факта сбоя для пользователя кластера;
«–» высокая стоимость лицензии небольшая задержка при переключении с одного узла кластера
 Использование специализированных аппаратных средств (сервер с высоким на другой
показателем доступности)
«+» высокая надежность;
«–» стоимость решения еще дороже, чем стоимость предыдущего варианта

 TSync (http://tsyncd.sourceforge.net) и аналогичные средства (rsync, unison,


и т. д.)
«+» простота конфигурирования
Восстановление с задержкой

«–» в зависимости от алгоритма может приводить к значительной


загрузке системы;
синхронизация данных происходит при окончании работы с фай-
лом, что может при активной работе с диском привести к значи-
тельной задержке в синхронизации данных;
требует дополнительной настройки для автоматического переклю-
чения с одного сервера на другой (возможно, что и на основе того
же Heartbeat)
 Средства Oracle для организации репликации (книга из документации
под названием «Oracle 9i Advanced Replication»)
«+» работает в рамках лицензии Oracle Standard Edition;
основано на встроенных механизмах Oracle
«–» недостаток, общий для данной группы – отложенная синхронизация

№5, май 2006 37


администрирование
Остановкой Oracle управляет скрипт /$ORACLE_HOME/
bin/dbshut. В этом скрипте на строках под номерами 79 и 84
расположены пары команд:


connect internal
shutdown

Нас интересует команда shutdown. Как вы наверное уже


знаете, эта команда указывает Oracle завершить работу.
В приведенном варианте команды Oracle ждет отключе-
ния всех пользователей и после этого завершает работу.
Но иногда так происходит, что Oracle не завершает работу
даже после отключения всех пользователей, как бы «зави-
Схема построения кластера сает». Для того чтобы переключения между узлами класте-
ра происходили быстрее, советую слегка изменить коман-
 /etc/profile.d/oracle9.sh – установки по умолчанию ду shutdown. Допишем к ней параметр immediate. Данный
для всех пользователей. Нам лишь нужно установить параметр указывает Oracle завершить работу не дожида-
и изменить под свою конфигурацию; ясь отключения пользователей. Более подробно о команде
 /etc/rc.d/init.d/oracle-lsnr – скрипт для запуска/оста- можно прочитать в книге «Oracle9i Database Administrator’s
новки Oracle Listener; Guide» из фирменной документации.
 /etc/rc.d/init.d/oracle-db – скрипт для запуска/останов- Копируем скрипты oracle9.sh, oracle-lsnr и oracle-db
ки Oracle Database. с главного узла на резервный и повторяем процедуру ус-
тановки Oracle для резервного узла без создания базы. Та-
Устанавливаем (если этого не было сделано ранее) ким образом, на обоих узлах Oracle будет работать в оди-
библиотеку libstdc++-libc6.1-1.so.2, она необходима для ус- наковом окружении.
тановки JRE. Устанавливаем gcc версии 2.96 и изменяем На основном узле останавливаем Oracle, если он запу-
ссылку /usr/bin/gcc так, чтобы ссылалась на gcc-2.96 (пос- щен, и копируем базу (т.н. холодная копия) на резервный
ле окончания установки Oracle не забудьте изменить ссыл- узел в то же самое место, где она находится на основном
ку обратно). узле. Файлы базы находятся в каталоге /$ORACLE_BASE/
Заменяем родной JRE (1.3.1.0.0) инсталлятора Oracle oradata/$dbname. Где $ORACLE_BASE задается в oracle9.sh,
на JRE версии 1.3.1_17, взятый с сайта SUN (http://java.sun. а $dbname – имя вашей базы, которое вы указали при ее
com/j2se/1.3/download.html). После установки rpm-пакета создании.
переписываем JRE из директории /usr/java/jre1.3.1_17 в ди- Копируем файл /etc/oratab с основного узла на резер-
ректорию первого диска инсталляции Oracle: /Disk1/stage/ вный и запускаем Oracle на резервном узле для провер-
Components/oracle.swd.jre/1.3.1.0.0/1/DataFiles/Expand/jre/ ки его работы.
linux. Этим мы решаем проблему несовместимости glibc. После проверки работоспособности удаляем все содер-
И не забываем поменять владельца для JRE: жимое точки монтирования (/D01) на резервном узле.

#>chown –R oracle:oracle /Disk1/…/jre/linux Установка DRBD


Для установки DRBD нужно иметь исходные тексты ядра.
Стоит отметить, что таким способом можно решить Исходные тексты должны быть именно от того ядра, для ко-
проблему только с инсталлятором, клиентские GUI-прило- торого будет собираться drbd, иначе при попытке загрузки
жения используют JRE версии 1.1.8. Для него мне не уда- модуля (если его вообще удастся собрать) будут появлять-
лось найти подходящего обновленного JRE ни у SUN, ся ошибки «unresolved symbols». Мне не удалось найти точ-
ни на www.blackdown.org. Но в принципе клиентское GUI но те исходники, из которых было собрано ядро из дистри-
ПО на сервере не особо и нужно. Способ же, описанный бутива, и поэтому я буду использовать самое свежее ядро
в вышеупомянутом руководстве, работает для обоих ти- на момент написания статьи – 2.4.32.
пов JRE. Нужно позаботиться, чтобы новое ядро было собрано
При создании базы вы можете столкнуться с одной ин- в той же конфигурации, что и ядро, использовавшееся до
тересной проблемой. При установке мастер «зависает» него. Спасибо Михаилу Шигорину за подсказку, где най-
перед самым моментом начала создания базы. Мой опыт ти оригинальный конфигурационный файл. В моем случае
подсказывает, что путь к тому месту, где должна обитать он находится в /boot/config-*. Копируем его вместо конфи-
база, слишком длинный (больше некоторого числа симво- га нового ядра :
лов). Сокращение длины пути к базе способно решить эту
проблему. #> cp /boot/config-2.4.26-std-smp-alt6 /usr/src/linux/.config
Вы можете дать этому свое объяснение, но для себя
я сделал вывод, что такова особенность работы мастера Компилируем ядро, устанавливаем. Проверяем рабо-
и/или JRE и просто надо иметь это в виду. тоспособность системы на новом ядре.

38
администрирование
Компилируем DRBD: должны определиться с этим и «сказать» DRBD. Делает-
ся это командой:
#> cd /usr/src/drbd-0.7.17
#> make clean all #> drbdadm -- --do-what-I-say primary all
Устанавливаем:
запущенной на ведущем узле. После чего начинается про-
#> make install цесс синхронизации дисков на обоих узлах кластера и со-
держимое раздела диска основного узла копируется на раз-
Модуль находится в /lib/modules/2.4.32/kernel/drivers/ дел диска ведомого узла. Будьте внимательны и аккуратны,
block/. Подробное описание процесса компиляции и ус- советую проверить перед выполнением вышеприведенной
тановки находится в файле INSTALL из пакета исходни- команды еще раз конфигурационный файл DRBD!
ков DRBD. За процессом синхронизации можно наблюдать на-
Перед настройкой DRBD нужно разбить запасенные брав:
диски на обоих узлах на разделы (раздел может быть
и единственный). При этом те разделы, которые будут ис- #> cat /proc/drbd
пользоваться с DRBD, желательно сделать одного размера.
Для этого используем fdisk или аналог. Например, на обо- Вывод будет примерно следующим:
их узлах разобьем диски на два раздела: основной – 35 Гб, Основной узел:
для использования с DRBD и логический – остальное про-
version: 0.7.17 (api:77/proto:74)
странство диска. SVN Revision: 2093 build by root@altora1, 2006-03-14 18:42:04
Настраиваем DRBD. Настройка производится через 0: cs:Connected st:Primary/Secondary ld:Consistent
ns:636228 nr:2984 dw:639212 dr:337464 al:22 bm:44 lo:0 pe:0 ua:0 ap:0
конфигурационный файл /etc/drbd.conf. Файл должен быть [====>...............] sync’ed: 20% (27200/34000)M
идентичен на обоих узлах кластера. ...
...
Добавим модуль drbd в /etc/modules. 1: cs:Unconfigured
При установке init скрипт для DRBD копируется в /etc/
rc.d/init.d/drbd. Устанавливаем его: Ведомый узел:

#> chkconfig --add drbd version: 0.7.17 (api:77/proto:74)


SVN Revision: 2093 build by root@altora1, 2006-03-14 18:42:04
0: cs:Connected st: Secondary/Primary ld:Inconsistent
ns:636228 nr:2984 dw:639212 dr:337464 al:22 bm:44 lo:0 pe:0 ua:0 ap:0
Этот скрипт инициализирует подсистему DRBD, исполь- [====>...............] sync’ed: 20% (27200/34000)M
зуя параметры из файла /etc/drbd.conf. Результат работы ...
...
скрипта аналогичен команде: 1: cs:Unconfigured

#> drbdadm up all Создаем файловую систему на устройстве DRBD, жела-


тельно чтобы она была журналируемой, это позволит уско-
Теперь перезапускаем наш кластер и в /var/log/messages рить запуск сервисов на резервном узле (иначе перед за-
должны увидеть что-то вроде этого. пуском будет проведена проверка диска):
О том, что модуль загружен:
#> mkreiserfs /dev/drbd0
drbd: initialised. Version: 0.7.17 (api:77/proto:74)
drbd: SVN Revision: 2093 build by root@altora1, 2006-03-14 18:42:04
drbd: registered as block device major 147 Останавливаем Oracle, если он работает. Переносим
Oracle (бинарные файлы и базу) во временную директо-
О том, что запущен сервис DRBD: рию, например, так:

drbd0: Creating state block #> mv /D01/Ora /root/Oracle


drbd0: resync bitmap: bits=8513804 words=266058
drbd0: size = 32 GB (34055216 KB)
drbd0: 34055216 KB now marked out-of-sync by on disk bit-map.
drbd0: Assuming that all blocks are out of sync (aka FullSync)
Монтируем устройство DRBD в /D01:
drbd0: 34055216 KB now marked out-of-sync by on disk bit-map.
drbd0: drbdsetup [2119]: cstate Unconfigured --> StandAlone #> mount -t reiserfs /dev/drbd0 /D01
drbd0: drbdsetup [2122]: cstate StandAlone --> Unconnected
drbd0: drbd0_receiver [2123]: cstate Unconnected --> WFConnection
drbd0: drbd0_receiver [2123]: cstate WFConnection --> WFReportParams Копируем Oracle обратно в /D01. Пробуем запустить
drbd0: Handshake successful: DRBD Network Protocol version 74
drbd0: Connection established. Oracle.
drbd0: I am(S): 0:00000001:00000001:00000001:00000001:00
drbd0: Peer(S): 0:00000001:00000001:00000001:00000001:00
drbd0: drbd0_receiver [2123]: cstate WFReportParams --> Connected Установка Heartbeat
drbd0: I am inconsistent, but there is no sync? BOTH nodes Компиляция и установка Heartbeat довольно проста и про-
inconsistent!
drbd0: Secondary/Unknown --> Secondary/Secondary
ходит в 3 этапа:

Дело в том, что изначально DRBD ничего не знает о том, #> cd /usr/src/heartbeat-2.0.4
#> ./ConfigureMe configure
какой из узлов ведущий, а какой ведомый. И теперь мы

№5, май 2006 39


администрирование
При первой попытке конфигуратор наверняка выдаст зовательском режиме. В этом режиме ни DRBD, ни Heartbeat
сообщения о том, что для установки Heartbeat не хватает не запускаются. Редактируем конфигурационный файл
нескольких пакетов. Перечень необходимых пакетов кон- /etc/drbd.conf и устанавливаем параметр wfc-timeout в зна-
фигуратор выдает в конце работы единым списком. Я сове- чение, отличное от 0, например, 1 (равно 1 секунде). Снова
тую установить все требуемые пакеты и те, что обязатель- перезагружаем узел уже в обычном режиме.
ны (ERROR), и те, что желательны (WARNING). Как повлияет синхронизация данных по сети на ско-
Компилируем и устанавливаем: рость работы с Oracle и как значительно может уменьшить-
ся производительность по сравнению с одиночным серве-
#> ./ConfigureMe make ром? Здесь многое зависит как от скорости используемого
#> ./ConfigureMe install
сетевого соединения, так и от режима работы Oracle. Зна-
Для настройки Heartbeat использует 3 файла, находя- чительное падение цен сделало доступным гигабитные ре-
щиеся в директории /etc/ha.d: шения для бюджетного сектора. Учитывая, что DRBD буфе-
 /etc/ha.d/ha.cf – общая настройка; ризирует данные и то, что скорость работы современных
 /etc/ha.d/haresources – этот файл описывает ресурсы, жестких дисков в реальных условиях пока еще значитель-
которые следует перемещать от узла к узлу; но меньше, чем пропускная способность гигабитной сети,
 /etc/ha.d/authkeys – файл аутентификации. то в данном случае узким местом скорее станет скорость
работы с дисками. В любом случае вы не должны заметить
Выполняем команду: сколько-нибудь значительного проигрыша. Если вы исполь-
зуете сеть 100 Mbit, то здесь тоже не все безнадежно. Ес-
#> chkconfig --add heartbeat ли большая часть запросов к базе (как правило) состав-
ляет запросы на выборку, то работа в основном будет ид-
для установки init-скрипта пакета Heartbeat. ти с диском на главном узле, и здесь скорость соединения
Перезапускаем кластер. В логах должно появиться что- в 100 Mbit практически никак не скажется на производитель-
то вроде этого: ности кластера. Если же основная работа с Oracle состо-
ит в добавлении новых записей, то все зависит от объема
heartbeat: [1630]: info: Configuration validated. Starting heartbeat 2.0.4
heartbeat: [1631]: info: heartbeat: version 2.0.4
новых данных, поступающих на запись. На основе своего
heartbeat: [1631]: info: Heartbeat generation: 7 опыта могу сказать, что Oracle на удаление и потом встав-
...
ResourceManager[2195]: info: Running /etc/init.d/oracle-db start ку 20000 записей тратил около 15 секунды на одиночном
...
oracle-db: Starting Oracle database: succeeded
сервере. В объемах это где-то 5-10 Мб, учитывая индексы
... и служебную информацию. То есть у нас остается даже за-
ResourceManager[2195]: info: Running /etc/init.d/oracle-lsnr start
... пас. Такова специфика работы сервера баз данных, хотя
oracle-lsnr: Starting Oracle Net8 listener: succeeded если бы мы с вами организовывали файл-сервер, то навер-
...
ResourceManager[2195]: info: Running /etc/init.d/httpd start няка заметили бы падение производительности.
...
Mar 17 14:35:24 altora1 httpd: httpd startup succeeded Что повлечет для клиентского ПО переход с одного узла
... кластера на другой? Соединения клиентского ПО с Oracle
heartbeat: [2185]: info: local HA resource acquisition completed (standby).
heartbeat: [1631]: info: Standby resource acquisition done [foreign]. будут потеряны. Пользователям необходимо будет по ис-
heartbeat: [1631]: info: Initial resource acquisition complete (auto_failback)
heartbeat: [1631]: info: remote resource transition completed. течении пары минут заново подключиться к Oracle, жела-
тельно, чтобы используемое вами клиентское ПО имело та-
Поздравляю, ваш кластер работает! кую возможность. Время перехода с одного узла кластера
на другой составляет менее минуты.
Эксплуатация Если вы используете единый источник бесперебойно-
Порядок включения узлов не имеет значения, т.к. узел, за- го питания для обоих узлов кластера, то для увеличения
пустившийся первым, будет ждать запуска другого узла времени работы от батареи в случае отключения электро-
(в файле /etc/drbd.conf параметр wfc-timeout). Что делать, снабжения советую в качестве второго узла кластера ис-
если один из узлов не стартует, мы обсудим ниже. пользовать более «легкую» машину (меньше CPU, жест-
Порядок выключения узлов кластера зависит от при- ких дисков и прочего). И при переходе кластера на работу
ложений, запущенных на этом кластере. Для нашего слу- от батареи оставлять рабочим только резервный узел. Де-
чая мы должны добиться, чтобы информация, храняща- лается это путем настройки демона, следящего за состоя-
яся в базе Oracle, по завершении работы кластера бы- нием батареи, так, чтобы система на главном узле останав-
ла в идентичном состоянии на обоих узлах и была «цель- ливалась, например, после 5 минут (чтобы не реагировать
ной» (consistent). Мне представляется, что единственный на кратковременные перебои) работы от батареи, а на ре-
способ этого добиться – выключать главный узел пер- зервном узле работала бы уже до исчерпания заряда бата-
вым, тогда Oracle успешно завершит работу, и даже ес- реи. Выбор соответствующего демона зависит от марки ис-
ли Heartbeat на резервном узле успеет запустить Oracle, пользуемой вами батареи. Для широко распространенных
то это уже не должно повлечь за собой какое-либо изме- батарей фирмы APC можно использовать демон apcupsd
нение данных в базе, т.к. резервный узел также будет за- (http://www.sourceforge.net/projects/apcupsd). Он позволяет
вершать свою работу. организовать взаимодействие по сети.
Так что же делать, если один из узлов не запускается? Пе- И не забывайте о резервном копировании, ведь клас-
резагружаем рабочий узел и загружаем систему в однополь- тер – это не панацея, а лишь одно из средств.

40
bugtraq

Множественные уязвимости 14. Уязвимость обнаружена в методах valueOf.call()


в Mozilla Firefox и valueOf.apply(). Удаленный пользователь может выпол-
Программа: Mozilla Firefox 1.5.0.1 и более ранние версии, нить произвольный код сценария в браузере жертвы в кон-
Mozilla Suit версии до 1.7.13 . тексте безопасности произвольного сайта.
Опасность: Критическая. 15. Обнаружено несколько ошибок в реализации DHTML.
Описание: 1. Уязвимость существует из-за ошибки, кото- Удаленный пользователь может вызвать повреждение па-
рая позволяет внедрить JavaScript-код в другую, в данный мяти и выполнить произвольный код на целевой системе.
момент загружающуюся страницу. Удаленный пользователь 16. Целочисленное переполнение обнаружено при обра-
может с помощью специально сформированного веб-сай- ботке CSS-свойства letter-spacing. Удаленный пользователь
та выполнить произвольный код сценария в браузере жер- может вызвать переполнение динамической памяти и вы-
твы в контексте безопасности любого сайта. полнить произвольный код на целевой системе.
2. Уязвимость существует из-за ошибки в garbage 17. Уязвимость существует при обработке элементов
collection в JavaScript. Удаленный пользователь может вы- формы для загрузки файлов. Удаленный пользователь мо-
звать повреждение памяти и выполнить произвольный код жет загрузить произвольные файлы с системы пользовате-
на целевой системе. ля на сервер путем динамической подмены элемента текс-
3. Ошибка при обработке входных данных в реализа- товой строки на элемент загрузки файлов.
ции каскадных стилей может позволить злоумышленнику 18. Неизвестная ошибка существует в методе crypto.
дописать некоторые данные в конец массива. generateCRMFRequest(). Удаленный пользователь может
4. Целочисленное переполнение буфера обнаружено выполнить произвольный код на целевой системе.
при обработке слишком длинных регулярных выражений 19. Ошибка при обработке сценариев в XBL-элементах
в JavaScript. Удаленный пользователь может выполнить может позволить злоумышленнику получить chrome при-
произвольный JavaScript-код на системе. вилегии с помощью модуля Print Preview.
5. Обнаружено две ошибки при обработке стилей 20. Уязвимость существует из-за ошибки при провер-
-moz-grid и -moz-grid-group. Удаленный пользователь может ке безопасности в методе js_ValueToFunctionObject(). Уда-
выполнить произвольный код на целевой системе. ленный пользователь может выполнить произвольный код
6. Ошибка обнаружена в методе InstallTrigger.install(). с помощью setTimeout() и ForEach.
Удаленный пользователь может вызвать повреждение па- 21. Уязвимость существует из-за ошибки взаимодейс-
мяти на системе. твия между содержимым XUL-окна и механизмом History.
7. Уязвимость существует из-за неизвестной ошибки, Злоумышленник может обманом заставить пользователя
которая позволяет в некоторых ситуациях подменить икон- взаимодействовать с невидимым пользовательским ин-
ку с изображением безопасного замка и содержимое ад- терфейсом браузера.
ресной строки путем изменения месторасположения pop- URL производителя: www.mozilla.com.
up окна. Для успешной эксплуатации уязвимости опция Решение: Установите последнюю версию с сайта произ-
«Entering secure site» должна быть включена (по умолча- водителя.
нию отключена).
8. Уязвимость позволяет злоумышленнику обманом за-
ставить пользователя скачать злонамеренный файл с по- Выполнение произвольного кода и отказ
мощью меню «Save image as...». в обслуживании в PHP
9. JavaScript функция, созданная вызовом eval() совмес- Программа: PHP 4.4.2, PHP 5.1.2.
тно с методом XBL-привязки, может быть скомпилирована Опасность: Высокая.
с некорректными привилегиями. Удаленный пользователь Описание: Переполнение буфера обнаружено в функциях
может выполнить произвольный код на целевой системе. wordwrap(),array_fill() и substr_compare(). Удаленный поль-
10. Обнаружена ошибка в методе Object.watch(), откры- зователь, контролирующий входные параметры функций,
вающем внутренний clone parent-объект функции. Уда- может вызвать отказ в обслуживании или выполнить про-
ленный пользователь может выполнить произвольный извольный код на целевой системе. Примеры:
JavaScript-код на системе.
<?
11. Обнаружена ошибка в способе зашиты сборки встро- $a = str_repeat ("A",438013);
енных XBL-связок. Удаленный пользователь может выпол- $b = str_repeat ("B",951140);
wordwrap ($a,0,$b,0);
нить произвольный JavaScript-сценарий на системе с повы- ?>
шенными привилегиями. <?array_fill (1,123456789,"Infigo-IS");?>
<?substr_compare ("A","A",12345678);?>
12. Неизвестная ошибка позволяет удаленному поль-
зователю выполнить произвольный код сценария посредс- URL производителя: www.php.net.
твом массива window.controllers. Решение: В настоящее время способов устранения уязви-
13. Уязвимость существует из-за ошибки при обработке мости не существует.
определенной последовательности HTML-тегов. Удаленный
пользователь может вызвать повреждение памяти и выпол- Составил Александр Антипов
нить произвольный код на целевой системе.

№5, май 2006 41


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

Arch Linux: руководство


к быстрому старту

Валентин Синицын
Выбор пакетов для Slackware, на ваш взгляд, скудноват, а Gentoo собирается целую вечность?
Попробуйте Arch Linux – удачное сочетание гибкости и скорости развертывания.

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

В
этой статье мы поговорим об Arch министрированию производятся тем (Arch User Repository) – по-настояще-
Linux (www.archlinux.org) – срав- путем, который предусмотрел автор му неофициальный репозитарий, под-
нительно молодом, первоприн- той или иной программы. Arch Linux держиваемый пользователями Arch
ципном (то есть не базирующемся ни вообще старается выдерживать «ав- Linux. Содержимое AUR, за редким ис-
на какой из ныне существующих) дис- торскую» линию – на пакеты почти ключением – не готовый бинарный па-
трибутиве Linux. Это не совсем об- не накладываются патчи (кроме три- кет, а его сборочный сценарий, так на-
зор – по ходу изложения будут давать- виальных) и т.п. Как утверждает Ви- зываемый PKGBUILD. Arch Linux стре-
ся советы и рекомендации по практи- нет, основные идеи он позаимство- мится предоставить самые послед-
ческой работе с системой. Поскольку вал у CRUX (www.crux.nu) и Slackware нии версии программ, поэтому вы-
Arch Linux, как и большая часть сов- (www.slackware.com) – так что антураж ход бинарных пакетов обычно проис-
ременных ОС, не явно подразумевает, соответствующий. ходит вскоре после релиза исходных
что пользователю не составляет труда Arch Linux имеет оригинальную ор- текстов (все зависит от конкретного
выкачать из Интернета 100-200 Мб об- ганизационную структуру. Поскольку maintainer): так, пакеты с KDE 3.5.2 по-
новлений, мы специально остановим- он в некотором смысле является дети- явились в Extra спустя четыре дня пос-
ся на специфике его использования щем одного человека, здесь есть чет- ле анонса, а в Testing они были еще за
в условиях нашей страны. Сразу же ко очерченный набор «официальных» восемь дней до него.
скажу, что речь не идет о локализа- пакетов (коих в версии 0.7.1 насчиты- Раз уж мы заговорили о бинарных
ции – в этом смысле Arch Linux не от- вается 357 штук) и, как некогда заме- пакетах и сборке, имеет смысл ска-
личается от любого другого дистрибу- тил Алексей Федорчук: «ни малей- зать пару слов и о пакетном менед-
тива, а данная статья не преследует шей тенденции к увеличению их чис- жере. Для управления двоичными па-
цель дублировать существующую до- ла не просматривается». Официаль- кетами в Arch Linux используется ути-
кументацию. ный Arch Linux скормен и строг: поми- лита с забавным названием pacman.
Основателем Arch Linux является мо базовой системы (arch-base) сюда Сами пакеты имеют неудобный суф-
Джудд Винет (Judd Vinet). Первая вер- входит графическая среда и легкие фикс .pkg.tar.gz. Поддерживаются за-
сия дистрибутива под номером 0.1 уви- оконные менеджеры (FVWM, IceWM, висимости (исключительно жесткие –
дела свет 11 марта 2002 года, а теку- WindowMaker), а также средства раз- это вам не Debian) и имеются средс-
щая версия имеет номер 0.7.1 и дати- работки, сервера и основные графи- тва их автоматического разрешения –
рована 5 января 2006 года. ческие приложения: AbiWord, Gimp, при помощи того же pacman. Если вы
Arch Linux является i686-оптимизи- Mozilla Firefox и Thunderbird. Ни KDE, привыкли собирать программы из ис-
рованным дистрибутивом. Что пони- ни Gnome, ни OpenOffice.org в этом ходных кодов – нет проблем: для этих
мается под этими словами? Это зна- списке нет, но это не значит, что их нет целей предназначена благозвучная
чит, все пакеты собираются с клю- вообще: у «официального» Arch Linux уху автолюбителя система ABS (Arch
чом «-march=i686», то есть использу- существуют «полуофициальные» са- Build System) – аналог портов BSD, поз-
ют набор инструкций Pentium II и вы- телиты, в первую очередь – репози- воляющая быстро и эффективно соб-
ше. Как следствие, этот процессор яв- тарий Extra. Это – весьма объемная рать готовый пакет из авторских исход-
ляется «минимальным системным тре- коллекция пакетов, не поддержива- ных текстов. Можно сказать, что Arch
бованием» к оборудованию. Как зна- емая г-ном Винетом лично. Не сто- Linux – это бинарный дистрибутив, по-
ют пользователи Gentoo, пересбор- ит думать, что Extra – нечто вроде ощряющий сборку из исходных текс-
ка Linux под свою архитектуру позво- linuxpacages.net – это просто репозита- тов: этакий Gentoo со stage3, раздутым
ляет достичь определенного (порой – рий, поддерживаемый другими людь- до размеров дерева Portage.
весьма незначительного) прироста ми, что и придает ему «полуофициаль- Arch Linux использует rc-скрипты
производительности, поэтому можно ный», но отнюдь не «неофициальный» в стиле BSD и охотно перенимает све-
предположить, что на новых компью- статус. Между репозитариями сущес- жие решения. Так, Arch Linux 0.7.1 был
терах Arch Linux будет работать быс- твует тесное взаимодействие, и мно- одним из первых (но не первым) дис-
трее, чем, например, Slackware (оп- гие рассматривают Extra как неотъем- трибутивом, отказавшимся от Hotplug
тимизация i486) или SUSE/Mandriva лемую часть Arch Linux. в пользу Udev, что весьма ускорило
(i586). На самом деле на скорость Перечень репозиатриев Arch Linux загрузку. В него входит собственная
работы влияет множество парамет- не исчерпывается Extra и Current система распознавания оборудования
ров, и оптимизация здесь – далеко (это тот самый «официальный» Arch (HWD) и поддержка сетевых профилей
не главное. Существуют также порты Linux, из которого в определенные мо- на уровне стартовых сценариев.
Arch Linux на x86-64 и i586, однако мне менты времени делают ISO-образы). Все это хорошо, спросит внима-
не приходилось работать с ними поэ- Упоминания заслуживает Testing, в ко- тельный читатель, но где же взять
тому в дальнейшем мы будем говорить тором появляются новые, еще не «об- Arch Linux? Канонический ответ сво-
только об основной ветви. катанные» версии программ (так, на- дится к следующему: скачать с сай-
Arch Linux – дистрибутив для опыт- пример, в состав Arch Linux 0.7.1 входит та проекта ISO-образ arch-0.7.1.iso
ного пользователя. Вы не найдете X11R6.8.2, но на момент выхода дист- или arch-0.7.1-base.iso (только базо-
в нем графических мастеров-конфи- рибутива в свет X.Org 7.0 уже был до- вая система), а затем догрузить все
гураторов вроде YaST или Mandriva ступен в Testing, а в Current он появил- необходимые пакеты (KDE/Gnome,
Control Center: все операции по ад- ся лишь в середине февраля) и AUR OpenOffice.org и т. д.) из Extra. К сожа-

№5, май 2006 43


администрирование
му, что на вашем компьютере появится вполне полноцен-
ная X Window System не самой свежей версии (опять же см.
выше). В общем, даже если у вас на руках полноценный
DVD со всеми пакетами, будьте осторожны и не пренебре-
гайте «советами бывалых».
В остальном инсталлятор Arch Linux мало чем отлича-
ется от того же Slackware. Меню организовано чуть-чуть по-
другому, но человека, претендующего на работу в дистри-
бутиве для опытных пользователей, это вряд ли смутит.

Первая загрузка
После перезагрузки системы (которая, кстати, произойдет
весьма быстро) вашему взору будет представлена чистая
текстовая консоль. Впрочем, если вы все же не послуша-
лись старших товарищей и попросили инсталлятор раз-
вернуть что-то помимо базовой системы, у вас вполне мо-
Рисунок 1. Рабочий стол Arch Linux – ничего необычного.
Все самое интересное – за кулисами жет оказаться и X с простеньким оконным менеджером,
но речь сейчас не о том. Независимо от того, ограничи-
лись ли вы пресловутым arch-base или же выбрали все па-
кеты без разбора, наверняка вы захотите установить до-
полнител ные программы из репозитария Extra. Допустим
также, что у вас, как и у подавляющего большинства насе-
ления России, нет быстрого (и дешевого) канала в Интер-
нет, поэтому вы где-то раздобыли текущий срез Arch Linux.
Что дальше? Устанавливать пакеты, разрешая зависимос-
ти вручную или не учитывая их вообще, – не выход. Нуж-
но прописать путь к вашему локальному репозитарию Arch
Linux (который, кстати, может располагаться в локальной
же сети – подумайте об этом, если планируете установить
Arch Linux на три и более компьютеров).
К сожалению (или к счастью), специального источника
Рисунок 2. Сине-бело-черная гамма – визитная карточка
Arch Linux. Сайт проекта выдержан в том же стиле «cdrom», как в apt, в pacman не предусмотрено – програм-
ме совершенно не важно, где находится зеркало, заданное
лению, для большинства российских пользователей это не- тем или иным URL (и это правильно, иначе URL не был бы
приемлемо, но выход все же есть. Начиная с января этого Универсальным локатором ресурсов). Таким образом, что-
года ежеквартальные срезы репозитариев Arch Linux мож- бы научить pacman обновляться с CD/DVD-ROM, достаточно
но заказать по почте (http://www.linuxcenter.ru/?good=1332). прописать путь к локальному репозитарию, используя про-
Будем считать, что вам удалось раздобыть Arch Linux тем токол file://. Зеркала просматриваются в порядке их объяв-
или иным способом. Что дальше? Конечно же, установка! ления в соответствующих секциях файла /etc/pacman.conf,
Весь процесс подробно описан на самом диске, в файле поэтому, добавив нужную строчку в самое начало, вы на-
archdoc.txt (потрудившись, его можно найти и на ftp.archlinux. всегда отучите pacman «лазать по Интернету». Впрочем, со-
org). Мы же сосредоточимся на некоторых тонкостях, зна- ветую вам приберечь «жесткие меры» на крайний случай:
ние которых позволит сделать развертывание системы до- вполне может статься, что вы захотите обновить какую-ни-
статочно быстрым и безболезненным. будь небольшую программу именно из репозитария current,
а не с локального диска. Исходя из этого, секция current
Установка файла /etc/pacman.conf может иметь следующий вид:
Инсталлятор Arch Linux выдержан в духе Slackware: те же
сценарии на языке оболочки плюс утилита dialog. Созда- [current]
# Список «настоящих» интернет-серверов
тели дистрибутива настоятельно рекомендуют установить Include=/etc/pacman.d/current
только базовую систему, а оставшиеся пакеты добрать Server= Ошибка! Недопустимый объект гиперссылки.
вручную после перезагрузки системы и, как выясняется, не
зря. Просматривая плоский список из 350 с лишним паке- В результате при отсутствии подключения на консоль
тов, не мудрено и утомиться, а выбор двух несовместимых будет выдаваться множество сообщений о невозможнос-
вариантов (например, hotplug и udev – см. выше) приведет ти соединиться с ftp.foo.bar, а затем pacman установит нуж-
к тому, что программа откажется продолжать свою работу ный пакет с DVD-ROM.
и предложит начать все сначала. Зависимости тоже раз- С репозитариями Extra и Testing можно поступить так-
решаются автоматически – никакой возможности поучас- же, а можно – еще проще – просто добавить:
твовать в этом процессе вам не предоставляется, а пото-
Server=file://<путь к локальному репозитарию>
му случайный выбор, скажем Mozilla Firefox приведет к то- 
44
администрирование

№5, май 2006 45


администрирование
ге /var/abs, отвечающем вашему при-
ложению.
Если вы – счастливый обладатель
широкого и недорогого интернет-ка-
нала, эти манипуляции будут для вас
излишними – makepkg сам загружает
из Интернета нужные исходные тек-
сты.
Теперь можно собрать пакет:

makepkg

Или же сразу и собрать, и устано-


вить:

makepkg -i

Рисунок 3. Не нашли нужную программу в основном дистрибутиве. Пришло время Если вы собрали что-то уникаль-
обратиться к помощи сообщества – ArchLinux User-community Repository
ное и считаете, что ваш PKGBUILD мо-
в начало соответствующей секции. «разумном» формате (.tar.gz, .tar.bz2, жет быть полезен другим пользовате-
Для пущей уверенности можно заком- zip) и PKGBUILD.proto, если речь идет лям Arch Linux, подумайте о его публи-
ментировать все остальные сервера. о новом пакете, после чего PKGBUILD. кации в AUR.
Альтернативный подход к разверты- proto переименовывается в PKGBUILD Все! Подготовительные этапы
ванию локального репозитария изло- и правится в соответствии с вашими пройдены, и теперь вы можете осна-
жен в файле archdoc.txt. требованиями. В сложных случаях мо- щать свою систему всеми необходи-
Первую половину пакетного ме- жет потребоваться использовать сце- мыми приложениями.
неджмента мы, таким образом, на- нарий install, который легко создать Используйте автоматическое раз-
строили. Осталось вторая – ABS. на базе install.proto. Написание сце- решение зависимостей (pacman -S) –
К счастью, она требует гораздо мень- нариев PKGBUILD находится за рам- это сделает вашу жизнь проще, а бло-
шего внимания. В первом приближе- ками данной статьи. ки «конструктора», с которым прихо-
нии (особенно если вы не собираетесь О том, как писать сценарии дится работать, крупнее.
пересобирать пакеты вручную) можно PKGBUILD, можно узнать из докумен-
вообще забыть о ее существовании. тации, поэтому ограничимся лишь об- Заключение
Но я бы рекомендовал все же синхро- щими замечаниями: Теперь вы представляете себе, что та-
низировать дерево ABS, так сказать,  В первую очередь необходимо ис- кое Arch Linux. Устанавливать ли эту
на будущее. Эта задача выполняет- править значение переменных систему на свой компьютер – решать
ся командой abs, которая в свою оче- pkgname (имя пакета) и pkgver (вер- только вам. Думается, что Arch Linux
редь использует cvsup, поэтому бо- сия). Эти переменные используют- хорошо подойдет «продвинутым поль-
лее-менее заметный трафик (поряд- ся для заполнения массива source, зователям» Linux, которые произво-
ка 10-20 Мб без учета сжатия) будет содержащего имена архивов с ис- дят большую часть настроек из кон-
сгенерирован только в первый раз. ходными текстами. Если формат фигурационных файлов и не слиш-
Вы же получите в свое распоряжение нужного вам архива отличается ком связаны временными рамками,
полностью готовый к использованию от .tar.gz, нужно внести соответс- то есть могут позволить себе «дово-
каталог /var/abs, а также два файла: твующие изменения. дить» систему в свободное от рабо-
PKGBUILD.proto и install.proto, которые  Естественно, необходимо описать ты время.
можно использовать для компиляции саму процедуру сборки – подпро- Если же, напротив, речь идет о
своих собственных пакетов. грамму build(). В большинстве слу- предприятии, где на первый план вы-
Эта операция (как, впрочем, и чаев требуется лишь изменить па- ходит скорость развертывания, про-
пересборка уже имеющихся в сис- раметры configure. стота управления, «дуракоупорность»
теме пакетов) происходит следую-  Необходимо сгенерировать md5- и уж тем более сертификация сто-
щим образом. Вы переходите в под- суммы для каждого архива – мас- ронних производителей, Arch Linux –
каталог /var/abs, отвечающий нужно- сив md5sums. К счастью, эта зада- не самый лучший выбор. В общем, ес-
му вам приложению. Если речь идет ча автоматизирована и выполняет- ли вы ищете простой настольный/сер-
о компиляции нового пакета «с ну- ся стандартной командой: верный дистрибутив с большим ко-
ля», каталог для него следует создать личеством свежих пакетов, не отяго-
в /var/abs/local. Затем в этом ката- makepkg -g >>PKGBUILD щенный средствами автоматической
логе последовательно размещают- настройки и связанным с ними «жир-
ся: добытый где-либо архив с исход- При этом подразумевается, что вы ком», возможно, Arch Linux – это то,
ными текстами программы в любом находитесь все в том же подкатало- что вам нужно.

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

№5, май 2006 47


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

Прихоти судьбы
Биография IT-просветителя

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


математики – Алексей Сальников, ныне директор крупнейшего в России IT-портала
«ЦИТ Форум» (http://www.citforum.ru), вступил с судьбой в переговоры. Мол, ты дай мне другой
вариант самореализации, а я обещаю не ныть на крутых поворотах. Договор вступил в силу.

Ч
то такое судьба? Нечто навеч- ществования порой похожи на кадры ги. Фантастика да и только, особенно
но впечатанное в таинственные из детектива с захватывающим сю- для ребят, к технике охочих. Юные ма-
скрижали и определяющее каж- жетом. тематики не дыша смотрят на машину,
дый наш шаг? Или туманное будущее, Первый раз компьютер, тогда это на преподавателя, который этим чудом
неизвестное никому? Хочется верить, называлось «электронно-вычисли- управляет. Учитель, между прочим, не
что ты сам себе хозяин, только от те- тельная машина», Алеша Сальников представитель точных наук, а отстав-
бя зависит выбор профессии, семьи увидел в подростковом возрасте, ког- ной полковник. Это его собственная
и прописки… да учился в физико-математической ЭВМ, списанная из какого-то штаба.
школе-интернате №18 при МГУ им. Ло- Прибавьте к обрисованному такую де-
Как в кино моносова. Представьте себе картину: таль: подростки все поголовно в белых
Знаки судьбы Алексей Михайлович 15-летние мальчишки входят в комна- рубашках, при галстуках, да не на ре-
Сальников встречает регулярно. И по- ту, где шумят какие-то механизмы, ми- зиночках, а настоящих, умело завя-
жаловаться на скучную жизнь никак гают лампочки, как на космическом ко- занных. У преподавателя НВП был же-
не может. Наоборот, перипетии его су- рабле, телетайп выводит рулоны бума- лезный принцип. Он считал, что муж-

48
человек номера
чина должен быть всегда хорошо вы- грузилась какая-то страничка. Однако с супругой Еленой решили открыть
брит и прилично одет. Сам он ходил на представить, как это выглядит на нор- собственное дело. Родилась совер-
занятия в безукоризненно отутюжен- мальной скорости, было несложно… шенно неожиданно, как побочный про-
ном костюме, сверкающей белизной Я всегда в нашей фирме занимался дукт другой авантюрной идеи.
рубашке и галстуке. На занятиях по вопросами продвижения наших курсов. Сначала семейство рассуждало
начальной военной подготовке учени- Это была моя главная обязанность. так: что могут делать и продавать про-
ки школы-интерната не просто любо- Когда я увидел, как работает Интер- граммисты? Естественно, программы.
вались ЭВМ, но и учились ею пользо- нет, сразу сказал: «Это место для рек- Какие? Для банков, которые первые
ваться: делали лабораторные работы, ламы». А в 1997 году мне совершен- в стране разбогатели и первыми захо-
писали программки. но случайно попалась книга англий- тели автоматизироваться. Это же золо-
Следующий кадр. Наш герой уже ского автора об интернет-маркетин- тая жила – полторы тысячи банков, ко-
учится в университете, успел прой- ге. И в нашем офисе как раз появил- торым нужна специальная компьютер-
ти армию и даже поучительствовать ся плохонький, медленный, но все же ная программа под названием «Опер-
в глухом селе на Смоленщине. На 4-м выделенный канал. Бизнес есть биз- день». Стали собирать информацию –
курсе практику Алексей Сальников нес. Я прочитал книжку, мне стало ин- как функционирует банк, какой долж-
проходил на ЗИЛе, в суперсовремен- тересно. Следующий шаг – я объявляю на быть программа. Читали специаль-
ном вычислительном центре, создан- курсы интернет-маркетинга. 60 взрос- ную литературу, свели дружбу с бан-
ном автозаводом и Академией на- лых умных людей приезжают слушать киром, который согласился предоста-
ук. «Там было красиво, – вспомина- мои лекции. Каждый платит 300 дол- вить свой маленький банк в качестве
ет он мечтательно. – В стране таких ларов за то, чтобы меня три дня слу- полигона для отработки этой програм-
вычислительных центров практичес- шать. Несколько лет я такой курс чи- мы, дать деньги на ее разработку. Увы,
ки не было, разве что в закрытых уч- тал. Мне было интересно изучать эту однажды банкир испарился. И совето-
реждениях, в «ящиках». Сотрудники тему. В конце 90-х годов я был главным ваться стало не с кем.
центра с нами говорили уважитель- специалистом в России по интернет- Что делать? Ходить на поклон
но. Видно было, что это правильные маркетингу. Потом я стал проводить в другие банки? Нет, сказал себе Саль-
люди, с ними было приятно общаться. конференции по интернет-маркетингу. ников, надо… сделать так, чтобы бан-
И возникало желание там трудиться. Толпы народа собирались. Хотя на пер- киры сами пришли к нам. Все гениаль-
Я два года параллельно с обучением вых конференциях было очень немного ное – просто. «Взяли листок бумаги, на-
работал в центре. А после, как закон- людей, способных сказать что-то внят- писали: семинар «Автоматизация бан-
чил мехмат МГУ, туда же и распреде- ное на эту тему». ковской деятельности», 7-11 сентября
лился. В конце 80-х там были сдела- Тогда же организаторы Учебно- 1992 года. Место проведения: Москва,
ны знаменитые компьютеры семейс- го центра решили, что хорошо бы Университет. Семинар платный. Ука-
тва БЕСТА. Был огромный коллектив. на практике воплотить теоретические зали номер телефона в комнатке, ко-
Часть людей занимались «железками», положения, о которых говорилось на их торую арендовали в университете. Ку-
часть – программами. Если бы эту ли- курсах, и создали ЦИТ Форум. Прос- пили базу данных с адресами банков,
нию продолжать дальше, все было бы то для того, чтобы рекламировать свои тогда она продавалась в редакции га-
хорошо. Но линия, к сожалению, не по- курсы. Как резюмирует сегодня Алек- зеты «Коммерсантъ». Написали про-
лучила развития». сей: «ЦИТ Форум возник из небаналь- грамму семинара, напечатали, разло-
Новый скачок во времени. Середи- ного подхода к рекламе своей продук- жили в конверты и отправили. Когда
на 90-х. Алексей Сальников – руково- ции. Потом продукция исчезла, а инс- письма дошли, наш телефон просто
дитель первого в России коммерческо- трумент остался». Сегодня портал разорвался. Звонили со всей страны
го учебного центра, чрезвычайно попу- CITForum.ru – не имеющая аналогов из банков, спрашивали, как записать-
лярного среди людей, внедряющих ин- техническая библиотека бесплатных ся, куда деньги переводить за участие.
формационные технологии в финансо- ресурсов по информационным техно- Почему получился такой эффект, по-
вую, промышленную и телекоммуника- логиям на русском языке. нятно. Банкам надо было автоматизи-
ционную сферы. На учебный центр ра- Но начало, начало – в этих трех роваться, но никто не знал, как это де-
ботают специалисты высокого уровня. кадрах истории жизни одного челове- лать. Мы были первые, кто предложил
Среди них знаток Интернета, сотруд- ка. Алексей Сальников может со мной поучаствовать в семинаре на эту тему.
ник Курчатовского института. Как-то не согласиться, но я уверена, что эти Ну вот записали мы желающих учас-
он пригласил Алексея и его соратни- три эпизода – знаковые, и если бы я твовать, теперь надо семинар прово-
ков посмотреть, что такое Сеть. Стоп- снимала фильм об Алексее Михай- дить. О чем говорить? Стали звонить
кадр весьма выразительный, почти ис- ловиче, они были бы центральными в IBM, Hewlett-Packard, другие круп-
торический: «Мы приехали, а как раз в картине. ные компании, отправляли им по фак-
случилось несчастье. Тогда Интернет су список банков и говорили: «Эти гос-
в Россию попадал через Финляндию. Огонь, вода пода желают вас выслушать». Они со-
И, как на грех, где-то под Питером эк- и медные трубы гласились выступить».
скаваторщик повредил провод. Поэто- Алексей сам себя называет генера- Алексей Сальников смеется, ког-
му все очень медленно происходило. тором идей. Самая гениальная из них да вспоминает первый семинар. За-
Мы смотрели на экран, где не спеша родилась в 1992 году, когда Алексей явок тогда набралась добрая сотня.

№5, май 2006 49


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

Пригласили только 16 банков, которые чая группа из их представителей, вы- Потом приезжали «студенты» и полу-
оказались в списке первыми, но в ау- рабатывающая стандарты обмена ин- чали на руки две книги. Одна – крат-
диторию, арендованную в Московском формацией, заседала в ЦИТе. А само- кое изложение лекций, другая – сбор-
университете, набилось человек трид- го Алексея Михайловича приглашали ник слайдов, которые преподаватели
цать, только успевали стулья подно- занять пост в Ассоциации производи- показывали в ходе учебы. Слушатели
сить. Финансисты были непреклонны: телей банковского софта… ничего не записывали в тетради, учи-
мы приехали и мы будем участвовать Второе направление – учебные теля ничего не писали на доске. На это
в семинаре, возьмите деньги и дай- курсы по информационным техноло- не было времени. Предельная автома-
те нам возможность послушать! Се- гиям (citmgu.ru), которые читаются тизация организации учебы, опера-
минар длился целую неделю. Банки- и по сей день, но, естественно, в эпо- тивность подачи информации принес-
ры остались им довольны. А органи- ху обилия информации об IT и Интер- ли ЦИТу оглушительный успех. Неко-
заторы Центра информационных тех- нете, уже далеко не столь популярны. торые сотрудники отделов автомати-
нологий… проснулись знаменитыми, А в 1993-1994 годах, вплоть до 1998-го, зации банков и крупных предприятий
как пишут в биографиях знаменитых на курсы в Москву ехали так же мас- приезжали просто купить книги. Це-
актеров. Их офис на военной кафед- сово… как раньше в московские мага- нообразование было простое: доллар
ре факультета ВМК МГУ на ближай- зины за колбасой, простите за такое за страницу… И покупали с большим
шую пятилетку стал самым популяр- приземленное сравнение. Потому что удовольствием.
ным местом для банкиров, разработчи- здесь можно было услышать людей, В эйфории успеха Алексей Сальни-
ков банковского софта, а позже – пред- которые знали все про IT, потому что ков и его коллеги не заметили, как по-
ставителей крупных промышленных только здесь можно было купить книги ток слушателей резко уменьшился,
предприятий, которые интересовались о сетях, операционных системах, базах опомнились только когда он совсем
информационными технологиями и их данных и прочем. Дело было организо- сошел на нет. Наступили другие вре-
применением в прикладных областях. вано умно и оперативно. Были собраны мена. Однако судьба, благосклонная
Идея писать банковские программы лучшие специалисты, которые в рекор- к Алексею, приготовила ему «задел»
тихо умерла. Зачем, если можно за- дно короткие сроки писали методички для создания нового дела. Тот самый
рабатывать на семинарах? по своим предметам. Например, трех- сайт в Интернете, который когда-то вы-
Семинары и конференции – это пер- сотстраничная книжка создавалась за весили для рекламы курсов. IT-портал
вое направление работы Центра ин- три месяца! Сдавали свои учебники стал новым делом Алексея. И тоже, ес-
формационных технологий. С 1992 спецы по частям. Так что когда из-под тественно, уникальным, ведь делать
года они проводились регулярно, те- пера автора выходили последние стро- что-то как все – неинтересно!
мы выбирались самые горячие, до- ки, первые главы уже были не только
кладчики приглашались самые ак- отпечатаны, прочитаны корректора- Новый Макаренко
туальные. Более того, в какой-то мо- ми, оформлены, проиллюстрированы Сегодня Алексей Сальников знает
мент офис ЦИТа стал штабом обще- нужными схемами, картинками и таб- о своей новой сфере деятельности
ния для конкурирующих фирм, кото- личками, но даже размножены в соот- все. Как работать с рекламодателями,
рые автоматизировали банки. Рабо- ветствии с количеством слушателей. как строить работу портала. Хотя при-

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

знается, что никогда не думал зани- питателем, то есть наблюдать за ре- мент увенчался успехом. Благодарный
маться изданием СМИ и получать до- бятами с первого по восьмой класс, мальчишка потом своего учителя да-
ходы от рекламы! А мне такой поворот которые приезжали в этот интернат же на тракторе катал. Потом Алексей
судьбы в жизни нашего героя совсем из мелких окрестных сел на неделю. восстановился в университете, закон-
не кажется неожиданным. Ведь глав- У Сальникова самые приятные воспо- чил его, далекая смоленская деревня
ная задача IT-портала ЦИТ Форум – да- минания о том периоде жизни: «На- ушла в прошлое…
вать людям знания. Библиотекой пор- до было прийти после уроков в шко- Но с тех пор, как мне кажется, ни-
тала ежедневно пользуются тысячи лу, забрать детей, сводить на обед, чем другим Алексей Сальников в жиз-
IT-специалистов и менеджеров, пре- потом поиграть с ними, потом они са- ни не занимается. Учит и учит негра-
подавателей и студентов вузов. Поч- дились делать уроки, я их консульти- мотных «мальчишек» тому, без чего
ти везде информационные техноло- ровал. Времени свободного у меня сегодня не обойтись, как раньше не-
гии преподают с помощью ЦИТ-Фору- был вагон. Развлечений не было ни- льзя было обойтись без элементар-
ма. Преподаватели готовятся к лек- каких. Была библиотека. Я брал там ной грамоты.
циям по скачанным материалам, да- книги, например, сочинения Макарен- Сам Алексей рассуждает скеп-
ют студентам не домашние задания, ко, шел домой – а я арендовал в этой тически: «Я знаю людей, моих одно-
а ссылки на ресурсы ЦИТ Форума. Так деревне избу с огромной русской печ- классников, которые добились гораздо
что ничего не изменилось кардиналь- кой в пол-комнаты – ложился на печ- большего, возглавляют крупнейшие IT-
но в деятельности Алексея Сальнико- ку и читал. Детишки были счастливы, компании. По масштабам бизнеса они
ва. Он по-прежнему учит народ. ведь до этого их воспитывали скуч- заведуют крейсерами. А у меня – ло-
А ведь будучи студентом, Алексей ные пожилые бабушки. А я с ними иг- дочка…» Но именно эта лодочка выво-
мог легко угадать, что судьба ему при- рал в футбол…». дит корабли в бурное море IT-техноло-
готовила именно эту миссию – просве- Но даже не в этом был знак судьбы- гий. Без нее, возможно, ни один крей-
тителя. Звучит патетически, но истина благодетельницы, а в том, что, будучи сер не сдвинулся бы с места. Ну, или
всегда немного банальна. Исключен- воспитателем, Алексей научил читать сделал бы это значительно позже.
ный из университета на третьем кур- одного деревенского мальчика. Па- Неплохую альтернативу предло-
се, недоучившийся математик подался рень учился в пятом классе и для крес- жила Алексею Сальникову судьба –
в учителя. Приехал в Смоленскую об- тьянской жизни имел все необходи- быть на 100% востребованным. Ни он,
ласть, явился в облоно, оттуда его от- мые навыки – классно водил трактор ни кто другой не знает, каким конкрет-
правили в дальнюю школу, где не было и профессионально курил «Беломор». ным делом будет заниматься сегод-
учителя математики. Доехал до шко- А вот читать в начальной школе ребен- няшний директор ЦИТ Форума через
лы и… попал в тупик: учителя иска- ка не научили – просто с учительни- полгода. Но я убеждена, что работать
ли летом, а он приехал в январе. Ко- цей они не встречались никогда, доку- он будет вновь под грифом «Впервые
нечно, вакансию давно уже худо-бед- мент выдали, чтобы не портить цифры в России» и обязательно – просвещать.
но закрыли… Ехать назад не хотелось, успеваемости по району. Занимались Попутного ветра в парусах!
и Алексей согласился на предложения Алексей Михайлович и неграмотный
директора школы-интерната стать вос- пятиклассник после отбоя. Экспери- Оксана Родионова

№5, май 2006 51


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

Настраиваем эффективную
систему сетевой защиты Zorp

Сергей Яремчук
ModSecurity – Open Source firewall седьмого уровня – позволяет защититься от угроз, типичных
для веб-сервера. Но в обычной сети можно встретить и другие сервисы, также нуждающиеся
в защите.

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

Ф
ильтры пакетов вроде ipchains
во время работы использу-
ют самые простые критерии,
и д ля фильтрации основываются
на информации, содержащейся в за-
головках IP-пакетов: IP-адреса источ-
ника и назначения, протокол и номера
портов источника и назначения, взя-
тые с TCP/UDP-протоколов следую-
щего уровня.
По сегодняшним меркам такой
подход может обеспечить только са-
мую минимальную защиту. Система
Рисунок 1. Принцип работы Zorp
защиты, использующая этот принцип,
не владеет более подробной инфор- прос большой длины или попробо- ты не будут дублироваться, что повы-
мацией о соединении. И приняв пакет, вать реализовать сross-site scripting сит надежность за счет суммарного
не может определить – устанавлива- атаку. Без посредника здесь точно уменьшения их количества, а с дру-
ется новое соединение либо пришед- не обойтись. гой стороны, приведет к меньшим за-
ший пакет является частью уже уста- держкам, так как весь анализ будет
новленного соединения, а может, это Подход Zorp произведен только один раз и в од-
вообще случайный или враждебный Создатель Syslog-NG венгр Балазс ном месте.
пакет. Так работал ipchains, исполь- Шайдлер (Balazs Scheidler) разра- Взаимодействие сервера и клиента
зуемый совместно с Linux-ядром се- ботал еще одно полезное приложе- в случае использования Zorp показа-
рии 2.2. ние – Zorp. На заглавной странице но на рис. 1. Клиент, желая установить
В Netfilter/iptables ядра 2.4/2.6 эта сайта проекта [2] он дословно име- соединение, посылает TCP SYN-пакет,
проблема решается за счет контро- нуется как Modular Application Level который поступает на маршрутизатор
ля состояния (stateful) флагов и по- Gateway (хотя в некоторых документах с установленным iptables (ipchais), ис-
рядковых номеров ТСР. Такой фильтр его название несколько другое – new пользующим Zorp. Полученный пакет
работает аналогично предыдущему generation proxy firewall). проверяется на соответствие правил
и дополнительно просматривает фла- Но как бы ни звучало его название, iptables. Если он должен быть обрабо-
ги TCP и UDP-пакетов, а поэтому мо- назначение остается неизменным – тан Zorp, то в записи следует указать
жет определить, является ли этот па- защита приложений от направленных цель TPROXY (iptables) или REDIRECT
кет попыткой установления нового со- атак. Принцип действия похож на рас- (ipchains). В качестве одного из пара-
единения. Если да, то в таблице состо- сматриваемый ранее ModSecurity [1]. метров указывается порт, где Zorp бу-
яний делается новая запись и действие Zorp представляет собой прозрачный дет ждать подключения. Zorp получа-
разрешается, если нет, то проверяет- (transparent) прокси, который высту- ет пакет, проверяет его на соответс-
ся принадлежность существующим со- пает посредником при работе клиента твие со своими правилами и запуска-
единениям и при положительном ре- и сервера. В этом случае для клиента, ет соответствующий прокси, который
зультате пакет пропускается. Кроме который хочет установить новое соеди- инициализирует соединение с серве-
явного отсеивания приходящего мусо- нение, Zorp выступает как сервер, а ре- ром и дальше действует уже от име-
ра, такие фильтры упрощают написа- альный сервер видит Zorp как клиен- ни клиента, а в процессе работы про-
ние правил фильтрации. Например, ес- та. Находясь посередине, такой прок- веряет проходящий поток данных. Ес-
ли ранее требовалось явно разрешить си знает особенности своего протоко- тественно, и остальные цепочки так-
в правиле оба направления, т.е. от кли- ла и на основании имеющейся инфор- же должны пропускать обработанные
ента к серверу и от сервера к клиен- мации и настроек может принять реше- Zorp пакеты.
ту, то теперь достаточно просто раз- ние о необходимости продолжения те- Теперь аномалии более низкого
решить соединение с сервером, за- кущего соединения. уровня будут отсеиваться сразу. Та-
бота же о доставке информации кли- Но в отличие от ModSecurity, ко- кой принцип работы позволяет делать
енту полностью ляжет на плечи филь- торый является отдельным приложе- то, что недоступно многим IDS, а имен-
тра пакетов. нием и в идеальных условиях требу- но проверять защищенные HTTPS,
Кроме того, при использовании ет установки на отдельный компью- POP3S, IMAPS или SSH-соединения.
stateful-фильтров можно смело запре- тер, Zorp фактически представляет То есть когда пользователь подключа-
щать все соединения на номера пор- собой расширение к Netfilter/iptables. ется к веб-серверу, последний отсыла-
тов выше 1024. Но опять же при всех Таким образом, вся обработка проис- ет ему сертификат, прокси может пе-
положительных качествах контроль ходит на одном-единственном ком- рехватить этот сертификат и отправить
состояний не сможет защитить сервер пьютере, который находится на входе пользователю свой. Теперь, находясь
от атак, направленных на конкретное сети, что освобождает её от пакетов, посередине, можно беспрепятствен-
приложение. Например, никто не по- которые все равно будут отброшены. но контролировать любой трафик. Та-
мешает злоумышленнику послать за- Кроме того, функции устройств защи- ким же образом можно автоматически

№5, май 2006 53


безопасность
проверять сертификаты и разрешать доступ только к опре- в файл /etc/apt/sources.list занести (для версии 3.0 woody)
деленным ресурсам. следующие строки:
Недостатков у такого способа, как минимум, два: по-
вышенное требование к производительности систе- deb http://apt.balabit.hu/zorp-gpl-os/ ↵
zorp-os-3.0/3.0 security zorp-os common-gpl zorp-gpl
мы по сравнению с использованием обычного пакетно- deb http://apt.balabit.hu/zorp-gpl-os/ ↵
го фильтра и большая сложность в настройке по сравне- zorp-os-3.0/3.0 zorp-os common-gpl zorp-gpl
нию со специализированными прокси вроде ModSecurity
или DansGuardian. И дать команду на обновление и установку:

Версии Zorp # apt-get -u upgrade


В настоящее время доступны три версии Zorp: Zorp Pro, Zorp
GPL и Zorp Unofficial. В случае использования других дистрибутивов придется
Zorp Unofficial ранее играл роль тестовой бета-версии, немного потрудиться, пересобрав все компоненты с исход-
но последние два года фактически не развивается, его мож- ных текстов, найти готовые прекомпилированные пакеты,
но свободно получить на сайте [3]. отличные от deb, мне не удалось. Так как межсетевой экран
Самой продвинутой является коммерческий Zorp Pro, должен иметь минимум компонентов и тем более не иметь
представляющий собой доработанный Debian, который компилятора, то устанавливаем базовую систему, а собира-
можно установить за 10 минут (без настройки). В его со- ем все остальное на отдельном компьютере. В первую оче-
ставе имеются: редь необходимо пересобрать ядро, оставив только необ-
 16 модулей, контролирующих свои протоколы; ходимые опции, а также утилиты iptables.
 сервер управления (Zorp Management Server – ZMS), Версии ядра 2.2 уже имеют встроенный прозрачный
с помощью которого удобно создавать и настраивать прокси, и для его активации требуется только включить
правила работы системы фильтрации, клиенты, при по- в меню «Networking options → IP: firewalling», и активируем
мощи которых и производится удаленная настройка, до- «Transparent proxy support». В следующих версиях 2.4/2.6, ког-
ступны для нескольких систем; да был введен iptables, такая возможность была убрана, по-
 возможно подключение модуля антивирусной провер- этому перед компиляцией необходимо будет наложить патч
ки; tproxy [4]. Имя патча имеет вид cttproxy-2.6.15-2.0.4.tar.gz,
 строгая аутентификация по любому протоколу, генери- где 2.6.15 означает версию ядра, для которого он предназна-
рование ключей на лету на основании информации кли- чен, а 2.0.4 – версию tproxy. Также следует помнить о двух
ента; совместимостях. Версии TProxy 1.2.x совместимы со всеми
 возможность горячей перезагрузки без разрыва сущес- версиями Zorp, но не подходят к ядрам серии 2.6, а версия
твующих связей; TProxy 2.0 будет работать с ядрами 2.4 и 2.6, но совмести-
 техническая поддержка. ма только с Zorp, начиная с 2.1.9.
Для примера используем ядро 2.6.15:
GPL-версия, распространяемая свободно, не имеет та-
ких богатых возможностей, в ней есть модули, позволя- # tar xzvf cttproxy-2.6.15-2.0.4.tar.gz
# tar xjvf linux-2.6.15.tar.bz2
ющие контролировать только 6 типов протоколов (HTTP, # cd linux-2.6.15
FTP, PSSL, TELNET, WHOIS, FINGER) и Plug. Последний
работает без проверки протокола и поддерживает про- Патчи для ядра находятся в каталоге patch_tree, не все
токолы, использующие только один порт (SSH, MySQL, являются обязательными, достаточно установить только
VNC, Microsoft Terminal Service, GOPHER, SMB/CIFS, TALK, 03-tproxy.diff.
SYSLOG, RSYNC). Также в GPL-версии для SSL возможна
работа только с заранее сгенерированными ключевыми # for i in ../cttproxy-2.6.15-2.0.4/patch_tree/ ↵
0{1,2,3}*.diff; do cat $i | patch -p1; done
парами. И готовьтесь к тому, что собирать и настраивать
все это придется самостоятельно и вручную. Используя При конфигурировании в «Networking options → IP:
версию Pro, относительно просто организовать однократ- Netfilter Configuration → ...» включаем «Connection tracking»,
ную аутентификацию (SSO – Single-sign-on authentication), «IP tables support», «Full NAT» и «Transparent proxying»
с Zorp GPL сделать это невозможно. Осталось добавить, (см. рис. 2) с дополнительными опциями. В .config-файле
что использование Netfilter налагает ограничение по опе- это выглядит так:
рационной системе, здесь только GNU/Linux. Cам прокси
в Zorp написан на языке С, а модули контроля – с приме- CONFIG_NETFILTER=m
CONFIG_IP_NF_TPROXY=m
нением языка высокого уровня Python. CONFIG_IP_NF_MATCH_TPROXY=m
CONFIG_IP_NF_TARGET_TPROXY=m
CONFIG_IP_NF_IPTABLES=m
Установка Zorp GPL CONFIG_IP_NF_NAT=m
Балазс Шайдлер по совместительству является одним
из майтайнеров Debian, поэтому самым простым спосо- Кроме того, для прозрачного прокси необходим вирту-
бом установки является использование этого дистрибу- альный dummy-интерфейс. Проследите, чтобы во вкладке
тива, который затем обновляется его до ZorpOS. Для это- «Network device support» был активирован пункт «Dummy
го достаточно установить базовые пакеты Debian, затем net driver support». Если в процессе работы Zorp возник-

54
безопасность
нут проблемы, то следует добавить отладочной инфор-
мации. Заглянув в net/ipv4/netfilter/iptable_tproxy.c, найде-
те строку:

#ifdef CONFIG_NETFILTER_DEBUG
#define DEBUGP printk

То есть отладочный режим можно активировать глобально,


поставив «CONFIG_ NETFILTER_DEBUG=y» либо заменив
первую строку на:

#if 1

В последних версиях модуль iptable_tproxy.o загружает-


ся автоматически при запуске по мере необходимости, ес-
Рисунок 2. Для использования Zorp необходимо пересобрать
ли используете ядро версии 2.4 или более ранние 2.6, то за- ядро
грузите его вручную при помощи modprobe.
В Slackware /etc/rc.d/ создаем файл /etc/rc.d/rc.inet4 та-
# modprobe iptable_tproxy.o кого содержания:
# lsmod | grep -i tproxy
iptable_tproxy 14340 0 #!/bin/sh
ip_nat 17600 1 iptable_tproxy DEVICE='dummy0'
ip_conntrack 45516 2 iptable_tproxy,ip_nat DHCP='no'
ip_tables 9624 1 iptable_tproxy IPADDR='10.2.3.4'
NETMASK='255.255.255.255'
PROBE='no'
Если с ядром все в порядке, то следующим шагом моди- . /etc/rc.d/functions-network "$@"
фицируем и пересобираем утилиты iptables, чтобы они мог-
ли работать с новой таблицей tproxy и новой целью TPROXY. И запускаем:
В подкаталоге iptables лежат два патча. Один – для версии
iptables 1.2.7a, второй – для 1.3 # /etc/rc.d/rc.inet4 start
Starting network dummy0 as 10.2.3.4/255.255.255.255…
# tar xzvf iptables-1.3.3.tar.gz
# cd iptables-1.3.X
# cat ../cttproxy-2.6.15-2.0.4/iptables/ ↵ Настраиваем Zorp
iptables-1.3-cttproxy.diff | patch -p1 Для настройки Zorp используются три файла, которые
# chmod +x extensions/.tproxy-test
# make KERNELDIR=/usr/src/linux-2.6.15 по умолчанию должны лежать в /etc/zorp/. Файл instances.
conf содержит список примеров Zorp, с которыми нужно
Zorp состоит из библиотеки libzorpll и собственно zorp. работать, и запускаемые сценарием zorpctl. Другой файл,
Последними версиями на момент написания статьи были zorpctl.conf, содержит глобальные настройки, связанные
libzorpll_3.1.2.2 и zorp_3.0.9.tar.gz. Каких-либо особенностей с работой самого zorpctl (разрешение автоматического
по их установке нет, делаем это обычным образом. рестарта, pid файл, дополнительные аргументы команд-
ной строки). И третий файл, policy.py, хранит правила и по-
Настраиваем Dummy-интерфейс литики, связанные с примерами.
Во избежание недоразумений dummy-адрес не должен В файле zorpctl.conf можно пока ничего не трогать, па-
принадлежать реально существующему сетевому ад- раметры по умолчанию пригодны для работы. Рекомендую
ресу. В Debian добавляем следующие строки в файл снять знак комментария лишь со следующих строк:
/etc/networking/interfaces:
CHECK_PERMS="1"
CONFIG_DIR=/etc/zorp
auto dummy0 CONFIG_DIR_OWNER=root
iface dummy0 inet static CONFIG_DIR_GROUP=zorp
address 10.2.3.4 CONFIG_DIR_MODE=0750
netmask 255.255.255.255
Тогда при запуске утилиты zorpctl будут проверяться со-
В RedHat и клонах, а также SuSE это будет файл ответствующие разрешения.
ifcfg-dummy0, лежащий в /etc/sysconfig/network:
# zorpctl start
BOOTPROTO='static' Config directory has invalid permissions, expected:
IPADDR='10.2.3.4'
NETMASK='255.255.255.255' dir='/etc/zorp', owner='root', group='zorp', perm='0750'
STARTMODE='onboot'
# groupadd zorp
# chown root:zorp /etc/zorp
# chmod 0750 /etc/zorp/
И затем: # zorpctl start

# ifup dummy0 Starting Zorp Firewall Suite

№5, май 2006 55


безопасность
Для удобства предположим, что на межсетевом экране Для примера разрешим доступ к серверу, находящему-
имеются три сетевых интерфейса: ся в DMZ, из локальной сети по протоколам http и для уда-
 eth0 – интранет-интерфейс с IP 192.168.0.1/24 – local; ленного управления ssh, а из внешней сети – по http.
 eth1 – DMZ с IP 10.0.0.1/24 – dmz;
 eth2 – Интернет с IP 111.222.333.444 – internet. InetZone('local', '192.168.0.0/24' "
## здесь через запятую можно указать несколько адресов
outbound_services=["local_http", "local_ssh"]],
Дописываем в instances.conf. следующие строки: inbound_services=[])
InetZone('dmz', '10.0.0.0/24',
inbound_services=["local_http", "local_ssh", ↵
local -v3 -p /etc/zorp/policy.py --autobind-ip 10.2.3.4 "internet_http"] )
dmz -v3 -p /etc/zorp/policy.py --autobind-ip 10.2.3.4 InetZone('internet', '0.0.0.0/0',
internet --verbose=5 --policy /etc/zorp/policy.py ↵ outbound_services=["internet_http"],
--autobind-ip 10.2.3.4 inbound_services=["*"])
InetZone("localzone", "127.0.0.0/8",
inbound_services=["*"])
Первое поле – это имя примера, выбранное произвольно.
Для каждого имени можно использовать отдельный файл, И теперь сервисы. Описание сервиса состоит из ис-
но можно сконфигурировать многочисленные зоны в пре- ходной зоны, протокола и зоны назначения. Если услуга
делах единственного файла. Опции -v или --verbose пока- прозрачна и зона назначения не определяется, то ее опи-
зывают уровень оповещения, а -р или --policy – на файл по- сание опускается. После адреса указывается порт, на ко-
литик. Возможны и другие параметры, либо можно просто торый iptables будет направлять пакеты, предназначенные
привязать Zorp к определенному сервису. Вроде такого: для этого сервиса.

zorp_ftp -v4 -p /etc/zorp/policy.py --threads 500 -- ↵ def local():


--no-auto-restart --fd-limit 1024 ↵ Service("local_http", HttpProxy,
--process-limit 512 router=TransparentRouter())
Service("local_ssh", PlugProxy,
router=TransparentRouter())
Теперь файл политик policy.py. Он состоит из двух сек- # вместо PlugProxy можно использовать PsslProxy
ций. Первая является глобальной и описывает зоны, осно-
Listener(SockAddrInet('192.168.0.1', 50080),
вываясь на адресах и сервисах. Во второй описываются "local_http")
сервисы, которые будут пропущены через прокси. Помни- Listener(SockAddrInet('192.168.0.1', 50022),
"local_ssh")
те, мы имеем дело с Python, разделение на блоки у кото- def dmz():
рого производится табуляцией и пробелами, поэтому реко- pass
мендую здесь быть очень аккуратными:
В отличие от других сервисов веб-сервис имеет конкрет-
Zorp.firewall_name = 'zorp.domain.com' ное расположение, поэтому направляем трафик internet_http
при помощи DirectedRouter, а не TransparentRouter, как бы-
Подключаем модули для работы c протоколами http, ло в остальных случаях. Возможен вариант InbandRouter(),
ftp, ssl и plug: который соответствует непрозрачному прокси.

from Zorp.Core import * def internet():


from Zorp.Plug import * Service("internet_http", HttpProxy,
from Zorp.Http import * router=DirectedRouter(SockAddrInet('10.0.0.2',80), ↵
from Zorp.Ftp import * forge_addr=TRUE))
from Zorp.Pssl import * Listener(SockAddrInet('111.222.333.444 ', 50080),
"internet_http")
Ниже определяются зоны с соответствующими адресами
и сервисами, которые они обеспечивают. Обратите внима- На первый взгляд, составлять правила очень непросто,
ние, что значения исходящих (outbound) и входящих (inbound) но если заранее распланировать ресурсы, к которым требу-
сервисов выбираются относительно самой зоны, а не меж- ется организовать доступ, указать адреса и порты, то пра-
сетевого экрана. Поэтому, например, если из Интернета вила напишутся относительно быстро. Для того чтобы не
будут обращаться с запросом к веб-серверу, расположен- запутаться в номерах портов, лучше выбирать их пример-
ному в DMZ, то это будет указано как outbound. В качестве но так: 22 → 50022 или 80 → 50080. Кроме того, на сай-
названий допущенных сервисов можно выбрать любые, но те [3] и в документации проекта, можно найти ряд приме-
при большом их количестве очень легко запутаться, поэто- ров позволяющих организовать: HTTPS-прокси, в том чис-
му лучше выбрать такое описание, чтобы оно показывало ле и без шифрования трафика к серверу, включить адрес
его суть. Также если, например, для локальных пользова- клиента в http-заголовок, избежать подбора пароля в ssh,
телей разрешен доступ (outbound) к веб-серверу в DMZ (на- поддерживать виртуальный узел, ограничить полосу и не-
зовем параметр local_http), то он должен быть обязательно которые другие.
прописан и в inbound в записи dmz. Пустое значение означа- Вот так можно организовать фильтрацию содер-
ет отсутствие параметров, т.е. фактически запрет сервисов, жимого URL http-запроса, для этого добавляем сервис
а звездочка «*» означает разрешение всех сервисов, кото- local_internet_http и даем ему такое описание.
рые описаны в файле, а не все, которые вообще возможны.
Но здесь необходимо помнить, что Zorp обрабатывает толь- from Zorp.Matcher import *
ко те пакеты, которые передают ему Netfilter и TPROXY. class IDHttp(HttpProxyURIFilter):

56
безопасность
matcher=RegexpFileMatcher('/etc/zorp/http.black', ↵ # iptables -t tproxy -P OUTPUT ACCEPT
'/etc/zorp/http.white')
def config(self):
HttpProxyURIFilter.config(self) Создаем цепочки для каждого интерфейса:
self.transparent_mode = 1
def regexp():
Service("local_internet_http", IDHttp) # iptables -t tproxy -N PRlocal
Listener(SockAddrInet("192.168.0.1", 50090), ↵ # iptables -t tproxy -N PRdmz
" local_internet_http ") # iptables -t tproxy -N PRinternet

Как видите, вначале на основе стандартного класса И привязываем их к своему интерфейсу:


HttpProxyURIFilter, который определен в модуле Addon.py
(по умолчанию в нем используются файлы blacklist-http # iptables -t tproxy -A PREROUTING -i eth0 -j PRinternet
# iptables -t tproxy -A PREROUTING -i eth1 -j PRlocal
и blacklist-http.ignore), был создан новый класс IDHttp, и за- # iptables -t tproxy -A PREROUTING -i eth2 -j PRdmz
тем применен при описания сервиса. Файлы http.black и http.
white содержат список регулярных выражений, здесь мож- Заполняем:
но указать URL, к которым необходимо запретить доступ,
слова, при нахождении в запросе которых он будет пре- # iptables -t tproxy -A PRlocal -p tcp --dport 80 ↵
-j TPROXY --on-port 50080
рываться. Например, добавив строку .*exe, можно запре- # iptables -t tproxy -A PRlocal -p tcp --dport 22 ! ↵
тить скачивать файлы с указанным расширением. Чтобы -d zorp.domain.com -j TPROXY --on-port 50022
# iptables -t tproxy -A PRintenet -p tcp --dport 80 ↵
по ошибке не запретить доступ к ценным ресурсам, их сто- -j TPROXY --on-port 50080
ит занести в http.white.
Используя следующую конструкцию, можно организо- И разрешаем прохождение по цепочке INPUT:
вать NAT средствами самого Zorp.
# iptables -P INPUT DROP
# iptables -A INPUT -m tproxy -j ACCEPT
NATPolicy("local-internet", # iptables -A INPUT -m state ↵
cacheable=TRUE, --state ESTABLISHED,RELATED -j ACCEPT
nat=GeneralNAT([(InetDomain(111.222.333.444/24'), # iptables -A INPUT -i lo -j ACCEPT
InetDomain('192.168.0.0/24'))])) # iptables -N LOlocal
# iptables -A INPUT -i eth1 -j LOlocal
NATPolicy("internet-local", # iptables -A LOlocal -p tcp --dport 22 --syn -j ACCEPT
cacheable=TRUE, # iptables -A LOlocal -p udp --dport 53 -j ACCEPT
nat=GeneralNAT([(InetDomain('192.168.0.0/24'), # iptables -A LOlocal -p tcp --dport 25 --syn -j ACCEPT
InetDomain('111.222.333.444/24'))])) # iptables -A LOlocal -j LOG --log-prefix "LOblue DROP: "
# iptables -A LOlocal -j DROP
Если заглянуть в модули, то можно обнаружить, что кон- # iptables -N LOdmz
# iptables -A INPUT -i eth2 -j LOdmz
тролю поддаются практически все основные параметры # iptables -A LOdmz -p udp --dport 53 -j ACCEPT
поддерживаемых протоколов, по которым можно органи- # iptables -A LOdmz -j DROP
# iptables -N LOinternet
зовать фильтрацию либо другую их обработку. Например, # iptables -A INPUT -i eth0 -j LOinternet
использовав следующую конструкцию, можно обработать # iptables -A LOinternet -p udp -sport 53 -j ACCEPT
# iptables -A LOinternet -p tcp --dport 25 --syn -j ACCEPT
код ответа 404, заменив его своим сообщением. # iptables -A LOinternet -j DROP

class DmzHTTP(HttpProxy): Теперь можно запускать Zorp: «zorpctl start» и прове-


def config(self):
HttpProxy.config(self) рить результат.
self.response["GET", "404"] = (HTTP_RSP_POLICY, self.filter404)
def filter404(self, method, url, version, response):
self.error_status = 404 Вывод
self.error_info = "Requested page was not accessible." Zorp позволяет на порядок лучше защитить компьютерные
return HTTP_RSP_REJECT
системы по сравнению с обычным межсетевым экраном хо-
тя бы потому, что сам прокси даже без контроля приложений
Построение правил iptables изолирует системы от нападений, направленных на более
Таблица tproxy содержит все встроенные цепочки, наибо- низкий уровень, которые, возможно, не видит Netfilter. Но, к со-
лее естественно использовать PREROUTING. Самое про- жалению, настраивать GPL-вариант все-таки непросто. Хотя,
стое правило, которое направит нужный пакет в Zorp, вы- впрочем, вовсе не обязательно делать это сразу и за один
глядит так: день, можно постепенно наращивать его возможности.

# iptables -t tproxy -A PREROUTING -j TPROXY --on-port 50080 Ссылки:


1. Яремчук С. Как повысить безопасность веб-приложений. –
Но чтобы не засорять Zorp мусором, отсеивая пакеты, Журнал «Системный администратор», №2, 2006 г. – 60-64 с.
которые не должны проходить через фильтр, средствами 2. Сайт проекта Zorp – http://www.balabit.com.
самого Netfilter, лучше указать интерфейс, с которого ожи- 3. Неофицальный сайт Zorp – http://zorp-unoff.sourceforge.net.
дается пакет, поэтому для каждого создадим свои цепочки. 4. Патч tproxy – http://www.balabit.com/products/oss/tproxy.
Остальные пакеты будут проходить в соответствии с поли- 5. Статья в «Linux Journal» – «Application Proxying with Zorp, Part
тикой по умолчанию (-Р): I и Part II»– http://www.linuxjournal.com.
6. Статья в немецком «Linux magazin», № 12/04 – «Ampel-
# iptables -t tproxy -P PREROUTING ACCEPT Schaltung» – http://www.linux-magazin.de.

№5, май 2006 57


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

Генная инженерия на службе


распаковки PE-файлов

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

К
ак хитро я вас обманул! Ни о ралов», а двигатели вообще. Почувс- перерасходу памяти и тормозит всю
генах, ни о хромосомах речь твуйте разницу! систему. Подробности – в статье «па-
здесь не идет. Искусственный Так о чем же мы будем говорить? ковать или не паковать», электронную
интеллект отдыхает на задворках ис- Все больше и больше программ рас- копию которой можно бесплатно ска-
тории. Genetic – в переводе с гречес- пространяется в упакованном виде, чать с ftp://nezumi.org.ru).
кого «общий». Генетический распа- и совсем не потому, что так они зани- Усложнить взлом, затруднить ана-
ковщик – универсальный распаков- мают меньше места или загружают- лиз – вот для чего на самом деле ис-
щик, общий для всех упаковщиков/ ся быстрее, как это обещают разра- пользуются упаковщики, в конеч-
протекторов. Кстати говоря, «General ботчики упаковщиков (на самом деле ном счете превратившиеся в про-
Motors» – это не «двигатели для гене- упаковка приводит к значительному текторы.

58
безопасность
Одно и то же оружие используется как против хакеров,
так и против легальных исследователей. Вирусы, черви, тро-
янские кони практически всегда обрабатываются самыми
последними версиями полиморфных протекторов, для ко-
Рисунок 1. Структура нормальной, неупакованной программы
торых распаковщики еще не написаны, и прежде чем анти-
вирус научится распознавать заразу, программистам при-
ходится проделать колоссальный объем работы. Существу-
ют и другие мотивы, побуждающие распаковать програм-
му: многие протекторы отказываются работать в присутс-
твии пассивных отладчиков, не дружат с виртуальными ма- Рисунок 2. Структура упакованной программы
шинами и эмуляторами…
Но не будем философствовать на моральные темы, луч-
ше поговорим о деле. А говорить мы будем преимуществен-
но о PE-файлах NT-подобных системах (включая 64-битные
редакции оных), в UNIX-мире упаковщиков намного мень-
ше, но все-таки они есть (взять хотя бы Shiva ELF-protector).
Если не углубляться в «политические» тонкости разногла-
сий между UNIX и Windows, алгоритм распаковки – тот же
самый, поэтому не будем на нем останавливаться, а пос-
корее ринемся в бой!
Рисунок 3. Раскладка секций неупакованного файла
Предварительный анализ
Прежде чем приступать к распаковке, не помешает убедить-
ся: а упакована ли программа вообще? Графическая вер-
сия IDA Pro поддерживает специальную панель «overview
navigator», позволяющую визуализировать структуру ди-
зассемблерного кода. В нормальных программах машин-
ный код занимает значительную часть от общего объема,
остальная часть приходится на данные (см. рис. 1).
В упакованных программах кода практически нет, и все
пространство занято данными (см. рис. 2), объединенны-
ми в один (или несколько) огромных массивов, которые IDA Рисунок 4. Раскладка секций упакованного файла
Pro не смогла дизассемблировать.
Впрочем, визуализация – довольно расплывчатый кри-
терий. Существует сотни причин, по которым IDA Pro от-
вергает неупакованный код или, напротив, рьяно бросает-
ся дизассемблировать упакованную секцию, получая ку-
чу бессмысленных инструкций, пример которых приведен
в листинге 1:

Листинг 1. Пример бессмысленного (зашифрованного/упакованного)


кода

01010072h imul esi, [edx+74h], 416C6175h


01010079h ins byte ptr es:[edi], dx
0101007Ah ins byte ptr es:[edi], dx
0101007Bh outsd
0101007Ch arpl [eax], ax
0101007Eh push esi
0101007Fh imul esi, [edx+74h], 466C6175h
01010086h jb short loc_10100ED
01010088h add gs:[ebx+5319Dh], cl Рисунок 5. Подсчет энтропии с помощью редактора HTE
0101008Fh add [ebx], cl
программах присутствуют секции с именами .text, .CODE,
Осмысленность – вот главный критерий! Если дизассем- .data, rdata, .rsrc и, что самое главное, виртуальный размер
блированный код выглядит «дико» и неясно, если в нем при- (VirtualSize) кодовой секции практически всегда совпада-
сутствует большое количество привилегированных инструк- ет с физическим (PhysSize). К примеру, в «Блокноте», вхо-
ций – скорее всего он упакован/зашифрован. Или… это код, дящем в штатную поставку NT, разница составляет все-
предназначенный совсем для другого процессора (напри- го 6600h – 65CAh == 36h байт, объясняемых тем, что вир-
мер, байт-код виртуальной машины), а может… это хитрый туальная секция, в отличие от физической, не требует вы-
обфускатор такой. В общем, вариантов много. равнивания (см. рис. 3). А теперь упакуем наш файл с по-
Попробуем взглянуть на таблицу секций (в hiew это де- мощью ASPack (или аналогичного упаковщика) и посмот-
лается так: <F8> – header, <F6> – ObjTbl). В нормальных рим, что от этого изменится (см. рис. 4):

№5, май 2006 59


безопасность
пользуя классический набор техник, Поэтому универсальный распаков-
подробно описанный в «фундамен- щик никогда не помешает!
тальных основах хакерства» (элек-
тронная копия лежит на ftp://nezumi. Алгоритм распаковки
org.ru). Вот тут кто-то говорит, что не- Как пишутся распаковщики? Здесь
которые упаковщики активно сопро- есть разные пути. Хакер может долго
тивляются отладке! Что ж, попробуй- и мучительно изучать алгоритм рабо-
Рисунок 6. Внешний вид утилиты PEiD, те запустить soft-ice уже после того, ты распаковщика в отладчике/дизас-
автоматически определяющий тип как упаковщик уже отработает свое и семблере, а потом столь же долго и му-
упаковщика/проектора
на экране появится главное окно про- чительно разрабатывать автономный
Ого! Сразу появились секции .aspack граммы (NT, в отличии от 9x, позволяет распаковщик, корректно обрабаты-
и .adata с именами, говорящими самими пускать soft-ice в любое время) или ус- вающий исполняемый файл с учетом
за себя. Впрочем, имена секций мож- тановите неофициальный патч IceExt специфики конкретной ситуации.
но и изменить – это не главное. Вир- (http://stenri.pisem.net), скрывающий от- А вот другой путь: запускаем про-
туальный размер секции .text (7000h) ладчик от большинства защит. грамму на «живом» процессоре (или
в два раза отличается от своего физи- Ряд утилит типа LordPE (http:// под эмулятором типа BOCHS), опре-
ческого размера (3800h). А вот это уже mitglied.lycos.de/yoda2k/news.htm) поз- деляем момент завершения распаков-
говорит о многом! На самом деле, со- воляет снимать с программы дамп пос- ки и тут же сохраняем образ памяти на
здателю ASPack было лень использо- ле завершения распаковки, и хотя по- диск, формируя из него PE-файл. В ре-
вать «правильную» стратегию програм- лученный образ exe-файла зачастую зультате получится универсальный
мирования, вот он и выделил виртуаль- оказывается вопиюще некорректным распаковщик, который мы и собираем-
ный размер заблаговременно. Сущест- и работающим нестабильно, для ди- ся написать, но прежде – немного тео-
вуют упаковщики, «трамбующие» упа- зассемблирования он вполне приго- рии, для тех, кто еще не умеет распа-
кованные секции так, что виртуальный ден, особенно если его использовать ковывать программы «руками».
размер совпадает с физическим, а не- в связке с отладчиком, помогающим
обходимая память динамически выде- «подсмотреть» значения некоторых В поисках OEP
ляется в процессе распаковки вызо- переменных на разных стадиях ини- Создание распаковщика начинается
вом VirtualAlloc. циализации. с поиска OEP (Original Entry Point – ис-
Еще можно попробовать измерять Ах да! Упакованную программу не- ходная точка входа). Наш депротек-
энтропию (меру беспорядка или сту- льзя модифицировать, то есть накла- тор должен как-то определить момент
пень избыточности) подопытного фай- дывать на нее patch. То есть, даже пос- завершения распаковки/расшифров-
ла. Популярный hex-редактор HTE это ле того как мы найдем заветный Jx, ки «подопытной» программы – когда
умеет (см. рис. 5). Чем больше значе- отключающий защиту, мы не сможем распаковщик выполнил все, что хотел,
ние энтропии, тем выше вероятность, модифицировать упакованный файл, и уже приготовился передавать управ-
что файл упакован и соответственно поскольку никакого Jx там, естест- ление распакованной программе-но-
наоборот. Однако этот прием сраба- венно, нет! Стоп! Кто говорит о взло- сителю. Это самая сложная часть ге-
тывает далеко не всегда… ме?! Этот прием используют не толь- нетических распаковщиков, поскольку
Также хотелось бы обратить внима- ко хакеры! Некоторые вирусы так глу- определить исходную точку входа в об-
ние на бесплатную утилиту PEiD (http:// боко вгрызаются в программу (и каж- щем случае невозможно, вот и прихо-
peid.has.it), автоматически определяю- дый раз немного по-разному), что «вы- дится прибегать к различным ухищре-
щую большинство популярных упаков- ломать» их оттуда, не нарушив функ- ниям. Чаще всего для этого использу-
щиков/протекторов по их сигнатурам циональности, нереально, вернее, ре- ется пошаговая трассировка, которой
(см. рис. 6), и даже пытающуюся их рас- ально, но очень-очень трудно. Гораз- очень легко противостоять (чем боль-
паковать. Впрочем, с распаковкой де- до легче найти Jx, ведущий к проце- шинство упаковщиков/протекторов
ла обстоят неважно, и лучше восполь- дурам «размножения», и «вырезать» и занимается). Немногим лучше с за-
зоваться специализированными рас- их. То же самое относится и к функци- дачей справляются трассеры нулевого
паковщиками или написать свой собс- ям деструкции... кольца. Справиться с грамотно спро-
твенный (чуть позже мы покажем как). Вот на этот случай и были приду- ектированным трассером средствами
маны он-лайновые патчеры (on-line прикладного уровня (а большинство
Распаковка и ее patchers), правящие программу «на ле- упаковщиков/протекторов работают
альтернативы ту» непосредственно в оперативной именно там) практически невозмож-
Позвольте задать дурацкий вопрос. памяти, минуя диск. но, однако разработка ядерных трассе-
В стремлении как можно быстрее рас- Возникает неоднозначная ситуа- ров – слишком сложная задача для на-
паковать программу, мы зачастую да- ция: с одной стороны, избежать распа- чинающих, поэтому лучше использо-
же не успеваем задуматься: а зачем?! ковки в большинстве случаев все-таки вать готовый, разработанный группой
Сразу же слышу возражения: мол, упа- возможно, но с другой – работать с рас- легендарного Володи с не менее леген-
кованную программу невозможно ди- пакованным файлом намного удобнее дарным WASM. Правда, коммерческая
зассемблировать. Да, невозможно, ну и комфортнее (хотя бы по чисто психо- составляющая до сих пор неясна и до-
и что? Зато ее можно отлаживать, ис- логическим соображениям). ступ к трассеру есть не у всех.

60
безопасность
цикл! Рассмотрим его повнимательнее (будьте уверены, тут
есть чему поучиться):

Листинг 2. Хитро оптимизированный цикл чтения строковых


ресурсов

; ebp - указатель на LoadStringW


01004825h mov ebp, ds:LoadStringW
; указатель на таблицу ресурсов
01004830h
0100482Bh mov edi, offst off_10080C0
01004830h loc_1004830: ; CODE XREF: sub_10047EE+65↓j
; грузим очередной указатель на uID в eax
01004830h mov eax, [edi]
; nBufferMax (максимальная длина буфера)
01004832h push ebx
; lpBuffer (указатель на буфер)
01004833h push esi
; передаем извлеченный uID функции
01004834h push dword ptr [eax]
01004836h push [esp+0Ch+hInstance] ; hInstance
; считываем очередную строку из ресурса
Рисунок 7. Снятие дампа с работающего «Блокнота» 0100483Ah call ebp ; LoadStringW
; грузим тот же самый uID в ecx
На самом деле прибегать к трассировке никакой необхо- 0100483Ch mov ecx, [edi]
; увеличиваем длину считанной строки на 1
димости нет – одних лишь аппаратных точек останова для 0100483Eh inc eax
нашей задачи будет вполне достаточно. Иногда приходится ; строка влезает в буфер?
0100483Fh cmp eax, ebx
слышать мнение, что работа с аппаратными точками оста- ; сохраняем указатель на буфер поверх старого uID
нова возможна только из режима ядра, то есть из драйве- ; (он больше не понадобится)
01004841h mov [ecx], esi
ра. Это неверно. В «записках мыщъх’а» (электронную ко- 01004841h
пию которой можно свободно скачать с ftp://nezumi.org.ru) 01004841h
; позиция для следующей строки в буфере
показано, как это сделать и с прикладного уровня, даже 01004843h lea esi, [esi+eax*2]
без прав администратора! ; если буфер кончился, то это облом
01004846h jg short loc_100488B
На первом этапе в качестве основного эксперименталь- ; переходим к следующему uID
ного средства мы будем использовать «Блокнот» из ком- 01004848h add edi, 4
; уменьшаем свободное место в буфере
плекта поставки NT, сжатый различными упаковщиками 0100484Bh sub ebx, eax
(которые мы только сможем найти) и знаменитый отладчик ; конец таблицы ресурсов?
0100484Dh cmp edi, offst off_1008150
soft-ice. Кодирование последует потом. Чтобы писать кра- ; мотаем цикл пока не конец ресурсов
сиво и по сто раз не переписывать уже написанное и отла- 01004853h jl short loc_1004830
женное, необходимо иметь соответствующий боевой опыт,
для которого нам и понадобиться soft-ice. В переводе на русский это звучит так: «Блокнот» бе-
рет очередной идентификатор строки из таблицы ресур-
Дамп живой программы сов, загружает строку, размещая ее в локальном буфере
Самый простой (и самый популярный) способ борьбы с упа- и сохраняя полученный указатель поверх… самого иденти-
ковщиками – снятие дампа задолго после завершения рас- фикатора, который уже не нужен! Это классический трюк
паковки. Дождавшись появления главного окна программы, с повторным использованием освободившихся перемен-
хакер сбрасывает ее дамп, превращая его в PE-файл. Иног- ных, известный еще со времен первых PDP, если не рань-
да он работает, но чаще всего нет. Попробуем разобрать- ше. А вы все Microsoft ругаете! «Блокнот» писал не глупый
ся почему. Возьмем классический «Блокнот» (которое в за- хакер, бережно относящийся в системным ресурсам и к па-
щищенности не обвинишь!) и, не упаковывая его никакими мяти, в частности.
упаковщиками, попробуем снять дамп с помощью одного Для нас же это означает, что снятый с «живой» програм-
из самых лучших дамперов: Lord PE Deluxe (см. рис. 7). мы дамп будет неполноценным! Вместо реальных иденти-
Процесс дампирования проходит успешно, и образо- фикаторов строк в секции ресурсов окажутся указатели
вавшийся файл даже запускается (см. рис. 8), но… оказы- на память, направленные в «космос», но ведь загрузчик
вается не совсем работоспособен! Исчезли заголовок ок- ресурсов, приведенный в листинге 2, ожидает реальных
на и все текстовые надписи в диалогах! Если мы не сумели идентификатор и к встрече с указателями морально не го-
снять дамп даже с такого простого приложения, как «Блок- тов! Это и есть та причина, по которой PE-файл, изготов-
нот», то с настоящими защитами нам и подавно не спра- ленный из дампа, ведет себя неправильно.
виться! В чем же дело?! Впрочем, бывает и хуже. Во многих программах встре-
Расследование показывает, что исчезнувшие тексто- чается конструктор вида:
вые строки хранятся в секции ресурсов и, стало быть, об-
рабатываются функцией LoadString. Загружаем оригиналь- Листинг 3. «Защита» от дампинга живых программ
ный notepad.exe в IDA Pro (или любой другой дизассемблер // глобальная инициализированная переменная
по вкусу) и находим цикл, считывающий строки посредс- // (на самом деле присваивать нуль необязательно
// поскольку все глобальные переменные «сами»
твом функции LoadStringW (суффикс «W» означает, что мы // обнуляются при запуске программы)
имеем дело со строками в формате Unicode). Ага, вот этот void *p = 0;

№5, май 2006 61


безопасность
// выделить память, если она еще не выделена Листинг 4. Пример стартового кода на DELPHI
if (!p) p = malloc(BUF_SIZE);
CODE:00401EE8 start proc near
Очевидно, если снять дамп с программы после выделе- CODE:00401EE8 push ebp
ния памяти, то при запуске PE-файла, полученного из тако- CODE:00401EE9 mov ebp, esp
CODE:00401EEB add esp, 0FFFFFFF0h
го дампа, память навсегда перестанет выделяться, а в гло- CODE:00401EEE mov eax, offset dword_401EB8
бальной переменной p окажется указатель, доставшийся ; Sysinit::InitExe()
CODE:00401EF3 call @Sysinit@@InitExe$qqrpv
ей в «наследство» от предыдущего запуска, однако соот- CODE:00401EF8 push 0
ветствующий регион памяти выделен не будет, и програм- …
; CODE XREF: start+B↓p
ма либо рухнет, либо залезет в чужие данные, устроив там CODE:00401D9C @Sysinit@@InitExe$qqrpv proc near
настоящий переполох! CODE:00401D9C push ebx
CODE:00401D9D mov ebx, eax
Сформулируем главное правило: снимать дамп с про- CODE:00401D9F xor eax, eax
граммы можно только в точке входа! Остается разобрать- CODE:00401DA1 mov ds:TlsIndex, eax
CODE:00401DA6 push 0 ; lpModuleName
ся, как эту точку входа отловить. CODE:00401DA8 call GetModuleHandleA
CODE:00401DAD mov ds:dword_4036D8, eax
CODE:00401DB2 mov eax, ds:dword_4036D8
Поиск стартового кода по сигнатурам в памяти CODE:00401DB7 mov ds:dword_40207C, eax
Начинающие программисты считают, что выполнение CODE:00401DBC xor eax, eax
CODE:00401DBE mov ds:dword_402080, eax
программы начинается с функции main (на Си/Си++) или CODE:00401DC3 xor eax, eax
c ключевого слова begin (на Паскале). Первым всегда вы- CODE:00401DC5 mov ds:dword_402084, eax
; SysInit::_16395
зывается стартовый код (start-up code), устанавливающий CODE:00401DCA call @SysInit@_16395
первичный обработчик структурных исключений, иници- CODE:00401DCF mov edx, offset unk_402078
CODE:00401DD4 mov eax, ebx
ализирующий RTL, вызывающий GetModuleHandleA для CODE:00401DD6 call sub_4018A4
получения дескриптора текущего модуля и т. д. Тоже са-
мое относится к DLL, главной функцией которой являет- Собрав внушительную коллекцию стартовых кодов
ся DllMain. (или выдернув ее из IDA Pro), мы легко найдем OEP прос-
Существует огромное множество разновидностей start- тым сканированием дампа, снятого с «живой» программы.
up кодов, выбираемых компилятором в зависимости от ти- Загружаем полученный дамп в hiew и, перебирая сигнату-
па программы, ключей компиляции и т. д. Исходные текс- ры всех стартовых кодов, находим, который из них «наш».
ты стартовых кодов, как правило, открыты. В частности, Первый байт стартового кода и будет точкой входа в про-
Microsoft Visual C++ хранят их в каталоге \Microsoft Visual грамму – OEP.
Studio\VC98\CRT\SRC под именами crt*.*. Всего их около Запоминаем ее адрес (в моей версии «Блокнота» она
десятка. расположена по смещению 01006420h), загружаем упако-
Ниже (см. листинг 4) в качестве примера приведен один ванную программу в отладчик и устанавливаем аппаратную
из стартовых кодов компилятора DELPHI: точку на исполнение по данному адресу – «BPM 1006420 X»
(Внимание! По умолчанию отладчик ставит точку остано-
ва на чтение/запись, что совсем не одно и тоже!). Обогнув
распаковщик, отладчик (или наш дампер, который мы чуть
позже отважимся написать) всплывает непосредственно
в OEP! Самое время снимать дамп!
(Помнится, в далекие времена DOS существовал уни-
версальный распаковщик, который запускал сжатый/за-
щищенный exe-файл в режиме трассировки и определял
переход к исполнению программы по коду в окрестнос-
ти точки входа – более-менее специфичному для каждо-
го из компиляторов. Затем сохранял дамп памяти и почти
всегда получал рабочий файл. Правда, если запакован-
ная программа писалась на Ассемблере (что в те време-
на было не редкостью) и, как следствие, имела уникаль-
ную «сигнатуру», результаты были менее впечатляющи-
ми. – Прим. ред.)

Пара популярных, но неудачных способов:


GetModuleHandleA и fs:0
Библиотека сигнатур – это, конечно, хорошо, но слиш-
ком хлопотно. Новые версии компиляторов выходят чуть
ли не каждую декаду, к тому же разработчики зачастую
слегка модифицируют start-up код, ослепляя сигнатур-
ный поиск. Что тогда? Достаточно часто в этих случаях ре-
Рисунок 8. Нормально работающий «Блокнот» (сверху)
и тот же самый «Блокнот» после вснятия дампа – все текстовые комендуется установка точек останова на API-функцию
строки исчезли GetModuleHandleA («BPM GetModuleHandleA X») и на фильтр

62
безопасность
структурных исключений («BPM FS:0»). Но это не очень хо-
рошие способы и ниже будет показано почему.
Начнем с функции GetModuleHandleA, которая присутс-
твует практически в каждом стартовом коде (исключая неко-
торые ассемблерные программы). Нажимаем <Ctrl+D> для
вызова soft-ice, даем команду «BPM GetModuleHandleA X»
(можно также дать «BPX GetModuleHandleA», но в этом слу-
чае soft-ice внедрит в начало GetModuleHandleA програм-
мную точку останова CCh, легко обнаруживаемую многи-
ми защитными механизмами) и запускаем наш подопытный
«Блокнот», предварительно зажевав его любым не слишком
навороченным упаковщиком, например, ASPack или UPX.
Поскольку установка точки останова носит глобальный ха-
рактер, все программы, обращающиеся к GetModuleHandleA,
будут вызывать всплытие отладчика. Внимательно смотри-
те на имя программы, отображаемое отладчиком в правом
нижнем углу (см. рис. 9), – если это не наша программа,
жмем «x» или <Ctrl+D> для выхода из отладчика.
После серии ложных срабатываний в углу наконец-то Рисунок 9. Функция 1010295h:CALL [EBP+F4Dh] это на самом деле
появляется наш заветный NOTEPAD. Самое время сказать GetModuleHandleA, вызываемая таким заковыристым образом
отладчику «P RET», чтобы выбраться из функции в непос-
редственно вызывающий ее код, однако… этим вызываю-
щим кодом оказываются отнюдь не окрестности исходной
точки входа, а код самого распаковщика! И до OEP нам еще
трассировать и трассировать. Определить нашу дислока-
цию поможет карта памяти. Даем команду «MAP32» и смот-
рим, что скажет отладчик (см. рис. 9).
Файл notepad.exe состоит из нескольких секций: .text
(сжатый код исходной программы), .data (сжатые данные
исходной программы), .rsrc (сжатые ресурсы исходной про-
граммы), .aspack (код распаковщика) и .adata (данные рас-
паковщика). Секция кода исходной программы заканчива-
ется на адресе 100800h и все, что лежит ниже, ей уже не при-
надлежит. В нашем случае функция GetModuleHandleA,
вызывается кодом, расположенным по адресу 1010295h,
который, как нетрудно установить, принадлежит секции
.aspacack – то есть непосредственно самому распаковщику
и к OEP никакого отношения не имеет (помимо распаков-
щика, функцию GetModuleHandleA могут вызывать и дина-
мические библиотеки, подключаемые статической компо- Рисунок 10. Подлинный вызов GetModuleHandleA
новкой, то есть через секцию импорта). из окрестностей OEP
Выходим из отладчика, нажимая <Ctrl+D> до тех пор,
пока вызов GetModuleHandleA не окажется внутри секции тности, DELPHI помещает GetModuleHandleA в функцию
.text (если лень нажимать одну и ту же клавишу помногу раз, @Sysinit@@InitExe$qqrpv, а вот она-то уже и вызывается
можно установить условную точку останова в стиле «BPM стартовым кодом (см. листинг 4)!
GetModuleHandleA X IF EIP < 0x1008000». Это значит, что для достижения OEP, с момента «ловли»
Ага! Вот, наконец, появилось что-то похожее на исти- GetModuleHandleA нам придется раскрутить стек (команда
ну (см. рис. 10). «STACK» в soft-ice), поднявшись на один или два уровня
Данный вызов действительно подлинный и, прокручи- вверх. Но на сколько конкретно подниматься? Чтобы отве-
вая экран окна CODE вверх, нам остается всего лишь най- тить на этот вопрос, нам необходимо исследовать состоя-
ти стандартный пролог PUSH EBP/MOV EBP,ESP или RET, ние стека на момент вызова файла.
которым заканчивается предшествующая процедура. С вы- Остановив отладчик в точке входа EP (не путать с OEP,
сокой степенью вероятности это и будет OEP, на которую которую еще только предстоит найти), даем команду
можно поставить аппаратную точку останова, затем пере- «D ESP» и смотрим (чтобы данные отображались не бай-
запустить программу еще раз (не забыв при этом удалить тами, а двойными словами, необходимо сказать отладчи-
точку останова на GetModuleHandleA) и в момент всплы- ку «dd»):
тия отладчика сделать программе дамп. При этом следу-
ет помнить, что далеко не всегда GetModuleHandleA вызы- Листинг 5. Состояние стека на момент вызова файла
вается непосредственно из самого стартового кода! В час- :d esp

№5, май 2006 63


безопасность
0023:0006FFC4 77E87903 FFFFFFFF 0011F458 7FFDF000 .y.w....X.......

:u *esp

0023:77E87903 E9470A0300 JMP 77EB834F

:u 77EB834F

0023:77EB834F 50 PUSH EAX


0023:77EB8350 E87A83FDFF CALL KERNEL32!ExitThread

:d fs:0

0038:00000000 0006FFE0 00070000 0006E000 00000000 ................

Адрес 77E87903h (для наглядности выделенный крас-


ным), указывает куда-то внутрь KERNEL32.DLL и коман-
да («U *ESP») позволяет узнать куда. Ага, здесь рас-
положен безусловный переход на «PUSH EAX/CALL
KERNEL32!ExitThread». То есть на процедуру завершения
программы. Со времен MS-DOS не так уж и многое измени-
лось. Там тоже на вершине стека лежал адрес возврата на
exit, поэтому завершать работу программы можно не только Рисунок 11. Ловля OEP на обработчик структурных исключений
через API, но и простой инструкцией RETN. Если стек сба-
лансирован, она сработает правильно. Кстати, пара адре- нова на фильтр структурных исключений: «BPM FS:0». Не-
сов на вершине стека 77E87903h/FFFFFFFFh до боли на- обходимо сразу подготовить себя к огромному количес-
поминает термирующий обработчик структурных исклю- тву ложных срабатываний (структурные исключения ак-
чений (термирующий – то есть последний в цепочке), кото- тивно использует не только распаковщик, но и сама опе-
рым она по сути и является, ибо содержимое двойного сло- рационная система), и чтобы закончить отладку до конца
ва FS:[00000000h] указывает как раз на нее. сезона, необходимо воспользоваться условными точка-
Сформулируем еще одно правило: признаком OEP явля- ми останова, ограничив диапазон срабатываний отладчи-
ется ситуация FS:[00000000h] == ESP && *ESP == 77E87903h ка секцией .text. В нашем случае это будет выглядеть так:
(естественно, этот адрес варьируется от системы к системе, «BPM FS:0 IF EIP < 0X100800» (предыдущую точку остано-
и на каждой из них должен вычисляться индивидуально!). ва перед этим следует удалить), после чего можно смело
Кстати, раз уж мы затронули структурные исключения, отправиться на кухню и варить пакетный рис, поскольку
не мешает познакомиться с ними поближе. Практически за компьютером нам делать уже нечего.
каждый стартовый код начинает свою деятельность с ус- Даже незащищенный NOTEPAD.EXE вывалил окно от-
тановки своего собственного фильтра структурных исклю- ладчика спустя... 713.34 секунды (см. рис. 11), что немногим
чений, записывая в ячейку FS:0 новое значение. больше 12 минут. Это же целая вечность для процессора!
(Для справки: эксперименты проводились на VMWare, за-
Листинг 6. Установка нового фильтра структурных исключений пущенным под древним Pentium-III 733 МГц, современные
в стартовым коде
процессоры справляются с этой ситуацией намного быст-
; ← исходная точка входа рее – на то они и современные).
.text:01006420 55 push ebp
.text:01006421 8B EC mov ebp, esp Но как бы там ни было, исходная точка входа найдена!
.text:01006423 6A FF push 0FFFFFFFFh Вот она, расположенная по адресу 10006420h! Как гово-
.text:01006425 68 88 18 00 01 push dword_1001888
; ← «наш» обработчик риться, бери и властвуй!
.text:0100642A 68 D0 65 00 01 push loc_10065D0
; ← берем старый фильтр
.text:0100642F 64 A1 00 00 00 00 mov eax, fs:0 Побочные эффекты упаковщиков,
.text:01006435 50 push eax или Почему не работает VirtualProtect
; ← ставим новый фильтр
.text:01006436 64 89 25 00 00 00+ mov fs:0, esp Очевидно, чтобы распаковывать кодовую секцию програм-
мы, упаковщик должен иметь разрешение на запись (от-
Попробуем отловить это событие?! А почему бы и нет! сутствующее по умолчанию), а по завершению распаков-
Только надо учесть, что, в отличие от API-функций, до- ки восстанавливать исходные атрибуты, чтобы программа
пускающих установку глобальных точек останова, точ- выглядела так, как будто ее не упаковали. Помимо кодовой
ка останова на FS:0 должна устанавливаться из контекс- секции, необходимо восстановить атрибуты секции .rdata,
та подопытного приложения. А как в него попасть? Необ- доступной, как и следует из ее названия, только на чтение.
ходимо либо остановиться в точке входа в распаковщик Для манипуляций с атрибутами страниц Windows предо-
(см. врезку «Что делать, если отладчик проскакивает точ- ставляет функцию VirtualProtect. И это практически единс-
ку входа в распаковщик»), либо установить точку останова твенный путь, которым можно что-то сделать (не считая
на GetModuleHandleA, дождаться первого ложного всплытия VirtualAlloc с флагом MEM_COMMIT, с которым связана ку-
отладчика, совершенного в контексте нашего приложения ча проблем).
(в правом нижнем углу горит notepad), затем удалить точ- Логично предположить, что функция VirtualProtect долж-
ку останова на GetModuleHandleA и установить точку оста- на вызываеться после завершения распаковки в непосредс-

64
безопасность
твенной близости от передачи управле- В неупакованном «Блокноте» (см. рибут C0000040h, то есть такой же, как
ния на OEP. Означает ли это, что, уста- рис. 13) секция .text имеет права у секции данных – с правом на запись,
новив точку останова на VirtualProtect, на чтение и исполнение (executable/ но без прав исполнения.
мы… readable/code), секция .data – чтение и А вот это уже нехорошо! Мало то-
А вот и нет! Из трех наугад взятых запись (writeable/readable/инициализи- го, что в кодовую секцию теперь может
упаковщиков: ASPack, PE-Compact рованные данные), секция .rsrc – толь- писать кто угодно, так еще на процес-
и UPX только PE-compact вызывал ко на чтение (readable/инициализиро- сорах с NX/XD-битами файл, обрабо-
VirtualProtect для манипуляций с атри- ванные данные). Короче, все как в при- танный ASPack, исполняться не будет!
буты секций (да и то совсем для других личных домах. Система выбросит грозное предупреж-
целей), а все остальные оставляли их Теперь упакуем файл с помощью дение с намеком на вирус, и большинс-
открытыми на запись даже после за- ASPack. Запустим его и, дож дав- тво пользователей попросту сотрут та-
вершения распаковки! Вопиющее на- шись окончания распаковки (на экра- кой файл от греха подальше, а это зна-
рушение спецификаций и неуважение не появляется главное окно програм- чит, что создатель упакованной про-
к нормам хорошего поведения! мы), снимем с него дамп (см. рис. 14). граммы потеряет клиента (и правиль-
Смотрите сами. Вот это номер! Все секции имеют ат- но – незачем было паковать!).

Что делать, если отладчик проскакивает точку ляем адрес точки входа путем сложения Entrypoint RVA (в нашем
входа в распаковщик случае – 10001h) с Image Base (в нашем случае 1000000h). Полу-
Берем исполняемый файл, загружаем его в NuMega SoftICE Symbol чается 1010001h. Если считать лень, можно просто нажать <F5>,
Loader, предварительно убедившись, что пиктограммма, изобра- чтобы hiew перенес нас в точку входа, сообщив ее адрес (однако
щающая «электрическую лампочку», горит в полный накал, а оп- это не срабатывает на некоторых защищенных файлах с искажен-
ция «Start at WinMain, Main, DllMain» активирована (см. рис. 12), ной структурой заголовка). Хорошо, адрес EP получен. Вызыва-
что по идее должно отладчик заставить останавливаться в точке ем soft-ice путем нажатия на <Ctrl-D> и устанавливаем точку ос-
входа, но… При попытке загрузки программы soft-ice коварно иг- танова на любую API-функцию, которую вызывает наша програм-
норирует наши распоряжения, нахально проскакивает точку вхо- ма (откуда – не суть важно). Это может быть и GetModuleHandleA
да, совсем не собираясь в ней останавливаться. («BPX GetModuleHandleA») и CreateFileA – да все что угодно! Вы-
Это известный глюк soft-ice, с которым борются по всем на- ходим из soft-ice и запускам нашу программу. Отладчик всплы-
правлениям. Самый популярный (но не самый лучший) спо- вает по точке останова на API. Убедившись, что правый нижний
соб заключается во внедрении INT 03h (CCh) в точку входа про- угол отражает имя нашего процесса (если нет, выходим из soft-
граммы. ice и ждем следующего всплытия), устанавливаем аппаратную
Берем PE-файл, открываем его в hiew, нажимаем <Enter> точку останова на EP, отдавая команду «BPX 0x1010001 X», где –
для перехода в hex-режим, теперь <F8> (header) и <F5> (переход 0x1010001 адрес точки входа в PE-файл. Выходим из soft-ice и пе-
к точке входа в файл или сокращенно EP, не путать с OEP, кото- резапускаем программу. hint: soft-ice запоминает установленные
рую нам еще предстоит найти). Запоминаем содержимое байта точки вместе с контекстом отлаживаемой программы и не удаля-
под курсором (записываем на бумажке), переходим в режим ре- ет их даже после ее завершения. При повторном (и всех после-
дактирование по <F3> и пишем «CC». Сохраняем изменения по дующих) перезапусках, soft-ice будет послушно останавливаться
<F9> и выходим. В самом soft-ice должен быть предварительно ус- на EP в точке останова. Ну разве это не здорово?!
тановлен режим всплытия по INT 03 (команда «I3HERE ON»). Внимание! Динамические библиотеки, статически скомпоно-
Запускаем программу (просто запускаем без всяких там ванные с программой, получают управление до EP!!! Это позво-
loader) и… попадаем в soft-ice, который непременно должен ляет защитам предпринять некоторые действия еще до начала от-
всплыть, иначе здесь что-то сильно не так. Теперь необходимо ладки! Поэтому, если что-то идет не так, первым делом проверьте
вернуть исправленный байт на место. Это делается так: даем ко- код, содержащийся в DllMain всех динамических библиотек.
манду «WD» для отображения окна дампа (если только оно уже
не отображается на экране), затем «DB», чтобы отображение
шло по байтам (начинающим – так удобнее) и говорим «D EIP-1».
Минус один появился оттуда, что soft-ice останавливается после
CCh, увеличивая EIP на единицу. Даем команду «E» и редакти-
руем дамп в интерактивном режиме меняя «CC» на «60» (число,
записанное на бумажке). Остается только скорректировать ре-
гистр EIP, что осуществляется командой: «R EIP = EIP – 1». Все!
Команда «.» (точка) обновляет окно дизассемблера, перемещая
нас в текущую позицию. Теперь можно отлаживать!
Медленно? Неудобно? Куча лишних операций? Операции –
это ерунда, их можно «повесить» на макросы (благо, что они од-
нотипные), хуже, что некоторые упаковщики/проекторы контро-
лируют целостность файла, отказываясь запускаться, если он из-
менен. Как быть тогда?
А вот второй способ. Гораздо более элегантный. Загружаем Рисунок 12. Символьный загрузчик – хорошая штука,
программу в hiew, переходим в hex-режим, жмем <F8> и вычис- но не всегда работающая

№5, май 2006 65


безопасность
мые (чтение/запись/исполнение), вдобавок ко всему «забы-
вая» вернуть им исходные имена (которые, впрочем, ник-
то не проверяет).
Исключение совсем секция .rsrc – некоторые програм-
мы теряют способность находить ресурсы, если эта секция
названа как-то иначе.
Вердикт – все упаковщики несомненное зло)! Ни один
из них не соответствует спецификациям на PE-файл, зато
побочных эффектов от упаковки хоть отбавляй! (Удивитель-
Рисунок 13. Исходный «Блокнот» но, как упакованные файлы еще ухитряются работать.) От-
сюда – устанавливать точку останова на VirtualProtect ни-
какого смысла нет.

Универсальный прием поиска OEP,


основанный на балансе стека
Вот мы и подобрались к самому интересному и универсаль-
ному способу определения OEP, который к тому же легко ав-
томатизировать. Упаковщик (даже если это не совсем кор-
ректный упаковщик) просто обязан после распаковки вос-
становить стек, в смысле вернуть регистр ESP на его за-
Рисунок 14. «Блокнот», упакованный ASPack конное место, указывающее на первичный фильтр струк-
турных исключений, устанавливаемый системой по умол-
чанию (см. листинг 5).
Некоторые упаковщики еще восстанавливают и регис-
тры, но это уже необязательно.
Возьмем, к примеру, тот же ASPack и посмотрим в его
начало (см. листинг 7):

Листинг 7. Точка входа в распаковщик ASPack

:u eip
; сохранить все регистры в стеке
001B:01010001 60 PUSHAD
Рисунок 15. «Блокнот», упакованный PE-compact ; определить текущий EIP
001B:01010002 E803000000 CALL 0101000A
; спрятанные JMPS/POP EBP/INC EBP
001B:01010007 E9EB045D45 JMP 465E04F7
; следующие 2 строчки «эмуляция» команды jmp 01010008h
001B:0101000C 55 PUSH EBP
001B:0101000D C3 RET

Замечательно! Первая же команда сохраняет все ре-


гистры в стеке. Очевидно, что непосредственно перед пе-
редачей управления на OEP они будут восстановлены ко-
мандой POPAD, выполнение которой очень легко отследить,
установив точку останова на двойное слово, лежащее вы-
Рисунок 16. «Блокнот», упакованный UPX ше верхушки стека: «BPM ESP – 4».
Результат превосходит все ожидания (см. листинг 8):
К тому же в памяти по-прежнему болтаются секции
.aspack и .adata, которые упаковщик не удосужился «под- Листинг 8. Передача управления на OEP
чистить». Это хоть и несмертельно, но все-таки неакку- ; ← на этой команде отладчик всплывает
ратно. 001B:010103AF 61 POPAD
001B:010103B0 7508 JNZ 010103BA ↵
А вот PE-compact преподносит нам настоящий сюрприз (JUMP↓)
(см. рис. 15)! Секции .text и .data объединены в одну боль- 001B:010103B2 B801000000 MOV EAX,00000001
001B:010103B7 C20C00 RET 000C
шую секцию с атрибутами (executable/readable/writeable/ ; ← адрес OEP
code/инициализированные данные), а секция .rsrc, кото- 001B:010103BA 6820640001 PUSH 1006420
; ← передача управления на OEP
рая не должна (по спецификации!) иметь права на запись, 001B:010103BF C3 RET
его все-таки имеет. Как говориться, с барского плеча ни-
чего не жалко. Зато свои собственные секции PE-compact Распаковав программу, ASPack заботливо выталки-
подчищает весьма аккуратно. вает сохраненные регистры из стека, вызывая всплы-
Что же касается UPX (см. рис. 16), то в целом он дви- тие отладчика, и мы видим тривиальный код, передаю-
жется по пути PE-compact: кодовую секцию с секций дан- щий управление на OEP «классическим» способом через
ных он не объединяет, но атрибуты им назначает те же са- «PUSH offset OEP/RET».

66
безопасность
Поиск исходной точки входа не затратил и десятка се- Таблица 1. Расшифровка атрибутов секций PE-файла
кунд! Ну разве не красота?! Код Значение
А теперь возьмем UPX и проверим, удастся ли нам 00000004h 16-битные смещения кода
провернуть этот трюк и над ним? Ведь мы же претендуем 00000020h code
на универсальный примем!
00000040h инициализированные данные

Листинг 9. Так начинается UPX 00000080h неинициализированные данные


00000200h комментарии или другая вспомогательная информация
; сохранить все регистры в стеке
001B:01011710 60 PUSHAD 00000400h оверлей
001B:01011711 BE00D00001 MOV ESI,0100D000
001B:01011716 8DBE0040FFFF LEA ↵ 00000800h не подлежит загрузке в память
EDI,[ESI+FFFF4000]
00001000h Comdat
001B:0101171C 57 PUSH EDI
00500000h выравнивание по умолчанию
Вот он, уже знакомый нам PUSHAD (см. листинг 9), со- 02000000h может быть выброшено из памяти
храняющий все регистры в стеке и восстанавливающий их
04000000h not cachable
непосредственно перед передачей управления на OEP. Да-
08000000h not pageable
ем команду «BPM ESP-4» и выходим из отладчика, пока он
10000000h shareable
не всплывет (см. листинг 10):
20000000h executable
Листинг 10. Так UPX передает управление на OEP 40000000h readable
001B:0101185E 61 POPAD 80000000h writeable
001B:0101185F E9BC4BFFFF JMP 01006420 ↵
(JUMP ↑)
Следующее всплытие отладчика (см. листинг 13), ни-
А вот и отличия! Передача управления осуществляется чуть не более осмысленное, чем предыдущее. Ясно толь-
командой «JMP 1006420h», где 1006420h – исходная точ- ко одно: в стек заталкивается регистр EBP вместе с кучей
ка входа. Похоже, что все упаковщики работают по одно- других регистров. Судя по всему, это распаковщик сохра-
му и тому же алгоритму и ломаются с реактивной скоро- няет их с одной лишь ему ведомой целью. Жмем <Ctrl+D>
стью. Но не будем спешить! Возьмем PE-compact и прове- и ждем дальше – что нам еще покажут?
рим свою догадку на нем.
Листинг 14. Переход на OEP
Листинг 11. Точка входа в файл, упакованный PE-compact :u eip-1
001B:01011A35 5D POP EBP
001B:01001000 B874190101 MOV EAX,01011974 001B:01011A36 FFE0 JMP EAX (01006420h)
001B:01001005 50 PUSH EAX
001B:01001006 64FF3500000000 PUSH DWORD PTR ↵
FS:[00000000] А вот на этот раз (см. листинг 14) нам повезло! Регистр
001B:0100100D 64892500000000 MOV ↵ EBP выталкивается из стека и вслед за этим осуществля-
FS:[00000000],ESP
ется переход на OEP посредством команды «JMP EAX».
Плохо дело (см. листинг 11)! PE-compact никаких ре- Мы все-таки достигли ее! Вот только ложные срабатывания
гистров вообще не сохраняет, а «PUSH EAX» использует- напрягают. Это мы, опытные хакеры, можем «визуально»
ся только затем, чтобы установить свой обработчик струк- отличить, где происходит передача на OEP, а где нет. С ав-
турных исключений. Тем не менее на момент завершения томатизацией в этом плане значительно сложнее – у ком-
распаковки указатель стека должен быть восстановлен, пьютера интуиция отсутствует напрочь. А ведь мы всего
следовательно, точка останова на «BPM ESP-4» все-таки лишь развлекаемся с давно побежденными упаковщика-
может сработать…. ми… Про борьбу с протекторами речь еще не идет.
Возьмем более серьезный упаковщик FSG 2.0 by
Листинг 12. Первое срабатывание точки останова на esp-4 bart/xt (http://xtreeme.prv.pl, http://www.wasm.ru/baixado.
001B:77F8AF78 FF7304 PUSH DWORD PTR ↵ php?mode=tool&id=345) и начнем его пытать.
[EBX+04]
001B:77F8AF7B 8D45F0 LEA EAX,[EBP-10] Листинг 15. Многообещающая точка входа в упаковщик FSG
001B:77F8AF7E 50 PUSH EAX
001B:01000154 8725B4850101 XCHG ESP,[010185B4]
Так, это срабатывание (см. листинг 12) явно ложное (су- 001B:0100015A 61 POPAD
001B:0100015B 94 XCHG EAX,ESP
дя по EIP, равному 77F8AF78h, мы находимся где-то внут- 001B:0100015C 55 PUSH EBP
ри KERNEL32.DLL, использующим стек для нужд произ- 001B:0100015D A4 MOVSB
водственной необходимости), нажимаем <Ctrl+D>, не же-
лая здесь больше задерживаться. Разочарование начинается c первых же команд (см. лис-
тинг 15). FSG переназначает регистр ESP и хотя через не-
Листинг 13. Кузьмич?! Где это я? которое время восстанавливает его вновь – особой радос-
; ← эта команда вызывает всплытие ти нам это не доставляет. Упаковщик очень интенсивно ис-
001B:010119A6 55 PUSH EBP пользует стек, поэтому точка останова на «BPM ESP-4» вы-
001B:010119A7 53 PUSH EBX
001B:010119A8 51 PUSH ECX дает миллион ложных срабатываний, причем большинство
001B:010119A9 57 PUSH EDI из них относится к циклам (см. листинг 16):

№5, май 2006 67


безопасность
Листинг 16. Фрагмент кода, генерирующий ложные В данном случае условная точка останова будет выгля-
срабатывания точки останова
деть так (см. листинг 18) :
001B:010001C1 5E POP ESI
001B:010001C2 AD LODSD Листинг 18. «Магическая» последовательность,
001B:010001C3 97 XCHG EAX,EDI приводящаяся нас к OEP
001B:010001C4 AD LODSD
001B:010001C5 50 PUSH EAX BPM ESP-4 IF EIP > 0X1001000 && EIP < 0X1011000
001B:010001C6 FF5310 CALL [EBX+10]

Необходимо внести какое-то дополнительное условие Невероятно, но после продолжительного молчания (а он


(к счастью, soft-ice поддерживает условные точки остано- и будет молчать, ведь стек распаковщиком используется
ва!), автоматически отсеивающее ложные срабатывания очень интенсивно) отладчик неожиданно всплывает непос-
или хотя бы их часть. Давайте подумаем! Если стартовый редственно в OEP (см. листинг 19)!
код упакованной программы начинается со стандартного
пролога типа «PUSH EBP/MOV EBP,ESP», то точка остано- Листинг 19. Отсюда начинается распакованный код
исходной программы
ва «BPM ESP 4 IF *(ESP)= = EBP» отсеет кучу мусора, но...
будет срабатывать на любом стандартном прологе нулевого 001B:01006420 55 PUSH EBP
001B:01006421 8BEC MOV EBP,ESP
уровня вложенности, а если упакованная программа имеет 001B:01006423 6AFF PUSH FF
оптимизированный пролог, в котором регистр EBP не ис- 001B:01006425 6888180001 PUSH 01001888
001B:0100642A 68D0650001 PUSH 010065D0
пользуется, наш «хитрый» прием вообще не сработает! 001B:0100642F 64A100000000 MOV ↵
А вот другая идея: допустим, управление на OEP переда- EAX,FS:[00000000]
001B:01006435 50 PUSH EAX
ется через «PUSH offset OEP/RETN», тогда на вершине сте- 001B:01006436 64892500000000 MOV ↵
ка окажется адрес возврата, что опять-таки легко запрог- FS:[00000000],ESP
раммировать в условной точке останова. Еще управление
может передаваться через «MOV EAX,offset OEP JMP EAX», Фантастика! А ведь FSG далеко не самый слабый упа-
что также легко проконтролировать и отследить, но вот про- ковщик, фактически граничащий с протекторами. Однако
тив «прямых» команд «JMP offset OEP» или «JMP [OEP]» ус- данная методика поиска OEP применима и к протекторам.
ловные точки останова бессильны. К тому же слишком мно- Выделяем секции, принадлежащие упакованной програм-
го вариантов получается. Пока их переберешь… Ложные ме, и устанавливаем точку останова на ESP – 4 в их грани-
срабатывания неизбежны! Попробуйте повоюйте с FSG… цах. Даже если стартовый код использует оптимизирован-
В какой-то момент кажется, что решения нет и наше дело ный пролог, первый же регистр (локальная переменная за-
труба, но это не так! талкиваемая в стек), вызовет срабатывание отладчика. Ес-
Все известные автору упаковщики (и значительная часть ли мы попадем не в саму OEP, то будет где-то очень-очень
протекторов), не желая перемешивать себя с кодом упако- близко от нее... А найти начало оптимизированного проло-
вываемой программы, размещаются в отдельной секции га можно и автоматом!
(или вне секции), расположенной либо перед упаковывае- Таким образом, мы получаем в свои руки мощное оружие
мой программой, либо после нее! Код упаковщика сосре- многоцелевого действия, которое легко реализовать в виде
доточен в одном определенном месте (нескольких местах) подключаемого модуля к LordPE, IDA Pro или самостоятель-
и никогда не пересекается с кодом распаковываемой про- ной утилиты. (Разработчикам упаковщиков на заметку: что-
граммы! Вроде бы очевидный факт. Сколько раз мы про- бы ослепить этот алгоритм, никогда не отделяйте код распа-
ходили мимо него, даже не задумываясь, что он позволяет ковщика от кода программы! Перемешивайте их в хаотич-
автоматизировать процесс поиска OEP! ном порядке на манер «мясного рулета», тогда определять
Взглянем на карту памяти еще раз (см. листинг 17): OEP по данной методике уже не получится, но методики, опи-
санные выше, по-прежнему будут работать, если, конечно
Листинг 17. Две секции упакованной программы не предпринять против них определенных усилий).
MAP32
NOTEPAD-fsg 0001 001B:01001000 00010000 CODE RW Заключение
NOTEPAD-fsg 0002 001B:01011000 00008000 CODE RW
Вот мы и научились находить OEP! Остается самая ма-
Мы видим две секции, принадлежащие упакованной про- лость – сбросить дамп программы на диск. Но здесь не все
грамме. Сам черт не поймет, какая из них секция кода, а ка- так просто, как может показаться вначале, и многие упа-
кая данных, тем более что должна быть еще одна секция – ковщики/проекторы этому всячески сопротивляются. В сле-
секция ресурсов, но коварный упаковщик каким-то образом дующей статье мы покажем, как реализовать универсаль-
скомбинировал их друг с другом, и мы не знаем каким, впро- ный дампер, обходящий, в том числе и продвинутый ме-
чем, код самого распаковщика, как мы уже видели, сосредо- ханизм динамической шифровки, известный под именем
точен в районе адреса 10001xxh, то есть вне этих двух сек- CopyMemII, – это когда вся программа зашифрована и от-
ций (отдельной секции для себя распаковщик создавать не дельные страницы памяти расшифровываются непосредс-
стал). Чтобы отсеять лишние всплытия отладчика, мы сосре- твенно перед их употреблением, а потом зашифровывают-
доточимся на диапазоне адресов, принадлежащих упако- ся вновь. Также мы коснемся вопросов восстановления таб-
ванной программе, то есть от начала первой секции до кон- лицы импорта и поговорим про распаковку DLL.
ца последней, автоматически контролируя значение регис- В конечном счете получится мощный генетический рас-
тра EIP на каждом срабатывании точки останова. паковщик, обходящий всех своих конкурентов.

68
bugtraq

Переполнение буфера в Mozilla Firefox


Программа: Mozilla Firefox 1.5.0.2, возможно, более ран-
Множественные уязвимости в Mac OS X ние версии.
Программа: Apple Macintosh OS X 10.4.6 и более ранние Опасность: Критическая.
версии. Описание: Уязвимость существует при обработке JavaScript-
Опасность: Высокая. кода в библиотеках js320.dll и xpcom_core.dll. Удаленный
Описание: 1. Переполнение динамической памяти сущес- пользователь может с помощью специально сформирован-
твует в функции BOMStackPop() в BOMArchiveHelper во ной веб-страницы вызвать переполнение буфера и выпол-
время декомпрессии злонамеренных ZIP-архивов. Уда- нит произвольный код на целевой системе. Пример:
ленный пользователь может вызвать отказ в обслужива-
<textarea cols="0" rows="0" id="x_OtherInfo" ↵
нии приложения. name="x_OtherInfo"></textarea>
2. Обнару жено не с колько оши бок в функ ц иях <script>
var textarea = document.getElementsByName ↵
KWQListIteratorImpl(), drawText() и objc_msgSend_rtp() в бра- ("x_OtherInfo");
узере Safari при обработке специально сформированных textarea=textarea.item(0);
var htmlarea = document.createElement("div");
HTML-тегов. Удаленный пользователь может вызвать отказ htmlarea.className = "htmlarea";
в обслуживании или выполнить произвольный код на це- textarea.parentNode.insertBefore(htmlarea, textarea);
var iframe = document.createElement("iframe");
левой системе. htmlarea.appendChild(iframe);
3. Переполнение динамической памяти обнаружено var doc = iframe.contentWindow.document;
doc.designMode = "on";
в функции ReadBMP() при обработке BMP. Удаленный поль- doc.open();
зователь может вызвать отказ в обслуживании приложения doc.write("<iframe src=’’>");
iframe.contentWindow.focus()
или выполнить произвольный код на целевой системе. doc.close();
4. Переполнение динамической памяти обнаружено </script>
</textarea>
в функции CFAllocatorAllocate() при обработке GIF-изобра-
жений. Удаленный пользователь может вызвать отказ в об- URL производителя: www.mozilla.com.
служивании приложения или выполнить произвольный код Решение: В настоящее время способов устранения уязви-
на целевой системе. мости не существует.
5. Уязвимость существует в функции _cg_TIFFSetField ()
при обработке специально сформированных TIFF-изобра-
жений. Удаленный пользователь может вызвать отказ в об- Множественные уязвимости в Oracle
служивании приложения. Программа: JD Edwards EnterpriseOne 8.x, JD Edwards
6. Переполнение динамической памяти существует OneWorld 8.x, Oracle Application Server 10g, Oracle
в функции PredictorVSetField() при обработке TIFF-изобра- Collaboration Suite 10.x, Oracle Database 10g, Oracle Database
жений. Удаленный пользователь может с помощью специ- 8.x, Oracle E-Business Suite 11i, Oracle Enterprise Manager 10.x,
ально сформированного TIFF-файла выполнить произволь- Oracle PeopleSoft Enterprise Tools 8.x, Oracle Pharmaceutical
ный код на целевой системе. Applications 4.x, Oracle Workflow 11.x, Oracle9i Application
URL производителя: www.apple.com/macosx. Server, Oracle9i Collaboration Suite, Oracle9i Database
Решение: В настоящее время способов устранения уязви- Enterprise Edition, Oracle9i Database Standard Edition, Oracle9i
мости не существует. Developer Suite.
Опасность: Высокая.
Описание: 1. Уязвимость существует из-за недостаточной
обработки входных данных в компоненте Log Miner (пакет
Целочисленное переполнение буфера dbms_logmnr_session). Удаленный пользователь может про-
в rsync извести SQL-инъекцию.
Программа: rsync 2.6.7, возможно более ранние версии. 2. Обнаружена ошибка проверки границ данных в про-
Опасность: Средняя. цедуре VERIFY_LOG, поставляемой совместно с пакетом
Описание: Целочисленное переполнение буфера обнару- sys.dbms_snapshot_utl. Удаленный пользователь может вы-
жено в функции receive_xattr() в патче xattrs.diff. Удален- звать переполнение буфера и выполнить произвольный код
ный пользователь может с помощью специально сформи- на целевой системе.
рованных расширенных атрибутов вызвать переполнение Примечание: Для некоторых платформ исправление уяз-
буфера и выполнить произвольный код на целевой систе- вимости №2 будет доступно только с 01/05/2006. Настоя-
ме. Для удачной эксплуатации уязвимости на системе дол- тельно рекомендуется запретить доступ к пакету sys.dbms_
жен быть установлен патч xattrs.diff. snapshot_utl до выхода пакета исправлений.
URL производителя: www.samba.org/rsync. URL производителя: www.oracle.com .
Решение: Установите последнюю версию (2.6.8) с сайта Решение: Установите исправление с сайта производите-
производителя. ля.

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

№5, май 2006 69


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

Используем средства библиотеки OpenSSL


для криптографической защиты данных
Часть 2

Владимир Мешков
Благодаря своим уникальным свойствам ассиметричные алгоритмы шифрования
применяются для защиты информации в тех областях, где использование симметричных
алгоритмов затруднительно. Это защита сообщений электронной почты, HTTP-трафика,
организация безопасного доступа для удаленного администрирования (Security Shell).
Самый популярный представитель семейства ассиметричных алгоритмов – алгоритм RSA.
Ассиметричные рантировать его доставку получате- Для шифрования информации, пред-
алгоритмы лю. Когда количество абонентов не- назначенной конкретному получате-
Симметричные алгоритмы наряду со велико и расположены они недалеко лю, используют уникальный открытый
всеми своими достоинствами имеют друг от друга (например, в пределах ключ получателя-адресата. Соответс-
большой недостаток: потеря секрет- одного города), гарантированно доста- твенно для дешифрования получатель
ного ключа грозит потерей всех дан- вить ключ абоненту достаточно прос- использует парный, создаваемый од-
ных, которые с помощью этого ключа то. А если абоненты находятся в раз- новременно с открытым, секретный
зашифрованы (имеется в виду не фи- ных городах или их количество очень ключ. Для передачи открытого ключа
зическая потеря, а потеря конфиден- велико? В таком случае организация от получателя к отправителю секрет-
циальности). надежного канала доставки ключевых ный канал не нужен.
Использование симметричной схе- данных – задача весьма непростая,
мы шифрования требует передачи од- требующая значительных затрат. Алгоритм RSA. Теория
ного и того же ключа двум и более сто- Для решения в первую очередь Криптосистема RSA, пред ложен-
ронам по независимому и надежно- задачи распределения ключей была ная в 1977 году Ривестом (R. Rivest),
му каналу. Этот канал должен исклю- выдвинута концепция двухключевой Шамиром (A. Shamir) и Адлеманом
чать возможность утечки информа- (или ассиметричной) криптографии. (L. Adleman), предназначена для шиф-
ции, обеспечивать полный контроль Для шифрования и дешифрова- рования и цифровой подписи. В насто-
над процессом передачи ключа и га- ния применяются различные ключи. ящее время RSA является наиболее

70
безопасность
распространенной криптосистемой – стандартом де-факто полнялось уравнение [2]. Для этого с помощью алгоритма
для многих криптографических приложений. Криптосисте- Эвклида ищем значения d и v, удовлетворяющие соотно-
ма RSA широко применяется в составе различных стандар- шению [4]. Суть алгоритма сводится к проведению после-
тов и протоколов Интернета, включая PEM, S/MIME, PEM- довательности операций деления с остатком. В соответс-
MIME, S-HTTP и SSL. твии с алгоритмом находим частное и остаток от деления
Криптографическая стойкость алгоритма RSA основа- ϕ(n) на e:
на на трудоемкости разложения на множители (факториза-
ции) больших чисел. Термин «большие» означает, что чис- 192 = 7 * 27 + 3
ло содержит 100~200 и более двоичных разрядов. Откры-
тый и секретный ключи являются функциями двух больших Частное равно 27, остаток – 3. Теперь последователь-
простых чисел. Рассмотрим на примере, как выполняется но делим делитель на остаток (т. е. 7 на 3 в данном случае)
генерация ключей алгоритма RSA, но вместо больших чи- до тех пор, пока в остатке не получим единицу:
сел для простоты изложения будем использовать малень-
кие десятичные. 7 = 3 * 2 + 1
Для генерации парных ключей используются два слу-
чайных простых числа, p и q. Вычисляется произведе- А теперь распишем процесс получения остатка в об-
ние этих чисел n и значение функции Эйлера от числа n ратном порядке:
по формуле:
1 = 7 – 3 * 2 = 7 – (192 – 7 * 27) * 2 = 7 – (192 * 2 – 7 * 2 * 27)
φ(n)=(p-1)(q-1)[1]
Раскроем скобки:
Далее выбирается ключ шифрования e такой, что e
и значение функции Эйлера ϕ(n) являются взаимно просты- 1 = 7 + 7 * 54 – 192 * 2 = 7 * 55 – 192 * 2
ми числами, т.е. числами, не имеющими общих делителей,
кроме единицы (единицу еще называют тривиальным дели- В итоге получаем искомые числа d=55 и v=2. Числа
телем). Теперь необходимо найти значение ключа дешиф- d=55 и e=7 являются взаимно обратными по модулю 192,
рования d такое, чтобы выполнялось равенство: что подтверждает равенство:

ed = 1(mod φ(n)) [2] 7 * 55 = 1(mod 192)

или Учитывая, что e=7 – это наш ключ шифрования, то чис-


ло d=55 будет ключом дешифрования.
d = e-1(mod φ(n)) [3] Теперь разберемся, как выполняются операции шифро-
вания и дешифрования информации по алгоритму RSA.
Уравнение [2] означает, что остаток от деления произ- Для шифрования исходное сообщение необходимо
ведения чисел e и d на значение функции Эйлера ϕ(n) дол- представить в виде последовательности чисел, содержа-
жен быть равен 1. щихся в интервале от 0 до n. Для примера, разобьем аб-
Условие [2] выполняется только в том случае, если e бревиатуру ABC на числа в интервале (0,221). Для этого
и ϕ(n) являются взаимно простыми числами. Число d назы- достаточно каждый символ записать в десятичном пред-
вается взаимно обратным к e по модулю ϕ(n). Уравнение [2] ставлении:
эквивалентно обнаружению таких d и v, что:
A=41h=65, B=42h=66, C=43h=67
ed + φ(n)v = 1 [4]
Шифрование сводится к вычислению:
Поиск обратного значения числа по модулю выполняет-
ся при помощи алгоритма Эвклида. Этот алгоритм позволя- Ci = Mie(mod n)
ет найти наибольший общий делитель (НОД) двух чисел.
Рассмотрим пример. Пусть у нас имеются два простых Здесь Mi – это i-й блок сообщения, Ci – результат крип-
числа: p=13 и q=17. Найдем произведение этих чисел: топреобразования. Выражаясь простым языком, мы долж-
ны возвести значение Mi в степень e и найти остаток от де-
n = 13 * 17 = 221 ления на n.
Зашифруем нашу последовательность (65,66,67), зная,
и значение функции Эйлера от числа n=221: что e=7 и n=221:

φ(n)=(p-1)(q-1)=(13-1)(17-1)=192 C1 = 657(mod 221) = 91


C2 = 667(mod 221) = 144
C3 = 677(mod 221) = 50
Теперь выберем такое число e, чтобы оно было взаим-
но простым с ϕ(n). Таким числом является, например, e=7. В зашифрованном виде наша последовательность бу-
Далее надо найти обратное значение числа e, чтобы вы- дет выглядеть как (91,144,50).

№5, май 2006 71


безопасность
Для дешифрования необходимо выполнить следую-  int BN_mul (BIGNUM *r, BIGNUM *a, BIGNUM *b,
щую операцию: BN_CTX *ctx) – умножает число a на число b и сохраняет
результат в r (r=a*b). Последний параметр BN_CTX *ctx
Mi = Cid(mod n) используется для хранения промежуточных результатов
вычисления (а BN_CTX is a structure that holds BIGNUM
Дешифруем последовательность (91,144,50) при d=55 temporary variables used by library functions);
и n=221:  int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *a,
const BIGNUM *d, BN_CTX *ctx) – делит число a на b,
M1 = 9155(mod 221) = 65 частное сохраняется в dv, остаток – в rem (dv=a/b,
M2 = 14455(mod 221) = 66
M3 = 5055(mod 221) = 67 rem=a%b).

Таким образом, исходная последовательность восста- Подробную информацию по функциям типа BN_* смот-
новлена. рите на странице руководства man bn.
Шифрование RSA выполняется намного эффективнее, Все ассимметричные алгоритмы, реализованные в
если правильно выбрать значение e. Чаще всего исполь- библиотеке, такие как RSA, DSA, Diffie-Hellman, использу-
зуются 3, 17 и 65537. Стандарт X.509 рекомендует 65537, ют эти функции.
PEM – 3, PKCS#1 – 3 или 65537.
Ознакомившись с теорией, приступим к рассмотрению Генерация ключей алгоритма RSA
средств, предоставляемых библиотекой для защиты ин- Как в и случае симметричных алгоритмов, для криптогра-
формации по RSA алгоритму. фической защиты информации по алгоритму RSA необхо-
димо вначале сгенерировать открытый и секретный клю-
Функции библиотеки для защиты чи. Генерацию ключей алгоритма RSA выполняет функция
информации по RSA-алгоритму RSA_generate_key следующего вида:
Прежде чем изучить вышеозначенные функции, приоста-
новимся на минуту и подумаем – если мы оперируем с чис- RSA *RSA_generate_key(int num, unsigned long e, ↵
void (*callback)(int,int,void *), void *cb_arg);
лами, разрядность которых составляет ~200 битов, то мы
должны их где-то хранить. А ведь их надо не только хранить, Параметры функции:
но и проводить над ними различные математические опера-  int num – размер ключа в битах;
ции, такие как умножение, деление, возведение в степень  unsigned long e – это то самое число e, с которым мы
и т. п. Очевидно, что стандартные типы языка программи- познакомились в пункте 2, когда рассматривали теоре-
рования Си, например, long или double long, и прямое ис- тические основы алгоритма RSA. Этот параметр обыч-
пользование функций стандартной библиотеки этого язы- но принимает значения 3, 17 или 65537.
ка, таких как «+», «*» и т. п. для этих целей совершенно не-
пригодны. Поэтому библиотека OpenSSL содержит ряд спе- Два последних параметра, указатели на функцию
циальных функций для работы с большими числами, раз- (*callback) и void *cb_arg, служат для предоставления об-
рядность которых превышает разрядность адресной шины ратной связи (feedback) с процессом генерации ключевой
и регистров процессора. Для хранения этих чисел исполь- информации. Это, как правило, индикация хода выполне-
зуется динамическая память. Базовым объектом библио- ния операции генерирования ключей. Например, если мы
теки для работы с такими числами является объект типа выполним команду:
BIGNUM. Этот тип определен в файле openssl/bn.h:
openssl genrsa –out outfile 2048
#define BN_ULONG unsigned char
typedef struct bignum_st
{ то увидим, как на экране начнут появляться символы «.»
/* Pointer to an array of 'BN_BITS2' bit chunks. */ и «+», отображающие процесс формирования ключей. Най-
BN_ULONG *d;
int top; /* Index of last used d +1. */ дем в файле apps/genrsa.c исходных текстов библиотеки
/* The next are internal book keeping for bn_expand. */ вызов функции RSA_generate_key:
int dmax; /* Size of the d array. */
int neg; /* one if the number is negative */
int flags; rsa=RSA_generate_key(num,f4,genrsa_cb,bio_err);
} BIGNUM;

Приведем краткий перечень функций библиотеки Третий параметр – функция genrsa_cb – находится в этом
для работы с большими числами: же файле и имеет следующий вид:
 BIGNUM * BN_new(void) – создает объект типа BIGNUM
и возвращает указатель на него; static void MS_CALLBACK genrsa_cb(int p, int n, void *arg)
{
 int BN_add (BIGNUM *r, const BIGNUM *a, const char c='*';
BIGNUM *b) – суммирует числа a и b, результат поме-
if (p == 0) c='.';
щает в r (r=a+b); if (p == 1) c='+';
 int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM if (p == 2) c='*';
if (p == 3) c='\n';
*b) – выполняет операцию вычитания числа b из числа BIO_write((BIO *)arg,&c,1);
(void)BIO_flush((BIO *)arg);
а, результат сохраняется в r (r=a-b); 
72
безопасность

№5, май 2006 73


безопасность
#ifdef LINT
p=n; /* Генерируем ключи */
#endif rsa = RSA_generate_key(bits, RSA_F4, NULL, NULL);
}
/* Формируем контекст алгоритма шифрования */
OpenSSL_add_all_ciphers();
Как видно из текста этой функции, именно она выводит cipher = EVP_get_cipherbyname("bf-ofb");
на экран символы «.» и «+», отображающие ход операции /* Получаем из структуры rsa открытый и секретный ключи
генерирования ключей. * и сохраняем в файлах. Секретный ключ шифруем с помощью
* парольной фразы «hello»
Результаты работы функции RSA_generate_key в виде */
открытого и закрытого ключа сохраняются в структуре типа PEM_write_RSAPrivateKey(priv_key_file, rsa, cipher, ↵
NULL, 0, NULL, "hello");
RSA (см. include/openssl/rsa.h). Эти ключи необходимо из- PEM_write_RSAPublicKey(pub_key_file, rsa);
влечь и записать в файлы для дальнейшей работы с ними.
/* Освобождаем память, выделенную под структуру rsa */
Делается это при помощи следующих двух функций: RSA_free(rsa);
}
int PEM_write_RSAPublicKey(FILE *fp, RSA *x);

int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, ↵ Если в вызове функции PEM_write_RSAPrivateKey мы


const EVP_CIPHER *enc, unsigned char *kstr, ↵ вместо «hello» оставим NULL, то библиотека самостоятель-
int klen, pem_password_cb *cb, void *u);
но попросит наc ввести парольную фразу для шифрования
Первая функция записывает в файл fp открытый ключ, секретного ключа.
который находится в структуре типа RSA, на которую указы-
вает параметр x. Вторая функция изымает секретный ключ Шифрование и дешифрование по алгоритму RSA
из структуры x и записывает его в файл fp. Как правило, Сформировав ключи, можно приступать к шифрованию дан-
секретный ключ зашифровывают, что способствует повы- ных. Для этого используется функция RSA_public_encrypt,
шению его защищенности. Выбор алгоритма шифрования которая имеет следующий прототип:
выполняется с помощью параметра const EVP_CIPHER *enc
(контекст алгоритма шифрования, см. первую часть статьи). int RSA_public_encrypt(int flen, unsigned char *from, ↵
unsigned char *to, RSA *rsa, int padding);
Но для шифрования необходимо задать ключевую фразу
(пароль), и сделать это можно несколькими способами. Эта функция шифрует flen байт из буфера, на который
Можно указать в параметре cb (сокращение от callback) указывает параметр from, используя ключ из структуры
адрес функции, которая будет запрашивать пароль. Ес- RSA * rsa, и помещает результат в буфер to. Размер этого
ли указатель kstr не будет равен NULL, то в качестве па- буфера должен быть равен размеру ключа, который опре-
роля будут использованы первые klen символов из масси- деляется при помощи функции RSA_size(RSA *).
ва, на который указывает kstr, при этом параметр cb игно- Параметр padding используется для выбора режима вы-
рируется. Если cb == NULL, а параметр u не равен NULL, равнивания данных. В большинстве случаев используется
то u интерпретируется как строка, заканчивающаяся нулем, значение RSA_PKCS1_PADDING, что соответствует стан-
и эта строка используется как пароль. Также можно все па- дарту PKCS#1. При использовании этого режима размер
раметры (kstr, cb, u) установить в NULL, и библиотека за- буфера from должен быть не меньше (RSA_size(rsa) – 11),
просит у нас парольную фразу самостоятельно, используя т.е. на 11 байт меньше размера ключа. Размер выходных
свои внутренние механизмы. данных всегда будет кратен длине ключа.
Обобщим все вышесказанное в виде фрагмента про- Следующая программа демонстрирует использование
граммы, генерирующей ключи по алгоритму RSA, при этом функции RSA_public_encrypt для шифрования данных.
секретный ключ шифруется по алгоритму Blowfish с об-
ратной связью по выходу. Длина ключа – 2048 бит. В це- Листинг 2. Шифрование данных по алгоритму RSA
лях экономии места код, выполняющий обработку оши- #include <openssl/rsa.h>
бок, пропущен. #include <openssl/pem.h>

void main(int argc, char **argv)


Листинг 1. Генерация ключей алгоритма RSA {
/* структура для хранения открытого ключа */
#include <stdio.h> RSA * pubKey = NULL;
#include <openssl/rsa.h> unsigned char *ptext, *ctext;
#include <openssl/pem.h> FILE * pub_key_file = NULL;

/* Имена ключевых файлов */ /* Открываем входной и создаем выходной файлы */


#define PRIVAT "./privat.key" int inf = open(argv[1], O_RDWR);
#define PUBLIC "./public.key" int outf = open("./rsa.file", ↵
O_CREAT|O_TRUNC|O_RDWR, 0600);
void main()
{ /* Считываем открытый ключ */
/* указатель на структуру для хранения ключей */ pub_key_file = fopen(PUBLIC, "rb");
RSA * rsa = NULL; pubKey = PEM_read_RSAPublicKey(pub_key_file, NULL, ↵
unsigned long bits = 2048; /* длина ключа в битах */ NULL, NULL);
FILE *priv_key_file = NULL, *pub_key_file = NULL;
/* контекст алгоритма шифрования */ /* Определяем длину ключа */
const EVP_CIPHER *cipher = NULL; int key_size = RSA_size(pubKey);
ptext = malloc(key_size);
priv_key_file = fopen(PRIVAT, "wb"); ctext = malloc(key_size);
pub_key_file = fopen(PUBLIC, "wb");

74
безопасность
/* Шифруем содержимое входного файла */ inf = open(argv[1], O_RDWR);
while(1) { outf = open("./test.rsa", ↵
inlen = read(inf, ptext, key_size - 11); O_CREAT|O_TRUNC|O_RDWR, 0600);
if(inlen <= 0) break;
/* Открываем ключевой файл и считываем секретный ключ */
outlen = RSA_public_encrypt(inlen, ptext, ctext, ↵ priv_key_file = fopen(PRIVAT, "rb");
pubKey, RSA_PKCS1_PADDING); privKey = PEM_read_RSAPrivateKey(priv_key_file, ↵
if(outlen != RSA_size(pubKey)) exit(-1); NULL, NULL, NULL);

write(outf, ctext, outlen); /* Определяем размер ключа */


} key_size = RSA_size(privKey);
} ctext = malloc(key_size);
ptext = malloc(key_size);
Дешифрование данных выполняет функция /* Дешифруем файл */
RSA_private_decrypt: while(1) {
inlen = read(inf, ctext, key_size);
if(inlen <= 0) break;
int RSA_private_decrypt(int flen, unsigned char *from, ↵
unsigned char *to, RSA *rsa, int padding); outlen = RSA_private_decrypt(inlen, ctext, ptext, ↵
privKey, RSA_PKCS1_PADDING);
Эта функция расшифровывает flen байт из буфера from, if(outlen < 0) exit(0);
используя ключ rsa, и записывает результаты в буфер to. write(outf, ptext, outlen);
Следующий фрагмент программы демонстрирует ис- }
}
пользование функции RSA_private_decrypt для дешифро-
вания данных. Работоспособность программ была проверена для ОС
Linux Slackware 10.2, библиотека OpenSSL версии 0.9.7c
Листинг 3. Дешифрование файла, зашифрованного Итак, вы разобрались с теоретическими основами алго-
по RSA-алгоритму
ритма RSA и научились использовать некоторые функции
#include <openssl/rsa.h> библиотеки для защиты информации по этому алгоритму.
#include <openssl/pem.h>
Я говорю «некоторые», потому что этих функций в библи-
void main(int argc, char **argv) отеке очень много, и описать их в одной статье практичес-
{
RSA *privKey = NULL; ки невозможно. Поэтому основным источником изучения
FILE *priv_key_file; средств библиотеки были и остаются официальная доку-
unsigned char *ptext, *ctext;
ментация от разработчиков, а также любые исходные тек-
/* Открываем входной и создаем выходной файл */ сты программ, использующих эту библиотеку.

№5, май 2006 75


IMHO

Лицензию? Вам какую?

Сергей Супрунов
Как часто мы слышим, что открытых лицензий на программное обеспечение развелось
слишком много. BSD, Apache, CDDL, GPL2/3, LGPL… Даже для юристов это настоящий кошмар.
А что же тогда говорить о нас, простых (хотя и системных) администраторах?

Беглый взгляд храняется на прежнем уровне, и про- Традиционно в лицензиях на ком-


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

76
IMHO
мы, не создавая для пользователя ни-
каких ограничений, решили бороться Отказ от ответственности не подразумевают никаких гарантий. Автор
за свободу своих детищ тем же оружи- Настоящая статья публикуется в соответс- не отвечает за последствия применения,
ем, которое использовалось для огра- твии с принципом «как есть» (а не «как пить неправильного применения или неприме-
ничения этой свободы – лицензиями. дать»), что означает возможность нали- нения материала данной статьи, включая
Но, в противоположность коммерчес- чия в ней ошибок и заблуждений, хотя ав- разбитые вследствие неосторожного цити-
ким лицензиям, здесь явно указыва- тор и стремился этого избежать. Сам факт рования в присутствии идейных оппонен-
лось право пользователя распростра- публикации, а также указание на послед- тов носы (но не ограничиваясь этим). Шут-
нять программы любым способом, ис- ней странице журнала, что «За содержа- ливый тон настоящего раздела не подразу-
пользовать в любых целях, модифици- ние статьи ответственность несёт автор», мевает шутливость всего изложения.
ровать код и т. д.
Наиболее известной свободной нейшего распространения, модифика- Формально всё это никоим обра-
лицензией является разработанная ции, использования. зом не ущемляет прав разработчика
в FSF (Free Software Foundation) лицен- открытой версии – он остаётся авто-
зия GNU GPL (General Public License). GNU LGPL (Lesser GPL) ром и владельцем кода и может его
Однако помимо неё существует мас- «Ограниченная» GPL, регламентиру- по-прежнему развивать и распростра-
са других лицензий, в которых и по- ющая права на программные библи- нять, как ему вздумается. То есть все
пытаемся разобраться хотя бы в об- отеки. Содержит ряд пунктов, допус- возражения против BSD сводятся, по
щих чертах. кающих компоновку данной библио- сути, к апелляции к морали. Впрочем,
теки с программами, распространяе- это личное право разработчика – пос-
Представляем главных мыми по другим лицензиям. Разработ- тупать со своим детищем так, как ему
игроков чик библиотеки (или её модификации) вздумается.
Сначала коротко познакомимся с ос- вправе перевести её на лицензию GPL,
новными положениями наиболее рас- однако обратная процедура уже будет Apache
пространённых открытых лицензий. невозможна. Достаточно либеральная, и в то же вре-
мя хорошо проработанная лицензия
GNU GPL2 (GNU General Public BSD (чувствуется «рука мастера» – перво-
License) Пожалуй, самая простая и демократич- начально к ней приложили руку юрис-
Это детище Ричарда Столлмана ная открытая лицензия, занимающая ты корпорации IBM). Позволяет моди-
(Richard Stallman), пришедшее в 1991 всего несколько строк. Её смысл сво- фицировать и распространять ПО как
году на смену 1-й версии, имеет чёт- дится к тому, что «делайте с програм- в открытых кодах, так и в двоичном ви-
ко поставленную задачу – не допус- мой всё, что хотите, только не говори- де. Помимо прав на сам программный
тить «закрытия» программ, которые те, будто это вы её написали». То есть продукт (на его использование, моди-
первоначально были выпущены как единственное предъявляемое ею тре- фикацию, распространение), лицен-
свободные. GPL предоставляет право бование – сохранение уведомлений зия регламентирует и вопросы, свя-
свободно использовать, модифици- об авторских правах. Таким образом, занные с сопутствующими патента-
ровать и распространять программу, лицензия BSD не подпадает под поня- ми – они также должны передаваться
при обязательном условии, что вмес- тие Copyleft, поскольку не запрещает вместе с программой. Предусмотрена
те с ней будут распространяться и её ограничивать свободу этого или про- контрмера на случай судебных претен-
исходные коды, включая все сделан- изводных продуктов. Сторонники GPL зий к разработчику ПО, распространя-
ные изменения, и по той же самой ли- часто критикуют BSD за то, что она емого под лицензией Apache, – в этом
цензии. Допускается не включать ис- позволяет любому «украсть» разра- случае лицо, предъявившее такие пре-
ходные коды в дистрибутив при усло- ботку. Действительно, если хорошая тензии, автоматически теряет передан-
вии, что их можно будет свободно полу- программа распространяется под BSD- ные ему права в отношении программы
чить в дальнейшем (например, скачав лицензией, то существует ненулевая или сопутствующих патентов.
с ftp-сервера). Формально лицензия вероятность, что какая-нибудь круп-
не требует от разработчика или дист- ная корпорация возьмёт этот код и бу- Artistic
рибьютора распространять программу дет распространять программу как за- Под этой лицензией распространяют-
бесплатно, но в свете обязательности крытую под коммерческой лицензией. ся такие программы, как Razor, Perl
предоставления исходных кодов взи- Очевидно, что у такой компании будет (этот проект использует слегка моди-
мание платы за «сборку» в какой-то гораздо больше маркетинговых воз- фицированную версию) и ряд других.
степени теряет смысл. можностей по продвижению и прода- Изменённый продукт может распро-
Здесь нужно сказать, что с GPL же программы – большинство пользо- страняться только в случае публика-
прочно связано ещё одно понятие – вателей могут даже и не догадывать- ции в доступном виде модифициро-
Copyleft. Это положение (в противо- ся, что существует такая же програм- ванных исходных кодов либо при ус-
положность Copyright), согласно ко- ма, но абсолютно бесплатная. К то- ловии, что все изменённые файлы бу-
торому распространитель (т.е. право- му же лицензия BSD не обязывает де- дут переименованы. В принципе позво-
обладатель) программного продукта литься с сообществом модифициро- ляет использовать программный про-
не вправе ограничивать свободу даль- ванным кодом. дукт в коммерческих программах. FSF

№5, май 2006 77


IMHO
не очень жалует эту лицензию за ту- Qt Public License, открытые лицензии  Доба в ле н пунк т, за пре щ аю -
манность её формулировок и относит Intel, Jabber, Zope, и т. д. щий использовать управление
её к несовместимым с GPL (за исклю- Нужно заметить, что есть ещё цифровыми правами (Digital
чением модифицированной лицензии, и лицензии на документацию (на- Restriction Management, DRM).
под которой распространяется Perl). иболее распространённой является DRM – это законодательно защи-
опять-таки лицензия GNU – FDL (Free щаемые ограничения на доступ
CDDL (Common Development Documentation License)). Так что выби- к информации (например, требо-
and Distribution License) рать есть из чего. вание специального ключа). В FSF
Лицензия, разработанна я в Sun считают, что подобные ограничения
Microsystems. Требует распростра- Там, за горизонтом… противоречат духу Open Source, где
нения программы вместе с правами Естественно, нельзя обойти внима- любой пользователь вправе отклю-
на все сопутствующие патенты и толь- нием и GNU GPL3. Что там ещё при- чить любую функцию (в том числе
ко в исходных кодах, с обязательным думал Столлман на благо всего чело- и ту, которая отвечает за ограниче-
уведомлением обо всех сделанных из- вечества? ние доступа). Кстати, есть мнение,
менениях. В двоичном виде допускает- Вторая версия GPL, честно про- что отсутствие поддержки DRM
ся распространение по другой лицен- служившая 15 лет, морально устарела. в Linux может подорвать позиции
зии, при условии, что это не ограничи- В ней не предусмотрена возможность этой ОС на рынке домашних раз-
вает свободу доступа к исходному коду. распространять программный продукт влекательных систем, поскольку
Как и в лицензии Apache, предусмот- посредством Интернета (имеется в ви- лишит возможности пользовате-
рен отзыв всех переданных прав на ПО ду не скачивание дистрибутивов, а ис- лей работать с защищёнными муль-
и патенты в случае судебных претен- пользование ПО как интернет-серви- тимедиа-файлами. Впрочем, в FSF
зий к разработчику или распространи- са). В ней ничего не говорится о патен- настроены на этот счёт более опти-
телю. В настоящее время под этой ли- тах, так что уже нельзя сказать, что она мистично.
цензией распространяется, в частнос- надёжно защищает право программы  Появилась возможность расши-
ти, OpenSolaris. Впрочем, как пишет оставаться свободной. рять лицензию некоторыми до-
в своём блоге Джонатан Шварц, пре- И вот, в конце 2005 года FSF объ- полнительными требованиями
зидент компании Sun, рассматрива- явил о намерении обновить свою ос- (например, требованием указы-
ется перевод OpenSolaris на двойную новную лицензию. В настоящее вре- вать авторские права исходного
лицензию CDDL/GPL3 (когда послед- мя черновой вариант GPL3 вынесен продукта во всех модифицирован-
няя будет опубликована), чтобы обес- на всеобщее обсуждение, а его при- ных). Подобные дополнения долж-
печить совместимость с GPL и тем са- нятие предполагается в конце этого – ны помочь в вопросах совмести-
мым получить преимущества от вза- начале следующего года. мости GPL с другими свободными
имного обмена кодом с Linux. При беглом прочтении бросаются лицензиями.
в глаза следующие нововведения:
Характерной особенностью прак-  Вводится явное разделение по- Для тех, кто использовал GPL
тически всех свободных лицензий нятий «распространение» и «лич- с формулировкой «вы вправе распро-
(да и коммерческие зачастую «гре- ное использование». На послед- странять её и/или модифицировать
шат» этим) является обязательное ука- нее не налагается практически в соответствии с условиями версии 2
зание раздела, касающегося отказа от никаких ограничений. Если учесть, либо, по вашему выбору, с условиями
ответственности. То есть разработчик что «лично использовать» програм- более поздней версии GNU GPL, опуб-
лицензируемой программы явно указы- му можно и на уровне такой корпо- ликованной FSF» никаких проблем
вает, что не несёт никакой ответствен- рации, как Novell, это достаточно с переходом на версию 3 возникнуть не
ности за ошибки в работе программы, сильное послабление, позволяю- должно. Однако если продукт распро-
за ущерб вследствие неправильной щее вносить нужные вам модифи- странялся строго по GPL2 (как это име-
работы ПО, и т. д. Для открытых про- кации и ни с кем ими не делиться. ет место быть в случае с ядром Linux),
грамм, которые легко могут модифи-  Вводится понятие «Полностью для смены лицензии требуется согла-
цироваться без ведома разработчика, соответствующего исходного сие всех, кто так или иначе участво-
такое положение является вполне ес- кода», включающее помимо са- вал в разработке данного программно-
тественным и понятным. Ну и, с другой мих исходников также код, необ- го продукта. Перспектива отыскивать
стороны, зачем брать на себя какую-то ходимый для успешной компиля- каждого, кто десять лет назад внёс
ответственность, если это зачастую не ции и запуска программы (make- в ядро три строчки кода, и испраши-
приносит никакой прибыли? файлы, конфигурационные фай- вать у него согласие на смену лицен-
Помимо представленных, есть мас- лы, необходимые ключи и т. д.). зии, естественно, не могла обрадовать
са других лицензий (организацией  Регламентируется использова- разработчиков ядра Linux, что и стало
OSI одобрено более 60), порой охва- ние патентов. Все права на со- причиной довольно резких заявлений
тывающих разработки одной компа- путствующие патенты на програм- Торвальдса о том, что Linux останется
нии, или даже одну-единственную про- му должны передаваться вместе на GPL2. Впрочем, жизнь не стоит на
грамму. К таким можно отнести лицен- с программой для свободного ис- месте, и когда-нибудь меняться при-
зии IBM, Apple, Eclipse Public License, пользования. дётся. Поживём – увидим.

78
IMHO
Кому и зачем всё это надо
Казалось бы, ну есть какая-то про- Free as a beer? Во втором же случае понимается сво-
грамма, ну не берут денег за то, что я У нас таких проблем не возникает – поня- бода программы в терминах лицензии
пользуюсь ею… Ну вот и славненько! тия «бесплатное» и «свободное» ПО до- GPL.
Какая мне разница, что именно там за статочно чётко разделяются на лингвис- Последнее время наметилась тен-
лицензия? тическом уровне. В английском же язы- денция к использованию вместо термина
С точки зрения обычного пользова- ке ситуация несколько иная, и говоря «free software как Кипелов» формулировки
теля, так оно и есть. По большому счё- «free software», приходится уточнять, име- «open source software» (открытое програм-
ту рассмотренные лицензии не явля- ется в виду «free as a beer» (бесплатное, мное обеспечение, ПО с открытым кодом),
ются так называемыми EUL (End User как пиво; нам бы такую аналогию в бли- что выглядит несколько лучше, но тоже до-
License), т.е. они не столько регламен- жайший ларёк) или «free as Kipelov» (пом- пускает неоднозначность (можно открыть
тируют права конечного пользователя, ните: «Я свободен, словно птица в небе- коды, но сопроводить это такой лицензией,
сколько права разработчиков и рас- сах…»). «Free» в первом контексте подра- что эти коды будет страшно трогать).
пространителей, которые будут ис- зумевает бесплатность программы, но при Возможно, со временем гибкий и изво-
пользовать данную программу в сво- этом её использование может быть сильно ротливый человеческий ум придумает-та-
их продуктах или предоставлять услу- ограничено (только для личного пользова- ки однозначные формулировки, пока же
ги на основе данного продукта. ния, для ознакомительных целей, без пра- будем уточнять: «Free as a beer?», «Open
Системный администратор в ка- ва декомпиляции и т. д.). as Linux?».
кой-то мере тоже является конечным
пользователем. То есть его деятель- двойного лицензирования. Некоторые они дублируют друг друга, отличаясь
ность направлена не на модификацию производители, желая обеспечить бо- лишь незначительными особенностя-
и распространение той или иной про- лее широкие возможности использо- ми, но преследуя одинаковые (по край-
граммы, а на соответствующую её на- вания своей программы, выпускают её ней мере, схожие) цели. Несовмести-
стройку и дальнейшее сопровождение. под несколькими лицензиями. В качес- мость некоторых положений несколь-
Конечно, зачастую настройка связа- тве примера можно привести PC-BSD, ко осложняет жизнь дистрибьюторам
на с модификацией продукта, но пос- распространяющуюся под лицензиями и разработчикам, желающим объеди-
кольку результат этой модификации GPL и BSD. Или, например, MySQL, ко- нить в своём продукте несколько сто-
редко выходит за пределы «личного» торая выпускается под GPL и под ком- ронних программ. Но в целом сущес-
использования, то вопросы лицензи- мерческой лицензией. твующие лицензии неплохо уживают-
рования здесь тоже особого значе- Однако помимо прямой роли ли- ся друг с другом.
ния не имеют. цензий на те или иные программы не- Тем не менее сокращение их чис-
А вот для разработчиков (даже ес- льзя забывать и о косвенных последс- ла было бы на руку как разработчи-
ли разработка заключается в сборке твиях. Ведь это непосредственным об- кам, так и конечным пользователям,
готовых программ и библиотек в один разом влияет на желание программис- поскольку сделало бы работу с раз-
дистрибутив) вопросы лицензирова- тов заниматься разработкой открытых личным ПО более прозрачной и понят-
ния приобретают большое значение. программ и их распространением. ной. Так что будем надеяться, что GPL
Как вы видите, большинство откры- С этой точки зрения лицензии, со- третьей версии удастся сделать при-
тых лицензий достаточно либераль- ответствующие «Copyleft», такие как влекательной для большинства раз-
ны, и особых проблем с использова- GPL, должны быть более привлека- работчиков, что будет стимулировать
нием «покрываемых» ими продуктов тельны для разработчиков, посколь- отказ от различных «доморощенных»
возникнуть не должно. Единственное, ку гарантируют, что никто не сможет лицензий.
нужно не забывать о вопросах совмес- воспользоваться результатами их тру-
тимости разных лицензий. Например, да в своих целях. Кроме того, «обрат- Ссылки:
вы не можете распространять свою ная связь» в виде обязательного пре- 1. Лицензия GNU GPL2 – http://www.gnu.
программу под лицензией, не требу- доставления сообществу модифици- org/licenses/gpl.html.
ющей открывать исходный код, ес- рованных исходных кодов способс- 2. Лицензия GNU LGPL – http://www.gnu.
ли она основана или включает в себя твует более быстрому развитию про- org/copyleft/lesser.html.
программный продукт, распростране- граммы, поскольку подобный обмен 3. Черновик GNU GPL3 – http://gplv3.fsf.
ние которого требует соблюдения от- кодом позволяет использовать наилуч- org/draft.
крытости. Парадоксально, но лицен- шие варианты. 4. Лицензия Apache – http://apache.org/
зию QPL (Qt Public License), под кото- С другой стороны, лицензии в сти- licenses/LICENSE-2.0.
рой распространяется библиотека Qt, ле BSD более удобны для дистрибью- 5. Лицензия Artistic – http://www.perl.com/
Free Software Foundation относит к не- торов, поскольку позволяют использо- pub/a/language/misc/Artistic.html.
совместимым с GPL. Впрочем, разра- вать такие программы и в коммерчес- 6. Лицензия Sun CDDL – http://www.sun.
ботчикам KDE, похоже, удалось обой- ких разработках. com/cddl/cddl.html.
ти эту формальность. 7. Страница Open Source Initiative (OSI)
Кстати говоря, проблемы совмес- Ждём с нетерпением… со ссылками на большинство откры-
тимости послужили причиной воз- Что ж, на сегодняшний день лицен- тых лицензий – http://www.opensource.
никновения ещё одной особенности – зий действительно немало. Во многом org/licenses/artistic-license.php.

№5, май 2006 79


web

Возможности поискового
движка DataparkSearch

Иван Максимов
Как организовать поиск информации на файловом сервере не только по названию и типу
документа, но и по его контенту? Возможно ли создать подходящий инструмент, доступный
и прозрачный для пользователей?

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

80
web
программного обеспечения отреаги-
ровали на данную потребность. На се- Работа рость работы движка с нелокальными ре-
годня существуют десятки поисковых Сервер был установлен на машине: AMD сурсами будет зависеть от скорости кана-
машин, работающих локально на PC, Athlon 2500 Barton, 512 Мб DDR 3200 (Dual), ла. Также скорость индексирования зави-
также появились серверные поиско- HDD WD 200 Гб SATA (8 Мб кэш, 7200 сит от используемых парсетов. Использо-
вые машины. оборотов). Конфигурация движка: дви- вание режима хранения cache улучшает
Локальные поисковые машины жок DataparkSearch (v4.38), СУБД MySQL скорость работы примерно на 15-20%. В ка-
в большинстве своем распространя- (v4.1.11), веб-сервер Apache (v1.3.33), про- честве клиентского ПО используются веб-
ются бесплатно, тогда как корпора- изводится индексация doc, xls, rtf (конвер- браузеры, проверялась работа на: Firefox,
тивные версии, позволяющие пользо- тация в text/plain), html, txt-файлов. Исполь- Opera, Konqueror, Microsoft Internet Explorer
вателям производить поиск информа- зуется режим хранения данных multi. Обра- и даже Lynx – проблем не возникло. Всю ра-
ции на сервере, стоят достаточно до- ботка примерно 2 тыс. файлов, располо- боту серверной части движка можно авто-
рого. Несомненно, покупая коммер- женных на данной машине (размер на дис- матизировать с помощью всем известного
ческий продукт, мы получаем грамот- ке ~1 Гб), и индексация их контента требует демона cron, поместив в него нужные па-
ную техническую поддержку и другие 40 мин, размер БД после работы пример- раметры для индексации данных.
преимущества, но небольшие органи- но равен 1 Гб. Должен заметить, что ско-
зации или владельцы частных сетей
не всегда в состоянии заплатить ты- Search [1] или Ask Jeeves Desktop возможно использовать его и в корпо-
сячи долларов за подобные продукты. Search [2]. Возможно, для организа- ративной среде.
К счастью, в мире Open Source сущес- ции поиска в маленькой компании или MnogoSearch (бывший UdmSearch) –
твуют свободные проекты, не уступаю- на рабочей станции пользователя, под известный многим и достаточно рас-
щие по функциональности своим ком- управлением ОС Windows, эти движки пространенный движок. Существу-
мерческим конкурентам, с качествен- могут быть полезны, но не в данном ют версии как под Windows (30-днев-
ной поддержкой и обновлениями. случае. Поисковые «монстры» вроде ная бесплатна версия), так и под *nix-
Сейчас мы рассмотрим один из ва- Яндекса очень дороги, но если требу- платформы (лицензия GNU). Возмож-
риантов по организации поиска доку- ется качественная помощь разработ- на работа практически со всеми рас-
ментов на файловом сервере, кото- чиков, то крупным компаниям, воз- пространенными версиями СУБД SQL
рый был реализован на конкретной можно, следует подумать об его арен- под обе платформы. К сожалению,
задаче. де. Для *nix-семейства существует не- на данный движок достаточно мно-
сколько проектов. Это движки: го нареканий, поэтому я не остановил
Начальные условия  DataparkSearch [3] свой выбор на нём.
Имеется файловый сервер под уп-  Wordindex [4] Wordindex – движок, находящийся
равлением ОС Linux. Для совместно-  ASPseek [5] в стадии разработки (на момент напи-
го использования файлов установле-  Beagle [6] сания статьи последняя доступная вер-
ны популярные пакеты samba и pro-  MnogoSearch [7] сия 0.5 от 31 августа 2000 года). Рабо-
ftp. На диске используется файловая тает в связке СУБД MySQL и веб-сер-
система reiserfs, как наиболее произ- Перечисленные движки позицио- вера Apache. Работоспособный про-
водительная для работы с большим нируются как свободно распростра- ект представлен только на сайте раз-
количеством маленьких файлов (до- няемые поисковые машины для рабо- работчиков.
кументы, около 3 тысяч, различных ты в локальной и/или глобальной се- ASPseek – поисковая машина, по-
форматов: txt, html, doc, xls, rtf). Дан- тях. Хочу заметить, что многие проек- лучившая в прошлом достаточно боль-
ные отсортированы, но их объем рас- ты не мультиплатформенные и не ра- шое распространение, но в 2002 году
тет с каждым днем, удаление устарев- ботают под операционными система- этот движок прекратил свое развитие
шей информации не решает пробле- ми компании Microsoft. Для Windows- (последняя доступная версия данной
му. Как организовать поиск по именам систем существуют серверные реше- поисковой системы 1.2.10 от 22 июля
и типам документов, а также по кон- ния, такие как: MnogoSearch и «Ищей- 2002 года).
тенту? Как сделать его доступным для ка» [8]. DataparkSearch – клон поискового
пользователей в локальной сети? Итак, коротко рассмотрим поиско- движка MnogoSearch. Позволяет про-
Для решения этих вопросов нам по- вые машины под *nix-платформу: изводить поиск как по именам фай-
надобится поисковый движок, сервер Beagle – преемник в SUSE Linux лов, так и по их контенту. Обработка
баз данных (MySQL, firebirg, ...), веб- движка Htdig [9]. Последний дистри- txt-файлов, HTML-документов и тэгов
сервер Apache [13] и около гигабай- бутив SUSE, в который вошел движок mp3 встроена, для обработки содер-
та дискового пространства для рабо- Htdig, был за номером 9, в последую- жимого документов иного типа необ-
ты комплекса. щих версиях компания Novell заменила ходимы дополнительные модули. Воз-
его на beagle. Htdig закончил свое раз- можен поиск информации, как на ло-
Какой из поисковых витие в 2004 году, последняя доступ- кальном жестком диске, так и в ло-
движков выбрать? ная версия – 3.2.0b6 от 31 мая 2004 кальной/глобальной сети (http, https,
Существуют локальные поисковые года. Новый движок в SUSE позицио- ftp, nntp и news).
машины, такие как Google Desktop нируется как локальный поисковик, но Поисковая машина функциониру-

№5, май 2006 81


web
мощью веб-консоли phpmyadmin, но можно обойтись и стан-
дартным набором утилит. Необходимо создать нового поль-
зователя в MySQL:

sh#mysql --user=root mysql


mysql> GRANT ALL PRIVILEGES ON *.* TO пользователь@localhost
IDENTIFIED BY 'пароль' WITH GRANT OPTION;
exit
Рисунок 1. Минимальные набор параметров indexer.conf

Перезагрузим MySQL.
Допустим, имя пользователя – searcher, пароль –
qwerty.
Теперь создаём файл indexer.conf в папке /etc/ движка,
примеры данного файла (для некоторых задач) можно най-
ти в папке /doc/samples исходников DataparkSearch. Пример
с минимальными настройками приведен на рис. 1.
Рассмотрим файл подробнее. Как упомянуто в коммен-
тарии, команда DBAddr указывает путь к SQL-серверу (в на-
Рисунок 2. Минимальные параметры search.htm шем случае это MySQL), способ хранения данных и другие
параметры (если необходимо). Существуют несколько ре-
ет с самыми распространенными СУБД SQL, такими как жимов хранения: если не указывать dpmode, то по умолча-
MySQL [10], firebird [11], PostgreSQL [12] и другими. По заяв- нию будет значение single – самый медленный. Рекомен-
лению разработчиков, DataparkSearch стабильно работает дуется использовать режим cache, но если с ним возник-
на различных *nix-операционных системах: FreeBSD, Solaris, ли проблемы, можно использовать менее эффективный,
Red Hat, SUSE Linux и других. По сравнению с MnogoSearch но более простой в конфигурировании режим multi. Под-
в движке были исправлены некоторые ошибки, изменены робное описание всех параметров dbmode находится в до-
в лучшую сторону некоторые функции. На сайте разработ- кументации.
чиков приведены ссылки на рабочие версии движка в се- DoStore хранит сжатые копии проиндексированных до-
ти Интернет. Большой плюс – качественная документация кументов. Sections – модуль, предоставляющий гибкие воз-
на русском языке. можности индексирования. Допустим, можно создать огра-
Итак, сравнив все «за» и «против», для реализации по- ничение по тэгу или настроить индексацию не только со-
иска на файловом сервере был выбран движок поисковой держимого файлов, но и URL (хост, путь, имя). Langmap –
машины DataparkSearch. специальные языковые карты для распознавания кодиро-
вок и языков, эффективны, если документы размером бо-
Установка лее 500 байт.
Для работы нам понадобятся: веб-сервер Apache, сервер Второй необходимый конфигурационный файл – файл
базы данных MySQL и исходные коды DataparkSearch. Ус- результатов поиска search.conf. Рекомендуется взять гото-
танавливаем сервер Apache и БД MySQL (со всеми необхо- вый шаблон (файл /etc/search.htm-dist) и отредактировать
димыми библиотеками). Если на вашем сервере установле- его под свои запросы. Нужно заметить, что основные па-
на иная СУБД, то можно использовать и ее (см. документа- раметры, указанные в файле indexer.conf, должны совпа-
цию по движку). Далее распакуем архивы DataparkSearch дать с параметрами в search.htm, иначе будут ошибки при
и приступим к сборке нашего комплекса. работе движка. Search.htm состоит из нескольких блоков:
Запустим скрипт install.pl и ответим на необходимые воп- первый – variables – содержит данные для работы движ-
росы: выбор папки установки движка, базы данных и дру- ка (скрипт search.cgi), а все остальные блоки необходимы
гие относящиеся к параметрам работы движка. Рекомен- для формирования html-страницы результатов поиска. При-
дуется оставит настройки по умолчанию. Опытные поль- мер блока variables в search.conf приведен на рис. 2.
зователи, прочитав документацию, расположенную в пап- Рассмотрим search.htm подробнее. Как видно, пара-
ке doc, могут вручную сконфигурировать движок (коман- метры DBAddr и LocalCharset совпадают с идентичны-
да configure). Если при инсталляции скрипт не может найти ми параметрами в indexer.conf. Если ваш веб-клиент под-
mysql, возможно не установлены библиотеки для разработ- держивает формат xml, то можно установить параметр
чиков (libmysql14 devil). Теперь скомпилируем и установим ResultContentType text/xml. Ниже идут HTML-блоки, необ-
DataparkSearch командами make и make install. ходимые для дизайна страницы результатов, они здесь
не представлены из-за большого объема. Рекомендуется
Минимальное конфигурирование пользоваться готовым шаблоном, расположенным в фай-
Создадим базу данных: ле /etc/search.htm-dist. В сопроводительной документации
полностью описан формат HTML-блоков (дизайна), жела-
sh$ mysqladmin create search ющие могут настроить его по своему вкусу.
Теперь можно запускать файл indexer из папки sbin движ-
Командой mysqlshow просмотрим все таблицы в БД. ка DataparkSearch с параметром -Ecreate. Если все было сде-
Сразу хочу отметить, что удобнее работать с MySQL с по- лано правильно, то будут созданы необходимы sql-табли-

82
web
цы в БД. Если появились ошибки, следует проверить имя
пользователя mysql и пароль в файле indexer.conf, это на-
иболее распространенная ошибка.
Для тестирования рекомендуется проиндексировать не-
большой участок ресурса, чтобы если возникнут ошибки, Рисунок 3. Форма ввода данных
новая переиндексация не заняла много времени. Индек-
сирование выполняется командой indexer без параметров,
в итоге нам выведут результаты: затраченное время, коли-
чество документов и скорость работы.
Ско пируе м файл bin /search.cgi и з д ир е к тор ии
DataparkSearch в папку cgi-bin нашего веб-сервера и отре-
дактируем файл index.shtml нашего веб-сервера Apache
(расположенный в папке html), добавив в него код фор-
мы поиска:

<FORM METHOD=GET ACTION="/cgi-bin/search.cgi">


<INPUT TYPE="text" NAME="q" VALUE="">
<INPUT TYPE="submit" VALUE="Search">
</FORM>

Теперь можно зайти на ресурс localhost, используя лю-


бой доступный браузер. В появившейся форме ввести ис-
комое слово, допустим «процессор» (см. рис. 3). В итоге
мы должны получить страницу с результатами поиска, ес- Рисунок 4. Страница результатов поиска
ли, конечно, такие документы существуют (см. рис. 4). Ес-
ли вместо страницы с результатами поиска появится до- параметр ParserTimeOut 300 (число указывается в секундах),
кумент с ошибками, то следует проверить работу скрип- но время индексирования тогда еще более возрастет.
та. Зайдя в директорию cgi-bin веб-сервера, выполним Также нам понадобится еще один парсет – unrtf [17] –
скрипт «seach.cgi test >> test.htm». Если страница результа- для работы с rtf-файлами, он конвертирует документы
тов сформирована правильно, следует проверить конфи- в html-код или text/plain-формат на выбор пользователя.
гурацию сервера Apache: правильно ли указан путь до cgi- Скачаем и установим нужные пакеты, для подключения
скрипта, выполняется ли тестовый скрипт test.cgi в дирек- парсета нужно добавить строки в indexer.conf:
тории веб-сервера. Для формата xls (программа xls2csv входит в пакет
Если test.htm пуст или также содержит ошибки, рекомен- catdoc):
дуется проверить, существуют ли данные в базе, делается
это командой «indexer -S». Возможно, следует переиндек- Mime application/vnd.ms-excel text/plain "xls2csv $1"
AddType application/vnd.ms-excel *.xls *.XLS
сировать сервер командой «indexer – v 5» – максимальный
уровень выдачи отладочной информации. Выставив в фай- для документов doc параметры выглядят так:
ле search.htm команду LogLevel 5 и внимательно просмот-
рев логи веб-сервера, можно выяснить, как выполняется Mime application/msword text/plain "catdoc $1"
AddType application/vnd.ms-excel *.doc *.DOC
обработка данных в SQL-сервере.
обработка RTF-документов:
Добавление дополнительных модулей (парсетов)
По умолчанию движок работает только с файлами html и txt, AddType text/rtf* *.rtf *.RTF
AddType application/rtf *.rtf *.RTF
но возможно установить дополнительные модули (парсе- Mime text/rtf* text/html "/usr/local/bin/unrtf ↵
ты), которые преобразуют иные типы документов в html или --text $1"
Mime application/rtf text/html "/usr/local/bin/unrtf ↵
txt (plain text). Возможна работа с xls (Excel), doc (Word), rtf --text $1"
(Word), ppt (Power Point), pdf (Acrobat Reader) и даже rpm
(RedHar Package Manager)-файлами, в последнем будут Cтоит напомнить, что некоторые Windows-приложения
отображаться только метаданные. В нашем случае пона- иногда создают файлы с тем же расширением в верхнем
добится обработка офисных форматов. Для xls и doc су- регистре, поэтому добавим в список AddType те же расши-
ществует несколько парсетов: catdoc [14] преобразует до- рения, но с иными названиями.
кументы в txt-формат, XLHTML [15] и vwHtml [16] конверти- Для индексации можно добавлять любые типы доку-
руют файлы в HTML-формат. ментов, но движок будет показывать только ссылки на име-
Я рекомендую использовать пакет catdoc, так как ско- на файлов.
рость преобразования в txt-формат намного выше преоб- Допустим, если необходимо проиндексировать rpm
разования в HTML-формат, к тому же программа XLHTML или iso-файлы и получить из них метаданные, вам понадо-
иногда «подвисала» при конвертировании документов. Хотя бится сначала найти соответствующую программу (парсет)
разработчики предвидели данную проблему и рекомендуют и добавить нужные параметры в index.conf. Список подде-
во избежание «зависания» парсета установить в indexer.conf рживаемых типов документов можно посмотреть, напри-

№5, май 2006 83


web
мер, в файле mime.types сервера Apache. Готовые решения можно добиться большей функциональности и гибкости
для конвертации файлов или получения из них метаданных движка, все зависит от поставленных задач. Для повыше-
можно найти среди настроек пакета Midnight Commander, ния скорости работы поиска движка можно использовать
в файле mc.ext. модуль mod_dpsearch для сервера Apache. Потребность
в данном модуле возникает, если индексируются сотни ты-
Режим хранения cache сяч документов и необходимо повысить скорость работы
Существует несколько способов ускорить работу движ- движка до максимума. Также в документации можно най-
ка, один из них – использовать метод хранения данных ти и другие методы ускорения работы движка, например:
cache. Для работы в этом режиме нам потребуются утили- оптимизация SQL БД или использование виртуальной па-
ты cached и run-splitter, находящиеся в директории sbin от- мяти в качестве кэша.
носительно движка. Если у вас уже создана SQL-база дан- Достаточно часто возникает необходимость в поис-
ных в другом режиме (dpmode), не забудьте сначала ее ке грамматических форм слов. Допустим, нам нужны все
удалить и только потом изменить режим хранения. Очис- формы слова «процессор» (процессоры, процессоров, ...),
тим базу данных командами: «indexer -С» (очистка SQL-таб- для этого можно настроить модули ispell или aspell. Более
лиц) и «indexer -Edrop» (удаление таблиц). Далее создайте подробно о них написано в документации.
из файла шаблона cached.conf-dist, расположенного в пап- В DataparkSearch имеется возможность индексиро-
ке etc нашего движка, файл cached.conf. Не забудем изме- вать сегменты сетей, за это отвечает параметр: subnet
нить в нем параметры доступа к SQL БД: 192.168.0.0/24 в indexer.conf.
Также возможно запрещать индексировать опреде-
DBAddr mysql://searcher:qwerty/search/?dbmode=cache ленные типы файлов или конкретные папки на серверах:
Disallow *.avi или Disallow */cgi-bin/*.
Теперь можно отредактировать файлы index.conf В шаблонах конфигурационных файлов можно най-
и search.conf, изменив в них параметры: ти описания (с примерами) других полезных параметров,
которые могут понадобиться для реализации определен-
indexer.conf ной задачи.
DBAddr mysql://searcher:qwerty@localhost/search/ ↵
?dbmode=cache&cached=localhost:7000

search.htm
Выводы
DBAddr mysql://searcher:qwerty/search/?dbmode=cache Поисковый движок DataparkSearch – мощное средство для
работы c веб-ресурсами, расположенными как в локальной
Этого изменения в целом достаточно, но если вы же- сети, так и в глобальной. Проект постоянно развивается
лаете достичь еще большей гибкости движка, то рекомен- и дорабатывается, на момент написания статьи последняя
дуется ознакомиться с дополнительными параметрами ре- стабильная версия движка 4.38 (от 13.03.2006) и снапшота
жима cache и внести необходимые изменения в конфигу- 4.39 (от 19.04.2006). Должен заметить, что обновления пос-
рационные файлы. ледней версии происходят почти через день.
Далее перейдем в директорию sbin нашего движка и за- Мы не рассматривали вопрос о создании публич-
пустим утилиту cached с параметрами: ного поискового сервиса в Интернете, если же вам это
требуется, ознакомтесь с соответствующей документа-
cached & 2> cached.out цией по СУБД, веб-серверу и другим моментам, каса-
ющимся защиты информации от несанкционированно-
Демон запустится и будет записывать отладочную ин- го доступа.
формацию в файл cached.out. Порт работы cached по умол-
чанию – 7000, но если необходимо, его можно изменить Ссылки:
(в cached.conf). 1. Google Desktop Search – http://desktop.google.com.
Заново создадим SQL-таблицы для нового режима хра- 2. Ask Jeeves Desktop Search – http://about.ask.com.
нения данных командой «indexer -Ecreate» и проиндекси- 3. DataparkSearch – http://www.dataparksearch.org.
руем сервер – indexer. После завершения выполним ко- 4. Wordindex – http://wordindex.sourceforge.net.
манду: 5. ASPseek – http://www.aspseek.org.
6. Beagle – http://beagle-project.org.
run-splitter -k 7. MnogoSearch – http://www.mnogosearch.ru.
8. Ищейка – http://www.isleuthhound.com.
Должен сказать, что данный метод ускоряет не только 9. Htdig – http://htdig.org.
скорость поиска по базе, а также скорость индексирова- 10. Mysql – http://www.mysql.com.
ния. Теперь можно попробовать произвести поиск по БД, 11. Firebird – www.firebirdsql.org.
если все было сделано правильно, то мы получим резуль- 12. PostgreSQL – http://www.postgresql.org.
таты поиска. 13. Apache – http://www.apache.org.
14. Catdoc – http://www.45.free.net.
Дополнительные функции 15. XLHTML – http://chicago.sourceforge.net/xlhtml.
В приведенной конфигурации использовались минималь- 16. vwHtml – http://wvware.sourceforge.net.
ные параметры настройки, с помощью дополнительных 17. unrtf – ftp://ftp.gnu.org/pub/gnu/unrtf.

84
bugtraq

Множественные уязвимости Переполнение буфера в ClamAV


в Symantec Scan Engine Программа: Clam AntiVirus (clamav) 0.80 по 0.88.1.
Программа: Symantec Scan Engine 5.0. Опасность: Средняя.
Опасность: Средняя. Описание: Уязвимость существует из-за ошибки проверки
Описание: 1. Ошибка дизайна обнаружена в механизме ау- границ данных в HTTP-клиенте в утилите Freshclam. Уда-
тентификации, используемом Symantec Scan Engine. Уда- ленный пользователь может вызвать переполнение стека,
ленный пользователь может получить доступ к админист- если размер HTTP-заголовков, полученных от веб-серве-
ративному веб-интерфейсу с помощью специально сфор- ра, превышает 6 Kб. Удачная эксплуатация уязвимости воз-
мированного XML-запроса. можна, если Freshclam используется для закачки обновле-
2. Symantec Scan Engine использует статический част- ния сигнатур вирусов с злонамеренного сервера (напри-
ный DSA-ключ для SSL-соединения между сервером и ад- мер, посредством отравления DNS-кэша).
министративным приложением. Данный ключ не может быть URL производителя: www.clamav.net.
изменен. Удаленный пользователь может произвести атаку Решение: Установите последнюю версию (0.88.2) с сайта
«человек посредине» и расшифровать передаваемые дан- производителя.
ные между сервером и административным клиентом.
3. Symantec Scan Engine недостаточно ограничивает до- Множественные уязвимости в Ethereal
ступ к файлам в установочной директории приложения. Уда- Программа: Ethereal 0.8.5 по 0.10.14.
ленный неавторизованный пользователь может с помощью Опасность: Высокая.
HTTP-запроса скачать произвольные файлы приложения, Описание: Различные типы ошибок (ошибки обработки
например: конфигурационные файлы, лог файлы сканиро- границ данных, ошибки завышения на единицу, бесконеч-
ваний и файлы с текущим описанием вирусов. ный цикл) существуют в большом количестве диссекторов
URL производителя: www.symantec.com. в Ethereal. Удаленный пользователь может аварийно завер-
Решение: Установите последнюю версию (5.1) с сайта про- шить работу приложения, потребить все доступные ресур-
изводителя. сы на системе и выполнить произвольный код.
URL производителя: www.ethereal.com.
Решение: Установите последнюю версию (0.99.0) с сайта
Переполнение буфера и раскрытие производителя
данных в MySQL
Программа: MySQL 4.1.18 и более ранние версии, MySQL Раскрытие данных в MySQL
5.0.20. Программа: MySQL 4.1.18, и более ранние версии, MySQL
Опасность: Средняя. 5.0.20.
Описание: 1. Уязвимость существует из-за недостаточной Опасность: Низкая.
обработки данных в команде COM_TABLE_DUMP. Удален- Описание: Уязвимость существует при обработке име-
ный пользователь может с помощью специально сформи- ни анонимного пользователя (пользователя с пустым па-
рованного пакета получить доступ к важным данным на ролем) в процессе аутентификации. Удаленный пользо-
системе (к частям запросов или результатам их выполне- ватель может послать серверу специально сформирован-
ния другими пользователями). ный пакет и получить доступ к важным данным на системе
2. Переполнение стека обнаружено в команде COM_ (к частям запросов или результатам их выполнения други-
TABLE_DUMP. Удаленный пользователь может послать ми пользователями).
серверу специально сформированную последователь- URL производителя: www.mysql.com.
ность COM_TABLE_DUMP-пакетов и вызвать отказ в об- Решение: Установите последнюю версию (5.0.21) с сайта
служивании или выполнить произвольный код на целе- производителя.
вой системе.
URL производителя: www.mysql.com. Отказ в обслуживании в ISC BIND
Решение: Установите последнюю версию (5.0.21) с сайта Программа: ISC BIND 9.3.x и более ранние версии.
производителя. Опасность: Низкая.
Описание: Уязвимость существует из-за ошибки при обра-
ботке TSIG в последующих сообщениях в механизме транс-
SQL-инъекция в Oracle фера зон. Удаленный пользователь может с помощью спе-
Программа: Oracle 10g. циально сформированного TSIG в сообщении вызвать от-
Опасность: Низкая. каз в обслуживании процесса named.
Описание: Уязвимость существует из-за недостаточ- URL производителя: www.isc.org.
ной обработки входных данных в пакете DBMS_EXPORT_ Решение: В настоящее время способов устранения уязви-
EXTENSION. Удаленный пользователь может выполнить мости не существует.
произвольные SQL-команды в базе данных приложения.
URL производителя: www.oracle.com. Составил Александр Антипов
Решение: В настоящее время способов устранения уязви-
мости не существует.

№5, май 2006 85


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

Надежда умирает последней:


история компании SGI
Часть 2

Дмитрий Мороз
Уход основателя Silicon Graphics Джима Кларка из компании изначально не был воспринят
всерьёз. «Подумаешь, ушёл один человек, когда в компании таких, как он, – тысячи». Однако,
если поломка даже единственной шестерёнки может стать причиной выхода из строя всего
механизма, что ждало Silicon Graphics?

Хочешь жить – умей рушечная история» позволил Sun отоб- на, и все, казалось бы, были доволь-
вертеться рать у Silicon Graphics частицу всемир- ны… до появления Windows 95.
К 1994 году продажи рабочих станций ной славы. Жестокая война продук- В начале 1995 года Microsoft запус-
Silicon Graphics перевалили за отмет- ции компании с рабочими станциями тила программу по поддержке разра-
ку в полмиллиона единиц в год. Коли- от DEC, Hewlett-Packard и уже упоми- ботки игр, работающих на её новой
чество приложений для платформы до- навшейся Sun Microsystems, а также ОС. Суть этой программы заключалась
стигло 1300 штук. Несмотря на это, це- появление нового «конкурента» – про- в захвате персональными компьютера-
ны как на аппаратное, так и програм- цессора Pentium Pro вынудили Silicon ми, работающими на базе Windows 95,
мное обеспечение являлись для мно- Graphics признать, что она более не од- части рынка игровых консолей, на ко-
гих непреодолимым барьером. на и теперь ей придётся изрядно потру- тором в то время доминировали ком-
Желание сэкономить и выбрать на- диться, чтобы сохранить свои позиции пании Nintendo и Sega.
иболее оптимальный вариант посетило в этом секторе рынка. Microsoft приняла решение не ис-
и студию Pixar, занявшуюся созданием Однако первая настоящая «пощёчи- пользовать OpenGL, к тому времени
первого полнометражного мультфиль- на» была получена от «злейшего врага успешно применявшийся в Windows NT,
ма, созданного целиком при помощи всего компьютерного мира» – Microsoft. для обработки трёхмерной графи-
компьютерной графики. В результате Как только Silicon Graphics объявила о ки в играх. Вместо этого она приоб-
рабочие станции Silicon Graphics хоть и лицензировании API OpenGL, эта ком- рела компанию Rendermorphics, Ltd.
были использованы, но только в качес- пания в срочном порядке записалась разработавшую API под названием
тве рабочего инструмента для художни- в члены комитета ARB. Между ними RealityLab. После его доработки и пе-
ков и аниматоров, и лишь исключитель- сразу же был заключен договор, со- реименования в Direct3D Microsoft объ-
но из-за многообразия программных гласно которому Silicon Graphics помо- явила о своём намерении сделать но-
пакетов, доступных для платформы. жет Microsoft написать версию OpenGL вый API единственным стандартом
Что же касается серверов, составляв- для её новой операционной системы для Windows 95. Специально для этого
ших систему просчёта (rendering farm), Windows NT, предназначенной для ра- компания отказалась предоставить не-
и систем хранения данных, тут компа- бочих станций, работающих на различ- обходимую информацию относительно
нию опередила Sun Microsystems. ных архитектурах (х86, PowerPC, PA- своей новой операционной системы
Итог известен всем: выход в 1995 RISC Alpha, SPARC и MIPS). Работа бы- разработчикам приложений и игр под
году анимационного мультфильма «Иг- ла проделана, Windows NT – выпуще- OpenGL. Фактически на протяжении

86
ретроспектива
длительного периода времени компа- твенным системам компании. Поз-
ния специально «тормозила» развитие же это мнение окажется ошибочным,
OpenGL, а также появление этого API однако в 1995-97 гг. Silicon Graphics
на Windows 95. Примером может слу- продолжала не спеша «плыть по те-
жить тот факт, что приложения, напи- чению».
санные на базе OpenGL и работавшие Как известно, компьютер или в дан-
на Windows NT, на Windows 95 запус- ном случае рабочая станция являют-
каться просто отказывались. ся для артиста лишь инструментом,
После этого последовала так назы- причём не самодостаточным. Кроме
ваемая война API, в которую были вов- него необходимы и программы. По-
лечены не только производители гра- нимала это и Silicon Graphics. Поэто- Рисунок 1. Игровая консоль Nintendo 64
фических карт, но и разработчики при- му 7 февраля 1995 года она объявила
ложений и игр, а также простые поль- о покупке за 650 млн. долл. компаний
зователи. Многочисленные статьи, Alias Research и Wavefront Technologies,
сравнивающие оба стандарта, анали- являвшихся главными поставщика-
тические очерки, публичные обраще- ми программных продуктов в сфе-
ния к Microsoft – всё это мир ПК пере- ре трёхмерной графики и анимации,
жил за каких-то два года. К 1997 го- а также промышленного дизайна,
ду компания смогла достаточно до- и их объединении в одну под назва-
работать Direct3D (сделав его частью нием Alias|Wavefront (в апреле 2003
DirectX), чтобы не беспокоиться конку- переименованную в Alias). Новоиспе-
ренции со стороны OpenGL, поэтому- чённая компания начала параллельно Рисунок 2. Рабочая станция O2
таки сподобилась обеспечить его огра- с выпуском обновлённых версий уже
ниченную поддержку в Windows 95. Од- успевших зарекомендовать себя про- 12 июля 1995 года стал самым счас-
нако к тому времени имидж Microsoft грамм разработку графического паке- тливым днём в истории компании – сто-
был уже подпорчен. та нового поколения для трёхмерного имость одной акции Silicon Graphics со-
Тем не менее Silicon Graphics моделирования и анимации под назва- ставила рекордные 45,25 долл., что на
не сильно огорчилась. Профессио- нием Maya, который с выходом в 1997 то время было в два раза больше сум-
нальный рынок всё ещё принадлежал году стал стандартом де-факто в про- мы, которую просили за акцию Microsoft.
ей, а персональные компьютеры не изводстве компьютерных спецэффек- В различных подразделениях компании
могли составить конкуренции собс- тов для кинофильмов. по всему миру работали 12 тысяч чело-
век. Сравните эти цифры с показателя-
Проект «Действительность» тота работы 62,5 МГц), состоит из двух от- ми начала 2006 года: менее доллара за
История появления консоли Nintendo 64 дельных процессоров: RSP (занимается акцию и менее 2100 сотрудников.
столь же интересна, как и сама игро- обработкой полигонов: трансформацией, Однако всё это ждало компанию
вая приставка. Когда к компании Sega of освещением, обрезанием и т. д.) и RDP в будущем, а пока 23 апреля 1996
America поступили данные о будущей це- (на его плечах лежит Z-буферизация, ап- года свет увидела игровая консоль
не их новой консоли Sega Saturn, которая паратное сглаживание и текстурирование). Nintendo 64, являвшаяся результа-
должна была стоить $549, к ней обратился Объём оперативной памяти RDRAM в 4 Мб том проекта Project Reality. Для Silicon
Джим Кларк, в то время ещё надеявший- мог быть увеличен вдвое путём установки Graphics приставка значила одно –
ся воплотить свои мечты в недрах Silicon в консоль специальной платы расширения. финансовые поступления. От прода-
Graphics. «У меня есть несколько процессо- Nintendo 64 обрабатывала около 100 тыс. жи каждой консоли компания получа-
ров, производных архитектуры MIPS, кото- полигонов в секунду, хотя при отключении ла свою частичку, которая позволила
рые как нельзя лучше подойдут для вашей аппаратного сглаживания и других функ- Silicon Graphics сделать одну из самых
системы», – говорил он. Несмотря на согла- ций эта цифра переваливала за полмил- больших ошибок за время своего су-
сие американского подразделения корпо- лиона треугольников. ществования – купить за 764 млн. долл.
рации принять предложение Кларка, Sega К сожалению, несмотря на свои выда- компанию Cray Research.
Japan ответила отказом. Однако предпри- ющиеся графические возможности (кото- К тому времени Cray Research яв-
имчивый Джим обращался с целью поиска рые лишь немногим не дотягивали до уров- лялась одним из двух основных пос-
потенциального клиента не только к Sega, ня IRIS Crimson), использование морально тавщиков параллельных векторных
но и к другим компаниям. Одной из них устаревших картриджей в качестве носи- суперкомпьютеров. Кроме того, в ар-
была Nintendo, с радостью согласившаяся теля информации, а также банальный пе- сенале компании присутствовали
совместно с Silicon Graphics разрабатывать ренос срока выхода консоли на год (с пла- и обычные массивно-параллельные
консоль следующего поколения. нировавшегося 1995 на 1996 г.) не позво- «суперы». Во время совершения сдел-
В основе приставки лежат два про- лили Nintendo 64 стать лидером продаж. ки доход Cray достиг отметки 900 млн.
цессора. Первый, NEC VR4300, основан- К концу 2002 года было продано 32 млн. долл. В штате компании работало око-
ный на базе ядра MIPS R4300i, работает приставок, тогда как основной конкурент, ло 4500 сотрудников.
на частоте 93,75 МГц и отвечает в основ- Sony PlayStation, разошлась по миру 100- Итак, что же Silicon Graphics при-
ном за игровую логику. Второй, RCP (час- миллионным тиражом. обрела за баснословную сумму? Во-

№5, май 2006 87


ретроспектива
ни по одному выдвигавшемуся Silicon дившей в комплект станции веб-каме-
Graphics пункту (отношения между ин- ры, сохранялся в оперативной памяти,
женерами обеих компаний иначе как после чего пользователь при желании
войной назвать было нельзя). «Это бы- мог парой нажатий мышью превратить
ло похоже на то, как если бы ваш злей- его в текстуру для 3D-модели, которая
ший враг женился на вашей сестре, продолжала храниться ОЗУ.
и после этого стал членом семьи», – го- Несмотря на позиционирование
ворил в то время один индустриальный в качестве рабочей станции началь-
источник. Поэтому многие аналитики ного уровня, O2 при установке более
в один голос заявили, что этому «сою- мощного процессора по производи-
зу» долго не просуществовать, и впос- тельности «обходила» Indy, Indigo 2
ледствии оказались правы. с большинством графических карт,
Однако оставим Cray на некоторое Power Challenge, и даже в некоторых
время в покое и поговорим о Silicon случаях сервер Origin 200. Кстати,
Graphics, вернее, о новых продуктах, о нём, родимом. «Звездой» того вре-
выпущенных компанией в 1996 году. мени, бесспорно, стал анонс Silicon
Обновление модельного ряда рабо- Graphics высокомасштабируемых сер-
чих станций от Silicon Graphics состо- веров семейства Origin 2000 (поколе-
ялось 10 октября 1996 года, когда ми- ние SN-0), построенных на базе NUMA-
ру была представлена модель O2, при- архитектуры. Сервер начального уров-
Рисунок 3. Сервера Origin 2000 шедшая на замену станции Indy. Глав- ня, Origin 200, мог содержать от одного
ным новшеством О2 стала архитек- до четырёх процессоров MIPS R10000,
первых, нереа лизованный товар тура её памяти, представлявшая со- тогда как топовая модель, Origin 2000 –
на 600 млн. долл. Во-вторых, семейс- бой реализацию UMA (Unified Memory до 128 чипов и до 256 Гб ОЗУ. Дальней-
тво «суперсерверов» Superserver, ко- Architecture – унифицированная ар- шие усовершенствования позволили
торое компания сразу же продала хитектура памяти). Сердцем рабочей серверам Origin 2000 «нести на бор-
Sun Microsystems (моментально стар- станции, кроме процессора, также яв- ту» до 512 процессоров и до 2 Тб опе-
товавший на базе купленной линей- лялся специальный «контроллер памя- ративной памяти.
ки проект «Starfire» вылился в появ- ти и графики», передававший данные Для демонстрации масштабируе-
ление очень удачного семейства сер- между процессором и ОЗУ на скорости мости этих серверов также приведём
веров Enterprise, благодаря которым 2,1 Гбайт/с (в 20 раз быстрее ПК образ- один пример. Суперкомпьютер Blue
Sun и по сей день конкурентоспособна ца 1996 года). CPU выступал как в ка- Mountain, установленный в Лос-Ала-
в этом секторе рынка). В-третьих, но- честве основного, так и графическо- мосе был получен путём объединения
вые каналы продаж (Cray поставляла го процессора. Все данные хранились пятидесяти систем Origin 2000. Общее
свои системы в Министерство обороны в оперативной памяти, в результате че- количество процессоров в системе со-
США, Министерство топлива и энерге- го отпадала необходимость в исполь- ставило 6400 штук.
тики, NASA, военные базы, крупные на- зовании дополнительной видеопамя- Выпущенные в это же время графи-
учно-исследовательские лаборатории ти. Приведём результат использова- ческие суперкомпьютеры Onyx2 (быв-
и т. д.). И, наконец, в-четвёртых, техно- ния UMA и O2 в частности. Поток виде- шие Onyx Reality Engine) представляли
логии Cray, а также высококвалифици- оданных, получаемый при помощи вхо- собой сервера Origin 2000 с графичес-
рованных инженеров, большинство ко-
торых, правда, через некоторое вре- Передовая технология а также контроллер шин объединены вмес-
мя уволили. NUMA (Non-Uniform Memory Access – до- те в единицу, известную как «узел», пред-
Политика Slicon Graphics по отно- ступ к неоднородной памяти) представля- ставляющий собой обычно одну плату. Уз-
шению к Cray была просто варварс- ет собой многопроцессорную архитектуру, лы, в свою очередь, объединяются пос-
кой: производство векторных супер- в которой местоположение оперативной редством высокопроизводительной вне-
компьютеров, которыми так славилась памяти выбирается наиболее оптималь- шней шины, названной NUMAlink. Внут-
компания, было практически прекра- ным образом для максимального умень- ренняя системная шина отсутствует. Вмес-
щено; Cray были «навязаны» собствен- шения времени доступа. то неё обмен данными между процессора-
ные сервера Silicon Graphics, над ко- Например, скорость работы процес- ми, памятью и устройствами ввода/выво-
торыми компания отныне должна бы- сора с собственной локальной памятью да происходит посредством линии пере-
ла трудиться. всегда будет значительно выше, чем с не- ключателей и маршрутизаторов. Основ-
Однако всё это не шло в сравнение локальной (памятью, которая «принадле- ное преимущество SN-систем, кроме высо-
с главной проблемой, возникшей пос- жит» другому процессору или разделена кой скорости передачи информации – мас-
ле приобретения. Silicon Graphics так между ними). штабирование, которое происходит сразу
долго и так рьяно соперничала с Cray Архитектура SN (Scalable Node – мас- во всех направлениях: с линейным увели-
на рынке суперкомпьютеров, что, штабируемый узел), разработанная Silicon чением количества процессоров увеличи-
как только обе компании стали парт- Graphics, является примером реализации вается объём ОЗУ, количество устройств
нёрами, они не смогли договориться NUMA. В SN-системе процессоры, ОЗУ, ввода/вывода и т.д.

88
ретроспектива
кими акселераторами InfiniteReality 2/3.
Производительность Onyx2, как уже Несостоявшийся трёхмерный бран формат файлов программной библи-
упоминалось в первой части статьи, Интернет отеки Open Inventor, разработанной Silicon
достигла 2 млн. полигонов в секунду. Ещё одна неудача, которую потерпела Graphics. В октябре того же года доработан-
Завершил обновление модельно- Silicon Graphics, была связана с VRML. ный инженером Silicon Graphics формат пре-
го ряда Silicon Graphics выход в янва- VRML – стандарт языка описания трех- вратился в первую версию VRML.
ре 1997 года рабочей станции среднего мерных сцен, содержащих объекты, а так- В отличие от Sun Microsystems, Silicon
уровня под названием Octane. Основ- же возможные взаимодействия между объ- Graphics не уделяла интернет-технологи-
ные её отличия от O2: упрощённая ар- ектами и наблюдателем. Основное при- ям должного внимания. «Единственная их
хитектура Origin 2000, поддержка двух менение нашёл в сети Интернет в качес- попытка заключалась в создании VRML, –
процессоров, до 2 Гб ОЗУ, а также ви- тве средства представления статической говорил аналитик Jupiter Research Ноа Яс-
деокарты серии Impact 4-летней дав- и интерактивной информации в виде вир- скин. – Они потратили на него много вре-
ности, созданные ещё для Indigo 2. туальной трехмерной среды, содержащей мени и денег, а отдача от проекта получе-
Пользователи, ожидавшие от Silicon различные объекты. на так и не была».
Graphics появления нового «графичес- В середине 1994 года была придумана «Критической массы» для широкого
кого монстра», призванного напомнить концепция трехмерного HTML: своеобраз- распространения VRML не набрал и на се-
миру, кто тут главный, были разочаро- ного языка описания трехмерных сцен с под- годняшний день является в основном за-
ваны. Как следствие – продажи новин- держкой гиперссылок. Позже она получила бавой для специалистов и немногих ин-
ки были весьма вялыми. название VRML. Для описания сцен был вы- тернет-магазинов.
Ещё одна проблема, на которую
компания доселе не обращала вни- ной». И эти слова оказались прелюди- производительностью, и при этом сто-
мания, – появление персональных ей к началу упадка Silicon Graphics. или в несколько раз дешевле. На про-
компьютеров, стремительно догоняю- Первое массивное сокращение ра- тяжении долгого времени компания не
щих рабочие станции Silicon Graphics бочего персонала в истории компании понимала, что происходит, а когда до
по производительности. Процессор- последовало на следующий день пос- неё дошло – было уже поздно».
ную мощность им обеспечивала ком- ле анонса 27 октября 1997 г. неудов- Все вышеперечисленные пробле-
пания Intel, тогда как графическую – летворительных показателей Silicon мы вынудили Эда МакКракена уйти
«новоиспечённые» 3Dfx и nVidia (со- Graphics за прошедший финансовый с поста генерального директора ком-
зданные, кстати, бывшими выходцами квартал – 37 млн. долл. убытка (ос- пании. Его место в январе 1998 года
из Silicon Graphics). «Компания прос- новная причина – 50% падение спроса занял «убийца Silicon Graphics», ярый
то не верила в то, что персональные на рабочие станции компании), что бо- приверженец Microsoft Рик Белуццо,
компьютеры, бывшие ещё в 1995 году лее чем в полтора раза больше показа- до этого практически «уничтоживший»
«игрушками», будут прогрессировать теля за аналогичный квартал 1996 го- разработки HP/UX (вариант UNIX) и ра-
так быстро, – говорил аналитик Jupiter да. Генеральный директор Эд МакКра- бочих станций на её основе в компа-
Research Майкл Гартенберг. – Она поп- кен объявил о том, что работу потеряют нии Hewlett-Packard.
росту игнорировала Закон Мура». от 700 до 1000 сотрудников. Массовые
«Silicon Graphics была всеобщей увольнения сопровождались бегством Диверсант
любимицей, компания считалась «ко- и c более высоких постов. Так, вслед Первые же действия новоиспечённо-
ролём горы» рабочих станций, – гово- за Джимом Кларком компанию посте- го CEO, направленные на «улучше-
рил аналитик Dataquest Питер Фоул- пенно покинули президент Том Джер- ние финансовых показателей компа-
кис. – Но за своими «розовыми» очка- молак, управляющий дизайнерскими нии», не заставили себя ждать. В на-
ми она не заметила, как рынок с неве- разработками Alias/Wavefront Роберт чале 1998 года Silicon Graphics офи-
роятной скоростью меняется за её спи- Баргисс и исполнительный директор циально объявила о подписании со-
по международным финансовым опе- глашения с Microsoft, согласно кото-
рациям Гари Лаер. рому обе компании будут разрабаты-
Продажи рабочих станций компа- вать графический API под названи-
нии шли из рук вон плохо. Более де- ем Fahrenheit, представляющий собой
шёвые альтернативы из мира ПК стре- смесь DirectDraw, Direct3D и OpenGL
мительно догоняли продукцию Silicon и призванный «закончить войну стан-
Graphics по возможностям, а уж по со- дартов 3D-графики» в Windows. Од-
отношению цена/производительность нако Microsoft, параллельно с работой
давно вырвались вперёд. «Silicon над Fahrenheit, продолжала развивать
Graphics, по существу, вытесняли свой DirectX, нагло копируя в него все
из рынка, на котором она до недавних новшества из «Фаренгейта». Доказа-
пор была единственной, – говорил Гар- тельством этого может служить заяв-
тенберг. – Она продолжала разрабаты- ление одного из разработчиков DirectX,
вать рабочие станции класса high-end, прозвучавшее в августе 1998 года:
тогда как стандартные ПК к тому вре- «Direct3D представляет собой API, ко-
Рисунок 4. Графические суперкомпьютеры
Onyx2 мени уже обладали довольно хорошей торый в будущем будет наиболее сов-

№5, май 2006 89


ретроспектива
единяла ОЗУ, процессор, графическую, компании, по существу, на улучшение
звуковую и сетевую подсистемы в еди- её финансового благосостояния никак
ное целое. Ядром Visual Workstation яв- не повлияла. К тому же SGI в то время
лялся чип Lithium, функционирующий было не до имени.
наподобие маршрутизатора и пред- В 1999 году финансовое положе-
ставляющий собой многопозицион- ние компании продолжало ухудшать-
ный переключатель, призванный уб- ся: 40 млн. долл. убытка за истекший
Рисунок 5. Рабочая станция Octane рать узкие места системных шин рабо- финансовый квартал и очередное
чей станции. Графический чип системы, падение курса акций до 14,75 долл.
Cobalt, использовал оперативную па- «Эти временные трудности закрыва-
мять для своих нужд, динамически вы- ют прогресс, который мы делаем в дру-
деляя необходимое в данный момент гих областях нашего бизнеса: анонс
количество ОЗУ под видеопамять. новых продуктов, улучшенное качес-
Тем не менее техническое пре- тво и эффективность, а также более
восходство новых рабочих станций низкие затраты», – объяснял по пово-
от Silicon Graphics не спасло их от про- ду ужасных показателей Рик Белуц-
Рисунок 6. Рабочие станции
Visual Workstation 320 и 540 вала: продажи шли из рук вон плохо. цо. «На данный момент мы фокусиру-
Несмотря на более низкую цену (от 4 ем наши усилия на получение отдачи
местим с Fahrenheit, к тому же оба они тыс. долл.) по-сравнению со своими в новых рынках».
очень похожи». MIPS-собратьями, O2 и Octane, Visual С этими словами 10 августа 1999
Постепенно «сотрудничество» Workstation по-прежнему оставались года Белуццо объявил план глобаль-
между двумя компаниями зашло в ту- дороже конкурентов, выпускаемых Dell ной реорганизации компании. Во-пер-
пик, в результате чего в ноябре 1999 и Compaq. «Современная реальность вых, Silicon Graphics в ближайшее вре-
года Silicon Graphics объявила о пре- такова, что заново «изобретать коле- мя продаст подразделения, занимаю-
кращении работ со своей стороны. со» в некоторых сегментах рынка прос- щиеся Visual Workstation, MIPS и Cray,
«Мы решили уменьшить наше учас- то бессмысленно», – говорил по поводу а также уволит 1500 инженеров, рабо-
тие в разработке Fahrenheit», – та- сложившейся ситуации начальник отде- тающих в них. Во-вторых, компания на-
кое заявление было опубликовано ла маркетинга Visual Workstation Джеф чнёт переход от использования в сво-
на сайте Silicon Graphics. За прошед- Стедман. «Лучшим решением для нас их системах процессоров MIPS и ОС
шие два года с момента начала работ было бы улучшение стандартной плат- IRIX на процессоры Intel Merced (буду-
над проектом собственный API компа- формы, уже принятой рынком». щий Itanium) и Linux. И, в-третьих, ком-
нии, OpenGL, практически не совер- Итак, постепенно свершилось то, пания откажется от создания собствен-
шенствовался. В то же время Microsoft, во что никто не мог поверить – Silicon ных графических карт в пользу реше-
пользуясь наработками инженеров Graphics потеряла статус признанного ний от сторонних разработчиков.
Silicon Graphics, значительно модерни- лидера по производству графических Под это «радостное» заявление Бе-
зировала DirectX, превратив его в глав- станций. Хотя к этому времени её руко- луццо 23 августа 1999 г. принял реше-
ный API для разработки мультимедий- водство уже не отрицало, что этот сег- ние уйти из SGI. Нанеся ряд сокруши-
ных приложений под Windows. мент рынка более не является для неё тельных ударов компании и удостове-
Однако разработка Fahrenheit была основным. А раз так, необходимо бы- рившись в успешном завершении сво-
лишь первым этапом роковой ошибки ло избавиться от названия «Silicon их замыслов, он поспешно ретировал-
Silicon Graphics. Мотивируя своё реше- Graphics», всё ещё прочно ассоцииро- ся с «тонущего корабля» и перебрал-
ние тем, что рабочие станции компа- вавшегося с термином «компьютер- ся к Microsoft, заняв должность испол-
нии более не могут соперничать с пос- ная графика». Отделом маркетинга нительного директора.
тоянно развивающимися персональ- компании была предложена идея о её SGI ничего не оставалось, как сроч-
ными компьютерами, Белуццо объ- переименовании. 13 апреля 1999 года но искать Белуццо замену. Порядком
явил о появлении новой линейки Visual Silicon Graphics International лишилась «потрёпанную» компанию возглавил
Workstation, основанной на базе про- практически всех букв в собственном новый управляющий, Боб Бишоп. Од-
цессоров Intel и работающей под уп- названии, получив имя SGI. «Такое ре- нако сможет ли он вернуть ей былую
равлением Windows NT. Продажи пер- шение позволит SGI развиваться быс- славу?
вых двух моделей, 320 (на базе двух трее, поскольку «брэнд» должен быть
процессоров Pentium II) и 540 (четыре достаточно гибким, чтобы компания Источники:
процессора Pentium II Xeon), стартова- могла расширяться, пробуя себя в но- 1. http://arstechnica.com
ли в начале января 1999 года. вых секторах рынка, и при этом оста- 2. http://en.wikipedia.org
В принципе Visual Workstation были валась в памяти у людей, помнящих её 3. http://www.cnet.com
не такими уж плохими. Вернее, на мо- как Silicon Graphics», – говорил по это- 4. http://www.sgi.com
мент выхода они были лучшими среди му поводу Клей Таймон, президент 5. http://www.theregister.co.uk
рабочих станций на базе процессоров компании Landor Associates, занимаю-
х86. Являющаяся неким скрещивани- щейся разработками торговых марок Редактор рубрики
ем UMA и NUMA, архитектура IVC объ- и «брэндов». Однако смена названия Кирилл Тихонов

90
конкурс

Редакция журнала «Системный администратор»


объявляет об учреждении 3 премий авторам
по итогам 2006 года:
 1 место – 30 000 рублей О номинациях
 2 место – 20 000 рублей 1. Серией материалов считается блок из не менее чем
 3 место – 10 000 рублей двух статей. Тема серии – по собственному выбору ав-
тора или же по выбору редакции.
Номинации 2. Статья, написанная на тему, придуманную автором
1. За лучшую серию материалов и одобренную редакцией.
2. За лучшую новую авторскую тему 3. Аналитическая статья может быть написана на тему,
3. За лучшую аналитическую статью предложенную автором или же на тему, заказанную ре-
дакцией.
Кто участвует
Участие принимают все авторы, опубликовавшие свои Кто судьи
статьи в журнале «Системный администратор» в тече- В состав жюри войдут сотрудники редакции и предста-
ние 2006 года. Напоминаем, что автором может стать лю- вители дружественных журналу информационных ре-
бой человек. сурсов.

Условия публикации разбивайте материал на несколько частей.


Принимаются материалы, нигде ранее не опубликованные Если вы пишете о продукте, технологии или компании,
(в том числе в Интернете, прочих глобальных сетях, печат- описывайте не только «плюсы», но и «минусы», а также при-
ных изданиях и т. д.). Статьи не рецензируются. водите информацию о конкурентах.
За содержание статьи ответственность несет автор. Рекомендуем ознакомиться со статьями на интересую-
В течение двух недель редакция принимает решение щую вас тему, которые уже есть на нашем сайте.
о публикации статьи и сообщает об этом автору.
Редакция оставляет за собой право редактировать пре- Требования к виду присылаемых
доставленные материалы. материалов
Редакция имеет эксклюзивное право на распростране- Статьи следует присылать в текстовом виде, предпочти-
ние принятого материала в журнале, включая возможность тельно в формате RTF или DOC. Имена пересылаемых
его публикации в любой электронной форме. файлов только на английском языке. Выравнивание столб-
По истечении двух месяцев с момента выхода журнала, цов производится табуляцией, а не пробелом. В тексте ста-
содержащего публикации, автор имеет право опубликовать тьи рекомендуется указывать местоположение иллюстра-
свой материал в другом месте только с предварительного ций и подписи к ним, а сами иллюстрации не нужно встав-
письменного согласия редакции и с обязательной ссылкой лять в тело документа, их нужно запаковать в отдельный
на журнал «Системный администратор». архив. Иллюстрации должны быть строго в формате PNG.
По истечении одного года с момента первой публика- Листинги должны содержать не более 60 символов (вмес-
ции автор имеет право опубликовать свой материал в дру- те с пробелами) в одной строчке. Переносы строк листин-
гом месте без предварительного письменного согласия гов должны быть указаны в явном виде (---перенос стро-
редакции. ки---). Если в статье приводятся ссылки на ресурсы в сети,
URL должен быть указан в явном виде.
Общие требования к статьям
Статьи не должны иметь рекламный характер какого-либо Контакты
продукта, компании или технологии. В статье указывают-
Адрес: 107045, г. Москва, Ананьевский переулок
ся ссылки на источники информации.
д. 4/2, стр. 1, Редакция «Учительской газе-
Не допускается несанкционированный перевод на рус-
ты», журнал «Системный администратор»
ский язык статей, обзоров и сравнительных тестирований
продуктов, опубликованных в иностранных изданиях. Телефон: (495) 628-82-53
Факс: (495) 628-82-53
Рекомендации авторам Сайт: www.samag.ru
Объем статьи – от 4 до 20 тыс. знаков. Если тема ста-
тьи предполагает объем, превышающий 20 тыс. знаков – e-mail: imp@samag.ru, secretar@samag.ru

№5, май 2006 91


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

Практический подход к решению


проблем программирования C++
Мэтью Уилсон
«будьте смиренны», «сделайте ком- цовочных и прикрепляемых классах,
пилятор вашим ординарцем» и «ни- а также о шаблонах и конструкторах.
когда не сдавайтесь: решение всегда Отдельный раздел посвящен опера-
можно найти». После столь философ- торам – operator bool(), операторы ин-
ского вступления, начинаются первая дексации и инкремента, арифметичес-
часть, которая называется «Базовые кие типы. Расширение С++ : продолжи-
концепции». Из нее вы узнаете о при- тельность жизни возвращаемых зна-
нудительном проектировании (огра- чений, память, многомерные массивы,
ничения, соглашения и утверждения), функторы и диапазоны. В приложениях
проблеме жизненного цикла объекта, вы также найдете массу полезной ин-
инкапульсации ресурсов, данных, ти- формации. Книга носит сугубо практи-
пах значений, моделях доступа к объ- ческий характер, и весь материал со-
ектам. Вторая часть: двоичный интер- провождается большим количеством
Перед вами не просто еще одна кни- фейс приложения, динамические биб- примеров. Отличная книга, рекомен-
га о С++, в которой будет говорить- лиотеки, поточная организация вычис- дую всем программистам на C++.
ся о том, как «правильно» писать. Это лений, статические объекты, оптими-
нечто большее, это своего рода про- зация. В разделе, посвященном язы-  Издательство: «Кудиц-Образ»
водник и помощник, а так же добрый ковым проблемам, автор рассказыва-  Год издания: 2006
советчик. В введении, которое носит ет о фундаментальных типах, масси-  Количество страниц: 736
название «философия неидеального вах и указателях, синтаксисе, именах,  ISBN: 5-91136-006-3
практика» автор подробно описыва- вводимих typedef. Следующая часть –  Цена: ≈ 511 руб.
ет четыре тезиса, а именно: «С++ ве- «Осознанные преобразования», из нее Книга предоставлена издательством «Кудиц-
ликолепный язык, но не идеальный», вы узнаете о приведении типов, обли- Образ».

Руководство Cisco по конфигурированию


коммутаторов Catalyst
Дэвид Хьюкаби, Стив Мак-Квери
глав, из которых вы узнаете о использо- ры (SLB): суть технологии, балансиров-
вании интерфейса коммандной строки, ка нагрузки на брандмауэры, SLB-тесты.
функциях коммутаторов различных се- Управление трафиком и доступом к ком-
рий (2950, 3550, 4000, 5000, 6000). Рас- мутатору (подавление широковещания,
смотривается конфигурирование бло- фильтрация протоколов, функции обес-
ка Supervisor; конфигурирование интер- печения безопасности портов, списки
фейсов второго уровня: таблицы комму- доступа VLAN сетей, аутентификация,
тации, выбор порта, Ethernet, etherchanel, списки разрешения доступа, конфигу-
token ring порты; конфигурирование ин- рирование служб SSH и Telnet, 802.1X).
терфейсов третьего уровня: WAN интер- Управление коммутатором, качество об-
фейсы, VLAN, таблицы маршрутизации. служивания (QoS), поддержка переда-
VLAN-сети и транкинг: конфигурация, чи голосовых данных. Книга – хорошее
назначение сетям VLAN портов, тран- приобретение для всех людей, которые
Издание является переводом офици- кинг; протокол распределенного свя- так или иначе работают с оборудовани-
ального руководства по настройке ком- зующего дерева (STP), многоуровне- ем фирмы Cisco.
мутаторов Catalyst. Благодаря сжато- вая коммутация (экспресс-коммутация
му стилю повествования, авторам уда- Cisco, экспорт данных NetFlow, резер-  Издательство: «Cisco Press»
лось поместить максимум информации вирование модулей MSFC в одном ус-  Год издания: 2004
в минимальный объем. Освоив матери- тройстве, резервирование маршрути-  Количество страниц: 560
ал этой книги, вы без затруднений смо- заторов с помощью протокола HSRP).  ISBN: 5-8459-0700-4
жете работать с большинством моделей Многоадресные службы: IGMP-про-  Цена: ≈ 589 руб.
коммутаторов серии Catalyst. Вся книга слушивание, протоколы CGMP, GMRP, Книга предоставлена издательством «Cisco
четко структурирована, и поделена на 14 RGMP. Балансировка нагрузки на серве- Press».

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

Структура и реализация сетей


на основе протокола OSPF
Томас М. Томас II
лом и справочной информацией. «Ос- маштабируемость и топология сети,
новные принципы функционирования рассмотрены вопросы проектирова-
протокола OSPF и организация взаи- ния различных областей). В третей
модействия маршрутизаторов», так части «Внедрение, устранение нару-
называется первый раздел, из кото- шений в работе и управление сетью
рого вы узнаете основные сведения OSPF» автор повествует о протоко-
об организации сетей и маршрути- ле SNMP, защите сети, рассмотре-
зации (модель OSI, протоколы TCP/ ны основные команды, применяемые
IP, типы сетевых топологий, принци- для поиска и устраниения неисправ-
пы адресации, методы VLSM и CIDR). ностей в сети. Не остался без внима-
Введение в OSPF (краткий обзор ал- ния и вопрос о применении протокола
горитма SPF, иерархия маршрутиза- BGP и технологий MPLS в сетях OSPF.
ции и эксплуатационная среда OSPF), По окончания каждой главы матери-
Сейчас сложно представить, каки- способы взаимодействия по прото- ал резюмируется и приводятся прак-
ми могли бы быть сети без протокола колу OSPF (анонсы с информацией о тические примеры.
динамической маршрутизации OSPF состоянии каналов, способы переда-
(Open Shortest Path First). Эта книга чи информации с помощью протоко-  Издательство: «Cisco Press»
послужит вам как «учебником», так и ла OSPF, управление анонсами LSA).  Год издания: 2004
справочным пособием по этому прото- Вторая часть носит название «Мар-  Количество страниц: 816
колу маршутизации. Всего в книге три шрутизация и проектирование сетей  ISBN: 5-8459-0594-X
основные части, которые представле- OSPF» в которой написано об основ-  Цена: ≈ 657 руб.
ны десятью главами, и заключитель- ных принципах проектирования (ме- Книга предоставлена издательством «Cisco
ная часть с дополнительным материа- тодология проектирования сети OSPF, Press».

Eclipse IDE
Эд Барнет
лений». Основной упор сделан на рас- вает свое название. Из нее вы узнае-
смотрение инструментария для разра- те о CVS, Ant, платформе веб-инстру-
ботки приложений на Java. Из главы ментов, тестировании и производитель-
«Введение» вы узнаете общие сведения ности, визуальном редакторе, AspectJ,
о Eclipse, установке, запуске и обнов- разработке плагинов, платформе Rich
лении этого продукта. Во второй главе, Client. Завершает книгу глава «Получе-
с лаконичным названием «Верстак 101» ние помощи», в которой автор предо-
будет рассмотрен интерфейс и основ- ставил список источников, из которых
ные меню IDE Eclipse. Следом идет гла- можно получить помощь по IDE Eclipse.
ва «Java быстро», в которой написано о Замечательная во всех отношениях
процессе создания проекта, кодирова- книга – весь материал строго по делу,
нии, запуске программы, отладке, юнит- и без лишней воды. Если вы собирае-
тестирование, а также советы и хитрос- тесь, или уже работайте с Eclipse это
ти (помощник создания кода, шаблоны, издание станет вашим незаменимым
автоматический вход, рефакторинг, ги- спутником и помощником.
В настоящий момент Eclipse является перссылки, быстрое исправление, по-
одной из самых популярных интегри- иск, альбомные страницы, Java Build  Издательство: «Кудиц-Образ»
рованных сред разработки. Этот про- Path, конфигурация запуска). Для того  Год издания: 2006
дукт по праву завоевал любовь у тысяч чтобы не запутаться в множестве эк-  Количество страниц: 160
людей по всем миру за свою простоту, ранов и панелей инструментов Eclipse,  ISBN: ISBN 5-91136-007-1
функциональность, и, что не маловаж- в главе «Экраны» перечислены основ-  Цена: ≈ 99 руб.
но, свободность. Несмотря на неболь- ные объекты. Содержание главы «Ко- Книга предоставлена издательством «Кудиц-
шой объем книги, автор позициониру- ротко о разном» полностью оправды- Образ».
ет её как «исчерпывающее руководс-
тво по Eclipse IDE без излишних отступ- Обзор книжных новинок подготовил Александр Байрак

№5, май 2006 93


подписка на 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
по каталогу
агентства
«Пресса
России»
*
годовой
**
полугодовой

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

Для юридических лиц:


№5
по (30
д
ww писн

w.s ой ай 2
По am ин
ag дек
0 05
Ищ чем .ru с 8165
ем у M 5

 Отправьте заявку по факсу (495) 628-82-53 или по e-mail:


Ст пр S S
WP роим ичин QL м
A-E з ы ед
На nte ащи ле
нн
стр rpr ще ор
Ка аи is н
e, ную аб
info1@samag.ru. уд к во ва 80 ота
ем 2.1 бес ет?
ал сс UP
Чт
ов
е н т
ны но а S по
x EA пров
е ф вит дL P-T од
аж LS ную

 Укажите наименование и банковские реквизиты своей но ай ь inu


в к тана зн лы x се
ть:
ор вл ать по
Эф п ор ваи об д BS
по фек ати ем IP- D
ля ти вн Sy тел

организации, почтовый индекс и адрес доставки журна- ми вн ой ma еф


Ко по о у се nte он
с п нтро ль пр ти c
A и и
ом ли зо ав ntiv
Ин ощ ру ва ля iru
ью ем тел ем s9
со терв
ла, телефон и e-mail контактного лица, период подпис- OS без ей .0
зд ью SIM оп вA
ате с ас D
ле Ла но
м я рр сть
зы и У се
ки и количество номеров. Редакция выставит вам счет,
ка ол ти
Pe лом
rl –

после оплаты которого вы начнете получать журналы


по почте. Необходимые бухгалтерские документы вы-
сылаются почтой.

Для физических лиц:


 Заполните нижеприведенную квитанцию, оплатите в лю-
бом банке и пришлите в редакцию копию с отметками
банка.
 После поступления платежа редакция начнет отправ-
лять вам номера.

Стоимость
подписки через
редакцию:

900* руб.
за 6 номеров
1800* руб.
за 12 номеров

* Включая НДС
и почтовую доставку

№5, май 2006 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№5(42), Май, 2006 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец В СЛЕДУЮЩЕМ
НОМЕРЕ:
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
Технический редактор
Владимир Лукин
Редактор
Алексей Коршунов Современный Linux-сервер: мацию о различных событиях, про-
Внештатные редакторы виртуализация сетевых исходящих в системе. Например, ин-
Алексей Барабанов устройств формацию об ошибках приложений
Кирилл Тихонов В серверном эксплуатационном цикле или о попытках несанкционированно-
Валентин Синицын часто возникает потребность во все- го проникновения в сеть. Автоматиза-
возможных манипуляциях над сете- ция реакции на эти сообщения являет-
РЕКЛАМНАЯ СЛУЖБА выми подключениями в режиме on-line. ся важным элементом в обеспечении
тел./факс: (495) 628-8253
Переведя последние в категорию вир- бесперебойного функционирования
Евгения Тарабрина
туальных можно значительно упрос- всей сети. Конечно, каждый админис-
reсlama@samag.ru
тить их обслуживание и предусмотреть тратор, придя на работу, первым де-
Верстка и оформление многие внештатные ситуации. лом должен проверить протоколы сво-
maker_up@samag.ru их серверов, не произошло ли что-ни-
Дизайн обложки Как настроить будь в течение ночи или за выходные,
Николай Петрочук безопасный роутер и в случае необходимости принять со-
на базе FreeBSD ответствующие меры. Однако иногда
По вопросам распространения В этой статье мы рассмотрим вопросы такая реакция может оказаться запоз-
обращайтесь по телефону: безопасности FreeBSD, работающей в далой, особенно это касается попыток
(495) 628-8253 (доб. 120) качестве маршрутизатора между ло- осуществления несанкционированно-
кальной сетью и Интернетом. Говоря го входа в систему.
107045, г. Москва,
о безопасности в общем, мы постоян-
Ананьевский переулок, дом 4/2, стр. 1
тел./факс: (495) 628-8253 но возвращаемся к одному простому и Linux в школе?
Сайт журнала: www.samag.ru действенному правилу: все, что чело- Из всех сфер применения вычисли-
век создал, человек может и уничто- тельной техники наиболее интересной
РУКОВОДИТЕЛЬ ПРОЕКТА жить. И в вопросе безопасности опе- является использование Linux в сфе-
Петр Положевец рационных систем это правило неиз- ре образования. Конечно, сегодняш-
менно действует: ОС создал человек, няя ситуация с программами, ориен-
УЧРЕДИТЕЛИ следовательно, всегда найдется другой тированными на сферу образования,
Владимир Положевец человек, который сможет обойти ее за- еще далека от идеальной: программы
Александр Михалев щиту, какой бы мощной она не была. локализованы не полностью, нет стан-
дартного интерфейса, не хватает под-
ИЗДАТЕЛЬ
ЗАО «Издательский дом
Пишем систему готовленных специалистов и прочее.
«Учительская газета» динамической защиты Но главное, что общими усилиями про-
ресурсов сети цесс сдвинулся с места. И не исполь-
Отпечатано типографией Серверные журналы, проще говоря, зовать заложенный в Open Source по-
ГП «Московская Типография №13» протоколы, содержат в себе инфор- тенциал – просто преступление.
Тираж 11000 экз.

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


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

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

96

Вам также может понравиться