98
Роспечать – 20780, 81655 Пресса России – 87836 Интер-почта – тел. (495) 500-00-60 Так видит журнал читатель, который забыл оформить подписку: ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Так видит журнал читатель, оформивший подписку: НОВОГОДНИЕ КАНИКУЛЫ ЗАТЯНУЛИСЬ БЫСТРО РАСКУПИЛИ ТИРАЖ НЕОЖИДАННО ЗАКОНЧИЛИСЬ ДЕНЬГИ УЕХАЛ В ОТПУСК ПОСЛЕ ОТПУСКА АВРАЛ НА РАБОТЕ №5(30) май 2005 подписной индекс 81655 www.samag.ru Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl №5(30) май 2005 подписной индекс 81655 www.samag.ru Почему MS SQL медленно работает? Ищем причины Строим защищенную беспроводную сеть: WPA-Enterprise, 802.1x EAP-TLS Настраиваем UPS под Linux Как восстановить удаленные файлы под BSD Что важно знать об IP-телефонии танавливаем Symantec Antivirus 9.0 в корпоративной сети Эффективно управляем полями пользователей в AD Контролируем безопасность сети с помощью OSSIM Интервью с Ларри Уоллом – создателем языка Perl №11(48) ноябрь 2006 №11(48) ноябрь 2006 подписной индекс 20780 www.samag.ru MS Windows XP SP3, или Много шума из ничего Разрабатываем пакет управления для МОМ 2005 Кластеризация + виртуализация: Linux HA + OpenVZ На что способен дистрибутив SystemRescueCd Linux Безопасность в FreeBSD: разбираемся в тонкостях применения jail Работаем с NTLM- авторизацией Apache в домене MS Windows 2003 Чего ждать от Perl 6 Интервью с создателем популярного ресурса OpenNET

048 Системный Администратор 11 2006

Embed Size (px)

DESCRIPTION

№11(48) ноябрь 2006 подписной индекс 20780 www.samag.ru Н Е О Ж И Д А Н Н О Б Ы С Т Р О Р А С К У П И Л И Т И Р А Ж Н О В О Г О Д Н И Е П О С Л Е О Т П У С К А А В Р А Л Н А Р А Б О Т Е №11(48) ноябрь 2006 Почему MS SQL медленно работает? Ищем причины Почему MS SQL медленно работает? Ищем причины №5(30) май 2005

Citation preview

Page 1: 048 Системный Администратор 11 2006

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

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

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

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

НОВОГОДНИЕ

КАНИКУЛЫ

ЗАТЯ

НУЛИСЬ

БЫСТР

О РАСКУПИЛИ

ТИРА

Ж

НЕОЖ

ИДАННО

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

ЕНЬГИ

УЕХАЛ В

ОТП

УСК

ПОСЛЕ ОТП

УСКА

АВРАЛ Н

А РАБОТЕ

№5(30) май 2005подписной индекс 81655www.samag.ru

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

Строим защищенную беспроводную сеть:WPA-Enterprise, 802.1x EAP-TLS

Настраиваем UPS под Linux

Как восстановить удаленные файлы под BSD

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

танавливаем Symantec Antivirus 9.0в корпоративной сети

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

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

Интервью с Ларри Уоллом –создателем языка Perl

№5(30) май 2005подписной индекс 81655www.samag.ru

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

Строим защищенную беспроводную сеть:WPA-Enterprise, 802.1x EAP-TLS

Настраиваем UPS под Linux

Как восстановить удаленные файлы под BSD

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

танавливаем Symantec Antivirus 9.0в корпоративной сети

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

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

Интервью с Ларри Уоллом –создателем языка Perl

№11

(48)

ноя

брь

2006

№11(48) ноябрь 2006подписной индекс 20780www.samag.ru

MS Windows XP SP3, или Много шума из ничего

Разрабатываем пакет управления для МОМ 2005

Кластеризация + виртуализация: Linux HA + OpenVZ

На что способен дистрибутив SystemRescueCd Linux

Безопасность в FreeBSD: разбираемся в тонкостях применения jail

Работаем с NTLM-авторизацией Apacheв домене MS Windows 2003

Чего ждать от Perl 6

Интервью с создателем популярного ресурса OpenNET

Page 2: 048 Системный Администратор 11 2006
Page 3: 048 Системный Администратор 11 2006

1№11, ноябрь 2006

в номере

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

73, 91 BUGTRAQ

ИНТЕРВЬЮ

Linux-десктопы должны быть привлекательными

2

Дмитрий Шурупов[email protected]

Пол Гийе (Paul Guillet), ответственный за продажи Mandriva, рассказывает о ближайших планах компании.

ТЕНДЕНЦИИ5

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

Кластеризация + виртуализация: Linux HA + OpenVZЧасть 1: кластеризация на практике

6

Евгений Прокопьев[email protected]

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

MS Windows XP SP3, или Много шума из ничего

14

Третий пакет обновлений для MS Windows XP напоми-нает второй том «Мертвых душ»: его пишут где-то там, за границей, его все ждут, вспоминая предыдущий ва-риант, о нем уже сочиняют небылицы…

Алексей Барабанов[email protected]

Разрабатываем пакет управления для МОМ22

Андрей Бирюков[email protected]

Как написать свой пакет управления Microsoft Operations Manager 2005 для одной из наиболее важных служб ва-шей сети.

Полезные советы: PostgreSQL27Сергей Супрунов[email protected]

На что способен дистрибутив SystemRescueCd Linux

28

Наверняка вам приходится восстанавливать системы после сбоя и использовать для этого наборы дистри-бутивов и Live-CD различного назначения. Есть единое и компактное решение «все в одном».

Иван Максимов[email protected]

Автоматизируем процесс установки обновлений с PatchQuest 4

34

Сергей Яремчук[email protected]

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

Виртуальные радости и открытия Максима Чиркова

38

Оксана Родионова[email protected]

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

ЧЕЛОВЕК НОМЕРА

Выявление угроз информационной безопасности внутри компании

42

Никита Дуров[email protected]

Простейшие способы для диагностики системы за-щиты.

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

Внутренние IT-угрозы в банке превосходят по значимости все остальные

45

Анна Верхось[email protected]

О том, как важно правильно защитить банк от внутрен-них IТ-угроз, рассказывает председатель совета дирек-торов Банка высоких технологий Игорь Триф.

FreeBSD jail: зона строгого режима46Разбираемся в тонкостях работы с jail.

Сергей Супрунов[email protected]

Полезные советы: Bacula53Сергей Яремчук

[email protected]

Ошибки синхронизации открывают большие возможности для хакеровКаковы механизмы защиты?

54

Крис Касперски[email protected]

Kerberos и электронная почта62

Михаил Кондрин[email protected]

Cпособ интеграции SMTP-сервера Postfix и IMAP/POP3 сервера Сyrus-IMAP в систему единой регистрации поль-зователей Heimdal-Kerberos.

Работаем с NTLM-авторизацией Apache в домене MS Windows 2003

68

Подробности настройки.Владимир Василькин

[email protected]

Защищаем PHP-приложения с помощью Suhosin

74

Сергей Яремчук[email protected]

Обзор проекта Suhosin.

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

Чего ждать от Perl 6Perl готовится сделать новый рывок и оставить конку-рентов позади. До круглой цифры счетчику версий ос-талось совсем немного.

78

Андрей Шитов[email protected]

История компьютерных вирусов86

Илья Александров[email protected]

РЕТРОСПЕКТИВА

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

Page 4: 048 Системный Администратор 11 2006

2

интервью

Mandriva: Linux-десктопы должны быть привлекательными

IT-выставку Softool’2006, что проходила в Москве в конце сентября, посетил Пол Гийе (Paul Guillet), ответственный за продажи Mandriva, который согласился дать интервью нашему журналу.

Page 5: 048 Системный Администратор 11 2006

3№11, ноябрь 2006

интервью

Главной инновацией вашего пос-леднего десктоп-продукта, Mandriva Linux 2007 [1] , стало появление «трехмерного окружения» рабоче-го стола – технологий Xgl и AIGLX. Многие представители сообщества считают, что эти разработки еще не-достаточно стабильны, а вы их уже включили в дистрибутив, предна-значенный для домашних пользо-вателей.Если вы сегодня хотите занять какое-либо место в мире информационных технологий с решениями на базе Linux, необходимо предоставить людям про-дукты, которые будут как минимум на том же уровне, что и предложения от компаний вроде Apple и Microsoft, или превосходить их. Рассматривае-мые возможности, на наш взгляд, до-статочно стабильны, чтобы включить их в дистрибутив Mandriva. Если бы они таковыми не были, то их, естес-твенно, и не интегрировали бы в ста-бильный релиз на этом этапе. Novell, например, давно уже включила Xgl в свой продукт.

Novell во многом и способствова-ла разработке Xgl, поэтому впол-не логично, что она и стала первой, кто представил результат обще-ственности в своем продукте. Осо-бенно учитывая ее растущее проти-воборство с Red Hat...У нас есть свои проекты в Бразилии, ко-торые мы продвигаем совместно с быв-шими сотрудниками Conectiva, что ста-ли частью нашей команды. А Novell – это очень большая компания, в которой работают тысячи людей. И все они, мо-жете не сомневаться, борются за свои рабочие места. В Mandriva все иначе. В первую очередь я имею в виду скром-ный штаб. Но когда мы объединились с Conectiva, взяли на вооружение все интересные разработки из дистрибу-тива этой компании.

Мы пытаемся продвигать лучшее из того, что у нас есть, в США и Се-верной Америке, в Европе. При созда-нии продуктов мы преследуем цель от-ветить текущим потребностям рынка, а он требует дружелюбного и простого в использовании Linux для десктопов. Поэтому мы включаем в состав дист-рибутива и решения, которых нет у той же Novell, а эта компания представля-ется главным конкурентом на потреби-

тельском рынке.Например, DVD-плейер (имеется

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

В своих продуктах вы совмещаете свободное ПО с проприетарным, что многими рассматривается как мо-ветон. Нет ли у вас планов по вы-делению бесплатного дистрибути-ва с полностью открытым кодом наподобие Fedora Core, openSUSE от коммерческого?Это действительно сложный вопрос для меня. Думаю, такая схема пока плохо применима к Mandriva в отли-чие от Red Hat и Novell. Последняя, на-пример, существует уже 25 лет и ус-пела за это время заработать нема-лые деньги для инвестирования в мар-кетинг. Такой Open Source-проект – это средство для достижения цели (ко-ей в данном случае является продава-емый дистрибутив).

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

ем любую хорошую идею, предостав-ляемую нам сообществом. Причем, ко-нечно, под GPL.

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

К а с а т е л ь н о в а ш е г о с л и я н и я с Conectiva [2]. Какие проекты бра-зильской компании перешли в со-став дистрибутива Mandriva?Имеет больший смысл говорить не о конкретных проектах, а о наших объединившихся командах. Об изме-нении организации компании, в кото-рой возникло 2 подразделения: одно в Бразилии, а другое – во Франции...

То есть ключевой целью здесь было расширение рынка для дистрибути-ва за счет географии?Именно так. Это означает, что наши коллективы смешались, образовав интернациональную команду. Все те-кущие продукты Mandriva – факти-чески сейчас их пять – создаются сов-местными усилиями разработчиков и из Mandriva, и из бывшей Conectiva.

Сейчас у нас порядка 8 миллионов пользователей во всем мире. Пред-ставителей Франции среди них – 10%. Благодаря слиянию с Conectiva в Ла-тинской Америке у нас около 25% поль-зователей. Европа составляет около 40%, а США – 25%. У нас интернацио-нальная компания, и мы сделали дис-трибутив доступным для таких стран, как Россия, США, Азербайджан. Боль-шое внимание мы уделяем локализа-циям, потому что это важно для про-движения на международном рын-ке, – нужно показывать пользовате-лям уважение к их национальным осо-бенностям.

К вопросу о Mandriva в России [3]. Почему вы выбрали нашу страну для популяризации своего дистри-бутива?

Пол Гийе (Paul Guillet) занялся Linux-биз-несом еще в 1995 году и был директором одного из крупнейших Linux-реселлеров на территории Франции («Les Logiciels du Soleil/KHEOPS»). В 1999 году стал соос-нователем и исполнительным директо-ром IdealX SAS, а в начале 2003 г. пришел

в Mandriva, где теперь занимает должность директора по продажам. Стоит отметить, что из этой же компании (IdealX) в Mandriva перешел и ее нынешний главный технолог Дэвид Барт (David Barth).

(По материалам http://www.mandriva.com/en/company/about/executives.)

Page 6: 048 Системный Администратор 11 2006

4

интервью

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

Отличное от решений Microsoft?Да. Но для того чтобы они заинтересо-вались в каком-либо решении, со сто-роны производителя необходима под-держка их языка, понимание мест-ной экономики и особенностей этой страны.

А как насчет стран Азии? Индия, Ки-тай, Япония?Пока мы пытаемся сосредоточиться на развивающихся странах. Индия, в меньшей степени Китай (хотя у не-го большой потенциал), страны СНГ, Россия – среди наших главных при-оритетов.

К нам проявляют интерес заказ-чики из России, Азербайджана, Лат-вии, Грузии, Казахстана... Мы идем на-встречу в сотрудничестве с различны-ми странами – так и создается бизнес в Mandriva: это даже не бизнес, а пос-троение экосистемы.

Вы продвигаете свой дистрибутив в России, но я, например, ни разу не слышал о том, чтобы у нас про-давались ПК с предустановленной Mandriva Linux. Планируется ли раз-витие этого направления?

Мы установили контакты с некоторы-ми производителями для создания та-кого канала распространения. Рынок железа сильно изменяется, в разви-вающихся странах 80% национально-го рынка составляют не Dell, HP, IBM и другие представители «большой пя-терки», а продукция от компаний вро-де Asus и Gigabyte. Linux же постепен-но проникает в эти страны. Так что мы открыли программу для продви-жения Mandriva по этим каналам, и она уже неплохо работает. Таким спосо-бом в Бразилии продается порядка 30 000 копий дистрибутива в месяц. Думаем, что эта тенденция со време-нем дойдет и до России.

Недавно вы также выпустили но-вую версию своего корпоративно-го продукта – Corporate Server 4.0 [4]. Это решение существует уже не первый год, однако, судя по СМИ, нишу дистрибутивов для Linux-сер-веров прочно заняли RHEL и SLES, и никаких посылок к серьезным пе-ременам тут не предвидится.На данный момент от Corporate Server у нас около 10% прибыли. У нас есть и крупные корпоративные заказчики. Во Франции, например, это Минис-терство оборудования, Министерс-тво культуры, Министерство сельско-го хозяйства.

Каковы ваши ближайшие планы? На днях Novell представила Linux ре-ального времени [5]. Не планируете ли вы расширение линейки своих

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

Касательно RTOS-продукта Novell... Мы проводили экспертизу по рынку встраиваемых устройств. В этой облас-ти очень сложно создать «коробочное» решение. После ознакомления с ре-зультатами наших исследований при-шли к выводу, что не хотим конкуриро-вать со специалистами этого сегмен-та. Если у Novell есть такое желание – пожалуйста, это их право.

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

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

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

текст Дмитрия Шурупова, фото Владимира Положевца

1. Анонс Mandriva Linux 2007 – http://www.nixp.ru/news/7809.

2. Mandrakesoft поглощает Conectiva – http://www.nixp.ru/news/5515.

3. ЛинуксЦентр – лучший партнер Mandriva – http://www.linuxcenter.ru/lib/press/mandriva_press.phtml.

4. Анонс Mandriva Corporate Server 4.0 – http://www.nixp.ru/news/7767.

5. Novell выпустит Suse Linux Enterprise Real-Time – http://www.nixp.ru/news/7770.

Page 7: 048 Системный Администратор 11 2006

5№11, ноябрь 2006

тенденции

У Mozilla и Firefox появились GNU-ответвленияНеуступчивая в вопросах лицензирования политика Mozilla привела к тому, что проект GNU представил свои редакции ее продуктов Mozilla и Firefox.

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

Приложения получили названия Gnuzilla и IceWeasel со-ответственно. Имя последнего еще в 2004 году придумал Натанаэл Нерод (Nathanael Nerode): «Лед – это не Огонь, а Ласка – не Лиса, так что это, очевидно, другой пакет (мы не хотим, чтобы Mozilla критиковали за наши ошибки, и каких-либо проблем с их торговыми марками), однако с та-кой же очевидностью и относящийся к оригиналу».

Разработчики проекта Debian GNU/Linux, известно-го своей требовательностью к лицензионной «чисто-те», еще до появления этого сообщения объявили о том, что в следующем стабильном релизе вместо оригиналь-ного Firefox в дистрибутив войдет несколько измененная версия браузера.

Компания iXsystems купила права на PC-BSDСпециализирующаяся на корпоративном аппаратном обеспечении iXsystems приобрела права на основанную на FreeBSD операционную систему PC-BSD.

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

«Теперь, с поддержкой iXsystems и их большим опы-том в сфере BSD-серверов, PC-BSD планирует принести на рынок серверов стабильность и простоту использова-ния. Большие и малые предприятия смогут только выиг-рать от удобства использования как десктопов с PC-BSD, так и серьезных серверов, в основе которых будет лежать FreeBSD», – прокомментировал это событие Крис Мур (Kris Moore), основатель проекта PC-BSD.

«Наши поддержка и дальнейшее развитие PC-BSD ус-корят адаптацию операционной системы FreeBSD пользо-вателями Windows и Linux, привыкшими к удобному графи-ческому интерфейсу», – заявил Мэтт Оландер (Matt Olander), главный технолог iXsystems.

MySQL представила серверы Enterprise и CommunityРазработчик популярной СУБД с открытым кодом предста-вил проекты MySQL Enterprise Server и MySQL Community Server. Первая инициатива, как видно из названия, нацеле-на на корпоративных заказчиков и представляет собой но-вую подписку. В нее помимо самой СУБД входит привыч-ная техническая поддержка и обновления, а также новая услуга мониторинга баз данных.

MySQL Community Server ориентирован на сообщес-тво и должен помочь разработчикам ПО с открытым ко-дом обмениваться информацией между собой и с со-

трудниками компании MySQL AB. Одновременно с тем для разработчиков запустили веб-сайт MySQLForge (http://forge.mysql.com).

«Эта дифференциация нацелена на лучшее обслужи-вание обеих категорий пользователей MySQL: тем, кто го-тов потратить время для экономии денег, и тем, кто хочет потратить деньги для экономии времени», – прокомменти-ровал изменения в своем блоге Кай Арно (Kaj Arno), вице-президент по делам с сообществом в MySQL AB.

Консорциум SQO-OSS проверит качество Open SourceЕвропейская комиссия учредила очередной Open Source-проект: созданному при ее содействии консорциуму SQO-OSS (Quality Observatory for Open Source Software) уже перечислили около 4 млн. долларов для тестирования качества программного обеспечения с открытым кодом.

В SQO-OSS вошли исследовательские организации, консультанты и некоторые проекты Open Source (среди них, например, KDE). Половину средств консорциум полу-чил от своих участников, а об остальном побеспокоилась сама Европейская комиссия.

SQO-OSS будет предоставлять (под лицензией BSD) результаты по тестированию качества исходного кода про-дуктов Open Source с целью выявления степени их готов-ности для использования в корпоративной среде. Вдоба-вок будет опубликована таблица рейтинга приложений с от-крытым кодом.

Составил Дмитрий Шуруповпо материалам www.nixp.ru

Page 8: 048 Системный Администратор 11 2006

6

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

Кластеризация + виртуализация: Linux HA + OpenVZЧасть 1: кластеризация на практике

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

Евгений Прокопьев

Page 9: 048 Системный Администратор 11 2006

7№11, ноябрь 2006

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

Чем больше сервисов находится в вашем попечении и чем в боль-шей степени от их работоспособ-

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

го резервного копирования важ-ных данных до систем высокой готовности (High Availability), ког-да при выходе из строя основно-го сервера его функции автома-тически берет на себя резервный сервер;

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

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

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

Если требуется гарантировать отказоустойчивость сервису, кото-рый сам по себе отказоустойчивым не является и встроенных механиз-мов кластеризации не имеет, то осо-бых альтернатив проекту Linux HA (http://linux-ha.org) нет.

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

шние по отношению к проекту Linux HA средства организации распределенно-го файлового хранилища.

В их качестве могут выступать: классические распределенные

файловые системы (OCFS, CODA, GFS, Lustre), позволяющие орга-низовать параллельный доступ к файлам с нескольких компьюте-ров одновременно;

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

прочие средства, которые в прин-ципе использовать можно, но либо их надежность (NFS, CIFS), либо стоимость (SAN) являются непри-емлемыми.

Чаще всего в связке с Heartbeat ис-пользуется DRBD (http://drbd.org), вер-сия 7 которой обеспечивает более вы-сокую производительность и надеж-ность по сравнению с классическими распределенными файловыми систе-мами. DRBD версии 8 движется в сто-рону своих конкурентов, пытаясь со-хранить собственные преимущества, но к промышленной эксплуатации она пока еще не готова.

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

КластерыВ Википедии (http://wikipedia.org) кластер определяется как группа серверов, связан-ных логически и способных обрабатывать идентичные запросы. Серверы в составе кластера называются узлами или нодами (Node). Каждый узел имеет собственный набор ресурсов, которые он предоставля-ет в пользование кластеру. Выделяют сле-дующие типы кластеров: Кластеры повышенной производи-

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

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

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

В этой статье нас будет интересовать только последний тип – кластеры высокой готовности.

Рисунок 1. Кластеризация + виртуализация

Page 10: 048 Системный Администратор 11 2006

8

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

ков свободных программ на Протве – http://kir.vtx.ru/lj/openvz-intro-ru.pdf): Эмуляция (примеры реализа-

ции: QEmu, Bochs) – фактически это полная эмуляция аппаратно-го обеспечения, позволяющая за-пускать в виртуальной среде лю-бую операционную систему, одна-ко производительность таких ре-шений сравнительно низкая.

Паравиртуализация (примеры ре-ализации: Xen, User-mode Linux) – позволяет запускать в виртуаль-ной среде специально модифици-рованную для этой среды опера-ционную систему, соответственно запустить можно не все, но то, что запустить удастся, будет работать быстрее.

Виртуализация на уровне опе-рационной системы (примеры реализации: FreeBSD Jail, Solaris

ется максимально возможная плот-ность размещения виртуальных сред по сравнению с двумя предыдущими типами. Из трех открытых проектов, предназначенных для Linux, наиболее функциональным и быстрее всего раз-вивающимся выглядит OpenVZ, кото-рый также является основой для про-приетарного продукта Virtuozzo фир-мы SWSoft. Более того, на wiki проек-та довольно коротко уже описана удач-ная попытка «скрестить» его с проек-том Linux HA – http://wiki.openvz.org/HA_cluster_with_DRBD_and_Heartbeat. Поэтому пойдем уже проторенной до-рогой и попытаемся построить анало-гичное решение.

В качестве платформы для постро-ения нашего решения выбран ALT Linux Sisyphus (http://sisyphus.ru), и есть не-сколько причин такого выбора: у меня уже имеется опыт успешной

эксплуатации решений на дистри-бутивах от ALT вообще и Sisyphus в частности;

использование Sisyphus предпо-лагает минимум ручной работы, т.к. Linux HA и OpenVZ уже работа-ют в нем «из коробки».

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

Возможны следующие подходы к решению данной задачи:1. Традиционный – для каждой за-

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

2. Кластеризация – физические сер-веры (точнее, сервисы, работаю-щие на этих серверах) дублиру-ются средствами Linux HA. В этом случае надежность значительно увеличивается, но возрастает так-же количество серверов и затраты на их обслуживание.

Zones/Containers, Linux VServer, Linux OpenVZ, Linux FreeVPS) – поз-воляет в наибольшей степени сни-зить накладные расходы и добить-ся максимальной производитель-ности за счет того, что все вирту-альные среды обслуживает одно специально модифицированное ядро операционной системы. Со-ответственно запускать не только различные операционные системы, но даже разные версии ядра не по-лучится, да и доступ к аппаратным ресурсам внутри виртуальной сре-ды во многом будет ограничен.

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

ВиртуализацияЭто система разделения ресурсов ком-пьютера на множество независимых сред (виртуальных серверов), каждая из кото-рых с точки зрения запущенных в ней про-грамм выглядит как обычный выделенный сервер. Физический компьютер, на котором работают виртуальные среды, называет-ся host-системой или HN (Hardware Node), для обозначения самих виртуальных сред часто используются такие термины, как гостевая система, раздел (partition), кон-тейнер (container), VE, VPS, VDS.

Основными областями применения виртуализации являются: Консолидация серверов – позволяет

сэкономить на стоимости оборудова-ния и затратах на обслуживание.

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

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

Рисунок 2. Особенности внутрикластерных сетевых соединений

Page 11: 048 Системный Администратор 11 2006

9№11, ноябрь 2006

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

eth0 – используется для подключения к внешней сети; eth1 – будет использована далее при создании вирту-

ального сервера router, поэтому адрес ей не присвоен; eth2 – специально выделена для коммуникации между

узлами кластера.

Сначала настроим общие разделы узлов кластера средствами DRBD. Установка DRBD производится штат-ным для ALT Linux способом. Смотрим, какие пакеты име-ются в наличии:

Затем определяем, какое у нас ядро:

На основании этой информации решаем, какие именно пакеты нам нужны, и устанавливаем их:

3. Виртуализация – для каждого сервера выделяется от-дельная виртуальная среда на общем физическом сер-вере. В этом случае увеличивается гибкость, теперь мы не ограничены в количестве серверов и можем, напри-мер, выделить отдельную виртуальную среду для орга-низации маршрутизатора/брандмауэра, ограничиваю-щего доступ к почтовому серверу и серверу БД. Количес-тво физических серверов и затраты на их обслуживание уменьшаются, но вместе с ними уменьшается и надеж-ность, которая может оказаться даже ниже, чем в слу-чае (1), если работоспособность серверов не зависит друг от друга.

4. Кластеризация + виртуализация – общий физичес-кий сервер (точнее, один-единственный сервис – сис-тема виртуализации) дублируется средствами Linux HA, тем самым мы совмещаем преимущества подходов (2) и (3) ценой увеличения нагрузки на сервера по сравне-нию с подходом (1).

Если не углубляться в детали, схема выбранного на-ми последнего способа построения системы изображе-на на рис. 1.

Переходим к деталям.

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

Каждый узел кластера имеет по 3 сетевые карты:

[root@m1 ~]# apt-cache search drbd

drbd-tools - Distributed Redundant Block Device utilitieskernel-modules-drbd-ovz-smp - Linux drbd kernel modules for DRBD.kernel-modules-drbd-std-smp - Linux drbd kernel modules for DRBD.kernel-modules-drbd-std-up - Linux drbd kernel modules for DRBD.kernel-modules-drbd-std26-smp - Linux drbd kernel modules for DRBD.kernel-modules-drbd-std26-up - Linux drbd kernel modules for DRBD.kernel-modules-drbd-vs26-smp - Linux drbd kernel modules for DRBD.kernel-modules-drbd-wks26-smp - Linux drbd kernel modules for DRBD.kernel-modules-drbd-wks26-up - Linux drbd kernel modules for DRBD.kernel-source-drbd-0.7.21 - Kernel source for DRBD.

[root@m1 ~]# uname -a

Linux m1.mydomain.com 2.6.16-std26-up-alt10 #1 Wed Sep 13 20:06:02 MSD 2006 i686 GNU/Linux

Проект «Sisyphus»Sisyphus (http://sisyphus.ru) – ежедневно об-новляемый репозиторий пакетов свобод-ных программ. Участие в Sisyphus откры-то для всех желающих. В основе Sisyphus лежат технологии сборки программ и уче-та зависимостей между ними, а также от-работанные процессы по взаимодействию между разработчиками. Для использова-ния Sisyphus достаточно наличие любо-го дистрибутива ALT Linux (либо Sisyphus Live-CD) и средства управления пакета-ми программ APT. Sisyphus является пос-тоянно развивающимся набором реше-ний, на основе которого возможно созда-ние универсальных или специализиро-ванных дистрибутивов Linux, а также оди-ночных решений. Таковыми являются все дистрибутивы, выпускаемые компанией ALT Linux (http://altlinux.ru), другим приме-ром является дистрибутив RAD GNU/Linux (http://radlinux.org) для маршрутизаторов, Sisyphus Live-CD (http://www.unsafe.ru/lakostis/livecd) – еще один пример.

ALT Linux Team, которая занимается развитием проекта, в настоящее время состоит из более чем 150 разработчиков, только 1/5 часть которых является штат-

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

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

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

же есть выбор: использовать дистрибутив, построенный на основе Sisyphus, или нет). Что выбрать, наверное, зависит в первую очередь от вашего опыта.

Имя проекту дал Sisyphus (Сизиф) – персонаж греческой мифологии. Миф о Сизифе, который непрерывно катил в го-ру камни, символизирует постоянный труд ALT Linux Team по усовершенствованию ре-шений, заложенных в репозиторий.

В настоящее время в стадии подго-товки находится книга «Сизифов труд: Ежегодный альманах о свободном ПО (Sisyphus 2006)», в которую в качест-ве главы войдет часть материала статьи. Эта книга должна стать чем-то вроде пер-вого выпуска альманаха, в котором бу-дет подробно раскрыто несколько самых актуальных тем, обсуждавшихся в про-шедшие полгода в связи с разработкой Sisyphus. Срок выхода книги планируется в соответствии с релиз-циклом Sisyphus, что позволит приложить к книге наиболее подходящий для использования стабиль-ный срез репозитория. Дополнительная информация о книге доступна по ссылке https://heap.altlinux.ru/engine/Heap/Books/AltLibrary/Sisyphus2006.

Page 12: 048 Системный Администратор 11 2006

10

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

Первый установленный нами пакет содержит модуль яд-ра, необходимый для работы DRBD, второй – userspace-инс-трументы для управления DRBD.

Если вы используете другой дистрибутив Linux и уже го-тового модуля для вашего ядра нет ни в одном из репози-ториев дистрибутива, модуль придется собрать самостоя-тельно – архив с последними исходными кодами DRDB до-ступен на http://oss.linbit.com/drbd.

Конфигурирование DRBD сводится к редактированию файла /etc/drbd.conf.

Минимальная, но вполне работоспособная конфигура-ция будет выглядит так:

В комплекте с DRBD поставляется очень детальный при-мер конфигурационного файла, в котором все параметры прокомментированы.

Кроме того, если мы не используем udev (и созда-вать устройство /dev/drbd0 некому), придется создать его вручную:

Также необходимо прописать автозапуск сервиса drbd при загрузке узла:

Эти операции необходимо повторить на узле m2, а за-тем на обоих узлах запустить сервис drbd:

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

Итак, раздел устройства /dev/drbd0 уже работает, но со-держимое разделов /dev/hda3, лежащих уровнем ниже, еще не синхронизировано.

Первый раз синхронизацию необходимо произвести вручную, выполнив на узле m1:

После выполнения этой команды мы можем проследить за процесом синхронизации:

После окончания синхронизации на узле m1 мы увидим:

По строке Primary/Secondary можно определить, что сей-час узел m1 является ведущим. На ведомом узле m2 в вы-воде той же самой команды мы увидим Secondary/Primary. Все операции с устройством /dev/drbd0 необходимо выпол-нять только на ведущем узле, при этом все изменения бу-дут автоматически применены к разделам /dev/hda3 на обо-их узлах кластера.

Создадим на устройстве /dev/drbd0 файловую систему и примонтируем ее:

[root@m1 ~]# service drbd status

drbd driver loaded OK; device status:version: 0.7.21 (api:79/proto:74)SVN Revision: 2326 build by [email protected],2006-09-22 23:39:33 0: cs:Connected st:Primary/Secondary ld:Consistent ns:731068 nr:1052796 dw:1782732 dr:193337 al:20 bm:356 lo:0 pe:0 ua:0 ap:0

[root@m1 ~]# mknod /dev/drbd0 b 147 0

[root@m1 ~]# chkconfig --level 2345 drbd on

[root@m1 ~]# uname -a

Starting Starting DRBD resources: service: [ d0 s0 n0 ]....

[root@m1 ~]# service drbd status

drbd driver loaded OK; device status:version: 0.7.21 (api:79/proto:74)SVN Revision: 2326 build by [email protected],2006-09-22 23:46:26 0: cs:Connected st:Secondary/Secondary ld:Inconsistent ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0

[root@m1 ~]# drbdadm -- --do-what-I-say primary all

[root@m1 ~]# service drbd status

drbd driver loaded OK; device status:version: 0.7.21 (api:79/proto:74)SVN Revision: 2326 build by [email protected],2006-09-22 23:46:26 0: cs:SyncSource st:Primary/Secondary ld:Consistent ns:1972 nr:0 dw:0 dr:10164 al:0 bm:0 lo:0 pe:30 ua:2048 ap:0 [>...................] sync'ed: 0.2% (3158696/3160552)K finish: 0:26:19 speed: 1,856 (1,856) K/sec

[root@m1 ~]# apt-get install ↵ kernel-modules-drbd-std26-up drbd-tools

resource r0 {

# протокол передачи # C: запись считается завершенной, если данные # записаны на локальный и удаленный диск, подходит # для критически важных транзакций и в большинстве # остальных случаев # B: запись считается завершенной, если данные # записаны на локальный диск и удаленный буферный кэш # A: запись считается завершенной, если данные # записаны на локальный диск и локальный буфер tcp # для отправки подходит для сетей # с высокой задержкой protocol C; # описание узла m1 on m1.mydomain.com { device /dev/drbd0; # имя drbd-устройства # раздел диска, поверх которого оно работает disk /dev/hda3; # адрес и порт демона drbd address 192.168.200.1:7788; # хранить метаданные drbd на том же разделе диска meta-disk internal; } # описание узла m2 on m2.mydomain.com { device /dev/drbd0; # имя drbd-устройства # раздел диска, поверх которого оно работает disk /dev/hda3; # адрес и порт демона drbd address 192.168.200.2:7788; # хранить метаданные drbd на том же разделе диска meta-disk internal; }}

root@m1 ~]# mkfs.ext3 /dev/drbd0

mke2fs 1.39 (29-May-2006)Filesystem label=OS type: LinuxBlock size=4096 (log=2)Fragment size=4096 (log=2)395200 inodes, 790138 blocks39506 blocks (5.00%) reserved for the super userFirst data block=0

Page 13: 048 Системный Администратор 11 2006

11№11, ноябрь 2006

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

Если теперь мы попытаемся примонтировать устройс-тво /dev/drbd0 на узле m2, мы получим следующее:

Такое (вполне разумное) поведение гарантируется толь-ко для ядер 2.6, в 2.4 была возможность примонтировать устройство /dev/drbd0 на обоих узлах кластера одновре-менно, что в свою очередь могло привести к повреждению файловой системы.

Чтобы все-таки примонтировать раздел /dev/drbd0 на уз-ле m2, необходимо сделать его ведущим, выполнив на уз-лах m1 и m2 следующие команды:

В случае отказа узла m1 достаточно выполнить только те команды, которые приведены выше для узла m2. По боль-шому счету, любители велосипедостроения (или оптималь-ных решений – иногда трудно отличить одно от другого) мо-гут этим и ограничиться: написать скрипт, который будет следить на доступностью соседнего узла, и монтировать раздел /dev/drbd0, если соседний узел умер, можно само-стоятельно. Другой вопрос: зачем, если Heartbeat умеет де-лать и это, и многое другое?

Устанавливаем Heartbeat штатным для ALT Linux спо-собом:

Установка Heartbeat для других дистрибутивов Linux описана здесь http://www.linux-ha.org/DownloadSoftware. На главной странице проекта также написано, что кро-ме Linux Heartbeat, собирается и запускается на FreeBSD, Solaris и даже MacOS X.

После установки Heartbeat на оба узла кластера на каж-дом узле необходимо создать файл /etc/ha.d/authkeys с пра-вами доступа 600 и случайной строкой (ее можно приду-

мать самому, а лучше сгенерировать с помощью apg), ко-торая будет использоваться узлами для авторизации друг друга:

Также необходимо создать конфигурационный файл Heartbeat, который на узле m1 будет выглядеть так:

а на m2 – так:

Затем необходимо описать ресурсы кластера в файле /etc/ha.d/haresources на каждом узле:

Такая запись означает, что кластер в штатном режи-ме будет использовать ресурсы drbddisk и Filesystem узла m1, а в случае его «смерти» – аналогичные ресурсы узла, оставшегося в живых, то есть m2. Для ресурса Filesystem заданы параметры: имя drbd-устройства, каталог, в кото-рый оно должно быть примонтировано (этот каталог мы должны создать самостоятельно на каждом узле клас-тера), и тип файловой системы. Узнать больше о ресур-сах, поддерживаемых heartbeat, можно заглянув в каталог /etc/ha.d/resource.d – каждый ресурс представлен там со-ответствующим скриптом.

Теперь можно запустить сервис heartbeat (не забыв пе-ред этим размонтировать устройство /dev/drbd0, если оно было примонтировано):

После старта сервиса на ведущем узле кластера в ло-гах можно увидеть такие сообщения:

[root@m2 ~]# mkdir /d0[root@m2 ~]# mount /dev/drbd0 /d0

/dev/drbd0: Input/output errormount: block device /dev/drbd0 is write-protected, mounting read-only/dev/drbd0: Input/output errormount: /dev/drbd0 already mounted or /d0 busy

[root@m1 ~]# umount /d0[root@m1 ~]# drbdadm disconnect all[root@m2 ~]# drbdadm disconnect all[root@m1 ~]# drbdadm secondary all[root@m2 ~]# drbdadm -- --human primary all[root@m1 ~]# drbdadm connect all[root@m2 ~]# drbdadm connect all[root@m2 ~]# mount /dev/drbd0 /d0

[root@m1 heartbeat]# apt-get install heartbeat

auth 11 sha1 RcBkJzU8ClnrjWVRLv5EDsdRFQP1j1C

Logfacility local0ucast eth2 192.168.200.2auto_failback onnode m1.mydomain.com m2.mydomain.com

Logfacility local0ucast eth2 192.168.200.1auto_failback onnode m1.mydomain.com m2.mydomain.com

m1.mydomain.com drbddisk ↵ Filesystem::/dev/drbd0::/d0::ext3

[root@m1 ~]# service heartbeat start

logd is already runningStarting High-Availability services: [ DONE ]

m1 heartbeat: [3372]: info: Status update for node m2.mydomain.com: status activem1 harc[3395]: info: Running /etc/ha.d/rc.d/status statusm1 heartbeat: [3406]: info: Local Resource acquisition completed.m1 harc[3431]: info: Running /etc/ha.d/rc.d/ip-request-resp ip-request-respm1 ip-request-resp[3431]: received ip-request-resp drbddisk OK yesm1 ResourceManager[3446]: info: Acquiring resource group: m1.mydomain.com drbddisk Filesystem::/dev/drbd0::/d0::ext3m1 ResourceManager[3446]: info: Running /etc/ha.d/resource.d/drbddisk startm1 Filesystem[3569]: INFO: Running status for /dev/drbd0 on /d0m1 Filesystem[3569]: INFO: /d0 is unmounted (stopped)m1 Filesystem[3505]: INFO: Filesystem Resource is stoppedm1 ResourceManager[3446]: info: Running /etc/ha.d/resource.d/Filesystem /dev/drbd0 /d0 ext3 startm1 Filesystem[3678]: INFO: Running start for /dev/drbd0 on /d0m1 kernel: kjournald starting. Commit interval 5 seconds

Maximum filesystem blocks=80950067225 block groups32768 blocks per group, 32768 fragments per group15808 inodes per groupSuperblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912

Writing inode tables: doneCreating journal (16384 blocks): doneWriting superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 25 mounts or180 days, whichever comes first. Use tune2fs -c or -i to override.

[root@m1 ~]# mkdir /d0[root@m1 ~]# mount /dev/drbd0 /d0

Page 14: 048 Системный Администратор 11 2006

12

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

В логах ведомого узла можно будет увидеть следую-щее:

После старта heartbeat на обоих узлах кластера устройс-тво /dev/drbd0 будет примонтировано на ведущем узле. Ес-ли остановить сервис heartbeat на ведущем узле m1, ведо-мый m2 возьмет на себя функции ведущего, и устройство /dev/drbd0 будет примонтировано на нем, при этом в ло-гах мы увидим:

Если просто выключить питание узла m1, чтобы он не успел оповестить m2 о том, что он завершает свою ра-боту, m2 обнаружит отсутствие m1 и точно так же возь-мет на себя функции ведущего узла и примонтирует раз-дел /dev/drbd0:

При повторном запуске сервиса heartbeat на m1 или при включении узла m1 он снова станет ведущим.

Что дальшеТрадиционно после конфигурирования общего файлового хранилища файл /etc/ha.d/haresources дополняется списком сервисов, для которых необходимо гарантировать отказо-устойчивость, а конфигурационные файлы и файлы дан-ных этих сервисов перемещаются на файловую систему, созданную поверх drbd-устройства. Часто также конфигу-рируется алиас для сетевого интерфейса, который автома-тически создается на ведущем узле, – тем самым все сер-висы оказываются доступными по одному адресу.

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

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

1. http://linux-ha.org2. http://drbd.org3. http://openvz.org4. http://altlinux.ru5. http://sisyphus.ru6. http://freesource.info

m2 kernel: drbd0: PingAck did not arrive in time.m2 kernel: drbd0: drbd0_asender [3566]: cstate Connected --> NetworkFailurem2 kernel: drbd0: asender terminatedm2 kernel: drbd0: drbd0_receiver [3510]: cstate NetworkFailure --> BrokenPipem2 kernel: drbd0: short read expecting header on sock: r=-512m2 kernel: drbd0: worker terminatedm2 kernel: drbd0: drbd0_receiver [3510]: cstate BrokenPipe --> Unconnectedm2 kernel: drbd0: Connection lost.

m2 heartbeat: [3739]: info: Status update for node m1.mydomain.com: status upm2 harc[3752]: info: Running /etc/ha.d/rc.d/status statusm2 heartbeat: [3739]: info: remote resource transition completed.m2 heartbeat: [3773]: info: No local resources [/usr/lib/heartbeat/ResourceManager listkeys m2.mydomain.com] to acquire.

m2 kernel: drbd0: Secondary/Primary --> Secondary/Secondarym2 heartbeat: [3739]: info: Received shutdown notice from 'm1.mydomain.com'.m2 heartbeat: [3739]: info: Resources being acquired from m1.mydomain.com.m2 heartbeat: [3850]: info: acquire local HA resources (standby).m2 heartbeat: [3851]: info: No local resources [/usr/lib/heartbeat/ResourceManager listkeys m2.mydomain.com] to acquire.m2 heartbeat: [3850]: info: local HA resource acquisition completed (standby).m2 heartbeat: [3739]: info: Standby resource acquisition done [all].m2 harc[3870]: info: Running /etc/ha.d/rc.d/status statusm2 mach_down[3880]: info: Taking over resource group drbddiskm2 ResourceManager[3900]: info: Acquiring resource group: m1.mydomain.com drbddisk Filesystem::/dev/drbd0::/d0::ext3m2 ResourceManager[3900]: info: Running /etc/ha.d/resource.d/drbddisk startm2 kernel: drbd0: Secondary/Secondary --> Primary/Secondarym2 Filesystem[4023]: INFO: Running status for /dev/drbd0 on /d0m2 Filesystem[4023]: INFO: /d0 is unmounted (stopped)m2 Filesystem[3959]: INFO: Filesystem Resource is stoppedm2 ResourceManager[3900]: info: Running /etc/ha.d/resource.d/Filesystem /dev/drbd0 /d0 ext3 startm2 Filesystem[4132]: INFO: Running start for /dev/drbd0 on /d0m2 kernel: kjournald starting. Commit interval 5 secondsm2 kernel: EXT3 FS on drbd0, internal journalm2 kernel: EXT3-fs: mounted filesystem with ordered data mode.m2 Filesystem[4068]: INFO: Filesystem Successm2 mach_down[3880]: info: /usr/lib/heartbeat/mach_down: nice_failback: foreign resources acquiredm2 mach_down[3880]: info: mach_down takeover complete for node m1.mydomain.com.m2 heartbeat: [3739]: info: mach_down takeover complete.

m1 kernel: EXT3 FS on drbd0, internal journalm1 kernel: EXT3-fs: mounted filesystem with ordered data mode.m1 Filesystem[3614]: INFO: Filesystem Success

m2 kernel: drbd0: drbd0_receiver [3510]: cstate Unconnected --> WFConnectionm2 heartbeat: [3739]: WARN: node m1.mydomain.com: is deadm2 heartbeat: [3739]: WARN: No STONITH device configured.m2 heartbeat: [3739]: WARN: Shared disks are not protected.m2 heartbeat: [3739]: info: Resources being acquired from m1.mydomain.com.m2 heartbeat: [3739]: info: Link m1.mydomain.com:eth2 dead.m2 harc[4383]: info: Running /etc/ha.d/rc.d/status statusm2 heartbeat: [4384]: info: No local resources [/usr/lib/heartbeat/ResourceManager listkeys m2.mydomain.com] to acquire.m2 mach_down[4403]: info: Taking over resource group drbddiskm2 ResourceManager[4423]: info: Acquiring resource group: m1.mydomain.com drbddisk Filesystem::/dev/drbd0::/d0::ext3m2 ResourceManager[4423]: info: Running /etc/ha.d/resource.d/drbddisk startm2 kernel: drbd0: Secondary/Unknown --> Primary/Unknownm2 Filesystem[4546]: INFO: Running status for /dev/drbd0 on /d0m2 Filesystem[4546]: INFO: /d0 is unmounted (stopped)m2 Filesystem[4482]: INFO: Filesystem Resource is stoppedm2 ResourceManager[4423]: info: Running /etc/ha.d/resource.d/Filesystem /dev/drbd0 /d0 ext3 startm2 Filesystem[4655]: INFO: Running start for /dev/drbd0 on /d0m2 kernel: kjournald starting. Commit interval 5 secondsm2 kernel: EXT3 FS on drbd0, internal journalm2 kernel: EXT3-fs: recovery complete.m2 kernel: EXT3-fs: mounted filesystem with ordered data mode.m2 Filesystem[4591]: INFO: Filesystem Successm2 mach_down[4403]: info: /usr/lib/heartbeat/mach_down: nice_failback: foreign resources acquiredm2 mach_down[4403]: info: mach_down takeover complete for node m1.mydomain.com.m2 heartbeat: [3739]: info: mach_down takeover complete.

Page 15: 048 Системный Администратор 11 2006
Page 16: 048 Системный Администратор 11 2006

14

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

MS Windows XP SP3, или Много шума из ничего

Третий пакет обновлений для MS Windows XP напоминает второй том «Мертвых душ»: его пишут где-то там, за границей, его все ждут, вспоминая предыдущий вариант, о нем уже сочиняют небылицы...

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

Page 17: 048 Системный Администратор 11 2006

15№11, ноябрь 2006

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

Предыстория

Прошло уже несколько лет после даты выхода последне-го кумулятивного пакета обновлений для MS Windows XP, известного как Service Pack 2. И вот теперь, когда общее число выпущенных обновлений перевалило за сотню, все с нетерпением ожидают пакета обновлений с номером 3. Официально в документе «Windows Service Pack Road Map» Microsoft предупреждает, что SP3 появится не ранее 2007 года. Но все равно периодически приходится опровер-гать слухи о том, что SP3 уже готов к загрузке. И, несмотря на возражения Microsoft, самодельный SP3 можно загрузить с различных ресурсов, например с TheHotfix.Net, как обеща-ют после предварительной регистрации в форуме.

Настораживает, что на Softpedia указан объем это-го обновления в 344 Мб, а это весьма много, да и ссылки для загрузки не работают. Еще стоит отметить, что соглас-но [2] источником явился некий анонимный, но очень доб-рый сотрудник Microsoft. Почему-то все добрые люди та-кие скромные...

Есть и отечественный вариант этого «чуда»: http://www.winall.ru/xp/sp/sp3. Он включает 30 заплаток и имеет объем 37,7 Мб. Ссылки тоже «висят», то есть загрузить SP3 ссайта невозможно. Но мне довелось получить это примитив-ное создание на очередном диске, купленном на одном мос-ковском программном «развале». Самое смешное, что все файлы переименованы в Pre_SP3_by_Winall_*.exe. Иначе го-воря, до установки очень трудно оценить, что же ставится – какие-то патчи от Microsoft или просто набор троянов.

Ну и последний из существующих суррогатов SP3, об-наруженный в Интернете, откровенно носит сомнитель-ный характер и называется GAME EDITION 2006.Мне уда-лось его загрузить c http://www.wild-soft.org/2006/08/24/windows_xp_sp3_pre_game_edition_2006.html. Но это был, скажем так, первый сайт с более-ме-нее приличным содержанием. Так как все остальные имели контент из кате-гории «только для взрослых». Этот на-бор имеет объем 118 Мб, что близко к размеру реального SP3, но посколь-ку в 118 Мб входит не SP3, а вся уко-роченная MS Windows XP в варианте «только для игрушек», то в моей прак-тике такое изделие игровой инженерии вряд ли кого заинтересует.

Из всего вышесказанного возни-кает больше вопросов, чем прихо-дит ответов. Судя по всему, SP3 уже практически готов. И если не загадоч-ные добряки из Microsoft, то какие-ни-будь шустрые сетевые «гуру» непре-менно его предложат невзыскатель-ной публике и попытаются получить на этом выгоду или иное преимущест-во. Так в чем же дело? С чем связано нежелание Microsoft выпустить SP3?

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

Обновление до текущего состояния SP3

Попробуем получить SP3 самостоятельно. Для этого вос-пользуемся диском, предназначенным для автоматической установки MS Windows XP SP2, созданным так, как описа-но в статьях [7]. Из процесса установки удалим для чисто-ты эксперимента все дополнительные компоненты, кроме собственно дистрибутива, и создадим имидж:

Окончательно образ диска занял 447 Мб (здесь и да-лее примем для простоты 1 Мб равным 1 000 000 байтов, или 1000 Кб, в зависимости от контекста). Воспользуемся результатом для установки рабочей станции под VMWare. После завершения процесса инсталляции в полученной виртуальной машине проверим несколько важных в даль-нейшем точек.

На рис. 1 видно, что уровень обновления системы – SP2, директория «C:\Program Files\WindowsUpdate» пуста, и внутри ветки реестра «HKLM\SOFTWARE\Microsoft» от-сутствует раздел Updates. Запомним это. И приступим к об-новлению системы до текущего уровня рекомендованных обновлений.

Для этого воспользуемся локальным сервисом SUSfL. Установка и настройка SUSfL подробно описана в [8]. До-

Не меняются только самые мудрые и самые глупые.

КонфуцийМудрец стыдится своих недостатков,

но не стыдится исправлять их.

Конфуций

# ./mkwinxp cd_sp2_only

Warning: creating filesystem that does not conform to ISO-9660.Warning: creating filesystem with (nonstandard) Joliet extensions but without (standard) Rock Ridge extensions. It is highly recommended to add Rock Ridgemkisofs 2.01 (i686-suse-linux)re-directing all messages to mkwinxp-9838.log

Рисунок 1. MS Windows XP SP2 после установки

Page 18: 048 Системный Администратор 11 2006

16

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

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

Естественно, надо учесть в настройках, что собирать обновления такой сервер должен для MS Windows XP Professional русской локализации. Перед обновлением ра-бочей станции убедимся, что сам SUSfL содержит все пос-ледние заплатки.

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

Загрузим настройку реестра из http:\\winupdate.office.localnet\winupdate.reg (см. рис. 2), что назначит SUSfL с ад-ресом winupdate.office.localnet как локальный сервер обнов-лений, и перезапустим службу автоматического обновле-ния на рабочей станции, набрав в окне консоли:

Загрузку обновлений производит служба BITS, ко-торая по умолчанию стартует автоматически. Если это

не так, то надо её запустить командой «net start bits». Подождем, пока служ-ба BITS скачает доступные обновле-ния на рабочую станцию и предло-жит их установить. Не надо забывать, что BITS производит закачку в пау-зах сетевой активности, то есть на-до на некоторое время оставить эту станцию в покое. Как только систе-ма приступит к загрузке обновлений, в правом нижнем углу появится икон-ка, всплывающая подсказка которой будет сообщать о степени готовнос-ти. После завершения загрузки сохра-ним полученные обновления, так как после установки они будут уничто-жены. Для этого активируем меню процесса «Автоматическое обновле-ние», но не будем подтверждать его, пока все папки из «C:\Program Files\WindowsUpdate\wuaudnld.tmp\cabs» не скопируются в рабочую директо-

рию, например в G:\SP3-from-win (см. рис. 3).После того как копирование завершится, разрешим уста-

новку загруженных заплаток. Таким образом, во-первых, по-лучим правильный комплект обновлений и, во-вторых, про-верим, что все обновления действительно подходят к наше-му дистрибутиву. После установки обновлений будет пред-ложено перегрузить рабочую станцию. Со всем согласимся и дождемся следующей загрузки станции (см. рис. 4). Откро-ем редактор реестра и найдем там ветку «HKLM\SOFTWARE\Microsoft\Updates\Windows XP\SP3». Смотрите-ка, вот и SP3! Значит, все-таки есть? Экспортируем поскорее это «чудо», например в SP3-from-win.reg, в ту же директорию, где ранее были сохранены папки с файлами обновлений.

Итак, теперь в нашем распоряжении есть набор необхо-димых обновлений, чтобы получить SP3 в текущем состо-янии, и сохраненная ветка реестра, которая позволит про-контролировать факт установки SP3. Последнее подгото-вительное действие, что целесообразно выполнить прямо в MS Windows, это подготовить рабочее дерево дистрибу-тивных файлов для интеграции. Для этого просто скопиру-ем содержимое установочного диска с MS Windows XP SP2 в заранее подготовленную для этого директорию на файло-вом сервере, которую подключим как G:\IMG (см. рис. 4).

Подготовка файлов для включения в дистрибутив

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

Рисунок 2. Установка SUSfL в качестве сервера обновления

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

Конфуций

# grep localCabPool sus_consts.py

#localCabPool is path with trailing slash to your pool, where updates will be stored###localCabPool = "/var/www/sus.int/content/"localCabPool = "/srv/winupdate/www/content/"

# cd /srv/winupdate/www/autoupdate# python sus_sync.py

Dictionaries up to dateNeed to download 0 Mb

>net stop wuauserv>net start wuauserv

Page 19: 048 Системный Администратор 11 2006

17№11, ноябрь 2006

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

ем. Кстати, об объеме – подсчитаем его. Все дальней-шие манипуляции будем выполнять в терминальном ре-жиме на Samba-сервере. Пусть корень сетевого ресур-са /srv/smb/public. Тогда папки обновлений размещаются в /srv/smb/public/SP3-from-win, а все содержимое исходного дистрибутивного диска в ../IMG относительно папок с за-платками. Все терминальные команды будут исполняться из /srv/smb/public/SP3-from-win.

Сначала составим список всех файлов обновлений:

Затем скопируем их в корень рабочей директории:

Файлы копируются, а не перемещаются. Это позволит в случае неудачи повторить все шаги снова. Подсчитаем суммарный объем и число заплаток:

Итого 131 Мб в 80 файлах. Здесь уже можно оценить сте-пень адекватности всех самодельных SP3, которые предла-гаются в Интернете. Еще немного арифметики: итак, всего 131 Мб апдейтов, а размер исходного имиджа:

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

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

Прочтем список всех обновлений, размещенных на сер-вере, и сохраним его в файле:

Извлечем из текста все возможные обновления вмес-те с ключевой информацией:

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

# find . -name "*.exe" | awk -F/ '{print $3}' | awk ↵ -F. '{print $1}' >real-updates.txt

# du -c *.exe | grep "total\$"

131128 total

# wc -l real-updates.txt

80 real-updates.txt

# du -c ../IMG | grep "total\$"

448712 total

# diff -Naur admin.py.orig admin.py

--- admin.py.orig 2006-08-21 13:57:32.000000000 +0400+++ admin.py 2006-08-21 16:04:24.000000000 +0400

@@ -155,7 +155,10 @@ else: dtstr = dts[0] + ' - ' + dts[len(dts)-1] print '<tr bgcolor="%s"><td valign="top"> ↵ <input type="checkbox" name="%s" value="1"%s> ↵ </td><td><b>'%(rowcolor,sPublisherPlusName,cstr)- req.write('<div title="%s">%s, %s</div>'% ↵ (sPublisherPlusName, vItemDetails ↵

# wget http://winupdate.office.localnet/ ↵ autoupdate/admin.py -O all-updates-from-sus.html

--00:27:52-- http://winupdate.office.localnet/autoupdate/admin.py => `all-updates-from-sus.html'Resolving winupdate.office.localnet... done.Connecting to winupdate.office.localnet[192.168.0.1]:80... connected.HTTP request sent, awaiting response... 200 OKLength: unspecified [text/html]

[ <=> ] 396,889 3.82M/s

00:27:54 (3.82 MB/s) - `all-updates-from-sus.html' saved [396889]

# grep XP SP2 all-updates-from-sus.html | ↵ awk 'BEGIN{FS="href=\""}{print $2}' >all-updates.txt

#!/bin/sh

SUSLIST=all-updates-from-sus.htmlREAL=real-updates.txt

# создадим командные файлы для обновления и интеграцииU=update.cmdUO=update-only.cmdI=integrate.cmdfor i in $U $UO $I ; do echo -e "@echo off\r" >$idone

P="G:\IMG"RP="/srv/smb/public/IMG"mkdir -p $RPchmod ugo+w -R $RPUOP="$RP/\$OEM\$/\$1/InstData"mkdir -p $UOP

# for i in $(cat real-updates.txt) ; do find . ↵ -name "$i.exe" -exec cp -v '{}' $i.exe \; ; done`./com_microsoft.WindowsXP-KB925486-x86-189032/ ↵ WindowsXP-KB925486-x86-RUS.exe' -> ↵ `WindowsXP-KB925486-x86-RUS.exe'`./com_microsoft.873333_XP_SP3_WinSE_143087/ ↵ WindowsXP-KB873333-x86-RUS.exe' -> ↵ `WindowsXP-KB873333-x86-RUS.exe'... пропущено ...`./com_microsoft.WindowsXP-KB922616-x86-185856/ ↵ WindowsXP-KB922616-x86-RUS.exe' -> ↵ `WindowsXP-KB922616-x86-RUS.exe'

[conFieldItemStringsTitle].encode('utf8'), dtstr))+### req.write('<div title="%s">%s, %s</div>'% ↵ (sPublisherPlusName, vItemDetails ↵ [conFieldItemStringsTitle].encode('utf8'), dtstr))+ req.write('<div title="%s">'%(sPublisherPlusName))+ print row+1, '&nbsp;'+ req.write('%s, %s</div>'%(vItemDetails ↵ [conFieldItemStringsTitle].encode('utf8'), dtstr)) # req.write(' ↵ ('+repr(approved[sPublisherPlusName])+')') print '</b>' req.write(vItemDetails ↵ [conFieldItemStringsDescription].encode('utf8'))@@ -169,7 +172,7 @@ req.write(' <a href="%s">Eula</a>'%urle) print '<br>'

- req.write('Applies to: ' ↵ +string.join(applies, ',').encode('utf8'))+ req.write('Applies to: ' ↵ +string.join(applies, ',\n').encode('utf8')) print '</td></tr>' row = row + 1

Page 20: 048 Системный Администратор 11 2006

18

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

Эта программа в ходе своей работы создает три ко-мандных файла: update.cmd – для использования в дистрибутиве, что-

бы установить заплатки как обычные приложения;

integrate.cmd – для интеграции обновлений в дерево файлов дистрибутива;

update-only.cmd – для установки тех обновлений, кото-рые нельзя интегрировать. Список исключений опреде-лен опытным путем.

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

Например, integrate.cmd начинается следующими стро-ками:

Дистрибутив с интегрированным SP3

Запустим G:\SP3-from-win\integrate.cmd на рабочей станции MS Windows XP и выполним интеграцию обновлений в дис-трибутивный набор G:\IMG (см. рис. 5).

Дождавшись завершения, проверим результат уже сно-ва в консоли Samba-сервера:

Получилось 623 Мб, что на 44 Мб больше, чем было бы, если просто разместить исходные обновления в ви-де установочных файлов, для того чтобы они отработа-ли в процессе инсталляции. На 131 Мб исходных файлов

44 Мб «оверспейса» составляет 30%. Пока воздержимся от критики и про-верим, как полученный дистрибутив с SP3 будет ставиться в автоматичес-ком режиме.

Соберем на основе полученно-го набора файлов установочный диск и произведем с него установку под VMWare. Главное, не забыть под-ключить установку тех заплаток, кото-рые не были интегрированы и должны ставиться как приложения. Для это-го можно, например, включить текст update-only.cmd в GuiRunOnce.cmd.

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

Как видно на рис. 6, система ука-зывает на соответствие SP2, каталог для сетевых апдейтов пуст, но в ре-Рисунок 3. Обновления загружены и готовы к установке

# du -c ../IMG | grep "total\$"

623816 total

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

Конфуций

# список известных исключенийEL="WindowsXP-KB885250-x86-RUS.exe ↵ WindowsXP-KB885835-x86-RUS.exe ↵ WindowsXP-KB887742-x86-RUS.exe ↵ WindowsXP-KB888113-x86-RUS.exe ↵ WindowsXP-KB890047-x86-RUS.exe ↵ WindowsXP-KB890175-x86-RUS.exe ↵ WindowsXP-KB867282-x86-RUS.exe ↵ Windows-KB913433-x86-RUS"

n=1for i in $(cat $REAL) ; do echo -----$n-------$i--------------- T=$(grep "$i" $SUSLIST | grep "SP2") n=$((n+1)) if [ "1$T" == "1" ] ; then echo ====================ERROR!!!!================= else T=$(echo "$T" | awk 'BEGIN{FS="switches: "} ↵ {print $2}' | awk -F, '{print $1}') echo -e "echo integration $i running...\r\n$i.exe ↵ $T\r\necho done\r" >>$U

# проверим на совместимость j=$(find . -name "$i.exe" | head -n 1) k=$(strings "$j" | grep "SFX_CAB_EXE")

# удалим исключения m=$(echo $EL | grep "$i") [ "1$m" == "1" ] || k=""

if [ "1$k" == "1" ] ; then echo -e "echo integration $i running...\r\n$i.exe ↵ $T\r\necho done\r" >>$UO cp -v $i.exe $UOP else echo -e "echo integration $i running...\r\n$i.exe ↵ /q /integrate:$P\r\necho done\r" >>$I #echo "pause" >>$I fi fidone

for i in $U $I ; do echo -e "pause\r" >>$idonecp -v $UO $UOPexit

# head -n 7 integrate.cmd

@echo offecho integration WindowsXP-KB925486-x86-RUS running...WindowsXP-KB925486-x86-RUS.exe /q /integrate:G:\IMGecho doneecho integration WindowsXP-KB873333-x86-RUS running...WindowsXP-KB873333-x86-RUS.exe /q /integrate:G:\IMGecho done

Page 21: 048 Системный Администратор 11 2006

19№11, ноябрь 2006

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

естре присутствует ветка «HKLM\SOFTWARE\Microsoft\Updates\Windows XP\SP3», что свидетельствует о произве-денном в ходе инсталляции наложении заплаток.

И тут самым важным становится вопрос о том, на-сколько интегрированные заплатки соответствуют тем, что были поставлены из сети. Чтобы выяснить это, сно-ва экспортируем указанную ветку реестра, но уже в файл SP3-integrated.reg.

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

И теперь получим из каждой сохраненной ветки реест-ра список установленных заплаток:

Осталось только сравнить их:

Ну вот! Что и требовалось получить. Теперь ясно, что можно не рыскать по Интернету в поисках недосто-

верных и самодельных вариантов Windows XP SP3.

В любой момент свой SP3 можно приготовить за полчаса или за пару ча-сов, если считать время на установку исходной MS Windows XP SP2.

Здесь раскрою секрет появле-ния списка исключений. Эти заплат-ки не «хотели» интегрироваться и те-рялись после установки проверочной системы с SP3.

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

Теперь вы знаете, что делать, ес-ли попадется такой «неуживчивый» апдейт, пока компания Microsoft не

соизволит выпустить настоящее обновление версии 3 для MS Windows XP.

Выводы

Тут можно бы и закончить. Главный вывод: SP3 – не про-блема, уже есть. Но давайте снова вернемся к подсчетам размеров.

Исходный диск с SP2 занимал 447 Мб, что оставляло примерно 290 Мб для размещения приложений, использо-ванных в процедуре автоустановки, если не менять носи-тель на DVD. Дистрибутив с интегрированным SP3 занима-ет уже 623 Мб, что оставляет всего 114 Мб. Это недопустимо мало! Получается, если набор обновлений доложить в ви-де установочных файлов, то останется 159 Мб. Не бог весть что, но лучше, чем в случае с интеграцией заплаток в де-рево дистрибутива. По крайней мере в этот объем можно уместить хотя бы OpenOffice с парочкой сетевых приложе-ний от Mozilla Foundation.

Теперь можно предположить, чем вызвано нежелание Microsoft торопиться с SP3.

«Нам», системным администраторам, работающим с GNU/Linux, не привыкать к периодическим и объемным апдейтам. Чем их больше, и чем чаще они выходят, тем вы-ше уровень сервиса дистрибуторов. И GNU/Linux легко «выходит» на объемы заплаток в 1 Гб. Например, openSUSE через пару месяцев после выпуска требует именно тако-го объема апдейтов. Более того, нет никаких проблем, чтобы включить эти апдейты прямо в установочный диск. И при этом объем дистрибутива не увеличится сколько-ни-будь существенно.

А вот в модели проприетарной дистрибуции MS Windows все гораздо хуже.

# cat winreg2txt#!/usr/bin/perl

# преобразование winregistry в ascii файл

$i=1; $n=0;while(read(STDIN,$j,1)) { if( $n > 1 ){ if( $i == 1){ $i=0; print $j; }else{ $i=1; } } $n++;}

# ./winreg2txt <SP3-from-win.reg | grep "\\SP3\\\\" | ↵ grep -v Filelist >SP3-from-win.reg.txt# ./winreg2txt <SP3-integrated.reg | grep "\\SP3\\\\" | ↵ grep -v Filelist >SP3-integrated.reg.txt

# diff -s SP3-integrated.reg.txt SP3-from-win.reg.txt

Files SP3-integrated.reg.txt and SP3-from-win.reg.txt are identical

Единственная настоящая ошибка – не исправлять своих прошлых ошибок.

Конфуций

Рисунок 4. Подготовка дерева дистрибутива после обновления до SP3

Page 22: 048 Системный Администратор 11 2006

20

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

Выход SP2 увеличил размер дист-рибутива MS Windows XP, и выпуск SP3 тоже, скорее всего, сделает дистрибу-тив еще более объемным. И тем са-мым вплотную пододвинет его к гра-нице CD-носителя.

Пугает ли это тех, кто привык к пос-тавкам GNU/Linux на DVD или набору CD, – нет!

Но для дистрибуции универсаль-ной системы MS Windows это не толь-ко психологический барьер полу-чить многодисковый дистрибутив

MS Windows, но и барьер совмести-мости, так как после этого огромное число компьютеров, оснащенных толь-ко CD-приводом, смогут использовать дистрибутив единого образца, если он будет выпущен на DVD.

Еще одна проблема заключается в увеличении «веса» без увеличения стоимости. С одной стороны, появле-ние SP2 было оправдано увеличением функциональности, а вот для SP3 та-кой лазейки пока, вероятно, нет. И по-лучается, что немотивированное уве-

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

Согласно [2] инженеры Microsoft от-ложили выпуск Service Pack 3 до вы-хода Windows Vista. Можно предпо-ложить, что часть новых стандартов среды Vista в целях совместимости придется портировать в ранее выпу-щенные системы. И это очень вовре-мя возникшая причина станет рацио-нальным оправданием для добавле-ния очередных объемов к дистрибу-тиву MS Windows XP.

1. Windows Service Pack Road Map. Last Updates: March, 7, 2006 г. – http://www.microsoft.com/windows/lifecycle/servicepacks.mspx.

2. «Руководство Microsoft предупреж-дает: В сети выложили фальши-вый Windows XP SP3». 17 октября 2005 г. – http://www.securitylab.ru/news/241191.php.

3. T h e H o t f i x F o r u m s – h t t p : / /www.thehotfix.net/forums/index.php.

4. Sof tpedia: Windows XP Unof f icoal TheHotfix.Net Pack – http://www.softpedia.com/get /System/OS-Enhancements/W i n d o w s - X P - S e r v i c e - P a c k - 3 -Preview.shtml.

5. Microsoft Windows XP Service Pack 3 – http://www.winall.ru/xp/sp/sp3.

6. Windows XP SP3 Pre GAME EDITION 2006 – http://www.wild-soft.org/2006/08/24/windows_xp_sp3_pre_game_edition_2006.html.

7. Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникей-щика. Часть 1. //Системный админист-ратор, №4, 2005 г. – С. 11-15;

Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникей-щика. Часть 2. //Системный админист-ратор, №5, 2005 г. – С. 54-58;

Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникей-щика. Часть 3. //Системный админист-ратор, №6, 2005 г. – С. 25-31;

Барабанов А. Автоматизация MS Windows, или AutoIt как мечта эникей-щика. Часть 4. //Системный админист-ратор, №7, 2005 г. – С. 46-47;

8. Кирилл Малеванов. Установка локаль-ного Windows Update сервера под Unix. 2004 г. – http://www.malevanov.spb.ru/freebsd/winupdate.

Рисунок 6. MS Windows XP с текущим SP3 после установки

Рисунок 5. Процесс интеграции обновлений

Page 23: 048 Системный Администратор 11 2006
Page 24: 048 Системный Администратор 11 2006

22

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

Определяем задачуВ предыдущей статье [1] вы узна-ли об архитектуре продукта Microsoft Operations Manager 2005, его функ-циональных возможностях, а так-же способах установки компонентов MOM, в том числе и пакетов управле-ния Management Packs. Пакеты пред-ставляют собой контейнеры, содер-жащие наборы правил, которые поз-воляют осуществлять сбор информа-ции. Однако мы рассмотрели вариант использования уже готовых пакетов, которые необходимо было лишь им-портировать в МОМ. Удобство тако-го подхода очевидно, не нужно само-стоятельно разработывать пакет, со-

ответственно нет необходимости раз-бираться в структуре взаимодействия Management Pack с МОМ. Но все это удобно лишь в том случае, если для интересующего вас программного про-дукта уже разработан пакет управле-ния. Как упоминалось в предыдущей статье, Management Pack разработа-ны для всех продуктов Microsoft. Так-же пакеты управления есть для Lotus Domino и для систем резервного ко-пирования Veritas (Symantec) Backup Exec. Но наверняка в вашей сети най-дутся жизненно важные сервисы, со-стояние которых хотелось бы отслежи-вать с помощью МОМ, а готового паке-та управления на сайте производите-

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

В качестве примера такого серви-са предлагаю вам рассмотреть сис-тему антивирусной защиты серве-ров. Данный компонент – неотъемле-мая часть системы безопасности лю-бой сети, но не для всех корпоратив-ных антивирусов производители раз-работали пакеты управления для вза-имодействия с МОМ.

Примером антивируса будет ClamAV. В данном случае неважно ка-

Разрабатываем пакет управления для МОМ

В вашей сети есть множество приложений, работу которых вам необходимо постоянно контролировать. Как написать свой пакет управления МОМ для одной из наиболее важных служб вашей сети?

Андрей Бирюков

Page 25: 048 Системный Администратор 11 2006

23№11, ноябрь 2006

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

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

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

Архитектура Management PackПакет управления МОМ состоит из сле-дующих основных взаимосвязанных компонентов (см. рис. 1): Computer Attributes – в разделе

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

Computer Groups – группа ком-пьютеров, объединенная по оп-ределенному признаку, например серверы, на которых установлен Microsoft SQL.

Rule Groups – группы правил, ко-торые являются неотъемлемой час-тью любого пакета управления.

Providers – провайдеры являют-ся ключевыми элементами правил. Они определяют, где правило долж-но получать требуемые данные. Ос-новным источником данных для правил является журнал Event Log.

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

Automated Responses – в этом раз-деле определяются ответы, возвра-щаемые МОМ.

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

Предназначение каждого компо-нента станет более понятным непос-

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

Области действия и атрибутыНачнем составление нового пакета управления. Сначала необходимо оп-ределиться с атрибутами, по которым будет выполняться выборка. В консо-ли «Administrator Console» выбираем «Management Packs», далее «Computer Attributes» и затем в меню «Action» ука-зываем «Create Computer Attribute».

Далее предлагается выбрать, по какому именно атрибуту выбирать: по ветке реестра или по значению. Для рассматриваемого в статье ан-тивируса ClamAV нас будет интересо-вать ветка: HKEY_LOCAL_MACHINE\SO F T WAR E \ M ic roso f t \ W indows \CurrentVersion\Uninstall\ClamAV. Да-лее указываем имя, и атрибут готов.

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

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

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

Следующим этапом в разработке Management Pack будет создание пра-вил. Для этого прежде всего необходи-мо создать группу правил Rule Group («Action → New Rule Groups»). При со-здании новой группы можно сразу ука-зать те хосты, к которым будут эти пра-вила применяться.

В созданной группе правил есть три раздела: Event Rules, Alert Rules и Performance Rules. Подробно содер-жимое этих разделов уже рассматри-валось в предыдущей статье [1]. Поэ-тому сейчас я опишу только те компо-ненты, которые необходимы для созда-ния своего пакета управления.

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

Рисунок 1. Компоненты Management Pack

Рисунок 2. Ветка реестра в разделе «Attributes»

Page 26: 048 Системный Администратор 11 2006

24

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

щаться оператору МОМ. Для этого необходимо создать Alert Rule, которое будет отслеживать состояние сервиса и в слу-чае получения от системы сообщения «Service Unavaliable» отправлять письмо определенной группе пользователей. Реализовать все это можно следующим образом:

В созданной группе правил открываем раздел «Alert Rules», далее в меню «Action» выбираем «Create Alert Rule», отмечаем опцию of severity, а в соответствующем списке – пункт «Service Unavailable». Таким образом, будут отслежи-ваться системные сообщения о недоступности сервиса.

На следующем шаге указываем время, когда это пра-вило будет выполняться – «Always process data».

Наконец необходимо указать ответные действия «Responses». Как уже упоминалось ранее, нам требуется от-править уведомление соответственно «Send a notification to a Notification group». В разделе «Notification» выбираем груп-пу получателей «Notification group – Network Administrators». В соседней закладке «E-Mail format» можно внести измене-ния в формат почтового сообщения, которое будет отправ-лено операторам.

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

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

Теперь рассмотрим вопрос, касающийся создания опе-раторов. В административной консоли МОМ для этого пре-дусмотрен раздел «Notifications» (Уведомления), в кото-ром определены «Notification Group» (Группы уведомлений). Здесь необходимо добавить нужного оператора в группу «Network Administrators», указав при этом контактный e-mail, на который требуется отправлять уведомления.

Сценарии и запросыИтак, мы определились с атрибутами, по которым будет проходить выборка, также составили список тех машин, на которых необходимо осуществлять мониторинг. Теперь определимся с провайдером (Provider), то есть с источни-ком информации об интересующих нас событий. Таким со-бытием прежде всего является остановка сервиса ClamAV, то есть необходимо обнаруживать состояние Stopped. В ре-шении этой проблемы нам поможет запрос WMI. Подроб-нее об этом мощном средстве Windows уже рассказыва-лось в предыдущих выпусках журнала [2, 3]. Для контроля состояния сервиса ClamAV необходимо построить запрос следующего содержания:

Для этого в меню «Management Pack» выбираем опцию «Providers», далее «Create Provider». В качестве типа про-

вайдера выбираем «WMI Events» и в следующем окне, в по-ле запрос, указываем вышеприведенную строку. Таким об-разом, был создан источник информации по интересую-щему событию.

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

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

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

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

Net start [Имя_сервиса]

select * from __InstanceModificationEvent WITHIN 89 ↵ Where TargetInstance ClamAV'Win32_Service' ↵ AND TargetInstance.State = 'Stopped'

…c:/windows/DtcInstall.log: OKc:/windows/eicar_com.zip: Eicar-Test-Signature FOUNDc:/windows/EventSystem.log: OKc:/windows/explorer.exe: OKc:/windows/Zapotec.bmp: OKc:/windows/_default.pif: OK…----------- SCAN SUMMARY -----------Known viruses: 53081Engine version: devel-20060426Scanned directories: 1Scanned files: 84Infected files: 1Data scanned: 5.66 MBTime: 17.856 sec (0 m 17 s)

Листинг 1. Поиск вхождений в файле журнала

‘ путь к файлу журналаstrFile="c:\clamav-devel\log\clamd.log"Set objFSO = CreateObject("Scripting.FileSystemObject")‘ открываем файл на чтениеSet readPCFile = objFSO.OpenTextFile(strFile, ForReading)search="FOUND" искомая подстрока‘ цикл по всему файлу журналаDo Until readPCFile.AtEndOfStream strNextLine = readPCFile.Readline ‘ считываем построчно ‘ вхождение найдено If Instr(InStr(1,strNextLine,search)) then ‘ присваиваем соответствующее значение переменной result= strNextLine … ‘ далее действия с этой переменной End IfLoop ‘ завершение циклаreadPCFile.Close ‘ закрываем файл

Листинг 2. Общий вид сценария

‘ блок инициализацииOption Explicit

Const PROBLEMSTATE_NOTSET = 0

Page 27: 048 Системный Администратор 11 2006

25№11, ноябрь 2006

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

Напишем сценарий, который будет отслеживать появле-ние в журналах событий антивирусной системы сообщения о зараженных файлах (напротив имен таких файлов долж-но быть написано FOUND). Далее сценарий будет переда-вать МОМ сообщение в специальном формате, на основа-нии которого будет создан Alert, сообщающий оператору системы о заражении файла.

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

Теперь для завершения создания пакета нужно пропи-сать данный сценарий в МОМ. Сделать это можно следу-ющим образом. В консоли администрирования выбираем «Management Packs», далее «Scripts», в меню «Action» указы-ваем «Create Script». В открывшемся окне пишем имя, в ка-честве языка сценариев указываем VBScript, далее прос-то копируем через буфер обмена исходный текст, в следу-ющем окне Parameters ничего указывать не надо, так как все необходимые данные извлекаются в процессе рабо-ты программы.

Наконец завершающим этапом в составлении пакета управления для антивирусной системы является подклю-чение написанного сценария к Management Pack. Для это-

Const PROBLEMSTATE_GREEN = 1Const PROBLEMSTATE_YELLOW = 3 ' Yellow = Red+(Warning|Error)Const PROBLEMSTATE_RED = 3 Const ALERT_SUCCESS = 10Const ALERT_INFORMATION = 20Const ALERT_WARNING = 30Const ALERT_ERROR = 40Const ALERT_CRITICAL_ERROR = 50Const ALERT_SECURITY_BREACH = 60Const ALERT_SERVICE_UNAVAILABLE = 70

Dim oEventSet oEvent = ScriptContext.CreateEvent()

‘ основной блок

Sub Main()

‘ здесь производится вызов процедур, используемых для сбора ‘ и обработки необходимой информации

End Sub‘ Function ThrowScriptError(sMessage, oErr)'' ThrowScriptError :: Creates an event and sends it back ' to the mom server'' процедура возвращает сообщение об ошибке, в случае ' некорректного завершения сценария

ScriptContext.Quit()

End Function' VBScript source code

ScriptContext.Submit oEvent

Листинг 3. Сценарий, сообщающий об обнаружении зараженного файла

Option Explicit

Const PROBLEMSTATE_NOTSET = 0 ‘ состояние проблемыConst PROBLEMSTATE_GREEN = 1 ‘ цветовая маркировкаConst PROBLEMSTATE_YELLOW = 3 ‘ Yellow = Red+(Warning|Error)Const PROBLEMSTATE_RED = 3 Const ALERT_SUCCESS = 10‘ различные виды уведомлений AlertConst ALERT_INFORMATION = 20Const ALERT_WARNING = 30Const ALERT_ERROR = 40Const ALERT_CRITICAL_ERROR = 50Const ALERT_SECURITY_BREACH = 60Const ALERT_SERVICE_UNAVAILABLE = 70

Dim oAlertHandle‘ Объект для создаваемого событияSet oAlertHandle = ScriptContext.CreateAlert()

‘ основной блок

Sub Main()

‘ здесь производится вызов процедур, используемых для сбора ‘ и обработки необходимой информации virusfind()

End Sub

Sub virusfind()‘ путь к файлу журналаstrFile=”c:\clamav-devel\log\clamd.log”Set objFSO = CreateObject(“Scripting.FileSystemObject”)‘ открываем файл на чтениеSet readPCFile = objFSO.OpenTextFile(strFile, ForReading)

search=”FOUND” искомая подстрока‘ цикл по всему файлу журналаDo Until readPCFile.AtEndOfStream ‘ считываем построчно strNextLine = readPCFile.Readline ‘ вхождение найдено If Instr(InStr(1,strNextLine,search)) then ‘ присваиваем соответствующее значение переменной result= strNextLine‘ далее приводятся свойства уведомленияoAlertHandle.Name = “ Virus found!!!”‘ описание событияoAlertHandle.Description = “Virus found in file” & result‘ Какая роль (диск так как вирус найден на файловом уровне, ‘ а например, не в памяти)oAlertHandle.ServerRole = “Disk”‘ компонента – файловая системаoAlertHandle.Component = “File System”‘ цвет уведомления желтыйoAlertHandle.ProblemState = PROBLEMSTATE_YELLOW‘ вид уведомления – предупреждениеoAlertHandle.AlertLevel = ALERT_WARNINGEnd IfLoop ‘ завершение циклаreadPCFile.Close ‘ закрываем файл

End sub‘ Function ThrowScriptError(sMessage, oErr)‘‘ ThrowScriptError :: Creates an event and sends it back ‘ to the mom server'' процедура возвращает сообщение об ошибке, в случае ‘ некорректного завершения сценария On Error Resume Next

Dim oScriptErrorEvent

Set oScriptErrorEvent = ScriptContext.CreateEvent() With oScriptErrorEvent .EventNumber = 40000 ‘EventLogEntryType Enumeration .EventType = 1 .Message = sMessage .SetEventParameter “Microsoft Windows Servers

Base Operating System” .SetEventParameter sMessage .SetEventParameter oErr.Description .SetEventParameter oErr.Number End With ScriptContext.Submit oScriptErrorEvent

ScriptContext.Echo ↵ “ThrowScriptError(‘” & sMessage & “’)”

ScriptContext.Quit()End Function‘ VBScript source code

ScriptContext.Submit oEvent

Page 28: 048 Системный Администратор 11 2006

26

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

го нужно создать задачу «Task». Для этого выбираем «Create Task», в окне, запрашивающем, где должен выпол-няться сценарий (Task Run Location And Type), выбираем «Agent Managed Computer» и тип задачи – «Script». В следующем окне «Target Role – Computer и Script» – указываем имя того сценария, который был создан ранее. Далее указываем имя задачи и нажимаем «Finish».

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

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

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

1. Бирюков А. Microsoft Operations Manager 2005 – управляем сетью. //Системный администратор, №10, 2006 г. – С. .

2 Леонтьев К. Вы все еще не использу-ете WMI? Часть 1. //Системный адми-нистратор, №1, 2006 г. – С. 4-11;

Леонтьев К. Вы все еще не используе-те WMI? Часть 2: пишем сценарии//Сис-темный администратор, №2, 2006 г. – С. 6-14.

3. Леонтьев К. Узнай секреты WMI: со-бытия и провайдеры. Часть 1: допол-нительные возможности. //Системный администратор, №3, 2006 г. – С. 6-13;

Леонтьев К. Узнай секреты WMI: со-бытия и провайдеры. Часть 2: ключ к управлению системой и приложени-ями. //Системный администратор, №5, 2006 г. – С. 28-34.

4. Microsoft Operations Manager Software Development Kit.

5. Microsoft Management Pack Developer Guide.

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

ВыводыПодводя итог всех выполненных дейс-твий, хотелось бы сделать ряд поясне-ний. Конечно, большинство коммер-ческих корпоративных антивирусов умеют выполнять описанные в ста-тье задачи. Так, для контроля за ра-ботой службы антивируса использу-ются различные механизмы, которые в случае остановки сервиса немедлен-но его перезапускают. Также и уведом-ления о вирусах они могут рассылать не только с помощью электронной поч-ты, но и, к примеру, с помощью служб мгновенных сообщений (ICQ, MSN и других). Так что целью статьи не яв-лялось изобретение велосипеда в уп-равлении корпоративными антивирус-ными системами. Главное, на примере бесплатного антивируса ClamAV по-казан механизм создания собствен-ного пакета управления для Microsoft Operations Manager. Теперь на основе приведенных рекомендаций вы смо-

Рисунок 3. Сообщение о зараженном файле

Page 29: 048 Системный Администратор 11 2006

27№11, ноябрь 2006

полезные советы

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

Поэтому не забывайте о периодической (в идеале – еже-дневной, а также внеплановой после крупных изменений в базе) очистке, которая выполняется командой VACUUM (VACUUM ANALYZE – для анализа структуры данных). Па-раметр VERBOSE позволит вам узнать, чем же СУБД за-нимается в это время.

Нужно заметить, что зачастую при установке PostgreSQL утилита очистки базы (vacuumdb) автоматически «пропи-сывается» в crontab или сценариях ежедневного обслужи-вания (periodic). Но поскольку очистка сильно замедляет работу СУБД, имеет смысл проконтролировать эти уста-новки и привести их в соответствие с режимом работы ва-шего сервера.

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

Используйте родственные связиPostgreSQL, будучи, в общем-то реляционной СУБД, под-держивает и некоторые «объектные» свойства. Например, наследование таблиц. То есть вы можете на базе сущест-вующей таблицы (которая в дальнейшем так и будет назы-ваться – базовой) создать производную (или даже несколь-ко), дополнив её новыми полями:

Теперь в таблице withdesc, помимо собственного по-ля description, будут доступны и поля родительской таб-лицы mytable – id, ware и price. Причём данные, записан-ные, скажем, в поле ware таблицы withdesc, будут видны и в mytable (поскольку физически они там и хранятся). Ес-тественно, и наоборот, изменения mytable будут находить отражение и в withdesc.

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

CREATE TABLE mytable (id serial, ware varchar, ↵ price numeric(10,2));CREATE TABLE withdesc (description text) INHERITS mytable;

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

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

admin=# BEGIN;

BEGIN

admin=# DECLARE mycursor CURSOR FORadmin-# SELECT * FROM mytable;

DECLARE CURSOR

admin=# FETCH NEXT FROM mycursor;

1 | Монитор | 7999.00

admin=# FETCH NEXT FROM mycursor;

2 | Коврик для мыши | 7.90

admin=# MOVE BACKWARD ALL IN mycursor;

MOVE 1

admin=# FETCH NEXT FROM mycursor;

1 | Монитор | 7999.00

admin=# COMMIT;

COMMIT

Как видите, это напоминает обычную работу из Perl-сце-нария, но на этот раз выборка хранится на стороне серве-ра. Запросом FETCH можно получить следующую, преды-дущую, текущую запись (или несколько записей начиная с текущего положения указателя). Запрос MOVE служит для перемещения указателя в том или ином направлении. Безусловно, при использовании курсоров есть свои не-достатки – частые запросы к СУБД заметно сказываются на быстродействии, да и на сеть создаётся дополнитель-ная нагрузка... Поэтому в PostgreSQL курсоры используют-ся сравнительно редко. Тем не менее, в ряде случаев они могут оказаться полезны, например, если приходится ра-ботать с большими объёмами данных на слабенькой кли-ентской машине.

Нужно заметить, что в PostgreSQL курсоры поддержи-вают только чтение. Кроме того, курсор может быть ис-пользован только внутри транзакционного блока (BEGIN – COMMIT/ROLLBACK).

Ищите информацию в первоисточникахВ PostgreSQL можно узнать много интересного непосредс-твенно из системных таблиц. Получить их список в интер-активном терминале позволяет директива \dS. Например, таблица pg_authid содержит сведения о зарегистрирован-ных PostgreSQL-пользователях (для работы можно исполь-зовать представления на её базе – pg_user, pg_shadow, pg_group); из pg_index вы получите данные по индексным файлам; и т. д.

В ряде случаев просмотр этих таблиц помогает быст-рее разобраться в той или иной проблеме. Кроме того, это довольно удобный путь для автоматического управления базами PostgreSQL.

Page 30: 048 Системный Администратор 11 2006

28

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

Знакомство с дистрибутивом у ме-ня произошло в «боевых услови-ях». Однажды, в один прекрас-

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

Live-CD-дистрибутивов, одним из них оказался SystemRescueCd Linux. Придя к другу, была обнаружена «лежавшая» домашняя редакция ОС от одной из-вестной корпорации, причем «лежав-шая» прочно. На вопрос, какие дис-ки с программами есть дома, мне был протянут серебристый диск, идущий в комплекте с его компьютером – той самой ОС, что уже не подавала при-знаков жизни. Что ж, компьютер ну-жен рабочим, причем срочно. Так как

на предложение установить OpenSUSE был получен отказ и подходящих инс-трументов под рукой не оказалось, пришлось попытаться воспользовать-ся Live-CD SystemRescueCd Linux, ко-торый до этого я даже ни разу не за-гружал...

О дистрибутиве SystemRescueCd LinuxLive-CD-дистрибутив предназначен для восстановления системы пос-

На что способен дистрибутив SystemRescueCd Linux

Наверняка вам приходится сталкиваться с проблемами по восстановлению системы после сбоя и использовать для этого наборы дистрибутивов и Live-CD различного назначения. Есть ли единое и компактное решение «все в одном»?

Иван Максимов

Page 31: 048 Системный Администратор 11 2006

29№11, ноябрь 2006

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

ле сбоя, копирования данных с пов-режденных жестких дисков, тестиро-вания аппаратной части ЭВМ, сбро-са забытых паролей в семействе ОС Windows NT, подготовки дисков для ус-тановки новой ОС и многого другого, но обо всем по порядку.

Дистрибутив основан на Gentoo Live-CD, версии ядра Linux 2.6.16.10. Последняя стабильная версия распо-ложена на официальном сайте про-екта [1].

Доступны архитектуры x86 (i586) и PPC (Pocket PC). В дистрибутиве при-сутствует поддержка файловых сис-тем: ext2/3, reiserfs (включая 4), xfs, jfs, iso9660, vfat и NTFS (в режиме запи-си используется CaptiveNtfs). Подде-рживаются сетевые службы: ssh, nfs, samba, lufs.

Первые версии данного дистри-бутива свет увидел в 2003 г., на дан-ный момент последний релиз от пер-вого мая 2006 г. Обновления происхо-дят не регулярно, в 2003-2004 гг. бы-ло выпущено 20 обновлений, тогда как в 2005 г. ни одного, в 2006 дистрибу-тив «ожил», выпущено 4 релиза. Фо-рум проекта поддерживается на про-тяжении всего времени существова-ния Live-CD. На сайте доступна доку-ментация на английском, французском и испанском языках, великого и могу-чего русского нет.

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

ку с USB-устройств. Итак, приступим к обзору.

ЗагрузкаСразу после появления меню (рис. 1) не спешите нажимать <Enter> для за-пуска Gentoo, кроме изменения пара-метров, таких как разрешения экрана, загрузки с жесткого диска или флоппи-дисковода, нам доступны небольшие, но очень полезные образы программ и утилит. Рассмотрим самые интерес-ные параметры. Нажав <F2>, мы мо-жем выбрать: Memtest86+ v1.65 – тест оператив-

ной памяти на физические повреж-дения. После загрузки теста сразу начнется проверка ОЗУ с парамет-рами по умолчанию (полное тес-тирование), изменить параметры можно, зайдя в небольшое меню, нажав клавишу <C>.

FreeDOS – ОС и небольшой на-бор утилит для работы с жестким диском. В №2 за 2006 г. я описы-вал FreeDOS [2], но напомню неко-торые основы. Командой «dir /w» выведем на экран список доступ-ных утилит (38 файлов и одна ди-ректория – небольшой выбор). Для просмотра файлов с доку-ментацией можно воспользовать-ся утилитами more или pg, работа-ет «донабор» команд и названия файлов (как в bash из *nix). Из ос-новных утилит стоит выделить: fdisk (работа с разделами), chkdsk (тест FAT-партиций на ошибки), testdisk (восстановление разде-лов FAT, NTFS, ext2/3, reiserfs, ufs и т. д.), presizer (изменение разме-ра FAT-партиций). Как можно заме-

тить, образ содержит утилиты, ори-ентированные в основном для ра-боты с FAT-разделами, т.е. для ОС – клонами DOS и Windows 9х.

GAG (Graphical-Boot-Manager) – загрузчик, аналог Lilo или Grub, работает практически со все-ми распространенными ОС (DOS, Windows, Linux, BSD). Возможна одновременная загрузка до 9 опе-рационных систем. Сразу после за-грузки рекомендуется ознакомить-ся с документацией и часто зада-ваемыми вопросами (первый и вто-рой пункты меню).

Ranish Partition Manager – предна-значен для работы с партициями, более функционален, чем стандар-тный fdsik. К сожалению, возможна работа в режиме создания только с файловыми системами FAT. Хо-тя Ranish Partition Manager и обна-руживает партиции с ufs (FreeBSD) и ext2/3 (Linux), из доступных опций имеется возможность только уда-лить их.

Aida v2.12 – неплохой тест по оп-ределению «железа», но, к сожале-нию, успевший уже устареть (про-блемы с определением новых чи-пов, например – nForce2). На 45 за-кладках будет подробно отображе-но аппаратное обеспечение ЭВМ. Если необходимо записать резуль-тат работы теста, выйдите из тес-та Aida (клавиша <Esc>) и запус-тите a.bat, который создаст файл report.asm.

Dban (Darik’s Boot and Nuke) – за-мечательная утилита для разруше-ния данных на жестком диске. Пос-ле загрузки будет представлено ме-

Рисунок 1. Основное загрузочное меню Sysrescuecd Рисунок 2. Строка приглашения c основными подсказками

Page 32: 048 Системный Администратор 11 2006

30

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

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

Ntpass (Offline NT Password and Registry editor) – про-грамма для сброса забытых паролей и редактирования реестра в ОС Windows семейства NT. Сразу после за-грузки будет предложено выбрать раздел с Windows-системой или автоматическое подключение всех FAT- и NTFS-разделов. Сделано это для того, чтобы была возможность выбрать для работы конкретную ОС (бу-дет отображен полный путь до папок с Windows-сис-темами). Если на компьютере установлена всего одна Windows, смело следуйте указаниям мастера в автома-тическом режиме. В конце его работы вам будет задан вопрос на подтверждение сброса пароля или начала ра-боты с реестром в режиме записи.

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

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

Обзор GentooВыбрав удобный видеорежим, запустите систему. Во время загрузки вас спросят, какую кодовую страницу следует ис-пользовать (русская за номером 31). Добравшись до стро-ки приглашения, можно будет увидеть небольшие подсказ-ки по работе с системой (рис. 2), работа ведется по умол-чанию от пользователя root.

После загрузки будет доступно 1388 команд (полноцен-ный Linux, это вам не busybox). Никаких графических оболо-чек типа KDE или GNOME нет (кроме Midnight Commander), хотя, собственно, зачем они нужны на административном диске? В качестве командного интерпретатора (шелла) ис-пользуется zsh версии 4.2.0, любители bash смогут найти последний по стандартному пути /bin/bash.

При беглом обзоре стандартных утилит хотелось бы вы-делить их разнообразие: Редакторы текста – vim, nano, zile, joe и графический

qtinyeditor. Архиваторы – gzip, zip, rar, tar, arj, dar. Утилиты для записи CD и DVD – cdrecord, cdrtools,

dvd-rw-tools. Веб-браузеры – links и lynx. Сканер Nmap (версии 3.55). Пакет утилит для работы с файлами ОС DOS – Mtools

(mmount, mformat,..). Набор утилит – ntfstools (ntfsclone, ntfsresize,...). Антивирус ClamAV (версии 0.75.1, обновление баз

от 26 февраля 2006 г.). Утилиты для работы с партициями – GNU Parted,

Qtparted, Partimage.

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

Так как дистрибутив ориентирован на задачи для ра-боты с жесткими дисками, были приведены скриншоты утилит с графическим интерфейсом GNU Parted (рис. 3), Qtparted (рис. 4) и Partimage (рис. 5) для ознакомления с ними.

Первые две – программы для создания/удаления пар-тиций (намного функциональнее fdisk), поддерживают фай-ловые системы ext2/3, raiserfs, FAT, NTFS. Замечу лишь то, что GNU Parted не имеет возможности отката действий. Как видно, интерфейсы у них подобные Partition Magic и очень простые.

PartImage – утилита для создания клонов копий парти-ций (аналог ghost и arcronix), очень жаль, что у данной ути-литы поддержка NTFS на экспериментальной стадии, и раз-работчики предупреждают нас о возможных проблемах при клонировании ntfs дисков, но данную функцию можно вы-полнить и утилитой ntfsclone.

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

Рисунок 3. Интерфейс GNU Parted

Рисунок 4. Интерфейс Qtparted

Page 33: 048 Системный Администратор 11 2006

31№11, ноябрь 2006

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

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

Пересборка дистрибутиваМеня дистрибутив устраивал во многом, но все же нужно было добавить один скрипт для автоматизации клониро-вания рабочих станций. Многие из нас пересобирали дис-трибутивы, основанные на Knoppix, и знают, что эта зада-ча не совсем тривиальна и занимает много времени. Чаще всего в начале нужно создать образ дистрибутива, распа-ковать его, найти в нем корневую файловую систему (очень часто это небольшой gzip-архив) и заархивированный об-раз системы (Cloopfs). В SystemRescueCd Linux основной архив находится в корне диска, его объем около 100 Мб (sysrcd.dat запакован Cloop) для работы с ним нам помо-жет скрипт sysresccd-custom. Итак, рассмотрим подробно разборку и сборку дистрибутива.

Загрузим Gentoo и выделим место на жестком диске для распаковки cloop-образа системы, для этого примон-тируем партицию командой:

Создадим образ с файловой системой ext2:

Примонтируем созданную файловую систему в /mnt/custom, должен заметить, что образ нужно монтировать именно в эту директорию (она уже имеется на диске):

Теперь распакуем файл-архив sysrcd.dat:

Процесс распаковки, как уже упоминалось, занимает долгое время, с этим, к сожалению, ничего поделать не-льзя. После распаковки, зайдя в директорию /mnt/custom/, мы увидим нашу систему, которую можно уже изменять. В качестве примера добавим скрипт MyLanCloon в папку bin. Сам скрипт рассмотрим далее.

Теперь снова запакуем систему (в cloopfs) командой:

Должен заметить, что процесс запаковки идет еще доль-ше, чем распаковка.

Разработчики приготовили для нас еще один сюрп-риз, после архивирования в cloop мы можем создать файл autorun в папке /mnt/custom/customcd/isoroot/, который вы-полнится при загрузке системы. Это может быть удобно для установки каких-либо небольших параметров, напри-мер установки сети:

В данном примере мы устанавливаем сетевую оснаст-ку и по протоколу nfs подключаемся к нашему файловому серверу (к домашней папке нужного пользователя).

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

Теперь создадим главный iso-образ, который позже мы запишем на диск:

mysyscd – метка тома будущего диска. Образ и его md5-хеш будут расположены в папке /mnt/custom/customcd/isofile/.

Все готово, можно записывать образ на CD и грузить-ся в систему. Все данные операции можно было выполнить и стандартными утилитами cloop-util и cdrtool, но это заняло бы больше времени плюс, как уже упоминалось, без соот-ветствующих навыков неопытные пользователи столкнулись бы с проблемами. Если все же любопытно, что делает скрипт sysresccd-custom, его можно найти в папке /usr/sbin/.

Скрипт MyLanCloonЯ специально вынес скрипт в отдельный раздел, во-пер-вых, из-за его большого размера, а во-вторых, из-за необ-ходимости рассмотреть его подробнее.

Задача: написать скрипт для автоматизации процесса создания и копирования iso-образов клиентских машин на файловый сервер. Копирование будет производиться по протоколу SMB, идентификация образов рабочих стан-ций будет по их MAC-адресу.

Задача тривиальна, и многие используют для её реше-ния большие и зачастую дорогие программные комплексы (Acronix, Ghost…), но скрипт во многом заменяет подобные программы и обладает замечательным свойством – беско-нечной расширяемостью. Так как SystemRescueCd Linux об-ладает богатым инструментарием для работы с партиция-ми и файловыми системами, наши возможности будут ог-раничены только фантазией (в *nix-области).

mount /dev/hda1 /mnt/temp1

dd if=/dev/zero of=/mnt/temp1/fs.iso bs=1M count=1200mkfs.ext2 /mnt/temp1/fd.iso

mount -o loop /mnt/temp1/fd.iso /mnt/custom

sysrescue-custom extract

sysrescue-custom extractsysrescue-costom cloop 300 20000

#!/bin/bash ifconfig eth0 192.168.1.200 netmask 255.255.255.0 route add default gw 192.168.1.1 mount -t nfs 192.168.1.10:/home/users /mnt/temp1/

sysresccd-custom setkmap ru

sysresccd-custom isogen mysyscd

#!/bin/bash

# Установка параметров сетиifconfig eth0 192.168.1.200 netmask 255.255.255.0route add default gw 192.168.1.1

# Монтирование сетевой папкиmount.smb //192.168.1.10:/Files/ /mnt/temp1/

# Определение MAC-адресаMACADDRES="`strings /sys/class/net/eth0/address`"echo "Mac addres is ${MACADDRES}"

# Определение файловых систем # FATdd if=/dev/hda1 bs=512 count=1 | strings | grep FAT if [ $? -eq 0 ]; thenFS="1"fi

# NTFSdd if=/dev/hda1 bs=512 count=1 | strings | grep NTFSif [ $? -eq 0 ]; then

Page 34: 048 Системный Администратор 11 2006

32

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

Итак, рассмотрим скрипт подробнее.Установка параметров сети – стандартными коман-

дами ifconfig и route задаем IP-адреса локальной маши-ны и роутера.

Монтирование сетевой папки – монтирование проис-ходит по протоколу smb, сделано это из соображений сов-местимости с Windows-сетевыми ресурсами, так как файло-вый сервер может быть и не под управлением ОС Linux. Же-лающие могут выбрать nfs-протокол, конечно же, если дан-ный сервер установлен в сети. Если требуется обеспечить безопасность при копировании iso-образов, можно задейс-твовать lufs (Linux users file system) и производить монтиро-вание сетевой папки по ssh-протоколу. Также по lufs мож-но монтировать папки ftp-серверов. Выбирать есть из чего, все зависит от доступных средств, организации сети и ва-ших предпочтений.

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

Определение файловых систем – так как мы точно не знаем, какая файловая система используется Windows, для начала определим ее. Зная, что в первых 512 байтах жесткого диска (цилиндр 0, головка 0, сектор 1) находится Master Boot Record, проверим, FAT ли это или NTFS. Дол-жен заметить, я исходил из предположения, что на рабочих

станциях установлена одна ОС и находится на hda1 (дис-ке C), если установлено 2-3 или более ОС, следует редак-тировать скрипт либо для выбора конкретной ОС, либо для клонирования всего диска (если необходимо сохранить все операционные системы).

FAT и NTFS – проверяем, какая файловая система на ус-тройстве hda1. Если FAT, то в переменную FS будет занесе-но значение 1, если NTFS – 2. В дальнейшем это значение нам понадобится для выбора утилит клонирования.

Процедура сохранения образа – как уже упомина-лось выше, partimage работает стабильно только с FAT-файловыми системами (FAT12, FAT16 и FAT32) ОС Windows, но при этом обладает большими возможностями. Собствен-но из-за этого скрипт и разделен на две части: для работы с FAT или NTFS. Из интересных возможностей Partimage стоит выделить то, что он определяет занятое пространство на диске и копирует только его, а не диск целиком (как dd), при этом может очень эффективно архивировать iso-образ (в среднем компрессия составляла 50%).

Сохранение FAT-образа – утилитой partimage сохраня-ем FAT-образ. Рассмотрим подробно ключи:

где: z1 – уровень компрессии (z0 – быстрая запаковка,

но «слабая» компрессия, z2 – максимальная компрес-сия, но длительное время запаковки);

o – если файл с данным именем существует, перезапи-сать его;

b – не запрашивать параметры у пользователя в интер-активном меню;

d – не запрашивать у пользователя дополнительное опи-сание для образа;

save – указываем partimage, что необходимо копировать информацию с устройства в файл;

/dev/hda1 – это наш жесткий диск. И последний пара-метр – имя файла образа, оно будет равно значению переменной MACADDRES.

Сохранение NTFS-образа – для создания образов дисков с файловой системой ntfs воспользуемся утилитой

partimage -z1 -o -b -d save /dev/hda1 ↵ /mnt/temp1/arhiv/${MACADDRES}

Рисунок 5. Интерфейс Partimage

FS="2"fi

# Процедура сохранения образаdo_save(){# Сохранение FAT-образаif [ $FS -eq 1 ]; thenpartimage -z1 -o -b -d save /dev/hda1 ↵ /mnt/temp1/arhiv/${MACADDRES}exit 1fi

# Сохранение NTFS-образаif [ $FS -eq 2 ]; thenntfsclone --save-image /dev/hda1 -o ↵ /mnt/temp1/arhiv/${MACADDRES}exit 1fi}

# Процедура загрузки образаdo_load(){# Загрузка FAT-образаif [ $FS -eq 1 ]; thenpartimage -b restore /dev/hda1 ↵ /mnt/temp1/arhiv/${MACADDRES}.000exit 1fi

# Загрузка NTFS-образаif [ $FS -eq 2 ]; thenntfsclone --restore-image -O /dev/hda1 ↵ /mnt/temp1/arhiv/${MACADDRES}exit 1fi}

# Основная функцияcase "$1" insave)do_save;;load)do_load;;esac

Page 35: 048 Системный Администратор 11 2006

33№11, ноябрь 2006

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

ntfsclone из состава ntfstools. О пара-метрах ntfsclone:

где: save-image – сохранение образа; /dev/hda1 – наш жесткий диск; o – путь и имя файла образа (будьте

внимательны, параметр «-о» в ниж-нем регистре).

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

Процедура загрузки образа – рас-паковывает образ системы. Опять же задействуем для развертывания обра-зов обе утилиты: partimage для FAT-раз-делов и ntfsclone для NTFS.

Загрузка FAT-образа:

где: b – не запрашивать параметры

у пользователя в интерактивном меню;

restore – восстановление образа; /dev/hda1 – жесткий диск. Послед-

ний параметр – путь до образа, имя файла будет равно значению переменной MACADDRES, плюс расширение «.000».

Загрузка NTFS-образа:

где: restore-image – восстановление об-

раза; O – путь до устройства для обра-

за (будьте внимательны, параметр «-O» в верхнем регистре);

/dev/hda1 – наш жесткий диск. И как всегда, последний пара-метр – путь до файла образа на-шей системы.

Основная функция – основной оператор выбора case: если в консоли выполнить скрипт с параметром save – выполнится рассматриваемая выше

Альтернативы SystemRescueCd LinuxEmergencu CD [4] – спасательный дистри-бутив, основанный на Gentoo Linux вер-сии ядра 2.4.22. Cодержит графический интерфейс IceWM, достаточно компактен (~180 Мб), но последний релиз от 28 октяб-ря 2003 г. Поддерживает большинство на-иболее распространенных файловых сис-тем (FAT, ext2/3, NTFS, ...) и сетевых служб (smb, nfs, ssh,...). Программы для работы с партициями Partimage и gpart. Дистри-бутив в принципе богат утилитами и ком-пактен, но за 3 прошедших года, к сожале-нию, успел устареть.

INSERT LiveCD [5] – основанный

на Knoppix 4.0.2 версии ядра Linux kernel 2.6.12.5. Последняя доступная версия 1.3.6 от 24 февраля 2006 года. Дистри-бутив поддерживает файловые системы ext2/3, reiserfs, FAT, NTFS (для режима за-писи используется captive или ntfstools) и другие. Включены сетевые службы nfs, smb, cifs, ssh и afs. Дистрибутив – наибо-лее близкий конкурент SystemRescueCd Linux, но есть одна странность. На офици-альном сайте, в ChangeLog говорится о вы-пуске версии 1.3.8 от 10.10.2006, но на ftp дистрибутива данной версии нет. Возмож-но, это ошибка, а, может быть, когда вы бу-дете держать журнал в руках, версия дист-рибутива и «объявится»?

процедура сохранения образа, если load – сработает процедура загрузки образ. Примеры: «MyLanCloon save» или «MyLanCloon load».

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

В этом случае уже не будет иметь значения, в каком регистре набирают-ся параметры save и load. Еще одной очень полезной функцией было бы со-здание процедуры для установки мас-тер-образа на «чистый» жесткий диск. Но скрипт получился и так громоздким, мы бы совсем отвлеклись от основного обзора дистрибутива SystemRescueCd Linux и его утилит. Если у вас есть же-лание доработать скрипт, но не хвата-ет опыта в подобных вещах, очень ре-комендую документ «Advanced Bash Scripting» на русском языке, располо-женный по адресу [3].

ВыводыSystemRescueCd Linux – функциональ-ный, быстрый, современный дистрибу-

тив, подходящий для работы как с до-машними машинами, так и в неболь-ших корпоративных сетях (после не-обходимых доработок).

Форум проекта поддерживается на протяжении всего существования дистрибутива, несмотря на некоторые «паузы» в выпуске новых релизов.

К положительным моментам от-носится наличие скрипта sysresccd-custom, который позволяет легко пе-ресобрать дистрибутив.

Как многие, наверное, успе -ли заметить, размер дистрибутива (121 Мб) позволяет хранить на дис-ке мастер-образ Windows-систе-мы (до ~580 Мб, что вполне доста-точно), также из-за компактности SystemRescueCd Linux можно записать на miniCD, что добавляет дистрибути-ву еще один плюс.

На этом все, удачной работы!

1. http://www.sysresccd.org – официаль-ный сайт дистрибутива Sysrescuecd Linux.

2. Максимов И. FreeDos – новый взгляд на старые вещи.//«Системный адми-нистратор», №2, февраль 2006 г. – C. 32-37.

3. http://gazette.linux.ru.net/rus/articles/abs-guide/index.html – «Advanced Bash-Scripting Guide. Искусство программи-рования на языке сценариев команд-ной оболочки».

4. http://emergencycd2.sourceforge.net/index.ru.html – официальный сайт Cool Linux CD и Emergency CD.

5. http://www.inside-security.de – офици-альный сайт дистрибутива INSERT LiveCD.

ntfsclone --save-image /dev/hda1 ↵ -o /mnt/temp1/arhiv/${MACADDRES}

partimage -b restore /dev/hda1 ↵ /mnt/temp1/arhiv/${MACADDRES}.000

ntfsclone --restore-image ↵ -O /dev/hda1 ↵ /mnt/temp1/arhiv/${MACADDRES}

case "$1" in[Ss][Aa][Vv][Ee])do_save;;[Ll][Oo][Aa][Dd])do_load;;esac

Page 36: 048 Системный Администратор 11 2006

34

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

Лучший способ решить эту про-блему – использовать специа-лизированные утилиты, автома-

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

ные на известную уязвимость, что в це-лом позволит повысить общий уровень безопасности и сократит простои сис-темы и администрирование в целом. Корпорация Microsoft в настоящее вре-мя предлагает свое решение Windows Server Update Services (WSUS) [1], поз-воляющее администратору централи-зованно управлять установкой обнов-лений и исправлений продуктов этой компании. Но не всегда сеть имеет од-

нородные компоненты, и не все воз-можности, которые хотелось бы видеть в подобных продуктах, есть в WSUS. Здесь на помощь придут разработки сторонних производителей.

Возможности PatchQuestНазначение утилиты PatchQuest 4 [2] разработки AdventNet Inc. аналогич-но WSUS – автоматизация управле-нием и установкой патчей, исправ-

Автоматизируем процесс установки обновлений с PatchQuest 4

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

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

Page 37: 048 Системный Администратор 11 2006

35№11, ноябрь 2006

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

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

NT 4.0/2000/XP/2003 различного назначения и связанных приложе-ний: компоненты Microsoft Office 2000/2002/2003, Internet Explorer 5.01, 5.5 и 6.0, Outlook и Outlook Express, Internet Information Services, NET. Framework 1.1 и 2.0, Windows Media Player;

серверы и приложения SQL Server 7.0 и 2000, Exchange Server 5.5, 2000 и 2003, MDAC 2.5 – 2.8, MSXML 2.6 – 4.0;

а также операционные системы Linux: Red Hat Linux 7.2, 8.0, 9.0, RedHat Linux Advanced/Enterprise Server 2.1, 3.0, 4.0, Debian GNU/Linux 3.0 (Woody) и 3.1.

Возможна автоматическая загруз-ка и установка отсутствующих патчей и обновлений на основании заданных правил или корпоративных полисов бе-зопасности. Администратор стоит пе-ред выбором: устанавливать все пат-чи либо отбирать их по некоторому критерию, например, по серьезнос-ти уязвимости, которую патч устраня-ет. В PatchQuest большим подспорьем при отборе патчей является возмож-ность оценки уязвимости. Сканируя отдельный узел или диапазон адре-сов вручную или по расписанию в ука-занное время PatchQuest, идентифи-цирует потенциальные нарушения бе-зопасности в операционной системе Windows и приложениях и сообщает о необходимых для их устранения пат-чах, а также об уязвимостях, для ко-торых в базе на момент сканирова-ния еще нет патчей. Администратору в этом случае очень легко определить системы, нуждающиеся в особом вни-мании, которые требуют установки пат-чей, устраняющих критические уязви-мости, и вовремя принять соответству-ющие меры. По окончании сканирова-ния выдается подробный отчет, в кото-ром будет указан статус патча, Bulletin ID, имя патча, его краткое описание, уровень угрозы и другая информация (рис. 1). Возможно отправление отче-тов по электронной почте. Система от-четов PatchQuest продумана хорошо,

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

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

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

Так же как и WSUS, PatchQuest ра-ботает по клиент-серверной схеме, когда на компьютерах устанавлива-ется агент, который, взаимодействуя с сервером, управляет установкой обновлений и сбором информации. Но может использоваться схема, не требующая уста-новки агентов на компью-теры пользователей, а так-же комбинированный ва-риант доступа. В качестве серверов могут выступать компьютеры, работающие под управлением Windows от 2000 до 2003, а также RedHat Linux и Debian. Аген-ты доступны для этих же сис-тем плюс Windows NT SP6a Workstation. При варианте работы без установленно-

го агента сервер PatchQuest для до-ступа в систему использует логин и пароль. Поддерживается аутенти-фикация средствами Windows, Active Directory, а для Linux систем telnet и ssh. Для удобства доступа к компьютерам администратор может заранее создать удостоверения, состоящие из логина и пароля, и занести эту информацию в PatchQuest. Информация между сер-вером и целевой машиной может пере-даваться в зашифрованном виде.

Для удаленного управления на-стройками PatchQuest и процессом обновлений используется понятная и удобная веб-консоль. К сожале-нию, в списке языков локализации от-сутствует русский. Доступ к серверу при этом возможен как по http, так и по защищенному протоколу https. Для работы с консолью можно при-менять в принципе любой доступ-ный веб-браузер. Подойдут Internet

Рисунок 1. После сканирования администратор получит подробнейший отчет

Рисунок 2. Вариант использования PatchQuest выбирается во время установки

Page 38: 048 Системный Администратор 11 2006

36

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

Explorer от 5.0, Netscape от 7.0, Mozilla и Mozilla Firefox 1.5, Opera от 7.2. Стра-ничка оптимизирована для разреше-ний 1024x768 и выше. Для хранения настроек используется база данных MySQL. Она, как и веб-сервер, напи-санный на Java, входит в дистрибутив, поэтому никаких дополнительных ком-понентов устанавливать не надо.

Продукт распространяется под двумя лицензиями. Бесплатная Free Edition разрешает управлять обновле-ниями для 5 компьютеров, вне зависи-мости от установленного программно-го обеспечения или их версии. Платная Professional Edition Subscription License, реализованная по подписному принци-пу, то есть «Node Locked License» – ли-цензия, привязанная к определенной машине, покупается на определен-ный срок, по окончании которого не-обходимо либо ее обновить, либо уда-лить продукт. Интересно, что согласно лицензионного соглашения, компания оставляет за собой право в любой мо-мент провести аудит для выяснения правильности использования лицен-зии, перед этим она за 7 дней предуп-реждает администратора. Также стоит отметить, что техническая поддержка доступна для всех, вне зависимости от лицензии.

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

обходимо перейти в вариант Free или удалить PatchQuest.

Использование языка Java наложи-ло и свои системные требования. Так для работы сервера PatchQuest пона-добится компьютер с частотой не ме-нее 1,8 Гц и имеющий минимум 512 Мб оперативной памяти. Для клиента из-менились только требования к ОЗУ – 256 Мб. Для баз обновлений рекомен-дуется оставить 10 Гб свободного мес-та на жестком диске. Это рекоменда-ции разработчиков. При тестировании с этой задачей нормально справлял-ся компьютер с процессором Celeron 633 Гц и 256 Мб оперативной памяти, на нем одновременно работал как сер-вер, так и клиент и дополнительно про-водилось обновление еще 4 систем. Система несколько подтормаживала, но работать все равно было можно.

Установка и использованиеУстановка сервера ничего сложно-го не представляет. Если установка происходит в Linux без использова-ния графического интерфейса, набе-рите SecureCentral_PatchQuest.bin –console. На втором шаге вас попросят уточнить номер порта для веб-серве-ра (по умолчанию используется 8080) и номер порта для подключения кли-ентов (9000). После установки вызы-ваем веб-браузер и заходим по адре-су http://имя_сервера:8080/, зарегист-рировавшись как пользователь admin с паролем admin. В системе есть еще

Рисунок 3. Основное окно программы настройки

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

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

Заходим во вкладку «Settings» и ус-танавливаем: в Proxy Configuration – параметры

прокси-сервера; в Mail Server Configuration – пара-

метры корпоративного SMTP-сер-вера, необходимого для отправки отчетов;

в Patch Store Location – каталог, в котором будут храниться пат-чи (по умолчанию C:\AdventNet\SecureCentral\PatchQuest\store);

в MS Office Media Location – ката-лог, в котором хранятся установоч-ные файлы MS Office;

в Language Settings – язык по умол-чанию, необходимый при выборе специфических патчей для опера-ционной системы и приложений;

в Vulnerability Database Update Interval – интервал обновления баз уязвимостей и отсылку отче-тов по обновлению;

в Change Password – изменяем па-роль администратора PatchQuest;

в Global Credentials – создаем удос-товерения для быстрого доступа к различным компьютерам;

в User Administration – пользовате-лей, которые могут получить до-ступ к серверу PatchQuest.

Далее следует включить подде-ржку защищенного протокола HTTPS. Для этого в консоли переходим в под-каталог bin, который расположен в месте установки PatchQuest, и на-бираем HTTPSSupport.bat enable лю-бой номер порта (в Windows) в Linux – имя скрипта другое HTTPSSupport.sh. Теперь повторно регистрируемся, ис-пользовав уже https.

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

Page 39: 048 Системный Администратор 11 2006

37№11, ноябрь 2006

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

Agent» и выбрав операционную сис-тему, в которой агент будет устанав-ливаться. Как вариант их можно поп-росту скопировать с каталога C:\AdventNet\SecureCentral\PatchQuest\agent\windows (для Windows) и …agent\unix (для Linux). Установка агентов так-же не вызывает сложности. Вам не-обходимо будет указать параметры для подключения сервера, его имя и номер порта (9000).

Далее необходимо указать ком-пьютеры, на которых за обновления-ми будет следить PatchQuest. Нажи-маем «Add System» и попадаем в окно настройки «Add New System» (рис. 4). В поле «Add System By» можно ввес-ти адрес или имя одного компьюте-ра, указать диапазон адресов, им-портировать список систем из фай-ла и использовать Active Directory. В «Operating System Type» выбираем тип операционной системы. Например, если выбрано Windows, будут добавле-ны только компьютеры, находящиеся под управлением этой OC. Для зане-сения в список всех поддерживаемых PatchQuest систем используйте «All». В поле «Credential for Windows/Linux» вводим параметры для доступа. Здесь можно выбрать созданные в «Global Credentials» удостоверения, либо ввести логин и пароль вручную. Кноп-ка «Diagnose» позволит проверить со-единение с указанной системой. Ког-да все настроено, нажимаем «Add» или

«Add & Scan». Просмотреть список всех систем, можно нажав на «System». Бу-дет доступна информация об имени, системе, IP-адресе, режиме управле-ния (агент или удаленный доступ) и со-стоянии системы, времени последне-го сканирования и версии операцион-ной системы. Для удобства отбора от-дельные компьютеры или патчи могут быть объединены в группы.

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

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

1. Сергеев С. Windows Server Update Servies.//«Системный администратор», № 4, 2005 г. – С. 8-10.

2. Сайт проекта PatchQuest 4 – http://www.securecentral.com/products/patchquest/index.html.

3. Демонстрационная версия PatchQuest – http://demo.patchquest.com.

Рисунок 4. Окно добавления компьютеров

Page 40: 048 Системный Администратор 11 2006

38

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

Человеческая судьба у меня ас-социируется с образом… шкафа для бумаг. У каждого этот вооб-

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

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

Любопытно, что хранит «шкаф судьбы» ведущего популярного проек-та и одноименного сайта OpenNET.ru? Еще бы! Тем более что известно о Мак-симе Чиркове немного. Живет в Тюме-ни, нет 30 лет… Заглянем в вездесу-

щий Интернет? Или все-таки обратим-ся к воображаемому архиву, где толь-ко факты, факты, факты?.. Предла-гаю второе.

СемьяГлавное «отделение» виртуального шкафа Максима Чиркова, конечно, дела семейные. Иначе и быть не мо-жет. Какая бы замечательная работа ни была у человека, как бы он ни лю-бил дело, которому служит, основной вопрос, как мне кажется: не КАК жить, а ЗАЧЕМ, РАДИ ЧЕГО? Семья – глав-ное, потому что это и настоящее, и бу-

Виртуальные радости и открытия Максима Чиркова

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

Page 41: 048 Системный Администратор 11 2006

39№11, ноябрь 2006

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

дущее. Поэтому все свободное время Максим Чирков, естественно, посвя-щает жене и сыну. Чирковы любят ез-дить на природу. Недавно взяли и мах-нули на день в Екатеринбург погулять в местном зоопарке. Удовольствие по-лучили и ребенок, и взрослые.

Как достигается семейная гармо-ния? Вопрос непростой. Посмотрим, что говорят факты. Факт первый: сы-нишке Семену три года, и он уже пе-ренимает у родителей навыки ответст-венного отношения к делу. В компью-терные игры Семен Максимович пока не играет. А вот поработать на маши-не не против. Максим рассказывает: «Еще толком не научившись ходить, сын уже достаточно уверенно мани-пулировал мышкой. Приходилось в та-кие моменты переключаться от рабо-ты к просмотру фотографий или дет-ских сайтов. Но нашелся выход – от-дал сыну свой старый карманный ПК, теперь он просит выдать ему батарей-ки, садится рядом, берет в руки сти-лус и погружается в увлекательное занятие запуска разных приложений на КПК. Ребенок страшно доволен, го-ворит, что папа и мама большие, у них большие компьютеры, а он маленький, и у него маленький компьютер». Чест-но говоря, любого поклонника проек-та OpenNET такой подход немало об-радует. Похоже, сайт станет семейным делом, а значит, ему уготована почти вечная жизнь…

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

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

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

Философия выбораКогда происходит выбор профессии? От чего он зависит? Заглянем на ар-хивную полочку под названием «Дет-ство». В средних классах Максим ув-лекался аквариумистикой, кактусо-водством. Объясняет это тем, что бы-ли хорошие преподаватели, умели ув-лечь своим предметом и хобби. Кто сказал, что скучно содержать рыбок, что чистить аквариум – примитивное занятие? Учитель вывозил своих вос-питанников на природу, читал художес-твенную литературу, рассказывал то,

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

А уж мимо компьютеров школьник, которому скучно зубрить параграфы, просто не мог пройти! «С компьюте-рами столкнулся, – вспоминает Мак-сим, – когда в 1990-м году в школе по-явился первый компьютерный класс УКНЦ. Новое увлечение сразу вскру-жило голову, начал копить на собствен-ный компьютер. С помощью родите-лей удалось купить бытовой компью-тер «Сура ПК 8000», на котором, кро-ме встроенного Бейсика, ничего не бы-ло. А так как Бейсик уже не удовлетво-рял всем потребностям, начался этап программирования в машинных кодах. Приходилось по таблицам составлять программы в шестнадцатеричном ви-де. Из наиболее запомнившихся раз-работок тех лет – система оцифров-ки звука с магнитофона и портирова-ние разных дампов для «Радио РК-86» и «ЮТ-88», которые публиковались в журналах «Радио» и «ЮТ для уме-лых рук». Через год удалось приоб-рести списанный EC 1840, CGA-эк-ран и отсутствие мыши не стало по-мехой…» Школьником Чирков проси-

Семья – главное. Максим Чирков с сыном Семеном

Page 42: 048 Системный Администратор 11 2006

40

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

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

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

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

рез пять лет Максим Юрьевич Чирков получил диплом специалиста по авто-матизированным системам обработки информации и управления.

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

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

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

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

ДелоЯщик, где лежит увесистый, пухлый том с описанием профессиональных достижений, можно озаглавить прос-то: «Открытое программное обес-печение». Это именно то направле-ние в IT, где тяга к открытиям реали-зуется на двести процентов. И опять это странное для скучающих клер-ков чувство радости от трудовых буд-ней: «Миру открытого программного обеспечения свойственен энтузиазм, разработка ради удовольствия, от-ношение к работе как к развлечению. Каждый делает то, что ему нравится и это приносит потрясающие резуль-таты». В эту стихию Максим окунулся не сразу, но «соблазн UNIX», оказыва-ется, витал еще на первых курсах уни-верситета. Когда информация дошла в полном объеме и удалось на прак-тике попробовать открытые проекты, выяснилось – нашел! Теперь на воп-рос, почему он использует програм-мы, распространяемые в исходных тек-стах, Максим Чирков отвечает без ко-лебаний: «Из-за независимости, воз-можности в любой момент, ни на кого не полагаясь, решить возникшую про-блему самостоятельно, найти и устра-нить мешающую работе ошибку, если нужно – дописать необходимую фун-кциональность. Не нужно ждать что-то от разработчиков. Имея необходи-мые инструменты и навыки, можно са-мостоятельно найти решение. При вы-боре продукта, посмотрев код, есть возможность оценить реальное ка-чество программы (типичные ошибки и неграмотный код бросается в гла-за, достаточно беглого просмотра). Люди, не имеющие возможности или знаний для модификации чужого ко-да, часто как достоинство закрытого ПО называют наличие гарантирован-

У Семена – папин карманный ПК

Page 43: 048 Системный Администратор 11 2006

41№11, ноябрь 2006

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

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

Что же касается главного своего проекта, историю его создания Мак-сим рассказывает так: «Решил во что бы то ни стало попробовать Linux пос-ле чтения статьи Владимира Водолазс-кого в одном из номеров журнала «Мо-нитор» за 1994 год. Экспериментиро-вал по мелочам со Slackware 3.0, пока в 1996 году не удалось купить фирмен-ный диск со Slackware 3.1, это был один из первых дистрибутивов, включав-ших в себя Linux ядро 2.0.x, с тех пор с UNIX больше не расставался. В про-цессе изучения подписался на FIDO конференции RU.LINUX и RU.UNIX. На-копилось несколько десятков интерес-ных сообщений-заметок. В букмарках сформировался небольшой набор ин-тересных ссылок. Разместил матери-ал как часть своей домашней страни-цы http://www.tyumen.ru/~mc/linux. По-лучилось три раздела: статьи, ссыл-ки и программы. К лету 1998 го-да проект вырос, обзавелся фору-мом и разделом новостей. Сайт был доступен как http://linux.opennet.ru. www.opennet.ru тогда планировалось сделать порталом с более широкой тематикой, не ограничивающейся компьютерами и UNIX. Осенью 1998 года домен был передан мне в лич-ное пользование и сайт поселился на http://www.opennet.ru». А этой осе-нью проекту исполняется 10 лет.

Сегодня дело, которому служит Максим Чирков, развивается самы-ми стремительными темпами. Сайт www.opennet.ru давно получил извес-тность, как самый богатый по содер-

жанию из числа русскоязычных ре-сурсов, посвященных Linux. К популяр-ности сам Чирков относится спокойно. Вернее не думает о ней. Для него со-здание и поддержка сайта – многолет-ний труд, ежедневная рутина, а попу-лярность предполагает в первую оче-редь ответственность за каждое сло-во, каждый новый шаг. И на лаврах Максим Чирков не спешит почивать. Наоборот, сетует, что конструктивной критики маловато, а ведь именно она позволяет немного по-другому взгля-нуть на привычные вещи. Однако, по-хоже, Максим умеет критиковать се-бя лучше, чем любой посетитель сай-та. Любимое его занятие – доведе-ние до совершенства скриптов… Сайт в постоянном развитии, иногда эта ра-бота даже не видна гостям OpenNET.ru: идет оптимизация подсистем, реализа-ция возможности репликации данных для быстрого переключения на резер-вный сервер при проблемах первично-го, без потери функциональности сай-та. Это, пожалуй, высший пилотаж – как работа опытного дворецкого в ко-ролевском дворце.

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

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

Максим улыбается: «Все самое интересное еще впереди». Кстати, улыбку эту я вижу лишь виртуально, как традиционные символы – двоето-чие и скобочка. Наша беседа о содер-жимом виртуального «шкафа судьбы» тоже виртуальна. Впервые я беру ин-тервью по электронной почте, и, одна-ко, это не мешает мне, надеюсь, и чи-тателям, понять главное в герое это-го очерка. Это основное ценное зна-ние о хозяине популярного сайта хра-нится на дальней полке со скромным названием «Радости». Чему радует-ся ведущий проекта OpenNET? Сам признался: «Тому, что могу поделить-ся накопившейся информацией с дру-гими». Вот причина, по которой Мак-сим, не публичный человек, невольно стал ядром притяжения многих людей. Жизнь вокруг него кипит, а сам Чирков вполне удовлетворен ролью наблюда-теля. Не ищете его биографию в Интер-нете. Сходите на сайт, и вы поймете – здесь весь Максим Чирков. Виртуаль-ная судьба, самая оригинальная в мо-ей журналистской коллекции судеб. Скажете – несерьезно? Однако еще неизвестно, что долговечнее – шкаф, набитый невостребованными бумага-ми, или одна короткая строчка в окош-ке браузера: www.opennet.ru...

Оксана Родионова, фото из семейного архива

Максима Чиркова

OpenNET.ru, одному из первых русско-язычных ресурсов, посвященных откры-тым технологиям, исполняется 10 лет. Редакция журнала «Системный адми-нистратор» поздравляет Максима Чир-кова и всех постоянных посетителей ре-сурса с юбилеем.

Page 44: 048 Системный Администратор 11 2006

42

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

По мере роста и развития инфор-мационных систем количество вариантов обхода систем защи-

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

требований внутренних и норма-тивных документов РФ (ФСТЕК, ФСО, ФСБ, МВД, ЦБ РФ), а также других международных стандартов в области защиты информации.

Целенаправленные действия вы-сококвалифицированных хакеров, неэтичных конкурентов, которые имеют цель получить конкретную информацию или нарушить рабо-чие процессы предприятия и дейс-твуют на основе внутрифирмен-ной информации (например, предо-ставленной действующим или уво-ленным сотрудником компании).

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

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

Действия хакеров-любителей, про-никающих в системы компании или вызывающих сбои в процессе обработки информации.

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

мах защиты, анализа организации, правил и процедур информацион-ной безопасности;

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

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

Методика обнаружения/сканирова-ния доступа корпоративной сети: определение маршрутов доступа

в сеть; запрос DNS; идентификация хостов; сканирование сетевых служб; сканирование на предмет уязви-

мых мест.

Коммерческие программы обеспе-чивают тестирование на предмет сле-дующих уязвимых мест: слабые места в защите Sendmail/

SMTP;

Выявление угроз информационной безопасности внутри компании

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

Page 45: 048 Системный Администратор 11 2006

43№11, ноябрь 2006

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

уязвимость к открытым атакам; недостаточная защита в области TFTP и FTP; уязвимость NetBIOS/SMB; уязвимость RPC-сервиса; уязвимость HTTP/CGI; слабые места сетевых информационных служб (NIS); IP-спуфинг (имитация соединений)/прогнозирование

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

проверка сетей и протоколов на спуфинг, проверка протоколов маршрутизации из источника, rlogin,

rsh и telnet; проверка на спуфинг RIP (маршрутизирующего инфор-

мационного протокола) и ARP (протокола сопоставле-ния адреса);

проверка IP-переадресации (forwarding); всесторонняя проверка DNS; IP-фрагментация, проверка фрагментации и ретранс-

ляции; проверка внутренних адресов; проверка сетевых масок и временных меток (timestamp)

ICMP; проверка инкапсуляции пакета MBONE; проверка инкапсуляции APPLETALK IP, IPX, Х.25, FR; проверки резервированных разрядов и паритет-прото-

колов; определение исходных портов через проверки TCP

и UDP; проверка портовых фильтров TCP и UDP и всесторон-

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

и IP; проверка на передачу сверхнормативных пакетов.

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

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

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

Техники удаленного анализаА теперь рассмотрим несколько техник удаленного ана-лиза (атаки), выполняемых для внутренней диагностики или злоумышленником.

Используемые доступные инструменты: Nmap – http://www.insecure.org/nmap/nmap_download.html. Hping2 – http://www.hping.org/download.html. Legion – http://www.rhino9.com. L0pht crack – http://www.l0pth.com.

Техника 1. Поиск узлов корпоративной сетиПосылка ICMP эхо-пакетов (ping) на каждый IP-адрес и ожи-дание ответа для определения, какой хост в рабочем состо-янии. Но множество хостов отфильтровывают (отбрасыва-ют) запросы и ответы ping. Пример:

Однако существует усовершенствованный способ по-иска узлов корпоративной сети при помощи инструмен-та nmap, использующего нижние уровни IP-протокола. По умолчанию Nmap -sP, Nmap посылает пакет TCP ACK (acknowledgment) на порт 80 параллельно ICMP ping запро-су. Если пакет RST (или ответ ping) возвращается, мы по-лучаем информацию, что хост существует.

В некоторых случаях вам необходимо опробовать ком-пьютер при помощи пакета TCP SYN вместо ACK. Данное действие производится опцией -PS. Эта опция использу-ет SYN (запрос соединения) пакеты вместо пакетов ACK для пользователей root.

Хосты, находящиеся в рабочем состоянии, должны от-ветить пакетом RST (или, реже, SYN|ACK).

Техника 2. Определение доступных и используемых сервисов в корпоративной сетиОткрытые TCP-порты могут быть определены при помощи SYN-сканирования. Это предпочитаемый в общих случа-ях тип TCP-сканирования, также известный как half-open scanning. Запустите Nmap с аргументом -sS, чтобы произ-вести данный метод сканирования.

Не забывайте про UDP-сканирование! (Nmap с опци-ей -sU). Другие типы сканирования: FIN, XMAS и NULL (-sF, -sX, -sN). Больше информации о механике этих видов сканирования можно получить на странице руководства Nmap (http://www.insecure.org/nmap/nmap_manpage.html)

Продвинутый тип сканирования – ACK scan (-sA) для проверки межсетевых экранов/фильтрующих систем. Реализуется посредством сканирования IP-протоколов -sO. Nmap обычно фокусируется на TCP, UDP, и ICMP, но есть множество других протоколов, доступных для продвинутых атак и получения информации.

> ping microsoft.com

PING microsoft.com (207.46.230.219) from 208.184.74.98 : 56(84)bytes of data.

--- microsoft.com ping statistics ---

8 пакетов отправлено, 0 пакетов принято, 100% потери пакетов

Page 46: 048 Системный Администратор 11 2006

44

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

Сканирование протоколов зацикливается на 8-битном поле протокола, посылая массив IP-заголовков без данных. Ошибка «ICMP-протокол недоступен» означает, что целевой объект не принимает пакеты для данного протокола.

К примеру, вот SYN-сканирование:

Эта команда запускает скрытое SYN-сканирование каж-дого компьютера в рабочем состоянии до 255 компьютеров в классе «C», принадлежащих домену target.example.com.

Техника 3. Разведка топологии корпоративной сетиВыполняется трассировка при помощи пакетов типа UDP, исходящий порт соединения 53, а порт назначения 5023 исследуемого хоста gw.target.com. Трассировка позволя-ет получить информацию о структуре корпоративной се-ти, ее активных сетевых узлах (брандмауэры, маршрути-заторы, и т. д.).

Важно определить, какие из операционных систем ис-пользуются на этих узлах.

Nmap (с опцией -O) позволяет определить версию ОС на ос-нове техники TCP/IP-дактилоскопирование (fingerprinting). Так же просто применить простую диагностику для веб-сер-веров, используя терминал telnet для соединения с веб-улом по порту 80.

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

Файл Zonetransfer.out содержит полный список всех внут-ренних зон и узлов.

Техника 4. Поиск общих windows-ресурсов (windows-share)Допустим, злоумышленник уже получил следующие дан-ные о корпоративной сети: В сети присутствуют узлы на основе ОС MS Windows. Диапазон IP-адресов локальной сети: 11.12.13.1-

11.12.13.255.

Используем утилиту Legion 2.1 для сканирования задан-ного диапазона сети, для поиска общих ресурсов Microsoft Windows. Legion сперва определит, какие из доступных уз-лов используют или нет протокол NetBIOS, далее получим результат в виде полного списка доступных ресурсов и воз-можных прав доступа. Возможно, вы будете удивлены, уви-дев в списке ресурсов корневой диск или папки с рабочи-ми документами пользователей. Так злоумышленник мо-жет получить доступ к коммерческой информации предпри-ятия или воспользоваться доступом и установить «заклад-ки» для мониторинга сетевых аккаунтов и паролей.

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

С точки же зрения специалиста по информационной бе-зопасности, их можно разделить на: глубоко эшелонирован-ную защиту (HIDS/NIDS, Firewalls, Antivirus, Honeypots etc) и персональные утилиты анализа безопасности (скане-ры и т. д.).

Список популярных используемых инструментов: Argus – инструмент анализа сетевой активности. Ра-

ботает на уровне IP приложения, получая полную ин-формацию с сетевого интерфейса. Может оповещать об аномальной активности в локальной сети (сканиро-вание) (ftp://ftp.andrew.cmu.edu/pub/argus).

Asax – cканер и анализатор уявимостей для платфор-мы UNIX (ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/asax).

Asmodeous Port Scanner – сетевой сканер для Windows (http://www.webtrends.com/products/wsa).

HPing – утилита диагностики сети использует нижние уровни IP-протокола для получения информации о мар-шрутах сети (http://www.kyuzz.org/antirez/oldhping.html).

Internet Security Scanner (ISS) – сканер уязвимостей на UNIX-платформах, также собирает информацию о NFS-ресурсах (ftp://ftp.iss.net/pub/iss).

NESSUS – утилита основана на открытом исходном ко-де, удобный инструмент утилита для диагностики бе-зопасности различных ОС. Поддерживает многопо-точные модули и графический интерфейс X-windows (http://www.nessus.org).

SAINT – инструмент администратора сетевой безо-пасности. Позволяет работать со множеством сете-вых сервисов NFS, NIS, ftp and tftp, rexd, statd, и другие (http://wwdsilx.wwdsi.com/saint).

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

Никита Дуров, специалист по внедрению программного обеспечения, Департамент внедрения

и консалтинга LETA IT company

# nmap -sS target.example.com/24

# hping2 --traceroute -t 1 -2 --baseport 53 -keep -V ↵ -p 5023 gw.target.com

# nmap -O targethost.com

# telnet target.com 80

>GET /blah HTTP/1.1HTTP/1.1 400 Bad RequestServer: Microsoft-IIS/5.0........

# nslookup

>server 11.12.13.2 (подключаемся к DNS серверу)>set type=any (устанавливает получение всех внутренних зон и узлов)>ls –d target.com. >> ./Zonetransfer.out

Page 47: 048 Системный Администратор 11 2006

45№11, ноябрь 2006

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

ти при защите от внутренних IТ-угроз очень актуален.

Конечно, желательно, чтобы по-литика информационной безопаснос-ти при защите от внутренних IТ-угроз разрабатывалась на основе существу-ющих стандартов информационной бе-зопасности и информационных техно-логий, таких как уже упомянутый СТО БР ИББС – 1.0 – 2006, ISO IEC 27001-2005, COBIT. На мой взгляд, не стоит изобретать велосипед, в то время ког-да уже существуют лучшие практики в области информационной безопас-ности, такие как ISO IEC 17799-2005.

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

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

Анна Верхось

С какими внешними угрозами стал-кивается IT-департамент вашего банка чаще всего?Наиболее распространенные из них – вирусы, спам, попытки несанкциони-рованного доступа к публично доступ-ным сервисам банка. Интернет-атаки составляют порядка 30%. Сканирова-ние портов и попытки несанкциониро-ванного доступа к внешним сервисам – это наши суровые будни.

Кстати, по данным Отчета об уг-розах интернет-безопасности компа-нии Symantec, за первые шесть меся-цев 2006 года сектор финансовых ус-луг оказался вторым по интенсивнос-ти нацеленных на него атак, их доля составила 14% от всех зафиксирован-ных целенаправленных попыток «взло-ма». Сектор финансовых услуг занял девятое место по интенсивности атак на отказ в обслуживании, он чаще все-го подвергался фишингу.

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

В связи с утечками баз конфиденци-альных банковских данных некото-

рые эксперты отмечают, что сейчас гораздо актуальнее решение вопро-сов, связанных с построением за-щиты банков от внутренних IT-уг-роз. Так ли это?Действительно, по данным исследова-ний компании InfoWatch, одного из ли-деров российского рынка програм-мных решений, обеспечивающих за-щиту конфиденциальной информации предприятий и организаций, внутрен-ние IT-угрозы, такие как кража инфор-мации и халатность сотрудников, оста-ются главной опасностью для россий-ских кредитных организаций. На фо-не незначительно-го снижения обще-го индекса обеспо-коенности инфор-мационной безопас-ностью эта угроза превосходит по зна-чимости все осталь-ные. Это также под-тверждается вве-денным в действие в нынешнем году новым стандартом Банка России СТО БР ИББС – 1.0 – 2006 «Обеспечение информационной безопасности организаций банковс-кой системы Российской Федерации» (далее СТО БР ИББС – 1.0 – 2006). Пункт 5.4. раздела 5 гласит: «Наиболь-шими возможностями для нанесения ущерба организации БС РФ обладает ее собственный персонал. В этом слу-чае содержанием деятельности зло-умышленника является нецелевое ис-пользование предоставленного конт-роля над информационными актива-ми, а также сокрытие следов своей деятельности. Внешний злоумышлен-ник скорее да, чем нет, может иметь сообщника(ов) внутри организации». Учитывая вышесказанное, можно сде-лать вывод, что вопрос разработки по-литики информационной безопаснос-

«Внутренние IT-угрозы в банке превосходят по значимости все остальные»

О том, как важно правильно защитить банк от внутренних IТ-угроз, рассказывает председатель совета директоров Банка высоких технологий Игорь Триф.

Основные принципы для разработки по-литики информационной безопасности при защите от внутренних IТ-угроз: принцип двойного управления; принцип минимальной достаточности; принцип самоокупаемости.

Page 48: 048 Системный Администратор 11 2006

46

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

Обычно, когда речь заходит о бе-зопасности, наверняка упоми-нается совет поместить потен-

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

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

ки; исключения были описаны в ста-тье Василия Озерова «Как увели-чить безопасность процессов с помо-щью chroot и jail», №7 за 2006 г.) про-цессу покинуть свой новый корневой каталог, но всё же он не обеспечива-ет полную изоляцию процессов. За-

FreeBSD jail: зона строгого режима

Безопасность FreeBSD всегда была на должном уровне. Но когда в Интернет нужно «выставить» один или несколько сервисов, надеяться приходится уже не только на разработчиков системы.

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

Page 49: 048 Системный Администратор 11 2006

47№11, ноябрь 2006

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

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

Но так уж «исторически сложи-лось», что для повышения безопас-ности всё же чаще используется chroot-окружение, а jail упоминается по большей части как средство вир-туализации. Скорее всего, причина здесь в большей распространённости и универсальности вызова chroot, ко-торый реализован практически во всех UNIX-подобных системах. К тому же появился он намного раньше. Возмож-но, свою роль играет и несколько боль-шая сложность организации jail-среды по сравнению с chroot, так что помимо всего прочего, постараемся в деталях разобраться и во всех тонкостях прак-тического применения jail.

Для начала рассмотрим некоторые теоретические вопросы.

ПонятияВызов jai l значительно расширя-ет функции chroot, ограничивая, по-мимо доступа к файловой системе вне «корня», любые средства, которые могут позволить использовать какие-либо ресурсы за пределами jail. Так, в jail запрещаются: любая модифика-ция текущего ядра (включая загрузку-выгрузку модулей и изменение пара-метров с помощью sysctl), монтирова-ние-демонтирование файловых сис-тем, изменения сетевых настроек, до-ступ к «сырым» сокетам, взаимодейс-твие с процессами, запущенными вне «тюрьмы», любые действия, влияющие на работу всей системы (например, пе-резагрузка). Благодаря этим ограниче-ниям, даже процесс, запущенный в jail с правами суперпользователя, будет существенно ограничен в возможнос-ти нарушить работу операционной сис-темы в целом.

Это приводит к тому, что ряд ути-лит могут не работать в jail. Например, вы не сможете из jail проверить рабо-ту сети с помощью ping, поскольку эта команда использует «сырые» сокеты, которые в jail запрещены.

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

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

Инструментарий«Тюрьма» создаётся с помощью одно-имённой утилиты – jail (см. man 8 jail). В качестве обязательных аргумен-тов ей передаются путь к корневому для «тюрьмы» каталогу, имя хоста и се-тевой адрес, а также команда, которая запустит в jail-окружении первый про-цесс, который будет родительским для всех остальных. Опционально может

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

При инициализации в jail может быть запущен только один процесс. В даль-нейшем он может порождать другие, которые будут дочерними по отноше-нию к нему и унаследуют все ограниче-ния. Нужно иметь в виду, что в jail ника-кие сценарии инициализации или что-то подобное не запустятся без вашего прямого на то указания. Jail – это, по су-ти, «усиленный» в плане безопасности chroot, а не полноценная виртуальная машина. Для создания виртуальной системы в jail следует в качестве име-ни команды, запускаемой в «тюрьме», указывать сценарий /etc/rc (пример бу-дет показан ниже).

Для работы с jail будут полезны так-же утилиты jls (возвращает список за-пущенных в данный момент «тюрем» с их идентификаторами) и jexec (предо-ставляет возможность выполнить ка-кую-либо команду внутри jail из основ-ной системы). Подробности смотрите на соответствующих man-страницах.

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

Рисунок 1. Изолированная виртуальная система

Page 50: 048 Системный Администратор 11 2006

48

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

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

РазборкиПерейдём к практическим вопросам. Подробно разберём три примера: реализация полноценной виртуальной сис-темы, создание изолированной «внешней» среды и запуск в jail одной сетевой службы.

Пример 1. Виртуальная системаДля начала рассмотрим простейший с точки зрения реа-лизации пример – виртуальную машину для тестирования или для предоставления пользователям полнофункцио-нального хостинга с правами root (см. рис. 1). То есть нам нужно, фактически, создать систему в системе.

Порядок действий можно почерпнуть в man jail – со-здаём каталог для будущей jail-системы, собираем в него «мир» и «дистрибутив», монтируем devfs:

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

Для запуска jail, помимо подготовленного каталога, по-надобятся также IP-адрес и имя хоста. IP предварительно нужно задать как псевдоним на одном из интерфейсов ос-новной системы (подойдёт и lo0):

Если не терпится, то уже можно заглянуть в новую сис-тему:

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

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

Продолжим – у нас осталось ещё одно серьёзное дело: нужно обеспечить автоматический запуск jail при загруз-ке. Для этого в /etc/rc.conf основной системы добавим сле-дующие строки:

В параметре jail_list перечисляются все jail-системы, которые должны запускаться автоматически (у нас пока такая система одна). В дальнейшем по схеме «jail_<имя из списка>_<параметр>» задаются параметры для каж-дой «тюрьмы» из списка. Обязательно должны быть указа-ны путь, имя хоста, IP-адрес и выполняемая команда. Пара-метр interface задавать не обязательно, но без него сцена-рий /etc/rc.d/jail выдаёт ошибки о неправильном синтаксисе для ifconfig, хотя на работе это никак не отражается.

Также желательно задать автомонтирование файло-вой системы devfs, чтобы не модифицировать /etc/fstab. Ну и последние две строки в данном случае необязатель-ны, поскольку повторяют значения по умолчанию – это ко-манды, которые должны быть выполнены при старте и ос-танове jail-системы.

Теперь можно запустить jail командой /etc/rc.d/jail start (нужно предупредить, что при разрешённом sshd первый запуск займёт довольно ощутимое время – в jail будут ге-нерироваться необходимые для работы ключи) и попробо-вать подключиться к ней по ssh:

Здесь admin – имя пользователя, которого мы создали в jail. Войдя в «тюрьму», обратите внимание на то, как огра-ничены ваши права – команды ps, top и т. д. будут выдавать информацию только о процессах, исполняющихся в данной «тюрьме», ifconfig разрешает только просмотр, traceroute и ping не работают вообще, ссылаясь на «socket: Operation not permitted».

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

# mkdir -p /var/jails/system# cd /usr/src# make world DESTDIR=/var/jails/system# make distribution DESTDIR=/var/jails/system# mount_devfs devfs /var/jails/system/dev

# make installworld DESTDIR=/var/jails/system

# ifconfig lo0 alias 10.30.0.100 netmask 255.255.255.255

# jail /var/jails/system jail.host 10.30.0.100 /bin/csh

jail# passwd rootjail# adduser

jail# echo "sshd_enable=YES" >> /etc/rc.conf

Username: adminFull name: Administrator of jail. . .пропущено. . .

jail_enable="YES"jail_list="system"

jail_system_rootdir="/var/jails/system"jail_system_hostname="jail.host"jail_system_ip="10.30.0.100"jail_system_interface="lo0"jail_system_devfs_enable="YES"jail_system_exec_start="/bin/sh /etc/rc"jail_system_exec_stop="/bin/sh /etc/rc.shutdown"

$ ssh -l admin 10.30.0.100

Page 51: 048 Системный Администратор 11 2006

49№11, ноябрь 2006

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

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

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

Но есть способ свести дублирова-ние информации к минимуму, кото-рый и рассмотрим на данном приме-ре: пусть у нас есть один физический сервер и требуется реализовать на нём «внешнюю» систему, которая бу-дет предоставлять услуги абонентам, такие как электронная почта, FTP-сер-вер и т. д. (своего рода DMZ, но в пре-делах одного физического сервера), и «внутреннюю», обеспечивающую неко-торыми услугами пользователей ло-кальной сети.

Поскольку локальную сеть мож-но считать менее опасной, чем Интер-нет, то для предоставления «внутрен-них» услуг будем использовать основ-ную систему, в то время как все «вне-шние» службы перенесём в jail-окру-жение (см. рис. 2).

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

Каталог портов /usr/ports можно будет монтировать (но на чтение-за-пись, поскольку это нужно для работы) только на время установки нового ПО. По большому счёту, можно вообще вы-полнять установку из основной систе-мы, указав нужный PREFIX. Разве что некоторые действия придётся доделы-вать вручную (например, регистрацию в jail-системе нужных пользователей, поскольку при такой инсталляции они будут созданы в основной).

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

Рисунок 2. Внешние сервисы вынесены в jail

ции jail-системы могут быть повреж-дены и системные файлы.

Избежать этого позволяет меха-низм монтирования. Если, скажем, в каталог /bin смонтировать файловую систему только для чтения, то из jail повредить её будет нельзя. Вы же пом-ните, что в jail операции монтирования запрещены? А раз так, то и перемон-тировать на чтение-запись эту файло-вую систему не удастся.

Итак, что мы можем смонтировать в jail с опцией ro? Во-первых, систем-ные файлы – каталоги /bin, /sbin, /usr/bin и т. д. Во-вторых, каталог настроек – /etc. Ведь большую часть параметров можно будет установить и из основ-ной системы, где запись можно оста-вить разрешённой. Единственное, ката-лог /etc всё же лучше создать отдельный и монтировать уже его – иначе вы не смо-жете гибко разделять настройки основной и jail-систем. То есть в данном случае ro-монтирование выпол-няется не для эконо-мии дискового про-странства, а исключи-тельно по соображе-ниям безопасности.

Технологии «соседей»: зоны SolarisНачиная с 10-й версии в Solaris существует реализация так называемых зон – техно-логии, очень близкой по своей сущности «тюрьмам» FreeBSD. Зоны позволяют запус-кать в рамках одного ядра несколько изо-лированных экземпляров системы. Так же, как и в jail, процессы различных зон не име-ют возможности влиять друг на друга и даже наблюдать за «чужими» действиями.

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

Работа с зонами реализована гораздо удобнее и последовательнее, чем средс-тва работы с jail, – к услугам администра-тора мощные утилиты zoneadm и zonecfg, позволяющие создавать, инсталлировать, конфигурировать зоны и управлять их ра-

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

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

Внутри неглобальной зоны действуют ограничения, аналогичные ограничени-ям jail, – невозможно просмотреть инфор-мацию о процессах в других зонах, запре-щены загрузка модулей ядра, настройка оборудования и т. д. Правда, «админист-ратор» неглобальной зоны имеет возмож-ность перезагрузить её. Или, скажем, есть возможность внутри зоны использовать «сырые» сокеты для ICMP (для других ти-пов трафика их использование для негло-бальных зон запрещено). Есть, естествен-но, и другие отличия.

Page 52: 048 Системный Администратор 11 2006

50

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

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

Для монтирования «только на чтение», как обычно, ука-зывается опция -o ro.

Помимо nullfs, вы можете использовать и проверен-ный временем способ – NFS. Сетевая файловая систе-ма прекрасно зарекомендовала себя для предоставления ФС на одной машине другим системам, доступным по се-ти. Но ничто не мешает использовать её внутри одной сис-темы. Только не забывайте, что монтировать NFS-катало-ги, как и любые другие, вы должны из основной системы – в jail это запрещено. Есть ещё mount_unionfs, но в FreeBSD этот механизм пока не слишком устойчив и приводит к про-блемам гораздо чаще, чем того хотелось бы.

Итак, вместо сборки «мира» в каталог jail мы ограничим-ся сборкой «дистрибутива» (иерархию каталогов придётся создать вручную; если что забудете, make вам напомнит):

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

При первом запуске каталог etc нужно примонтировать вручную на чтение-запись, чтобы sshd смог сохранить сге-нерированные ключи. Это также может понадобиться и ря-ду других программ, которые сохраняют свои данные непос-редственно в etc – проверьте свои пакеты на этот счёт.

Осталось подмонтировать порты, как показано выше, зайти в jail и установить необходимые программы. После этого каталог ports можно размонтировать – пока не пот-

ребуется установить что-то ещё или обно-вить какой-то пакет, он нам не понадобит-ся. Кстати, если быть последовательным, то можно и /usr/local, по примеру /etc, вы-нести в отдельный ка-талог, а в jail подклю-чать через монтиро-вание. Или даже сде-лать две «тюрьмы» – одну для настроек, не имеющую выхода в Интернет, но с каталогами, монти-руемыми на чтение-запись; и вторую – рабочую, куда мон-тирование тех же каталогов выполняется только на чтение. В общем, нет предела паранойе.

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

Небольшое замечание по работе с файлом паролей. Поскольку в jail каталог etc недоступен для записи, все из-менения нужно будет вносить в /var/jails/_4mount/outers/etc. Для этого удобнее всего использовать команду pw с пара-метром -V, указывающим на альтернативный каталог раз-мещения файлов:

Так мы добавили пользователя me. Если что-то непонятно, изучайте man pw. Нужно сказать, что описан-ный выше приём – это лишь конкретный пример. Очевид-но, что подобным образом придётся учитывать изменённый каталог и для других конфигурационных файлов, например, баз данных sendmail. Возможно, в ряде случаев будет про-ще временно перемонтировать /etc на чтение-запись и вы-полнить необходимые модификации файлов из jail (по сооб-ражениям безопасности сетевую работу из jail на это вре-мя можно полностью заблокировать).

На этом всё, пожалуй, – нам почти ничего не пришлось дублировать, обновления системы будут автоматически распространяться и на jail-систему, и при этом злоумышлен-ник, даже если получит внутри «тюрьмы» права суперполь-зователя, не сможет причинить вред ни основной, ни jail-сис-теме. Даже изменить большинство настроек (например, чтобы обеспечить себе беспрепятственный вход во взло-манную систему по ssh или открыть релей в access-файле Sendmail), и то не сможет.

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

# echo "password" | pw -V /var/jails/_4mount/outers/etc ↵ useradd me -h 0 -g wheel

Рисунок 3. Отдельный сервис в jail

# mount_nullfs /usr/ports /var/jails/outers/usr/ports

# cd /var/jails/outers# find / -type d -maxdepth 1 | sed 's/^\///' | xargs mkdir# find /etc -type d -maxdepth 1 | sed 's/^\///' | ↵ xargs mkdir# find /usr -type d -maxdepth 1 | sed 's/^\///' | ↵ xargs mkdir# find /etc/periodic -type d -maxdepth 1 | ↵ sed 's/^\///' | xargs mkdir# find /var -type d -maxdepth 1 | sed 's/^\///' | ↵ xargs mkdir# find /var/named -type d -maxdepth 3 | sed 's/^\///' | ↵ xargs mkdir# cd /usr/src# make distribution DESTDIR=/var/jails/outers# mv /var/jails/outers/etc /var/jails/_4mount/outers/etc# mkdir /var/jails/outers/etc

# For jail/bin /var/jails/outers/bin nullfs ro 0 0/sbin /var/jails/outers/sbin nullfs ro 0 0/lib /var/jails/outers/lib nullfs ro 0 0/libexec /var/jails/outers/libexec nullfs ro 0 0/usr/bin /var/jails/outers/usr/bin nullfs ro 0 0/usr/sbin /var/jails/outers/usr/sbin nullfs ro 0 0/usr/lib /var/jails/outers/usr/lib nullfs ro 0 0/usr/libexec /var/jails/outers/usr/libexec nullfs ro 0 0/usr/libdata /var/jails/outers/usr/libdata nullfs ro 0 0/usr/include /var/jails/outers/usr/include nullfs ro 0 0/usr/share /var/jails/outers/usr/share nullfs ro 0 0/var/jails/_4mount/outers/etc /var/jails/outers/etc ↵ nullfs ro 0 0

Page 53: 048 Системный Администратор 11 2006

51№11, ноябрь 2006

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

ботающих процессах (например, неаккуратно разрабо-танный сценарий, исполняющийся в среде FastCGI, мо-жет привести к утечке памяти) либо в случае сознатель-ных действий взломщика. Лимиты, как известно, зада-ются в файле /etc/login.conf (в нашем случае это будет /var/jails/_4mount/outers/etc/login.conf) с последующим под-ключением «класса» в учётной записи пользователя. На-пример, можно использовать такие ограничения:

Теперь, поскольку значения, определённые в default, бу-дут распространяться на всех пользователей с пустым 5 по-лем в master.passwd (а мы его пустым и оставим), то все пользователи в jail, даже суперпользователь, будут огра-ничены в возможности потреблять ресурсы системы.

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

Пример 3. Запускаем ftp-серверДля таких служб, как Sendmail, проще создать в jail полно-ценную систему – слишком уж много у неё зависимостей и взаимосвязанных сервисов, таких как POP3-или IMAP-сер-веры, антивирусные и антиспамовые фильтры, и т. д. Од-нако в некоторых случаях это может оказаться избыточ-ным (см. рис. 3).

Например, вы хотите протестировать FTP-сервер wu-ftpd, но не уверены в его благонадёжности. Чтобы не подвергать риску всю систему, запустим его в jail-окружении.

На этот раз нам не понадобятся ни «мир», ни «дистри-бутив». Просто создаём каталог и выполняем в него инс-талляцию из портов:

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

Также понадобится вручную создать некоторые рабо-чие каталоги, например, для размещения log-файлов (ес-ли вы недостаточно хорошо знакомы с запускаемым сер-висом, то, что именно создавать, можно будет узнать ме-тодом «научного тыка»: обычно при неудачной попытке за-пуска jail причины ошибок можно увидеть либо прямо в кон-соли, либо в /var/log/messages; запускаемый демон может также «ругаться» в лог-файл внутри jail):

Переименуем конфигурационные файлы и при необхо-димости подредактируем:

Ещё нам понадобится файл паролей, поскольку wu-ftpd использует его для работы (для анонимного доступа нуж-но также завести пользователя ftp, в качестве пароля мож-но поставить «*» так же, как и пользователю root, – они всё равно не используются, а «светить» их хэши лишний раз не стоит):

Последней командой мы как раз-таки и вносим в master.passwd необходимых пользователей. Рабочие хэш-базы при выходе из редактора будут созданы автоматичес-ки, не забудьте только указать текущий каталог директи-вой -d, чтобы не попортить файл паролей основной системы. Приготовления на этом можно считать завершёнными.

Однако попытка запустить jail выявляет ещё одну не-доработку:

Исправляемся:

Запускаем вручную и проверяем:

default:\ :cputime=1h:\ :memoryuse=50M:\ ... пропущено ... :maxproc=35:\ :coredumpsize=0:

root:\ :tc=default:

# mkdir -p /var/jails/wuftpd# cd /usr/ports/ftp/wuftpd# make PREFIX=/var/jails/wuftpd/ install

# ldd /var/jails/wuftpd/libexec/ftpd

# cp /lib/libcrypt.so.3 /var/jails/wuftpd/lib/# cp /lib/libmd.so.3 /var/jails/wuftpd/lib# cp /lib/libc.so.6 /var/jails/wuftpd/lib

/var/jails/wu-ftpd/libexec/ftpd: libcrypt.so.3 => /lib/libcrypt.so.3 (0x28095000) libopie.so.4 => /usr/lib/libopie.so.4 (0x280ad000) libmd.so.3 => /lib/libmd.so.3 (0x280b6000) libc.so.6 => /lib/libc.so.6 (0x280c4000)

# mkdir -p /var/jails/wuftpd/var/log/# mkdir -p /var/jails/wuftpd/var/run/

# cd /var/jails/wuftpd/etc# cp ftpaccess.example ftpaccess# cp ftpgroups.example ftpgroups# cp ftpusers.example ftpusers# cp ftpconversions.example ftpconversions

# head -3 /etc/master.passwd > master.passwd# vipw -d

# jail /var/jails/wuftpd wuftpd 10.30.0.121 /libexec/ftpd -S

ELF interpreter /libexec/ld-elf.so.1 not foundAbort trap: 6

# cp /libexec/ld-elf.so.1 /var/jails/wuftpd/libexec/

# jail /var/jails/wuftpd wuftpd 10.30.0.121 /libexec/ftpd -S# jls

# killall -j 24

JID IP Address Hostname Path24 10.30.0.121 wuftpd /var/jails/wuftpd

# sockstat | grep 10.30.0.121

root ftpd 8030 0 tcp4 10.30.0.121 *:*

# ps ax | grep J

8030 ?? IsJ 0:00,01 ftpd: accepting connections on port 2 (ftpd)8156 p0 R+ 0:00,01 grep J

# mkdir -p /var/jails/wuftpd/usr/lib# cp /usr/lib/libopie.so.4 /var/jails/wuftpd/usr/lib

Page 54: 048 Системный Администратор 11 2006

52

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

Последняя команда демонстриру-ет, как можно остановить jail-систему, запущенную вручную, – идентифика-тор возвращается утилитой jls (в на-шем примере он равен 24).

Далее – уже знакомые вам про-цедуры: создаём псевдоним для ин-терфейса, задав IP-адрес, вносим не-сколько строк в /etc/rc.conf и запуска-ем jail. Готово, можно рассылать своим друзьям-хакерам IP-адрес с просьбой взломать этот сервер.

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

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

1. Алексей Закиров. Использование jail для предоставления shell-досту-па – http://www.opennet.ru/base/sec/freebsd_jail_setup.txt.html.

2. Запуск Apache в jail-окружении под FreeBSD – http://www.inode.ru/articles/network/2006-02-09/294.

3. Установка и настройка клеток (jail) на FreeBSD6.1 – http://www.lissyara.ru/?id=1197.

4. Using a jail as a virtual machine – http://www.freebsddiary.org/jail.php.

5. Mike DeGraw-Bertsch. FreeBSD Jails – http://www.onlamp.com/lpt/a/4139.

6. Poul-Henning Kamp. Building Systems to be Shared Securely – http://www.acmqueue.org/modules.phpname=Content&pa=printer_friendly&pid=170&page=1.

7. База данных login-классов login.conf – http://pascal.tsu.ru/unix/users/class.html.

Технологии «соседей»: VServer и Virtuozzo/OpenVZОперационная система Linux тоже гото-ва порадовать своих пользователей воз-можностью строить изолированные сре-ды запуска процессов. Наиболее распро-странённые из них – VServer и Virtuozzo, поставляемые в виде патчей к ядру и на-бора утилит.

VServer, достаточно близкий по сво-ей концепции к jail в FreeBSD, подробно был описан в статье Дмитрия Столярова «Linux-VServer: настраиваем виртуальные серверы» (октябрь 2006 года).

Технология Virtuozzo, разработанная компанией SWSoft, также позволяет запус-кать на одном физическом сервере до не-скольких сотен изолированных виртуаль-ных сред (Virtual Environment, VE) под уп-равлением одного ядра. Virtuozzo распро-страняется под проприетарной лицензией. Однако доступна также открытая система OpenVZ, являющаяся базой для Virtuozzo. По заявлениям разработчиков, накладные расходы на создание виртуальных сред не превышают 1-3%, что делает подобные технологии заметно эффективнее для ряда задач, чем виртуальные машины.

Page 55: 048 Системный Администратор 11 2006

53№11, ноябрь 2006

полезные советы

Используйте брандмауэр и TCP wrappersДля большей защиты необходимо закрыть доступ к портам 9101, 9102, 9103 межсетевым экраном, разрешив соедине-ние только с определенных адресов или сетей.

При этом следует учитывать следующую схему работы демонов (при настройках по умолчанию): Консоль ожидает подключения Центра управления

на 9101-порту. Центр управления ожидает подключения Storage

на 9103-порту. Центр управления ожидает подключения Службы фай-

лов на 9102-порту. Служба файлов ожидает подключения Storage

на 9103-порту.

То есть в общем случае правило iptables для сети -s 192.168.0.0/24 выглядит так.

Для сервера:

И для клиента:

Использование файлов /etc/hosts.allow или /etc/hosts.deny, также положительно скажется на безопасности. Для это-го при конфигурировании Bacula необходимо задать оп-цию --with-tcp-wrappers. В качестве имени в записываемых правилах следует использовать имена, записанные в фай-лах конфигурации в параметре Name, не имя процесса де-мона. Например, если в секции Name стоят названия main-fd, main-sd и main-dir, записи в этом файле могут быть такими:

После чего проверьте правильность записей с помощью утилит tcpdchk и tcpdmatch:

Кстати, параметры signature и verify могут заменить ути-литы вроде tripwire.

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

Настройка безопасной передачи данных TLSПо умолчанию при аутентификации Службы файлов (File Daemon), Центра управления (Director) и консоли (Bacula Console) используется пара логин и пароль. Пароль по се-ти передается в зашифрованном CRAM-MD5 виде, кото-рый не обеспечивает достаточной защищенности, так как уязвим к plaintext-атаке. Данные по сети передаются в от-крытом виде, что позволяет их перехватить. Между тем, начиная с версии 1.37 в Bacula интегрирована поддержка TLS, что позволяет использовать этот криптографичес-кий протокол для обеспечения безопасной аутентифика-ции и передачи информации в сети. Для этого необходимо выполнить всего несколько действий. Для начала необхо-димо собрать Bacula, задав при конфигурировании опцию --enable-openssl.

После установки генерируем сертификаты:

Рекомендуется подписать свой сертификат в организа-циях вроде http://cacert.org.

Разделяем ключ и сертификат, убираем пароль с ключа:

И добавляем в конфигурационные файлы всех компо-нентов Bacula следующее:

Использование этого параметра позволит проверять все клиентские сертификаты на соответствие CN (Common Name, обычно это адрес электронной почты или веб-сай-та организации). Все возможные CN прописываются в ди-рективе TLS Allowed CN, которая может быть использова-на несколько раз, в этом случае будут проверены все ва-рианты.

Следующей директивой указываем полный путь и имя файла TLS CA-сертификата. Допускается наличие несколь-ких сертификатов в одном файле. Как вариант можно ис-пользовать директиву TLS CA Certificate Dir, указывающую на каталог, в котором находятся СА-сертификаты, которые использовались при подписании. Имена файлов сертифи-катов и ключей должны иметь pem-формат.

Проще всего для создания ключей и сертификатов ис-пользовать скрипт CA.pl, прописав все необходимые пара-метры в файл openssl.cnf.

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

Другим вариантом защиты является создание защищен-ного соединения с использованием stunnel или ssh-туннеля. При создании последнего вам поможет скрипт ssh-tunnel.sh лежащий в каталоге examples.

$ mkdir /etc/ssl/bacula$ cd /etc/ssl/bacula# openssl req -new -x509 -config /opt/ssl/openssl.cnf ↵ -keyout bacula.pem -out bacula.pem -days 365

# /opt/bin/openssl rsa -in bacula.pem ↵ -out bacula_server.key# /opt/bin/openssl x509 -in bacula.pem ↵ -out bacula_server.crt

TLS Enable = yes # включение TLS TLS Require = yes # включение проверки сертификата клиента # (используется только на сервере)TLS Verify Peer = yes

TLS Allowed CN = "[email protected]"TLS Allowed CN = "[email protected]"

TLS Certificate = /etc/ssl/bacula/bacula_server.crtTLS Key = /etc/ssl/bacula/bacula_server.key

TLS CA Certificate File = /etc/ssl/bacula/bacula_server.crt

-A INPUT -p tcp --dport 9101:9103 -s 192.168.0.0/24 -j ACCEPT

-A INPUT -p tcp --dport 9102 –s 192.168.0.0/24 -j ACCEPT

$ tcpdmatch main-fd example.com

warning: main-fd : no such process name in /etc/inetd.confclient: hostname example.comclient: address 192.168.1.58server: process main-fd matched: /etc/hosts.allow line 11option: allowaccess: granted

main-fd : example.com : allowmain-sd : example.com : allowmain-dir : example.com : allowmain-fd : ALL : denymain-sd : ALL : denymain-dir : ALL : deny

Page 56: 048 Системный Администратор 11 2006

54

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

Интенсивность атак на пере-полняющиеся буферы, достиг-нув своего пика в первых го-

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

3 сентября 2006 года хакер Johnny Cache описал принципиально но-вую атаку на драйверы устройств беспроводной связи Intel Centrino PRO, открывающую очередную стра-ницу в книге переполняющихся бу-феров: http://lists.immunitysec.com/pipermail/dailydave/2006-September/003459.html.

Вслед за этим, буквально месяц спустя, 11 октября 2006 года David Maynor из SecureWorks, Inc. и незави-симый исследователь Jon Ellch опубли-

ковали сообщение о дыре в драйвере TOSRFBD.SYS, разработанном фир-мой Toshiba для своих Bluetooth-уст-ройств, используемых многими про-изводителями оборудования, в числе которых оказались ASUS, Dell, Sony и другие бренды.

Обе атаки основаны на ошибках синхронизации потоков (race condition). Такие ошибки часто встречаются в драйверах, обрабатывающих асинх-ронные запросы от сетевых устройств и охватывающие широкий спектр обо-рудования, простилающийся от инфра-красных адаптеров до DSL-модемов. Как известно, программы, работаю-щие с большим количеством соеди-нений (например, клиенты файло-об-менных сетей), способны обрушивать систему в BSOD с посмертным сооб-щением IRQL_NOT_LESS_OR_EQUAL. Это – следствие «удара по памяти», возникающего из-за разрушения базо-вых структур данных в небрежно напи-санном драйвере сетевого устройства, страдающего ошибками синхрониза-ции. Прикладные программы лишь со-здают условия наиболее «благоприят-

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

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

Johnny Сache стал первым хаке-ром, вызывавшим направленный удар по памяти, в результате которого ему удалось воздействовать на регистр EIP с передачей управления на shell-код, исполняющийся в режиме ядра, то есть на наивысшем уровне привилегий. За ним начали подтягиваться и ос-

Ошибки синхронизации открывают большие возможности для хакеров. Каковы механизмы защиты?

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

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

Page 57: 048 Системный Администратор 11 2006

55№11, ноябрь 2006

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

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

Реализация направленного удара по памятиМеханизмы обработки асинхронных событий драйверами подробно опи-саны в статье «Многоядерные про-цессоры и проблемы, ими порождае-мые, в ОС семейства NT» [1], из кото-рой следует, что при работе с разде-ляемыми данными программист дол-жен соблюдать особую осторожность и тщательно следить за синхрониза-цией. Сборка пакетов из фреймов как раз и представляет собой пример работы с разделяемыми данными, од-нако про синхронизацию программис-ты традиционно забывают (или реа-лизуют ее неправильно). В результа-те этого возникает угроза разруше-ния данных – если обработка одно-го фрейма прерывается в «неудоб-ном» месте, – разделяемые структу-ры данных оказываются недостро-енными, а поведение драйвера ста-новится непредсказуемым. Вероят-ность такого события увеличивает-ся на многопроцессорных машинах (под многопроцессорными системами здесь и далее мы понимаем не толь-ко истинную многопроцессорность, но также многоядерные и HT ЦП), поскольку на них процедура сборки фреймов может одновременно выпол-няться более, чем на одном процес-соре, при этом все «копии» процеду-ры сборки обращаются к одним и тем же разделяемым переменным, кото-рые, очевидно, должны быть защище-ны теми или иными средствами синх-ронизации, гарантирующими, что по-ка первая копия процедуры не закон-чит свою работу, все остальные вы-нуждены стоять в очереди и терпели-во ждать (либо же работать исключи-тельно со своими собственными ло-кальными переменными).

На однопроцессорных машинах си-туация одновременного выполнения нескольких «копий» процедуры сбор-ки невозможна, однако, если фреймы поступают быстрее, чем успевают об-рабатываться, процедура сборки па-кетов будет неизбежно прерывать-ся в произвольных местах, посколь-ку обработчик прерываний от карты (модема) имеет более высокий при-оритет. Рано или поздно прерыва-ние произойдет в таком месте, когда часть разделяемых структур данных окажется недостроенной. В большинс-тве случаев в недостроенных струк-турах находится «мусор», среди кото-рого встречаются и поля, ответствен-ные за размер пакета, и указатели/индексы на другие данные. Очевидно, что попытка обращения по «мусорно-му» указателю (в том числе и указате-лю, вычисленному на основе «мусор-ного» индекса) с высокой степенью ве-роятности приводит к ошибке доступа. В драйверах уровня ядра она обыч-но заканчивается голубым экраном смерти, сопровождаемым сообщением IRQL_NOT_LESS_OR_EQUAL. Так про-исходит потому, что на том уровне IRQL, на котором работают отложен-ные процедуры и обработчики пре-рываний, подкачка страниц не ра-ботает и при обращении к страни-це, отсутствующей в памяти, опера-ционная система генерирует ошибку IRQL_NOT_LESS_OR_EQUAL, что час-

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

Для реализации DoS-атаки обыч-но достаточно утилиты наподобие ping, генерирующей большое коли-чество пакетов и позволяющей варь-ировать промежутки времени между посылками. Атака носит вероятност-ный характер, и, чтобы добиться про-явления ошибки синхронизации, не-обходимо послать достаточно боль-шое количество пакетов через опре-деленные промежутки времени, обус-ловленные конструктивными особен-ностями драйвера и «железки», кото-рой он управляет. На некоторых про-межутках ошибка синхронизации мо-жет вообще не проявляться, а на неко-торых – возникать после нескольких пакетов (ну, «нескольких» – это в иде-але). Можно посылать как UDP, так и ICMP-пакеты, направленные как на от-крытый, так и на закрытый порт. Также подходят и TCP-пакеты без установки сессии (пакет с флагом ASK, направ-ленный на закрытый порт), но в этом случае потребуется «ручное» констру-ирование пакетов с использованием «сырых» (raw) сокетов.

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

Рисунок 1. Toshiba выпускает заплатки для драйверов своих Bluetooth-устройств

Page 58: 048 Системный Администратор 11 2006

56

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

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

Через непродолжительное время после начала атаки операционная сис-тема (которой в данном случае явля-лась Windows XP) выбрасывает «голу-бой экран» и сохраняет дамп памяти в файл memory.dmp.

Д л я е г о а н а л и з а н е о бхо д и -мо иметь отладчик Microsoft Kernel Debugger, входящий как в распро-страняемый по подписке DDK, так и в доступный для бесплатного скачи-вания Microsoft Debugging Tools: http://www.microsof t.com/whdc /devtools /debugging/default.mspx.

Загрузка дампа в отладчик в об-щем случае осуществляется так:

Здесь: i386kd – имя исполняемого файла

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

C:\WINNT\memory.dmp – путь к файлу памяти, по умолчанию со-здаваемом в системном каталоге Windows.

SRV*D:\sym*http://msdl.microsoft.com/download/symbols – путь к ка-талогу, в котором хранятся файлы с символьной информацией (в дан-ном случае – D:\sym) и адрес серве-ра Microsoft, откуда отладчик будет автоматически скачивать эти сим-волы при необходимости. Символь-ные файлы занимают значитель-ный объем, и на медленных кана-лах их загрузка может занять зна-чительное время. По умолчанию загружаются только символы яд-ра, после чего отладчик высвечи-вает приглашение и мерцающий курсор.

Если теперь дать команду «u eip» (дизассемблирование по адресу EIP), то отладчик покажет отнюдь не ис-тинное место сбоя, а процедуру об-работки ошибки (в данном случае, KiTrap0E+0x233), которая не несет ни-какой полезной информации:

Листинг 1. Командная строка для загрузки дампа в отладчик

i386kd -z C:\WINNT\memory.dmp ↵ y SRV*D:\sym* ↵ http://msdl.microsoft.com/ ↵ download/symbols

Рисунок 3. Анализ дампа памяти в отладчике Microsoft WinDbg

Рисунок 2. Для анализа причин аварии необходим полный дамп памяти

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

Перед началом экспериментов не-обходимо настроить систему на сохра-нение полного дампа памяти в случае аварии («Панель управления → Сис-тема → Дополнительно → Загрузка и восстановление → Запись отладоч-ной информации → Полный дамп па-мяти) или установить отладчик soft-ice, перехватывающий «голубые экра-ны смерти». В случае возникновения ошибки это поможет понять, что же, собственно, произошло и какие пер-спективы в плане выполнения shell-кода оно дает. Главное – не забывать, что ошибки синхронизации носят ве-роятностный характер, и потому об-рушения могут происходить в раз-личных местах, одни из которых до-пускают передачу на shell-код, а дру-гие – нет.

В качестве иллюстрации мож-но привести пару дампов памяти, полученных Johnny Cache: ht tp://www.802.11mercenary.net/~johnycsh/prone_to_deletion/dd/crash2.zip и http://www.802.11mercenary.net/~johnycsh/prone_to_deletion/dd/crash3.zip. Объек-том атаки выступил драйвер беспро-водного устройства Intel Centrino PRO, которому посылались UDP-пакеты раз-мером в 1400 байт, заполненных CCh-байтами, и посылаемые на 2048-порт (прослушиваемый утилитой netcat) с интервалом в 400 микросекунд.

Page 59: 048 Системный Администратор 11 2006

57№11, ноябрь 2006

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

Определить значение регистра EIP в момент сбоя поз-воляет команда «!analyze -v», результат работы которой приведен ниже:

О чем это говорит? Во-первых, мы видим, что ошибка произошла на уровне IRQL, равном 2, что соответствует DISPATCH_LEVEL, на котором выполняются отложенные процедуры. Если бы сбой происходил в обработчике пре-рывания, то уровень IRQL был бы выше, но в большинстве случаев обработчик прерывания не выполняет реальной об-работки данных, а поручает это отло-женным процедурам, которые вынуж-дены работать с разделяемыми данны-ми и которые могут одновременно вы-полняться на нескольких процессорах (как физических, так и виртуальных). Именно в отложенных процедурах со-средоточено наибольшее количество ошибок синхронизации. В результа-те одной из таких ошибок драйвер и пытается прочесть ячейку 6E3C2081h, находящуюся в странице памяти, вы-тесненной на диск (как уже говори-лось, на уровне DISPATCH_LEVEL под-качка не работает). В момент сбоя ре-гистр EIP равен F7433678h и указывает на машинную команду «mov dl, [ecx]», где ecx == 6E3C2081h, принадле-жащую драйверу ( IMAGE_NAME) w22n51.sys, щелкнув на свойства ко-торого можно узнать, что это и есть тот самый дырявый драйвер, разра-ботанный Intel.

Остается только выяснить как попадает в регистр ECX неправильный указатель и можно ли на него повлиять. Да-ем команду «u f7433678-10», чтобы дизассемблировать за 10h байт до места сбоя и смотрим:

Мы видим, что содержимое ECX загружается из ло-кальной переменной [EBP-0Ch]. Вне зависимости от то-го, как оно туда попадает, драйвер копирует один байт из [EBP-0Ch] в [EBP16h]. Обе переменных находятся в сте-ке, что уже хорошо (атаки на стек хорошо известны и давно отработаны). Допустим, нам удалось засунуть в [EBP-0Ch] указатель на определенную ячейку памяти, тогда, если мы сможем подменить [EBP-16h], данная конструкция бу-дет действовать как оператор POKE языка Бейсик, запи-сывающая произвольный байт по произвольному адре-су, конечно, при условии, что он лежит в невытесненной на диск странице памяти, доступной на запись, например, стеке ядра, в котором хранится адрес возврата из функ-ции. К сожалению, модификации одного-единственного байта для передачи управления на shell-код (размещен-ный здесь же, в стеке, в котором происходит сборка паке-тов) явно недостаточно, но не будем отчаиваться! Ведь ата-ка, как мы помним, носит вероятностный характер, и сбои

Листинг 2. В загруженном дампе памяти регистр EIP указывает не на место сбоя, а на адрес, лежащий внутри обработчика исключения

kd> u eip

nt!KiTrap0E+0x233:804e187f f7457000000200 test dword ptr [ebp+0x70],0x20000804e1886 740d jz nt!KiTrap0E+0x249 (804e1895)

Листинг 3. Анализ дампа памяти, вызвавшего BSOD, но не оказавшего воздействия на регистр EIP

kd> !analyze -v

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)Arguments:Arg1: 6e3c2081, memory referencedArg2: 00000002, IRQLArg3: 00000000, value 0 = read operation, 1 = write operationArg4: f7433678, address which referenced memory

Debugging Details:------------------READ_ADDRESS: 6e3c2081CURRENT_IRQL: 2

FAULTING_IP:w22n51+24678f7433678 8a11 mov dl,[ecx] ds:0023:6e3c2081=??

STACK_TEXT:8054e9e0 65537365 2f3c746e 656d616e 200a0d3e w22n51+0x246787479426c 00000000 00000000 00000000 00000000 0x65537365

IMAGE_NAME: w22n51.sys

Листинг 4. Окрестности команды, вызывавшей «голубой экран смерти» из-за ошибки синхронизации

kd>u f7433678-10

f7433668 0fb745f0 movzx eax,word ptr [ebp-0x10]f743366c 83f801 cmp eax,0x1f743366f 0f8e25240000 jle w22n51+0x26a9a (f7435a9a)f7433675 8b4df4 mov ecx,[ebp-0xc]; здесь произошел сбойf7433678 8a11 mov dl,[ecx]f743367a 8855ea mov [ebp-0x16],dlf743367d 8b45f4 mov eax,[ebp-0xc]f7433680 8a4801 mov cl,[eax+0x1]f7433683 884dff mov [ebp-0x1],clf7433686 8b55f4 mov edx,[ebp-0xc]f7433689 83c202 add edx,0x2

Рисунок 4. Анализ дампа памяти в отладчике Microsoft i386kd

Page 60: 048 Системный Администратор 11 2006

58

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

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

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

Уровень IRQL осталось прежним (DISPATCH_LEVEL), а вот значение регистра EIP изменилось драматически и вылетело далеко за пределы драйвера, попав в страни-цу с адресом CCCCCCCFh, каким-то чудом оказавшуюся в памяти и вызвавшую исключение по записи в инструкции «ADD [ESI+0XD6FF103B],EDX». Адрес CCCCCCCFh порази-тельно похож на «начинку» атакующих пакетов, но если это так, откуда тогда взялось число CFh? Ведь исходя из самых общих рассуждений, исключение должно было возникнуть по адресу CCCCCCCCh!

Но, как говорится, если факты не совпадают с теорией, тем хуже для фактов. С какой это стати исключение долж-но возникать по адресу CCCCCCCCh? Это было бы так, ес-ли бы страница оказалась вытесненной на диск, но по во-ле случая она очутилась в оперативной памяти. Выполне-ние команд началось с адреса CCCCCCCCh и продолжи-лось вплоть до инструкции, вызывавшей исключение, ко-торой и оказалась команда «add [esi+0xd6ff103b], edx», об-ратившаяся к ячейке 5C01ABF7h, отсутствующей в опера-тивной памяти. Если бы не она, выполнение продолжалось бы и дальше!

Как это можно доказать? Хм, имея один лишь дамп па-мяти на руках, ничего доказать уже нельзя, но! Если наши рассуждения верны (а они верны), то команды, находящи-еся между адресами CCCCCCCCh и CCCCCCCFh, должны выполняться без исключений, что легко подтвердить путем дизассемблирования.

«Скармливаем» отладчику команду «u CCCCCCCC» и получаем следующий результат:

Непосредственно по адресу CCCCCCCCh распола-гается неизвестная отладчику i386kd недокументиро-ванная команда SETALC (Set AL to Carry Flag), с маши-ным кодом D6h (но, например, тот же HIEW ее прекрас-но понимает), а следом за ней – XCHG AH,AL. Обе коман-ды не обращаются к оперативной памяти и при любом раскладе выполняются без исключений. А вот команда «ADD [ESI+0xD6FF103B], EDX», расположенная по адресу CCCCCCCFh, обращается к ячейке памяти, определяемой регистром ESI, который в данном случае оказался равен 7AFD6444h, в результате чего произошла попытка записи двойного слова по адресу 5C01ABF7h, расположенному (опять-таки волею случая) в вытесненной странице памя-ти, следствием чего стало исключение, которое и вызвало голубой экран смерти.

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

Остается только выяснить, какое именно двойное слово попадет в регистр EIP при удачной атаке. Это сложно опре-делить путем анализа дампа памяти, так что лучше действо-вать экспериментально, заполняя разные части пакета раз-личными байтами. Легко показать, что, действуя методом «вилки», мы найдем нужное значение менее чем за 30 по-пыток. Однако следует помнить, что в силу вероятностно-го характера атаки в регистр EIP могут попадать различ-ные двойные слова, в результате чего количество необхо-димых попыток возрастет в несколько раз, но все равно ос-танется сравнительно небольшим.

Механизмы защиты от синхро-атакВ Windows Vista компания Microsoft реализовала множес-тво защитных механизмов, главным образом нацеленных на переполняющиеся буферы, но также затрудняющих и другие типы атак. Представляет интерес выяснить, как обстоит дело с атаками, основанными на ошибках синх-ронизации.

Все сказанное ниже относится к Windows Vista RC1 – самой свежей версии на момент написания этих строк. Ко-нечно, с выходом финальной версии (и многочисленных за-платок к ней) многие аспекты наверняка изменятся (в сто-рону усиления защиты), однако никому не дано предуга-дать, какой путь выберет Microsoft, поэтому будем изучать то, что дают (в смысле, что она раздает).

Самой значительной инновацией стала возможность переноса части драйверов с нулевого кольца на приклад-ной уровень. Новая драйверная модель, названная «User

Листинг 5. Анализ дампа памяти, оказавшего воздействие на регистр EIP

kd> !analyze -v

DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1)Arguments:Arg1: 5c01abf7, memory referencedArg2: 00000002, IRQLArg3: 00000001, value 0 = read operation, 1 = write operationArg4: cccccccf, address which referenced memory

Debugging Details:------------------WRITE_ADDRESS: 5c01abf7 CURRENT_IRQL: 2FAULTING_IP:+ffffffffcccccccfcccccccf 01963b10ffd6 add [esi+0xd6ff103b],edx

LAST_CONTROL_TRANSFER: from ff103b96 to cccccccf

STACK_TEXT:cccccccc ff103b96 01c486d6 00000000 00000000 0xcccccccf01c486d6 00000000 00000000 00000000 00000000 0xff103b96

Листинг 6. Дизассемблерный листинг окрестностей места сбоя

kb>u cccccccc

cccccccc d6 ??? ; setalc Set AL to Carry Flagcccccccd 86c4 xchg ah,alcccccccf 01963b10ffd6 add [esi+0xd6ff103b],edxccccccd5 86c4 xchg ah,alccccccd7 0100 add [eax],eaxccccccd9 0000 add [eax],alccccccdb 0000 add [eax],alccccccdd 0000 add [eax],al

Page 61: 048 Системный Администратор 11 2006

59№11, ноябрь 2006

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

Mode Driver Framework» и являющая-ся частью общей архитектуры драйве-ров «Windows Driver Foundation» впер-вые за всю историю существования Windows, наконец-то предоставила на-бор API-функций, позволяющих управ-лять USB и Firewire-устройствами не-посредственно с прикладного уровня. То же самое относится и к драйверам-фильтрам.

Для обеспечения обратной совмес-тимости User Mode Driver Framework также доступен и для Windows XP, что позволяет разработчикам писать драйверы, работающие в обеих опе-рационных системах. Весь вопрос в том, какой процент из них этим вос-пользуется и как скоро начнется мас-совая миграция драйверов на при-кладной уровень. Системные про-граммисты крайне настороженно от-носятся к любым инновациям и не ста-нут переписывать уже написанный код до тех пор, пока не почувствуют явной выгоды. Поскольку безопас-ность драйвера не является основ-ной потребительской характеристи-кой, есть все основания предполагать, что в ближайшие несколько лет ника-ких радикальных изменений не про-изойдет.

А вот драйверы для новых уст-ройств, по-видимому, будут писать с использованием User Mode Driver Framework уже хотя бы потому, что это значительно упрощает их отладку. И что тогда? Ошибки синхрониза-ции как были, так и останутся, толь-ко вместо нулевого кольца злоумыш-ленник получает привилегии приклад-ного режима. Казалось бы – невели-ка разница! К тому же программиро-вать shell-код на прикладном режи-ме намного проще, поскольку мож-но использовать высокоуровневые API-функции.

На самом деле реализовать ата-ку на User-Mode драйверы на два порядка сложнее! (Во всяком слу-чае теоретически). Все дело в том, что в Windows Vista появилась ран-домизация адресного пространства (Address Space Layout Randomization, или сокращенно ASLR), и системные библиотеки теперь грузятся по одно-му из 256 возможных базовых адре-сов, а для обхода аппаратного DEP (см. статью «Cудьба shell-кода на сис-темах с неисполняемым стеком» [2])

Silvervale для IA32/IA64-архитектур соответственно), хакеры открыли для себя возможность перехода в режим гипервизора, переводящий опера-ционную систему в гостевой режим и не дающий себя обнаружить ни-какими средствами. О большем по-дарке разработчики rootkit не могли и мечтать! Первый rootkit нового по-коления (названный «Голубой Пилю-лей» – Blue Pill) был продемонстри-рован Жанной Рутковской (Joanna Rutkowska) на конференциях SyScan (Сингапур) и Black Hat (США, Лас-Ве-гас), состоявшихся 21 июля и 3 авгус-та 2006 года соответственно. Она же разработала методику скрытой пе-редачи трафика, который невозмож-но обнаружить никакими существу-ющими средствами контроля. Текст презентации (вместе с исходными кодами некоторых хакерских утилит и демонстрационными avi-роликами) можно найти на сайте Жанны: http://www.invisiblethings.org.

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

необходимо знать адреса API-функ-ций KERNEL32.DLL еще до начала ата-ки! Очевидно, что теперь вероятность успешного захвата системы в 256 раз ниже, чем раньше! Но не нужно быть специалистом в криптографии, что-бы понять, что 1/256 – это очень боль-шое число, тем более что при возник-новении исключения в ядре вспыхи-вает «голубой экран смерти», уводя-щий систему в перезагрузку, а драй-веры прикладного режима просто пе-резапускаются, позволяя хакеру пе-ребирать различные базовые адреса KERNEL32.DLL без останова систе-мы. Следовательно, реальные шансы на успешную атаку не только не сни-зились, но даже возросли, причем весьма значительно. Ситуация напо-минает картину: вытащили голову – хвост увяз.

Но все-таки вернемся к ядру, в ко-тором нам еще предстоит провести не-сколько лет. Хорошая новость (для ха-керов) – в Windows Vista появилось множество новых native-API-функций, существенно упрощающих процесс кодирования rootkit. В частности, по-явилась функция NtCreateUserProcess, запускающая новый процесс на вы-полнение. До этого процессы (из яд-ра!) приходилось запускать приблизи-тельно так: открываем PE-файл с фла-гами SYNCHRONIZE и FILE_EXECUTE, создаем новую секцию вызовом ZwCreateSection(,,,SEC_IMAGE), со-здаем процесс (вернее, не сам про-цесс, а некоторую «заготовку») че-рез ZwCreateProcess, инициализиру-ем блок параметров процесса фун-кцией RtlCreateProcessParameters, выделяем в процессе память, под-готавливаем блок параметров и ус-танавливаем на него указатель Peb->ProcessParameters, выделяем память для стека и инициализируем контекст стартового потока процес-са, после чего создаем сам поток вы-зовом ZwCreateThread. Наконец ре-гистрируем процесс в клиент-сервер-ной подсистеме win32 (CSRSS), после чего пытаемся понять, где мы допус-тили ошибку и почему процесс не за-пускается.

Другая хорошая новость – с по-явлением в процессорах поддержки аппаратной виртуализации (у AMD она скрывается за кодовым назва-нием Pacifica, у Intel это – Vanderpool/

Рисунок 5. Процессор AMD Athlon 64 с поддержкой технологии аппаратной виртуализации Pacifica

Рисунок 6. Выполнение команды VMXON на Intel Pentium приводит к установке монитора виртуальных машин (в терминологии AMD – гипервизора), переводящего операционную систему в «гостевой» режим, полностью контролируемый гипервизором

Page 62: 048 Системный Администратор 11 2006

60

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

фективную эмуляцию процессора, ра-ди которой аппаратная виртуализация и затевалась.

Третья хорошая новость и не просто хорошая, а даже сногсши-бательная: в 64-битной редакции Windows Vista появился механизм, контролирующий целостность яд-ра и названный Patch-Guard, также реализованный в пакетах обновле-ния для XP 64-bit и Server 2003 64-bit (http://www.microsoft.com/whdc/driver/kernel/64bitpatching.mspx).

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

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

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

До тех пор, пока безопасность не войдет в ряды потребительских критериев, определяющих объемы продаж, никто не станет ею всерь-ез заниматься. Microsoft привлекла большое количество хакеров для тес-тирования Windows Vista, но чего она добилась при этом?! Пожалуй, ниче-го (за исключением рекламы). Труд-но поверить, что хакеры пропусти-ли такие вопиющие дефекты систе-мы безопасности, о которых написа-но выше (что же за хакеры это бы-ли?!). Скорее всего, им не позволи-ли воздействовать на концептуаль-ные архитектурные решения, приня-тые «свыше». Microsoft не занимает-ся безопасностью Windows (только разводит «пиар»), и не будет ею за-ниматься, точно так же, как не будет исправлять старые ошибки без до-бавления новых, потому что «рабо-та над ошибками» требует вложения огромных денег, но не приносит ни-какого дохода.

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

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

1. Касперски К. Многоядерные процес-соры и проблемы, ими порождаемые, в ОС семейства NT. //Системный ад-министратор, №10, 2006 г. – С. 78-84.

2. Касперски К. Cудьба shell-кода на сис-темах с неисполняемым стеком. //Сис-темный администратор, №1, 2006 г. – С. 66-74.

а продукты сторонних разработчиков работать не смогут. И хотя Microsoft предоставила ряд API-функций для контроля за открываемыми файла-ми и сетевым трафиком – такую «за-щиту» очень легко обойти. Одно при-ложение (антивирус) устанавливает фильтр, другое (вирус) снимает его легальными средствами, и антивирус никак не может этому воспрепятство-вать (в лучшем случае он просто уз-нает, что фильтр снят). Самое забав-ное, что Patch-Guard очень легко «от-ломать», о чем подробно рассказа-но в статье «Bypassing PatchGuard on Windows x64» (http://uninformed.org/index.cgi?v=3&a=3&t=sumry), но ле-гальные разработчики не могут поль-зоваться подобными хакерскими средствами! Им придется либо забро-сить свой бизнес, либо сменить ори-ентацию (например, ограничиться ав-тономным файл-сканером).

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

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

Рисунок 7. Статья, описывающая различные пути обхода механизма Patch-Guard, следящего за целостностью ядра и позволяющего его модифицировать

Page 63: 048 Системный Администратор 11 2006
Page 64: 048 Системный Администратор 11 2006

62

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

Михаил Кондрин

Электронная почта – Postfix и Cyrus-IMAPВ сети существует достаточно много информации об установке и тонкой на-стройке этих двух программ. Я не став-лю себе целью осветить все детали конфигурации, к примеру, их взаи-модействие с программами контроля спама и антивирусами, «виртуализа-ции» пользователей и почтовых ящи-ков, настройки почтового транспорта и т. д. Будет рассмотрена минималь-ная конфигурация, которая позволя-ет аутентифицировать пользователей для работы с электронной почтой с по-мощью Kerberos, причем чем меньше потребуется изменений в стандартные конфигурационные файлы, прилагае-мые к этим программам, тем с точки зрения данной статьи лучше.

Итак, напомню задачу. Требует-ся настроить IMAP/SMTP-сервер та-ким образом, чтобы зарегистриро-ванный в секторе Kerberos пользова-

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

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

дящегося в одном домене, через сер-вер, находящийся в другом, для полу-чателя в третьем, чем в недавнем про-шлом активно пользовались спамеры (так называемый open-relay). Практи-чески все современные SMTP-серве-ры тем или иным способом запреща-ют такую пересылку почты, по умол-чанию разрешая передачу сообще-ний только от определенного множес-тва отправителей или только получа-телю из заранее описанного множес-тва доменов. Для большинства почто-вых сетей такая установка достаточ-на, и проблемы возникают только тог-да, когда требуется обеспечить пере-сылку почты от мобильных пользова-телей, находящихся вне сети. Запреты/разрешения, основанные на адресе от-правителя, небезопасны сами по себе (помним про IP-spoofing) и, более того, не всегда применимы, поскольку адрес может меняться динамически и вполне легальный пользователь перемещать-

Kerberos и электронная почта

Предлагаем вам способ интеграции SMTP-сервера Postfix и IMAP/POP3-сервера Сyrus-IMAP в систему единой регистрации пользователей Heimdal Kerberos. А также пример использования этой системы в гетерогенном окружении при помощи почтового клиента Thunderbird.

Page 65: 048 Системный Администратор 11 2006

63№11, ноябрь 2006

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

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

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

Начнем с Postfix. Скачиваем последнюю версию с до-машней страницы проекта [1] и собираем:

Сервер Cyrus-IMAP также разрабатывается в Уни-верситете Карнеги-Меллон и доступен по тому же адре-су, что и Cyrus-SASL [2]. Несмотря на его название, поми-мо IMAP, он поддерживает также протоколы POP3 и NNTP. Но я ограничусь только протоколом IMAP. При конфигу-рировании Cyrus-IMAP достаточно только указать подде-ржку SASL:

С помощью опции --enable-gssapi=no непосредствен-ная линковка с библиотеками Kerberos отключается. Од-нако на конечном результате это скажется незначитель-но, поскольку эта опция отменяет только сборку серве-ра kpop – специального протокола доставки почты, разра-ботанного в MIT. Этот протокол существенно отличается oт POP3 (не следует думать, что это просто POP3 с подде-ржкой Kerberos) и мало распространен.

Теперь можно приступать к настройке программ. Прежде всего следует иметь в виду, что Postfix и Cyrus-IMAP требу-ют наличия специальных системных пользователей и групп для работы. Хотя они и создаются в процессе установки про-грамм, но стоит лишний раз убедиться, что в /etc/passwd и /etc/group имеются строки вида:

Архитектуры Postfix и Cyrus-IMAP в чём-то схожи. В обе-их программах центральным звеном является демон, за-дача которого состоит в прослушивании портов и име-нованных сокетов. При подключении клиента демон вы-зывает обработчик, который уже осуществляет обмен данными по выбранному протоколу. Центральный де-мон, который в обоих случаях называется master, по сво-им функциям работает как супер-демон inetd, поэтому Postfix и Cyrus-IMAP можно использовать только как stand-alone сервисы. При установке программ также устанав-ливаются шаблонные файлы настроек демонов master: для Postfix – /etc/postfix/master.cf, а для Cyrus на выбор пред-лагается три файла, один из которых нужно скопировать в /etc/cyrus.conf. Для наших целей подойдёт самый прос-той из них – cyrus-imapd-2.3.1/master/small.conf. Вносить из-менения в эти файлы приходится крайне редко, в основ-ном настройка функциональности сервисов производится с помощью редактирования /etc/postfix/main.cf (для Postfix) и /etc/imapd.conf (для Сyrus).

Начнём с настройки Postfix. Лучше всего начать с ре-дактирования файла /etc/postfix/main.cf.default. Измене-ний немного:

Существенные изменения – имя машины и домена (myhostname и mydomain) и что именно Postfix будет считать локальной сетью (myorigin, mydestination, mynetworks_style). Mailbox_transport определяет способ передачи полученных писем пользователю, в данном случае по протоколу LMTP через именованный сокет, который создаёт Cyrus-IMAP при запуске. С помощью smtpd_sasl_auth_enable вклю-чается использование SASL для аутентификации поль-зователей. Последовательность правил, указанная в smtpd_recipient_restrictions, позволяет принимать поч-ту без ограничений от авторизованных пользователей (permit_sasl_authenticated) и запрещает релейную пе-ресылку почты незарегистрированным пользователям (reject_unauth_destination). Таким образом, для приёма почты с локальных адресов (тех, что попадают в катего-рию mydestination) аутентификации не требуется. Пара-

$ tar xzvf postfix-2.2.8.tar.gz$ cd postfix-2.2.$ make tidy$ make makefiles -i Makefile.in "CCARGS=-DUSE_SASL_AUTH ↵ -I/usr/include/sasl" ↵ 'AUXLIBS=-L/usr/lib -R/usr/lib -lsasl2'$ make$ make update$ ./postfix-install -non-interactive

$ tar xzvf cyrus-imapd-2.3.1.tar.gz$ cd cyrus-imapd-2.3.1$ ./configure --prefix=/usr --sysconfdir=/etc ↵ --localstatedir=/var --disable-static ↵ --with-cyrus-prefix=/usr/cyrus --with-sasl ↵ --enable-gssapi=no$ make $ make install

# getent passwd | grep “^\(postfix\|cyrus\)”

postfix:x:12345:12345:The postfix MTA:/var/spool/postfix:/bin/falsecyrus:x:12365:13:Cyrus Imap Server:/:/bin/false

# getent group | grep “^\(mail\|postdrop\)”

mail::12:mailpostdrop:x:12346:

queue_directory = /var/spool/postfixcommand_directory = /usr/sbindaemon_directory = /usr/libexec/postfixsendmail_path = /usr/sbin/sendmailnewaliases_path = /usr/bin/newaliasesmailq_path = /usr/bin/mailq

alias_maps=hash:$config_directory/aliasesalias_database=hash:$config_directory/aliaseslocal_recipient_maps=

qmail_owner = postfixsetgid_group = postdrop

myhostname = kdc.myrealm.rumydomain = myrealm.rumyorigin = $mydomainmydestination = $mydomain, $myhostname, localhostinet_interfaces = allmynetworks_style = subnet mailbox_transport = lmtp:unix:/var/imap/socket/lmtp smtpd_sasl_auth_enable = yessmtpd_sasl_local_domain = MYREALM.RU broken_sasl_auth_clients = yessmtpd_recipient_restrictions = permit_sasl_authenticated, reject_unauth_destination

Page 66: 048 Системный Администратор 11 2006

64

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

метр же smtpd_sasl_local_domain – это просто имя секто-ра Kerberos.

Но это ещё не всё. Как вы помните, взаимодействие с SASL можно настраивать для каждого приложения ин-дивидуально с помощью конфигурационного файла /usr/lib/sasl2/<имя приложения>.conf. Для Postfix имя при-ложения «smtpd», поэтому нам нужен файл /usr/lib/sasl2/smtpd.conf. Его содержание ничем не отличается от уже со-зданного ранее файла sample.conf, так что можно просто создать символическую ссылку.

Проверку адресатов получаемых писем мы делать не бу-дем (параметр local_recipient_maps не определён), все по-лученные письма передаются Cyrus-IMAP без предвари-тельного разбора. Тем не менее нужно создать базу с ос-новными псевдонимами (в основном техническими, напри-мер, postmaster) с помощью команды:

после чего posfix готов к работе:

Проверьте по /var/log/maillog, что Postfix успешно стар-товал.

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

Обратите внимание на права доступа к создан-ным директориям. Для передачи почты через сокет /var/imap/socket/lmtp, Postfix, работающему под совсем дру-гим пользователем, чем Cyrus-IMAP, необходимо иметь пра-ва на чтение и запуск программ в этой директории.

Настройка Cyrus-IMAP, как уже говорилось, осуществля-ется с помощью двух конфигурационных файлов. Предпо-лагается, что файл настроек демона master (/etc/cyrus.conf) уже скопирован. Для настройки взаимодействия по прото-колу IMAP используется файл /etc/imapd.conf:

В первых двух строчках определяются рабочие дирек-тории Cyrus-IMAP (выше мы их уже создали). Администра-тором почтовых ящиков назначается cyradmin. Причем тре-

буется, чтобы принципал cyradmin присутствовал в секто-ре Kerberos, и при этом администратор не должен иметь свой собственный почтовый ящик, иначе говоря, в систе-ме не должно быть такого бюджета, это позволяет избе-жать проблем с его управлением в будущем. Физически почтовый ящик пользователя – это каталог в директории /var/spool/imap/user. При отображении в почтовом клиенте структура папок воспроизводит структуру этого каталога, что не всегда удобно. Параметр altnamespace приводит поч-товый ящик к более привычному «плоскому» виду: c кор-невой папкой INBOX и всеми подкаталогами, приведенны-ми к одному уровню. В отличие от Postfix настройка взаи-модействия с SASL не требует специального файла в ката-логе /usr/lib/sasl2, а все параметры SASL определяются не-посредственно в файле /etc/imapd.conf. В данном случае на-стройка аналогична Postfix – добавилась только приставка sasl. После этого можно запустить Cyrus-IMAP:

и проверить, что в /var/log/syslog не сыпятся сообщения об ошибках.

Перед тем как приступить к созданию почтовых ящиков, займёмся заселением базы Kerberos. Как уже говорилось, нам нужно добавить принципала cyradmin и двух принци-палов, соответствующих сервисам IMAP и SMTP. Для этого, как обычно, нужно зарегистрироваться в системе как root, аутентифицироваться в секторе Kerberos как администра-тор Kerberos и с помощью программы kadmin внести изме-нения в базу данных Kerberos.

Для сервисов, как обычно, пароли выбираются случай-ным образом. С помощью команды ext их пароли извле-каются из базы данных Kerberos и записываются в файл /etc/krb5.keytab. Поскольку этот файл содержит пароли в незашифрованном виде, то права на его чтение следу-ет ограничить. Вместе с тем сервисы, в том числе Postfix и Cyrus-IMAP, работающие под непривилегированными пользователями, должны уметь извлекать свои пароли из этого файла. Для этого самым простым решением будет открыть keytab-файл на чтение выделенной группе, в кото-рую нужно будет включить root, postfix и cyrus. То есть в файл /etc/group нужно добавить строку вида:

а затем поменять владельца и права доступа к keytab-файлу:

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

# cat /usr/lib/sasl2/smtpd.conf

pwcheck_method:saslauthdmech_list:gssapi plain

$ postalias /etc/postfix/aliases

$ /usr/sbin/postfix start

$ mkdir –p /var/imap/{proc,db,log,msg,socket,ptclient}$ chown -R cyrus.mail /var/imap$ chmod -R 755 /var/imap$ mkdir –p /var/spool/imap$ chown cyrus.mail /var/spool/imap$ chmod 750 /var/spool/imap

configdirectory: /var/imappartition-default: /var/spool/imapadmins: cyradminaltnamespace: yessasl_pwcheck_method: saslauthdsasl_mech_list: gssapi plain

$ /usr/cyrus/bin/master &

# kinit admin/admin# kadmin>add cyradmin>add --random-key imap/kdc.myrealm.ru>add --random-key smtp/kdc.myrealm.ru>ext imap/kdc.myrealm.ru>ext smtp/kdc.myrealm.ru

kerberos::1000:root,postfix,cyrus

# chown root.kerberos /etc/krb5.keytab# chmod 640 /etc/krb5.keytab

Page 67: 048 Системный Администратор 11 2006

65№11, ноябрь 2006

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

пособна аутентификация в Cyrus-IMAP через SASL. Нужно аутентифицироваться с помощью kinit в секторе Kerberos как cyradmin и вызвать утилиту cyradm:

Таким образом, создан ящик ёмкостью 10 Мб для поль-зователя mike. В этом примере для аутентификации cyradm воспользовался супербилетом принципала cyradmin. Так-же можно аутентифицироваться с помощью текстового па-роля, но для этого нужно убедиться, что демон saslauthd запущен, и указать в командной строке cyradm имя адми-нистратора Cyrus-IMAP и ключ -p для интерактивного вво-да пароля:

После этого наша тестовая почтовая система готова к работе! В итоге команда «ps -aux» должна показать на-личие двух процессов master (один для postfix, а другой для cyrus) и ещё несколько процессов saslauthd. После чего мож-но проверить работоспособность системы с помощью про-грамм smtptest и imtest. Эти программы входят в состав дис-трибутива Cyrus-IMAP (каталог imtest). Если они по каким-то причинам не скомпилировались при сборке программ, то можно сделать это сейчас, выполнив «make» в соответс-твующем каталоге. Обе программы чем-то напоминают обычный telnet, позволяя подключаться к определённому порту и вводить команды, специфические для выбранно-го протокола в командной строке. Их отличие от telnet толь-ко в том, что они выполняют аутентификацию автоматичес-ки при запуске, тем самым избавляя вас от необходимости вручную приводить сертификаты к 7-битной форме. Попро-буем с их помощью отправить письмо самому себе и затем прочитать его. Вначале, разумеется, нужно зарегистриро-ваться в системе и в Kerberos как обычный пользователь.

Аналогично, с помощью imtest, прочитаем это «пись-мо». В отличие от предыдущего случая, где доступ был по-лучен после предъявления текстового пароля, для получе-

ния письма мы используем механизм GSSAPI (можно было бы использовать и простой текстовый пароль, но для этого программу imtest нужно запускать, как ни странно, с клю-чом -m login).

Конечно же, регулярно использовать imtest и smtptest для чтения/отправки почты большого удовольствия не до-ставляет. Поэтому посмотрим, какие почтовые клиенты поз-воляют использовать преимущества аутентификации с по-мощью GSSAPI в полном объеме.

Почтовые клиенты и мобильный доступХотя возможность аутентификации с помощью GSSAPI при-сутствовала в почтовых службах достаточно давно, но вос-пользоваться ею было очень сложно из-за практически пол-ного отсутствия подходящих почтовых клиентов. Из кон-сольных клиентов в полном объеме GSSAPI использовал только Pine [3] для аутентификации по протоколам IMAP и SMTP. Популярный клиент Mutt [4] использовал GSSAPI только для протокола IMAP. До последнего времени с гра-фическими почтовыми клиентами дела обстояли еще хуже. Большинство из них, за исключением, может быть, клиен-тов от Microsoft, традиционно поддерживающих свой про-токол NTLM, использовали только вариации открытых тек-стовых механизмов (PLAIN, LOGIN). (Справедливости ра-ди следует упомянуть еще почтовый клиент Mulberry, кото-рый поддерживал GSSAPI в полном объеме. К сожалению, этот коммерческий почтовый клиент в основном был рас-пространен на платформе Macintosh, и компания, продви-гавшая его, обанкротилась в 2005 году.) Безопасность со-единения обеспечивалась внешними средствами с помо-щью SSL/TLS.

Ситуация изменилась с выходом в январе этого года почтового клиента Thunderbird 1.5, в котором была впервые объявлена поддержка Kerberos. В данной статье я буду рас-сматривать настройку только этого приложения. Посколь-

$ cyradm kdc.myrealm.rukdc.myrealm.ru> cm user.mikekdc.myrealm.ru> setquota user.mike 10000

$ cyradm -u cyradmin -p kdc.myrealm.ru...

$ kinit mike$ smtptest -m PLAIN -u mike kdc.myrealm.ru

S: 220 kdc.myrealm.ru ESMTP PostfixC: EHLO example.comS: 250-kdc.myrealm.ruS: 250-PIPELININGS: 250-SIZE 10240000S: 250-VRFYS: 250-ETRNS: 250-AUTH GSSAPI PLAINS: 250-AUTH=GSSAPI PLAINS: 250 8BITMIMEPlease enter your password: C: AUTH PLAIN ************S: 235 Authentication successfulAuthenticated.Security strength factor: 0MAIL FROM: [email protected] TO: [email protected], mike!.250 Ok: queued as 9E2495A8

$ imtest -m GSSAPI kdc.myrealm.ru

S: * OK kdc.myrealm.ru Cyrus IMAP4 v2.2.12 server readyC: C01 CAPABILITYS: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-RE-FERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN MULTIAPPEND BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES ANNOTATEMORE IDLE AUTH=GSSAPI SASL-IRS: C01 OK Completed....S: A01 OK Success (privacy protection)Authenticated.Security strength factor: 561 select inbox* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen \*)] * 2 EXISTS* 1 RECENT* OK [UNSEEN 2] * OK [UIDVALIDITY 1137116496] * OK [UIDNEXT 12] 1 OK [READ-WRITE] Completed2 fetch 2 body[text]* 2 FETCH (FLAGS (\Recent \Seen) BODY[TEXT] {14}Hello, mike!)2 OK Completed (0.000 sec)3 store 1 +flags \deleted* 1 FETCH (FLAGS (\Deleted \Seen))3 OK Completed

Page 68: 048 Системный Администратор 11 2006

66

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

ку клиент Thunderbird, как и другие продукты из семейства Mozilla, изначально планировался как кроссплатформенная программа, то его можно использовать как в UNIX-подобных операционных системах, так и в системе Windows. В послед-нем случае, правда, есть несколько небольших ловушек.

Установка и настройка Thunderbird в Linux проблем не вызывает. Нужно только скачать и распаковать бинар-ную версию Thunderbird с сайта Mozilla [5]. Thunderbird ис-пользует GSSAPI непосредственно, не прибегая к услугам SASL. Так что помимо самого почтового клиента вам нуж-на ещё клиентская часть библиотек Heimdal. Настройка почтовой учетной записи пользователя выполняется как обычно. Нужно только поставить две галочки – одну напро-тив «Use secure authentication» на закладке Server Settings (для протокола IMAP) и вторую – напротив «Use name and password» в окне свойств Outgoing Server (для протоко-ла SMTP). При наличии супербилета у пользователя учет-ной записи такая настройка Thunderbird приводит к аутен-тификации по протоколу GSSAPI. Поскольку, как правило, система конфигурируется таким образом, что супербилет запрашивается при входе пользователя в систему, то до-полнительного ввода пароля в Thunderbird не требуется. Пользователь сразу же получает доступ к своему почто-вому ящику. По логам Cyrus-IMAP и Postfix вы можете убе-диться, что при аутентификации действительно использу-ется протокол GSSAPI. Если поле «Use secure authentication» не отмечено, то Thunderbird откатывается к механизму про-стых текстовых паролей. В этом случае доступ к почтово-му ящику возможен только после ввода пароля в выпада-ющем окошке.

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

Это можно сделать, вручную отредактировав файл prefs.js в каталоге с используемым пользовательским про-филем (т.е. C:\Documents and Settings\[User Name]\Application Data\Thunderbird\Profiles\) или введя нужное значение в ок-не «Edit → Preferences → Advanced → Config Editor».

Возможно, в следующих версиях Thunderbird будет до-бавлена недостающая функциональность, но пока пользо-вателям Windows-версии остается единственная альтер-натива – использовать библиотеку Kerberos-for-Windows от MIT. Следует подчеркнуть, что SSPI и библиотека gssapi из пакета KfW используют разные кэши сертификатов. Для пользователя это означает, что даже если суперби-лет уже получен средствами sspi, то для функционирова-ния KfW (и следовательно Thunderbird) этого недостаточно. Этот сертификат должен быть конвертирован в сертификат MIT (с помощью утилиты ms2mit) или же необходимо полу-чить новый супербилет средствами библиотеки KfW (и гра-фического интерфейса к ней leash32). В статье [6] описа-

ны установка пакета KfW и процедура получения обеих су-пербилетов (MS и MIT) при входе пользователя на свою ра-бочую станцию.

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

Первый параметр означает, что Thunderbird использует системную библиотеку gssapi, которая в системе Windows называется gssapi32.dll. Если по каким-то причинам най-ти её не удаётся, например, потому что она не зарегист-рирована в реестре, то нужно поменять значение перво-го параметра на false, а во втором параметре указать пол-ный путь до соответствующей библиотеки из пакета KfW. Это значение, разумеется, зависит от того, где именно был установлен пакет KfW. У меня, например, этот путь – у:\KfW\bin\gssapi32.dll.

Теперь рассмотрим ещё несколько моментов, на кото-рые нужно обратить внимание при переносе «песочницы» в локальную сеть. Во-первых, разумеется, нужно поменять имена принципалов в соответствии с именами компьюте-ров в локальной сети и именем сектора Kerberos. К приме-ру, у принципала imap/[email protected] часть имени между «/» и «@» – это имя компьютера, на котором работает сервис, часть имени после «@» – название сек-тора Kerberos – их-то вам и нужно привести в соответствие с реальными именами. Во-вторых, ключ сервиса должен присутствовать в keytab-файле на том компьютере, где ра-ботает сервис. Точно так же, на том же компьютере должен присутствовать и файл конфигурации SASL (в каталоге /usr/lib/sasl2). И последнее – следует задуматься о том, сле-дует ли вам запретить использование открытых текстовых паролей для доступа к сервисам? Если вы все-же решите их оставить, то как тогда обезопасить их передачу? Простые текстовые пароли удобны тем, что они поддерживаются лю-быми почтовыми клиентами. Однако, чтобы предотвратить перехват простых текстовых паролей, при передаче по се-ти Cуrus-IMAP и Postfix позволяют запретить использова-ние простых текстовых паролей, если канал передачи не за-шифрован с помощью SSL/TLS. Для Cyrus-IMAP нужно от-редактировать файл /etc/imapd.conf добавив параметр:

Аналогично можно настроить и Postfix, дописав в main.cf файл строки:

user_pref("network.auth.use-sspi", false);

user_pref("network.negotiate-auth.using-native-gsslib", true)user_pref("network.negotiate-auth.gsslib", "")

allowplaintext: 0

smtpd_sasl_security_options=noplaintext,noanonymoussmtpd_sasl_tls_security_options=noanonymous

Page 69: 048 Системный Администратор 11 2006

67№11, ноябрь 2006

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

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

Итак, если текстовые пароли запрещены, то следует подумать над тем, каким образом клиенты, находящиеся вне вашего сектора Kerberos могут аутентифицировать-ся с помощью GSSAPI. Если клиентская часть находится на компьютере, имя и адрес которого постоянны (напри-мер, домашний компьютер вашего коллеги), то проще все-го включить этот компьютер в ваш сектор Kerberos. Если же на компьютере, кроме того, установлен Linux, то можно так-же установить на нем локальный сектор Kerberos и нала-дить траст между этим локальным сектором и корпоратив-ным сектором Kerberos. В любом случае следует убедить-ся, что доступ к kdc через 88 UDP/TCP-порт не блокируют-ся брандмауэрами.

Если же доступ к почте осуществляется вполне легаль-ным пользователем, но со «случайного» компьютера и толь-ко время от времени, то можно обойтись без включения его в сектор Kerberos. Правда, в этом случае требуется опре-делённые предварительные усилия для того, чтобы создать и перенести на этот компьютер билеты Kerberos. Идея мето-да состоит в том, что раз у пользователя уже есть готовые билеты для получения доступа к сетевым сервисам, то ни-какого взаимодействия с KDC не требуется и, следователь-но, на клиентском компьютере не нужно настраивать сек-тор Kerberos. Хотя при этом по-прежнему в силе остается требование, чтобы на компьютере были доступны библио-теки gssapi и, разумеется, Thunderbird.

Рассмотрим пример – ваш коллега отправляется в ко-мандировку, время прибытия на место и отбытия ему из-вестно. Он собирается просматривать свою почту, исполь-зуя компьютер принимающей организации. Тогда перед отъездом ему нужно получить несколько билетов с ваше-го KDC, например, с помощью такого скрипта:

С помощью этого скрипта пользователь получает безад-ресный TGT (ключ -A в вызове kinit), действительный в те-чение суток начиная со дня, указанного в качестве входно-го параметра (--start-time). Нужно указать все дни, которые ваш сотрудник рассчитывает пробыть в командировке. С по-мощью полученного TGT генерируются билеты для служб SMTP и IMAP, и весь комплект ключей записывается в фай-лы вида krb5cc_<ДБФБ>. Все эти файлы нужно скопировать на какой-нибудь физический носитель (например, на флеш-ку), который ваш коллега возьмёт с собой в поездку.

Чтобы воспользоваться билетами, нужно указать Thunderbird, где найти библиотеку gssapi, а библиотеке gssapi сообщить, откуда брать сертификат пользователя. Поскольку все необходимые сертификаты имеются в нали-чии, то нет необходимости подключаться с удалённого ком-пьютера к контроллеру Kerberos. Если же на флешке ваше-го коллеги есть еще 45 Мб свободного места, то можно ор-

ганизовать на ней полностью переносимое рабочее окру-жение из Thunderbird и пакета Kerberos-for-Windows. Таким образом, отпадает необходимость в установке и настрой-ке gssapi на клиентском компьютере.

Для этой цели нужно перенести весь каталог с Thunderbird (тот, что установлен на C:\Program Files\...) на съёмный диск и в него же распаковать пакеты KfW и KfW-extra [7]. В итоге исполняемые файлы thunderbird.exe, leash32.exe и библио-тека gssapi32.dll должны оказаться на одном уровне в од-ном и том же каталоге. При этом следует убедится, что за-пуск leash32 со съёмного носителя не приводит к сообще-ниям об ошибке. Затем, в настройках leash32 нужно по-менять способ хранения кэша сертификатов с API:krb5cc на FILE:krb5cc. Таким образом, скопировав какой-нибудь из полученных ранее сертификатов в файл krb5cc в ката-лог с leash32, мы делаем этот сертификат доступным биб-лиотеке gssapi. Чтобы не настраивать каждый раз учёт-ную запись пользователя, в тот же каталог стоит также скопировать каталог с пользовательскими настройками (C:\Documents and Settings\[User Name]\Application Data\Thunderbird\Profiles\xxxxx.default) для удобства переимено-вав его, например, в roaming.def. Теперь осталось настро-ить взаимодействие thunderbird с библиотекой gssapi, от-редактировав файл roaming.defrefs.js:

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

и убедиться, что почтовые сервисы доступны и при нали-чии действительных сертификатов в файле krb5cc от вас не требуется ввод пароля.

На этом мы и завершим настройку почтовой системы. Таким образом, нам удалось полностью интегрировать поч-товые службы SMTP и IMAP в инфраструктуру Kerberos, а кроссплатформенный почтовый клиент Thunderbird поз-воляет пользователям Linux и Windows воспользоваться преимуществами single sign-on-системы.

1. ftp://ftp.opennet.ru/pub/postfix/official/postfix-2.2.5.tar.gz.2. ftp://ftp.andrew.cmu.edu/pub/cyrus-mail.3. http://www.washington.edu/pine/getpine.4. http://www.mutt.org.5. http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/1.5rc1/

source.6. Кондрин М. Развертываем Heimdal Kerberos. //Системный Ад-

министратор, №7, 2005 г. – С. 20-25.7. http://web.mit.edu/kerberos/dist/kfw/3.0/kfw-3.0/kfw-3.0.zip, http://

web.mit.edu/kerberos/dist/kfw/3.0/kfw-3.0/kfw-3.0-extra.zip.8. Кондрин М. Как настроить библиотеку SASL для совместной

работы с Kerberos. //Системный администратор, №10, 2006 г. – С. 38-42.

#/bin/bashfor i in $@ ; dokinit -A --renewable --forwardable --start-time=$i ↵ -r 7d -l 1d -c $HOME/krb5cc_$ikgetcred -c ~/krb5cc_$i smtp/kdc.myrealm.rukgetcred -c ~/krb5cc_$i imap/kdc.myrealm.rudone

user_pref("network.auth.use-sspi", false);user_pref("network.negotiate-auth.using-native-gsslib", ↵ false)user_pref("network.negotiate-auth.gsslib", "gssapi32.dll")

$ thunderbird.exe -profile roaming.def

Page 70: 048 Системный Администратор 11 2006

68

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

Многие фирмы создают различ-ные веб-ресурсы для исполь-зования только внутри компа-

нии (intranet-серверы). Если политика компании позволяет использовать тех-нологии не только «монстра» Microsoft, то выбор часто останавливается на са-мом популярном http-сервере Apache. Бывает, что веб-ресурсы требуют раз-деления прав и контроля доступа к не-которым разделам или ко всему сай-

ту. Разделять и контролировать мож-но различными способами: на уровне ОС (firewall), веб-сервера и средства-ми самих приложений.

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

Недавно передо мной и была пос-

тавлена подобная задача. Особеннос-ти инсталляции: Первое – сервер Sun sparc, ОС со-

ответственно Solaris 9. Есть своя специфика, но приведенное реше-ние должно работать на большинс-тве других ОС.

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

Работаем с NTLM-авторизацией Apache в домене MS Windows 2003

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

Владимир Василькин

Page 71: 048 Системный Администратор 11 2006

69№11, ноябрь 2006

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

Третье, самое интересное – домен в моей организации самый модный, Active Directory (AD или ADS в даль-нейшем) на сервере Windows 2003 со всеми возможными новшествами. Отношения к управлению доменом я никакого не имею, этим занимают-ся совершенно другие люди. В этой сетке я просто пользователь.

Что имеем на клиенте: Solaris 9 9/04. Apache (Apache/1.3.31) из стандар-

тной поставки Solaris 9.

Для авторизации NTLM решено до-установить – samba3 и mod_ntlm_winbind из того же проекта (см. [4, 5]).

Другие модули NTLM-авторизации, которые я нашел, с доменом 2003 ра-ботать не умеют.

NTLM – это набор протоколов про-верки подлинности и безопасного ис-пользования сессий, используемый в различных сетевых приложениях, пре-имущественно в сетях Microsoft. Перво-начально созданный для работы в служ-бах DCE/RPC, NTLM в данный момент используется всюду в сетевых прило-жениях Microsoft. Вероятно, это лучший способ для HTTP-авторизации в се-тях MS Windows. Кроме упомянутых RPC, HTTP, поддержка NTLM встроена в Exchange-сервер (протоколы SMTP, POP3, IMAP); она так же присутствует в Microsoft – в реализациях CIFS/SMB, Telnet, SIP и, возможно, в каких-то еще.

Сеанс NTLM-аутентифицикации работает по принципу запрос-ответ. Он содержит три типа сообщений, так-же известных как: Type 1 – начало переговоров. Type 2 – запрос. Type 3 – аутентификация (провер-

ка подлинности).

Обычно создание NTLM-сессии вы-глядит следующим образом: Клиент посылает сообщение 1-го

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

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

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

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

Более подробно ознакомиться с описанием стека протоколов NTLM и реализацией этого стека для HTTP-ау-тентификации можно, следуя по ссыл-кам [10, 11].

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

Можно настроить прозрачную для пользователя аутентификацию, используя только технологию Kerberos, без NTLM.

По ссылке [13] можно ознакомить-ся с описанием схемы аутентификации через Kerberos, которая используется Microsoft в своих продуктах (сервер IIS – браузер Internet Explorer).

По ссылке [12] – описание спосо-ба для связки Apache-Mozilla. Думаю, будет работать и с MS Internet Explorer, не пробовал.

Сегодня рассматривается реше-ние, которое использует обе техноло-гии. Клиент (браузер Internet Explorer) использует стек протоколов NTLM для аутентификации у веб-сервера Apache. Веб-сервер, в свою очередь, прове-ряет подлинность клиента в домене MS Windows, авторизуясь в AD через технологию Kerberos.

Подробно с работой технологии Kerberos можно ознакомиться, напри-мер, по ссылке [14].

Чтобы при дальнейшем чтении ста-тьи не возникало неясностей, вкрат-

це опишу основные моменты. Обычно участники процесса Kerberos-аутенти-фикации делятся на три категории: клиентская часть сетевого прило-

жения (client); серверная часть сетевого приложе-

ния (application server); сервер аутентификации Kerberos

(часто используется аббревиатура KDC).

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

Первый и второй типы участников являются Kerberos-клиентами, кото-рые подтверждают свою подлинность у сервера или «центра» Kerberos – KDC (Key Distribution Center). KDC управляет проверкой подлинности всех Kerberos-клиентов. Чтобы два Kerberos-клиента (клиент приложения и сервер прило-жения) доказали друг другу свою под-линность, они используют соответс-твующие удостоверения – «тикеты» (ticket). KDC также управляет распре-делением тикетов. Подобная схема ра-боты называется сторонней системой идентификации, или системой иден-тификации у третьего лица (third party authentication system).

В нашем случае Samba-сервер как член домена MS Windows обраща-ется с информацией к ADS. Оба под-тверждают свою подлинность у KDC (обычно это одна из функций контрол-лера домена MS Windows).

Пакет проверки подлинности Windows Kerberos используется по умолчанию в Microsoft Windows Server 2003, Microsoft Windows XP, и Microsoft Windows 2000 и сосуществу-ет с протоколом запрос/ответ NTLM.

По умолчанию максимальный раз-мер пакета, для которого Windows Server 2003 использует протокол UDP, составляет 1465 байт. В зависимости от различных факторов, например ис-тории идентификатора безопасности (SID) и членства в группе, некоторые учетные записи будут иметь больший размер пакетов проверки подлиннос-ти Kerberos.

В конце концов Microsoft рекомен-дует использовать службу Kerberos через протокол TCP (см. [2]). А точ-нее – по UDP Kerberos от Microsoft

Page 72: 048 Системный Администратор 11 2006

70

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

в Windows 2003 не работает без дополнительных настро-ек. В нашем случае контроллер домена требует использо-вать только протокол TCP. Так как это настройки по умол-чанию в Windows 2003 – скорее всего они используются на большинстве систем. Видел официальное объяснение от Microsoft на английском языке, но на момент написания статьи не нашел его.

Kerberos, поставляемый с Solaris 9 (базируется на MIT KRB5 1.2.1), подобных штучек себе не позволяет. Microsoft об этом честно предупреждает: «обновите UNIX KDC до пос-ледней версии протокола, которая поддерживает соедине-ния TCP вместо UDP» (см. [3]).

Хотя у нас и клиент Kerberos, а не KDC – обновиться все равно придется.

В Solaris 9 по умолчанию нет никаких компиляторов, при-дется установить gcc.

Samba собираем с поддержкой AD, т.е. с ключом --with-ads. Так как сервер Active Directory – это, по большо-му счету, реализация сервера LDAP от Microsoft, то и Samba при включении функционала клиента AD требует подде-ржку LDAP. Поэтому используем --with-ldap.

Не стал мучаться с LDAP-библиотеками от Sun (SunONE ds), поставил OpenLDAP из пакетов. OpenLDAP по-тянул за собой соответственно OpenSSL и т. д. (в различных сборках OpenLDAP требования могут отличаться).

MIT krb5-1.5 использует BerkeleyDB – установил пакет версии db-4.2.52.

Все пакеты для Solaris 9 взяты с сайта [7], это: SMCgcc342; SMCiconv; SMCossl98b; SMCsasl; SMColdap; SMCdb.

Скачиваем, устанавливаем, например, так:

Чтобы установленные библиотеки стали видны осталь-ным программам, пропишем путь к /usr/local/lib в crle:

Собираем KerberosСкачиваем исходники (см. [8]). Я использовал файл krb5-1.5-signed.tar – последняя стабильная версия на момент установки. Можно использовать любую, лишь бы выбран-ная версия работала по TCP как Kerberos-клиент и не воз-никло проблем при сборке.

Судя по файлу ./doc/CHANGES, поддержка TCP на сто-роне клиента появилась 2002-06-10. Для сравнения – вер-сия Kerberos в стандартной поставке Solaris 9 датирована 2002-04-06.

Распаковываем:

Читаем, по желанию:

Cобираем:

Ставим:

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

Переменная PATH у меня выглядела следующим обра-зом (crle у нас уже настроен):

Собираем SambaСкачиваем исходники (см. [4]). Я использовал файл samba-3.0.23a.tar.gz. Как и в случае с Kerberos – это пос-ледняя стабильная версия на момент установки.

Распаковываем:

Собираем:

Ставим:

Процесс сборки также никаких заметных проблем не вызвал.

Программы собраны, теперь надо завести машину в до-мен MS Windows.

Настраиваем DNSНастройки брал со своей рабочей станции:

$ tar xf krb5-1.5-signed.tar$ /usr/sfw/bin/gtar xzf krb5-1.5.tar.gz$ cd krb5-1.5/src

$ more ../README

$ ./configure --prefix=/usr/local/mit-krb5 ↵ --enable-shared --without-krb4$ make

# make install

$ echo $PATH

/usr/local/bin:/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/sfw/bin:/usr/ucb

$ /usr/sfw/bin/gtar xzf samba-3.0.23a.tar.gz$ cd samba-3.0.23a/source

$ ./configure --prefix=/usr/local/samba --with-ldap ↵ --with-ads --with-krb5=/usr/local/mit-krb5$ make

# make install

> ipconfig /all

Primary Dns Suffix . . . . . . . : w2003.domain.inside… DNS Servers . . . . . . . . . . . : 192.168.0.1 192.168.1.1 192.168.2.1

# for i in *gzdo/usr/bin/gunzip $idone# for i in *localdopkgadd –d $i alldone

# crle -l /usr/lib:/usr/local/lib

Page 73: 048 Системный Администратор 11 2006

71№11, ноябрь 2006

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

В Solaris 9 по умолчанию можно использовать как раз три DNS-сервера:

Пишем в /etc/resolv.conf:

проверяется DNS командой nslookup, кто запамятовал.Не забываем, что в /etc/nsswitch.conf должна присутс-

твовать строчка:

Она говорит о том, что при разрешении имен компью-теров соответствующая запись будет искаться в файле /etc/hosts, в случае неудачи будет использован протокол DNS. Подробнее с использованием сервисов имен в Solaris 9 можно ознакомиться в man-страницах nsswitch.conf, gethostbyname (разрешение имен хостов) и в Интернете.

Настраиваем KerberosСписок контроллеров домена я получил через DNS (на ра-бочей станции):

kdc и admin_server взял первым из списка контроллеров. Хотя правильней, пожалуй, было бы спросить у админис-траторов домена.

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

Привожу мой /etc/krb5.conf:

Строчка:

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

Теоретически, клиент должен пытаться использовать TCP, если размер сообщения больше 1 байта. Solaris 9 со-держит прекрасный анализатор трафика – snoop, который нам четко показывает, что по одному сообщению UDP кли-ент и сервер все же умудряются обменяться.

Проверяем настройки Kerberos командами:

Спросит пароль…Если все в порядке, то:

Выдаст созданный «тикет».Когда писал статью, нашел в Интернете описание сбор-

ки samba3 для работы с ADS под Solaris9 (см. [9]). В ней ав-тор предлагает собрать Samba, используя heimdal-реализа-цию протокола Kerberos, для чего пришлось сильно пропат-чить скрипт configure. Возможно, вариант не самый краси-вый, но статья оформлена превосходно. Вы можете поль-зоваться любым способом, главное, чтобы Kerberos рабо-тал через TCP.

Настраиваем SambaПривожу свой файл smb.conf:

Если

отрабатывает без ошибок, можно вводить машину в домен. Когда администраторы домена дали права только завести машину в домен – ничего не вышло. Помучился денёк с пере-сборкой/перенастройкой Kerberos и Samba. Решилось прос-то – дали полные права администратора домена – машину добавил. Права забрали. Так что в чем конкретно было дело – сказать не могу. Заводим машину в домен командой:

$ grep MAXNS /usr/include/resolv.h | grep define

#define MAXNS 3 /* max # name servers we'll track */

nameserver 192.168.0.1nameserver 192.168.1.1nameserver 192.168.2.1domain w2003.domain.inside

hosts: files dns

> nslookup w2003

$ more /etc/krb5.conf

[libdefaults] default_realm = W2003.DOMAIN.INSIDE udp_preference_limit = 1[realms] W2003.DOMAIN.INSIDE = { kdc = pdc1.w2003.domain.inside admin_server = pdc1.w2003.domain.inside }

[domain_realms].pdc1.w2003.domain.inside = W2003.DOMAIN.INSIDE

udp_preference_limit =1

$ /usr/local/mit-krb5/bin/kinit -p domainuser

$ /usr/local/mit-krb5/bin/klist

[global] workgroup = W2003 # имя домена server string = samba for ntlm

netbios name = pebs903x # это имя машине дали администраторы домена netbios aliases = argo # hostname, нам так проще обращаться к машине

interfaces = eri0 bind interfaces only = yes # параметры необязательные, просто в момент # настройки на сервере уже работала стандартная # Samba Version 2.2.12, поэтому выбор интерфейса # был критичен

domain master = No wins server = 192.168.0.2 # смотрим вывод команды "ipconfiog /all" # в MS Windows на машине из домена

name resolve order = wins host

realm = W2003.DOMAIN.INSIDE security = ads password server = pdc1.w2003.domain.inside encrypt passwords = yes

log level = 0 # возможно, в процессе настройки придется увеличить

idmap uid = 10000-20000 idmap gid = 10000-20000 winbind separator = +

$ /usr/local/samba/bin/testparm

# /usr/local/samba/bin/net ads join -U domainlogin

Page 74: 048 Системный Администратор 11 2006

72

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

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

Команда snoop в Solaris 9 разбирает LDAP-запросы, что оказалось очень удобным, чтобы посмотреть, какие конкретно запросы формирует Samba к AD. Например, по-лезно для того, чтобы достать из домена специфичные по-ля учетной записи пользователя – отображать на сайте имя и фамилию пользователя, вместо логина.

Команда:

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

Для запуска/остановки Samba использую следующий скрипт:

Собираем и настраиваем mod_smb_winbindСкачиваем mod_ntlm_winbind.с (см. [5]).

Использовать стандартный Makefile (и apxs) не получит-ся, т.к. Apache в Solaris 9 собран компилятором от SUN. Оп-ции будут немного отличаться от gcc.

Собираем:

Линкуем:

Копируем файл:

Теперь осталось добавить строчки в соответствующие места /etc/apache/httpd.conf:

Перед перезапуском httpd можно проверить синтак-сис httpd.conf:

Если видим фразу «Syntax OK» – перезапускаем Apache:

Проверяем работу модуля, для чего создаем тестовую папку, например:

И в этой папке создаем файл .htaccess со следующи-ми строчками:

Теперь можно использовать переменную REMOTE_USER из «Apache Environment» в своих веб-приложениях. Напри-мер, прекрасно работает связка с Nagios.

К сожалению, модуль не предоставляет возможности раздавать доступ конкретным пользователям (средства-ми Apache), но можно авторизовать по группам (из AD), ис-пользуя ключ --require-membership-of=GROUPNAME в ко-манде ntlm_auth.

Успехов!

1. http://httpd.apache.org.2. http://support.microsoft.com/kb/244474.3. h t t p : / / w w w . m i c r o s o f t . c o m / t e c h n e t / p r o d t e c h n o l /

windowsserver2003/technologies/security/tkerberr.mspx.4. http://de.samba.org/samba.5. h t t p : / / d o w n l o a d . s a m b a . o r g / f t p / u n p a c k e d / l o r i k e e t /

mod_ntlm_winbind.6. h t tp : / /w w w.un ixdoc. ru / index .php?mode = 2&podmode =

1&arcicle_id=145&theme=Samba%20ADS.7. http://www.sunfreeware.com/indexsparc9.html.8. http://web.mit.edu/Kerberos/dist/index.html.9. http://shearer.org/Solaris9_Samba_ADS.

10. http://davenport.sourceforge.net/ntlm.html.11. http://devel.squid-cache.org/ntlm/client_proxy_protocol.html.12. http://meta.cesnet.cz/cms/opencms/en/docs/software/devel/

negotiate.html.13. http://meta.cesnet.cz/cms/opencms/en/docs/software/devel/

draft-brezak-spnego-http-04.txt.14. http://gazette.linux.ru.net/lg82/shekhar.html.

$ cc -DSOLARIS2=290 -DMOD_PERL -DEAPI -DUSE_EXPAT ↵ -I../lib/expat-lite -D_LARGEFILE_SOURCE ↵ -D_FILE_OFFSET_BITS=64 -DUSE_SO_LINGER ↵ -DHARD_SERVER_LIMIT=2048 -I/usr/apache/include ↵ -Wall -o mod_ntlm_winbind.o -c mod_ntlm_winbind.c

$ ld -G -o mod_auth_ntlm_winbind.so mod_ntlm_winbind.o

# cp mod_auth_ntlm_winbind.so /usr/apache/libexec/

LoadModule ntlm_winbind_module ↵ libexec/mod_auth_ntlm_winbind.soAddModule mod_ntlm_winbind.c

$ /usr/apache/bin/httpd –t

# /etc/init.d/apache restart

# mkdir /var/apache/htdocs/test-ntlm

AuthName "NTLM Authentication AD"NTLMAuth onNTLMAuthHelper "/usr/local/samba/bin/ntlm_auth ↵ --helper-protocol=squid-2.5-ntlmssp"NTLMBasicAuthoritative onAuthType NTLMrequire valid-user

# /usr/local/samba/bin/net ads group -U domainlogin

$ net ads search sAMAccountName=Administrator ↵ -U adusername

#!/sbin/sh

case "$1" instart) [ -f /usr/local/samba/lib/smb.conf ] || exit 0

/usr/local/samba/sbin/smbd -D /usr/local/samba/sbin/nmbd -D sleep 30 /usr/local/samba/sbin/winbindd ;;stop) for i in `/usr/bin/ls ↵ /usr/local/samba/var/locks/*pid 2>/dev/null` do echo killed pid from file:$i /usr/bin/kill `/usr/bin/cat $i` /usr/bin/rm $i done ;;*) echo "Usage: $0 { start | stop }" exit 1 ;;esacexit 0

Page 75: 048 Системный Администратор 11 2006

73№11, ноябрь 2006

bugtraq

Множественные уязвимости в различных продуктах от OracleПрограмма: JD Edwards EnterpriseOne Tools 8.x, JD Edwards OneWorld Tools 8.x, Oracle Application Express 1.x, Oracle Application Express 2.x, Oracle Application Server 10g, Oracle Collaboration Suite 10.x, Oracle Database 10g, Oracle Database 8.x, Oracle Developer Suite 10g, Oracle E-Business Suite 11i, Oracle PeopleSoft Enterprise Portal Solutions 8.x, Oracle PeopleSoft Enterprise Tools 8.x, Oracle Pharmaceutical Applications 4.x, Oracle9i Application Server, Oracle9i Collaboration Suite, Oracle9i Database Enterprise Edition, Oracle9i Database Standard Edition, Oracle9i Developer Suite.Опасность: Критическая.Описание: 1. Следующие пакеты недостаточно проверяют представленные данные перед использованием в SQL-за-просах. В результате возможно изменить существующий SQL-запрос и внедрить произвольный SQL-код: DBMS_XDBZ SDO_DROP_USER_BEFORE MD2 DBMS_CDC_IMPDP DBMS_CDC_IPUBLISH DBMS_CDC_ISUBSCRIBE

2. Переполнение буфера обнаружено в функции RELATE в пакетах MD2 и SDO_GEOM и в функции GEOM_OPERATION в пакете SDO_3GL, а также в функции TRANSFORM_LAYER в пакете SDO_CS. В результате злоумышленник, контро-лирующий параметры к этим функциям, может выполнить произвольный код на уязвимой системе.

3. Уязвимость существует в пакете WWV_FLOW_ITEM_HELP из-за недостаточной обработки входных данных в па-раметре NOTIFCATION_MSG, и в Oracle Reports в параметрах showenv, parsequery, cellwrapper и delimiter. Удаленный пользо-ватель может выполнить произвольный код сценария в брау-зере жертвы в контексте безопасности уязвимого сайта.

4. Уязвимость существует из-за ошибки, которая поз-воляет злоумышленнику только с привилегиями «create session» редактировать, создавать и удалять виды.URL производителя: http://www.oracle.com.Решение: установите соответствующее исправление.

DBMS_SQLTUNE SDO_GEOR_INT XDB_PITRIG_PKG SDO_DROP_USER SDO_CS

Несколько уязвимостей в драйверах Apple AirportПрограмма: Apple Macintosh OS X.Опасность: Критическая.Описание: 1. Уязвимость существует из-за ошибок провер-ки границ буфера при обработке сетевых фреймов. Уда-ленный пользователь может послать системе специаль-но сформированный фрейм, вызвать переполнение стека и выполнить произвольный код на целевой системе с при-вилегиями суперпользователя. Уязвимости подвержены следующие продукты: Power Mac PowerBook iBook iMac

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

3. Целочисленное переполнение буфера обнаружено API беспроводных драйверов AirPort для стороннего ПО. Злоумышленник может послать приложению, использую-щему уязвимый API, специально сформированный фрейм, вызвать переполнение буфера и выполнить произволь-ный код на целевой системе с привилегиями суперполь-зователя.Примечание: Уязвимости №2 и №3 в Intel-based Mac mini, MacBook и MacBook Pro не затрагивают системы до вер-сии Mac OS X v10.4URL производителя: http://www.apple.com/macosx.Решение: Установите исправление с сайта производите-ля.

Mac Pro Xserve PowerPC-based Mac mini

Переполнение буфера в Clam AntiVirusПрограмма: Clam AntiVirus версии до 0.88.5.Опасность: Критическая.Описание: 1. Уязвимость существует из-за ошибки про-верки границ данных в распаковщике CHM-файлов chmunpack.c. Удаленный пользователь может с помощью специально сформированного CHM-файла вызвать отказ в обслуживании приложения.

2. Уязвимость существует из-за неизвестной ошибки в файле rebuildpe.c при пересоздании PE-файлов после их распаковки. Удаленный пользователь может вызвать пере-полнение динамической памяти и выполнить произвольный код на целевой системе.URL производителя: http://www.clamav.net.Решение: Установите последнюю версию (0.88.5) с сайта производителя.

Переполнение буфера в драйверах NVIDIAПрограмма: NVIDIA Driver For Linux v8774, NVIDIA Driver For Linux v8762, NVIDIA Driver for FreeBSD, NVIDIA Driver for Solaris.Опасность: Критическая.Описание: Уязвимость существует из-за ошибки при вос-произведении glyphs в бинарном драйвере NVIDIA. Уда-ленный пользователь может вызвать переполнение буфе-ра и аварийно завершить работу драйвера или выполнить произвольный код на целевой системе. Уязвимость может эксплуатироваться с помощью специально сформирован-ной веб-страницы.URL производителя: http://www.nvidia.com.Решение: В настоящее время способов устранения уязви-мости не существует.

Page 76: 048 Системный Администратор 11 2006

74

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

Принято считать, что ошибки при программировании свойс-твенны только новичкам, кото-

рые многого еще не умеют и не зна-ют, но это не так. Программист с опы-том способен избежать большинства проблем, но в то же время он также не застрахован от ошибок. Кроме то-го, многие сайты сегодня делаются под заказ специалистами-аутсорсе-рами и не всегда исполнитель может, умеет и хочет провести полноценный аудит собственного кода. Крупные про-екты также содержат ошибки. Резуль-тат – сегодня только и слышно о PHP Include, SQL Injection, Cross site scripting (XSS) и других атаках, направлен-ных на веб-сервисы. Несмотря на то что об этих технологиях и методах за-щиты рассказано многое, взломы все равно продолжаются.

Так, по статистике Web Application Security Consortium [1] количество взломов веб-серверов в 2005 году по сравнению с 2004 годом увеличи-лось в три раза. Это, конечно, не са-мая точная и полная статистика, зато в ней фигурируют только крупные про-екты, защитой которых занимаются от-нюдь не новички. Среди основных при-чин такой негативной тенденции назы-вают широкую доступность инструмен-тов, необходимых для проведения ата-ки, и недостаточное внимание со сто-роны разработчиков сайтов к вопро-сам безопасности.

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

мощью специализированных скане-ров безопасности, работающих на при-кладном уровне, вроде Acunetix Web Vulnerability Scanner [2] и правильная настройка всех компонентов системы (веб-сервера, параметров PHP и ба-зы данных). Ручная проверка больших объемов кода является сложной и тру-доемкой задачей, требующей больших знаний в различных областях, зай-мет много времени и 100% гарантии все равно не даст. Сканеры безопас-ности, как правило, позволяют выявить лишь общие ошибки. Вероятно, поэто-му в последнее время активно разви-ваются проекты, позволяющие защи-титься от атак глобально, независимо от присутствия ошибок на сайте. Один из вариантов – защита сервиса с по-мощью файервола веб-приложений [3], разработчики Suhosin пошли несколь-ко иным путем.

Проекты Hardening-Patch и SuhosinЭто два проекта от одного разработчи-ка, имеющие сходную задачу, только реализованы по-разному. Задача – за-щита серверов и пользователей от це-лого ряда известных проблем в прило-жениях и ядре PHP. Кроме того, с помо-щью Hardening-Patch или Suhosin мож-но защититься от неизвестных уязви-мостей. При этом Hardening-Patch ре-ализован в виде патча к PHP и может быть использован только после пол-ной пересборки PHP. В Suhosin вхо-дят две независимые части, которые могут использоваться как раздельно, так и в совместно.

Первая часть – небольшой патч к яд-ру, осуществляющий низкоуровневую защиту структур данных Zend LinkedList и HashMap против переполнения бу-фера и других уязвимостей ядра PHP. Это реализуется посредством хранения реальных указателей на используемые деструкторы, и каждый раз при его вы-зове происходит проверка списка. Патч защищает ядро и модули PHP от уязви-мости форматной строки и от ошибок в реализации функции realpath, прису-щей некоторым платформам (приводя ее к принятой в FreeBSD).

Вторая часть реализована в ви-де расширения, которое фактически и осуществляет всю основную защи-ту, при необходимости его очень прос-то доустановить в уже рабочую систе-му, без полной пересборки PHP. Здесь возможности уже гораздо шире (пол-ный список приведен на сайте проек-та http://www.hardened-php.net/suhosin/a_feature_list.html): добавлены функции sha256(),

sha256_file() и поддержка blowfish для всех платформ;

кодирование Cookies и данных сес-сии;

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

отключение функции eval(), запуск приложений с использованием eval() с применением белого и чер-ного списков;

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

Защищаем PHP-приложения с помощью Suhosin

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

Page 77: 048 Системный Администратор 11 2006

75№11, ноябрь 2006

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

принудительная установка максимальной глубины ре-курсии;

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

защита от прерывания HTTP-заголовка (HTTP Response Splitting);

защита глоба льных переменных от ex t rac t и import_request_vars, а также от скриптов, манипулиру-ющих memory_limit;

защита от длинных и неправильных идентификаторов сессии;

фильтрование ASCII-символов; игнорирование переменных GET, POST, COOKIE с це-

лым рядом параметров; установка лимитов ряду переменных REQUEST.

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

Версии Hardening-Patch и Suhosin-Patch привязаны к со-ответствующей версии PHP, последние версии расширения Suhosin совместимы практически со всеми версиями PHP. Судя по ответу в FAQ, размещенному на сайте, Suhosin сейчас продвигается на замену Hardening-Patch, поэто-му его и рекомендуется использовать. Распространяются эти два проекта под PHP License, version 3.01.

Установка SuhosinУстановка Suhosin состоит из двух этапов: наложение пат-ча на PHP с последующей его пересборкой и компиляция модуля расширения. Хотя возможна и сборка со встроен-ным расширением.

В репозитарии Ubuntu 6.06 на момент написания статьи была доступна версия php 5.12, для которой не имеется пат-ча Suhosin. Поэтому будем устанавливать из исходных тек-стов. Скачиваем PHP, патч suhosin под используемую вер-сию PHP и расширение. Все это распаковываем, наклады-ваем патч и компилируем.

Хотя, чтобы не было проблем с зависимостями, в Ubuntu перед конфигурированием рекомендуется дать команду:

и установить все недостающие пакеты (хотя большая их часть в конкретном случае явно лишняя). Минимальный набор для Ubuntu устанавливается так:

После этих операций PHP должен работать корректно и без ошибок. Если планируется, скомпилировать расшире-ние вместе с PHP, то распаковываем архив suhosin-0.9.5.tgz и копируем все файлы из каталога src в ext/suhosin.

Далее обычная сборка php, при конфигурировании не забываем включить опцию --enable-suhosin. Собираем модуль расширения:

По умолчанию скомпилированный модуль будет установлен в каталог, в котором он компилируется, что не очень удобно. Поэтому лучше использовать дирек-тиву --prefix=/usr/lib.

Настройка SuhosinВсе настройки Suhosin производятся в файле php.ini. Сле-дует учесть, что патч поддерживает только опции ре-гистрации. Первая запись, которая должна быть обя-зательно помещена в файл, – это подключение модуля suhosin.so (сам модуль должен быть виден переменной LD_RUN_PATH):

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

На сайте проекта приведен тест производительности, замеренный с помощью скрипта bench.php [6]. При этом использовался компьютер с процессором Pentium 4 с час-тотой 2,80 Ггц и оперативной памятью 512 Мб. Замеры по-казали, что система, использующая патч и модуль Suhosin на 8,84 % работает медленнее. На компьютере с процес-сором 2 Ггц получилась приблизительно такая же цифра. Большую часть ресурсов забирает патч, модуль несильно нагружает систему. Но bench.php использует рекурсивную функцию с большим количеством вызовов, что в рабочих скриптах практически не встречается. Поэтому в реальной системе присутствие Suhosin будет незаметно.

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

$ tar -xvjf php-5.1.6.tar.bz2$ gunzip suhosin-patch-5.1.6-0.9.5.patch.gz$ cd php-5.1.6$ patch -p 1 -i ../suhosin-patch-5.1.6-0.9.5.patch$ make$ make test$ sudo make install

$ sudo apt-get build-dep php5

$ cd suhosin-0.9.5$ phpize

$ ./configure

Configuring for:PHP Api Version: 20041225Zend Module Api No: 20050922Zend Extension Api No: 220051025

$ make$ sudo make install

extension=suhosin.so

$ sudo apt-get install bison flex libxml2 libxml2-dev

Page 78: 048 Системный Администратор 11 2006

76

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

Таблица 1. Опции Suhosin

Опция Значение по умолчанию Возможные значения Пояснение

Опции протоколирования

suhosin.log.syslog S_ALL (511)

S_MEMORY, S_MISC, S_VARS, S_FILES, S_INCLUDE, S_SQL, S_EXECUTOR, S_MAIL, S_SESSION, S_ALL

Указывает, какие классы тревог регистрируются в syslog. Вне зависимости от настроек S_MEMORY регистрируется всегда

suhosin.log.syslog.facility LOG_USER (9)

LOG_KERN, LOG_USER, LOG_MAIL, LOG_DAEMON, LOG_AUTH, LOG_SYSLOG, LOG_LPR, LOG_NEWS, LOG_UUCP, LOG_CRON, LOG_AUTHPRIV, LOG_LOCAL0 ... LOG_LOCAL7

Указывает на компонент, который будет заносить сообщения в syslog

suhosin.log.syslog.priority LOG_ALERT (1)

LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG, LOG_ERR

Приоритет сообщения

suhosin.log.sapi S_ALL – Определяет, какие классы тревог регистрируются через SAPI

suhosin.log.script 0 –Какие классы тревог будут регистрироваться через внешний скрипт, S_MEMORY не может регистрироваться, так как его появление означает, что процесс, возможно, в нестабильном состоянии

suhosin.log.phpscript – – Какие классы тревог будут регистрироваться через PHP-скрипт, S_MEMORY также не может регистрироваться

suhosin.log.script.name – – Полный путь к внешнему скрипту. Скрипту будет передано два параметра. Первый – класс тревоги в буквенной нотации, второй – сообщение

suhosin.log.phpscript.name – –Полный путь к внешнему php-скрипту. Ему будет передано два параметра: SUHOSIN_ERRORCLASS и SUHOSIN_ERROR, назначение которых аналогично предыдущему

suhosin.log.use-x-forwarded-for 0 (отключено) –Обычно IP-адрес атакующего извлекается из переменной REMOTE_ADDR, включение этой опции позволит использовать HTTP-заголовок X-Forwarded-For (например, используется прокси)

Опции исполнения

suhosin.executor.max_depth 0 (отключено) – Задает максимально разрешенную глубину стека, после чего выполнение скрипта будет остановлено

suhosin.executor.include.max_traversal 0 – Определяет, сколько знаков ../ в запросе будет расценено как атака

suhosin.executor.include.whitelist – –Разделенный запятой список разрешенных или запрещенных URL, которые можно включить в скрипт. Если не указан белый список, используется только черный, если не указаны оба, то вставка URL запрещена

suhosin.executor.include.blacklist – –

suhosin.executor.func.whitelist – – Список разрешенных или запрещенных для вызова функций. Если белый список пуст, анализируется черный, если пусты оба, то функции запрещены

suhosin.executor.func.blacklist –

suhosin.executor.eval.whitelist – –Список функций, разделенных запятой, которые разрешено или запрещено запускать посредством eval(). Если белый список пуст, анализируется черный, если пусты оба, то вызов функции через eval() запрещено

suhosin.executor.eval.blacklist – –

suhosin.executor.disable_eval 0 –Глобальное отключение использования eval(). В журнале будут отображены все нарушения этого правила, поэтому можно отследить все случаи использования eval()

suhosin.executor.disable_emodifier 0 –Модификатор /e внутри функции preg_replace() позволяет выполнять код, разработчики рекомендуют отключить ее использование и применять preg_replace_callback()

Дополнительные опции

suhosin.simulation 0 –Очень полезная опция, позволяет переводить систему в режим регистрации нарушений, то есть создав правила, вы можете некоторое время только регистрировать нарушения, чтобы затем комплексно оценить работу скриптов

suhosin.mail.protect 0 0, 1, 2 Включает защиту функции mail(). 0 – отключена, 1 – контроль Subject:, To:, 2 – дополнительно To:, CC:, BCC:

suhosin.memory_limit 0 –Управление изменением memory_limit, при 0 – изменение запрещено, любое число показывает предел в Мб, при запросе скриптом большего значения его выполнение будет остановлено

Page 79: 048 Системный Администратор 11 2006

77№11, ноябрь 2006

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

Опция Значение по умолчанию Возможные значения Пояснение

Опции прозрачного шифрования

suhosin.session.encrypt 1 (включено) – Разрешение/отключение шифрования сессии

suhosin.session.cryptkey – – Ключ для шифрования сессии

suhosin.session.cryptua 1 Зависимость ключа шифрования от полей User-Agent, Documentroot

suhosin.session.cryptdocroot – –

suhosin.session.cryptraddr 0 0-4 Число октетов REMOTE_ADDR, от которых будет зависить ключ шифрования

suhosin.cookie.encrypt 1 –Шифрование Cookie. Значение остальных опций suhosin.cookie.cryptkey, suhosin.cookie.cryptua, suhosin.cookie.cryptdocroot, suhosin.cookie.cryptraddr аналогично

Опции фильтрации

suhosin.filter.action – –

Определяет реакцию Suhosin на нарушение фильтров. По умолчанию переменная блокируется, 402 – останавливает скрипт и возвращает код ответа HTTP 402; [302,]http://www.site.com – перенаправляет по указанному адресу, в квадратных скобках может стоять код ответа; [402,]/var/scripts/badguy.php – перенаправляет на указанный скрипт

suhosin.cookie.max_array_depth 100 – Максимальная глубина массива, зарегистрированного через cookie

suhosin.cookie.max_array_index_length 64 – Определяет максимальную длину индексов массива переменных, зарегистрированных через cookie

suhosin.cookie.max_name_length 64 – Определяет максимальную длину имени переменных, зарегистрированных через cookie. Для массивов это имя перед индексом

suhosin.cookie.max_totalname_length 256 – Определяет максимальную длину полного имени переменных, зарегистрированных через cookie

suhosin.cookie.max_value_length 10000 – Определяет максимальную длину переменной, зарегистрированную через cookie

suhosin.cookie.max_vars 100 – Определяет максимальное количество переменных, зарегистрированных через cookie

suhosin.cookie.disallow_nul 1 – Если 1, то символы ASCIIZ в переменных не разрешены

suhosin.get.max_array_depth 50 –

Максимальная глубина массива, зарегистрированного через URL Значение остальных опций (suhosin.get.max_array_index_length, suhosin.get.max_name_length, suhosin.get.max_totalname_length, suhosin.get.max_value_length, suhosin.get.max_vars, suhosin.get.disallow_nul) сопоставимы с предыдущими

suhosin.post.max_array_depth 100 –

Максимальная глубина массива, зарегистрированного через POST. Значение остальных опций (suhosin.post.max_array_index_length, suhosin.post.max_name_length, suhosin.post.max_totalname_length, suhosin.post.max_value_length, suhosin.post.max_vars, suhosin.post.disallow_nul) сопоставимы с предыдущими

suhosin.request.max_array_depth 100 –

Максимальная глубина массива, зарегистрированного через все доступные методы URL, GET , POST или COOKIE. Может быть индивидуально переопределена предыдущими опциями. Также доступны параметры suhosin.request.max_array_index_length, suhosin.request.max_totalname_length, suhosin.request.max_value_length, suhosin.request.max_vars, suhosin.request.max_varname_length, suhosin.request.disallow_nul

suhosin.upload.max_uploads 25 – Максимальное число файлов, пересылаемых одним запросом

suhosin.upload.disallow_elf 1 – Установка запрета на загрузку ELF-файлов

suhosin.upload.disallow_binary 0 – Установка запрета на загрузку двоичных файлов

suhosin.upload.remove_binary 0 – Установка удаления двоичного контента из загружаемых файлов

suhosin.upload.verification_script – –Путь к скрипту, который проверяет загружаемый файл. В качестве параметра он получит имя файла, для продолжения загрузки скрипт должен вывести 1 в stdout

suhosin.session.max_id_length 128 – Максимальная длина идентификатора сессии, в случае превышения указанного значения будет создан новый идентификатор

Таблица 1. Опции Suhosin (продолжение)

ти правила. В Suhosin достаточно лишь оптимально уста-новить параметры и в дальнейшем система не потребует вмешательства.

1. Web Hacking Statistics – http://www.webappsec.org/projects/whid/statistics.shtml.

2. Яремчук С. Определяем уязвимость веб-сервиса с помощью Acunetix Web Vulnerability Scanner. //Системный администра-тор, № 9, 2005 г. – C. 68-69.

3. Яремчук С. Как повысить безопасность веб-приложений. //Системный администратор, № 2, 2006 г. – C. 60-66.

4. Сайт проекта Hardening-Patch – http://www.hardened-php.net/hphp.5. Сайт проекта Suhosin – http://www.hardened-php.net/suhosin.6. Скрипт bench.php – http://cvs.php.net/viewvc.cgi/ZendEngine2/

bench.php?content-type=text/plain&view=co.7. Документация по настройке Hardening-Patch (опции в боль-

шинстве схожи с Suhosin) – http://www.hardened-php.net/hardening-patch-0.4.3-manual-alpha.pdf.

Page 80: 048 Системный Администратор 11 2006

78

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

Про Perl 6 впервые начали гово-рить в 2000 году, когда было принято решение переписать

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

Кроме того, требовались измене-ния, чтобы, с одной стороны, очистить

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

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

тя так будут поступать разве что истин-ные энтузиасты), а уж познакомиться с языком просто необходимо.

Общее направление задал со-здатель Perl Ларри Уолл: в статьях под общим названием «Откровения» (Apocalypses) описано, каким он видит будущий язык.

Позже появился еще один цикл «Толкования» (Exegeses), в которых Дамиан Конвей поясняет «Открове-ния» на примерах. И, наконец, сущест-вует начатый Эллисон Рэндал набор

Чего ждать от Perl 6

Perl готовится сделать новый рывок и оставить конкурентов позади. До круглой цифры счетчику версий осталось совсем немного, всего 0.1.2 версии.

Андрей Шитов

Page 81: 048 Системный Администратор 11 2006

79№11, ноябрь 2006

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

«Конспектов» (Synopses); они по су-ти являются спецификацией, от кото-рой отталкиваются разработчики ком-пиляторов.

Одна из разработчиков (да, это жен-щина!) нового компилятора Одри Танг (Audrey Tang) изобразила на услов-ном графике эволюцию Perl 6. Раз-витие временами напоминает хаос, тем не менее, надежда увидеть рабо-тающий Perl 6 есть.

Perl 6 и Perl 5Синтаксис пятой и шестой версий не совместим друг с другом. Поэтому, чтобы начать изучать Perl 6, не обя-зательно предварительно осваивать Perl 5. Однако программистам, зна-комым с пятой версией, будет проще понять многие конструкции, которые в новую версию либо полностью пе-решли из предыдущей, либо измени-лись только косметически.

Perl 5 и Perl 6 не просто разные версии одного языка. Правильнее бу-дет сказать, что это два разных язы-ка, объединенных одной идеей. Ны-нешние компиляторы не способны выполнить программу другой версии. Тем не менее изначально предполага-лось, что рабочая версия нового ком-пилятора станет универсальной.

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

Архитектура«Прошлый» Perl всегда был интерпре-тируемым языком. Это часто дава-ло повод противникам говорить о не-возможности применять язык в кри-тических по времени приложениях. Наличие mod_perl и компиляторов perl2exe не спасает положения, пос-кольку, например, для программиро-вания под mod_perl требуется учи-тывать специфические ограничения, а perl2exe редко способен сгенериро-вать работающий код для программы, более сложной, чем «Hello, World!».

В Perl 6 с самого начало было ре-шено изменить традиционный подход и применить схему «программа – ком-пилятор – байт-код – виртуальная ма-шина». Эта схема не новая, и к 2000 го-ду уже работала с языком Java, а чуть позже в технологии .NET.

Новый цикл разработки программ на Perl 6 дает сразу два преимущест-ва. Во-первых, во время выполнения теперь не требуется интерпретировать исходный код, вместо этого виртуаль-ная машина выполняет предваритель-но скомпилированный байт-код (идео-логия Java в чистом виде). Во-вто-рых, появилась возможность созда-вать программы из частей на разных языках, для которых созданы транс-ляторы в байт-код (идеология .NET). На первый взгляд может показаться, что не было смысла создавать собс-твенный формат байт-кода, а восполь-зоваться, например, правилами .NET. Но основные языки, с которыми рабо-тает .NET, – языки с сильной типиза-цией. Байт-код же, используемый для Perl 6, сконструирован с расчетом на динамические языки без фиксирован-ных типов данных, подобные Perl, на-пример, Python и Ruby.

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

Parrot, PASM, IMC, PBC, Ponie, PIR, PUGS, PIL, Perl6::*История развития за последние шесть лет, даже несмотря на наличие генпла-на, испещрена названиями и аббре-виатурами; часть из них уже потеряли свою актуальность.

Parrot – это название упомянутой выше виртуальной машины. На ранней стадии использовался собственный ас-

семблер (Parrot assembler, PASM), кото-рый содержит набор инструкций, очень похожих на те, которые применяются в обычном ассемблере для физичес-ких RISC-процессоров. Все операции выполняются с операндами в вирту-альных регистрах разных типов: напри-мер, в одних регистрах хранятся целые числа, в других строки. Один из типов необычен (как и его название Parrot Magic Cookie, PMC) и предназначен специально для поддержки объектно-ориентированного программирования. Байт-код сохранялся в файле с расши-рением .pbc (pre-compiled bytecode).

Поскольку число регистров огра-ниченно, программировать непосредс-твенно на ассемблере PASM неудобно (конечно, прежде всего разработчикам компиляторов), и появились сопутс-твующий язык IMC (Intermediate Code) и компилятор IMCC (Intermediate Code Compier). IMC представляет собой над-стройку над ассемблером и разреша-ет пользоваться произвольными пе-ременными, поэтому нехватка регис-тров перестает ощущаться. Сегодня вместо IMC используется PIR (Parrot Intermediate Representation).

Ponie (еще одна тупиковая ветвь в развитии Perl 6) – это попытка со-здать компилятор в байт-код для про-грамм, написанных на Perl 5.

Библиотека CPAN содержит набор модулей Perl6::*, которые были напи-саны, чтобы поэкспериментировать с синтаксисом шестой версии, имея компилятор пятой. Пользоваться эти-ми модулями сегодня особой необхо-димости нет.

В состав Parrot входит около де-сятка компиляторов, создающих байт-

Условная кривая развития Perl 6. (Рисунок Одри Танг)

Page 82: 048 Системный Администратор 11 2006

80

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

код из программ на разных языках (иногда экзотических типа Ook!), в том числе экспериментальный компилятор Perl 6.

Компилятор в составе Parrot более не развивается, ему на смену пришел проект Pugs (Perl 6 User’s Golfing System), которым занимается Одри Танг. Pugs тоже внес свой вклад в список сокращений, например, создав собственный фор-мат PIL (Pugs Intermediate Language).

Установка Perl 6Разбираться в месиве форматов необязательно, достаточ-но установить последнюю версию Pugs. Правда, радуж-ная картина немного меркнет, когда узнаешь, что Pugs на-писан на языке Haskell, и для сборки необходим работаю-щий компилятор. (А тем, кто захочет попробовать в дейс-твии новые регулярные выражения, возможно, потребует-ся и установленный Parrot.) Компилятор доступен на сай-те www.haskell.org/ghc как в исходных кодах, так и в бинар-ных дистрибутивах для некоторых платформ. Самостоя-тельная сборка компилятора GHC происходит крайне дол-го, хотя и гладко.

Итак, если для вашей платформы не нашлось бинар-ной версии Pugs, необходимо последовательно выпол-нить две процесса: установить компилятор GHC, после че-го собрать Pugs.

Ссылки на исходные и бинарные коды находятся на сай-те проекта www.pugscode.org.

Процесс сборки из исходных кодов стандартный для мо-дулей Perl:

Примечание: исходный код Pugs размещен на сайте CPAN, но он не имеет отношения к модулям Perl6::*, о ко-торых говорилось в предыдущем разделе.

Во время подготовки статьи для тестирования программ я пользовался двумя версиями Pugs под Windows XP SP2 и Linux Red Hat 9. На каждой системе установлены GHC 6.6, Parrot 0.4.6, Pugs 6.2.13 и Perl 5.8.8.

Кстати, при установке Pugs просит самую последнюю версию компилятора GHC, сообщая, что с более ранней скомпилировать-то пока удастся, но скорость работы бу-дет низкой, а в будущем старая версия GHC вообще не по-дойдет.

Компилятор Haskell под Windows установлен из msi-фай-ла (необходим один дистрибутив размером 37 Мб, находя-щийся на официальном сайте).

На второй системе получить желаемый набор удалось не сразу. В первый раз компилятор GHC собрался из ис-

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

Впрочем, далее в сообщении об ошибке следует разъ-яснение о том, что дополнительно необходимо поставить комплект библиотек extralibs.

Итого, при сборке компилятора Haskell из исходных ко-дов нужны два файла, в данном случае ghc-6.6-src.tar.bz2 и ghc-6.6-src-extralibs.tar.bz2. Они находятся на том же сай-те в разделе Source Distribution. Распаковав их в общий ка-талог и заново собрав GHC (еще два часа), удалось полу-чить все необходимое для сборки Pugs.

Часть 2. ЯзыкСамостоятельное изучение Perl 6 – сегодня занятие, боль-ше похожее на исследовательскую работу. Теоретичес-кие источники знаний подборка Synopses, практичес-кие каталоги с примерами, входящими в поставку Parrot (languages/perl6/examples) и Pugs (examples/).

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

Все приведенные примеры кода проверены в Pugs 6.2.13 на двух системах: под Windows и Linux. Запуск программ на исполнение аналогичен тому, как это происходит в Perl 5. Если код записан в файле, передайте его аргументом при вызове pugs:

Короткие однострочные программы допустимо записы-вать непосредственно в командной строке:

Кстати, для запуска pugs удобно сделать псевдоним p6 или perl6.

Наконец, на платформе UNIX в файле с программой можно указать путь к компилятору:

и сделать файл исполняемым:

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

Все приведенные примеры содержатся в архиве, доступ-ном по адресу: http://perl6.ru/publish/samag/code.zip.

Приветствие, выводимое при запуске Pugs

*** Could not load the "mtl" package in your GHC installation.

> pugs programme.p6

> pugs –e'print "This is Perl 6"'

# !/usr/local/bin/pugs

> pugs –e'print "This is Perl 6"'> chmod 0755 programme.p6> ./programme.p6

perl Makefile.PLmakemake install

Page 83: 048 Системный Администратор 11 2006

81№11, ноябрь 2006

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

Вывод на печатьПрежде чем рассматривать особенности Perl 6, необходимо познакомиться с механизмом вывода на печать, поскольку он потребуется в каждом примере.

Стандартная функция print() по-прежнему доступна, но в Perl 6 появился метод say(), действие которого ана-логично работе функции print(), но всегда завершается пе-реводом строки. Новый способ вывода особенно удобен в отладочных сценариях, когда вписывать переводы стро-ки вручную утомительно.

Я не случайно назвал say() методом, поскольку им мож-но пользоваться не только как функцией, но и как методом объекта, например:

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

Такая запись приведет к ошибке:

Комментарии оформляются так же, как и в Perl 5, сим-волом #.

Поддержка юникодаИсходный код программ на Perl 6 по умолчанию считается написанным в юникоде. Поэтому можно смело пользовать-ся любыми символами из нелатинских кодировок:

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

ПеременныеВ Perl 6 по-прежнему применяются сигилы (sigils) для обоз-начения типа структуры переменной: $ – для скаляров, @ –

для списков и % – для хешей. Однако теперь при обраще-нии к отдельным элементам массивов и хешей (а отдельные элементы чаще всего бывают скалярами) сигил изменять не требуется. Например, обращение к элементу списка вы-глядит как @array[5], в то время как раньше приходилось писать $array[5]. Иными словами, переменная всегда со-храняет свой префикс-сигил.

Связывание переменныхСвязывание (binding), или создание ссылок, осуществля-ют операторы «:=» и «::=». Они создают синоним перемен-ной, указанной справа от оператора. Любое обращение к синониму эквивалентно обращению к оригинальной пе-ременной:

Хотя в последней строке происходит обращение к пере-менной $a, на экране появится значение 456, которое при-своено через ссылку $b.

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

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

Например, если приведенную программу оттранслиро-вать в промежуточный PIR-файл (указав опцию -CPIR), по-лучится код длиной 91 049 байт, а та же программа с опе-ратором «::=» окажется чуть короче (90 897 байт). Не сто-ит пугаться таких размеров промежуточного кода, потому что в нем собрано много определений операторов, которые данной программой не используются.

Конкатенация строк«Складывание» строк теперь выполняет не оператор «точ-ка», а тильда:

Одинарные и двойные кавычки в строках имеют тот же смысл, что и в Perl 5.

Операторы «//» и «//=»Бинарный оператор «//» (не путайте с началом одностроч-ного комментария) принимает два операнда и возвраща-ет первый из них, если он определен, и второй, если не оп-ределен первый.

# say.p6say "This is Perl 6";say 123;say(8 * 9);

# say-method.p6"This is Perl 6".say;123.say;(8 * 9).say();

'error'.say ();

$ p6 say-method.p6

*** Unexpected "();" expecting comment, operator, statement modifier, ";" or end of input at say-method.p6 line 7, column 13

# unicode.p6say "Превед!";say "β-sitostérol";say " !"

# variables.p6my $string = 'abcde';my @array = ('alpha', 'beta', 'gamma');my %hash = {'alpha' => 'A', 'beta' => 'B', 'gamma' => 'C'};say $string; # abcdesay @array[1]; # betasay %hash{'gamma'}; # C

# binding.p6my $a = 123;my $b := $a;$b = 456;say $a; # 456

# concatenation.p6my $before = 'This is';my $after = 'Perl 6.';say $before ~ ' ' ~ $after;

Page 84: 048 Системный Администратор 11 2006

82

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

При первом вызове метод say() получает значение пе-ременной $b (поскольку она определена), а второй $a (по-тому что значение у переменной $c отсутствует).

Оператор «//=» выполняет то же действие, но над единс-твенной переменной: вызов «$a //= $b» равнозначен «$a = $a // $b».

Интервальные условияВ Perl 6 операторы сравнения допускается объединять в це-почку, что позволяет создавать компактные записи, напри-мер, для проверки попадания значения переменной в за-данный интервал:

Кстати, из второго блока сравнений видно, что теперь необязательно использовать скобки в условии.

КонтекстыPerl 6 позволяет вручную управлять контекстом, в кото-ром происходит работа с переменной; в некотором смыс-ле это подобно преобразованию типов.

Контекст устанавливается с помощью унарного опе-ратора:

ФункцииКлючевое слово для объявления функции sub не измени-лось. А механизм передачи параметров стал нагляднее. На-пример, при объявлении функции возможно указать име-нованные аргументы.

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

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

В объявлении наличие или отсутствие пробела не име-ет значения.

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

Параметры функции могут содержать модификаторы (traits), изменяющие их поведение. В частности, модифи-катор is rw дает возможность перезаписывать передан-ный аргумент:

Попытка изменить аргумент без такого модификатора будет пресечена компилятором:

Чтобы произвольно изменять значение, требуется ука-зать модификатор is copy.

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

Необязательные параметры (которые должны идти пос-ледними в списке) помечают вопросительным знаком. До-полнительно можно указать значение по умолчанию:

И наконец Perl 6 позволяет объявлять анонимные функ-ции с помощью стрелки:

# sub-args.p6

callme(10, 20);callme(second => 7, first => 8);sub callme ($first, $second){ say "\$first = $first, \$second = $second";}

Extra space found after &callme (...) – did you mean &callme(...) instead?

# sub-rw.p6my $string = "before";callme($string);say $string; # aftersub callme ($value is rw){ $value = "after";}

*** Can't modify constant item: VRef <Scalar:0x1c6cfc4> at sub-rw.p6 line 9, column 9-25

# sub-slurp.p6my @odd = (1, 3, 5);my @even = (2, 4, 6);view(@odd, @even);sub view (@a, @b){ say @a; say "&"; say @b;}

# sub-optional.p6callme(1, 2); # 1, 2callme(3); # 3, 4sub callme ($a, $b? = 4){ say "$a, $b";}

# sub-anonymous.p6

my $anonymous = -> ($value){ say $value * 2;}$anonymous(10); # 20

# double-slash.p6my $a = "a";my $b = "b";my $c;say $b // $a; # bsay $c // $a; # a

# interval.p6my $x = 5;say "yes" if 0 < $x < 10;if 0 < $x < 10 {say "yes"}

# contexts.p6my @array = (5..10);

# Строковый контекстsay ~@array; # 5 6 7 8 9 10

# Числовой контекст (возвращается размер массива)say int @array; # 6say +@array; # 6

# Два модификатора контекстаsay ~ hash @array; # напечатает содержимое в два столбца

my $value = 100;

# Булевый контекстsay ?$value; # 1 (то есть истина)

Page 85: 048 Системный Администратор 11 2006

83№11, ноябрь 2006

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

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

Перегрузка функцийКлючевое слово multi разрешает перегружать функции, то есть создавать несколько функций с одинаковым назва-нием, но разным типом или числом аргументов.

Перегрузка операторовВозможность перегружать не только функции, но и опера-торы явно придется по вкусу любителям C++. Perl 6 позво-ляет с помощью ключевых слов prefix, infix и postfix опре-делять собственную семантику предопределенных опера-торов либо создавать новые:

gather и takeВ Perl 6 появилась удобная пара gather/take, которая по-могает избежать вспомогательного массива, когда нуж-но сохранять промежуточные результаты в циклических операциях.

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

given, when и defaultКлючевые слова given, when и default предназначены для ор-ганизации конструкции типа switch в C:

Блоки when могут содержать и более сложные конс-трукции, например, сопоставление с регулярным выра-жением:

Программа напечатает isaplha, поскольку буква «y» сов-падает с символьным классом <[a-z]> в регулярном выра-жении.

Новые регулярные выраженияВ документации на Perl 6 большой раздел посвящен ново-му синтаксису (не будет ошибкой сказать – новой идеоло-гии) регулярных выражений. Кроме правил (regexps) те-перь существуют грамматики (grammars), их объединяю-щие. Например, ранняя версия компилятора Perl 6, входя-щая в состав Parrot, при первом запуске создавала файл Perl6grammar.pm, описывающий синтаксис Perl 6, записан-ный в виде грамматики Perl 6. Подробное рассмотрение но-вых регулярных выражений требует отдельной статьи.

Классы и ролиКлассы и роли – одно из самых существенных нововве-дений в Perl 6. Формально поддержка ООП была и в Perl 5, но «классы» являлись просто хешами с некоторыми до-полнительными возможностями. Механизмы ООП в Perl 6 проще для понимания и образуют намного более стройную модель. Чтобы научиться применять классы, программис-там, знакомым с другими объектными языками, достаточ-но познакомиться с синтаксисом, присущим Perl 6. Для оп-ределения класса служит ключевое слово «class»:

Объекты класса создаются с помощью оператора new:

Члены-данные объявляют, используя has. Точка перед именем является признаком того, что переменная объяв-ляется как открытая (public в общепринятой терминологии); отсутствие точки делает ее закрытой (private):

# sub-reload.p6multi sub action ($scalar){ say "scalar";}multi sub action ($scalar, $scalar){ say "two scalars";}multi sub action (@array){ say "array";}action(10); # scalaraction(10, 11); # two scalarsmy @arr = (1, 2);action(@arr); # array

# xfix.p6

multi infix:<+> ($a, $b){ return $a - $b;}say 10 + 20; # -10sub postfix:<@> ($power){ 2 ** $power;}say 8@; # 256

# gather.p6say gather{ for 1..5 -> $c { take $c; }}

# given.p6my $x = 'y';given ($x){ when "a" {say 'First letter'} when "b" {say 'Second letter'} default {say "Is '$x'"}}

given ($x){ when /<[a-z]>/ {say 'isalpha'}}

# class.p6class Alphabet{}

my $abc = new Alphabet;

class Alphabet{ has $.Name; has $Length;}my $abc = new Alphabet;$abc.Name = 'Latin'; # синтаксически верно#$abc.Length = 26; # ошибка

Page 86: 048 Системный Администратор 11 2006

84

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

При создании объекта возможно инициализировать члены-данные:

Классы могут содержать методы; они так и объявляют-ся с ключевым словом «method»:

Обратите внимание: хотя теперь обе переменные объ-явлены закрытыми, при обращении к ним из методов клас-са все равно необходима точка: $.Name. Конструктор и де-структор – это методы с именами BUILD и DESTROY.

Классы можно наследовать, причем в Perl 6 допусти-мо множественное наследование. Чтобы создать произ-водный класс, нужно указать базовый после ключевого слова «is»:

Разрешено и множественное наследование:

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

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

Perl 6 на бумагеКниг, посвященных Perl 6, пока исключительно мало.

Первая Perl 6 Essentials выпущена издательством O’Reilly летом 2003 года (ISBN 0-596-00499-0) и переизда-на через год под измененным названием Perl 6 and Parrot Essentials (ISBN 0-596-00737-X). Второе издание переведе-но на русский язык: «Perl 6 и Parrot: справочник». М.: «Ку-диц-образ», 2005. ISBN 5-9579-0086-9. Обе книги написа-ны Э. Рэндалом, Д. Сугальски и Л. Тёчем.

Во время издания этих книг разговор о Perl 6 не мог обойтись без более или менее детального описания Parrot. Поэтому значительная часть книги посвящена языку ас-семблера Parrot.

К сожалению, по этим книгам нельзя научиться програм-мировать на Perl 6, поскольку описанные языковые конс-трукции либо остались нереализованными, либо радикаль-но изменились. Эти книги теперь можно назвать «истори-ческими» или «идеологическими».

В 2005 году вышла в свет книга Скота Вальтерса Perl 6 Now. The Core Ideas Illustrated with Perl 5. Примеры кода час-то используют модули Perl6::* и, возможно, не будут рабо-тать в «настоящем Perl 6» в том виде, в каком они опуб-ликованы (впрочем, от этого не застрахованы и примеры из моей статьи). Примеры кода из книги доступны на сай-те www.perl6now.com.

Perl 6 в ИнтернетеНа русском языке:1. http://perl6.ru – блог, в котором я описываю процесс ос-

воения Perl 6. Первая запись на этом сайте появилась в 2003 году.

2. http://real.perl6.ru – первый в России сайт, работающий под управлением Perl 6. Здесь есть несколько крошеч-ных примеров того, как можно написать CGI-приложе-ние на Perl 6.

3. http://www.dklab.ru/chicken/perl6 – перевод фрагментов первых версий «Откровений» Ларри Уолла.

4. http://www.parrotcode.ks.ua/docs – перевод документа-ции ранней версии Parrot.

На английском языке:1. http://dev.perl.org/perl6 – сайт Perl Development: Perl 6, ко-

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

2. http://perlcabal.org/syn – на этой странице, названной Official Perl 6 Documentation, содержится хорошо струк-турированный сборник основных «правовых» докумен-тов.

3. http://www.parrotcode.org – Parrot Virtual Machine. Исход-ные коды и другая информация про Parrot.

4. http://www.pugscode.org – сайт Pugs.5. http://perl6.org, http://perl6.info – архивы рассылок perl6-

users, perl6-languages и других, посвященных языку.6. http://www.programmersheaven.com/2/Perl6-FAQ – све-

жий FAQ с примерами кода.7. http://www.cpan6.org – находящийся на зачаточной ста-

дии новый CPAN, ориентированный на новый язык.8. http://en.wikipedia.org/wiki/Perl_6 – Perl 6 в «Википедии».

role HaveName{ has $.Name; method GetName { return $.Name; }}class NamedAplhabet does HaveName{}my $abc = NamedAplhabet.new(Name => 'English');say $abc.GetName();

my $abc = Alphabet.new(Name => 'Latin', length => 26);say $abc.Name;

class Alphabet{ has $Name; has $Length; method Info { return "Aplhabet '$.Name' contains ↵ $.Length letters."; }}

class Characters is Alphabet{}my $chars = new Characters;say $chars.Info();

class Unique;class Characters is Alphabet is Unique{}

Page 87: 048 Системный Администратор 11 2006
Page 88: 048 Системный Администратор 11 2006

86

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

История компьютерных вирусов

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

Илья Александров

Page 89: 048 Системный Администратор 11 2006

87№11, ноябрь 2006

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

Предвестники электронных эпидемийСказать, где и когда появился пер-вый вирус, невозможно, поскольку та-ких данных в природе не существует. Если на «компьютере» Чарльза Бэб-биджа, «отца» первой вычислитель-ной машины, вирусов ещё не было, к середине семидесятых годов про-шлого века они стали весьма рас-пространенным и неприятным для большинства явлением. Тем не ме-нее, предпосылки к их созданию по-явились практически сразу же с со-зданием первых ЭВМ.

Еще в 1940 году математик Джон фон Нейман написал книгу, в кото-рой были описаны самовоспроизво-дящиеся математические автоматы, то есть принципы, которые легли в ос-нову всех вирусов. В 1959 году аме-риканский научный журнал «Scientific American» опубликовал статью Л. Пен-роуза, рассказывавшую о самостоя-тельно распространяющихся биоло-гических структурах. Автор рассмот-рел способности подобных структур к мутациям, активации и размноже-нию. Другой ученый, Ф. Шталь, полу-ченные из этой статьи знания реали-зовал на практике. Работая операто-ром в научно-исследовательской ла-боратории, он имел доступ к мощней-шей для того времени ЭВМ – IBM 650. Эксперимент очень удивил Шталя, превзойдя все его ожидания. Полу-чившийся в результате «мутации» математических алгоритмов элект-ронный «зверек» удалил все следы своих «родителей», присутствовав-ших в системе, после чего самоунич-тожился.

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

В 1961 году среди компьютерщиков была очень популярна игра «Darwin». Её сюжет и смысл были просты: иг-рок руководил «расой», которая долж-

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

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

70-е годы: началоПоявление первого в мире компью-терного вируса было зафиксировано в начале 70-х годов прошлого столе-тия, когда на просторах военной ком-пьютерной сети APRAnet – прароди-тельницы современного Интернета – была найдена программа Creeper. Ви-рус был написан для распространен-ной в те времена операционной сис-темы Tenex, в которую он проникал, распространяясь через модемную связь. На экран зараженных компью-теров периодически выводилась над-пись: «I’M THE CREEPER: CATCH ME IF YOU CAN». Деструктивных дейс-твий Creeper не совершал, ограничи-ваясь лишь этим сообщением, раз-дражавшим пользователей. Чуть поз-же для него было написано «противо-ядие» – программа Reaper, находив-шая файл с вирусом и удалявшая его. Распространялась она, кстати, ана-логичным с Creeper способом. Можно сказать, что первый в мире антивирус был создан «по аналогии с вредонос-ной программой».

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

Другой пример – логическая игра Pervading Animal для операционной системы Exec 8, смысл которой за-ключался в отгадывании пользовате-лем загаданного программой живот-

ного. Если ему это не удавалось, иг-ра предлагала модернизировать ее, после чего появлялась возможность задавать дополнительные наводящие вопросы.

Модифицированная версия про-граммы странным образом начина-ла копироваться в другие директории, в результате чего через некоторое время во всех папках жесткого диска содержалась копия Pervading Animal. Так как в то время каждый килобайт пространства был «на вес золота», по-добное поведение игры мало кого об-радовало. До сих пор не ясно, была ли это ошибка программистов либо же за-думка вирусописателей. Впрочем, про-блема была быстро решена – новая версия операционной системы Exec 8 базировалась на другом типе фай-ловой системы, на которой програм-ма засорять файловое пространство больше не могла.

80-е: первые эпидемииК восьмидесятым годам прошлого сто-летия компьютер перестал быть рос-кошью, доступной лишь избранным. Владельцев ПК становится все боль-ше, кроме того, обмен информаци-ей между пользователями с помощью электронных досок объявлений (BBS – Buletin Board System) достиг междуна-родного масштаба.

В 1981 году произошла первая по-настоящему массовая вирусная эпи-демия. Пострадали широко распро-страненные в то время компьютеры Apple II. Вирус Elk Clone записывался в загрузочные секторы дискет в мо-мент обращения к ним пользователя. Elk Clone искажал изображение на мо-ниторе, выводил на экран различные текстовые сообщения, заставлял ми-гать текст. Неискушенные пользовате-ли впадали от действий вируса в оце-пенение, в то время как он сам продол-жал «перемещаться» с одного компью-тера на другой.

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

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

История компьютерных вирусов

Page 90: 048 Системный Администратор 11 2006

88

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

граммы при помощи их модификации с целью внедрения своих копий».

В 1986 году 19-летний пакиста-нец Басит Фарук Алви написал вирус Brain. Также как и Elk Clone, Brain по-ражал загрузочные сектора дискет. Программа не была ориентирована на какие-либо разрушительные функ-ции, она лишь меняла метку всех дис-кет на «(С)Brain». Как утверждает ав-тор, он преследовал только одну цель – выяснить уровень компьютерного пи-ратства у себя в стране. Но уже через несколько недель после активации ви-руса зараженными оказались тысячи компьютеров по всему миру, что вы-звало настоящий переполох среди пользователей и бурю обсуждений в средствах массовой информации. В Brain был впервые использован при-ем, когда при чтении зараженного сек-тора диска вирус подставлял вместо этого раздела незараженный.

В 1988 году была создана пер-вая вредоносная программа, кото-рая не просто заражала компьютер, но и наносила ему реальный вред. Этот вирус был создан в Лехайском университете, в котором, кстати, рабо-тал ранее упоминавшийся Фред Коэн. Вирус Lehigh уничтожал информацию на дисках, поражая системные файлы COMMAND.COM. Наличие квалифи-цированных специалистов в универ-ситете оказалось спасением – за сте-ны учебного заведения он так и не про-брался. Впрочем, немалую роль в уст-ранении угрозы эпидемии сыграл и ал-горитм самого Lehigh – во время фор-матирования винчестеров он само-уничтожался вместе с остальной ин-формацией.

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

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

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

В середине 80-х годов появился тер-мин «Virus Hoax» – «вирусная мистифи-кация». В конце восьмидесятых пользо-ватели панически боялись вирусов: ми-фы о программах, выводящих из строя аппаратную часть ПК, будоражили ум каждого владельца компьютера. Virus Hoax были ничем иным, как ложными слухами о новых компьютерных эпи-демиях. Вспоминается история, когда один шутник разослал на разные BBS сообщения о появлении нового виру-са, который распространялся через модемы, работавшие со скоростью пе-редачи информации 2400 бит в секун-ду. Чтобы не заразиться вирусом, ав-тор рекомендовал перейти на модемы со скоростью 1200 бит/с. И что вы ду-маете? Масса пользователей выброси-ла более быстрые модемы ради своей «безопасности».

В 1988 произошла первая эпиде-мия, вызванная сетевым компьютер-ным вирусом. Впоследствии такие ви-русы стали именоваться «червями».

Созданная неким Робертом Моррисом программа поражала компьютеры, ра-ботавшие под ОС UNIX. В планы созда-теля не входило нанесение вреда сис-теме, червь должен был лишь проник-нуть в сеть ARPAnet и оставаться там незамеченным. Вирус обладал воз-можностью вскрытия паролей в ОС, и в списке выполнявшихся процессов детище Морриса отображалось в виде обычного пользовательского процесса. Червь стремительно саморазмножал-ся и пожирал все свободные ресурсы компьютера, вследствие чего из строя выходили целые серверы. Некото-рые из них смогли вернуться к работе лишь через пять суток, поскольку вак-цины против червя не существовало. За время своего «хождения по миру» вирус поразил около 6000 компьютер-ных систем, затронув даже компьюте-ры исследовательского центра NASA. Роберт Моррис отделался 400 часами общественных работ, но вошел в исто-рию как автор первого разрушительно-го сетевого червя.

90-е: полиморфные вирусыВ начале 90-х годов прошлого столе-тия английская компания Sophos, в ко-торой работали Ян Храске, Эд Уайл-динг и Питер Лэймер, приступила к вы-пуску журнала «Virus Bulletin». Virus Bulletin рассказывал о компьютерных вирусах, а также обо всех аспектах защиты от них. Авторами журнала яв-лялись программисты, руководители антивирусных компаний, разработчи-ки ПО. Журнал был некоммерческим: за всю его историю в нем не было на-печатано ни одного рекламного объяв-ления. Из-за этого Virus Bulletin не по-лучил широкой распространенности. Его читателями были в основном про-фессионалы в сфере IT (информаци-онных технологий), а также сотрудни-ки компьютерных фирм.

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

ОБСУЖ ДАЕМ НА ФОРУМЕ ЖУРНАЛАВы можете прочитать журнал от корки до корки. И еще раз прочитать. И еще. А по-том обсудить с коллегами самое интересное на форуме: http://www.samag.ru/forum.

Уже идет обсуждение тем: Управляем серверами в реальном вре-

мени

Перспективы профессии Настройка работы FreeBSD и Windows Аутсорсинг IT Как получить DVD-диск с архивом но-

меров журнала И многое другое

Задайте интересующие вас вопросы, поделитесь своим мнением!

Page 91: 048 Системный Администратор 11 2006

89№11, ноябрь 2006

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

пьютере будет отличаться от предыду-щей. Первым подобным вирусом стал Chameleon, написанный Марком Ваш-бёрном. После появления полиморф-ных программ неотъемлемой частью антивируса стал эмулятор для дешиф-рации кодов, впервые использованный Евгением Касперским.

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

В это же время была опубликова-на книга «Маленькая Черная Книж-ка о Компьютерных Вирусах» Марка Людвига. Она стала «Библией» всех создателей вирусов. Была сформи-рована так называемая «VX-сцена» – сообщество программистов, специа-лизирующихся на создании компью-терных вирусов.

Конструкторы вредоносных программВ 1992 году хакер, известный под ни-ком Dark Avenger, выпустил в свет ути-литу MtE (Mutation Engine). С её помо-щью любой, даже самый примитивный вирус можно было сделать полиморф-ным. Этим же человеком был впервые создан вирус Peach, наделенный спо-собностью обходить антивирусное ПО. Peach удалял базу изменений програм-мы Central Point AntiVirus. Эта програм-ма, не находив свою базу данных, счи-тала, что запущена впервые, и созда-вала её вновь. Таким образом, вирус обходил защиту и продолжал зара-жать систему.

Группа программистов, извест-ная в сети, как Nowhere Man, выпус-тила конструктор вирусов VCL (Virus Creation Laboratory). Отныне любой школьник, даже не владеющий язы-ками программирования, мог воору-житься конструктором и собрать ви-рус любого типа и разрушительной силы. С появлением VCL и так нема-лый «поток» новых компьютерных вредителей стал просто огромным. Стоит ли удивляться, что спустя не-сколько дней после выхода в свет ОС Windows 3.11 появилась и первая де-структивная программа под эту плат-форму? Win.Vir_1_4 поражал испол-

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

Первый арестованный вирусописательНа протяжении 1993-94 годов свет увидели новые конструкторы виру-сов: PS-MPC и G2. Сгенерированные ими вредоносные программы стали самой распространенной опасностью в Интернете.

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

Лидерство в этой области посте-пенно завоевала компания Symantec, частью которой стали крупнейшие производители антивирусного про-граммного обеспечения: Central Point и Fifth Generation Systems.

Эпидемия нового полиморфного вируса, Pathogen, уже не была событи-ем из ряда вон выходящим, к подобно-го рода событиям все уже начали при-выкать. Однако это был первый вирус, автор которого был найден и осуждён. Безработный Кристофер Пайл за со-здание вредоносных программ был приговорен к 18 месяцам тюремного заключения.

Атака на MicrosoftВ 1995 году все разосланные бета-тес-терам диски с операционной системой

Windows 95 были заражены загрузоч-ным вирусом Form. К счастью, один из них обнаружил неладное, и на при-лавки магазинов поступила нормаль-ная, незараженная система.

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

В 1996 году первую эпидемию пе-режили пользователи Windows 95 – их компьютеры были поражены загру-зочным вирусом Boza. В июле того же года создатели макровирусов пере-ключились с Word на редактор элек-тронных таблиц MS Excel, выпустив для него вирус Laroux.

Не заставили себя ждать и рези-дентные вирусы, использующие серви-сы «нулевого кольца» ОС. Win95.Punch загружался в систему как VxD-драй-вер, перехватывал обращения к фай-лам и заражал их.

Антивирусные склокиК 1997 году операционная систе-ма Linux, ранее считавшаяся опло-том «чистоты и стабильности», боль-ше не являлась платформой, свобод-ной от вирусов. Linux.Bliss, распростра-нявшийся посредством конференций UseNet, заражал исполняемые фай-лы этой ОС.

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

Вирусы для мобильных устройствВ 2000 году был впервые найден ви-рус для платформы PalmOS. Программа Phage.936 переходила между КПК во вре-мя передачи через ИК-порт. При зараже-нии карманного компьютера могли быть удалены некоторые файлы, а приложе-ния часто самопроизвольно закрывают-ся. С тех пор появилось несколько десят-ков вирусов для различных платформ КПК, хотя они не столь разнообразны и «гибки», как их «собратья» для персональных ком-пьютеров.

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

Page 92: 048 Системный Администратор 11 2006

90

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

многочисленных «дыр» mIRC – основ-ного клиента подобных сетей.

Под конец ХХ века в погоне за ли-дерством стали нередки скандалы среди производителей антивирусов. Так, представители компании McAfee объявили о том, что ее программис-ты обнаружили ошибку в антивиру-се фирмы Dr.Solomon’s. Суть заявле-ния сводилась к тому, что Dr.Solomon’s мог находить новые и технически со-вершенные вирусы только в специ-альном «усиленном» режиме, в ко-торый переключался лишь после на-хождения обычных, примитивных чер-вей. В результате антивирус показы-вал хорошие скоростные результа-ты при сканировании незараженных дисков, и отличные показатели обна-ружения при работе с зараженными файлами. В ответ Dr.Solomon`s пода-ла иск в суд на McAfee, причиной ко-торого стала её «некорректно постро-енная рекламная компания». В итоге вся «заварушка» завершилась покуп-кой McAfee контрольного пакета акций Dr.Solomon`s.

Спустя некоторое время публичное заявление сделали тайваньские раз-работчики из фирмы Trend Micro, об-винившие McAfee и Symantec в якобы «нарушении их патента на сканирова-ние данных». Миру были сразу пред-ставлены доказательства о «безгреш-ности» компаний, однако Trend Micro добилась своего, получив отменную бесплатную рекламу в средствах мас-совой информации.

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

CIH (1998) – ущерб, нанесенный вирусом, составил порядка 80 мил-лионов долларов. Вирус был написан программистом из Тайваня, и стал од-ним из самых разрушительных в ис-тории. «Чих» заражал исполняемые файлы и активировался каждый год 26 апреля – в день годовщины аварии на Чернобыльской АЭС. CIH перезапи-сывал FlashBIOS, после чего материнс-

кие платы становились непригодными к использованию. Первый и последний вирус, который наносил вред аппарат-ной части ПК.

Melissa (1999) – 26 марта 1999 года этот макровирус, распространявший-ся по электронной почте, заразил око-ло 20% офисных компьютеров по все-му миру. Крупнейшие корпорации, та-кие как Intel, были вынуждены прекра-тить работу внутри своих локальных сетей. Ущерб – от 300 до 500 милли-онов долларов.

ILOVEYOU (2000) – скрипт, напи-санный на макроязыке Visual Basic. Так же как и Melissa, распространялся по электронной почте с темой письма «I love you». Вирус рассылал свои копии по всем данным адресной книги поч-тового клиента. Все логины и пароли, найденные червем на компьютере, от-сылались автору программы. Послед-ний, кстати, и не пытался скрываться: он является жителем Филиппин, где на-казаний за компьютерные преступле-ния не предусмотрено.

Code Red (2001) – сетевой червь, использующий ошибку в сетевом сер-висе Microsoft IIS. В заданный день за-раженные компьютеры должны были начать DDOS-атаку по списку различ-ных серверов, среди которых были сис-темы правительства США. Огромные масштабы эпидемии и как итог – убыт-ки в 2,5 миллиарда (!) долларов.

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

Sobig.F (2003) – сетевой червь, распространявшийся по электронной почте. Размножавшийся с огромной скоростью вирус скачивал на заражён-ный компьютер дополнительные фай-лы, «сжигая» трафик и ресурсы систе-мы. Интересная особенность – 10 сен-тября вирус прекращал свою деятель-ность, больше не представляя угрозы для пользователя. Автор Sobig.F, за ин-формацию о котором Microsoft пред-лагала 250 тыс. долларов, не найден до сих пор.

Bagle (2004) – сетевой червь, рас-пространявшийся по классическому способу, используя файловые вложе-ния в электронных письмах. На зара-

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

MyDoom (2004) – в январе 2004 го-да этот вирус молниеносно распро-странился по всему Интернету, в ре-зультате чего средняя скорость загруз-ки сайтов в глобальной сети уменьши-лась на 50%. Червю принадлежит ре-корд по скорости распространения: ме-нее чем за сутки было заражено около двух миллионов компьютеров. Точную цифру из-за масштабов эпидемии при-вести невозможно. Вирус был создан неизвестным программистом в качес-тве эксперимента, и самостоятельно прекратил свою деятельность 12 фев-раля того же года.

Sasser (2004) – вирус вызвал «пе-рерыв» в работе французских спутни-ковых каналов передачи данных, от-менил рейсы некоторых авиакомпа-ний, не говоря уже об обычных ком-пьютерах, чья работа была полно-стью приостановлена. Распростра-нялся Sasser благодаря ошибке в сис-теме безопасности Windows 2000 и XP, запуская на зараженном компьюте-ре сканер портов. Вирус был написан 17-летним немецким школьником. Ин-тересен тот факт, что парень запус-тил вирус в сеть в День своего совер-шеннолетия.

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

Ну а нам остаётся лишь уповать на милость компаний-производите-лей антивирусов и следить за защи-щённостью своих систем.

Редактор рубрикиДмитрий Мороз

1. http://www.viruslist.com/ru – вирусная энциклопедия, описание всех вирусов. Новости и аналитические обзоры.

2. http://vx.netlux.org – журналы, статьи о вирусах. Исходные коды и руководс-тва.

Page 93: 048 Системный Администратор 11 2006

91№11, ноябрь 2006

bugtraq

Уязвимость состояния операции в OpenSSHПрограмма: OpenSSH 4.3, возможно более ранние вер-сии.Опасность: Высокая.Описание: Уязвимость состояния операции существует из-за ошибки в обработке сигналов при включенной аутенти-фикации GSSAPI. Удаленный пользователь может вызвать отказ в обслуживании и потенциально выполнить произ-вольный код на целевой системе.URL производителя: http://www.openssh.org.Решение: Установите последнюю версию (4.4) с сайта про-изводителя.

Множественные уязвимости в универсальной криптографической библиотеке OpenSSLПрограмма: OpenSSL 0.9.xОпасность: Высокая.Описание: 1. Уязвимость существует из-за ошибки при об-работке некорректных ASN.1-структур. Удаленный пользо-ватель может вызвать зацикливание приложения, исполь-зующего OpenSSL для обработки ASN.1-данных. Версии до 0.9.7 не уязвимы.

2. Некоторые публичные ключи требуют много времени для их обработки и могут быть использованы для DoS-ата-ки на приложение, использующее OpenSSL для обработ-ки ASN.1-данных.

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

4. Уязвимость существует из-за ошибки в клиентском коде SSLv2. Злоумышленник может использовать уязвимый клиент для создания SSLv2 соединения к серверу.URL производителя: http://www.openssl.org.Решение: Установите последнюю версию (0.9.7l или 0.9.8d и выше) с сайта производителя.

Уязвимость форматной строки в SkypeПрограмма: Skype 1.5.*.79 и более ранние версии для Mac OS.Опасность: Высокая.Описание: Уязвимость существует из-за ошибки формат-ной строки при обработке URL-аргументов. Удаленный пользователь может с помощью специально сформирован-ного URL, содержащего символы форматной строки, выпол-нить произвольный код на целевой системе.URL производителя: http://www.skype.com/download/skype/macosx.Решение: Установите последнюю версию (1.5.0.80) с сай-та производителя.

Множественные уязвимости в Mac OS XПрограмма: Apple Macintosh OS X версии до 10.4.8.Опасность: Высокая.Описание: 1. Уязвимость существует из-за ошибки в ком-поненте CFNetwork, которая позволяет злонамеренному SSL-сайту выдать себя за доверенный сайт для клиентов CFNetwork (например, браузер Safari).

2. Исправлены уязвимости в Flash Player, которые поз-воляли удаленному пользователю обойти ограничения бе-зопасности и скомпрометировать целевую систему.

3. Уязвимость существует из-за ошибки провер-ки границ данных в компоненте ImageIO при обработке JPEG2000-изображений. Удаленный пользователь может с помощью специально сформированного изображения вызвать переполнение буфера и выполнить произвольный код на целевой системе.

4. Уязвимость существует в механизме обработки оши-бок ядра Mach exception ports. Локальный пользователь мо-жет повысить свои привилегии на системе.

5. Непроверяемое состояние ошибки в компоненте LoginWindow может позволить локальному пользователю получить доступ к Kerberos-тикету после неудачной попыт-ки входа в систему.

6. Ошибка в компоненте LoginWindow во время обработ-ки Fast User Switching может позволить другим локальным пользователям получить доступ к Kerberos-тикету.

7. Логическая ошибка в LoginWindow компоненте может позволить сетевым учетным записям без GUID обойти ог-раничения на доступ службы LoginWindow.

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

9. Уязвимость существует из-за ошибки поврежде-ния памяти при обработке PICT-изображений в QuickDraw Manager. Удаленный пользователь может с помощью спе-циально сформированного PICT-изображения выполнить произвольный код на целевой системе.

10. Ошибка в SASL может позволить злоумышленнику вызвать отказ в обслуживании службы IMAP.

11. Уязвимость существует из-за ошибки управления памятью в WebKit при обработке HTML-кода. Удаленный пользователь может с помощью специально сформиро-ванной страницы выполнить произвольный код на целе-вой системе.

12. Ошибка в Workgroup Manager может позволить не-которым учетным записям использовать слабый механизм шифрования паролей.URL производителя: http://www.apple.com/macosx.Решение: Установите последнюю версию (10.4.8) с сайта производителя.

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

Page 94: 048 Системный Администратор 11 2006

92

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

Автор этой книги не нуждается в пред-ставлении. Уильям Станек по пра-ву заслужил уважение миллионов пользователей и администраторов Windows, опубликовав более 10 книг, по этой ОС.

В этом фундаментальном труде автор обобщает свой опыт использо-вания Windows Server 2003. Автор на-чал изучение этой ОС с первых альфа-

Издание – перевод знаменитой книги от культовой фигуры Oracle-сообщест-ва – Тома Кайта. Сразу отмечу, что из-дание адресовано прежде всего спе-циалистам, для новичков оно будет сложным. К сожалению, перевод кни-ги не всегда корректен, что потенци-ально грозит непониманием инфор-мации в полном объеме. Но несмотря

и бета-версий (в то время проект назы-вался Windows Whistler).

Спектр рассмотренных тем поисти-не всеобъемлющ. Установка Windows Server 2003 (подготовка и начало ус-тановки, интерактивная и автоматизи-рованная установка, службы удален-ной установки). Обновление и мигра-ция. Управление Windows Server 2003 (оборудование: настройка и устране-ние неполадок, управление реестром, мониторинг и настройка производи-тельности, комплексный анализ и ре-гистрация событий). Управление запо-минающими устройствами и файловой системой (обеспечение высокой до-ступности, подготовка и размещение серверных кластеров, управление за-поминающими устройствами). Сете-вые службы и службы печати (управ-ление DHCP, проектирование, реали-зация и поддержка DNS, использова-ние удаленного рабочего стола, а так-

Эффективная работа: Windows Server 2003Уильям Станек

же вопросы, связанные с развертыва-нием служб терминалов). Чрезвычай-но подробно рассмотрены вопросы ра-боты с Active Directory – архитектура, проектирование и управление домен-ной средой, настройка сайтов и реп-ликации AD. Не остались без внима-ния и вопросы планирования восста-новления после аварий и резервного копирования.

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

Эффективное проектирование приложений OracleТомас Кайт

на все это, вы откроете для себя ог-ромное количество нужной и актуаль-ной информации. В первой главе, ко-торая носит название «Правильный подход к созданию приложений», ав-тор рассказывает об общих требова-ниях при проектировании приложе-ний, методологии их разработки, до-статочно подробно освящены вопро-сы, связанные с производительнос-тью. Далее вы познакомитесь с основ-ными инструментами, которые помогут вам настроить систему на максималь-ную производительность (SQL*Plus, EXPLAIN PLAN, AUTOTRACE, TKPROF, Runstats, Statspack, DBMS_PROFILER). В главе «Архитектурные решения» То-мас Кайт повествует о преимуществах кластеризации, применении секциони-рования, использовании параллель-ных операций. Достаточно подроб-но освещены вопросы эффективно-го администрирования – использова-

ние SPFILE для запуска базы данных, восстановление данных, управление пространством в сегменте и сегмента-ми отката (UNDO). Обработка опера-торов (выполнение команд, запросы – от начала до конца, использование переменных привязки). Большое вни-мание уделено проектированию эф-фективных схем, применению языков SQL и PL/SQL. В общем и целом кни-га оставила благоприятное впечатле-ние, и если бы не явные ошибки в пе-реводе, издание можно было бы на-звать одним из лучших по теме Oracle на русском языке.

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательстким домом

«Вильямс».

«Лори»

2006

638

5-85582-251-6

≈ 488 руб.

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством «Питер».

«Питер»

2007

1104

5-469-01005-8

≈ 602 руб.

Page 95: 048 Системный Администратор 11 2006

93№11, ноябрь 2006

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

Как правильно заметил автор книги, многие люди, сразу начавшие осваи-вать программирование для Windows на уровне MFC и Windows Forms, не за-трагивая Win32 API, впоследствии сталкиваются с рядом неразрешимых задач при создании более-менее се-рьезных приложений. Цель этой кни-ги – в простой и доступной форме рас-сказать читателю о Win32 API. Сразу

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

UML 2.0. Объектно-ориентированное моделирование и разработкаДжеймс Рамбо, Майкл Блаха

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

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

Win32 API. Эффективная разработка приложенийЮрий Щупак

хочется отметить, что объяснение те-мы начинается с самых азов, с «Hello, World!», а это значит, что даже нович-ки в программировании смогут начать освоение материала этой книги без ви-димых сложностей. Постепенно осваи-вая материал, вы узнаете о GDI – гра-фическом интерфейсе устройства, на-учитесь рисовать фигуры, линии, выво-дить текст. Далее ознакомитесь с па-литрами, растрами и метафайлами. Подробно рассмотрены вопросы рабо-ты со средствами ввода. В главе «Ре-сурсы Windows-приложения» вы най-дете информацию об основных ресур-сах, которые могут быть использова-ны вами в той или иной разрабатыва-емой программе (пиктограммы, кур-соры, растровые образы). Достаточно подробно рассмотрены вопросы созда-ния меню и работы с «быстрыми клави-

Обзор книжных новинок подготовил Александр Байрак

шами», диалоговыми окнами, а также элементами управления общего поль-зования. Из главы «Многозадачность» вы узнаете об объектах ядра, процес-сах и потоках, а также методиках их уп-равления. Не остались без внимания вопросы синхронизации и обмена дан-ными между процессами. В приложе-нии вы найдете описание интегриро-ванных сред Micorosoft Visual C++ 6.0 и Visual Studio.NET. Большое количес-тво примеров и различных схем и таб-лиц помогут вам усвоить весь излагае-мый материал в кратчайшие сроки.

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством «Питер».

«Питер»

2007

572

5-469-01361-8

≈ 400 руб.

Издательство:

Год издания:

Количество страниц:

ISBN:

Цена:

Книга предоставлена издательством «Питер».

«Питер»

2007

544

5-469-00814-2

≈ 538 руб.

Page 96: 048 Системный Администратор 11 2006

94

подписка на 2007 год

Редакционная подписка для физических лиц Подписку Вы можете оформить

на любой российский адрес. При заполнении разборчиво укажи-

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

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

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

В графе «Сумма» проставьте сум-му за выбранное количество номе-ров. Стоимость одного номера жур-нала 150 руб. За год – 1800 руб.НДС и почтовые расходы включе-ны в стоимость.

Копию заполненного и оплаченно-го бланка отправьте в редакцию по факсу: (495) 628-8253 или на элек-тронный адрес: [email protected]

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

Page 97: 048 Системный Администратор 11 2006

95№11 ноябрь 2006

подписка на 2007 год

Российская Федерация Подписной индекс: годовой – 20780, полугодовой – 81655 Каталог агентства «Роспечать» Подписной индекс: 87836 Объединенный каталог «Пресса России» Адресный каталог «Подписка за рабочим столом» Адресный каталог «Библиотечный каталог» Альтернативные подписные агентства: Агентство «Интер-Почта» (495) 500-00-60, курьерская

доставка по Москве Агентство «Вся Пресса» (495) 787-34-47 Агентство «Курьер-Прессервис» Агентство «ООО Урал-Пресс» (343) 375-62-74 ЛинуксЦентр www.linuxcenter.ru Подписка On-line http://www.arzi.ru http://www.gazety.ru http://www.presscafe.ru

СНГ В странах СНГ подписка принимается в почтовых отделе-ниях по национальным каталогам или по списку номенк-латуры «АРЗИ»: Азербайджан – по объединенному каталогу россий-

ских изданий через предприятие по распространению

печати «Гасид» (370102, г. Баку, ул. Джавадхана, 21) Казахстан – по каталогу «Российская Пресса» через

ОАО «Казпочта» и ЗАО «Евразия пресс» Беларусь – по каталогу изданий стран СНГ через РГО

«Белпочта» (220050, г. Минск, пр-т Ф. Скорины, 10) Узбекистан – по каталогу «Davriy nashrlar» российс-

кие издания через агентство по распространению пе-чати «Davriy nashrlar» (7000029, г. Ташкент, пл. Муста-киллик, 5/3, офис 33)

Армения – по списку номенклатуры «АРЗИ» через ГЗАО «Армпечать» (375005, г. Ереван, пл. Сасунци Да-вида, д. 2) и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул. Сарьяна, 22)

Грузия – по списку номенклатуры «АРЗИ» через АО «Сакпресса» ( 380019, г. Тбилиси, ул. Хошараульская, 29) и АО «Мацне» (380060, г. Тбилиси, пр-т Гамсахурдия, 42)

Молдавия – по каталогу через ГП «Пошта Молдовей» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)

по списку через ГУП «Почта Приднестровья» (МD-3300, г. Тирасполь, ул. Ленина, 17)

по прайс-листу через ООО Агентство «Editil Periodice» (МД-2012, г. Кишинев, бул. Штефан чел Маре, 134)

Подписка для Украины: Киевский главпочтамт Подписное агентство «KSS», тел./факс (044)464-0220

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

20780*

81655**

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

87836

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

* годовой** полугодовой

Page 98: 048 Системный Администратор 11 2006

96

СИСТЕМНЫЙ АДМИНИСТРАТОР№11(48), Ноябрь, 2006 год

УЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

РУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинРедакторАлексей КоршуновВнештатные редакторыАлексей БарабановСергей СупруновКрис КасперскиАлексей ШелестовАлексей МичуринДмитрий МорозАндрей Бирюков

РЕКЛАМНАЯ СЛУЖБАтел./факс: (495) 628-8253Евгения Тарабринаreс[email protected]

Верстка и оформление[email protected]Дизайн обложкиНиколай Петрочук

По вопросам распространенияобращайтесь по телефону:(495) 628-8253 (доб. 120)

107045, г. Москва,Ананьевский переулок, дом 4/2, стр. 1тел./факс: (495) 628-8253Сайт журнала: www.samag.ru

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»Отпечатано типографиейГП «Московская Типография №13»Тираж 11000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати, телерадиовещания и средств массо-вых коммуникаций (свидетельство ПИ № 77-12542 от 24 апреля 2002 г.).

За содержание статьи ответственность несет автор. За содержание реклам-ных материалов ответственность не-сет рекламодатель. Все права на опуб-ликованные материалы защищены.

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Уважаемые читатели!

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

Годовой индекс по каталогу «Роспечать» – 20780.Интер-почта – заказ журналов по тел.(495) 500-00-60.

Подписка on-line – SetBook.ru.

Приобрести новые и старые номера журналавы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

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

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

Microsoft ISA Server 2004 – многофункциональный межсетевой экранНаличие подключения к Интернету на сегодняшний день – неотъемлемая часть ведения бизнеса в любой сфе-ре. Однако, помимо удобств, которые предоставляются глобальной сетью, от нее может исходить и масса угроз: атаки хакеров, вредоносные приложе-ния, утечка информации, нежелатель-ная почта. Для борьбы существует мно-жество как аппаратных, так и програм-

мных решений. Если у вас сеть под уп-равлением MS Windows, то вам навер-няка знаком такой продукт как Microsoft ISA Server 2004 – один из наиболее распространенных межсетевых экра-нов. Об особенностях его работы и пой-дет речь в следующем выпуске.

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

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