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

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

№5(30) май 2005


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

СЬ
www.samag.ru

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

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

WPA-Enterprise, 802.1x EAP-TLS


НУ

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

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

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

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

№11(48) ноябрь 2006


НИ НО

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

С
полями пользователей в AD

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

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


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

www.samag.ru

MS Windows XP SP3,

№11(48) ноябрь 2006


И
или Много шума из ничего

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

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

РА Е О

КО НЕО
Разрабатываем пакет
АВ СЛ
Л

Л
ХА

ПО
УЕ

управления для МОМ 2005

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

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


Linux HA + OpenVZ
Ищем причины
Строим защищенную беспроводную сеть:

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


WPA-Enterprise, 802.1x EAP-TLS
Настраиваем UPS под Linux
Как восстановить
удаленные файлы под BSD
Что важно знать об IP-телефонии

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

Безопасность в FreeBSD:
разбираемся в тонкостях
применения jail
Работаем с NTLM-
авторизацией Apache
в домене MS Windows 2003
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! Чего ждать от Perl 6
Роспечать – 20780, 81655 Интервью с создателем
Пресса России – 87836 популярного ресурса OpenNET
Интер-почта – тел. (495) 500-00-60
в номере
ИНТЕРВЬЮ БЕЗОПАСНОСТЬ
2 Linux-десктопы должны быть 42 Выявление угроз информационной
привлекательными безопасности внутри компании
Пол Гийе (Paul Guillet), ответственный за продажи Простейшие способы для диагностики системы за-
Mandriva, рассказывает о ближайших планах компании. щиты. Никита Дуров
Дмитрий Шурупов info@samag.ru
osa@samag.ru
45 Внутренние IT-угрозы в банке превосходят
5 ТЕНДЕНЦИИ по значимости все остальные
О том, как важно правильно защитить банк от внутрен-
АДМИНИСТРИРОВАНИЕ них IТ-угроз, рассказывает председатель совета дирек-
торов Банка высоких технологий Игорь Триф.
6 Кластеризация + виртуализация: Анна Верхось
Linux HA + OpenVZ info@samag.ru
Часть 1: кластеризация на практике
Как одновременно уменьшить количество физических 46 FreeBSD jail: зона строгого режима
серверов, требующих обслуживания, и при этом про- Разбираемся в тонкостях работы с jail.
дублировать их, обеспечив автоматическое переклю- Сергей Супрунов
чение на резервный сервер при отказе основного. amsand@rambler.ru
Евгений Прокопьев
eugene.prokopiev@gmail.com 53 Полезные советы: Bacula
Сергей Яремчук
14 MS Windows XP SP3, или Много шума grinder@ua.fm
из ничего
Третий пакет обновлений для MS Windows XP напоми- 54 Ошибки синхронизации открывают
нает второй том «Мертвых душ»: его пишут где-то там, большие возможности для хакеров
за границей, его все ждут, вспоминая предыдущий ва- Каковы механизмы защиты?
риант, о нем уже сочиняют небылицы… Крис Касперски
Алексей Барабанов kk@sendmail.ru
alekseybb@mail.ru
62 Kerberos и электронная почта
22 Разрабатываем пакет управления для МОМ Cпособ интеграции SMTP-сервера Postfix и IMAP/POP3
Как написать свой пакет управления Microsoft Operations сервера Сyrus-IMAP в систему единой регистрации поль-
Manager 2005 для одной из наиболее важных служб ва- зователей Heimdal-Kerberos. Михаил Кондрин
шей сети. Андрей Бирюков mkondrin@hppi.troitsk.ru
mex_inet@rambler.ru
68 Работаем с NTLM-авторизацией Apache
27 Полезные советы: PostgreSQL в домене MS Windows 2003
Сергей Супрунов Подробности настройки.
amsand@rambler.ru Владимир Василькин
vasil1979@mail.ru
28 На что способен дистрибутив
SystemRescueCd Linux 74 Защищаем PHP-приложения с помощью
Наверняка вам приходится восстанавливать системы Suhosin
после сбоя и использовать для этого наборы дистри- Обзор проекта Suhosin.
бутивов и Live-CD различного назначения. Есть единое Сергей Яремчук
и компактное решение «все в одном». grinder@ua.fm
Иван Максимов
ivan_maksimov@inbox.ru ПРОГРАММИРОВАНИЕ
34 Автоматизируем процесс установки 78 Чего ждать от Perl 6
обновлений с PatchQuest 4 Perl готовится сделать новый рывок и оставить конку-
Обзор утилиты PatchQuest 4, предназначенной для ав- рентов позади. До круглой цифры счетчику версий ос-
томатизации управления и установки патчей, исправ- талось совсем немного. Андрей Шитов
лений и модификаций на операционные системы и при- andy@shitov.ru
ложения. Сергей Яремчук
grinder@ua.fm РЕТРОСПЕКТИВА
ЧЕЛОВЕК НОМЕРА 86 История компьютерных вирусов
К ним уже привыкли. Их не боятся школьные учите-
38 Виртуальные радости и открытия ля информатики, о них не пишут на первых полосах
Максима Чиркова газет. Но они продолжают выполнять свою разруши-
Ведущий OpenNET.ru, самого популярного русскоязыч- тельную миссию. Илья Александров
ного ресурса, посвященного открытым технологиям, це- ilya_al@rambler.ru
нит независимость открытых проектов и возможность
поделиться информацией с человечеством. 92 КНИЖНАЯ ПОЛКА
Оксана Родионова
rodion@dol.ru 73, 91 BUGTRAQ

№11, ноябрь 2006 1


интервью

Mandriva: Linux-десктопы должны быть


привлекательными

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

2
интервью
Главной инновацией вашего пос-
леднего десктоп-продукта, Mandriva Пол Гийе (Paul Guillet) занялся Linux-биз- в Mandriva, где теперь занимает должность
Linux 2007 [1], стало появление несом еще в 1995 году и был директором директора по продажам. Стоит отметить,
«трехмерного окружения» рабоче- одного из крупнейших Linux-реселлеров что из этой же компании (IdealX) в Mandriva
го стола – технологий Xgl и AIGLX. на территории Франции («Les Logiciels du перешел и ее нынешний главный технолог
Многие представители сообщества Soleil/KHEOPS»). В 1999 году стал соос- Дэвид Барт (David Barth).
считают, что эти разработки еще не- нователем и исполнительным директо- (По материалам http://www.mandriva.com/
достаточно стабильны, а вы их уже ром IdealX SAS, а в начале 2003 г. пришел en/company/about/executives.)
включили в дистрибутив, предна-
значенный для домашних пользо- тельском рынке. ем любую хорошую идею, предостав-
вателей. Например, DVD-плейер (имеется ляемую нам сообществом. Причем, ко-
Если вы сегодня хотите занять какое- в виду LinDVD. – Прим. ред.): люди нечно, под GPL.
либо место в мире информационных хотят просматривать видео без пот- Если же затрагивать тему проприе-
технологий с решениями на базе Linux, ребности в проведении каких бы то тарных драйверов для устройств... да,
необходимо предоставить людям про- ни было изощренных манипуляций они есть, но ведь это естественная со-
дукты, которые будут как минимум с системой. Раньше у нас такого не ставляющая современного мира.
на том же уровне, что и предложения было, и пользователям приходилось
от компаний вроде Apple и Microsoft, тратить дополнительное время на то, Касательно вашего слияния
или превосходить их. Рассматривае- чтобы добиться успеха в просмот- с Conectiva [2]. Какие проекты бра-
мые возможности, на наш взгляд, до- ре DVD. Но мы решили отказаться от зильской компании перешли в со-
статочно стабильны, чтобы включить этого принципа и перейти на сторо- став дистрибутива Mandriva?
их в дистрибутив Mandriva. Если бы ну потребителей, которые хотят уви- Имеет больший с мысл говорить
они таковыми не были, то их, естес- деть систему, где «все просто работа- не о конкретных проектах, а о наших
твенно, и не интегрировали бы в ста- ет». Их позиция такова: «Как здесь что- объединившихся командах. Об изме-
бильный релиз на этом этапе. Novell, либо функционирует, меня не интере- нении организации компании, в кото-
например, давно уже включила Xgl сует. Я обычный пользователь, нужда- рой возникло 2 подразделения: одно
в свой продукт. ющийся в рабочей среде, где все есть в Бразилии, а другое – во Франции...
«из коробки».
Novell во многом и способствова- То есть ключевой целью здесь было
ла разработке Xgl, поэтому впол- В своих продуктах вы совмещаете расширение рынка для дистрибути-
не логично, что она и стала первой, свободное ПО с проприетарным, что ва за счет географии?
кто представил результат обще- многими рассматривается как мо- Именно так. Это означает, что наши
ственности в своем продукте. Осо- ветон. Нет ли у вас планов по вы- коллективы смешались, образовав
бенно учитывая ее растущее проти- делению бесплатного дистрибути- интернациональную команду. Все те-
воборство с Red Hat... ва с полностью открытым кодом кущие продукты Mandriva – факти-
У нас есть свои проекты в Бразилии, ко- наподобие Fedora Core, openSUSE чески сейчас их пять – создаются сов-
торые мы продвигаем совместно с быв- от коммерческого? местными усилиями разработчиков
шими сотрудниками Conectiva, что ста- Это действительно сложный вопрос и из Mandriva, и из бывшей Conectiva.
ли частью нашей команды. А Novell – для меня. Думаю, такая схема пока Сейчас у нас порядка 8 миллионов
это очень большая компания, в которой плохо применима к Mandriva в отли- пользователей во всем мире. Пред-
работают тысячи людей. И все они, мо- чие от Red Hat и Novell. Последняя, на- ставителей Франции среди них – 10%.
жете не сомневаться, борются за свои пример, существует уже 25 лет и ус- Благодаря слиянию с Conectiva в Ла-
рабочие места. В Mandriva все иначе. пела за это время заработать нема- тинской Америке у нас около 25% поль-
В первую очередь я имею в виду скром- лые деньги для инвестирования в мар- зователей. Европа составляет около
ный штаб. Но когда мы объединились кетинг. Такой Open Source-проект – 40%, а США – 25%. У нас интернацио-
с Conectiva, взяли на вооружение все это средство для достижения цели (ко- нальная компания, и мы сделали дис-
интересные разработки из дистрибу- ей в данном случае является продава- трибутив доступным для таких стран,
тива этой компании. емый дистрибутив). как Россия, США, Азербайджан. Боль-
Мы пытаемся продвигать лучшее Сообщество, сложившееся вок- шое внимание мы уделяем локализа-
из того, что у нас есть, в США и Се- руг Mandriva, многое значит для нас. циям, потому что это важно для про-
верной Америке, в Европе. При созда- Около 1000 сторонних разработчи- движения на международном рын-
нии продуктов мы преследуем цель от- ков помогают нам работать над про- ке, – нужно показывать пользовате-
ветить текущим потребностям рынка, дуктами. Без них мы погибнем. Изме- лям уважение к их национальным осо-
а он требует дружелюбного и простого нения в дистрибутиве провоцируются бенностям.
в использовании Linux для десктопов. сообществом: если мы не будем слу-
Поэтому мы включаем в состав дист- шать этих ребят, то они просто уйдут К вопросу о Mandriva в России [3].
рибутива и решения, которых нет у той от нас куда-нибудь – скажем, в Ubuntu. Почему вы выбрали нашу страну
же Novell, а эта компания представля- Это и есть лучшая гарантия для наших для популяризации своего дистри-
ется главным конкурентом на потреби- пользователей. Поэтому мы реализу- бутива?

№11, ноябрь 2006 3


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

О будущ их деск топ - решениях:


как вы думаете, смогут ли новые
технологии вроде Xgl полностью
Мы считаем, что сейчас очень подходя- Мы установили контакты с некоторы- вытеснить существующие привыч-
щее время для нашего продукта здесь. ми производителями для создания та- ные графические среды? Нужны
Важно было выбрать нужный момент кого канала распространения. Рынок ли пользователям все эти визуаль-
для «вхождения» в такие страны, железа сильно изменяется, в разви- ные красоты?
как Азербайджан, Грузия и другие быв- вающихся странах 80% национально- Когда домашние пользователи ищут
шие советские республики. Не сомне- го рынка составляют не Dell, HP, IBM замену продукции Microsoft на настоль-
ваюсь, что люди из этих регионов сей- и другие представители «большой пя- ных ПК, их обычно интересуют не тех-
час ищут что-то... другое. терки», а продукция от компаний вро- нические аспекты. Они хотят получить
де Asus и Gigabyte. Linux же постепен- живой, симпатичный и притягивающий
Отличное от решений Microsoft? но проникает в эти страны. Так что интерфейс. Они хотят получить не «де-
Да. Но для того чтобы они заинтересо- мы открыли программу для продви- сктоп для бедных», а напротив – «де-
вались в каком-либо решении, со сто- жения Mandriva по этим каналам, и она сктоп для богатых». Linux на настоль-
роны производителя необходима под- уже неплохо работает. Таким спосо- ных ПК должна смотреться более сек-
держка их языка, понимание мест- бом в Бразилии продается порядка суально, чем решения MS.
ной экономики и особенностей этой 30 000 копий дистрибутива в месяц. Общаясь с нашими клиентами,
страны. Думаем, что эта тенденция со време- с конечными пользователями, я по-
нем дойдет и до России. нял, что им для десктопов нужна
А как насчет стран Азии? Индия, Ки- действительно красивая и удобная
тай, Япония? Недавно вы также выпустили но- система.
Пока мы пытаемся сосредоточиться вую версию своего корпоративно-
на развивающихся странах. Индия, го продукта – Corporate Server 4.0 [4]. Что ж, посмотрим, как с этим в даль-
в меньшей степени Китай (хотя у не- Это решение существует уже не нейшем будут справляться любители
го большой потенциал), страны СНГ, первый год, однако, судя по СМИ, удобств и простоты из Mandriva...
Россия – среди наших главных при- нишу дистрибутивов для Linux-сер-
оритетов. веров прочно заняли RHEL и SLES, текст Дмитрия Шурупова,
К нам проявляют интерес заказ- и никаких посылок к серьезным пе- фото Владимира Положевца
чики из России, Азербайджана, Лат- ременам тут не предвидится.
вии, Грузии, Казахстана... Мы идем на- На данный момент от Corporate Server 1. Анонс Mandriva Linux 2007 – http://www.
встречу в сотрудничестве с различны- у нас около 10% прибыли. У нас есть nixp.ru/news/7809.
ми странами – так и создается бизнес и крупные корпоративные заказчики. 2. Mandrakesoft поглощает Conectiva –
в Mandriva: это даже не бизнес, а пос- Во Франции, например, это Минис- 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.
давались ПК с предустановленной На днях Novell представила Linux ре- 5. Novell выпустит Suse Linux Enterprise
Mandriva Linux. Планируется ли раз- ального времени [5]. Не планируете Real-Time – http://www.nixp.ru/news/
витие этого направления? ли вы расширение линейки своих 7770.

4
тенденции
У Mozilla и Firefox появились трудниками компании MySQL AB. Одновременно с тем
GNU-ответвления для разработчиков запустили веб-сайт MySQLForge
Неуступчивая в вопросах лицензирования политика Mozilla (http://forge.mysql.com).
привела к тому, что проект GNU представил свои редакции «Эта дифференциация нацелена на лучшее обслужи-
ее продуктов Mozilla и Firefox. вание обеих категорий пользователей MySQL: тем, кто го-
Авторы так прокомментировали свое решение по запус- тов потратить время для экономии денег, и тем, кто хочет
ку этой инициативы: «Хотя исходный код проекта Mozilla яв- потратить деньги для экономии времени», – прокомменти-
ляется свободным программным обеспечением, выпуска- ровал изменения в своем блоге Кай Арно (Kaj Arno), вице-
емые ими бинарные сборки содержат дополнительное не- президент по делам с сообществом в MySQL AB.
свободное ПО. Кроме того, они распространяют несвобод-
ное ПО в виде плагинов». Консорциум SQO-OSS проверит качество
Приложения получили названия Gnuzilla и IceWeasel со- Open Source
ответственно. Имя последнего еще в 2004 году придумал Европейская комиссия учредила очередной Open Source-
Натанаэл Нерод (Nathanael Nerode): «Лед – это не Огонь, проект: созданному при ее содействии консорциуму
а Ласка – не Лиса, так что это, очевидно, другой пакет SQO-OSS (Quality Observatory for Open Source Software)
(мы не хотим, чтобы Mozilla критиковали за наши ошибки, уже перечислили около 4 млн. долларов для тестирования
и каких-либо проблем с их торговыми марками), однако с та- качества программного обеспечения с открытым кодом.
кой же очевидностью и относящийся к оригиналу». В SQO-OSS вошли исследовательские организации,
Разработчики проекта Debian GNU/Linux, известно- консультанты и некоторые проекты Open Source (среди
го своей требовательностью к лицензионной «чисто- них, например, KDE). Половину средств консорциум полу-
те», еще до появления этого сообщения объявили о том, чил от своих участников, а об остальном побеспокоилась
что в следующем стабильном релизе вместо оригиналь- сама Европейская комиссия.
ного Firefox в дистрибутив войдет несколько измененная SQO-OSS будет предоставлять (под лицензией BSD)
версия браузера. результаты по тестированию качества исходного кода про-
дуктов Open Source с целью выявления степени их готов-
Компания iXsystems купила права ности для использования в корпоративной среде. Вдоба-
на PC-BSD вок будет опубликована таблица рейтинга приложений с от-
Специализирующаяся на корпоративном аппаратном крытым кодом.
обеспечении iXsystems приобрела права на основанную
на FreeBSD операционную систему PC-BSD. Составил Дмитрий Шурупов
по материалам www.nixp.ru
Ожидается, что таким образом проект 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 ориентирован на сообщес-
тво и должен помочь разработчикам ПО с открытым ко-
дом обмениваться информацией между собой и с со-

№11, ноябрь 2006 5


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

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

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

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


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

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

Ч
ем больше сервисов находится
в вашем попечении и чем в боль- Кластеры  Кластеры распределения нагруз-
шей степени от их работоспособ- В Википедии (http://wikipedia.org) кластер ки – позволяют распределить боль-
ности зависит нормальное функциони- определяется как группа серверов, связан- шое количество запросов между не-
рование предприятия, тем более акту- ных логически и способных обрабатывать сколькими узлами для снижения на-
альным становится обеспечение: идентичные запросы. Серверы в составе грузки на каждый конкретный узел
 отказоустойчивости – от просто- кластера называются узлами или нодами и уменьшения времени ожидания от-
го резервного копирования важ- (Node). Каждый узел имеет собственный вета на запрос.
ных данных до систем высокой набор ресурсов, которые он предоставля-  Кластеры высокой готовности – поз-
готовности (High Availability), ког- ет в пользование кластеру. Выделяют сле- воляют гарантировать максимальную
да при выходе из строя основно- дующие типы кластеров: надежность благодаря избыточному ко-
го сервера его функции автома-  Кластеры повышенной производи- личеству узлов, таким образом, отказ
тически берет на себя резервный тельности – позволяют уменьшить одного из узлов не сказывается на ра-
сервер; время, требуемое для проведения ботоспособности системы в целом.
 консолидации сервисов и сокра- сложных расчетов, разбивая задание
щения количества физических на параллельно выполняющиеся пото- В этой статье нас будет интересовать
серверов, требующих обслужи- ки, часто используются в научных ис- только последний тип – кластеры высокой
вания, – от простого размещения следованиях. готовности.
нескольких сервисов на одном фи-
зическом сервере до использова- шние по отношению к проекту Linux HA Чаще всего в связке с Heartbeat ис-
ния различных систем виртуали- средства организации распределенно- пользуется DRBD (http://drbd.org), вер-
зации, изолирующих сервисы друг го файлового хранилища. сия 7 которой обеспечивает более вы-
от друга. В их качестве могут выступать: сокую производительность и надеж-
 классические распределенные ность по сравнению с классическими
На первый взгляд эти задачи про- файловые системы (OCFS, CODA, распределенными файловыми систе-
тивоположны, однако их вполне можно GFS, Lustre), позволяющие орга- мами. DRBD версии 8 движется в сто-
совместить, если обеспечить отказоус- низовать параллельный доступ рону своих конкурентов, пытаясь со-
тойчивость не каждого сервиса в отде- к файлам с нескольких компьюте- хранить собственные преимущества,
льности, а группы сервисов, работа- ров одновременно; но к промышленной эксплуатации она
ющих в виртуальных средах. Именно  средства автоматического зерка- пока еще не готова.
этим мы сейчас и займемся. лирования разделов жесткого дис- Что же касается виртуализации,
ка на двух компьютерах, обеспечи- то здесь выбор гораздо шире, и опре-
Инструменты вающие доступ к файлам на чтение деляется он тем, что именно мы соби-
Сначала определимся с требуемым и запись только с одного компью- раемся виртуализировать и сколько
инструментарием исходя из того, тера (программные – DRBD и аппа- аппаратных ресурсов мы готовы пот-
что нас интересуют только решения ратные – IBM ServeRAID); ратить. По этим критериям можно вы-
с открытым исходным кодом.  прочие средства, которые в прин- делить 3 типа виртуализации (класси-
Если требуется гарантировать ципе использовать можно, но либо фикация приведена по докладу Кирил-
отказоустойчивость сервису, кото- их надежность (NFS, CIFS), либо ла Колышкина и Кирилла Коротаева,
рый сам по себе отказоустойчивым стоимость (SAN) являются непри- прозвучавшему во время Третьей Меж-
не является и встроенных механиз- емлемыми. дународной конференции разработчи-
мов кластеризации не имеет, то осо-
бых альтернатив проекту Linux HA
(http://linux-ha.org) нет.
Основным компонентом проекта
является менеджер кластера Heartbeat,
предоставляющий средства коммуни-
кации между узлами кластера (в том
числе механизм оповещения об отклю-
чении/включении узла) и управления
ресурсами кластера. Для сервисов,
решающих только вычислительные
задачи, этого может быть достаточно,
но большинство сервисов имеют при-
вычку также хранить свои настройки
и данные на диске. Чтобы они были
доступны сервису независимо от то-
го, на каком узле кластера он в дан-
ный момент работает, требуются вне- Рисунок 1. Кластеризация + виртуализация

№11, ноябрь 2006 7


администрирование
ется максимально возможная плот-
Виртуализация сэкономить на стоимости оборудова- ность размещения виртуальных сред
Это система разделения ресурсов ком- ния и затратах на обслуживание. по сравнению с двумя предыдущими
пьютера на множество независимых сред  Разработка и тестирование ПО – типами. Из трех открытых проектов,
(виртуальных серверов), каждая из кото- виртуализация позволяет использо- предназначенных для Linux, наиболее
рых с точки зрения запущенных в ней про- вать одновременно множество различ- функциональным и быстрее всего раз-
грамм выглядит как обычный выделенный ных операционных систем и их версий, вивающимся выглядит OpenVZ, кото-
сервер. Физический компьютер, на котором различные версии библиотек, различ- рый также является основой для про-
работают виртуальные среды, называет- ные конфигурации – и при этом легко приетарного продукта Virtuozzo фир-
ся host-системой или HN (Hardware Node), клонировать существующие конфигу- мы SWSoft. Более того, на wiki проек-
для обозначения самих виртуальных сред рации и откатываться назад после не- та довольно коротко уже описана удач-
часто используются такие термины, как удачных экспериментов. ная попытка «скрестить» его с проек-
гостевая система, раздел (partition), кон-  Обучение – в этом случае каждому сту- том Linux HA – http://wiki.openvz.org/
тейнер (container), VE, VPS, VDS. денту можно без опасений выдать пра- HA_cluster_with_DRBD_and_Heartbeat.
Основными областями применения ва администратора, а затем, в случае Поэтому пойдем уже проторенной до-
виртуализации являются: необходимости, легко восстановить рогой и попытаемся построить анало-
 Консолидация серверов – позволяет разрушенную им систему. гичное решение.
В качестве платформы для постро-
ков свободных программ на Протве – Zones/Containers, Linux VServer, ения нашего решения выбран ALT Linux
http://kir.vtx.ru/lj/openvz-intro-ru.pdf): Linux OpenVZ, Linux FreeVPS) – поз- Sisyphus (http://sisyphus.ru), и есть не-
 Эмуляция (примеры реа лиза- воляет в наибольшей степени сни- сколько причин такого выбора:
ции: QEmu, Bochs) – фактически зить накладные расходы и добить-  у меня уже имеется опыт успешной
это полная эмуляция аппаратно- ся максимальной производитель- эксплуатации решений на дистри-
го обеспечения, позволяющая за- ности за счет того, что все вирту- бутивах от ALT вообще и Sisyphus
пускать в виртуальной среде лю- альные среды обслуживает одно в частности;
бую операционную систему, одна- специально модифицированное  использование Sisyphus предпо-
ко производительность таких ре- ядро операционной системы. Со- лагает минимум ручной работы,
шений сравнительно низкая. ответственно запускать не только т.к. Linux HA и OpenVZ уже работа-
 Паравиртуализация (примеры ре- различные операционные системы, ют в нем «из коробки».
ализации: Xen, User-mode Linux) – но даже разные версии ядра не по-
позволяет запускать в виртуаль- лучится, да и доступ к аппаратным Что нам предстоит
ной среде специально модифици- ресурсам внутри виртуальной сре- сделать
рованную для этой среды опера- ды во многом будет ограничен. В качестве простого примера возь-
ционную систему, соответственно мем ситуацию, когда нам требуется
запустить можно не все, но то, что Как мне кажется, с точки зрения сконфигурировать почтовый сервер
запустить удастся, будет работать промышленной эксплуатации, а не тес- и сервер БД.
быстрее. тирования различного ПО, наиболь- Возможны следующие подходы
 Виртуализация на уровне опе- шее значение имеет именно виртуа- к решению данной задачи:
рационной системы (примеры лизация на уровне операционной сис- 1. Традиционный – для каждой за-
реализации: FreeBSD Jail, Solaris темы, так как в этом случае достига- дачи выделяется и конфигуриру-
ется отдельный физический сер-
вер. В случае сбоя одного из сер-
веров мы лишимся, как минимум,
тех сервисов, которые этот сервер
предоставляет. В худшем случае,
учитывая, что сервисы могут зави-
сеть друг от друга (а конфигурации,
в которых почтовый сервер интен-
сивно использует сервер БД, не так
уж редки), мы можем лишиться го-
раздо большего.
2. Кластеризация – физические сер-
веры (точнее, сервисы, работаю-
щие на этих серверах) дублиру-
ются средствами Linux HA. В этом
случае надежность значительно
увеличивается, но возрастает так-
же количество серверов и затраты
Рисунок 2. Особенности внутрикластерных сетевых соединений на их обслуживание.

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

Проект «Sisyphus» ными сотрудниками компании ALT Linux. же есть выбор: использовать дистрибутив,
Sisyphus (http://sisyphus.ru) – ежедневно об- Все остальные – это независимые разра- построенный на основе Sisyphus, или нет).
новляемый репозиторий пакетов свобод- ботчики, которые часто являются сотруд- Что выбрать, наверное, зависит в первую
ных программ. Участие в Sisyphus откры- никами других организаций, использую- очередь от вашего опыта.
то для всех желающих. В основе Sisyphus щих Sisyphus в своем бизнесе. Имя проекту дал Sisyphus (Сизиф) –
лежат технологии сборки программ и уче- Очень важно понимать, что Sisyphus персонаж греческой мифологии. Миф
та зависимостей между ними, а также от- в чистом виде, как и любая слишком быс- о Сизифе, который непрерывно катил в го-
работанные процессы по взаимодействию тро меняющаяся система, в большинстве ру камни, символизирует постоянный труд
между разработчиками. Для использова- случаев не предназначен для использо- ALT Linux Team по усовершенствованию ре-
ния Sisyphus достаточно наличие любо- вания рядовыми пользователями, не при- шений, заложенных в репозиторий.
го дистрибутива ALT Linux (либо Sisyphus нимающими даже минимальное участие В настоящее время в стадии подго-
Live-CD) и средства управления пакета- в его развитии или хотя бы не отслежива- товки находится книга «Сизифов труд:
ми программ APT. Sisyphus является пос- ющими состояние наиболее критичных для Ежегодный альманах о свободном ПО
тоянно развивающимся набором реше- них компонентов системы, – и об этом явно (Sisyphus 2006)», в которую в качест-
ний, на основе которого возможно созда- сказано на сайте проекта. Для таких поль- ве главы войдет часть материала статьи.
ние универсальных или специализиро- зователей более удачным выбором будут Эта книга должна стать чем-то вроде пер-
ванных дистрибутивов Linux, а также оди- дистрибутивы и специализированные ре- вого выпуска альманаха, в котором бу-
ночных решений. Таковыми являются все шения на основе Sisyphus. дет подробно раскрыто несколько самых
дистрибутивы, выпускаемые компанией К сожалению, пока не один из таких актуальных тем, обсуждавшихся в про-
ALT Linux (http://altlinux.ru), другим приме- дистрибутивов не поддерживает описы- шедшие полгода в связи с разработкой
ром является дистрибутив RAD GNU/Linux ваемые в статье технологии виртуализа- Sisyphus. Срок выхода книги планируется
(http://radlinux.org) для маршрутизаторов, ции и кластеризации «из коробки», поэ- в соответствии с релиз-циклом Sisyphus,
Sisyphus Live-CD (http://www.unsafe.ru/ тому у вас есть выбор: использовать те- что позволит приложить к книге наиболее
lakostis/livecd) – еще один пример. кущий репозиторий, дожидаться заплани- подходящий для использования стабиль-
ALT Linux Team, которая занимается рованного на ближайшее время стабиль- ный срез репозитория. Дополнительная
развитием проекта, в настоящее время ного среза или пытаться построить анало- информация о книге доступна по ссылке
состоит из более чем 150 разработчиков, гичное решение на любом дистрибутиве https://heap.altlinux.ru/engine/Heap/Books/
только 1/5 часть которых является штат- Linux самостоятельно (и в этом случае то- AltLibrary/Sisyphus2006.

3. Виртуализация – для каждого сервера выделяется от-  eth0 – используется для подключения к внешней сети;
дельная виртуальная среда на общем физическом сер-  eth1 – будет использована далее при создании вирту-
вере. В этом случае увеличивается гибкость, теперь мы ального сервера router, поэтому адрес ей не присвоен;
не ограничены в количестве серверов и можем, напри-  eth2 – специально выделена для коммуникации между
мер, выделить отдельную виртуальную среду для орга- узлами кластера.
низации маршрутизатора/брандмауэра, ограничиваю-
щего доступ к почтовому серверу и серверу БД. Количес- Сначала настроим общие разделы узлов кластера
тво физических серверов и затраты на их обслуживание средствами DRBD. Установка DRBD производится штат-
уменьшаются, но вместе с ними уменьшается и надеж- ным для ALT Linux способом. Смотрим, какие пакеты име-
ность, которая может оказаться даже ниже, чем в слу- ются в наличии:
чае (1), если работоспособность серверов не зависит
друг от друга. [root@m1 ~]# apt-cache search drbd
4. Кластеризация + виртуализация – общий физичес- drbd-tools - Distributed Redundant Block Device utilities
кий сервер (точнее, один-единственный сервис – сис- kernel-modules-drbd-ovz-smp - Linux drbd kernel modules for DRBD.
kernel-modules-drbd-std-smp - Linux drbd kernel modules for DRBD.
тема виртуализации) дублируется средствами Linux HA, kernel-modules-drbd-std-up - Linux drbd kernel modules for DRBD.
тем самым мы совмещаем преимущества подходов (2) kernel-modules-drbd-std26-smp - Linux drbd kernel modules for DRBD.
и (3) ценой увеличения нагрузки на сервера по сравне- kernel-modules-drbd-std26-up - Linux drbd kernel modules for DRBD.
kernel-modules-drbd-vs26-smp - Linux drbd kernel modules for DRBD.
нию с подходом (1). 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.
ми последнего способа построения системы изображе-
на на рис. 1. Затем определяем, какое у нас ядро:
Переходим к деталям.
[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

ти внутрекластерных сетевых соединений, изображена


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

№11, ноябрь 2006 9


администрирование
[root@m1 ~]# apt-get install ↵ Starting Starting DRBD resources: service: [ d0 s0 n0 ].
kernel-modules-drbd-std26-up drbd-tools ...

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


ра, необходимый для работы DRBD, второй – userspace-инс- После чего на обоих узлах кластера мы должны уви-
трументы для управления DRBD. деть следующее:
Если вы используете другой дистрибутив Linux и уже го-
тового модуля для вашего ядра нет ни в одном из репози- [root@m1 ~]# service drbd status
ториев дистрибутива, модуль придется собрать самостоя- drbd driver loaded OK; device status:
тельно – архив с последними исходными кодами DRDB до- version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by builder@xeon.office.altlinux.ru,
ступен на http://oss.linbit.com/drbd. 2006-09-22 23:46:26
Конфигурирование DRBD сводится к редактированию 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
файла /etc/drbd.conf.
Минимальная, но вполне работоспособная конфигура-
ция будет выглядит так: Итак, раздел устройства /dev/drbd0 уже работает, но со-
держимое разделов /dev/hda3, лежащих уровнем ниже,
resource r0 { еще не синхронизировано.
# протокол передачи Первый раз синхронизацию необходимо произвести
# C: запись считается завершенной, если данные вручную, выполнив на узле m1:
# записаны на локальный и удаленный диск, подходит
# для критически важных транзакций и в большинстве
# остальных случаев [root@m1 ~]# drbdadm -- --do-what-I-say primary all
# B: запись считается завершенной, если данные
# записаны на локальный диск и удаленный буферный кэш
# A: запись считается завершенной, если данные После выполнения этой команды мы можем проследить
# записаны на локальный диск и локальный буфер tcp
# для отправки подходит для сетей за процесом синхронизации:
# с высокой задержкой
protocol C;
[root@m1 ~]# service drbd status
# описание узла m1 drbd driver loaded OK; device status:
on m1.mydomain.com {
version: 0.7.21 (api:79/proto:74)
device /dev/drbd0; # имя drbd-устройства
# раздел диска, поверх которого оно работает SVN Revision: 2326 build by builder@xeon.office.altlinux.ru,
disk /dev/hda3; 2006-09-22 23:46:26
# адрес и порт демона drbd 0: cs:SyncSource st:Primary/Secondary ld:Consistent
address 192.168.200.1:7788; ns:1972 nr:0 dw:0 dr:10164 al:0 bm:0 lo:0 pe:30 ua:2048 ap:0
# хранить метаданные drbd на том же разделе диска [>...................] sync'ed: 0.2% (3158696/3160552)K
meta-disk internal; finish: 0:26:19 speed: 1,856 (1,856) K/sec
}
# описание узла m2 После окончания синхронизации на узле m1 мы
on m2.mydomain.com { увидим:
device /dev/drbd0; # имя drbd-устройства
# раздел диска, поверх которого оно работает
disk /dev/hda3; [root@m1 ~]# service drbd status
# адрес и порт демона drbd
address 192.168.200.2:7788; drbd driver loaded OK; device status:
# хранить метаданные drbd на том же разделе диска version: 0.7.21 (api:79/proto:74)
meta-disk internal; SVN Revision: 2326 build by builder@xeon.office.altlinux.ru,
} 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
В комплекте с DRBD поставляется очень детальный при-
мер конфигурационного файла, в котором все параметры По строке Primary/Secondary можно определить, что сей-
прокомментированы. час узел m1 является ведущим. На ведомом узле m2 в вы-
Кроме того, если мы не используем udev (и созда- воде той же самой команды мы увидим Secondary/Primary.
вать устройство /dev/drbd0 некому), придется создать его Все операции с устройством /dev/drbd0 необходимо выпол-
вручную: нять только на ведущем узле, при этом все изменения бу-
дут автоматически применены к разделам /dev/hda3 на обо-
[root@m1 ~]# mknod /dev/drbd0 b 147 0 их узлах кластера.
Создадим на устройстве /dev/drbd0 файловую систему
Также необходимо прописать автозапуск сервиса drbd и примонтируем ее:
при загрузке узла:
root@m1 ~]# mkfs.ext3 /dev/drbd0
[root@m1 ~]# chkconfig --level 2345 drbd on mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Эти операции необходимо повторить на узле m2, а за- Block size=4096 (log=2)
тем на обоих узлах запустить сервис drbd: Fragment size=4096 (log=2)
395200 inodes, 790138 blocks
39506 blocks (5.00%) reserved for the super user
[root@m1 ~]# uname -a First data block=0

10
администрирование
Maximum filesystem blocks=809500672 мать самому, а лучше сгенерировать с помощью apg), ко-
25 block groups торая будет использоваться узлами для авторизации друг
32768 blocks per group, 32768 fragments per group
15808 inodes per group друга:
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912 auth 1
1 sha1 RcBkJzU8ClnrjWVRLv5EDsdRFQP1j1C
Writing inode tables: done
Creating journal (16384 blocks): done Также необходимо создать конфигурационный файл
Writing superblocks and filesystem accounting information: done
Heartbeat, который на узле m1 будет выглядеть так:
This filesystem will be automatically checked every 25 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override. Logfacility local0
ucast eth2 192.168.200.2
[root@m1 ~]# mkdir /d0 auto_failback on
[root@m1 ~]# mount /dev/drbd0 /d0 node m1.mydomain.com m2.mydomain.com
Если теперь мы попытаемся примонтировать устройс-
тво /dev/drbd0 на узле m2, мы получим следующее: а на m2 – так:

[root@m2 ~]# mkdir /d0 Logfacility local0


[root@m2 ~]# mount /dev/drbd0 /d0 ucast eth2 192.168.200.1
auto_failback on
/dev/drbd0: Input/output error node m1.mydomain.com m2.mydomain.com
mount: block device /dev/drbd0 is write-protected,
mounting read-only
/dev/drbd0: Input/output error Затем необходимо описать ресурсы кластера в файле
mount: /dev/drbd0 already mounted or /d0 busy /etc/ha.d/haresources на каждом узле:

Такое (вполне разумное) поведение гарантируется толь- m1.mydomain.com drbddisk ↵


Filesystem::/dev/drbd0::/d0::ext3
ко для ядер 2.6, в 2.4 была возможность примонтировать
устройство /dev/drbd0 на обоих узлах кластера одновре- Такая запись означает, что кластер в штатном режи-
менно, что в свою очередь могло привести к повреждению ме будет использовать ресурсы drbddisk и Filesystem узла
файловой системы. m1, а в случае его «смерти» – аналогичные ресурсы узла,
Чтобы все-таки примонтировать раздел /dev/drbd0 на уз- оставшегося в живых, то есть m2. Для ресурса Filesystem
ле m2, необходимо сделать его ведущим, выполнив на уз- заданы параметры: имя drbd-устройства, каталог, в кото-
лах m1 и m2 следующие команды: рый оно должно быть примонтировано (этот каталог мы
должны создать самостоятельно на каждом узле клас-
[root@m1 ~]# umount /d0 тера), и тип файловой системы. Узнать больше о ресур-
[root@m1 ~]# drbdadm disconnect all
[root@m2 ~]# drbdadm disconnect all сах, поддерживаемых heartbeat, можно заглянув в каталог
[root@m1 ~]# drbdadm secondary all /etc/ha.d/resource.d – каждый ресурс представлен там со-
[root@m2 ~]# drbdadm -- --human primary all
[root@m1 ~]# drbdadm connect all ответствующим скриптом.
[root@m2 ~]# drbdadm connect all Теперь можно запустить сервис heartbeat (не забыв пе-
[root@m2 ~]# mount /dev/drbd0 /d0
ред этим размонтировать устройство /dev/drbd0, если оно
В случае отказа узла m1 достаточно выполнить только те было примонтировано):
команды, которые приведены выше для узла m2. По боль-
шому счету, любители велосипедостроения (или оптималь- [root@m1 ~]# service heartbeat start
ных решений – иногда трудно отличить одно от другого) мо- logd is already running
гут этим и ограничиться: написать скрипт, который будет Starting High-Availability services: [ DONE ]

следить на доступностью соседнего узла, и монтировать


раздел /dev/drbd0, если соседний узел умер, можно само- После старта сервиса на ведущем узле кластера в ло-
стоятельно. Другой вопрос: зачем, если Heartbeat умеет де- гах можно увидеть такие сообщения:
лать и это, и многое другое?
m1 heartbeat: [3372]: info: Status update for node m2.mydomain.com:
Устанавливаем Heartbeat штатным для ALT Linux спо-
status active
собом: m1 harc[3395]: info: Running /etc/ha.d/rc.d/status status
m1 heartbeat: [3406]: info: Local Resource acquisition completed.
[root@m1 heartbeat]# apt-get install heartbeat m1 harc[3431]: info: Running /etc/ha.d/rc.d/ip-request-resp
ip-request-resp
m1 ip-request-resp[3431]: received ip-request-resp drbddisk OK yes
m1 ResourceManager[3446]: info: Acquiring resource group:
Установка Heartbeat для других дистрибутивов Linux m1.mydomain.com drbddisk Filesystem::/dev/drbd0::/d0::ext3
описана здесь http://www.linux-ha.org/DownloadSoftware. m1 ResourceManager[3446]: info:
На главной странице проекта также написано, что кро- Running /etc/ha.d/resource.d/drbddisk start
m1 Filesystem[3569]: INFO: Running status for /dev/drbd0 on /d0
ме Linux Heartbeat, собирается и запускается на FreeBSD, m1 Filesystem[3569]: INFO: /d0 is unmounted (stopped)
Solaris и даже MacOS X. m1 Filesystem[3505]: INFO: Filesystem Resource is stopped
m1 ResourceManager[3446]: info: Running
После установки Heartbeat на оба узла кластера на каж- /etc/ha.d/resource.d/Filesystem /dev/drbd0 /d0 ext3 start
дом узле необходимо создать файл /etc/ha.d/authkeys с пра- m1 Filesystem[3678]: INFO: Running start for /dev/drbd0 on /d0
m1 kernel: kjournald starting. Commit interval 5 seconds
вами доступа 600 и случайной строкой (ее можно приду-

№11, ноябрь 2006 11


администрирование
m1 kernel: EXT3 FS on drbd0, internal journal m2 kernel: drbd0: drbd0_receiver [3510]: cstate Unconnected -->
m1 kernel: EXT3-fs: mounted filesystem with ordered data mode. WFConnection
m2 heartbeat: [3739]: WARN: node m1.mydomain.com: is dead
m1 Filesystem[3614]: INFO: Filesystem Success
m2 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 status
m2 heartbeat: [3739]: info: Status update for node m1.mydomain.com: m2 heartbeat: [4384]: info: No local resources
status up [/usr/lib/heartbeat/ResourceManager listkeys m2.mydomain.com]
m2 harc[3752]: info: Running /etc/ha.d/rc.d/status status to acquire.
m2 heartbeat: [3739]: info: remote resource transition completed. m2 mach_down[4403]: info: Taking over resource group drbddisk
m2 heartbeat: [3773]: info: No local resources m2 ResourceManager[4423]: info: Acquiring resource group:
[/usr/lib/heartbeat/ResourceManager listkeys m2.mydomain.com] m1.mydomain.com drbddisk Filesystem::/dev/drbd0::/d0::ext3
to acquire. m2 ResourceManager[4423]: info: Running
/etc/ha.d/resource.d/drbddisk start
После старта heartbeat на обоих узлах кластера устройс- m2 kernel: drbd0: Secondary/Unknown --> Primary/Unknown
тво /dev/drbd0 будет примонтировано на ведущем узле. Ес- m2 Filesystem[4546]: INFO: Running status for /dev/drbd0 on /d0
m2 Filesystem[4546]: INFO: /d0 is unmounted (stopped)
ли остановить сервис heartbeat на ведущем узле m1, ведо- m2 Filesystem[4482]: INFO: Filesystem Resource is stopped
мый m2 возьмет на себя функции ведущего, и устройство m2 ResourceManager[4423]: info: Running
/etc/ha.d/resource.d/Filesystem /dev/drbd0 /d0 ext3 start
/dev/drbd0 будет примонтировано на нем, при этом в ло- m2 Filesystem[4655]: INFO: Running start for /dev/drbd0 on /d0
гах мы увидим: m2 kernel: kjournald starting. Commit interval 5 seconds
m2 kernel: EXT3 FS on drbd0, internal journal
m2 kernel: drbd0: Secondary/Primary --> Secondary/Secondary m2 kernel: EXT3-fs: recovery complete.
m2 heartbeat: [3739]: info: Received shutdown notice from m2 kernel: EXT3-fs: mounted filesystem with ordered data mode.
'm1.mydomain.com'. m2 Filesystem[4591]: INFO: Filesystem Success
m2 heartbeat: [3739]: info: Resources being acquired from m2 mach_down[4403]: info: /usr/lib/heartbeat/mach_down:
m1.mydomain.com. nice_failback: foreign resources acquired
m2 heartbeat: [3850]: info: acquire local HA resources (standby). m2 mach_down[4403]: info: mach_down takeover complete for node
m1.mydomain.com.
m2 heartbeat: [3851]: info: No local resources
m2 heartbeat: [3739]: info: mach_down takeover complete.
[/usr/lib/heartbeat/ResourceManager listkeys m2.mydomain.com]
to acquire.
m2 heartbeat: [3850]: info: local HA resource acquisition При повторном запуске сервиса heartbeat на m1 или
completed (standby). при включении узла m1 он снова станет ведущим.
m2 heartbeat: [3739]: info: Standby resource acquisition done
[all].
m2 harc[3870]: info: Running /etc/ha.d/rc.d/status status Что дальше
m2 mach_down[3880]: info: Taking over resource group drbddisk
Традиционно после конфигурирования общего файлового
m2 ResourceManager[3900]: info: Acquiring resource group:
хранилища файл /etc/ha.d/haresources дополняется списком
m1.mydomain.com drbddisk Filesystem::/dev/drbd0::/d0::ext3
m2 ResourceManager[3900]: info: Running сервисов, для которых необходимо гарантировать отказо-
/etc/ha.d/resource.d/drbddisk start
устойчивость, а конфигурационные файлы и файлы дан-
m2 kernel: drbd0: Secondary/Secondary --> Primary/Secondary
ных этих сервисов перемещаются на файловую систему,
m2 Filesystem[4023]: INFO: Running status for /dev/drbd0 on /d0
m2 Filesystem[4023]: INFO: /d0 is unmounted (stopped) созданную поверх drbd-устройства. Часто также конфигу-
m2 Filesystem[3959]: INFO: Filesystem Resource is stopped
m2 ResourceManager[3900]: info:
рируется алиас для сетевого интерфейса, который автома-
тически создается на ведущем узле, – тем самым все сер-
Running /etc/ha.d/resource.d/Filesystem /dev/drbd0 /d0 ext3 start
m2 Filesystem[4132]: INFO: Running start for /dev/drbd0 on /d0
висы оказываются доступными по одному адресу.
m2 kernel: kjournald starting. Commit interval 5 seconds
m2 kernel: EXT3 FS on drbd0, internal journal Недостатки такого подхода очевидны – чем больше сер-
m2 kernel: EXT3-fs: mounted filesystem with ordered data mode.
висов, тем более запутанной становится такая конфигура-
m2 Filesystem[4068]: INFO: Filesystem Success
ция, а установка новых версий сервисов становится очень
m2 mach_down[3880]: info: /usr/lib/heartbeat/mach_down:
nice_failback: foreign resources acquired неудобной. Про общие проблемы сожительства различных
m2 mach_down[3880]: info: mach_down takeover complete for node
сервисов на одном сервере я и не говорю – это специфич-
m1.mydomain.com.
но не только для Linux HA.
m2 heartbeat: [3739]: info: mach_down takeover complete.
Самым простым и изящным выходом в данной ситуа-
Если просто выключить питание узла m1, чтобы он ции является виртуализация. Если использовать этот под-
не успел оповестить m2 о том, что он завершает свою ра- ход, нам потребуется обеспечить отказоустойчивость толь-
боту, m2 обнаружит отсутствие m1 и точно так же возь- ко для одного сервиса – контейнера, в котором будут жить
мет на себя функции ведущего узла и примонтирует раз- виртуальные сервера, причем последние можно конфигу-
дел /dev/drbd0: рировать, не задумываясь о сложностях, связанных с клас-
теризацией... Но об этом читайте во второй части статьи,
m2 kernel: drbd0: PingAck did not arrive in time. в следующем номере.
m2 kernel: drbd0: drbd0_asender [3566]: cstate Connected -->
NetworkFailure
m2 kernel: drbd0: asender terminated 1. http://linux-ha.org
m2 kernel: drbd0: drbd0_receiver [3510]: cstate NetworkFailure -->
BrokenPipe 2. http://drbd.org
m2 kernel: drbd0: short read expecting header on sock: r=-512 3. http://openvz.org
m2 kernel: drbd0: worker terminated
4. http://altlinux.ru
m2 kernel: drbd0: drbd0_receiver [3510]: cstate BrokenPipe -->
Unconnected 5. http://sisyphus.ru
m2 kernel: drbd0: Connection lost. 6. http://freesource.info

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

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

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

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

14
администрирование
Предыстория И есть ли какие-нибудь технические проблемы в данном
Не меняются только самые мудрые
вопросе? Попробуем разобраться.
и самые глупые.
Обновление до текущего состояния SP3
Конфуций
Мудрец стыдится своих недостатков,
Прошло уже несколько лет после даты выхода последне- но не стыдится исправлять их.
го кумулятивного пакета обновлений для MS Windows XP,
известного как Service Pack 2. И вот теперь, когда общее Конфуций
число выпущенных обновлений перевалило за сотню, все Попробуем получить SP3 самостоятельно. Для этого вос-
с нетерпением ожидают пакета обновлений с номером 3. пользуемся диском, предназначенным для автоматической
Официально в документе «Windows Service Pack Road Map» установки MS Windows XP SP2, созданным так, как описа-
Microsoft предупреждает, что SP3 появится не ранее но в статьях [7]. Из процесса установки удалим для чисто-
2007 года. Но все равно периодически приходится опровер- ты эксперимента все дополнительные компоненты, кроме
гать слухи о том, что SP3 уже готов к загрузке. И, несмотря собственно дистрибутива, и создадим имидж:
на возражения Microsoft, самодельный SP3 можно загрузить
с различных ресурсов, например с TheHotfix.Net, как обеща- # ./mkwinxp cd_sp2_only
ют после предварительной регистрации в форуме. Warning: creating filesystem that does not conform to ISO-9660.
Настораживает, что на Softpedia указан объем это- Warning: creating filesystem with (nonstandard) Joliet extensions
but without (standard) Rock Ridge extensions.
го обновления в 344 Мб, а это весьма много, да и ссылки It is highly recommended to add Rock Ridge
для загрузки не работают. Еще стоит отметить, что соглас- mkisofs 2.01 (i686-suse-linux)
re-directing all messages to mkwinxp-9838.log
но [2] источником явился некий анонимный, но очень доб-
рый сотрудник Microsoft. Почему-то все добрые люди та-
кие скромные... Окончательно образ диска занял 447 Мб (здесь и да-
Есть и отечественный вариант этого «чуда»: http:// лее примем для простоты 1 Мб равным 1 000 000 байтов,
www.winall.ru/xp/sp/sp3. Он включает 30 заплаток и имеет или 1000 Кб, в зависимости от контекста). Воспользуемся
объем 37,7 Мб. Ссылки тоже «висят», то есть загрузить SP3 результатом для установки рабочей станции под VMWare.
ссайта невозможно. Но мне довелось получить это примитив- После завершения процесса инсталляции в полученной
ное создание на очередном диске, купленном на одном мос- виртуальной машине проверим несколько важных в даль-
ковском программном «развале». Самое смешное, что все нейшем точек.
файлы переименованы в Pre_SP3_by_Winall_*.exe. Иначе го- На рис. 1 видно, что уровень обновления системы –
воря, до установки очень трудно оценить, что же ставится – SP2, директория «C:\Program Files\WindowsUpdate» пуста,
какие-то патчи от Microsoft или просто набор троянов. и внутри ветки реестра «HKLM\SOFTWARE\Microsoft» от-
Ну и последний из существующих суррогатов SP3, об- сутствует раздел Updates. Запомним это. И приступим к об-
наруженный в Интернете, откровенно носит сомнитель- новлению системы до текущего уровня рекомендованных
ный характер и называется GAME EDITION 2006.Мне уда- обновлений.
лось его загрузить c http://www.wild-soft.org/2006/08/24/ Для этого воспользуемся локальным сервисом SUSfL.
windows_xp_sp3_pre_game_edition_2006.html. Но это был, Установка и настройка SUSfL подробно описана в [8]. До-
скажем так, первый сайт с более-ме-
нее приличным содержанием. Так как
все остальные имели контент из кате-
гории «только для взрослых». Этот на-
бор имеет объем 118 Мб, что близко
к размеру реального SP3, но посколь-
ку в 118 Мб входит не SP3, а вся уко-
роченная MS Windows XP в варианте
«только для игрушек», то в моей прак-
тике такое изделие игровой инженерии
вряд ли кого заинтересует.
Из всего вышесказанного возни-
кает больше вопросов, чем прихо-
дит ответов. Судя по всему, SP3 уже
практически готов. И если не загадоч-
ные добряки из Microsoft, то какие-ни-
будь шустрые сетевые «гуру» непре-
менно его предложат невзыскатель-
ной публике и попытаются получить
на этом выгоду или иное преимущест-
во. Так в чем же дело? С чем связано
нежелание Microsoft выпустить SP3? Рисунок 1. MS Windows XP SP2 после установки

№11, ноябрь 2006 15


администрирование
не так, то надо её запустить командой
«net start bits». Подождем, пока служ-
ба BITS скачает доступные обновле-
ния на рабочую станцию и предло-
жит их установить. Не надо забывать,
что BITS производит закачку в пау-
зах сетевой активности, то есть на-
до на некоторое время оставить эту
станцию в покое. Как только систе-
ма приступит к загрузке обновлений,
в правом нижнем углу появится икон-
ка, всплывающая подсказка которой
будет сообщать о степени готовнос-
ти. После завершения загрузки сохра-
ним полученные обновления, так как
после установки они будут уничто-
жены. Для этого активируем меню
процесса «Автоматическое обновле-
ние», но не будем подтверждать его,
пока все папки из «C:\Program Files\
Рисунок 2. Установка SUSfL в качестве сервера обновления WindowsUpdate\wuaudnld.tmp\cabs»
не скопируются в рабочую директо-
бавим только одну поправку. Во всех статьях, описыва- рию, например в G:\SP3-from-win (см. рис. 3).
ющих установку SUSfL, неверно трактуется переменная После того как копирование завершится, разрешим уста-
localCabPool. Дело всё в том, что в исходных текстах со- новку загруженных заплаток. Таким образом, во-первых, по-
держится ошибка – название директории content иног- лучим правильный комплект обновлений и, во-вторых, про-
да употребляется в виде литеральной константы, то есть верим, что все обновления действительно подходят к наше-
localCabPool должен оканчиваться именно на «content» му дистрибутиву. После установки обновлений будет пред-
и никак иначе. ложено перегрузить рабочую станцию. Со всем согласимся
и дождемся следующей загрузки станции (см. рис. 4). Откро-
# grep localCabPool sus_consts.py ем редактор реестра и найдем там ветку «HKLM\SOFTWARE\
#localCabPool is path with trailing slash to your pool, where Microsoft\Updates\Windows XP\SP3». Смотрите-ка, вот и SP3!
updates will be stored Значит, все-таки есть? Экспортируем поскорее это «чудо»,
###localCabPool = "/var/www/sus.int/content/"
localCabPool = "/srv/winupdate/www/content/" например в SP3-from-win.reg, в ту же директорию, где ранее
были сохранены папки с файлами обновлений.
Естественно, надо учесть в настройках, что собирать Итак, теперь в нашем распоряжении есть набор необхо-
обновления такой сервер должен для MS Windows XP димых обновлений, чтобы получить SP3 в текущем состо-
Professional русской локализации. Перед обновлением ра- янии, и сохраненная ветка реестра, которая позволит про-
бочей станции убедимся, что сам SUSfL содержит все пос- контролировать факт установки SP3. Последнее подгото-
ледние заплатки. вительное действие, что целесообразно выполнить прямо
в MS Windows, это подготовить рабочее дерево дистрибу-
# cd /srv/winupdate/www/autoupdate тивных файлов для интеграции. Для этого просто скопиру-
# python sus_sync.py
ем содержимое установочного диска с MS Windows XP SP2
Dictionaries up to date
в заранее подготовленную для этого директорию на файло-
Need to download 0 Mb
вом сервере, которую подключим как G:\IMG (см. рис. 4).
Следовательно, если сейчас указать SUSfL как сервер
обновлений, то система автоматически должна будет опре- Подготовка файлов для включения
делить все недостающие заплатки и загрузить их из SUSfL в дистрибутив
на рабочую станцию. Так и сделаем. Тот, кто, обращаясь к старому,
Загрузим настройку реестра из http:\\winupdate.office. способен открывать новое, достоин, быть учителем.
localnet\winupdate.reg (см. рис. 2), что назначит SUSfL с ад-
ресом winupdate.office.localnet как локальный сервер обнов- Конфуций
лений, и перезапустим службу автоматического обновле- Теперь, после того как все вспомогательные файлы соб-
ния на рабочей станции, набрав в окне консоли: раны, надо выбрать способ включения SP3 в существу-
ющий дистрибутив. Можно просто их все устанавливать
>net stop wuauserv аналогично тому, как происходит установка обычных при-
>net start wuauserv
ложений. Но можно их интегрировать внутрь. Предполо-
Загрузку обновлений производит служба BITS, ко- жим, что интеграция позволит получить нечто аналогич-
торая по умолчанию стартует автоматически. Если это ное кумулятивному SP2 и, как минимум, сэкономить объ-

16
администрирование
ем. Кстати, об объеме – подсчитаем его. Все дальней- [conFieldItemStringsTitle].encode('utf8'), dtstr))
+### req.write('<div title="%s">%s, %s</div>'% ↵
шие манипуляции будем выполнять в терминальном ре- (sPublisherPlusName, vItemDetails ↵
жиме на Samba-сервере. Пусть корень сетевого ресур- [conFieldItemStringsTitle].encode('utf8'), dtstr))
+ req.write('<div title="%s">'%(sPublisherPlusName))
са /srv/smb/public. Тогда папки обновлений размещаются + print row+1, '&nbsp;'
в /srv/smb/public/SP3-from-win, а все содержимое исходного + req.write('%s, %s</div>'%(vItemDetails ↵
[conFieldItemStringsTitle].encode('utf8'), dtstr))
дистрибутивного диска в ../IMG относительно папок с за- # req.write(' ↵
платками. Все терминальные команды будут исполняться ('+repr(approved[sPublisherPlusName])+')')
print '</b>'
из /srv/smb/public/SP3-from-win. req.write(vItemDetails ↵
Сначала составим список всех файлов обновлений: [conFieldItemStringsDescription].encode('utf8'))
@@ -169,7 +172,7 @@
req.write(' <a href="%s">Eula</a>'%urle)
# find . -name "*.exe" | awk -F/ '{print $3}' | awk ↵ print '<br>'
-F. '{print $1}' >real-updates.txt
- req.write('Applies to: ' ↵
Затем скопируем их в корень рабочей директории: +string.join(applies, ',').encode('utf8'))
+ req.write('Applies to: ' ↵
+string.join(applies, ',\n').encode('utf8'))
# for i in $(cat real-updates.txt) ; do find . ↵ print '</td></tr>'
-name "$i.exe" -exec cp -v '{}' $i.exe \; ; done row = row + 1
`./com_microsoft.WindowsXP-KB925486-x86-189032/ ↵
WindowsXP-KB925486-x86-RUS.exe' -> ↵ Приведенный текст надо использовать как патч внутри
`WindowsXP-KB925486-x86-RUS.exe'
`./com_microsoft.873333_XP_SP3_WinSE_143087/ ↵ каталога autoupdate, содержащегося в SUSfL. Эта правка
WindowsXP-KB873333-x86-RUS.exe' -> ↵ носит косметический характер и приводит к тому, что в тек-
`WindowsXP-KB873333-x86-RUS.exe'
... пропущено ... стовом формате html имя файла обновления и все его ха-
`./com_microsoft.WindowsXP-KB922616-x86-185856/ ↵ рактеристики, в том числе и ключи запуска, размещаются
WindowsXP-KB922616-x86-RUS.exe' -> ↵
`WindowsXP-KB922616-x86-RUS.exe' на одной строке, что в свою очередь облегчает обработку
текстовыми утилитами.
Файлы копируются, а не перемещаются. Это позволит Прочтем список всех обновлений, размещенных на сер-
в случае неудачи повторить все шаги снова. Подсчитаем вере, и сохраним его в файле:
суммарный объем и число заплаток:
# wget http://winupdate.office.localnet/ ↵
# du -c *.exe | grep "total\$" autoupdate/admin.py -O all-updates-from-sus.html
--00:27:52-- http://winupdate.office.localnet/autoupdate/admin.py
131128 total
=> `all-updates-from-sus.html'
Resolving winupdate.office.localnet... done.
# wc -l real-updates.txt Connecting to winupdate.office.localnet[192.168.0.1]:80... connected.
HTTP request sent, awaiting response... 200 OK
80 real-updates.txt
Length: unspecified [text/html]

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


Итого 131 Мб в 80 файлах. Здесь уже можно оценить сте-
пень адекватности всех самодельных SP3, которые предла- 00:27:54 (3.82 MB/s) - `all-updates-from-sus.html' saved [396889]
гаются в Интернете. Еще немного арифметики: итак, всего
131 Мб апдейтов, а размер исходного имиджа: Извлечем из текста все возможные обновления вмес-
те с ключевой информацией:
# du -c ../IMG | grep "total\$"
# grep XP SP2 all-updates-from-sus.html | ↵
448712 total
awk 'BEGIN{FS="href=\""}{print $2}' >all-updates.txt

Если просто доложить все апдейты в дистрибутив, то по- Теперь в all-updates.txt содержатся все доступные обнов-
лучится 579 Мб. Но, конечно, правильнее будет их интег- ления и их ключи, что позволит составить командные фай-
рировать. Для этого нужно подготовить соответствующие лы для полного обновления и интеграции в автоматическом
скрипты и для автоматического обновления в ходе уста- режиме с помощью следующей программы:
новки, и для интеграции. Но нужно еще собрать информа-
цию о допустимых ключах запуска заплаток. Но на сервере #!/bin/sh
SUSfL она есть, но для того чтобы извлечь ее в автомати- SUSLIST=all-updates-from-sus.html
ческом режиме, подправим немного исходники SUSfL: REAL=real-updates.txt

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


# diff -Naur admin.py.orig admin.py U=update.cmd
UO=update-only.cmd
--- admin.py.orig 2006-08-21 13:57:32.000000000 +0400 I=integrate.cmd
+++ admin.py 2006-08-21 16:04:24.000000000 +0400 for i in $U $UO $I ; do
echo -e "@echo off\r" >$i
@@ -155,7 +155,10 @@ done
else:
dtstr = dts[0] + ' - ' + dts[len(dts)-1] P="G:\IMG"
print '<tr bgcolor="%s"><td valign="top"> ↵ RP="/srv/smb/public/IMG"
<input type="checkbox" name="%s" value="1"%s> ↵ mkdir -p $RP
</td><td><b>'%(rowcolor,sPublisherPlusName,cstr) chmod ugo+w -R $RP
- req.write('<div title="%s">%s, %s</div>'% ↵ UOP="$RP/\$OEM\$/\$1/InstData"
(sPublisherPlusName, vItemDetails ↵ mkdir -p $UOP

№11, ноябрь 2006 17


администрирование
# список известных исключений  integrate.cmd – для интеграции обновлений в дерево
EL="WindowsXP-KB885250-x86-RUS.exe ↵
WindowsXP-KB885835-x86-RUS.exe ↵ файлов дистрибутива;
WindowsXP-KB887742-x86-RUS.exe ↵  update-only.cmd – для установки тех обновлений, кото-
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=1
for i in $(cat $REAL) ; do вым образом и состоят из последовательных запусков за-
echo -----$n-------$i--------------- платок с ключами.
T=$(grep "$i" $SUSLIST | grep "SP2")
n=$((n+1)) Например, integrate.cmd начинается следующими стро-
if [ "1$T" == "1" ] ; then ками:
echo ====================ERROR!!!!=================
else
T=$(echo "$T" | awk 'BEGIN{FS="switches: "} ↵ # head -n 7 integrate.cmd
{print $2}' | awk -F, '{print $1}')
echo -e "echo integration $i running...\r\n$i.exe ↵ @echo off
$T\r\necho done\r" >>$U echo integration WindowsXP-KB925486-x86-RUS running...
WindowsXP-KB925486-x86-RUS.exe /q /integrate:G:\IMG
# проверим на совместимость echo done
j=$(find . -name "$i.exe" | head -n 1) echo integration WindowsXP-KB873333-x86-RUS running...
k=$(strings "$j" | grep "SFX_CAB_EXE") WindowsXP-KB873333-x86-RUS.exe /q /integrate:G:\IMG
echo done
# удалим исключения
m=$(echo $EL | grep "$i")
[ "1$m" == "1" ] || k=""
Дистрибутив с интегрированным SP3
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 ↵ Запустим G:\SP3-from-win\integrate.cmd на рабочей станции
/q /integrate:$P\r\necho done\r" >>$I
#echo "pause" >>$I MS Windows XP и выполним интеграцию обновлений в дис-
fi трибутивный набор G:\IMG (см. рис. 5).

done Дождавшись завершения, проверим результат уже сно-
ва в консоли Samba-сервера:
for i in $U $I ; do
echo -e "pause\r" >>$i
done # du -c ../IMG | grep "total\$"
cp -v $UO $UOP
exit 623816 total

Эта программа в ходе своей работы создает три ко- Получилось 623 Мб, что на 44 Мб больше, чем было
мандных файла: бы, если просто разместить исходные обновления в ви-
 update.cmd – для использования в дистрибутиве, что- де установочных файлов, для того чтобы они отработа-
бы установить заплатки как обычные приложения; ли в процессе инсталляции. На 131 Мб исходных файлов
44 Мб «оверспейса» составляет 30%.
Пока воздержимся от критики и про-
верим, как полученный дистрибутив
с SP3 будет ставиться в автоматичес-
ком режиме.
Соберем на основе полученно-
го набора файлов установочный
диск и произведем с него установку
под VMWare. Главное, не забыть под-
ключить установку тех заплаток, кото-
рые не были интегрированы и должны
ставиться как приложения. Для это-
го можно, например, включить текст
update-only.cmd в GuiRunOnce.cmd.
Процесс установки ничем не отли-
чается от ранее произведенного и по-
тому не заслуживает комментариев.
После завершения проверим важные
для нас контрольные точки.
Как видно на рис. 6, система ука-
зывает на соответствие SP2, каталог
Рисунок 3. Обновления загружены и готовы к установке для сетевых апдейтов пуст, но в ре-

18
администрирование
верных и самодельных вариантов
Windows XP SP3.
В любой момент свой SP3 можно
приготовить за полчаса или за пару ча-
сов, если считать время на установку
исходной MS Windows XP SP2.
Здесь раскрою секрет появле-
ния списка исключений. Эти заплат-
ки не «хотели» интегрироваться и те-
рялись после установки проверочной
системы с SP3.
Проверку на соответствие уровню
текущих обновлений можно проводить
как с помощью сравнения экспортиро-
ванной ветки реестра, так и путем под-
ключения к локальному SUSfL для об-
новления. Но второй путь занимает
больше времени, как и способ ручно-
го прохождения интеграции каждой
заплатки.
Теперь вы знаете, что делать, ес-
Рисунок 4. Подготовка дерева дистрибутива после обновления до SP3 ли попадется такой «неуживчивый»
апдейт, пока компания Microsoft не
естре присутствует ветка «HKLM\SOFTWARE\Microsoft\ соизволит выпустить настоящее обновление версии 3
Updates\Windows XP\SP3», что свидетельствует о произве- для MS Windows XP.
денном в ходе инсталляции наложении заплаток.
И тут самым важным становится вопрос о том, на- Выводы
сколько интегрированные заплатки соответствуют тем, Единственная настоящая ошибка –
что были поставлены из сети. Чтобы выяснить это, сно- не исправлять своих прошлых ошибок.
ва экспортируем указанную ветку реестра, но уже в файл
SP3-integrated.reg. Конфуций
Дабы избежать бинарного сравнения, воспользуемся Тут можно бы и закончить. Главный вывод: SP3 – не про-
простенькой программкой для преобразования получен- блема, уже есть. Но давайте снова вернемся к подсчетам
ных файлов в текстовый формат: размеров.
Исходный диск с SP2 занимал 447 Мб, что оставляло
# cat winreg2txt примерно 290 Мб для размещения приложений, использо-
#!/usr/bin/perl
ванных в процедуре автоустановки, если не менять носи-
# преобразование winregistry в ascii файл тель на DVD. Дистрибутив с интегрированным SP3 занима-
$i=1; $n=0; ет уже 623 Мб, что оставляет всего 114 Мб. Это недопустимо
while(read(STDIN,$j,1)) { мало! Получается, если набор обновлений доложить в ви-
if( $n > 1 ){
if( $i == 1){ $i=0; print $j; }else{ $i=1; } де установочных файлов, то останется 159 Мб. Не бог весть
} что, но лучше, чем в случае с интеграцией заплаток в де-
$n++;
} рево дистрибутива. По крайней мере в этот объем можно
уместить хотя бы OpenOffice с парочкой сетевых приложе-
И теперь получим из каждой сохраненной ветки реест- ний от Mozilla Foundation.
ра список установленных заплаток: Теперь можно предположить, чем вызвано нежелание
Microsoft торопиться с SP3.
# ./winreg2txt <SP3-from-win.reg | grep "\\SP3\\\\" | ↵ «Нам», системным администраторам, работающим
grep -v Filelist >SP3-from-win.reg.txt
# ./winreg2txt <SP3-integrated.reg | grep "\\SP3\\\\" | ↵ с GNU/Linux, не привыкать к периодическим и объемным
grep -v Filelist >SP3-integrated.reg.txt апдейтам. Чем их больше, и чем чаще они выходят, тем вы-
ше уровень сервиса дистрибуторов. И GNU/Linux легко
Осталось только сравнить их: «выходит» на объемы заплаток в 1 Гб. Например, openSUSE
через пару месяцев после выпуска требует именно тако-
# diff -s SP3-integrated.reg.txt SP3-from-win.reg.txt го объема апдейтов. Более того, нет никаких проблем,
Files SP3-integrated.reg.txt and SP3-from-win.reg.txt чтобы включить эти апдейты прямо в установочный диск.
are identical И при этом объем дистрибутива не увеличится сколько-ни-
будь существенно.
Ну вот! Что и требовалось получить. Теперь ясно, А вот в модели проприетарной дистрибуции MS Windows
что можно не рыскать по Интернету в поисках недосто- все гораздо хуже.

№11, ноябрь 2006 19


администрирование
личение объема является следстви-
ем несовершенства выбранных фор-
матов, которые не могут обеспечить
жизненный цикл этой операционной
системы.
Согласно [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.
Рисунок 5. Процесс интеграции обновлений 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 ficoal
TheHotfix.Net Pack – http://www.softpedia.
com/get/System/OS-Enhancements/
Windows-XP-Ser vice-Pack-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
Рисунок 6. MS Windows XP с текущим SP3 после установки Windows, или AutoIt как мечта эникей-
щика. Часть 2. //Системный админист-
Выход SP2 увеличил размер дист- MS Windows, но и барьер совмести- ратор, №5, 2005 г. – С. 54-58;
рибутива MS Windows XP, и выпуск SP3 мости, так как после этого огромное Барабанов А. Автоматизация MS
тоже, скорее всего, сделает дистрибу- число компьютеров, оснащенных толь- Windows, или AutoIt как мечта эникей-
тив еще более объемным. И тем са- ко CD-приводом, смогут использовать щика. Часть 3. //Системный админист-
мым вплотную пододвинет его к гра- дистрибутив единого образца, если он ратор, №6, 2005 г. – С. 25-31;
нице CD-носителя. будет выпущен на DVD. Барабанов А. Автоматизация MS
Пугает ли это тех, кто привык к пос- Еще одна проблема заключается Windows, или AutoIt как мечта эникей-
тавкам GNU/Linux на DVD или набору в увеличении «веса» без увеличения щика. Часть 4. //Системный админист-
CD, – нет! стоимости. С одной стороны, появле- ратор, №7, 2005 г. – С. 46-47;
Но для дистрибуции универсаль- ние SP2 было оправдано увеличением 8. Кирилл Малеванов. Установка локаль-
ной системы MS Windows это не толь- функциональности, а вот для SP3 та- ного Windows Update сервера под Unix.
ко психологический барьер полу- кой лазейки пока, вероятно, нет. И по- 2004 г. – http://www.malevanov.spb.ru/
чить многодисковый дистрибутив лучается, что немотивированное уве- freebsd/winupdate.

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

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


для МОМ

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

Определяем задачу ответственно нет необходимости раз- ля найти не удалось. Проблему можно
В предыдущей статье [1] вы узна- бираться в структуре взаимодействия решить написав собственный пакет уп-
ли об архитектуре продукта Microsoft Management Pack с МОМ. Но все это равления. Дабы не быть голословным,
Operations Manager 2005, его функ- удобно лишь в том случае, если для в этой статье я опишу, как на практике
циональных возможностях, а так- интересующего вас программного про- создать Management Pack для одного
же способах установки компонентов дукта уже разработан пакет управле- из критичных ресурсов любой сети.
MOM, в том числе и пакетов управле- ния. Как упоминалось в предыдущей В качестве примера такого серви-
ния Management Packs. Пакеты пред- статье, Management Pack разработа- са предлагаю вам рассмотреть сис-
ставляют собой контейнеры, содер- ны для всех продуктов Microsoft. Так- тему антивирусной защиты серве-
жащие наборы правил, которые поз- же пакеты управления есть для Lotus ров. Данный компонент – неотъемле-
воляют осуществлять сбор информа- Domino и для систем резервного ко- мая часть системы безопасности лю-
ции. Однако мы рассмотрели вариант пирования Veritas (Symantec) Backup бой сети, но не для всех корпоратив-
использования уже готовых пакетов, Exec. Но наверняка в вашей сети най- ных антивирусов производители раз-
которые необходимо было лишь им- дутся жизненно важные сервисы, со- работали пакеты управления для вза-
портировать в МОМ. Удобство тако- стояние которых хотелось бы отслежи- имодействия с МОМ.
го подхода очевидно, не нужно само- вать с помощью МОМ, а готового паке- П р и м е р о м а н т и в и р у с а буд е т
стоятельно разработывать пакет, со- та управления на сайте производите- ClamAV. В данном случае неважно ка-

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

Архитектура
Management Pack
Пакет управления МОМ состоит из сле-
дующих основных взаимосвязанных Рисунок 1. Компоненты Management Pack
компонентов (см. рис. 1):
 Computer Attributes – в разделе редственно в процессе написания па- Group». Однако антивирус должен быть
определяется набор атрибутов, по кета управления, к которому мы собс- установлен на каждой рабочей стан-
которым будет осуществляться по- твенно и приступаем. ции и уж тем более на каждом серве-
иск нужных хостов. ре, так что лучше, чтобы в используе-
 Computer Groups – группа ком- Области действия мой группе были все сервера.
пьютеров, объединенная по оп- и атрибуты Следующим этапом в разработке
ределенному признаку, например Начнем составление нового пакета Management Pack будет создание пра-
серверы, на которых установлен управления. Сначала необходимо оп- вил. Для этого прежде всего необходи-
Microsoft SQL. ределиться с атрибутами, по которым мо создать группу правил Rule Group
 Rule Groups – группы правил, ко-будет выполняться выборка. В консо- («Action → New Rule Groups»). При со-
торые являются неотъемлемой час-ли «Administrator Console» выбираем здании новой группы можно сразу ука-
тью любого пакета управления. «Management Packs», далее «Computer зать те хосты, к которым будут эти пра-
 Providers – провайдеры являют- Attributes» и затем в меню «Action» ука- вила применяться.
ся ключевыми элементами правил. зываем «Create Computer Attribute». В созданной группе правил есть
Они определяют, где правило долж- Да лее пред лагается выбрать, три раздела: Event Rules, Alert Rules
по какому именно атрибуту выбирать:
но получать требуемые данные. Ос- и Performance Rules. Подробно содер-
новным источником данных для по ветке реестра или по значению. жимое этих разделов уже рассматри-
Для рассматриваемого в статье ан-
правил является журнал Event Log. валось в предыдущей статье [1]. Поэ-
 Rules – правила, которые опреде-тивируса ClamAV нас будет интересо- тому сейчас я опишу только те компо-
ляют, какие данные должны ана- вать ветка: HKEY_LOCAL_MACHINE\ ненты, которые необходимы для созда-
лизироваться пакетом управле- S O F T WA R E \ M i c r o s o f t \ W i n d o w s \ ния своего пакета управления.
ния, критерии, по которым ведет-CurrentVersion\Uninstall\ClamAV. Да- Во-первых, нас интересует беспе-
лее указываем имя, и атрибут готов.
ся отбор, и какой ответ должен быть ребойная работа антивирусного сер-
в случае получения интересующей При необходимости таких атрибу- виса. Информация обо всех останов-
информации. тов может быть несколько. Например, ках сервиса должна немедленно сооб-
 Automated Responses – в этом раз-
определенная операционная система
или наличие специфического прило-
деле определяются ответы, возвра-
щаемые МОМ. жения на хосте (см. рис. 2).
 Views – это ключевая возможность Теперь определимся с группой сер-
Management Pack, так как Views веров, на которых нужно осуществлять
позволяют создавать сообщения мониторинг. В общем случае можно
воспользоваться уже готовыми груп-
о различных событиях, а также со-
бирать информацию о производи- пами. Если же в вашей сети серверов
тельности управляемой системы. очень много и вам необходимо ука-
зать лишь несколько из них, то тогда
Предназначение каждого компо- создайте новую группу, выбрав в ме-
Рисунок 2. Ветка реестра в разделе
нента станет более понятным непос- ню «Actions» опцию «Create Computer «Attributes»

№11, ноябрь 2006 23


администрирование
щаться оператору МОМ. Для этого необходимо создать Alert вайдера выбираем «WMI Events» и в следующем окне, в по-
Rule, которое будет отслеживать состояние сервиса и в слу- ле запрос, указываем вышеприведенную строку. Таким об-
чае получения от системы сообщения «Service Unavaliable» разом, был создан источник информации по интересую-
отправлять письмо определенной группе пользователей. щему событию.
Реализовать все это можно следующим образом: Думаю, очевидным требованием для антивирусно-
В созданной группе правил открываем раздел «Alert го комплекса будет возможность создавать уведомления
Rules», далее в меню «Action» выбираем «Create Alert Rule», об обнаружении зараженных файлов. Для того чтобы со-
отмечаем опцию of severity, а в соответствующем списке – здавать такие уведомления, лучше всего воспользовать-
пункт «Service Unavailable». Таким образом, будут отслежи- ся сценарием на VBScript, который будет производить ана-
ваться системные сообщения о недоступности сервиса. лиз файла журнала антивирусной системы, осуществляя
На следующем шаге указываем время, когда это пра- поиск вхождений строк, сообщающих об обнаруженных за-
вило будет выполняться – «Always process data». раженных файлах, а также о результатах лечения или уда-
Наконец необходимо указать ответные действия ления из них вредоносного кода. Файл такого журнала мо-
«Responses». Как уже упоминалось ранее, нам требуется от- жет иметь следующий вид:
править уведомление соответственно «Send a notification to

a Notification group». В разделе «Notification» выбираем груп- c:/windows/DtcInstall.log: OK
пу получателей «Notification group – Network Administrators». c:/windows/eicar_com.zip: Eicar-Test-Signature FOUND
В соседней закладке «E-Mail format» можно внести измене- c:/windows/EventSystem.log: OK
c:/windows/explorer.exe: OK
ния в формат почтового сообщения, которое будет отправ- c:/windows/Zapotec.bmp: OK
лено операторам. c:/windows/_default.pif: OK

В качестве дополнительных ответных действий можно ----------- SCAN SUMMARY -----------
также прописать запуск сценария, который будет переза- Known viruses: 53081
пускать сервис. В простейшем случае такой сценарий мо- Engine version: devel-20060426
Scanned directories: 1
жет состоять из одной команды: Scanned files: 84
Infected files: 1
Net start [Имя_сервиса] Data scanned: 5.66 MB
Time: 17.856 sec (0 m 17 s)

Однако зачастую внезапное «падение» сервиса носит В примере продемонстрировано обнаружение тестово-
неслучайный характер и простого рестарта служб может го вируса Eicar, который используется для тестирования ан-
оказаться недостаточно, так как необходимо выяснить при- тивирусных продуктов.
чину данного сбоя, поэтому непременно должно быть от- Сценарий, осуществляющий поиск подобных записей,
правлено уведомление оператору. должен содержать код, подобный представленному в Лис-
Теперь рассмотрим вопрос, касающийся создания опе- тинге 1.
раторов. В административной консоли МОМ для этого пре-
дусмотрен раздел «Notifications» (Уведомления), в кото- Листинг 1. Поиск вхождений в файле журнала
ром определены «Notification Group» (Группы уведомлений). ‘ путь к файлу журнала
Здесь необходимо добавить нужного оператора в группу strFile="c:\clamav-devel\log\clamd.log"
Set objFSO = CreateObject("Scripting.FileSystemObject")
«Network Administrators», указав при этом контактный e-mail, ‘ открываем файл на чтение
на который требуется отправлять уведомления. Set readPCFile = objFSO.OpenTextFile(strFile, ForReading)
search="FOUND" искомая подстрока
‘ цикл по всему файлу журнала
Сценарии и запросы Do Until readPCFile.AtEndOfStream
strNextLine = readPCFile.Readline ‘ считываем построчно
Итак, мы определились с атрибутами, по которым будет ‘ вхождение найдено
проходить выборка, также составили список тех машин, If Instr(InStr(1,strNextLine,search)) then
‘ присваиваем соответствующее значение переменной
на которых необходимо осуществлять мониторинг. Теперь result= strNextLine
определимся с провайдером (Provider), то есть с источни- … ‘ далее действия с этой переменной
End If
ком информации об интересующих нас событий. Таким со- Loop ‘ завершение цикла
бытием прежде всего является остановка сервиса ClamAV, readPCFile.Close ‘ закрываем файл
то есть необходимо обнаруживать состояние Stopped. В ре-
шении этой проблемы нам поможет запрос WMI. Подроб- Использовать сценарий в таком виде непосредственно
нее об этом мощном средстве Windows уже рассказыва- в МОМ нельзя, так как для пакетов Management Pack су-
лось в предыдущих выпусках журнала [2, 3]. Для контроля ществует определенный формат сценариев, которого не-
состояния сервиса ClamAV необходимо построить запрос обходимо придерживаться. Прежде всего нужно опреде-
следующего содержания: лить ряд констант и переменных. Обычно эта инициализа-
ция производится вначале сценария и имеет вид:
select * from __InstanceModificationEvent WITHIN 89 ↵
Where TargetInstance ClamAV'Win32_Service' ↵
AND TargetInstance.State = 'Stopped' Листинг 2. Общий вид сценария
‘ блок инициализации
Для этого в меню «Management Pack» выбираем опцию Option Explicit
«Providers», далее «Create Provider». В качестве типа про- Const PROBLEMSTATE_NOTSET = 0

24
администрирование
Const PROBLEMSTATE_GREEN = 1 search=”FOUND” искомая подстрока
Const PROBLEMSTATE_YELLOW = 3 ' Yellow = Red+(Warning|Error) ‘ цикл по всему файлу журнала
Const PROBLEMSTATE_RED = 3 Do Until readPCFile.AtEndOfStream
Const ALERT_SUCCESS = 10 ‘ считываем построчно
Const ALERT_INFORMATION = 20 strNextLine = readPCFile.Readline
Const ALERT_WARNING = 30 ‘ вхождение найдено
Const ALERT_ERROR = 40 If Instr(InStr(1,strNextLine,search)) then
Const ALERT_CRITICAL_ERROR = 50 ‘ присваиваем соответствующее значение переменной
Const ALERT_SECURITY_BREACH = 60 result= strNextLine
Const ALERT_SERVICE_UNAVAILABLE = 70 ‘ далее приводятся свойства уведомления
oAlertHandle.Name = “ Virus found!!!”
Dim oEvent ‘ описание события
Set oEvent = ScriptContext.CreateEvent() oAlertHandle.Description = “Virus found in file” & result
‘ Какая роль (диск так как вирус найден на файловом уровне,
‘ основной блок ‘ а например, не в памяти)
oAlertHandle.ServerRole = “Disk”
Sub Main() ‘ компонента – файловая система
oAlertHandle.Component = “File System”
‘ здесь производится вызов процедур, используемых для сбора ‘ цвет уведомления желтый
‘ и обработки необходимой информации oAlertHandle.ProblemState = PROBLEMSTATE_YELLOW
‘ вид уведомления – предупреждение
End Sub oAlertHandle.AlertLevel = ALERT_WARNING
‘ End If
Function ThrowScriptError(sMessage, oErr) Loop ‘ завершение цикла
' readPCFile.Close ‘ закрываем файл
' ThrowScriptError :: Creates an event and sends it back
' to the mom server End sub
' ‘
' процедура возвращает сообщение об ошибке, в случае Function ThrowScriptError(sMessage, oErr)
' некорректного завершения сценария ‘
‘ ThrowScriptError :: Creates an event and sends it back
ScriptContext.Quit() ‘ to the mom server
'
End Function ' процедура возвращает сообщение об ошибке, в случае
' VBScript source code ‘ некорректного завершения сценария
On Error Resume Next
ScriptContext.Submit oEvent
Dim oScriptErrorEvent

Напишем сценарий, который будет отслеживать появле- Set oScriptErrorEvent = ScriptContext.CreateEvent()


With oScriptErrorEvent
ние в журналах событий антивирусной системы сообщения .EventNumber = 40000
о зараженных файлах (напротив имен таких файлов долж- ‘EventLogEntryType Enumeration
.EventType = 1
но быть написано FOUND). Далее сценарий будет переда- .Message = sMessage
вать МОМ сообщение в специальном формате, на основа- .SetEventParameter “Microsoft Windows Servers
Base Operating System”
нии которого будет создан Alert, сообщающий оператору .SetEventParameter sMessage
системы о заражении файла. .SetEventParameter oErr.Description
.SetEventParameter oErr.Number
End With
Листинг 3. Сценарий, сообщающий об обнаружении ScriptContext.Submit oScriptErrorEvent
зараженного файла
ScriptContext.Echo ↵
Option Explicit “ThrowScriptError(‘” & sMessage & “’)”
Const PROBLEMSTATE_NOTSET = 0 ‘ состояние проблемы ScriptContext.Quit()
Const PROBLEMSTATE_GREEN = 1 ‘ цветовая маркировка End Function
Const PROBLEMSTATE_YELLOW = 3 ‘ Yellow = Red+(Warning|Error) ‘ VBScript source code
Const PROBLEMSTATE_RED = 3 Const ALERT_SUCCESS = 10
‘ различные виды уведомлений Alert ScriptContext.Submit oEvent
Const ALERT_INFORMATION = 20
Const ALERT_WARNING = 30
Const ALERT_ERROR = 40 Итак, как видно из Листинга 3, для создания уведомле-
Const ALERT_CRITICAL_ERROR = 50
Const ALERT_SECURITY_BREACH = 60 ния необходимо прописать объект соответствующего типа
Const ALERT_SERVICE_UNAVAILABLE = 70 и затем передать ему найденные в результате работы про-
Dim oAlertHandle цедуры поиска данные.
‘ Объект для создаваемого события Теперь для завершения создания пакета нужно пропи-
Set oAlertHandle = ScriptContext.CreateAlert()
сать данный сценарий в МОМ. Сделать это можно следу-
‘ основной блок ющим образом. В консоли администрирования выбираем
Sub Main() «Management Packs», далее «Scripts», в меню «Action» указы-
ваем «Create Script». В открывшемся окне пишем имя, в ка-
‘ здесь производится вызов процедур, используемых для сбора
‘ и обработки необходимой информации честве языка сценариев указываем VBScript, далее прос-
virusfind() то копируем через буфер обмена исходный текст, в следу-
End Sub ющем окне Parameters ничего указывать не надо, так как
все необходимые данные извлекаются в процессе рабо-
Sub virusfind()
‘ путь к файлу журнала ты программы.
strFile=”c:\clamav-devel\log\clamd.log” Наконец завершающим этапом в составлении пакета
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
‘ открываем файл на чтение управления для антивирусной системы является подклю-
Set readPCFile = objFSO.OpenTextFile(strFile, ForReading) чение написанного сценария к Management Pack. Для это-

№11, ноябрь 2006 25


администрирование
чине на одном или нескольких хостах жете построить уже собственный па-
будет остановлена служба антивиру- кет управления для тех сервисов, ко-
са. Не секрет, что многие вирусы, пре- торые критичны именно для вашей
жде чем начать заражение сети, пы- сети, будь то система антиспама, сер-
таются остановить службу антивиру- вер бухгалтерии или служба резервно-
са для того, чтобы сделать атакуемый го копирования. Думаю, в ваших инте-
Рисунок 3. Сообщение о зараженном
файле узел беззащитным и полностью захва- ресах получать своевременные сооб-
тить его ресурсы. щения обо всех жизненно важных сис-
го нужно создать задачу «Task». Для темах сети.
этого выбираем «Create Task», в окне, Выводы
запрашивающем, где должен выпол- Подводя итог всех выполненных дейс- 1. Бирюков А. Microsoft Operations Manager
няться сценарий (Task Run Location твий, хотелось бы сделать ряд поясне- 2005 – управляем сетью. //Системный
And Type), выбираем «Agent Managed ний. Конечно, большинство коммер- администратор, №10, 2006 г. – С. .
Computer» и тип задачи – «Script». ческих корпоративных антивирусов 2 Леонтьев К. Вы все еще не использу-
В следующем окне «Target Role – умеют выполнять описанные в ста- ете WMI? Часть 1. //Системный адми-
Computer и Script» – указываем имя тье задачи. Так, для контроля за ра- нистратор, №1, 2006 г. – С. 4-11;
того сценария, который был создан ботой службы антивируса использу- Леонтьев К. Вы все еще не используе-
ранее. Далее указываем имя задачи ются различные механизмы, которые те WMI? Часть 2: пишем сценарии//Сис-
и нажимаем «Finish». в случае остановки сервиса немедлен- темный администратор, №2, 2006 г. –
но его перезапускают. Также и уведом- С. 6-14.
Получаем результат ления о вирусах они могут рассылать 3. Леонтьев К. Узнай секреты WMI: со-
Итак, пакет управления создан. Что же не только с помощью электронной поч- бытия и провайдеры. Часть 1: допол-
было получено в результате? Теперь ты, но и, к примеру, с помощью служб нительные возможности. //Системный
при обнаружении антивирусной сис- мгновенных сообщений (ICQ, MSN администратор, №3, 2006 г. – С. 6-13;
темой зараженного файла в консоли и других). Так что целью статьи не яв- Леонтьев К. Узнай секреты WMI: со-
оператора можно наблюдать следую- лялось изобретение велосипеда в уп- бытия и провайдеры. Часть 2: ключ
щие сообщения (см. рис. 3). равлении корпоративными антивирус- к управлению системой и приложени-
Аналогичное сообщение придет ными системами. Главное, на примере ями. //Системный администратор, №5,
на почтовый адрес оператора, что мо- бесплатного антивируса ClamAV по- 2006 г. – С. 28-34.
жет оказаться весьма полезным в слу- казан механизм создания собствен- 4. Microsoft Operations Manager Software
чае массовой вирусной эпидемии. ного пакета управления для Microsoft Development Kit.
Также уведомление будет отправле- Operations Manager. Теперь на основе 5. Microsoft Management Pack Developer
но в случае, если по какой-либо при- приведенных рекомендаций вы смо- Guide.

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

Используйте родственные связи Как видите, это напоминает обычную работу из Perl-сце-
PostgreSQL, будучи, в общем-то реляционной СУБД, под- нария, но на этот раз выборка хранится на стороне серве-
держивает и некоторые «объектные» свойства. Например, ра. Запросом FETCH можно получить следующую, преды-
наследование таблиц. То есть вы можете на базе сущест- дущую, текущую запись (или несколько записей начиная
вующей таблицы (которая в дальнейшем так и будет назы- с текущего положения указателя). Запрос MOVE служит
ваться – базовой) создать производную (или даже несколь- для перемещения указателя в том или ином направлении.
ко), дополнив её новыми полями: Безусловно, при использовании курсоров есть свои не-
CREATE TABLE mytable (id serial, ware varchar, ↵ достатки – частые запросы к СУБД заметно сказываются
price numeric(10,2)); на быстродействии, да и на сеть создаётся дополнитель-
CREATE TABLE withdesc (description text) INHERITS mytable;
ная нагрузка... Поэтому в PostgreSQL курсоры используют-
Теперь в таблице withdesc, помимо собственного по- ся сравнительно редко. Тем не менее, в ряде случаев они
ля description, будут доступны и поля родительской таб- могут оказаться полезны, например, если приходится ра-
лицы mytable – id, ware и price. Причём данные, записан- ботать с большими объёмами данных на слабенькой кли-
ные, скажем, в поле ware таблицы withdesc, будут видны ентской машине.
и в mytable (поскольку физически они там и хранятся). Ес- Нужно заметить, что в PostgreSQL курсоры поддержи-
тественно, и наоборот, изменения mytable будут находить вают только чтение. Кроме того, курсор может быть ис-
отражение и в withdesc. пользован только внутри транзакционного блока (BEGIN –
Благодаря этому можно, например, вести одну таблицу COMMIT/ROLLBACK).
с паспортными данными по всем вашим клиентам, а для
хранения технической информации (различающейся, ска-
жем, для пользователей ADSL и коммутируемого доступа) Ищите информацию в первоисточниках
использовать две производные таблицы на её базе. В PostgreSQL можно узнать много интересного непосредс-
твенно из системных таблиц. Получить их список в интер-
активном терминале позволяет директива \dS. Например,
«Грузите» сервер с помощью курсоров таблица pg_authid содержит сведения о зарегистрирован-
«Классическая» схема взаимодействия между клиентской ных PostgreSQL-пользователях (для работы можно исполь-
программой и сервером баз данных заключается в том, зовать представления на её базе – pg_user, pg_shadow,
что клиент отсылает запрос на сервер, получает ответ, раз- pg_group); из pg_index вы получите данные по индексным
мещает его в своей памяти и обрабатывает в соответствии файлам; и т. д.
со своими задачами. Очевидно, что если выборка получа- В ряде случаев просмотр этих таблиц помогает быст-
ется достаточно объёмная, то клиенту приходится затрачи- рее разобраться в той или иной проблеме. Кроме того, это
вать значительные ресурсы на её временное хранение. довольно удобный путь для автоматического управления
PostgreSQL предлагает способ переложить эту забо- базами PostgreSQL.
ту на плечи сервера: использование курсоров. Курсор –
это указатель на результат запроса (выборку), к которому
клиент может обращаться за тем или иным фрагментом Не забывайте об уборке
без необходимости держать его полностью в своей памя- В процессе активной работы база данных может подвер-
ти. Рассмотрим небольшой пример: гаться фрагментации, что приводит к нерациональному ис-
пользованию места на диске, а также замедляет обработ-
admin=# BEGIN;
ку запросов. Кроме того, внутренний оптимизатор запро-
BEGIN сов нуждается в актуальной статистической информации,
admin=# DECLARE mycursor CURSOR FOR чтобы строить запросы наиболее эффективно.
admin-# SELECT * FROM mytable; Поэтому не забывайте о периодической (в идеале – еже-
DECLARE CURSOR дневной, а также внеплановой после крупных изменений
в базе) очистке, которая выполняется командой VACUUM
admin=# FETCH NEXT FROM mycursor;
(VACUUM ANALYZE – для анализа структуры данных). Па-
1 | Монитор | 7999.00 раметр VERBOSE позволит вам узнать, чем же СУБД за-
нимается в это время.
admin=# FETCH NEXT FROM mycursor;
Нужно заметить, что зачастую при установке PostgreSQL
2 | Коврик для мыши | 7.90 утилита очистки базы (vacuumdb) автоматически «пропи-
admin=# MOVE BACKWARD ALL IN mycursor; сывается» в crontab или сценариях ежедневного обслужи-
вания (periodic). Но поскольку очистка сильно замедляет
MOVE 1
работу СУБД, имеет смысл проконтролировать эти уста-
admin=# FETCH NEXT FROM mycursor; новки и привести их в соответствие с режимом работы ва-
1 | Монитор | 7999.00 шего сервера.

admin=# COMMIT; Сергей Супрунов


COMMIT

№11, ноябрь 2006 27


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

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


SystemRescueCd Linux

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

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

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

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

ле сбоя, копирования данных с пов- ку с USB-устройств. Итак, приступим тить, образ содержит утилиты, ори-
режденных жестких дисков, тестиро- к обзору. ентированные в основном для ра-
вания аппаратной части ЭВМ, сбро- боты с FAT-разделами, т.е. для ОС –
са забытых паролей в семействе ОС Загрузка клонами DOS и Windows 9х.
Windows NT, подготовки дисков для ус- Сразу после появления меню (рис. 1)  GAG (Graphical-Boot-Manager) –
тановки новой ОС и многого другого, не спешите нажимать <Enter> для за- загрузчик, аналог Lilo или Grub,
но обо всем по порядку. пуска Gentoo, кроме изменения пара- работает прак тически со все-
Дистрибутив основан на Gentoo метров, таких как разрешения экрана, ми распространенными ОС (DOS,
Live-CD, версии ядра Linux 2.6.16.10. загрузки с жесткого диска или флоппи- Windows, Linux, BSD). Возможна
Последняя стабильная версия распо- дисковода, нам доступны небольшие, одновременная загрузка до 9 опе-
ложена на официальном сайте про- но очень полезные образы программ рационных систем. Сразу после за-
екта [1]. и утилит. Рассмотрим самые интерес- грузки рекомендуется ознакомить-
Доступны архитектуры x86 (i586) ные параметры. Нажав <F2>, мы мо- ся с документацией и часто зада-
и PPC (Pocket PC). В дистрибутиве при- жем выбрать: ваемыми вопросами (первый и вто-
сутствует поддержка файловых сис-  Memtest86+ v1.65 – тест оператив- рой пункты меню).
тем: ext2/3, reiserfs (включая 4), xfs, jfs, ной памяти на физические повреж-  Ranish Partition Manager – предна-
iso9660, vfat и NTFS (в режиме запи- дения. После загрузки теста сразу значен для работы с партициями,
си используется CaptiveNtfs). Подде- начнется проверка ОЗУ с парамет- более функционален, чем стандар-
рживаются сетевые службы: ssh, nfs, рами по умолчанию (полное тес- тный fdsik. К сожалению, возможна
samba, lufs. тирование), изменить параметры работа в режиме создания только
Первые версии данного дистри- можно, зайдя в небольшое меню, с файловыми системами FAT. Хо-
бутива свет увидел в 2003 г., на дан- нажав клавишу <C>. тя Ranish Partition Manager и обна-
ный момент последний релиз от пер-  FreeDOS – ОС и небольшой на- руживает партиции с ufs (FreeBSD)
вого мая 2006 г. Обновления происхо- бор утилит для работы с жестким и ext2/3 (Linux), из доступных опций
дят не регулярно, в 2003-2004 гг. бы- диском. В №2 за 2006 г. я описы- имеется возможность только уда-
ло выпущено 20 обновлений, тогда как вал FreeDOS [2], но напомню неко- лить их.
в 2005 г. ни одного, в 2006 дистрибу- торые основы. Командой «dir /w»  Aida v2.12 – неплохой тест по оп-
тив «ожил», выпущено 4 релиза. Фо- выведем на экран список доступ- ределению «железа», но, к сожале-
рум проекта поддерживается на про- ных утилит (38 файлов и одна ди- нию, успевший уже устареть (про-
тяжении всего времени существова- ректория – небольшой выбор). блемы с определением новых чи-
ния Live-CD. На сайте доступна доку- Для просмотра файлов с доку- пов, например – nForce2). На 45 за-
ментация на английском, французском ментацией можно воспользовать- кладках будет подробно отображе-
и испанском языках, великого и могу- ся утилитами more или pg, работа- но аппаратное обеспечение ЭВМ.
чего русского нет. ет «донабор» команд и названия Если необходимо записать резуль-
Закачав с официального сайта iso- файлов (как в bash из *nix). Из ос- тат работы теста, выйдите из тес-
образ размером 121 Мб, запишем его новных утилит стоит выделить: та Aida (клавиша <Esc>) и запус-
на диск. Сразу оговорюсь, хотя и воз- fdisk (работа с разделами), chkdsk тите a.bat, который создаст файл
можна установка дистрибутива на USB- (тест FAT-партиций на ошибки), report.asm.
Flash, не считаю, что это рационально testdisk (восстановление разде-  Dban (Darik’s Boot and Nuke) – за-
для дистрибутива «на все случаи жиз- лов FAT, NTFS, ext2/3, reiserfs, ufs мечательная утилита для разруше-
ни» – слишком большой парк машин у и т. д.), presizer (изменение разме- ния данных на жестком диске. Пос-
нас в стране не поддерживает загруз- ра FAT-партиций). Как можно заме- ле загрузки будет представлено ме-

№11, ноябрь 2006 29


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

Обзор Gentoo
Выбрав удобный видеорежим, запустите систему. Во время
загрузки вас спросят, какую кодовую страницу следует ис-
пользовать (русская за номером 31). Добравшись до стро-
ки приглашения, можно будет увидеть небольшие подсказ-
ки по работе с системой (рис. 2), работа ведется по умол-
чанию от пользователя root.
После загрузки будет доступно 1388 команд (полноцен-
ный Linux, это вам не busybox). Никаких графических оболо-
чек типа KDE или GNOME нет (кроме Midnight Commander),
хотя, собственно, зачем они нужны на административном
Рисунок 3. Интерфейс GNU Parted диске? В качестве командного интерпретатора (шелла) ис-
пользуется 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 г.).
Рисунок 4. Интерфейс Qtparted  Утилиты для работы с партициями – GNU Parted,
Qtparted, Partimage.
ню, в котором можно ознакомиться с документацией по
работе с программой. Существует выбор методов очис- Как видно из списка выше, для решения различных за-
тки диска – менее или более эффективные (все зависит дач можно выбирать инструменты, которые удобнее, при-
от времени и ваших целей). Если же необходимо мак- вычнее или функциональнее.
симально быстро уничтожить данные, а не разбирать- Так как дистрибутив ориентирован на задачи для ра-
ся в интерактивном меню с тонкостями dban, сразу пос- боты с жесткими дисками, были приведены скриншоты
ле загрузки наберите команду «autonuke». Будьте очень утилит с графическим интерфейсом GNU Parted (рис. 3),
внимательны, данные невозможно будет восстановить. Qtparted (рис. 4) и Partimage (рис. 5) для ознакомления
 Ntpass (Offline NT Password and Registry editor) – про- с ними.
грамма для сброса забытых паролей и редактирования Первые две – программы для создания/удаления пар-
реестра в ОС Windows семейства NT. Сразу после за- тиций (намного функциональнее fdisk), поддерживают фай-
грузки будет предложено выбрать раздел с Windows- ловые системы ext2/3, raiserfs, FAT, NTFS. Замечу лишь то,
системой или автоматическое подключение всех FAT- что GNU Parted не имеет возможности отката действий.
и NTFS-разделов. Сделано это для того, чтобы была Как видно, интерфейсы у них подобные Partition Magic
возможность выбрать для работы конкретную ОС (бу- и очень простые.
дет отображен полный путь до папок с Windows-сис- PartImage – утилита для создания клонов копий парти-
темами). Если на компьютере установлена всего одна ций (аналог ghost и arcronix), очень жаль, что у данной ути-
Windows, смело следуйте указаниям мастера в автома- литы поддержка NTFS на экспериментальной стадии, и раз-
тическом режиме. В конце его работы вам будет задан работчики предупреждают нас о возможных проблемах при
вопрос на подтверждение сброса пароля или начала ра- клонировании ntfs дисков, но данную функцию можно вы-
боты с реестром в режиме записи. полнить и утилитой ntfsclone.
Не буду останавливаться на описании всех стандарт-
Итак, еще даже не загрузив Gentoo, мы уже получили ных утилит, думаю, большинство пользователей уже зна-
богатый набор утилит различного назначения. Даже поль- комы с mtools, сканером nmap и другими программами.
зователь, не искушенный в Linux, легко сможет воспользо- Но рассматривая далее задачу по пересборке дистрибу-

30
администрирование
тива, мы все же коснемся нескольких примеров работы В данном примере мы устанавливаем сетевую оснаст-
различных утилит. ку и по протоколу nfs подключаемся к нашему файловому
серверу (к домашней папке нужного пользователя).
Пересборка дистрибутива Удобна установка кодовой страницы в системе на стадии
Меня дистрибутив устраивал во многом, но все же нужно загрузки, если помните, ее необходимо вводить каждый раз
было добавить один скрипт для автоматизации клониро- (номер 31). Чтобы задать русскую кодовую страницу для на-
вания рабочих станций. Многие из нас пересобирали дис- шего будущего дистрибутива, выполним команду:
трибутивы, основанные на Knoppix, и знают, что эта зада-
ча не совсем тривиальна и занимает много времени. Чаще sysresccd-custom setkmap ru
всего в начале нужно создать образ дистрибутива, распа-
ковать его, найти в нем корневую файловую систему (очень Теперь создадим главный iso-образ, который позже мы
часто это небольшой gzip-архив) и заархивированный об- запишем на диск:
раз системы (Cloopfs). В SystemRescueCd Linux основной
архив находится в корне диска, его объем около 100 Мб sysresccd-custom isogen mysyscd
(sysrcd.dat запакован Cloop) для работы с ним нам помо-
жет скрипт sysresccd-custom. Итак, рассмотрим подробно mysyscd – метка тома будущего диска. Образ и его md5-хеш
разборку и сборку дистрибутива. будут расположены в папке /mnt/custom/customcd/isofile/.
Загрузим Gentoo и выделим место на жестком диске Все готово, можно записывать образ на CD и грузить-
для распаковки cloop-образа системы, для этого примон- ся в систему. Все данные операции можно было выполнить
тируем партицию командой: и стандартными утилитами cloop-util и cdrtool, но это заняло
бы больше времени плюс, как уже упоминалось, без соот-
mount /dev/hda1 /mnt/temp1 ветствующих навыков неопытные пользователи столкнулись
бы с проблемами. Если все же любопытно, что делает скрипт
Создадим образ с файловой системой ext2: sysresccd-custom, его можно найти в папке /usr/sbin/.

dd if=/dev/zero of=/mnt/temp1/fs.iso bs=1M count=1200 Скрипт MyLanCloon


mkfs.ext2 /mnt/temp1/fd.iso
Я специально вынес скрипт в отдельный раздел, во-пер-
Примонтируем созданную файловую систему в /mnt/ вых, из-за его большого размера, а во-вторых, из-за необ-
custom, должен заметить, что образ нужно монтировать ходимости рассмотреть его подробнее.
именно в эту директорию (она уже имеется на диске): Задача: написать скрипт для автоматизации процесса
создания и копирования iso-образов клиентских машин
mount -o loop /mnt/temp1/fd.iso /mnt/custom на файловый сервер. Копирование будет производиться
по протоколу SMB, идентификация образов рабочих стан-
Теперь распакуем файл-архив sysrcd.dat: ций будет по их MAC-адресу.
Задача тривиальна, и многие используют для её реше-
sysrescue-custom extract ния большие и зачастую дорогие программные комплексы
(Acronix, Ghost…), но скрипт во многом заменяет подобные
Процесс распаковки, как уже упоминалось, занимает программы и обладает замечательным свойством – беско-
долгое время, с этим, к сожалению, ничего поделать не- нечной расширяемостью. Так как SystemRescueCd Linux об-
льзя. После распаковки, зайдя в директорию /mnt/custom/, ладает богатым инструментарием для работы с партиция-
мы увидим нашу систему, которую можно уже изменять. ми и файловыми системами, наши возможности будут ог-
В качестве примера добавим скрипт MyLanCloon в папку раничены только фантазией (в *nix-области).
bin. Сам скрипт рассмотрим далее.
Теперь снова запакуем систему (в cloopfs) командой: #!/bin/bash

# Установка параметров сети


sysrescue-custom cloop
sysrescue-costom extract300 20000 ifconfig eth0 192.168.1.200 netmask 255.255.255.0
route add default gw 192.168.1.1

Должен заметить, что процесс запаковки идет еще доль- # Монтирование сетевой папки
mount.smb //192.168.1.10:/Files/ /mnt/temp1/
ше, чем распаковка.
Разработчики приготовили для нас еще один сюрп-
# Определение MAC-адреса
риз, после архивирования в cloop мы можем создать файл MACADDRES="`strings /sys/class/net/eth0/address`"
autorun в папке /mnt/custom/customcd/isoroot/, который вы- echo "Mac addres is ${MACADDRES}"
полнится при загрузке системы. Это может быть удобно # Определение файловых систем
для установки каких-либо небольших параметров, напри- # FAT
dd if=/dev/hda1 bs=512 count=1 | strings | grep FAT
мер установки сети: if [ $? -eq 0 ]; then
FS="1"

#!/bin/bash
ifconfig eth0 192.168.1.200 netmask 255.255.255.0 # NTFS
route add default gw 192.168.1.1 dd if=/dev/hda1 bs=512 count=1 | strings | grep NTFS
mount -t nfs 192.168.1.10:/home/users /mnt/temp1/ if [ $? -eq 0 ]; then

№11, ноябрь 2006 31


администрирование
FS="2" станциях установлена одна ОС и находится на hda1 (дис-

ке C), если установлено 2-3 или более ОС, следует редак-
# Процедура сохранения образа тировать скрипт либо для выбора конкретной ОС, либо для
do_save()
{ клонирования всего диска (если необходимо сохранить все
# Сохранение FAT-образа операционные системы).
if [ $FS -eq 1 ]; then
partimage -z1 -o -b -d save /dev/hda1 ↵ FAT и NTFS – проверяем, какая файловая система на ус-
/mnt/temp1/arhiv/${MACADDRES} тройстве hda1. Если FAT, то в переменную FS будет занесе-
exit 1
fi но значение 1, если NTFS – 2. В дальнейшем это значение
нам понадобится для выбора утилит клонирования.
# Сохранение NTFS-образа
if [ $FS -eq 2 ]; then Процедура сохранения образа – как уже упомина-
ntfsclone --save-image /dev/hda1 -o ↵ лось выше, partimage работает стабильно только с FAT-
/mnt/temp1/arhiv/${MACADDRES}
exit 1 файловыми системами (FAT12, FAT16 и FAT32) ОС Windows,
fi но при этом обладает большими возможностями. Собствен-
}
но из-за этого скрипт и разделен на две части: для работы
# Процедура загрузки образа с FAT или NTFS. Из интересных возможностей Partimage
do_load()
{ стоит выделить то, что он определяет занятое пространство
# Загрузка FAT-образа на диске и копирует только его, а не диск целиком (как dd),
if [ $FS -eq 1 ]; then
partimage -b restore /dev/hda1 ↵ при этом может очень эффективно архивировать iso-образ
/mnt/temp1/arhiv/${MACADDRES}.000 (в среднем компрессия составляла 50%).
exit 1
fi Сохранение FAT-образа – утилитой partimage сохраня-
ем FAT-образ. Рассмотрим подробно ключи:
# Загрузка NTFS-образа
if [ $FS -eq 2 ]; then
ntfsclone --restore-image -O /dev/hda1 ↵ partimage -z1 -o -b -d save /dev/hda1 ↵
/mnt/temp1/arhiv/${MACADDRES} /mnt/temp1/arhiv/${MACADDRES}
exit 1
fi где:
}
 z1 – уровень компрессии (z0 – быстрая запаковка,
# Основная функция но «слабая» компрессия, z2 – максимальная компрес-
case "$1" in
save) сия, но длительное время запаковки);
do_save;;  o – если файл с данным именем существует, перезапи-
load)
do_load;; сать его;
esac  b – не запрашивать параметры у пользователя в интер-
активном меню;
Итак, рассмотрим скрипт подробнее.  d – не запрашивать у пользователя дополнительное опи-
Установка параметров сети – стандартными коман- сание для образа;
дами ifconfig и route задаем IP-адреса локальной маши-  save – указываем partimage, что необходимо копировать
ны и роутера. информацию с устройства в файл;
Монтирование сетевой папки – монтирование проис-  /dev/hda1 – это наш жесткий диск. И последний пара-
ходит по протоколу smb, сделано это из соображений сов- метр – имя файла образа, оно будет равно значению
местимости с Windows-сетевыми ресурсами, так как файло- переменной MACADDRES.
вый сервер может быть и не под управлением ОС Linux. Же-
лающие могут выбрать nfs-протокол, конечно же, если дан- Сохранение NTFS-образа – для создания образов
ный сервер установлен в сети. Если требуется обеспечить дисков с файловой системой ntfs воспользуемся утилитой
безопасность при копировании iso-образов, можно задейс-
твовать lufs (Linux users file system) и производить монтиро-
вание сетевой папки по ssh-протоколу. Также по lufs мож-
но монтировать папки ftp-серверов. Выбирать есть из чего,
все зависит от доступных средств, организации сети и ва-
ших предпочтений.
Определение MAC-адреса – как я уже говорил, для
идентификации образов рабочих станций мы будем ис-
пользовать их MAC-адреса. В переменную MACADDRES
заносится MAC рабочей станции, впоследствии задейс-
твуем его.
Определение файловых систем – так как мы точно
не знаем, какая файловая система используется Windows,
для начала определим ее. Зная, что в первых 512 байтах
жесткого диска (цилиндр 0, головка 0, сектор 1) находится
Master Boot Record, проверим, FAT ли это или NTFS. Дол-
жен заметить, я исходил из предположения, что на рабочих Рисунок 5. Интерфейс Partimage

32
администрирование
ntfsclone из состава ntfstools. О пара-
метрах ntfsclone: Альтернативы SystemRescueCd на Knoppix 4.0.2 версии ядра Linux kernel
Linux 2.6.12.5. Последняя доступная версия
ntfsclone --save-image /dev/hda1 ↵ Emergencu CD [4] – спасательный дистри- 1.3.6 от 24 февраля 2006 года. Дистри-
-o /mnt/temp1/arhiv/${MACADDRES}
бутив, основанный на Gentoo Linux вер- бутив поддерживает файловые системы
где: сии ядра 2.4.22. Cодержит графический ext2/3, reiserfs, FAT, NTFS (для режима за-
 save-image – сохранение образа; интерфейс IceWM, достаточно компактен писи используется captive или ntfstools)
 /dev/hda1 – наш жесткий диск; (~180 Мб), но последний релиз от 28 октяб- и другие. Включены сетевые службы nfs,
 o – путь и имя файла образа (будьте ря 2003 г. Поддерживает большинство на- smb, cifs, ssh и afs. Дистрибутив – наибо-
внимательны, параметр «-о» в ниж- иболее распространенных файловых сис- лее близкий конкурент SystemRescueCd
нем регистре). тем (FAT, ext2/3, NTFS, ...) и сетевых служб Linux, но есть одна странность. На офици-
(smb, nfs, ssh,...). Программы для работы альном сайте, в ChangeLog говорится о вы-
Должен отметить, что ntfsclone, с партициями Partimage и gpart. Дистри- пуске версии 1.3.8 от 10.10.2006, но на ftp
хоть и копирует только занятое про- бутив в принципе богат утилитами и ком- дистрибутива данной версии нет. Возмож-
странство на диске, не умеет сжимать пактен, но за 3 прошедших года, к сожале- но, это ошибка, а, может быть, когда вы бу-
образ. В данном случае можно прямо нию, успел устареть. дете держать журнал в руках, версия дист-
в потоке произвести запаковку, ис- INSERT LiveCD [5] – основанный рибутива и «объявится»?
пользуя gzip, но эта операция займет
дополнительное время. процедура сохранения образа, если тив, подходящий для работы как с до-
Процедура загрузки образа – рас- load – сработает процедура загрузки машними машинами, так и в неболь-
паковывает образ системы. Опять же образ. Примеры: «MyLanCloon save» ших корпоративных сетях (после не-
задействуем для развертывания обра- или «MyLanCloon load». обходимых доработок).
зов обе утилиты: partimage для FAT-раз- Форум проекта поддерживается
делов и ntfsclone для NTFS. Все, скрипт готов к работе в соста- на протяжении всего существования
Загрузка FAT-образа: ве SystemRescueCd Linux для автома- дистрибутива, несмотря на некоторые
тизации работы по клонированию об- «паузы» в выпуске новых релизов.
partimage -b restore /dev/hda1 ↵ разов операционных систем рабочих К положительным моментам от-
/mnt/temp1/arhiv/${MACADDRES}.000
станций. Конечно, скрипт далек от иде- носится наличие скрипта sysresccd-
где: ального – не хватает проверок на су- custom, который позволяет легко пе-
 b – не запрашивать параметры ществование файлов, подтвержде- ресобрать дистрибутив.
у пользователя в интерактивном ний на выполняемые действия и дру- К а к м н о г и е, н а в е р н о е, ус п е -
меню; гих «красивых» процедур. Например, ли заметить, размер дистрибутива
 restore – восстановление образа; можно расширить основную функцию (121 Мб) позволяет хранить на дис-
 /dev/hda1 – жесткий диск. Послед- case вот таким образом: ке мас тер - образ Windows- с ис те -
ний параметр – путь до образа, мы (до ~580 Мб, что вполне доста-
имя файла будет равно значению case "$1" in точно), также из-за компактности
[Ss][Aa][Vv][Ee])
переменной MACADDRES, плюс do_save;; SystemRescueCd Linux можно записать
расширение «.000». [Ll][Oo][Aa][Dd]) на miniCD, что добавляет дистрибути-
do_load;;
esac ву еще один плюс.
Загрузка NTFS-образа: На этом все, удачной работы!
В этом случае уже не будет иметь
ntfsclone --restore-image ↵ значения, в каком регистре набирают- 1. http://www.sysresccd.org – официаль-
-O /dev/hda1 ↵
/mnt/temp1/arhiv/${MACADDRES} ся параметры save и load. Еще одной ный сайт дистрибутива Sysrescuecd
очень полезной функцией было бы со- Linux.
где: здание процедуры для установки мас- 2. Максимов И. FreeDos – новый взгляд
 restore-image – восстановление об- тер-образа на «чистый» жесткий диск. на старые вещи.//«Системный адми-
раза; Но скрипт получился и так громоздким, нистратор», №2, февраль 2006 г. –
 O – путь до устройства для обра- мы бы совсем отвлеклись от основного C. 32-37.
за (будьте внимательны, параметр обзора дистрибутива SystemRescueCd 3. http://gazette.linux.ru.net/rus/articles/
«-O» в верхнем регистре); Linux и его утилит. Если у вас есть же- abs-guide/index.html – «Advanced Bash-
 /dev/hda1 – наш жесткий диск. лание доработать скрипт, но не хвата- Scripting Guide. Искусство программи-
И как всегда, последний пара- ет опыта в подобных вещах, очень ре- рования на языке сценариев команд-
метр – путь до файла образа на- комендую документ «Advanced Bash ной оболочки».
шей системы. Scripting» на русском языке, располо- 4. http://emergencycd2.sourceforge.net/
женный по адресу [3]. index.ru.html – официальный сайт Cool
Основная функция – основной Linux CD и Emergency CD.
оператор выбора case: если в консоли Выводы 5. http://www.inside-security.de – офици-
выполнить скрипт с параметром save – SystemRescueCd Linux – функциональ- альный сайт дистрибутива INSERT
выполнится рассматриваемая выше ный, быстрый, современный дистрибу- LiveCD.

№11, ноябрь 2006 33


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

Автоматизируем процесс установки


обновлений с PatchQuest 4

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

Л
учший способ решить эту про- ные на известную уязвимость, что в це- нородные компоненты, и не все воз-
блему – использовать специа- лом позволит повысить общий уровень можности, которые хотелось бы видеть
лизированные утилиты, автома- безопасности и сократит простои сис- в подобных продуктах, есть в WSUS.
тизирующие сбор информации и уста- темы и администрирование в целом. Здесь на помощь придут разработки
новку патчей. Их применение гаран- Корпорация Microsoft в настоящее вре- сторонних производителей.
тирует, что на компьютерах будет ус- мя предлагает свое решение Windows
тановлено самое последнее програм- Server Update Services (WSUS) [1], поз- Возможности PatchQuest
мное обеспечение, уменьшит коли- воляющее администратору централи- Назначение утилиты PatchQuest 4 [2]
чество возможных лазеек для хаке- зованно управлять установкой обнов- разработки AdventNet Inc. аналогич-
ров и вирусов, сделает малоэффек- лений и исправлений продуктов этой но WSUS – автоматизация управле-
тивными целевые атаки, направлен- компании. Но не всегда сеть имеет од- нием и установкой патчей, исправ-

34
администрирование
лений и модификаций на операци-
онные системы и приложения. С по-
мощью 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 Рисунок 1. После сканирования администратор получит подробнейший отчет
Server 2.1, 3.0, 4.0, Debian GNU/ администратор получит всю необходи- го агента сервер PatchQuest для до-
Linux 3.0 (Woody) и 3.1. мую информацию по интересующему ступа в систему использует логин
его вопросу, для наглядности исполь- и пароль. Поддерживается аутенти-
Возможна автоматическая загруз- зуются различные графики. фикация средствами Windows, Active
ка и установка отсутствующих патчей Дополнительно к этим возможнос- Directory, а для Linux систем telnet и ssh.
и обновлений на основании заданных тям PatchQuest может быть использо- Для удобства доступа к компьютерам
правил или корпоративных полисов бе- ван для инвентаризации установлен- администратор может заранее создать
зопасности. Администратор стоит пе- ного на компьютерах программного удостоверения, состоящие из логина
ред выбором: устанавливать все пат- обеспечения. и пароля, и занести эту информацию
чи либо отбирать их по некоторому При проверке ус тановленных в PatchQuest. Информация между сер-
критерию, например, по серьезнос- на компьютере патчей используются вером и целевой машиной может пере-
ти уязвимости, которую патч устраня- все возможные методы: проверка за- даваться в зашифрованном виде.
ет. В PatchQuest большим подспорьем писей реестра, размера, версии и кон- Для удаленного управления на-
при отборе патчей является возмож- трольной суммы файла. С помощью стройками PatchQuest и процессом
ность оценки уязвимости. Сканируя PatchQuest можно легко определить, обновлений используется понятная
отдельный узел или диапазон адре- когда нужный файл был переписан его и удобная веб-консоль. К сожале-
сов вручную или по расписанию в ука- более ранней версией. нию, в списке языков локализации от-
занное время PatchQuest, идентифи- Так же как и WSUS, PatchQuest ра- сутствует русский. Доступ к серверу
цирует потенциальные нарушения бе- ботает по клиент-серверной схеме, при этом возможен как по http, так и
зопасности в операционной системе когда на компьютерах устанавлива- по защищенному протоколу https.
Windows и приложениях и сообщает о ется агент, который, взаимодействуя Для работы с консолью можно при-
необходимых для их устранения пат- с сервером, управляет установкой менять в принципе любой доступ-
чах, а также об уязвимостях, для ко- обновлений и сбором информации. ный веб-браузер. Подойдут Internet
торых в базе на момент сканирова- Но может использоваться
ния еще нет патчей. Администратору схема, не требующая уста-
в этом случае очень легко определить новки агентов на компью-
системы, нуждающиеся в особом вни- теры пользователей, а так-
мании, которые требуют установки пат- же комбинированный ва-
чей, устраняющих критические уязви- риант доступа. В качестве
мости, и вовремя принять соответству- серверов могут выступать
ющие меры. По окончании сканирова- компьютеры, работающие
ния выдается подробный отчет, в кото- под управлением Windows
ром будет указан статус патча, Bulletin от 2000 до 2003, а также
ID, имя патча, его краткое описание, RedHat Linux и Debian. Аген-
уровень угрозы и другая информация ты доступны для этих же сис-
(рис. 1). Возможно отправление отче- тем плюс Windows NT SP6a
тов по электронной почте. Система от- Workstation. При варианте Рисунок 2. Вариант использования PatchQuest
четов PatchQuest продумана хорошо, работы без установленно- выбирается во время установки

№11, ноябрь 2006 35


администрирование
пользователь guest с таким же паро-
лем, но в документации об этом поче-
му-то ничего не сказано. Правда, он от-
носится к группе Normal User, пользо-
ватели которой могут просматривать
отчеты и информацию о доступных
обновлениях. В результате перед ва-
ми появится основное окно програм-
мы настройки (рис. 3).
Теперь необходимо выполнить ряд
действий, после которых можно будет
безопасно использовать PatchQuest,
проверять системы и устанавливать
патчи несколькими щелчками мышки.
Заходим во вкладку «Settings» и ус-
танавливаем:
 в Proxy Configuration – параметры
прокси-сервера;
 в Mail Server Configuration – пара-
метры корпоративного SMTP-сер-
Рисунок 3. Основное окно программы настройки вера, необходимого для отправки
Explorer от 5.0, Netscape от 7.0, Mozilla обходимо перейти в вариант Free или отчетов;
и Mozilla Firefox 1.5, Opera от 7.2. Стра- удалить PatchQuest.  в Patch Store Location – каталог,
ничка оптимизирована для разреше- Использование языка Java наложи- в котором будут храниться пат-
ний 1024x768 и выше. Для хранения ло и свои системные требования. Так чи (по умолчанию C:\AdventNet\
настроек используется база данных для работы сервера PatchQuest пона- SecureCentral\PatchQuest\store);
MySQL. Она, как и веб-сервер, напи- добится компьютер с частотой не ме-  в MS Office Media Location – ката-
санный на Java, входит в дистрибутив, нее 1,8 Гц и имеющий минимум 512 Мб лог, в котором хранятся установоч-
поэтому никаких дополнительных ком- оперативной памяти. Для клиента из- ные файлы MS Office;
понентов устанавливать не надо. менились только требования к ОЗУ –  в Language Settings – язык по умол-
Продукт распространяется под 256 Мб. Для баз обновлений рекомен- чанию, необходимый при выборе
двумя лицензиями. Бесплатная Free дуется оставить 10 Гб свободного мес- специфических патчей для опера-
Edition разрешает управлять обновле- та на жестком диске. Это рекоменда- ционной системы и приложений;
ниями для 5 компьютеров, вне зависи- ции разработчиков. При тестировании  в Vulnerability Database Update
мости от установленного программно- с этой задачей нормально справлял- Interval – интервал обновления
го обеспечения или их версии. Платная ся компьютер с процессором Celeron баз уязвимостей и отсылку отче-
Professional Edition Subscription License, 633 Гц и 256 Мб оперативной памяти, тов по обновлению;
реализованная по подписному принци- на нем одновременно работал как сер-  в Change Password – изменяем па-
пу, то есть «Node Locked License» – ли- вер, так и клиент и дополнительно про- роль администратора PatchQuest;
цензия, привязанная к определенной водилось обновление еще 4 систем.  в Global Credentials – создаем удос-
машине, покупается на определен- Система несколько подтормаживала, товерения для быстрого доступа
ный срок, по окончании которого не- но работать все равно было можно. к различным компьютерам;
обходимо либо ее обновить, либо уда-  в User Administration – пользовате-
лить продукт. Интересно, что согласно Установка лей, которые могут получить до-
лицензионного соглашения, компания и использование ступ к серверу PatchQuest.
оставляет за собой право в любой мо- Установка сервера ничего сложно-
мент провести аудит для выяснения го не представляет. Если установка Далее следует включить подде-
правильности использования лицен- происходит в Linux без использова- ржку защищенного протокола HTTPS.
зии, перед этим она за 7 дней предуп- ния графического интерфейса, набе- Для этого в консоли переходим в под-
реждает администратора. Также стоит рите SecureCentral_PatchQuest.bin – каталог bin, который расположен
отметить, что техническая поддержка console. На втором шаге вас попросят в месте установки PatchQuest, и на-
доступна для всех, вне зависимости уточнить номер порта для веб-серве- бираем HTTPSSupport.bat enable лю-
от лицензии. ра (по умолчанию используется 8080) бой номер порта (в Windows) в Linux –
Для скачивания предоставляется и номер порта для подключения кли- имя скрипта другое HTTPSSupport.sh.
один файл, версия продукта выбира- ентов (9000). После установки вызы- Теперь повторно регистрируемся, ис-
ется во время установки (рис. 2). Ес- ваем веб-браузер и заходим по адре- пользовав уже https.
ли указать Professional Edition, его мож- су http://имя_сервера:8080/, зарегист- Следующий шаг – установка аген-
но протестировать в течение 30 дней рировавшись как пользователь admin тов. Их можно получить через веб-
на 10 компьютерах. После этого не- с паролем admin. В системе есть еще браузер, нажав на ссылку «Download

36
администрирование
Agent» и выбрав операционную сис-
тему, в которой агент будет устанав-
ливаться. Как вариант их можно поп-
росту скопировать с каталога C:\
AdventNet\SecureCentral\PatchQuest\
agent\windows (для Windows) и …agent\
unix (для Linux). Установка агентов так-
же не вызывает сложности. Вам не-
обходимо будет указать параметры
для подключения сервера, его имя
и номер порта (9000).
Далее необходимо указать ком-
пьютеры, на которых за обновления-
ми будет следить PatchQuest. Нажи-
маем «Add System» и попадаем в окно
настройки «Add New System» (рис. 4).
В поле «Add System By» можно ввес-
ти адрес или имя одного компьюте-
ра, указать диапазон адресов, им-
портировать список систем из фай-
ла и использовать Active Directory. Рисунок 4. Окно добавления компьютеров
В «Operating System Type» выбираем «Add & Scan». Просмотреть список всех жима доступа, возможность работы
тип операционной системы. Например, систем, можно нажав на «System». Бу- по защищенному каналу. Без сомне-
если выбрано Windows, будут добавле- дет доступна информация об имени, ний, PatchQuest является удобным про-
ны только компьютеры, находящиеся системе, IP-адресе, режиме управле- дуктом, позволяющим на порядок уп-
под управлением этой OC. Для зане- ния (агент или удаленный доступ) и со- ростить управление установкой обнов-
сения в список всех поддерживаемых стоянии системы, времени последне- лений для группы компьютеров.
PatchQuest систем используйте «All». го сканирования и версии операцион-
В поле «Credential for Windows/Linux» ной системы. Для удобства отбора от- 1. Сергеев С. Windows Server Update
вводим параметры для доступа. Здесь дельные компьютеры или патчи могут Servies.//«Системный администратор»,
можно выбрать созданные в «Global быть объединены в группы. № 4, 2005 г. – С. 8-10.
Credentials» удостоверения, либо В PatchQuest реализовано то, че- 2. Сайт проекта PatchQuest 4 – http://www.
ввести логин и пароль вручную. Кноп- го многим не хватает в WSUS: под- securecentral.com/products/patchquest/
ка «Diagnose» позволит проверить со- держка нескольких операционных сис- index.html.
единение с указанной системой. Ког- тем, оценка уязвимостей клиентских 3. Демонстрационная версия PatchQuest –
да все настроено, нажимаем «Add» или компьютеров, гибкость в выборе ре- http://demo.patchquest.com.

№11, ноябрь 2006 37


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

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


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

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


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

Ч
еловеческая судьба у меня ас- ги… Увлекательное дело – заглянуть щий Интернет? Или все-таки обратим-
социируется с образом… шкафа в чужой «шкаф», познакомиться с об- ся к воображаемому архиву, где толь-
для бумаг. У каждого этот вооб- разом мыслей, биографией человека, ко факты, факты, факты?.. Предла-
ражаемый «шкаф» выглядит по-свое- его точкой зрения на те или иные вещи. гаю второе.
му. Добротный, из красного дерева, Нет-нет, не искать «скелеты» в шкафу
на полках выстроились аккуратные или секретные материалы. Просто по- Семья
богатые папки, сверкает металл ручек пытаться понять, что скрывается за да- Главное «отделение» виртуального
и замочков, которые запирают важ- тами, фактами, биографическими под- шкафа Максима Чиркова, конечно,
ные деловые секреты, или скромный, робностями… дела семейные. Иначе и быть не мо-
светлый, легонький, не обремененный Любопытно, что хранит «шкаф жет. Какая бы замечательная работа
вещами, оклеенный сердечками, или судьбы» ведущего популярного проек- ни была у человека, как бы он ни лю-
тяжелый дубовый, дверцы приоткры- та и одноименного сайта OpenNET.ru? бил дело, которому служит, основной
ты и висят на петлях, облупилась по- Еще бы! Тем более что известно о Мак- вопрос, как мне кажется: не КАК жить,
лировка, на полках небрежно навале- симе Чиркове немного. Живет в Тюме- а ЗАЧЕМ, РАДИ ЧЕГО? Семья – глав-
ны кучей бумаги, письма, счета и кни- ни, нет 30 лет… Заглянем в вездесу- ное, потому что это и настоящее, и бу-

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

№11, ноябрь 2006 39


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

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

40
человек номера
ной поддержки у коммерческих реше-
ний. Мой опыт говорит, что такая под- OpenNET.ru, одному из первых русско-
держка может оказаться формальной, язычных ресурсов, посвященных откры-
состоящей из пустых уверений и обе- тым технологиям, исполняется 10 лет.
щаний. Решение ошибок производи- Редакция журнала «Системный адми-
теля может затянуться на длитель- нистратор» поздравляет Максима Чир-
ный срок, фирма может закрыться… кова и всех постоянных посетителей ре-
Что касается открытого ПО, в боль- сурса с юбилеем.
шинстве случаев поддержки сообщес-
тва, образовавшегося вокруг проекта, жанию из числа русскоязычных ре- ла лишь в планах, но последнее вре-
вполне достаточно. Если сообщество сурсов, посвященных Linux. К популяр- мя просьбы по созданию мобильной
не реагирует на ваши вопросы, значит ности сам Чирков относится спокойно. версии сайта появились в письмах по-
ответы на них есть в документации или Вернее не думает о ней. Для него со- сетителей, и теперь реализация – од-
эти проблемы многократно обсужда- здание и поддержка сайта – многолет- на из приоритетных задач. Некоторые
лись раньше. Выход есть – для мно- ний труд, ежедневная рутина, а попу- новые возможности являются плодом
гих крупных открытых проектов сегод- лярность предполагает в первую оче- экспериментов. Например, на подхо-
ня можно найти фирмы, оказывающие редь ответственность за каждое сло- де реализация контекстных подска-
коммерческую поддержку. А нетриви- во, каждый новый шаг. И на лаврах зок на этапе формирования поисково-
альные проблемы можно обсудить на- Максим Чирков не спешит почивать. го запроса, подобная «google suggest».
прямую с разработчиками». Наоборот, сетует, что конструктивной Вообще давно хочется поменять поис-
Что же касается главного своего критики маловато, а ведь именно она ковый механизм на сайте, но, к сожа-
проекта, историю его создания Мак- позволяет немного по-другому взгля- лению, приемлемых вариантов пока
сим рассказывает так: «Решил во что нуть на привычные вещи. Однако, по- не нашел...»
бы то ни стало попробовать Linux пос- хоже, Максим умеет критиковать се- Максим улыбается: «Все самое
ле чтения статьи Владимира Водолазс- бя лучше, чем любой посетитель сай- интересное еще впереди». Кстати,
кого в одном из номеров журнала «Мо- та. Любимое его занятие – доведе- улыбку эту я вижу лишь виртуально,
нитор» за 1994 год. Экспериментиро- ние до совершенства скриптов… Сайт как традиционные символы – двоето-
вал по мелочам со Slackware 3.0, пока в постоянном развитии, иногда эта ра- чие и скобочка. Наша беседа о содер-
в 1996 году не удалось купить фирмен- бота даже не видна гостям OpenNET.ru: жимом виртуального «шкафа судьбы»
ный диск со Slackware 3.1, это был один идет оптимизация подсистем, реализа- тоже виртуальна. Впервые я беру ин-
из первых дистрибутивов, включав- ция возможности репликации данных тервью по электронной почте, и, одна-
ших в себя Linux ядро 2.0.x, с тех пор для быстрого переключения на резер- ко, это не мешает мне, надеюсь, и чи-
с UNIX больше не расставался. В про- вный сервер при проблемах первично- тателям, понять главное в герое это-
цессе изучения подписался на FIDO го, без потери функциональности сай- го очерка. Это основное ценное зна-
конференции RU.LINUX и RU.UNIX. На- та. Это, пожалуй, высший пилотаж – ние о хозяине популярного сайта хра-
копилось несколько десятков интерес- как работа опытного дворецкого в ко- нится на дальней полке со скромным
ных сообщений-заметок. В букмарках ролевском дворце. названием «Радости». Чему радует-
сформировался небольшой набор ин- Пожалуй, самое интересное в па- ся ведущий проекта OpenNET? Сам
тересных ссылок. Разместил матери- почке с манящим названием «Планы признался: «Тому, что могу поделить-
ал как часть своей домашней страни- и перспективы». Заглянем? «Уже не- ся накопившейся информацией с дру-
цы http://www.tyumen.ru/~mc/linux. По- сколько лет в планах логическое объ- гими». Вот причина, по которой Мак-
лучилось три раздела: статьи, ссыл- единение (контекстная связь) всех ка- сим, не публичный человек, невольно
ки и программы. К лет у 1998 го- талогов сайта. В дополнение к разде- стал ядром притяжения многих людей.
да проект вырос, обзавелся фору- ленным в силу исторических причин Жизнь вокруг него кипит, а сам Чирков
мом и разделом новостей. Сайт был каталогам программ, ссылок, доку- вполне удовлетворен ролью наблюда-
доступен как http://linux.opennet.ru. ментации и советов, планируется реа- теля. Не ищете его биографию в Интер-
www.opennet.ru тогда планировалось лизовать единый тематический рубри- нете. Сходите на сайт, и вы поймете –
сделать порталом с более широкой катор. Если текущая связующая систе- здесь весь Максим Чирков. Виртуаль-
тематикой, не ограничивающейся ма мини-порталов оперирует раздела- ная судьба, самая оригинальная в мо-
компьютерами и UNIX. Осенью 1998 ми каталогов, то новая система при- ей журналистской коллекции судеб.
года домен был передан мне в лич- звана функционировать на уровне ко- Скажете – несерьезно? Однако еще
ное пользование и сайт поселился нечных записей из разделов, объеди- неизвестно, что долговечнее – шкаф,
на http://www.opennet.ru». А этой осе- няя их в единую иерархическую струк- набитый невостребованными бумага-
нью проекту исполняется 10 лет. туру. Хочу создать версию сайта для ми, или одна короткая строчка в окош-
Сегодня дело, которому служит карманных компьютеров. Админист- ке браузера: www.opennet.ru...
Максим Чирков, развивается самы- ративный интерфейс для этого давно
ми стремительными темпами. Сайт адаптирован, но сам сайт, и особен- Оксана Родионова,
www.opennet.ru давно получил извес- но форум, просматривать неудобно. фото из семейного архива
Максима Чиркова
тность, как самый богатый по содер- До некоторого времени эта идея бы-

№11, ноябрь 2006 41


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

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


внутри компании

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

П
о мере роста и развития инфор-  Действия нелояльных сотрудни-  разработки плана действий для лик-
мационных систем количество ков, направленные на проведе- видации выявленных уязвимых
вариантов обхода систем защи- ние преднамеренных системных мест.
ты будет увеличиваться. А это диктует атак, например, с целью организа-
необходимость постоянно контролиро- ции отказов в обслуживании либо Необходимо уделять основное вни-
вать и совершенствовать системы за- на кражу конфиденциальной ин- мание процедурам, связанным с вы-
щиты и отказоустойчивости. Для вы- формации. полнением требований нормативных
полнения этой задачи необходимо про-  Случайные действия пользующих- документов в области защиты инфор-
водить регулярные проверки безопас- ся доверием сотрудников с офици- мации, а также проверке защищеннос-
ности для определения реальных рис- альными, но чрезмерными систем- ти сегментов сети предприятия, уда-
ков, стоящих перед организацией. Та- ными правами, в результате кото- ленного доступа, а также правилам
кие риски включают в себя: рых они получают доступ к конфи- и процедурам в области IT и их общей
 Риски, связанные с нарушением денциальной информации или вы- организации.
требований внутренних и норма- зывают сбои в рабочих процессах. Методика обнаружения/сканирова-
тивных документов РФ (ФСТЕК,  Действия хакеров-любителей, про- ния доступа корпоративной сети:
ФСО, ФСБ, МВД, ЦБ РФ), а также никающих в системы компании  определение маршрутов доступа
других международных стандартов или вызывающих сбои в процессе в сеть;
в области защиты информации. обработки информации.  запрос DNS;
 Целенаправленные действия вы-  идентификация хостов;
сококвалифицированных хакеров, Диагностика системной защиты  сканирование сетевых служб;
неэтичных конкурентов, которые заключается в оказании предприятию  сканирование на предмет уязви-
имеют цель получить конкретную содействия в снижении риска обхода мых мест.
информацию или нарушить рабо- систем защиты его информационных
чие процессы предприятия и дейс- сетей с помощью: Коммерческие программы обеспе-
твуют на основе внутрифирмен-  выявления уязвимых мест в систе- чивают тестирование на предмет сле-
ной информации (например, предо- мах защиты, анализа организации, дующих уязвимых мест:
ставленной действующим или уво- правил и процедур информацион-  слабые места в защите Sendmail/
ленным сотрудником компании). ной безопасности; SMTP;

42
безопасность
 уязвимость к открытым атакам; ко высока вероятность того, что комбинированная атака
 недостаточная защита в области TFTP и FTP; на эти уязвимые места будет иметь успех.
 уязвимость NetBIOS/SMB;
 уязвимость RPC-сервиса; Техники удаленного анализа
 уязвимость HTTP/CGI; А теперь рассмотрим несколько техник удаленного ана-
 слабые места сетевых информационных служб (NIS); лиза (атаки), выполняемых для внутренней диагностики
 IP-спуфинг (имитация соединений)/прогнозирование или злоумышленником.
последовательности, отказ в обслуживании и многие Используемые доступные инструменты:
другие виды атак;  Nmap – http://www.insecure.org/nmap/nmap_download.html.
 проверка сетей и протоколов на спуфинг,  Hping2 – http://www.hping.org/download.html.
 проверка протоколов маршрутизации из источника, rlogin,  Legion – http://www.rhino9.com.
rsh и telnet;  L0pht crack – http://www.l0pth.com.
 проверка на спуфинг RIP (маршрутизирующего инфор-
мационного протокола) и ARP (протокола сопоставле- Техника 1. Поиск узлов корпоративной сети
ния адреса); Посылка ICMP эхо-пакетов (ping) на каждый IP-адрес и ожи-
 проверка IP-переадресации (forwarding); дание ответа для определения, какой хост в рабочем состо-
 всесторонняя проверка DNS; янии. Но множество хостов отфильтровывают (отбрасыва-
 IP-фрагментация, проверка фрагментации и ретранс- ют) запросы и ответы ping. Пример:
ляции;
 проверка внутренних адресов; > ping microsoft.com
 проверка сетевых масок и временных меток (timestamp) PING microsoft.com (207.46.230.219) from 208.184.74.98 : 56(84)
ICMP; bytes of data.

 проверка инкапсуляции пакета MBONE; --- microsoft.com ping statistics ---


 проверка инкапсуляции APPLETALK IP, IPX, Х.25, FR;
8 пакетов отправлено, 0 пакетов принято, 100% потери пакетов
 проверки резервированных разрядов и паритет-прото-
колов;
 определение исходных портов через проверки TCP Однако существует усовершенствованный способ по-
и UDP; иска узлов корпоративной сети при помощи инструмен-
 проверка портовых фильтров TCP и UDP и всесторон- та nmap, использующего нижние уровни IP-протокола.
няя проверка портов; По умолчанию Nmap -sP, Nmap посылает пакет TCP ACK
 проверка специализированных фильтров; (acknowledgment) на порт 80 параллельно ICMP ping запро-
 проверка фильтров с возможностью нулевой длины TCP су. Если пакет RST (или ответ ping) возвращается, мы по-
и IP; лучаем информацию, что хост существует.
 проверка на передачу сверхнормативных пакетов. В некоторых случаях вам необходимо опробовать ком-
пьютер при помощи пакета 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, но есть
жет выявить несколько уязвимых мест с низкой или сред- множество других протоколов, доступных для продвинутых
ней степенью риска, но не способен определить, насколь- атак и получения информации.

№11, ноябрь 2006 43


безопасность
Сканирование протоколов зацикливается на 8-битном Используем утилиту Legion 2.1 для сканирования задан-
поле протокола, посылая массив IP-заголовков без данных. ного диапазона сети, для поиска общих ресурсов Microsoft
Ошибка «ICMP-протокол недоступен» означает, что целевой Windows. Legion сперва определит, какие из доступных уз-
объект не принимает пакеты для данного протокола. лов используют или нет протокол NetBIOS, далее получим
К примеру, вот SYN-сканирование: результат в виде полного списка доступных ресурсов и воз-
можных прав доступа. Возможно, вы будете удивлены, уви-
# nmap -sS target.example.com/24 дев в списке ресурсов корневой диск или папки с рабочи-
ми документами пользователей. Так злоумышленник мо-
Эта команда запускает скрытое SYN-сканирование каж- жет получить доступ к коммерческой информации предпри-
дого компьютера в рабочем состоянии до 255 компьютеров ятия или воспользоваться доступом и установить «заклад-
в классе «C», принадлежащих домену target.example.com. ки» для мониторинга сетевых аккаунтов и паролей.
Теперь, зная базовые техники атаки и возможные ин-
Техника 3. Разведка топологии корпоративной сети струменты, можем организовать защиту и систему опове-
Выполняется трассировка при помощи пакетов типа UDP, щения атаки корпоративной сети. С точки зрения атакую-
исходящий порт соединения 53, а порт назначения 5023 щего, инструменты делятся на 3 категории: зондирование,
исследуемого хоста gw.target.com. Трассировка позволя- получение доступа и заметание следов.
ет получить информацию о структуре корпоративной се- С точки же зрения специалиста по информационной бе-
ти, ее активных сетевых узлах (брандмауэры, маршрути- зопасности, их можно разделить на: глубоко эшелонирован-
заторы, и т. д.). ную защиту (HIDS/NIDS, Firewalls, Antivirus, Honeypots etc)
и персональные утилиты анализа безопасности (скане-
# hping2 --traceroute -t 1 -2 --baseport 53 -keep -V ↵ ры и т. д.).
-p 5023 gw.target.com
Список популярных используемых инструментов:
Важно определить, какие из операционных систем ис-  Argus – инструмент анализа сетевой активности. Ра-
пользуются на этих узлах. ботает на уровне IP приложения, получая полную ин-
формацию с сетевого интерфейса. Может оповещать
# nmap -O targethost.com об аномальной активности в локальной сети (сканиро-
вание) (ftp://ftp.andrew.cmu.edu/pub/argus).
Nmap (с опцией -O) позволяет определить версию ОС на ос-  Asax – cканер и анализатор уявимостей для платфор-
нове техники TCP/IP-дактилоскопирование (fingerprinting). мы UNIX (ftp://ftp.cerias.purdue.edu/pub/tools/unix/sysutils/
Так же просто применить простую диагностику для веб-сер- asax).
веров, используя терминал telnet для соединения с веб-улом  Asmodeous Port Scanner – сетевой сканер для Windows
по порту 80. (http://www.webtrends.com/products/wsa).
 HPing – утилита диагностики сети использует нижние
# telnet target.com 80 уровни IP-протокола для получения информации о мар-
>GET /blah HTTP/1.1 шрутах сети (http://www.kyuzz.org/antirez/oldhping.html).
HTTP/1.1 400 Bad Request  Internet Security Scanner (ISS) – сканер уязвимостей
Server: Microsoft-IIS/5.0
.... на UNIX-платформах, также собирает информацию
.... о NFS-ресурсах (ftp://ftp.iss.net/pub/iss).
 NESSUS – утилита основана на открытом исходном ко-
Некоторые сервисы позволяют получить злоумыш- де, удобный инструмент утилита для диагностики бе-
леннику избыточную информацию о сети, часто уязвимы зопасности различных ОС. Поддерживает многопо-
DNS-сервера, как и приведенный выше пример с конфи- точные модули и графический интерфейс X-windows
гурацией, разрешающей трансфер зоны: (http://www.nessus.org).
 SAINT – инструмент администратора сетевой безо-
# nslookup пасности. Позволяет работать со множеством сете-
>server 11.12.13.2 (подключаемся к DNS серверу) вых сервисов NFS, NIS, ftp and tftp, rexd, statd, и другие
>set type=any (устанавливает получение всех внутренних зон и узлов) (http://wwdsilx.wwdsi.com/saint).
>ls –d target.com. >> ./Zonetransfer.out
Вы можете собственными силами проверить информа-
Файл Zonetransfer.out содержит полный список всех внут- ционную сеть компании на наличие уязвимостей, спроек-
ренних зон и узлов. тировать систему информационной безопасности, выбрать
нужные инструменты, разработать необходимые регламен-
Техника 4. Поиск общих windows-ресурсов ты и политику безопасности. Или при отсутствии специа-
(windows-share) листов данной области обратиться к независимому сто-
Допустим, злоумышленник уже получил следующие дан- роннему аудиту.
ные о корпоративной сети:
 В сети присутствуют узлы на основе ОС MS Windows. Никита Дуров, специалист по внедрению
 Диапазон IP-адресов локальной сети: 11.12.13.1- программного обеспечения, Департамент внедрения
и консалтинга LETA IT company
11.12.13.255.

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

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


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

С какими внешними угрозами стал- рые эксперты отмечают, что сейчас ти при защите от внутренних IТ-угроз
кивается IT-департамент вашего гораздо актуальнее решение вопро- очень актуален.
банка чаще всего? сов, связанных с построением за- Конечно, желательно, чтобы по-
Наиболее распространенные из них – щиты банков от внутренних IT-уг- литика информационной безопаснос-
вирусы, спам, попытки несанкциони- роз. Так ли это? ти при защите от внутренних IТ-угроз
рованного доступа к публично доступ- Действительно, по данным исследова- разрабатывалась на основе существу-
ным сервисам банка. Интернет-атаки ний компании InfoWatch, одного из ли- ющих стандартов информационной бе-
составляют порядка 30%. Сканирова- деров российского рынка програм- зопасности и информационных техно-
ние портов и попытки несанкциониро- мных решений, обеспечивающих за- логий, таких как уже упомянутый СТО
ванного доступа к внешним сервисам – щиту конфиденциальной информации БР ИББС – 1.0 – 2006, ISO IEC 27001-
это наши суровые будни. предприятий и организаций, внутрен- 2005, COBIT. На мой взгляд, не стоит
Кстати, по данным Отчета об уг- ние IT-угрозы, такие как кража инфор- изобретать велосипед, в то время ког-
розах интернет-безопасности компа- мации и халатность сотрудников, оста- да уже существуют лучшие практики
нии Symantec, за первые шесть меся- ются главной опасностью для россий- в области информационной безопас-
цев 2006 года сектор финансовых ус- ских кредитных организаций. На фо- ности, такие как ISO IEC 17799-2005.
луг оказался вторым по интенсивнос- не незначительно-
ти нацеленных на него атак, их доля го снижения обще-
составила 14% от всех зафиксирован- го индекса обеспо- Основные принципы для разработки по-
ных целенаправленных попыток «взло- коенности инфор- литики информационной безопасности
ма». Сектор финансовых услуг занял мационной безопас-
девятое место по интенсивности атак ностью эта угроза
при защите от внутренних IТ-угроз:
на отказ в обслуживании, он чаще все- превосходит по зна-  принцип двойного управления;
го подвергался фишингу. чимости все осталь-  принцип минимальной достаточности;
Новые версии и виды вредоносного ные. Это также под-  принцип самоокупаемости.
программного обеспечения появляются тверж дается вве -
постоянно, даже самые известные вен- денным в действие
доры на рынке антивирусного програм- в нынешнем году новым стандартом Стоит также отметить, что нельзя
много обеспечения не всегда своевре- Банка России СТО БР ИББС – 1.0 – руководствоваться одним лишь «кну-
менно успевают отреагировать на них. 2006 «Обеспечение информационной том» при разработке политики инфор-
От внешних угроз мы защищены непло- безопасности организаций банковс- мационной безопасности. Огромную
хо – у нас своевременно обновляются кой системы Российской Федерации» роль играет еще и действующая в бан-
антивирусные базы, проводится уста- (далее СТО БР ИББС – 1.0 – 2006). ке корпоративная этика.
новка новых обновлений и исправле- Пункт 5.4. раздела 5 гласит: «Наиболь-
ний безопасности в области операцион- шими возможностями для нанесения Готов ли ваш банк технически осущест-
ных систем и программного обеспече- ущерба организации БС РФ обладает влять серьезный контроль над состо-
ния, фильтрация спама, проверка ано- ее собственный персонал. В этом слу- янием внутренней информационной
малий в сетевой активности со стороны чае содержанием деятельности зло- среды? Каков общий принцип орга-
рабочих станций и серверов. Мы сле- умышленника является нецелевое ис- низации информационной безопас-
дим за информацией на сайтах вендо- пользование предоставленного конт- ности в вашем банке?
ров антивирусного ПО и сайтах, связан- роля над информационными актива- На данный вопрос нельзя дать однознач-
ных с информационной безопасностью. ми, а также сокрытие следов своей ный ответ без привлечения внешних ау-
Все это позволяет существенно снизить деятельности. Внешний злоумышлен- диторов, но скорее да, чем нет. Основ-
возможность проникновения вредонос- ник скорее да, чем нет, может иметь ной же принцип организации информа-
ного ПО в наши системы. сообщника(ов) внутри организации». ционной безопасности в банке – это при-
Учитывая вышесказанное, можно сде- нцип минимальной достаточности.
В связи с утечками баз конфиденци- лать вывод, что вопрос разработки по-
альных банковских данных некото- литики информационной безопаснос- Анна Верхось

№11, ноябрь 2006 45


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

FreeBSD jail:
зона строгого режима

Сергей Супрунов
Безопасность FreeBSD всегда была на должном уровне. Но когда в Интернет нужно
«выставить» один или несколько сервисов, надеяться приходится уже не только
на разработчиков системы.

О
бычно, когда речь заходит о бе- тво для компиляции системы в аль- ки; исключения были описаны в ста-
зопасности, наверняка упоми- тернативном каталоге. В дальнейшем тье Василия Озерова «Как увели-
нается совет поместить потен- приспособили для нужд ftp, ограничи- чить безопасность процессов с помо-
циально опасные процессы в chroot- вая с его помощью доступ к файло- щью chroot и jail», №7 за 2006 г.) про-
окружение. Но вызов chroot никогда вой системе отдельных пользовате- цессу покинуть свой новый корневой
не разрабатывался с оглядкой на бе- лей. А потом понеслось... Безуслов- каталог, но всё же он не обеспечива-
зопасность – его создавали как средс- но, chroot не позволяет (теоретичес- ет полную изоляцию процессов. За-

46
безопасность
пущенные в chroot программы сохра-
няют возможность использовать поч-
ти любые системные вызовы, что поз-
воляет им наблюдать за системой (на-
пример, с помощью ps) и даже влиять
на её работу (монтировать файловые
системы, модифицировать ядро и т. д.,
вплоть до остановки системы). Конеч-
но, всё это возможно только в случае,
если в chroot-каталоге будут доступ-
ны нужные средства, хотя при нали-
чии shell-доступа «протащить» их ту-
да не составит особого труда. Поэ-
тому для повышения безопасности
во FreeBSD появилось специальное
средство – jail (англ. «тюрьма»).
Но так уж «исторически сложи- Рисунок 1. Изолированная виртуальная система
лось», что для повышения безопас- Это приводит к тому, что ряд ути- быть указан пользователь, с правами ко-
ности всё же чаще используется лит могут не работать в jail. Например, торого этот процесс следует запустить.
chroot-окружение, а jail упоминается вы не сможете из jail проверить рабо- При инициализации в jail может быть
по большей части как средство вир- ту сети с помощью ping, поскольку эта запущен только один процесс. В даль-
туализации. Скорее всего, причина команда использует «сырые» сокеты, нейшем он может порождать другие,
здесь в большей распространённости которые в jail запрещены. которые будут дочерними по отноше-
и универсальности вызова chroot, ко- «Тюрьма» получает от основной нию к нему и унаследуют все ограниче-
торый реализован практически во всех системы имя хоста и IP-адрес. Одним ния. Нужно иметь в виду, что в jail ника-
UNIX-подобных системах. К тому же из существенных ограничений jail-сре- кие сценарии инициализации или что-
появился он намного раньше. Возмож- ды, которое необходимо учитывать, то подобное не запустятся без вашего
но, свою роль играет и несколько боль- является то, что с ней может быть со- прямого на то указания. Jail – это, по су-
шая сложность организации jail-среды поставлен лишь один сетевой адрес. ти, «усиленный» в плане безопасности
по сравнению с chroot, так что помимо Как правило, в основной системе он chroot, а не полноценная виртуальная
всего прочего, постараемся в деталях организован в виде псевдонима к од- машина. Для создания виртуальной
разобраться и во всех тонкостях прак- ному из существующих физических системы в jail следует в качестве име-
тического применения jail. интерфейсов или к loopback-интерфей- ни команды, запускаемой в «тюрьме»,
Для начала рассмотрим некоторые су. То есть процессы в jail могут рабо- указывать сценарий /etc/rc (пример бу-
теоретические вопросы. тать только с этим адресом, не имея дет показан ниже).
доступа даже к вездесущему интер- Для работы с jail будут полезны так-
Понятия фейсу «обратной петли» – 127.0.0.1. же утилиты jls (возвращает список за-
Вызов jail значительно расширя- Смысл этого ограничения заключа- пущенных в данный момент «тюрем»
ет функции chroot, ограничивая, по- ется в том, чтобы максимально упрос- с их идентификаторами) и jexec (предо-
мимо доступа к файловой системе тить задачи контроля над сетевой ак- ставляет возможность выполнить ка-
вне «корня», любые средства, которые тивностью «заключённых» процессов кую-либо команду внутри jail из основ-
могут позволить использовать какие- и не позволить им каким-либо обра- ной системы). Подробности смотрите
либо ресурсы за пределами jail. Так, зом повлиять на работу сетевых при- на соответствующих man-страницах.
в jail запрещаются: любая модифика- ложений основной системы или дру-
ция текущего ядра (включая загрузку- гих «тюрем». Один адрес, принадле- Недостатки и проблемы
выгрузку модулей и изменение пара- жащий только jail-среде, гораздо про- Одним из недостатков jail, впрочем, как
метров с помощью sysctl), монтирова- ще контролировать с помощью межсе- и chroot, является дублирование необ-
ние-демонтирование файловых сис- тевого экрана. ходимых файлов – любые файлы, ко-
тем, изменения сетевых настроек, до- торые могут понадобиться работаю-
ступ к «сырым» сокетам, взаимодейс- Инструментарий щим в jail процессам, должны быть ско-
твие с процессами, запущенными вне «Тюрьма» создаётся с помощью одно- пированы в корневой для jail каталог.
«тюрьмы», любые действия, влияющие имённой утилиты – jail (см. man 8 jail). Одним из приёмов, несколько смягча-
на работу всей системы (например, пе- В качестве обязательных аргумен- ющим эту проблему, является вынос
резагрузка). Благодаря этим ограниче- тов ей передаются путь к корневому файлов, модификация которых из jail
ниям, даже процесс, запущенный в jail для «тюрьмы» каталогу, имя хоста и се- не предусмотрена, на отдельную фай-
с правами суперпользователя, будет тевой адрес, а также команда, которая ловую систему с последующим монти-
существенно ограничен в возможнос- запустит в jail-окружении первый про- рованием её в режиме «только для чте-
ти нарушить работу операционной сис- цесс, который будет родительским для ния». Пример создания такой jail-сре-
темы в целом. всех остальных. Опционально может ды будет рассмотрен позже.

№11, ноябрь 2006 47


безопасность
Безусловно, ряд проблем безопасности остаётся и в слу- jail# passwd root
jail# adduser
чае использования jail. Например, злоумышленник может
использовать захваченную «тюрьму» для рассылки спама, Username: admin
Full name: Administrator of jail
организации ftp-файлообменников, настройки анонимных . . .пропущено. . .
прокси-серверов и т. д. Большинство этих проблем связа-
jail# echo "sshd_enable=YES" >> /etc/rc.conf
ны с сетевой активностью. Единственный адрес позволя-
ет легко управлять сетевой работой «тюрьмы» из основ- Для корректной работы в дальнейшем следует также
ной системы (в частности, запрещать взаимодействие со выставить правильный часовой пояс, впрочем это относит-
всеми портами, работа по которым для jail-системы не пре- ся к стандартной процедуре настройки любой новой сис-
дусматривается). Тем не менее, нужно иметь в виду, что за- темы, так что здесь мы не будем останавливаться на этих
пуск процесса в среде jail сам по себе не является панаце- вопросах.
ей от любых внешних угроз. Продолжим – у нас осталось ещё одно серьёзное дело:
нужно обеспечить автоматический запуск jail при загруз-
Разборки ке. Для этого в /etc/rc.conf основной системы добавим сле-
Перейдём к практическим вопросам. Подробно разберём дующие строки:
три примера: реализация полноценной виртуальной сис-
темы, создание изолированной «внешней» среды и запуск jail_enable="YES"
jail_list="system"
в jail одной сетевой службы.
jail_system_rootdir="/var/jails/system"
jail_system_hostname="jail.host"
Пример 1. Виртуальная система 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"
нального хостинга с правами root (см. рис. 1). То есть нам
нужно, фактически, создать систему в системе. В параметре jail_list перечисляются все jail-системы,
Порядок действий можно почерпнуть в man jail – со- которые должны запускаться автоматически (у нас пока
здаём каталог для будущей jail-системы, собираем в него такая система одна). В дальнейшем по схеме «jail_<имя
«мир» и «дистрибутив», монтируем devfs: из списка>_<параметр>» задаются параметры для каж-
дой «тюрьмы» из списка. Обязательно должны быть указа-
# mkdir -p /var/jails/system ны путь, имя хоста, IP-адрес и выполняемая команда. Пара-
# cd /usr/src
# make world DESTDIR=/var/jails/system метр interface задавать не обязательно, но без него сцена-
# make distribution DESTDIR=/var/jails/system рий /etc/rc.d/jail выдаёт ошибки о неправильном синтаксисе
# mount_devfs devfs /var/jails/system/dev
для ifconfig, хотя на работе это никак не отражается.
На не слишком шустрой машине сборку мира лучше Также желательно задать автомонтирование файло-
запускать на ночь – эта процедура может затянуться ча- вой системы devfs, чтобы не модифицировать /etc/fstab.
сов на шесть-восемь. Впрочем, если вы уже пересобирали Ну и последние две строки в данном случае необязатель-
систему (например, в ходе обновления версии или «лата- ны, поскольку повторяют значения по умолчанию – это ко-
ния дыр», подобных недавним ошибкам в crypto), то вмес- манды, которые должны быть выполнены при старте и ос-
то повторной сборки всей системы можно ограничиться ин- танове jail-системы.
сталляцией в альтернативный каталог: Теперь можно запустить jail командой /etc/rc.d/jail start
(нужно предупредить, что при разрешённом sshd первый
# make installworld DESTDIR=/var/jails/system запуск займёт довольно ощутимое время – в jail будут ге-
нерироваться необходимые для работы ключи) и попробо-
Для запуска jail, помимо подготовленного каталога, по- вать подключиться к ней по ssh:
надобятся также IP-адрес и имя хоста. IP предварительно
нужно задать как псевдоним на одном из интерфейсов ос- $ ssh -l admin 10.30.0.100
новной системы (подойдёт и lo0):
Здесь admin – имя пользователя, которого мы создали
# ifconfig lo0 alias 10.30.0.100 netmask 255.255.255.255 в jail. Войдя в «тюрьму», обратите внимание на то, как огра-
ничены ваши права – команды ps, top и т. д. будут выдавать
Если не терпится, то уже можно заглянуть в новую сис- информацию только о процессах, исполняющихся в данной
тему: «тюрьме», ifconfig разрешает только просмотр, traceroute
и ping не работают вообще, ссылаясь на «socket: Operation
# jail /var/jails/system jail.host 10.30.0.100 /bin/csh not permitted».
Для полноценной работы в jail ещё понадобится кол-
Раз уж мы здесь, сразу сделаем несколько полезных лекция портов, но её можно просто скопировать из основ-
вещей – зададим пароль пользователю root, создадим ной системы. Есть и более экономичный вариант, позволя-
обычного пользователя для повседневной работы, настро- ющий «разделять» один каталог между основной системой
им sshd: и «тюрьмами» (его мы рассмотрим в следующем примере),

48
безопасность
но здесь копия позволит пользователю,
работающему в jail, делать с этим ката- Технологии «соседей»: ботой. Взаимодействие с зоной осущест-
логом что угодно без опасений, что это зоны Solaris вляется через так называемую консоль зо-
отразится на основной системе. Начиная с 10-й версии в Solaris существует ны, подключение к которой выполняется
реализация так называемых зон – техно- утилитой zlogin.
Пример 2. логии, очень близкой по своей сущности По умолчанию зоны используют (с пра-
Внешняя и внутренняя зоны «тюрьмам» FreeBSD. Зоны позволяют запус- вами только на чтение с помощью loopback
Понятно, что рассмотренный выше кать в рамках одного ядра несколько изо- filesystem) ряд пакетов глобальной зоны,
случай удобен для хостинга, позволяя лированных экземпляров системы. Так же, благодаря чему их размер сравнитель-
пользователю самостоятельно выпол- как и в jail, процессы различных зон не име- но небольшой, хотя «изнутри» зона мало
нять очень многое, вплоть до установ- ют возможности влиять друг на друга и даже чем отличается от полноценной системы.
ки нужных программ. Но когда речь наблюдать за «чужими» действиями. Внутри неглобальной зоны действуют
идёт об использовании jail как средс- Сама система, в которой оказывается ограничения, аналогичные ограничени-
тва повышения безопасности (на- администратор после установки Solaris, – ям jail, – невозможно просмотреть инфор-
пример, для разделения системы на это тоже зона, именуемая глобальной. Про- мацию о процессах в других зонах, запре-
«внешнюю» и «внутреннюю» облас- цессы глобальной зоны имеют расширен- щены загрузка модулей ядра, настройка
ти), здесь есть один недостаток – дуб- ные полномочия для мониторинга процес- оборудования и т. д. Правда, «админист-
лирование всех системных файлов. сов в «обычных» зонах. ратор» неглобальной зоны имеет возмож-
Помимо нерационального расходова- Работа с зонами реализована гораздо ность перезагрузить её. Или, скажем, есть
ния дискового пространства, это так- удобнее и последовательнее, чем средс- возможность внутри зоны использовать
же усложняет и сопровождение сис- тва работы с jail, – к услугам администра- «сырые» сокеты для ICMP (для других ти-
темы – патчи в случае выявления уяз- тора мощные утилиты zoneadm и zonecfg, пов трафика их использование для негло-
вимости нужно устанавливать во всех позволяющие создавать, инсталлировать, бальных зон запрещено). Есть, естествен-
«тюрьмах», обновлять несколько оди- конфигурировать зоны и управлять их ра- но, и другие отличия.
наковых деревьев ports и т. д.
Но есть способ свести дублирова- ции jail-системы могут быть повреж- Каталог портов /usr/ports можно
ние информации к минимуму, кото- дены и системные файлы. будет монтировать (но на чтение-за-
рый и рассмотрим на данном приме- Избежать этого позволяет меха- пись, поскольку это нужно для работы)
ре: пусть у нас есть один физический низм монтирования. Если, скажем, в только на время установки нового ПО.
сервер и требуется реализовать на каталог /bin смонтировать файловую По большому счёту, можно вообще вы-
нём «внешнюю» систему, которая бу- систему только для чтения, то из jail полнять установку из основной систе-
дет предоставлять услуги абонентам, повредить её будет нельзя. Вы же пом- мы, указав нужный PREFIX. Разве что
такие как электронная почта, FTP-сер- ните, что в jail операции монтирования некоторые действия придётся доделы-
вер и т. д. (своего рода DMZ, но в пре- запрещены? А раз так, то и перемон- вать вручную (например, регистрацию
делах одного физического сервера), и тировать на чтение-запись эту файло- в jail-системе нужных пользователей,
«внутреннюю», обеспечивающую неко- вую систему не удастся. поскольку при такой инсталляции они
торыми услугами пользователей ло- Итак, что мы можем смонтировать будут созданы в основной).
кальной сети. в jail с опцией ro? Во-первых, систем- Теперь самое интересное – для мон-
Поскольку локальную сеть мож- ные файлы – каталоги /bin, /sbin, /usr/bin тирования всех этих каталогов их
но считать менее опасной, чем Интер- и т. д. Во-вторых, каталог настроек – не нужно размещать на отдельных
нет, то для предоставления «внутрен- /etc. Ведь большую часть параметров разделах. В FreeBSD есть очень удоб-
них» услуг будем использовать основ- можно будет установить и из основ- ный механизм mount_nullfs, позволя-
ную систему, в то время как все «вне- ной системы, где запись можно оста- ющий монтировать обычные катало-
шние» службы перенесём в jail-окру- вить разрешённой.
жение (см. рис. 2). Единственное, ката-
В отличие от предыдущего приме- лог /etc всё же лучше
ра, здесь не предполагается, что какой- создать отдельный
то пользователь внутри jail будет вы- и монтировать уже
полнять модификацию системы. Поэ- его – иначе вы не смо-
тому львиную долю всех файлов мож- жете гибко разделять
но сделать «только для чтения». А раз настройки основной
так, то вместо копирования всех сис- и jail-систем. То есть
темных файлов в jail можно попробо- в данном случае ro-
вать предоставить те же файлы, ко- монтирование выпол-
торые используются основной систе- няется не для эконо-
мой. Ссылки не подойдут, поскольку мии дискового про-
суперпользователь внутри «тюрьмы» странства, а исключи-
сможет выставить на файлы нужные тельно по соображе-
права, так что в случае компромета- ниям безопасности. Рисунок 2. Внешние сервисы вынесены в jail

№11, ноябрь 2006 49


безопасность
ги. Например, ручное монтирование дерева портов может ребуется установить
выглядеть таким образом: что-то ещё или обно-
вить какой-то пакет,
# mount_nullfs /usr/ports /var/jails/outers/usr/ports он нам не понадобит-
ся. Кстати, если быть
Для монтирования «только на чтение», как обычно, ука- последовательным,
зывается опция -o ro. то можно и /usr/local,
Помимо nullfs, вы можете использовать и проверен- по примеру /etc, вы-
ный временем способ – NFS. Сетевая файловая систе- нести в отдельный ка-
ма прекрасно зарекомендовала себя для предоставления талог, а в jail подклю-
ФС на одной машине другим системам, доступным по се- чать через монтиро-
ти. Но ничто не мешает использовать её внутри одной сис- вание. Или даже сде-
темы. Только не забывайте, что монтировать NFS-катало- лать две «тюрьмы» – Рисунок 3. Отдельный сервис в jail
ги, как и любые другие, вы должны из основной системы – одну для настроек,
в jail это запрещено. Есть ещё mount_unionfs, но в FreeBSD не имеющую выхода в Интернет, но с каталогами, монти-
этот механизм пока не слишком устойчив и приводит к про- руемыми на чтение-запись; и вторую – рабочую, куда мон-
блемам гораздо чаще, чем того хотелось бы. тирование тех же каталогов выполняется только на чтение.
Итак, вместо сборки «мира» в каталог jail мы ограничим- В общем, нет предела паранойе.
ся сборкой «дистрибутива» (иерархию каталогов придётся Кстати, у jail есть ещё одно ограничение, полезное
создать вручную; если что забудете, make вам напомнит): при работе с «общими» файлами, – процессы, запущен-
ные внутри «тюрьмы», не могут менять флаги уровня безо-
# cd /var/jails/outers пасности, выставленные на файлы. Благодаря этому фай-
# find / -type d -maxdepth 1 | sed 's/^\///' | xargs mkdir
# find /etc -type d -maxdepth 1 | sed 's/^\///' | ↵ лы, которые jail разделяет с основной системой или дру-
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 Поскольку в jail каталог etc недоступен для записи, все из-
# find /var/named -type d -maxdepth 3 | sed 's/^\///' | ↵
xargs mkdir менения нужно будет вносить в /var/jails/_4mount/outers/etc.
# cd /usr/src Для этого удобнее всего использовать команду pw с пара-
# make distribution DESTDIR=/var/jails/outers
# mv /var/jails/outers/etc /var/jails/_4mount/outers/etc метром -V, указывающим на альтернативный каталог раз-
# mkdir /var/jails/outers/etc мещения файлов:

Предпоследней строкой мы перенесли «дистрибутив- # echo "password" | pw -V /var/jails/_4mount/outers/etc ↵


useradd me -h 0 -g wheel
ный» каталог настроек за пределы jail-каталога, с тем
чтобы в дальнейшем смонтировать его в режиме «толь- Так мы добавили пользователя me. Если что-то
ко для чтения» и тем самым сделать невозможной любую непонятно, изучайте man pw. Нужно сказать, что описан-
модификацию настроек внутри jail. Теперь обеспечиваем ный выше приём – это лишь конкретный пример. Очевид-
автоматическое монтирование нужных каталогов, для че- но, что подобным образом придётся учитывать изменённый
го в /etc/fstab добавим следующие строки: каталог и для других конфигурационных файлов, например,
баз данных sendmail. Возможно, в ряде случаев будет про-
# For jail ще временно перемонтировать /etc на чтение-запись и вы-
/bin /var/jails/outers/bin nullfs ro 0 0
/sbin /var/jails/outers/sbin nullfs ro 0 0 полнить необходимые модификации файлов из jail (по сооб-
/lib /var/jails/outers/lib nullfs ro 0 0 ражениям безопасности сетевую работу из jail на это вре-
/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 распространяться и на jail-систему, и при этом злоумышлен-
/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 ↵ зователя, не сможет причинить вред ни основной, ни jail-сис-
nullfs ro 0 0
теме. Даже изменить большинство настроек (например,
При первом запуске каталог etc нужно примонтировать чтобы обеспечить себе беспрепятственный вход во взло-
вручную на чтение-запись, чтобы sshd смог сохранить сге- манную систему по ssh или открыть релей в access-файле
нерированные ключи. Это также может понадобиться и ря- Sendmail), и то не сможет.
ду других программ, которые сохраняют свои данные непос- В отличие от предыдущего примера, когда системные
редственно в etc – проверьте свои пакеты на этот счёт. файлы в jail суперпользователь мог менять как ему взду-
Осталось подмонтировать порты, как показано выше, мается, здесь мы имеем возможность ограничить ресур-
зайти в jail и установить необходимые программы. После сы, которые будут доступны процессам в jail. Это позво-
этого каталог ports можно размонтировать – пока не пот- лит избежать перегрузки системы в случае ошибок в ра-

50
безопасность
ботающих процессах (например, неаккуратно разрабо- # mkdir -p /var/jails/wuftpd/usr/lib
# cp /usr/lib/libopie.so.4 /var/jails/wuftpd/usr/lib
танный сценарий, исполняющийся в среде FastCGI, мо-
жет привести к утечке памяти) либо в случае сознатель- Также понадобится вручную создать некоторые рабо-
ных действий взломщика. Лимиты, как известно, зада- чие каталоги, например, для размещения log-файлов (ес-
ются в файле /etc/login.conf (в нашем случае это будет ли вы недостаточно хорошо знакомы с запускаемым сер-
/var/jails/_4mount/outers/etc/login.conf) с последующим под- висом, то, что именно создавать, можно будет узнать ме-
ключением «класса» в учётной записи пользователя. На- тодом «научного тыка»: обычно при неудачной попытке за-
пример, можно использовать такие ограничения: пуска jail причины ошибок можно увидеть либо прямо в кон-
соли, либо в /var/log/messages; запускаемый демон может
default:\ также «ругаться» в лог-файл внутри jail):
:cputime=1h:\
:memoryuse=50M:\
... пропущено ... # mkdir -p /var/jails/wuftpd/var/log/
:maxproc=35:\ # mkdir -p /var/jails/wuftpd/var/run/
:coredumpsize=0:
Переименуем конфигурационные файлы и при необхо-
root:\
:tc=default: димости подредактируем:

Теперь, поскольку значения, определённые в default, бу- # cd /var/jails/wuftpd/etc


# cp ftpaccess.example ftpaccess
дут распространяться на всех пользователей с пустым 5 по- # cp ftpgroups.example ftpgroups
лем в master.passwd (а мы его пустым и оставим), то все # cp ftpusers.example ftpusers
# cp ftpconversions.example ftpconversions
пользователи в jail, даже суперпользователь, будут огра-
ничены в возможности потреблять ресурсы системы. Ещё нам понадобится файл паролей, поскольку wu-ftpd
Понятно, что это лишь пример – ваши значения и пере- использует его для работы (для анонимного доступа нуж-
чень ограничиваемых параметров могут быть совсем дру- но также завести пользователя ftp, в качестве пароля мож-
гими. При желании можно задать несколько «классов» ог- но поставить «*» так же, как и пользователю root, – они всё
раничений для различных пользователей. Читайте man равно не используются, а «светить» их хэши лишний раз
login.conf и проявляйте осторожность, выставляя ограни- не стоит):
чение cputime для процессов, подразумевающих постоян-
ную работу. # head -3 /etc/master.passwd > master.passwd
# vipw -d

Пример 3. Последней командой мы как раз-таки и вносим в


Запускаем ftp-сервер master.passwd необходимых пользователей. Рабочие хэш-
Для таких служб, как Sendmail, проще создать в jail полно- базы при выходе из редактора будут созданы автоматичес-
ценную систему – слишком уж много у неё зависимостей ки, не забудьте только указать текущий каталог директи-
и взаимосвязанных сервисов, таких как POP3-или IMAP-сер- вой -d, чтобы не попортить файл паролей основной системы.
веры, антивирусные и антиспамовые фильтры, и т. д. Од- Приготовления на этом можно считать завершёнными.
нако в некоторых случаях это может оказаться избыточ- Однако попытка запустить jail выявляет ещё одну не-
ным (см. рис. 3). доработку:
Например, вы хотите протестировать FTP-сервер wu-ftpd,
но не уверены в его благонадёжности. Чтобы не подвергать # jail /var/jails/wuftpd wuftpd 10.30.0.121 /libexec/ftpd -S
риску всю систему, запустим его в jail-окружении. ELF interpreter /libexec/ld-elf.so.1 not found
На этот раз нам не понадобятся ни «мир», ни «дистри- Abort trap: 6
бутив». Просто создаём каталог и выполняем в него инс-
талляцию из портов: Исправляемся:

# mkdir -p /var/jails/wuftpd # cp /libexec/ld-elf.so.1 /var/jails/wuftpd/libexec/


# cd /usr/ports/ftp/wuftpd
# make PREFIX=/var/jails/wuftpd/ install
Запускаем вручную и проверяем:
Проверяем, от каких библиотек зависит эта программа,
и копируем нужные в будущий jail-каталог согласно их раз- # jail /var/jails/wuftpd wuftpd 10.30.0.121 /libexec/ftpd -S
# jls
мещению в дереве каталогов:
JID IP Address Hostname Path
24 10.30.0.121 wuftpd /var/jails/wuftpd
# ldd /var/jails/wuftpd/libexec/ftpd
/var/jails/wu-ftpd/libexec/ftpd:
# sockstat | grep 10.30.0.121
libcrypt.so.3 => /lib/libcrypt.so.3 (0x28095000) root ftpd 8030 0 tcp4 10.30.0.121 *:*
libopie.so.4 => /usr/lib/libopie.so.4 (0x280ad000)
libmd.so.3 => /lib/libmd.so.3 (0x280b6000)
# ps ax | grep J
libc.so.6 => /lib/libc.so.6 (0x280c4000)
8030 ?? IsJ 0:00,01 ftpd: accepting connections on port 2 (ftpd)
# cp /lib/libcrypt.so.3 /var/jails/wuftpd/lib/ 8156 p0 R+ 0:00,01 grep J
# cp /lib/libmd.so.3 /var/jails/wuftpd/lib
# cp /lib/libc.so.6 /var/jails/wuftpd/lib # killall -j 24

№11, ноябрь 2006 51


безопасность
Последняя команда демонстриру-
ет, как можно остановить jail-систему, Технологии «соседей»: Технология Virtuozzo, разработанная
запущенную вручную, – идентифика- VServer и Virtuozzo/OpenVZ компанией SWSoft, также позволяет запус-
тор возвращается утилитой jls (в на- Операционная система Linux тоже гото- кать на одном физическом сервере до не-
шем примере он равен 24). ва порадовать своих пользователей воз- скольких сотен изолированных виртуаль-
Далее – уже знакомые вам про- можностью строить изолированные сре- ных сред (Virtual Environment, VE) под уп-
цедуры: создаём псевдоним для ин- ды запуска процессов. Наиболее распро- равлением одного ядра. Virtuozzo распро-
терфейса, задав IP-адрес, вносим не- странённые из них – VServer и Virtuozzo, страняется под проприетарной лицензией.
сколько строк в /etc/rc.conf и запуска- поставляемые в виде патчей к ядру и на- Однако доступна также открытая система
ем jail. Готово, можно рассылать своим бора утилит. OpenVZ, являющаяся базой для Virtuozzo.
друзьям-хакерам IP-адрес с просьбой VServer, достаточно близкий по сво- По заявлениям разработчиков, накладные
взломать этот сервер. ей концепции к jail в FreeBSD, подробно расходы на создание виртуальных сред
был описан в статье Дмитрия Столярова не превышают 1-3%, что делает подобные
Заключение «Linux-VServer: настраиваем виртуальные технологии заметно эффективнее для ряда
Как видите, работать с jail достаточно серверы» (октябрь 2006 года). задач, чем виртуальные машины.
просто. Но это не означает, что сто-
ит «пихать» каждую сетевую службу работанного для решения проблем бе- 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 –
ли вы всё же считаете, что вам будет 1. Алексей Закиров. Использование http://www.onlamp.com/lpt/a/4139.
спокойнее, если все «апачи» и «сенд- jail для предоставления shell-досту- 6. Poul-Henning Kamp. Building Systems to be
мейлы» будут изолированы от ос- па – http://www.opennet.ru/base/sec/ Shared Securely – http://www.acmqueue.
новной системы, то используйте jail – freebsd_jail_setup.txt.html. org/modules.phpname=Content&pa=prin
это ненамного сложнее, чем в случае 2. Запуск Apache в jail-окружении под ter_friendly&pid=170&page=1.
chroot, но зато вы получите все пре- FreeBSD – http://www.inode.ru/articles/ 7. База данных login-классов login.conf –
имущества вызова, специально раз- network/2006-02-09/294. http://pascal.tsu.ru/unix/users/class.html.

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

Настройка безопасной передачи TLS Certificate = /etc/ssl/bacula/bacula_server.crt


TLS Key = /etc/ssl/bacula/bacula_server.key
данных TLS
По умолчанию при аутентификации Службы файлов (File Другим вариантом защиты является создание защищен-
Daemon), Центра управления (Director) и консоли (Bacula ного соединения с использованием stunnel или ssh-туннеля.
Console) используется пара логин и пароль. Пароль по се- При создании последнего вам поможет скрипт ssh-tunnel.sh
ти передается в зашифрованном CRAM-MD5 виде, кото- лежащий в каталоге examples.
рый не обеспечивает достаточной защищенности, так как
уязвим к plaintext-атаке. Данные по сети передаются в от- Используйте брандмауэр и TCP wrappers
крытом виде, что позволяет их перехватить. Между тем, Для большей защиты необходимо закрыть доступ к портам
начиная с версии 1.37 в Bacula интегрирована поддержка 9101, 9102, 9103 межсетевым экраном, разрешив соедине-
TLS, что позволяет использовать этот криптографичес- ние только с определенных адресов или сетей.
кий протокол для обеспечения безопасной аутентифика- При этом следует учитывать следующую схему работы
ции и передачи информации в сети. Для этого необходимо демонов (при настройках по умолчанию):
выполнить всего несколько действий. Для начала необхо-  Консоль ожидает подключения Центра управления
димо собрать Bacula, задав при конфигурировании опцию на 9101-порту.
--enable-openssl.  Центр управления ожидает подключения Storage
После установки генерируем сертификаты: на 9103-порту.
 Центр управления ожидает подключения Службы фай-
$ mkdir /etc/ssl/bacula
$ cd /etc/ssl/bacula лов на 9102-порту.
# openssl req -new -x509 -config /opt/ssl/openssl.cnf ↵  Слу жба файлов ожидает подк лючения Storage
-keyout bacula.pem -out bacula.pem -days 365
на 9103-порту.
Рекомендуется подписать свой сертификат в организа-
циях вроде http://cacert.org. То есть в общем случае правило iptables для сети
Разделяем ключ и сертификат, убираем пароль с ключа: -s 192.168.0.0/24 выглядит так.
Для сервера:
# /opt/bin/openssl rsa -in bacula.pem ↵
-out bacula_server.key -A INPUT -p tcp --dport 9101:9103 -s 192.168.0.0/24 -j ACCEPT
# /opt/bin/openssl x509 -in bacula.pem ↵
-out bacula_server.crt
И для клиента:
И добавляем в конфигурационные файлы всех компо-
-A INPUT -p tcp --dport 9102 –s 192.168.0.0/24 -j ACCEPT
нентов Bacula следующее:
TLS Enable = yes # включение TLS Использование файлов /etc/hosts.allow или /etc/hosts.deny,
TLS Require = yes также положительно скажется на безопасности. Для это-
# включение проверки сертификата клиента
# (используется только на сервере) го при конфигурировании Bacula необходимо задать оп-
TLS Verify Peer = yes цию --with-tcp-wrappers. В качестве имени в записываемых
Использование этого параметра позволит проверять правилах следует использовать имена, записанные в фай-
все клиентские сертификаты на соответствие CN (Common лах конфигурации в параметре Name, не имя процесса де-
Name, обычно это адрес электронной почты или веб-сай- мона. Например, если в секции Name стоят названия main-fd,
та организации). Все возможные CN прописываются в ди- main-sd и main-dir, записи в этом файле могут быть такими:
рективе TLS Allowed CN, которая может быть использова-
main-fd : example.com : allow
на несколько раз, в этом случае будут проверены все ва-
main-sd : example.com : allow
рианты. main-dir : example.com : allow
TLS Allowed CN = "bacula@example.com" main-fd : ALL : deny
TLS Allowed CN = "administrator@example.com" main-sd : ALL : deny
main-dir : ALL : deny
Следующей директивой указываем полный путь и имя
файла TLS CA-сертификата. Допускается наличие несколь- После чего проверьте правильность записей с помощью
ких сертификатов в одном файле. Как вариант можно ис- утилит tcpdchk и tcpdmatch:
пользовать директиву TLS CA Certificate Dir, указывающую
$ tcpdmatch main-fd example.com
на каталог, в котором находятся СА-сертификаты, которые
использовались при подписании. Имена файлов сертифи- warning: main-fd : no such process name in /etc/inetd.conf
client: hostname example.com
катов и ключей должны иметь pem-формат. client: address 192.168.1.58
server: process main-fd
TLS CA Certificate File = /etc/ssl/bacula/bacula_server.crt matched: /etc/hosts.allow line 11
option: allow
Проще всего для создания ключей и сертификатов ис- access: granted
пользовать скрипт CA.pl, прописав все необходимые пара-
метры в файл openssl.cnf. Кстати, параметры signature и verify могут заменить ути-
Сертификат и ключ сервера, используемые для шиф- литы вроде tripwire.
рования исходящего соединения к клиенту (естественно,
ключ должен соответствовать сертификату): Сергей Яремчук

№11, ноябрь 2006 53


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

Ошибки синхронизации открывают большие


возможности для хакеров.
Каковы механизмы защиты?

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

И
нтенсивность атак на пере- ковали сообщение о дыре в драйвере ные» для проявления ошибки, но сами
полняющиеся буферы, достиг- TOSRFBD.SYS, разработанном фир- по себе они не виноваты, и претензии
нув своего пика в первых го- мой Toshiba для своих Bluetooth-уст- пользователей направлены не по ад-
дах XXI века, начинает неуклонно ид- ройств, используемых многими про- ресу, а претензий таких – много! На-
ти на спад, сдаваясь под напором кон- изводителями оборудования, в числе столько много, что у большинства про-
тратаки большого количества проти- которых оказались ASUS, Dell, Sony грамм подобного рода соответствую-
вохакeрских мер, предпринятых со сто- и другие бренды. щий пункт явно включен в FAQ.
роны производителей процессоров, Обе атаки основаны на ошибках Аналогичная картина наблюда-
компиляторов и операционных систем. синхронизации потоков (race condition). ется и с Bluetooth-устройствами, сы-
Неисполняемый стек, контроль целос- Такие ошибки часто встречаются рость драйверов которых породила це-
тности адреса возврата, рандомиза- в драйверах, обрабатывающих асинх- лый класс атак под общим называни-
ция адресного пространства – все это ронные запросы от сетевых устройств ем BlueSmack, основанный на шторме
и многое другое затрудняет атаки, вы- и охватывающие широкий спектр обо- эхо-запросов, направленных на жертву
нуждая хакеров искать обходные пути. рудования, простилающийся от инфра- и вызывающих все тот же «голубой эк-
И такие пути действительно есть! красных адаптеров до DSL-модемов. ран смерти». Долгое время никто из ха-
3 сентября 2006 года хакер Johnny Как известно, программы, работаю- керов не интересовался, что именно
Cache описал принципиально но- щие с большим количеством соеди- происходит при этом, какой характер
вую атаку на драйверы устройств нений (например, клиенты файло-об- носят разрушения и можно ли осущес-
беспроводной связи Intel Centrino менных сетей), способны обрушивать твить нечто более умное, чем баналь-
PRO, открывающую очередную стра- систему в BSOD с посмертным сооб- ный отказ в обслуживании.
ницу в книге переполняющихся бу- щением IRQL_NOT_LESS_OR_EQUAL. Johnny Сache стал первым хаке-
феров: http://lists.immunitysec.com/ Это – следствие «удара по памяти», ром, вызывавшим направленный удар
pipermail/dailydave/2006-September/ возникающего из-за разрушения базо- по памяти, в результате которого ему
003459.html. вых структур данных в небрежно напи- удалось воздействовать на регистр EIP
Вслед за этим, буквально месяц санном драйвере сетевого устройства, с передачей управления на shell-код,
спустя, 11 октября 2006 года David страдающего ошибками синхрониза- исполняющийся в режиме ядра, то есть
Maynor из SecureWorks, Inc. и незави- ции. Прикладные программы лишь со- на наивысшем уровне привилегий.
симый исследователь Jon Ellch опубли- здают условия наиболее «благоприят- За ним начали подтягиваться и ос-

54
безопасность
тальные. Есть все основания утверж-
дать, что через несколько лет ошиб-
ки синхронизации станут одним из ос-
новных типов удаленных атак. При-
чем, если для атаки на Bluetooth-уст-
ройство необходимо находиться в ра-
диусе его действия (которое в лучшем
случае составляет несколько километ-
ров, да и то лишь в случае примене-
ния хакером специальной антенны),
DSL-модемы доступны со всех концов
Интернета!

Реализация
направленного удара
по памяти
Механизмы обработки асинхронных
событий драйверами подробно опи-
саны в статье «Многоядерные про-
цессоры и проблемы, ими порождае-
мые, в ОС семейства NT» [1], из кото-
рой следует, что при работе с разде- Рисунок 1. Toshiba выпускает заплатки для драйверов своих Bluetooth-устройств
ляемыми данными программист дол-
жен соблюдать особую осторожность На однопроцессорных машинах си- то вводит в заблуждение многих поль-
и тщательно следить за синхрониза- туация одновременного выполнения зователей и программистов относи-
цией. Сборка пакетов из фреймов нескольких «копий» процедуры сбор- тельно истинной причины аварии.
как раз и представляет собой пример ки невозможна, однако, если фреймы Для реализации DoS-атаки обыч-
работы с разделяемыми данными, од- поступают быстрее, чем успевают об- но достаточно утилиты наподобие
нако про синхронизацию программис- рабатываться, процедура сборки па- ping, генерирующей большое коли-
ты традиционно забывают (или реа- кетов будет неизбежно прерывать- чество пакетов и позволяющей варь-
лизуют ее неправильно). В результа- ся в произвольных местах, посколь- ировать промежутки времени между
те этого возникает угроза разруше- ку обработчик прерываний от карты посылками. Атака носит вероятност-
ния данных – если обработка одно- (модема) имеет более высокий при- ный характер, и, чтобы добиться про-
го фрейма прерывается в «неудоб- оритет. Рано или поздно прерыва- явления ошибки синхронизации, не-
ном» месте, – разделяемые структу- ние произойдет в таком месте, когда обходимо послать достаточно боль-
ры данных оказываются недостро- часть разделяемых структур данных шое количество пакетов через опре-
енными, а поведение драйвера ста- окажется недостроенной. В большинс- деленные промежутки времени, обус-
новится непредсказуемым. Вероят- тве случаев в недостроенных струк- ловленные конструктивными особен-
ность такого события увеличивает- турах находится «мусор», среди кото- ностями драйвера и «железки», кото-
ся на многопроцессорных машинах рого встречаются и поля, ответствен- рой он управляет. На некоторых про-
(под многопроцессорными системами ные за размер пакета, и указатели/ межутках ошибка синхронизации мо-
здесь и далее мы понимаем не толь- индексы на другие данные. Очевидно, жет вообще не проявляться, а на неко-
ко истинную многопроцессорность, что попытка обращения по «мусорно- торых – возникать после нескольких
но также многоядерные и HT ЦП), му» указателю (в том числе и указате- пакетов (ну, «нескольких» – это в иде-
поскольку на них процедура сборки лю, вычисленному на основе «мусор- але). Можно посылать как UDP, так и
фреймов может одновременно выпол- ного» индекса) с высокой степенью ве- ICMP-пакеты, направленные как на от-
няться более, чем на одном процес- роятности приводит к ошибке доступа. крытый, так и на закрытый порт. Также
соре, при этом все «копии» процеду- В драйверах уровня ядра она обыч- подходят и TCP-пакеты без установки
ры сборки обращаются к одним и тем но заканчивается голубым экраном сессии (пакет с флагом ASK, направ-
же разделяемым переменным, кото- смерти, сопровождаемым сообщением ленный на закрытый порт), но в этом
рые, очевидно, должны быть защище- IRQL_NOT_LESS_OR_EQUAL. Так про- случае потребуется «ручное» констру-
ны теми или иными средствами синх- исходит потому, что на том уровне ирование пакетов с использованием
ронизации, гарантирующими, что по- IRQL, на котором работают отложен- «сырых» (raw) сокетов.
ка первая копия процедуры не закон- ные процедуры и обработчики пре- Некоторые ошибки синхрониза-
чит свою работу, все остальные вы- рываний, подкачка страниц не ра- ции проявляют себя на всем «спектре»,
нуждены стоять в очереди и терпели- ботает и при обращении к страни- некоторые – только на эхо-запросах.
во ждать (либо же работать исключи- це, отсутствующей в памяти, опера- И хотя выше мы говорили о фреймах,
тельно со своими собственными ло- ционная система генерирует ошибку а теперь неожиданно перешли на па-
кальными переменными). IRQL_NOT_LESS_OR_EQUAL, что час- кеты, никакого противоречия здесь нет,

№11, ноябрь 2006 55


безопасность
чения, используемого жертвой, то ни- Через непродолжительное время
каких четких рецептов здесь нет. после начала атаки операционная сис-
Перед началом экспериментов не- тема (которой в данном случае явля-
обходимо настроить систему на сохра- лась Windows XP) выбрасывает «голу-
нение полного дампа памяти в случае бой экран» и сохраняет дамп памяти в
аварии («Панель управления → Сис- файл memory.dmp.
тема → Дополнительно → Загрузка Д ля его ана лиза необходи-
и восстановление → Запись отладоч- мо иметь отладчик Microsoft Kernel
ной информации → Полный дамп па- Debugger, входящий как в распро-
мяти) или установить отладчик soft-ice, страняемый по подписке DDK, так и
перехватывающий «голубые экра- в доступный для бесплатного скачи-
ны смерти». В случае возникновения вания Microsoft Debugging Tools: http://
ошибки это поможет понять, что же, www.microsoft.com /whdc /devtools /
собственно, произошло и какие пер- debugging/default.mspx.
спективы в плане выполнения shell- Загрузка дампа в отладчик в об-
Рисунок 2. Для анализа причин аварии кода оно дает. Главное – не забывать, щем случае осуществляется так:
необходим полный дамп памяти
что ошибки синхронизации носят ве-
равно как нет и необходимости опус- роятностный характер, и потому об- Листинг 1. Командная строка
для загрузки дампа в отладчик
каться на уровень фреймов, посколь- рушения могут происходить в раз-
ку UDP/ICMP-пакеты автоматически личных местах, одни из которых до- i386kd -z C:\WINNT\memory.dmp ↵
y SRV*D:\sym* ↵
«разрезаются» на фреймы при пере- пускают передачу на shell-код, а дру- http://msdl.microsoft.com/ ↵
даче. Атаки данного типа основаны гие – нет. download/symbols
отнюдь не на специфике самих фрей- В качестве иллюстрации мож-
мов, а лишь на временных промежут- но привести пару дампов памяти, Здесь:
ках между ними. Мы не можем непос- полученных Johnny Cache: http://  i386kd – имя исполняемого файла
редственно влиять на частоту следова- www.802.11mercenary.net/~johnycsh/ консольной версии отладчика, если
ния фреймов, но зато можем легко ва- prone_to_deletion/dd/crash2.zip и http:// вы предпочитаете GUI – используй-
рьировать задержки между посылками www.802.11mercenary.net/~johnycsh/ те вместо него windbg. Он нагляд-
UDP/ICMP-пакетов. Конечная цель ата- prone_to_deletion/dd/crash3.zip. Объек- нее, но беднее по функциональнос-
ки – прервать сборку пакета из фрей- том атаки выступил драйвер беспро- ти, однако для наших задач вполне
мов в «неудобном» (для драйвера) водного устройства Intel Centrino PRO, хватит и его.
месте, оставив разделяемые струк- которому посылались UDP-пакеты раз-  C:\WINNT \ memory.dmp – пу ть
туры данных в недостроенном состо- мером в 1400 байт, заполненных CCh- к файлу памяти, по умолчанию со-
янии. Поскольку это место определя- байтами, и посылаемые на 2048-порт здаваемом в системном каталоге
ется конструктивными особенностя- (прослушиваемый утилитой netcat) Windows.
ми программно-аппаратного обеспе- с интервалом в 400 микросекунд.  SRV*D:\sym*http://msdl.microsoft.
com/download/symbols – путь к ка-
талогу, в котором хранятся файлы
с символьной информацией (в дан-
ном случае – D:\sym) и адрес серве-
ра Microsoft, откуда отладчик будет
автоматически скачивать эти сим-
волы при необходимости. Символь-
ные файлы занимают значитель-
ный объем, и на медленных кана-
лах их загрузка может занять зна-
чительное время. По умолчанию
загружаются только символы яд-
ра, после чего отладчик высвечи-
вает приглашение и мерцающий
курсор.

Если теперь дать команду «u eip»


(дизассемблирование по адресу EIP),
то отладчик покажет отнюдь не ис-
тинное место сбоя, а процедуру об-
работки ошибки (в данном случае,
KiTrap0E+0x233), которая не несет ни-
Рисунок 3. Анализ дампа памяти в отладчике Microsoft WinDbg какой полезной информации:

56
безопасность
Листинг 2. В загруженном дампе памяти регистр EIP указывает Остается только выяснить как попадает в регистр ECX
не на место сбоя, а на адрес, лежащий внутри обработчика
исключения неправильный указатель и можно ли на него повлиять. Да-
ем команду «u f7433678-10», чтобы дизассемблировать
kd> u eip
за 10h байт до места сбоя и смотрим:
nt!KiTrap0E+0x233:
804e187f f7457000000200 test dword ptr [ebp+0x70],0x20000 Листинг 4. Окрестности команды, вызывавшей
804e1886 740d jz nt!KiTrap0E+0x249 (804e1895) «голубой экран смерти» из-за ошибки синхронизации

Определить значение регистра EIP в момент сбоя поз- kd>u f7433678-10


воляет команда «!analyze -v», результат работы которой f7433668 0fb745f0 movzx eax,word ptr [ebp-0x10]
приведен ниже: f743366c 83f801 cmp eax,0x1
f743366f 0f8e25240000 jle w22n51+0x26a9a (f7435a9a)
f7433675 8b4df4 mov ecx,[ebp-0xc]
Листинг 3. Анализ дампа памяти, вызвавшего BSOD, ; здесь произошел сбой
но не оказавшего воздействия на регистр EIP f7433678 8a11 mov dl,[ecx]
f743367a 8855ea mov [ebp-0x16],dl
kd> !analyze -v
f743367d 8b45f4 mov eax,[ebp-0xc]
DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1) f7433680 8a4801 mov cl,[eax+0x1]
Arguments: f7433683 884dff mov [ebp-0x1],cl
Arg1: 6e3c2081, memory referenced f7433686 8b55f4 mov edx,[ebp-0xc]
Arg2: 00000002, IRQL f7433689 83c202 add edx,0x2
Arg3: 00000000, value 0 = read operation, 1 = write operation
Arg4: f7433678, address which referenced memory
Мы видим, что содержимое ECX загружается из ло-
Debugging Details: кальной переменной [EBP-0Ch]. Вне зависимости от то-
------------------
READ_ADDRESS: 6e3c2081 го, как оно туда попадает, драйвер копирует один байт
CURRENT_IRQL: 2 из [EBP-0Ch] в [EBP16h]. Обе переменных находятся в сте-
FAULTING_IP: ке, что уже хорошо (атаки на стек хорошо известны и давно
w22n51+24678 отработаны). Допустим, нам удалось засунуть в [EBP-0Ch]
f7433678 8a11 mov dl,[ecx] ds:0023:6e3c2081=??
указатель на определенную ячейку памяти, тогда, если
STACK_TEXT: мы сможем подменить [EBP-16h], данная конструкция бу-
8054e9e0 65537365 2f3c746e 656d616e 200a0d3e w22n51+0x24678
дет действовать как оператор POKE языка Бейсик, запи-
7479426c 00000000 00000000 00000000 00000000 0x65537365
сывающая произвольный байт по произвольному адре-
IMAGE_NAME: w22n51.sys су, конечно, при условии, что он лежит в невытесненной
на диск странице памяти, доступной на запись, например,
О чем это говорит? Во-первых, мы видим, что ошибка стеке ядра, в котором хранится адрес возврата из функ-
произошла на уровне IRQL, равном 2, что соответствует ции. К сожалению, модификации одного-единственного
DISPATCH_LEVEL, на котором выполняются отложенные байта для передачи управления на shell-код (размещен-
процедуры. Если бы сбой происходил в обработчике пре- ный здесь же, в стеке, в котором происходит сборка паке-
рывания, то уровень IRQL был бы выше, но в большинстве тов) явно недостаточно, но не будем отчаиваться! Ведь ата-
случаев обработчик прерывания не выполняет реальной об- ка, как мы помним, носит вероятностный характер, и сбои
работки данных, а поручает это отло-
женным процедурам, которые вынуж-
дены работать с разделяемыми данны-
ми и которые могут одновременно вы-
полняться на нескольких процессорах
(как физических, так и виртуальных).
Именно в отложенных процедурах со-
средоточено наибольшее количество
ошибок синхронизации. В результа-
те одной из таких ошибок драйвер и
пытается прочесть ячейку 6E3C2081h,
находящуюся в странице памяти, вы-
тесненной на диск (как уже говори-
лось, на уровне DISPATCH_LEVEL под-
качка не работает). В момент сбоя ре-
гистр EIP равен F7433678h и указывает
на машинную команду «mov dl, [ecx]»,
где ecx = = 6E3C2081h, принадле-
жащую драйверу (IMAGE_ NAME)
w22n51.sys, щелкнув на свойства ко-
торого можно узнать, что это и есть
тот самый дырявый драйвер, разра-
ботанный Intel. Рисунок 4. Анализ дампа памяти в отладчике Microsoft i386kd

№11, ноябрь 2006 57


безопасность
могут происходить в разных местах. Попробуем направить cccccccc d6 ??? ; setalc Set AL to
на жертву шторм пакетов еще раз, может быть, тогда нам Carry Flag
cccccccd 86c4 xchg ah,al
повезет больше. cccccccf 01963b10ffd6 add
Ниже приведен анализ дампа памяти, в котором по- [esi+0xd6ff103b],edx
мимо разрушения памяти произошло воздействие на ре- ccccccd5 86c4 xchg ah,al
ccccccd7 0100 add [eax],eax
гистр EIP:
ccccccd9 0000 add [eax],al
ccccccdb 0000 add [eax],al
Листинг 5. Анализ дампа памяти, оказавшего воздействие ccccccdd 0000 add [eax],al
на регистр EIP

kd> !analyze -v Непосредственно по адресу CCCCCCCCh распола-


DRIVER_IRQL_NOT_LESS_OR_EQUAL (d1) гается неизвестная отладчику i386kd недокументиро-
Arguments: ванная команда SETALC (Set AL to Carry Flag), с маши-
Arg1: 5c01abf7, memory referenced
Arg2: 00000002, IRQL ным кодом D6h (но, например, тот же HIEW ее прекрас-
Arg3: 00000001, value 0 = read operation, 1 = write operation но понимает), а следом за ней – XCHG AH,AL. Обе коман-
Arg4: cccccccf, address which referenced memory
ды не обращаются к оперативной памяти и при любом
Debugging Details: раскладе выполняются без исключений. А вот команда
------------------ «ADD [ESI+0xD6FF103B], EDX», расположенная по адресу
WRITE_ADDRESS: 5c01abf7
CURRENT_IRQL: 2 CCCCCCCFh, обращается к ячейке памяти, определяемой
FAULTING_IP: регистром ESI, который в данном случае оказался равен
+ffffffffcccccccf
7AFD6444h, в результате чего произошла попытка записи
cccccccf 01963b10ffd6 add [esi+0xd6ff103b],edx
двойного слова по адресу 5C01ABF7h, расположенному
LAST_CONTROL_TRANSFER: from ff103b96 to cccccccf (опять-таки волею случая) в вытесненной странице памя-
STACK_TEXT: ти, следствием чего стало исключение, которое и вызвало
cccccccc ff103b96 01c486d6 00000000 00000000 0xcccccccf голубой экран смерти.
01c486d6 00000000 00000000 00000000 00000000 0xff103b96 Таким образом, использование ошибок синхрониза-
ции для воздействия на регистр EIP все-таки возможно!
Уровень IRQL осталось прежним (DISPATCH_LEVEL), Shell-код можно разместить прямо в пакете и при удачном
а вот значение регистра EIP изменилось драматически стечении обстоятельств на него будет передано управле-
и вылетело далеко за пределы драйвера, попав в страни- ние. При неудачном – жертва окажется свидетелем «голу-
цу с адресом CCCCCCCFh, каким-то чудом оказавшуюся бого экрана смерти».
в памяти и вызвавшую исключение по записи в инструкции Остается только выяснить, какое именно двойное слово
«ADD [ESI+0XD6FF103B],EDX». Адрес CCCCCCCFh порази- попадет в регистр EIP при удачной атаке. Это сложно опре-
тельно похож на «начинку» атакующих пакетов, но если это делить путем анализа дампа памяти, так что лучше действо-
так, откуда тогда взялось число CFh? Ведь исходя из самых вать экспериментально, заполняя разные части пакета раз-
общих рассуждений, исключение должно было возникнуть личными байтами. Легко показать, что, действуя методом
по адресу CCCCCCCCh! «вилки», мы найдем нужное значение менее чем за 30 по-
Но, как говорится, если факты не совпадают с теорией, пыток. Однако следует помнить, что в силу вероятностно-
тем хуже для фактов. С какой это стати исключение долж- го характера атаки в регистр EIP могут попадать различ-
но возникать по адресу CCCCCCCCh? Это было бы так, ес- ные двойные слова, в результате чего количество необхо-
ли бы страница оказалась вытесненной на диск, но по во- димых попыток возрастет в несколько раз, но все равно ос-
ле случая она очутилась в оперативной памяти. Выполне- танется сравнительно небольшим.
ние команд началось с адреса CCCCCCCCh и продолжи-
лось вплоть до инструкции, вызывавшей исключение, ко- Механизмы защиты от синхро-атак
торой и оказалась команда «add [esi+0xd6ff103b], edx», об- В Windows Vista компания Microsoft реализовала множес-
ратившаяся к ячейке 5C01ABF7h, отсутствующей в опера- тво защитных механизмов, главным образом нацеленных
тивной памяти. Если бы не она, выполнение продолжалось на переполняющиеся буферы, но также затрудняющих
бы и дальше! и другие типы атак. Представляет интерес выяснить, как
Как это можно доказать? Хм, имея один лишь дамп па- обстоит дело с атаками, основанными на ошибках синх-
мяти на руках, ничего доказать уже нельзя, но! Если наши ронизации.
рассуждения верны (а они верны), то команды, находящи- Все сказанное ниже относится к Windows Vista RC1 –
еся между адресами CCCCCCCCh и CCCCCCCFh, должны самой свежей версии на момент написания этих строк. Ко-
выполняться без исключений, что легко подтвердить путем нечно, с выходом финальной версии (и многочисленных за-
дизассемблирования. платок к ней) многие аспекты наверняка изменятся (в сто-
«Скармливаем» отладчику команду «u CCCCCCCC» рону усиления защиты), однако никому не дано предуга-
и получаем следующий результат: дать, какой путь выберет Microsoft, поэтому будем изучать
то, что дают (в смысле, что она раздает).
Листинг 6. Дизассемблерный листинг окрестностей Самой значительной инновацией стала возможность
места сбоя
переноса части драйверов с нулевого кольца на приклад-
kb>u cccccccc ной уровень. Новая драйверная модель, названная «User

58
безопасность
Mode Driver Framework» и являющая- необходимо знать адреса API-функ-
ся частью общей архитектуры драйве- ций KERNEL32.DLL еще до начала ата-
ров «Windows Driver Foundation» впер- ки! Очевидно, что теперь вероятность
вые за всю историю существования успешного захвата системы в 256 раз
Windows, наконец-то предоставила на- ниже, чем раньше! Но не нужно быть
бор API-функций, позволяющих управ- специалистом в криптографии, что-
лять USB и Firewire-устройствами не- бы понять, что 1/256 – это очень боль-
посредственно с прикладного уровня. шое число, тем более что при возник-
То же самое относится и к драйверам- новении исключения в ядре вспыхи-
фильтрам. вает «голубой экран смерти», уводя-
Для обеспечения обратной совмес- щий систему в перезагрузку, а драй-
тимости User Mode Driver Framework веры прикладного режима просто пе-
также доступен и для Windows XP, резапускаются, позволяя хакеру пе-
что позволяет разработчикам писать ребирать различные базовые адреса Рисунок 5. Процессор AMD Athlon 64
драйверы, работающие в обеих опе- KERNEL32.DLL без останова систе- с поддержкой технологии аппаратной
виртуализации Pacifica
рационных системах. Весь вопрос мы. Следовательно, реальные шансы
в том, какой процент из них этим вос- на успешную атаку не только не сни-
пользуется и как скоро начнется мас- зились, но даже возросли, причем
совая миграция драйверов на при- весьма значительно. Ситуация напо-
кладной уровень. Системные про- минает картину: вытащили голову –
граммисты крайне настороженно от- хвост увяз.
носятся к любым инновациям и не ста- Но все-таки вернемся к ядру, в ко-
Рисунок 6. Выполнение команды VMXON
нут переписывать уже написанный тором нам еще предстоит провести не- на Intel Pentium приводит к установке
код до тех пор, пока не почувствуют сколько лет. Хорошая новость (для ха- монитора виртуальных машин
(в терминологии AMD – гипервизора),
явной выгоды. Поскольку безопас- керов) – в Windows Vista появилось переводящего операционную систему
ность драйвера не является основ- множество новых native-API-функций, в «гостевой» режим, полностью
контролируемый гипервизором
ной потребительской характеристи- существенно упрощающих процесс
кой, есть все основания предполагать, кодирования rootkit. В частности, по- Silvervale для IA32/IA64-архитектур
что в ближайшие несколько лет ника- явилась функция NtCreateUserProcess, соответственно), хакеры открыли для
ких радикальных изменений не про- запускающая новый процесс на вы- себя возможность перехода в режим
изойдет. полнение. До этого процессы (из яд- гипервизора, переводящий опера-
А вот драйверы для новых уст- ра!) приходилось запускать приблизи- ционную систему в гостевой режим
ройств, по-видимому, будут писать тельно так: открываем PE-файл с фла- и не дающий себя обнаружить ни-
с использованием User Mode Driver гами SYNCHRONIZE и FILE_EXECUTE, какими средствами. О большем по-
Framework уже хотя бы потому, что это соз даем новую секцию вызовом дарке разработчики rootkit не могли
значительно упрощает их отладку. ZwCreateSection(,,,SEC_IMAGE), со- и мечтать! Первый rootkit нового по-
И что тогда? Ошибки синхрониза- здаем процесс (вернее, не сам про- коления (названный «Голубой Пилю-
ции как были, так и останутся, толь- цесс, а некоторую «заготовку») че- лей» – Blue Pill) был продемонстри-
ко вместо нулевого кольца злоумыш- рез ZwCreateProcess, инициализиру- рован Жанной Рутковской (Joanna
ленник получает привилегии приклад- ем блок параметров процесса фун- Rutkowska) на конференциях SyScan
ного режима. Казалось бы – невели- кцией RtlCreateProcessParameters, (Сингапур) и Black Hat (США, Лас-Ве-
ка разница! К тому же программиро- выделяем в процессе память, под- гас), состоявшихся 21 июля и 3 авгус-
вать shell-код на прикладном режи- готавливаем блок параметров и ус- та 2006 года соответственно. Она же
ме намного проще, поскольку мож- т а н а в л и в ае м н а н е го у к а з ател ь разработала методику скрытой пе-
но использовать высокоуровневые Peb->ProcessParameters, выделяем редачи трафика, который невозмож-
API-функции. память для стека и инициализируем но обнаружить никакими существу-
На самом деле реализовать ата- контекст стартового потока процес- ющими средствами контроля. Текст
ку на User-Mode драйверы на два са, после чего создаем сам поток вы- презентации (вместе с исходными
порядка сложнее! (Во всяком слу- зовом ZwCreateThread. Наконец ре- кодами некоторых хакерских утилит
чае теоретически). Все дело в том, гистрируем процесс в клиент-сервер- и демонстрационными avi-роликами)
что в Windows Vista появилась ран- ной подсистеме win32 (CSRSS), после можно найти на сайте Жанны: http://
домизация адресного пространства чего пытаемся понять, где мы допус- www.invisiblethings.org.
(Address Space Layout Randomization, тили ошибку и почему процесс не за- Попытки разработать «Красную
или сокращенно ASLR), и системные пускается. Пилюлю», определяющую присутствие
библиотеки теперь грузятся по одно- Другая хорошая новость – с по- гипервизора, пока ни к чему не при-
му из 256 возможных базовых адре- явлением в процессорах поддержки вели. Единственное, что можно сде-
сов, а для обхода аппаратного DEP аппаратной виртуализации (у AMD лать – отключить аппаратную виртуа-
(см. статью «Cудьба shell-кода на сис- она скрывается за кодовым назва- лизацию в BIOS (если BIOS это позво-
темах с неисполняемым стеком» [2]) нием Pacifica, у Intel это – Vanderpool/ ляет), но это сделает невозможным эф-

№11, ноябрь 2006 59


безопасность
Intel и Toshiba вовсе не дураки сидят.
Почему же мы имеем такую плачев-
ную ситуацию? Одна из причин – бе-
шеная «гонка вооружений». Всякая
фирма стремится выбросить свой про-
дукт первой. Сжатые временные рам-
ки не позволяют как следует протести-
ровать код, и если разработчикам уда-
ется довести его до минимально рабо-
чего состояния (запускается и не па-
дает), это уже хорошо.
До тех пор, пока безопасность
не войдет в ряды потребительских
Рисунок 7. Статья, описывающая различные пути обхода механизма Patch-Guard,
следящего за целостностью ядра и позволяющего его модифицировать критериев, определяющих объемы
продаж, никто не станет ею всерь-
фективную эмуляцию процессора, ра- а продукты сторонних разработчиков ез заниматься. Microsoft привлекла
ди которой аппаратная виртуализация работать не смогут. И хотя Microsoft большое количество хакеров для тес-
и затевалась. предоставила ряд API-функций для тирования Windows Vista, но чего она
Третья хороша я новос ть и не контроля за открываемыми файла- добилась при этом?! Пожалуй, ниче-
просто хорошая, а даже сногсши- ми и сетевым трафиком – такую «за- го (за исключением рекламы). Труд-
бательная: в 64-битной редакции щиту» очень легко обойти. Одно при- но поверить, что хакеры пропусти-
Windows Vista появился механизм, ложение (антивирус) устанавливает ли такие вопиющие дефекты систе-
контролирующий целостность яд- фильтр, другое (вирус) снимает его мы безопасности, о которых написа-
ра и названный Patch-Guard, также легальными средствами, и антивирус но выше (что же за хакеры это бы-
реализованный в пакетах обновле- никак не может этому воспрепятство- ли?!). Скорее всего, им не позволи-
ния для XP 64-bit и Server 2003 64-bit вать (в лучшем случае он просто уз- ли воздействовать на концептуаль-
(http://www.microsoft.com/whdc/driver/ нает, что фильтр снят). Самое забав- ные архитектурные решения, приня-
kernel/64bitpatching.mspx). ное, что Patch-Guard очень легко «от- тые «свыше». Microsoft не занимает-
Отныне запрещается перехваты- ломать», о чем подробно рассказа- ся безопасностью Windows (только
вать ядерные функции, модифици- но в статье «Bypassing PatchGuard on разводит «пиар»), и не будет ею за-
ровать таблицу дескрипторов пре- Windows x64» (http://uninformed.org/ ниматься, точно так же, как не будет
рываний и совершать другие «про- index.cgi?v=3&a=3&t=sumry), но ле- исправлять старые ошибки без до-
тивоправные» действия, без кото- гальные разработчики не могут поль- бавления новых, потому что «рабо-
рых существование надежных анти- зоваться подобными хакерскими та над ошибками» требует вложения
вирусов и персональных брандмау- средствами! Им придется либо забро- огромных денег, но не приносит ни-
эров невозможно себе представить! сить свой бизнес, либо сменить ори- какого дохода.
Предлогом для этого шага послужи- ентацию (например, ограничиться ав- Поэтому в ближайшие несколько
ла небрежность большинства ком- тономным файл-сканером). лет следует ожидать новой волны ха-
мерческих и некоммерческих продук- Но как бы там ни было, хакеры на- керских атак, от которых можно за-
тов, неумело модифицирующих ядро ходятся в более выигрышном положе- щититься только переходом на надеж-
и вызывающих нестабильную рабо- нии, чем все остальные. Остается толь- ные операционные системы, например,
ту системы, вплоть до невозможнос- ко надеяться, что 64-битные процессо- OpenBSD, но, увы, это решение подхо-
ти загрузки или частых появлений ры никогда не займут господствующе- дит только для серверов.
BSOD. Ну а пользователи, как обыч- го положения, и основной архитекту- Создание офисных рабочих стан-
но, во всем винят Microsoft и ее «кри- рой останется IA32. ций на чем-то, отличном от Windows,
вую» Windows. создает гораздо больше проблем,
На самом деле Microsoft просто Заключение чем их решает, не говоря уже о до-
вытесняет игроков с рынка, протал- Защитные механизмы на несколько машних компьютерах, являющиеся
кивая свои собственные и далеко не шагов отстают от передовой хакер- по совместительству игровыми при-
самые лучшие решения. Но даже ес- ской мысли, и хотя время от време- ставками.
ли бы они были лучшими – что с то- ни этот разрыв сокращается, «дог-
го? Задача обхода произвольного ан- нать и перегнать» получается толь- 1. Касперски К. Многоядерные процес-
тивируса/брандмауэра в общем слу- ко на бумаге, а в реальной жизни ха- соры и проблемы, ими порождаемые,
чае неразрешима, а тащить за собой керы продолжают процветать. При- в ОС семейства NT. //Системный ад-
кучу специализированных решений – чем эта проблема касается не толь- министратор, №10, 2006 г. – С. 78-84.
слишком сложно, громоздко и неэф- ко Microsoft, но и остальных произ- 2. Касперски К. Cудьба shell-кода на сис-
фективно. Теперь же этого не понадо- водителей программного обеспече- темах с неисполняемым стеком. //Сис-
бится, поскольку антивирус и бранд- ния. Ведь драйвера для сетевых уст- темный администратор, №1, 2006 г. –
мауэр будут интегрированы в ядро, ройств совсем не Microsoft пишет! А в С. 66-74.

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

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

Михаил Кондрин
Предлагаем вам способ интеграции SMTP-сервера Postfix и IMAP/POP3-сервера Сyrus-IMAP
в систему единой регистрации пользователей Heimdal Kerberos. А также пример использования
этой системы в гетерогенном окружении при помощи почтового клиента Thunderbird.

Электронная почта – тель мог получать/отправлять свою дящегося в одном домене, через сер-
Postfix и Cyrus-IMAP почту без дополнительной регистра- вер, находящийся в другом, для полу-
В сети существует достаточно много ции в секторе Kerberos, только на ос- чателя в третьем, чем в недавнем про-
информации об установке и тонкой на- новании действительного супербиле- шлом активно пользовались спамеры
стройке этих двух программ. Я не став- та, полученного им ранее. Либо в том (так называемый open-relay). Практи-
лю себе целью осветить все детали случае, если почтовый клиент не мо- чески все современные SMTP-серве-
конфигурации, к примеру, их взаи- жет обеспечить такой функциональ- ры тем или иным способом запреща-
модействие с программами контроля ности, пароль, вводимый пользовате- ют такую пересылку почты, по умол-
спама и антивирусами, «виртуализа- лем, сверялся бы с базой данных паро- чанию разрешая передачу сообще-
ции» пользователей и почтовых ящи- лей, хранимых в Kerberos. Последний ний только от определенного множес-
ков, настройки почтового транспорта вариант обеспечивает совместимость тва отправителей или только получа-
и т. д. Будет рассмотрена минималь- со старыми или недостаточно функци- телю из заранее описанного множес-
ная конфигурация, которая позволя- ональными почтовыми клиентами. тва доменов. Для большинства почто-
ет аутентифицировать пользователей Аутентификация пользователя для вых сетей такая установка достаточ-
для работы с электронной почтой с по- протокола IMAP нужна, хотя бы для то- на, и проблемы возникают только тог-
мощью Kerberos, причем чем меньше го, чтобы каждый пользователь мог да, когда требуется обеспечить пере-
потребуется изменений в стандартные читать только свои письма и не имел сылку почты от мобильных пользова-
конфигурационные файлы, прилагае- возможности заглядывать в чужие телей, находящихся вне сети. Запреты/
мые к этим программам, тем с точки ящики. В то же время аутентифика- разрешения, основанные на адресе от-
зрения данной статьи лучше. ция для SMTP не столь обязательна правителя, небезопасны сами по себе
Итак, напомню задачу. Требует- и является только средством защи- (помним про IP-spoofing) и, более того,
ся настроить IMAP/SMTP-сервер та- ты от несанкционированной рассылки не всегда применимы, поскольку адрес
ким образом, чтобы зарегистриро- почты. Протокол SMTP разрешает пе- может меняться динамически и вполне
ванный в секторе Kerberos пользова- редачу почты от пользователя, нахо- легальный пользователь перемещать-

62
безопасность
ся из одной сети в другую. В таком случае идеальным ре- Архитектуры Postfix и Cyrus-IMAP в чём-то схожи. В обе-
шением было бы дать возможность пользователю аутен- их программах центральным звеном является демон, за-
тифицироваться на SMTP-сервере с помощью своего ло- дача которого состоит в прослушивании портов и име-
гина и пароля. нованных сокетов. При подключении клиента демон вы-
Принцип построения почтовой системы достаточно зывает обработчик, который уже осуществляет обмен
прост – поскольку у нас уже есть библиотека SASL с под- данными по выбранному протоколу. Центральный де-
держкой Kerberos, нужно только встроить поддержку SASL мон, который в обоих случаях называется master, по сво-
в почтовые сервисы, указать поддерживаемые ими ме- им функциям работает как супер-демон inetd, поэтому
ханизмы SASL и зарегистрировать эти сервисы в секто- Postfix и Cyrus-IMAP можно использовать только как stand-
ре Kerberos. В дальнейшем нужно будет только выбрать alone сервисы. При установке программ также устанав-
подходящих клиентов, которые максимально прозрачно ливаются шаблонные файлы настроек демонов master:
для пользователя будут взаимодействовать с почтовыми для Postfix – /etc/postfix/master.cf, а для Cyrus на выбор пред-
сервисами и Kerberos. лагается три файла, один из которых нужно скопировать
Начнем с Postfix. Скачиваем последнюю версию с до- в /etc/cyrus.conf. Для наших целей подойдёт самый прос-
машней страницы проекта [1] и собираем: той из них – cyrus-imapd-2.3.1/master/small.conf. Вносить из-
менения в эти файлы приходится крайне редко, в основ-
$ tar xzvf postfix-2.2.8.tar.gz ном настройка функциональности сервисов производится
$ cd postfix-2.2.
$ make tidy с помощью редактирования /etc/postfix/main.cf (для Postfix)
$ make makefiles -i Makefile.in "CCARGS=-DUSE_SASL_AUTH ↵ и /etc/imapd.conf (для Сyrus).
-I/usr/include/sasl" ↵
'AUXLIBS=-L/usr/lib -R/usr/lib -lsasl2' Начнём с настройки Postfix. Лучше всего начать с ре-
$ make дактирования файла /etc/postfix/main.cf.default. Измене-
$ make update
$ ./postfix-install -non-interactive ний немного:

Сервер Cyrus-IMAP также разрабатывается в Уни- queue_directory = /var/spool/postfix


command_directory = /usr/sbin
верситете Карнеги-Меллон и доступен по тому же адре- daemon_directory = /usr/libexec/postfix
су, что и Cyrus-SASL [2]. Несмотря на его название, поми- sendmail_path = /usr/sbin/sendmail
newaliases_path = /usr/bin/newaliases
мо IMAP, он поддерживает также протоколы POP3 и NNTP. mailq_path = /usr/bin/mailq
Но я ограничусь только протоколом IMAP. При конфигу-
alias_maps=hash:$config_directory/aliases
рировании Cyrus-IMAP достаточно только указать подде- alias_database=hash:$config_directory/aliases
ржку SASL: local_recipient_maps=

qmail_owner = postfix
$ tar xzvf cyrus-imapd-2.3.1.tar.gz setgid_group = postdrop
$ cd cyrus-imapd-2.3.1
$ ./configure --prefix=/usr --sysconfdir=/etc ↵ myhostname = kdc.myrealm.ru
--localstatedir=/var --disable-static ↵ mydomain = myrealm.ru
--with-cyrus-prefix=/usr/cyrus --with-sasl ↵ myorigin = $mydomain
--enable-gssapi=no mydestination = $mydomain, $myhostname, localhost
$ make inet_interfaces = all
$ make install mynetworks_style = subnet

С помощью опции --enable-gssapi=no непосредствен- mailbox_transport = lmtp:unix:/var/imap/socket/lmtp


ная линковка с библиотеками Kerberos отключается. Од- smtpd_sasl_auth_enable = yes
нако на конечном результате это скажется незначитель- smtpd_sasl_local_domain = MYREALM.RU
broken_sasl_auth_clients = yes
но, поскольку эта опция отменяет только сборку серве- smtpd_recipient_restrictions =
ра kpop – специального протокола доставки почты, разра- permit_sasl_authenticated,
reject_unauth_destination
ботанного в MIT. Этот протокол существенно отличается
oт POP3 (не следует думать, что это просто POP3 с подде- Существенные изменения – имя машины и домена
ржкой Kerberos) и мало распространен. (myhostname и mydomain) и что именно Postfix будет считать
Теперь можно приступать к настройке программ. Прежде локальной сетью (myorigin, mydestination, mynetworks_style).
всего следует иметь в виду, что Postfix и Cyrus-IMAP требу- Mailbox_transport определяет способ передачи полученных
ют наличия специальных системных пользователей и групп писем пользователю, в данном случае по протоколу LMTP
для работы. Хотя они и создаются в процессе установки про- через именованный сокет, который создаёт Cyrus-IMAP
грамм, но стоит лишний раз убедиться, что в /etc/passwd при запуске. С помощью smtpd_sasl_auth_enable вклю-
и /etc/group имеются строки вида: чается использование SASL для аутентификации поль-
зователей. Последовательность правил, указанная
# getent passwd | grep “^\(postfix\|cyrus\)” в smtpd_recipient_restrictions, позволяет принимать поч-
postfix:x:12345:12345:The postfix MTA:/var/spool/postfix:/bin/false ту без ограничений от авторизованных пользователей
cyrus:x:12365:13:Cyrus Imap Server:/:/bin/false (permit_sasl_authenticated) и запрещает релейную пе-
# getent group | grep “^\(mail\|postdrop\)”
ресылку почты незарегистрированным пользователям
(reject_unauth_destination). Таким образом, для приёма
mail::12:mail
почты с локальных адресов (тех, что попадают в катего-
postdrop:x:12346:
рию mydestination) аутентификации не требуется. Пара-

№11, ноябрь 2006 63


безопасность
метр же smtpd_sasl_local_domain – это просто имя секто- буется, чтобы принципал cyradmin присутствовал в секто-
ра Kerberos. ре Kerberos, и при этом администратор не должен иметь
Но это ещё не всё. Как вы помните, взаимодействие свой собственный почтовый ящик, иначе говоря, в систе-
с SASL можно настраивать для каждого приложения ин- ме не должно быть такого бюджета, это позволяет избе-
дивидуально с помощью конфигурационного файла жать проблем с его управлением в будущем. Физически
/usr/lib/sasl2/<имя приложения>.conf. Для Postfix имя при- почтовый ящик пользователя – это каталог в директории
ложения «smtpd», поэтому нам нужен файл /usr/lib/sasl2/ /var/spool/imap/user. При отображении в почтовом клиенте
smtpd.conf. Его содержание ничем не отличается от уже со- структура папок воспроизводит структуру этого каталога,
зданного ранее файла sample.conf, так что можно просто что не всегда удобно. Параметр altnamespace приводит поч-
создать символическую ссылку. товый ящик к более привычному «плоскому» виду: c кор-
невой папкой INBOX и всеми подкаталогами, приведенны-
# cat /usr/lib/sasl2/smtpd.conf ми к одному уровню. В отличие от Postfix настройка взаи-
pwcheck_method:saslauthd модействия с SASL не требует специального файла в ката-
mech_list:gssapi plain логе /usr/lib/sasl2, а все параметры SASL определяются не-
посредственно в файле /etc/imapd.conf. В данном случае на-
Проверку адресатов получаемых писем мы делать не бу- стройка аналогична Postfix – добавилась только приставка
дем (параметр local_recipient_maps не определён), все по- sasl. После этого можно запустить Cyrus-IMAP:
лученные письма передаются Cyrus-IMAP без предвари-
тельного разбора. Тем не менее нужно создать базу с ос- $ /usr/cyrus/bin/master &
новными псевдонимами (в основном техническими, напри-
мер, postmaster) с помощью команды: и проверить, что в /var/log/syslog не сыпятся сообщения
об ошибках.
$ postalias /etc/postfix/aliases Перед тем как приступить к созданию почтовых ящиков,
займёмся заселением базы Kerberos. Как уже говорилось,
после чего posfix готов к работе: нам нужно добавить принципала cyradmin и двух принци-
палов, соответствующих сервисам IMAP и SMTP. Для этого,
$ /usr/sbin/postfix start как обычно, нужно зарегистрироваться в системе как root,
аутентифицироваться в секторе Kerberos как администра-
Проверьте по /var/log/maillog, что Postfix успешно стар- тор Kerberos и с помощью программы kadmin внести изме-
товал. нения в базу данных Kerberos.
Для Сyrus-IMAP вначале нужно создать его рабочую
директорию и дерево каталогов для хранения почтовых # 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
$ mkdir –p /var/imap/{proc,db,log,msg,socket,ptclient} >ext smtp/kdc.myrealm.ru
$ 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 ным образом. С помощью команды ext их пароли извле-
каются из базы данных Kerberos и записываются в файл
Обратите внимание на права доступа к создан- /etc/krb5.keytab. Поскольку этот файл содержит пароли
ным директориям. Для передачи почты через сокет в незашифрованном виде, то права на его чтение следу-
/var/imap/socket/lmtp, Postfix, работающему под совсем дру- ет ограничить. Вместе с тем сервисы, в том числе Postfix
гим пользователем, чем Cyrus-IMAP, необходимо иметь пра- и Cyrus-IMAP, работающие под непривилегированными
ва на чтение и запуск программ в этой директории. пользователями, должны уметь извлекать свои пароли
Настройка Cyrus-IMAP, как уже говорилось, осуществля- из этого файла. Для этого самым простым решением будет
ется с помощью двух конфигурационных файлов. Предпо- открыть keytab-файл на чтение выделенной группе, в кото-
лагается, что файл настроек демона master (/etc/cyrus.conf) рую нужно будет включить root, postfix и cyrus. То есть в файл
уже скопирован. Для настройки взаимодействия по прото- /etc/group нужно добавить строку вида:
колу IMAP используется файл /etc/imapd.conf:
kerberos::1000:root,postfix,cyrus
configdirectory: /var/imap
partition-default: /var/spool/imap
admins: cyradmin а затем поменять владельца и права доступа к keytab-
altnamespace: yes файлу:
sasl_pwcheck_method: saslauthd
sasl_mech_list: gssapi plain
# chown root.kerberos /etc/krb5.keytab
# chmod 640 /etc/krb5.keytab
В первых двух строчках определяются рабочие дирек-
тории Cyrus-IMAP (выше мы их уже создали). Администра- Теперь можно приступать к созданию почтовых ящиков
тором почтовых ящиков назначается cyradmin. Причем тре- для пользователей, а заодно проверить насколько работос-

64
безопасность
пособна аутентификация в Cyrus-IMAP через SASL. Нужно ния письма мы используем механизм GSSAPI (можно было
аутентифицироваться с помощью kinit в секторе Kerberos бы использовать и простой текстовый пароль, но для этого
как cyradmin и вызвать утилиту cyradm: программу imtest нужно запускать, как ни странно, с клю-
чом -m login).
$ cyradm kdc.myrealm.ru
kdc.myrealm.ru> cm user.mike $ imtest -m GSSAPI kdc.myrealm.ru
kdc.myrealm.ru> setquota user.mike 10000
S: * OK kdc.myrealm.ru Cyrus IMAP4 v2.2.12 server ready
Таким образом, создан ящик ёмкостью 10 Мб для поль- C: C01 CAPABILITY
S: * CAPABILITY IMAP4 IMAP4rev1 ACL QUOTA LITERAL+ MAILBOX-RE-
зователя mike. В этом примере для аутентификации cyradm FERRALS NAMESPACE UIDPLUS ID NO_ATOMIC_RENAME UNSELECT CHILDREN
воспользовался супербилетом принципала cyradmin. Так- MULTIAPPEND BINARY SORT THREAD=ORDEREDSUBJECT THREAD=REFERENCES
ANNOTATEMORE IDLE AUTH=GSSAPI SASL-IR
же можно аутентифицироваться с помощью текстового па- S: C01 OK Completed
роля, но для этого нужно убедиться, что демон saslauthd ....
запущен, и указать в командной строке cyradm имя адми- S: A01 OK Success (privacy protection)
Authenticated.
нистратора Cyrus-IMAP и ключ -p для интерактивного вво- Security strength factor: 56
да пароля: 1 select inbox
* FLAGS (\Answered \Flagged \Draft \Deleted \Seen)
* OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen
$ cyradm -u cyradmin -p kdc.myrealm.ru
\*)]
...
* 2 EXISTS
* 1 RECENT
После этого наша тестовая почтовая система готова * OK [UNSEEN 2]
к работе! В итоге команда «ps -aux» должна показать на- * OK [UIDVALIDITY 1137116496]
личие двух процессов master (один для postfix, а другой для * OK [UIDNEXT 12]
1 OK [READ-WRITE] Completed
cyrus) и ещё несколько процессов saslauthd. После чего мож- 2 fetch 2 body[text]
но проверить работоспособность системы с помощью про- * 2 FETCH (FLAGS (\Recent \Seen) BODY[TEXT] {14}
Hello, mike!
грамм smtptest и imtest. Эти программы входят в состав дис- )
трибутива Cyrus-IMAP (каталог imtest). Если они по каким- 2 OK Completed (0.000 sec)
то причинам не скомпилировались при сборке программ, 3 store 1 +flags \deleted
* 1 FETCH (FLAGS (\Deleted \Seen))
то можно сделать это сейчас, выполнив «make» в соответс- 3 OK Completed
твующем каталоге. Обе программы чем-то напоминают
обычный telnet, позволяя подключаться к определённому Конечно же, регулярно использовать imtest и smtptest
порту и вводить команды, специфические для выбранно- для чтения/отправки почты большого удовольствия не до-
го протокола в командной строке. Их отличие от telnet толь- ставляет. Поэтому посмотрим, какие почтовые клиенты поз-
ко в том, что они выполняют аутентификацию автоматичес- воляют использовать преимущества аутентификации с по-
ки при запуске, тем самым избавляя вас от необходимости мощью GSSAPI в полном объеме.
вручную приводить сертификаты к 7-битной форме. Попро-
буем с их помощью отправить письмо самому себе и затем Почтовые клиенты и мобильный доступ
прочитать его. Вначале, разумеется, нужно зарегистриро- Хотя возможность аутентификации с помощью GSSAPI при-
ваться в системе и в Kerberos как обычный пользователь. сутствовала в почтовых службах достаточно давно, но вос-
пользоваться ею было очень сложно из-за практически пол-
$ kinit mike ного отсутствия подходящих почтовых клиентов. Из кон-
$ smtptest -m PLAIN -u mike kdc.myrealm.ru
сольных клиентов в полном объеме GSSAPI использовал
S: 220 kdc.myrealm.ru ESMTP Postfix только Pine [3] для аутентификации по протоколам IMAP
C: EHLO example.com
S: 250-kdc.myrealm.ru и SMTP. Популярный клиент Mutt [4] использовал GSSAPI
S: 250-PIPELINING только для протокола IMAP. До последнего времени с гра-
S: 250-SIZE 10240000
S: 250-VRFY
фическими почтовыми клиентами дела обстояли еще хуже.
S: 250-ETRN Большинство из них, за исключением, может быть, клиен-
S: 250-AUTH GSSAPI PLAIN тов от Microsoft, традиционно поддерживающих свой про-
S: 250-AUTH=GSSAPI PLAIN
S: 250 8BITMIME токол NTLM, использовали только вариации открытых тек-
Please enter your password: стовых механизмов (PLAIN, LOGIN). (Справедливости ра-
C: AUTH PLAIN ************
ди следует упомянуть еще почтовый клиент Mulberry, кото-
S: 235 Authentication successful
Authenticated. рый поддерживал GSSAPI в полном объеме. К сожалению,
Security strength factor: 0 этот коммерческий почтовый клиент в основном был рас-
MAIL FROM: mike@kdc.myrealm.ru
RCPT TO: mike@kdc.myrealm.ru пространен на платформе Macintosh, и компания, продви-
DATA гавшая его, обанкротилась в 2005 году.) Безопасность со-
Hello, mike! единения обеспечивалась внешними средствами с помо-
.
250 Ok: queued as 9E2495A8 щью SSL/TLS.
Ситуация изменилась с выходом в январе этого года
Аналогично, с помощью imtest, прочитаем это «пись- почтового клиента Thunderbird 1.5, в котором была впервые
мо». В отличие от предыдущего случая, где доступ был по- объявлена поддержка Kerberos. В данной статье я буду рас-
лучен после предъявления текстового пароля, для получе- сматривать настройку только этого приложения. Посколь-

№11, ноябрь 2006 65


безопасность
ку клиент Thunderbird, как и другие продукты из семейства ны установка пакета KfW и процедура получения обеих су-
Mozilla, изначально планировался как кроссплатформенная пербилетов (MS и MIT) при входе пользователя на свою ра-
программа, то его можно использовать как в UNIX-подобных бочую станцию.
операционных системах, так и в системе Windows. В послед- После того как «правильный» супербилет находит-
нем случае, правда, есть несколько небольших ловушек. ся в кэше сертификатов MIT, Thunderbird должен аутен-
Установка и настройка Thunderbird в Linux проблем тифировать пользователя с помощью механизма GSSAPI.
не вызывает. Нужно только скачать и распаковать бинар- Однако «должна» не значит, что именно так она и посту-
ную версию Thunderbird с сайта Mozilla [5]. Thunderbird ис- пит. Если в процессе аутентификации возникает ошиб-
пользует GSSAPI непосредственно, не прибегая к услугам ка и Thunderbird настаивает на использовании открытых
SASL. Так что помимо самого почтового клиента вам нуж- текстовых паролей, то скорее всего Thunderbird не может
на ещё клиентская часть библиотек Heimdal. Настройка найти саму библиотеку GSSAPI. В этом случае для борь-
почтовой учетной записи пользователя выполняется как бы с этой ошибкой нужно отредактировать еще два пара-
обычно. Нужно только поставить две галочки – одну напро- метра по умолчанию Thunderbird (ниже приведены исход-
тив «Use secure authentication» на закладке Server Settings ные значения):
(для протокола IMAP) и вторую – напротив «Use name
and password» в окне свойств Outgoing Server (для протоко- user_pref("network.negotiate-auth.using-native-gsslib", true)
user_pref("network.negotiate-auth.gsslib", "")
ла SMTP). При наличии супербилета у пользователя учет-
ной записи такая настройка Thunderbird приводит к аутен- Первый параметр означает, что Thunderbird использует
тификации по протоколу GSSAPI. Поскольку, как правило, системную библиотеку gssapi, которая в системе Windows
система конфигурируется таким образом, что супербилет называется gssapi32.dll. Если по каким-то причинам най-
запрашивается при входе пользователя в систему, то до- ти её не удаётся, например, потому что она не зарегист-
полнительного ввода пароля в Thunderbird не требуется. рирована в реестре, то нужно поменять значение перво-
Пользователь сразу же получает доступ к своему почто- го параметра на false, а во втором параметре указать пол-
вому ящику. По логам Cyrus-IMAP и Postfix вы можете убе- ный путь до соответствующей библиотеки из пакета KfW.
диться, что при аутентификации действительно использу- Это значение, разумеется, зависит от того, где именно
ется протокол GSSAPI. Если поле «Use secure authentication» был установлен пакет KfW. У меня, например, этот путь –
не отмечено, то Thunderbird откатывается к механизму про- у:\KfW\bin\gssapi32.dll.
стых текстовых паролей. В этом случае доступ к почтово- Теперь рассмотрим ещё несколько моментов, на кото-
му ящику возможен только после ввода пароля в выпада- рые нужно обратить внимание при переносе «песочницы»
ющем окошке. в локальную сеть. Во-первых, разумеется, нужно поменять
В системе Windows настройка выполняется аналогич- имена принципалов в соответствии с именами компьюте-
но. Но недостаток почтового клиента Thunderbird в том, что ров в локальной сети и именем сектора Kerberos. К приме-
он не умеет использовать стандартное API Windows для до- ру, у принципала imap/kdc.myrealm.ru@MYREALM.RU часть
ступа к функциям аутентификации (так называемое SSPI). имени между «/» и «@» – это имя компьютера, на котором
Поэтому, в настройках по умолчанию Thunderbird в первую работает сервис, часть имени после «@» – название сек-
очередь нужно запретить использование SSPI – в против- тора Kerberos – их-то вам и нужно привести в соответствие
ном случае это приведёт к некорректному завершению ра- с реальными именами. Во-вторых, ключ сервиса должен
боты программы. присутствовать в keytab-файле на том компьютере, где ра-
ботает сервис. Точно так же, на том же компьютере должен
user_pref("network.auth.use-sspi", false); присутствовать и файл конфигурации SASL (в каталоге
/usr/lib/sasl2). И последнее – следует задуматься о том, сле-
Это можно сделать, вручную отредактировав файл дует ли вам запретить использование открытых текстовых
prefs.js в каталоге с используемым пользовательским про- паролей для доступа к сервисам? Если вы все-же решите их
филем (т.е. C:\Documents and Settings\[User Name]\Application оставить, то как тогда обезопасить их передачу? Простые
Data\Thunderbird\Profiles\) или введя нужное значение в ок- текстовые пароли удобны тем, что они поддерживаются лю-
не «Edit → Preferences → Advanced → Config Editor». быми почтовыми клиентами. Однако, чтобы предотвратить
Возможно, в следующих версиях Thunderbird будет до- перехват простых текстовых паролей, при передаче по се-
бавлена недостающая функциональность, но пока пользо- ти Cуrus-IMAP и Postfix позволяют запретить использова-
вателям Windows-версии остается единственная альтер- ние простых текстовых паролей, если канал передачи не за-
натива – использовать библиотеку Kerberos-for-Windows шифрован с помощью SSL/TLS. Для Cyrus-IMAP нужно от-
от MIT. Следует подчеркнуть, что SSPI и библиотека gssapi редактировать файл /etc/imapd.conf добавив параметр:
из пакета KfW используют разные кэши сертификатов.
Для пользователя это означает, что даже если суперби- allowplaintext: 0
лет уже получен средствами sspi, то для функционирова-
ния KfW (и следовательно Thunderbird) этого недостаточно. Аналогично можно настроить и Postfix, дописав в main.cf
Этот сертификат должен быть конвертирован в сертификат файл строки:
MIT (с помощью утилиты ms2mit) или же необходимо полу-
чить новый супербилет средствами библиотеки KfW (и гра- smtpd_sasl_security_options=noplaintext,noanonymous
smtpd_sasl_tls_security_options=noanonymous
фического интерфейса к ней leash32). В статье [6] описа-

66
безопасность
В том случае, если простые текстовые пароли не запре- ганизовать на ней полностью переносимое рабочее окру-
щаются, надо настроить шифрование канала. Но обсужде- жение из Thunderbird и пакета Kerberos-for-Windows. Таким
ние этого вопроса выходит за рамки данной статьи. образом, отпадает необходимость в установке и настрой-
Итак, если текстовые пароли запрещены, то следует ке gssapi на клиентском компьютере.
подумать над тем, каким образом клиенты, находящиеся Для этой цели нужно перенести весь каталог с Thunderbird
вне вашего сектора Kerberos могут аутентифицировать- (тот, что установлен на C:\Program Files\...) на съёмный диск
ся с помощью GSSAPI. Если клиентская часть находится и в него же распаковать пакеты KfW и KfW-extra [7]. В итоге
на компьютере, имя и адрес которого постоянны (напри- исполняемые файлы thunderbird.exe, leash32.exe и библио-
мер, домашний компьютер вашего коллеги), то проще все- тека gssapi32.dll должны оказаться на одном уровне в од-
го включить этот компьютер в ваш сектор Kerberos. Если же ном и том же каталоге. При этом следует убедится, что за-
на компьютере, кроме того, установлен Linux, то можно так- пуск leash32 со съёмного носителя не приводит к сообще-
же установить на нем локальный сектор Kerberos и нала- ниям об ошибке. Затем, в настройках leash32 нужно по-
дить траст между этим локальным сектором и корпоратив- менять способ хранения кэша сертификатов с API:krb5cc
ным сектором Kerberos. В любом случае следует убедить- на FILE:krb5cc. Таким образом, скопировав какой-нибудь
ся, что доступ к kdc через 88 UDP/TCP-порт не блокируют- из полученных ранее сертификатов в файл krb5cc в ката-
ся брандмауэрами. лог с leash32, мы делаем этот сертификат доступным биб-
Если же доступ к почте осуществляется вполне легаль- лиотеке gssapi. Чтобы не настраивать каждый раз учёт-
ным пользователем, но со «случайного» компьютера и толь- ную запись пользователя, в тот же каталог стоит также
ко время от времени, то можно обойтись без включения его скопировать каталог с пользовательскими настройками
в сектор Kerberos. Правда, в этом случае требуется опре- (C:\Documents and Settings\[User Name]\Application Data\
делённые предварительные усилия для того, чтобы создать Thunderbird\Profiles\xxxxx.default) для удобства переимено-
и перенести на этот компьютер билеты Kerberos. Идея мето- вав его, например, в roaming.def. Теперь осталось настро-
да состоит в том, что раз у пользователя уже есть готовые ить взаимодействие thunderbird с библиотекой gssapi, от-
билеты для получения доступа к сетевым сервисам, то ни- редактировав файл roaming.defrefs.js:
какого взаимодействия с KDC не требуется и, следователь-
но, на клиентском компьютере не нужно настраивать сек- user_pref("network.auth.use-sspi", false);
user_pref("network.negotiate-auth.using-native-gsslib", ↵
тор Kerberos. Хотя при этом по-прежнему в силе остается false)
требование, чтобы на компьютере были доступны библио- user_pref("network.negotiate-auth.gsslib", "gssapi32.dll")
теки gssapi и, разумеется, Thunderbird.
Рассмотрим пример – ваш коллега отправляется в ко- Поскольку библиотека gssapi находится в том же ка-
мандировку, время прибытия на место и отбытия ему из- талоге, что и исполняемый файл thunderbird.exe, то пол-
вестно. Он собирается просматривать свою почту, исполь- ный путь указывать не нужно. После чего можно запустить
зуя компьютер принимающей организации. Тогда перед thunderbird с флешки с помощью команды:
отъездом ему нужно получить несколько билетов с ваше-
го KDC, например, с помощью такого скрипта: $ thunderbird.exe -profile roaming.def

#/bin/bash и убедиться, что почтовые сервисы доступны и при нали-


for i in $@ ; do
kinit -A --renewable --forwardable --start-time=$i ↵ чии действительных сертификатов в файле krb5cc от вас
-r 7d -l 1d -c $HOME/krb5cc_$i не требуется ввод пароля.
kgetcred -c ~/krb5cc_$i smtp/kdc.myrealm.ru
kgetcred -c ~/krb5cc_$i imap/kdc.myrealm.ru На этом мы и завершим настройку почтовой системы.
done Таким образом, нам удалось полностью интегрировать поч-
товые службы SMTP и IMAP в инфраструктуру Kerberos,
С помощью этого скрипта пользователь получает безад- а кроссплатформенный почтовый клиент Thunderbird поз-
ресный TGT (ключ -A в вызове kinit), действительный в те- воляет пользователям Linux и Windows воспользоваться
чение суток начиная со дня, указанного в качестве входно- преимуществами single sign-on-системы.
го параметра (--start-time). Нужно указать все дни, которые
ваш сотрудник рассчитывает пробыть в командировке. С по- 1. ftp://ftp.opennet.ru/pub/postfix/official/postfix-2.2.5.tar.gz.
мощью полученного TGT генерируются билеты для служб 2. ftp://ftp.andrew.cmu.edu/pub/cyrus-mail.
SMTP и IMAP, и весь комплект ключей записывается в фай- 3. http://www.washington.edu/pine/getpine.
лы вида krb5cc_<ДБФБ>. Все эти файлы нужно скопировать 4. http://www.mutt.org.
на какой-нибудь физический носитель (например, на флеш- 5. http://ftp.mozilla.org/pub/mozilla.org/thunderbird/releases/1.5rc1/
ку), который ваш коллега возьмёт с собой в поездку. source.
Чтобы воспользоваться билетами, нужно указать 6. Кондрин М. Развертываем Heimdal Kerberos. //Системный Ад-
Thunderbird, где найти библиотеку gssapi, а библиотеке министратор, №7, 2005 г. – С. 20-25.
gssapi сообщить, откуда брать сертификат пользователя. 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. Если же на флешке ваше- работы с Kerberos. //Системный администратор, №10, 2006 г. –
го коллеги есть еще 45 Мб свободного места, то можно ор- С. 38-42.

№11, ноябрь 2006 67


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

Работаем с NTLM-авторизацией Apache


в домене MS Windows 2003

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

М
ногие фирмы создают различ- ту. Разделять и контролировать мож- тавлена подобная задача. Особеннос-
ные веб-ресурсы для исполь- но различными способами: на уровне ти инсталляции:
зования только внутри компа- ОС (firewall), веб-сервера и средства-  Первое – сервер Sun sparc, ОС со-
нии (intranet-серверы). Если политика ми самих приложений. ответственно Solaris 9. Есть своя
компании позволяет использовать тех- Если авторизация во внутренней специфика, но приведенное реше-
нологии не только «монстра» Microsoft, сетке построена на домене Windows, ние должно работать на большинс-
то выбор часто останавливается на са- то разумно использовать доменные ак- тве других ОС.
мом популярном http-сервере Apache. каунты (чтобы не плодить учетные за-  Второе – как обычно, как мож-
Бывает, что веб-ресурсы требуют раз- писи) и прозрачную для конечных поль- но меньше трогать системные на-
деления прав и контроля доступа к не- зователей NTLM-авторизацию. стройки и настройки других про-
которым разделам или ко всему сай- Недавно передо мной и была пос- грамм на сервере.

68
безопасность
 Третье, самое интересное – домен  Клиент отвечает на запрос сооб- це опишу основные моменты. Обычно
в моей организации самый модный, щением 3-го типа, где содержится участники процесса Kerberos-аутенти-
Active Directory (AD или ADS в даль- различная информация о клиенте фикации делятся на три категории:
нейшем) на сервере Windows 2003 (в том числе домен, имя пользова-  клиентская часть сетевого прило-
со всеми возможными новшествами. теля, пароль) и информация, запро- жения (client);
Отношения к управлению доменом шенная сервером на второй стадии  серверная часть сетевого приложе-
я никакого не имею, этим занимают- NTLM-сессии дополнительно. ния (application server);
ся совершенно другие люди. В этой  сервер аутентификации Kerberos
сетке я просто пользователь. Ответы на 3-м этапе NTLM-сеан- (часто используется аббревиатура
са – самая критичная часть диалога, KDC).
Что имеем на клиенте: т.к. на этом шаге клиент доказывает  Наверное, иногда можно добавить
 Solaris 9 9/04. серверу свою подлинность. После ус- и четвертого участника – злоумыш-
 Apache (Apache/1.3.31) из стандар- тановки подлинности клиент и сервер ленника, но подробные вопросы бе-
тной поставки Solaris 9. обмениваются различной информаци- зопасности сетевых технологий вы-
ей о созданной NTLM-сессии, включая ходят за рамки данной статьи.
Для авторизации NTLM решено до- ключ сессии, используемый для после-
установить – samba3 и mod_ntlm_winbind дующей подписи операций. Первый и второй типы участников
из того же проекта (см. [4, 5]). Более подробно ознакомиться являются Kerberos-клиентами, кото-
Другие модули NTLM-авторизации, с описанием стека протоколов NTLM рые подтверждают свою подлинность
которые я нашел, с доменом 2003 ра- и реализацией этого стека для HTTP-ау- у сервера или «центра» Kerberos – KDC
ботать не умеют. тентификации можно, следуя по ссыл- (Key Distribution Center). KDC управляет
NTLM – это набор протоколов про- кам [10, 11]. проверкой подлинности всех Kerberos-
верки подлинности и безопасного ис- В настоящее время NTLM в значи- клиентов. Чтобы два Kerberos-клиента
пользования сессий, используемый тельной степени вытесняется техно- (клиент приложения и сервер прило-
в различных сетевых приложениях, пре- логией Kerberos, как схемой аутенти- жения) доказали друг другу свою под-
имущественно в сетях Microsoft. Перво- фикации в сценариях внутри домена линность, они используют соответс-
начально созданный для работы в служ- Windows. Однако в некоторых случаях твующие удостоверения – «тикеты»
бах DCE/RPC, NTLM в данный момент использовать только Kerberos не пред- (ticket). KDC также управляет распре-
используется всюду в сетевых прило- ставляется возможным, например, ес- делением тикетов. Подобная схема ра-
жениях Microsoft. Вероятно, это лучший ли сервер или клиент не входит в до- боты называется сторонней системой
способ для HTTP-авторизации в се- мен Windows, или они принадлежат идентификации, или системой иден-
тях MS Windows. Кроме упомянутых различным доменам. тификации у третьего лица (third party
RPC, HTTP, поддержка NTLM встроена Можно настроить прозрачную authentication system).
в Exchange-сервер (протоколы SMTP, для пользователя аутентификацию, В нашем случае Samba-сервер
POP3, IMAP); она так же присутствует используя только технологию Kerberos, как член домена MS Windows обраща-
в Microsoft – в реализациях CIFS/SMB, без NTLM. ется с информацией к ADS. Оба под-
Telnet, SIP и, возможно, в каких-то еще. По ссылке [13] можно ознакомить- тверждают свою подлинность у KDC
Сеанс NTLM-аутентифицикации ся с описанием схемы аутентификации (обычно это одна из функций контрол-
работает по принципу запрос-ответ. через Kerberos, которая используется лера домена MS Windows).
Он содержит три типа сообщений, так- Microsoft в своих продуктах (сервер Пакет проверк и под линнос ти
же известных как: IIS – браузер Internet Explorer). W indows Kerb eros и с п ол ь зуе тс я
 Type 1 – начало переговоров. По ссылке [12] – описание спосо- по умолчанию в Microsoft Windows
 Type 2 – запрос. ба для связки Apache-Mozilla. Думаю, Server 2003, Microsoft Windows XP,
 Type 3 – аутентификация (провер- будет работать и с MS Internet Explorer, и Microsoft Windows 2000 и сосуществу-
ка подлинности). не пробовал. ет с протоколом запрос/ответ NTLM.
Сегодня рассматривается реше- По умолчанию максимальный раз-
Обычно создание NTLM-сессии вы- ние, которое использует обе техноло- мер пакета, для которого Windows
глядит следующим образом: гии. Клиент (браузер Internet Explorer) Server 2003 использует протокол UDP,
 Клиент посылает сообщение 1-го использует стек протоколов NTLM для составляет 1465 байт. В зависимости
типа на сервер. Это сообщение со- аутентификации у веб-сервера Apache. от различных факторов, например ис-
держит список опций, поддержива- Веб-сервер, в свою очередь, прове- тории идентификатора безопасности
емых клиентом и запрашиваемых ряет подлинность клиента в домене (SID) и членства в группе, некоторые
у сервера. MS Windows, авторизуясь в AD через учетные записи будут иметь больший
 Сервер отвечает сообщением 2-го технологию Kerberos. размер пакетов проверки подлиннос-
типа. Второе сообщение содержит Подробно с работой технологии ти Kerberos.
список опций, принятых сервером. Kerberos можно ознакомиться, напри- В конце концов Microsoft рекомен-
Более того, часто в этом сообще- мер, по ссылке [14]. дует использовать службу Kerberos
нии передается дополнительный Чтобы при дальнейшем чтении ста- через протокол TCP (см. [2]). А точ-
запрос, генерируемый сервером. тьи не возникало неясностей, вкрат- нее – по UDP Kerberos от Microsoft

№11, ноябрь 2006 69


безопасность
в Windows 2003 не работает без дополнительных настро- Распаковываем:
ек. В нашем случае контроллер домена требует использо-
вать только протокол TCP. Так как это настройки по умол- $ tar xf krb5-1.5-signed.tar
$ /usr/sfw/bin/gtar xzf krb5-1.5.tar.gz
чанию в Windows 2003 – скорее всего они используются $ cd krb5-1.5/src
на большинстве систем. Видел официальное объяснение
от Microsoft на английском языке, но на момент написания Читаем, по желанию:
статьи не нашел его.
Kerberos, поставляемый с Solaris 9 (базируется на MIT $ more ../README
KRB5 1.2.1), подобных штучек себе не позволяет. Microsoft
об этом честно предупреждает: «обновите UNIX KDC до пос- Cобираем:
ледней версии протокола, которая поддерживает соедине-
ния TCP вместо UDP» (см. [3]). $ ./configure --prefix=/usr/local/mit-krb5 ↵
--enable-shared --without-krb4
Хотя у нас и клиент Kerberos, а не KDC – обновиться все $ make
равно придется.
В Solaris 9 по умолчанию нет никаких компиляторов, при- Ставим:
дется установить gcc.
Samba собираем с поддержкой AD, т.е. с ключом # make install
--with-ads. Так как сервер Active Directory – это, по большо-
му счету, реализация сервера LDAP от Microsoft, то и Samba Процесс сборки у меня никаких проблем не вызвал. По-
при включении функционала клиента AD требует подде- жалуй, единственное, на что стоит обратить внимание, что-
ржку LDAP. Поэтому используем --with-ldap. бы все нужные для сборки программы и библиотеки бы-
Не стал мучаться с LDAP-библиотеками от Sun ли доступны.
(SunONE ds), поставил OpenLDAP из пакетов. OpenLDAP по- Переменная PATH у меня выглядела следующим обра-
тянул за собой соответственно OpenSSL и т. д. (в различных зом (crle у нас уже настроен):
сборках OpenLDAP требования могут отличаться).
MIT krb5-1.5 использует BerkeleyDB – установил пакет $ echo $PATH
версии db-4.2.52. /usr/local/bin:/usr/bin:/usr/sbin:/usr/ccs/bin:/usr/sfw/bin:/usr/ucb
Все пакеты для Solaris 9 взяты с сайта [7], это:
 SMCgcc342;
 SMCiconv; Собираем Samba
 SMCossl98b; Скачиваем исходники (см. [4]). Я использовал файл
 SMCsasl; samba-3.0.23a.tar.gz. Как и в случае с Kerberos – это пос-
 SMColdap; ледняя стабильная версия на момент установки.
 SMCdb. Распаковываем:

Скачиваем, устанавливаем, например, так: $ /usr/sfw/bin/gtar xzf samba-3.0.23a.tar.gz


$ cd samba-3.0.23a/source

# for i in *gz Собираем:


do
/usr/bin/gunzip $i
done $ ./configure --prefix=/usr/local/samba --with-ldap ↵
# for i in *local --with-ads --with-krb5=/usr/local/mit-krb5
do $ make
pkgadd –d $i all
done
Ставим:
Чтобы установленные библиотеки стали видны осталь-
ным программам, пропишем путь к /usr/local/lib в crle: # make install

# crle -l /usr/lib:/usr/local/lib Процесс сборки также никаких заметных проблем


не вызвал.
Программы собраны, теперь надо завести машину в до-
Собираем Kerberos мен MS Windows.
Скачиваем исходники (см. [8]). Я использовал файл
krb5-1.5-signed.tar – последняя стабильная версия на момент Настраиваем DNS
установки. Можно использовать любую, лишь бы выбран- Настройки брал со своей рабочей станции:
ная версия работала по TCP как Kerberos-клиент и не воз-
никло проблем при сборке. > ipconfig /all
Судя по файлу ./doc/CHANGES, поддержка TCP на сто- Primary Dns Suffix . . . . . . . : w2003.domain.inside
роне клиента появилась 2002-06-10. Для сравнения – вер- …
DNS Servers . . . . . . . . . . . : 192.168.0.1
сия Kerberos в стандартной поставке Solaris 9 датирована 192.168.1.1
2002-04-06. 192.168.2.1

70
безопасность
В Solaris 9 по умолчанию можно использовать как раз Проверяем настройки Kerberos командами:
три DNS-сервера:
$ /usr/local/mit-krb5/bin/kinit -p domainuser
$ grep MAXNS /usr/include/resolv.h | grep define

#define MAXNS 3 /* max # name servers we'll track */ Спросит пароль…


Если все в порядке, то:
Пишем в /etc/resolv.conf:
$ /usr/local/mit-krb5/bin/klist
nameserver 192.168.0.1
nameserver 192.168.1.1
nameserver 192.168.2.1 Выдаст созданный «тикет».
domain w2003.domain.inside Когда писал статью, нашел в Интернете описание сбор-
ки samba3 для работы с ADS под Solaris9 (см. [9]). В ней ав-
проверяется DNS командой nslookup, кто запамятовал. тор предлагает собрать Samba, используя heimdal-реализа-
Не забываем, что в /etc/nsswitch.conf должна присутс- цию протокола Kerberos, для чего пришлось сильно пропат-
твовать строчка: чить скрипт configure. Возможно, вариант не самый краси-
вый, но статья оформлена превосходно. Вы можете поль-
hosts: files dns зоваться любым способом, главное, чтобы Kerberos рабо-
тал через TCP.
Она говорит о том, что при разрешении имен компью-
теров соответствующая запись будет искаться в файле Настраиваем Samba
/etc/hosts, в случае неудачи будет использован протокол Привожу свой файл smb.conf:
DNS. Подробнее с использованием сервисов имен в Solaris 9
можно ознакомиться в man-страницах nsswitch.conf, [global]
workgroup = W2003
gethostbyname (разрешение имен хостов) и в Интернете. # имя домена
server string = samba for ntlm
Настраиваем Kerberos netbios name = pebs903x
Список контроллеров домена я получил через DNS (на ра- # это имя машине дали администраторы домена
netbios aliases = argo
бочей станции): # hostname, нам так проще обращаться к машине

interfaces = eri0
> nslookup w2003 bind interfaces only = yes
# параметры необязательные, просто в момент
# настройки на сервере уже работала стандартная
kdc и admin_server взял первым из списка контроллеров. # Samba Version 2.2.12, поэтому выбор интерфейса
Хотя правильней, пожалуй, было бы спросить у админис- # был критичен
траторов домена. domain master = No
В моем случае адреса совпали с DNS-серверами, но это wins server = 192.168.0.2
# смотрим вывод команды "ipconfiog /all"
может быть не всегда так. # в MS Windows на машине из домена
Привожу мой /etc/krb5.conf:
name resolve order = wins host

$ more /etc/krb5.conf realm = W2003.DOMAIN.INSIDE


security = ads
[libdefaults] password server = pdc1.w2003.domain.inside
default_realm = W2003.DOMAIN.INSIDE encrypt passwords = yes
udp_preference_limit = 1
[realms] log level = 0
W2003.DOMAIN.INSIDE = { # возможно, в процессе настройки придется увеличить
kdc = pdc1.w2003.domain.inside
admin_server = pdc1.w2003.domain.inside idmap uid = 10000-20000
} idmap gid = 10000-20000
winbind separator = +
[domain_realms]
.pdc1.w2003.domain.inside = W2003.DOMAIN.INSIDE Если

Строчка: $ /usr/local/samba/bin/testparm

udp_preference_limit =1 отрабатывает без ошибок, можно вводить машину в домен.


Когда администраторы домена дали права только завести
говорит как раз о том, чтобы по возможности использовал- машину в домен – ничего не вышло. Помучился денёк с пере-
ся протокол TCP вместо UDP по умолчанию. сборкой/перенастройкой Kerberos и Samba. Решилось прос-
Теоретически, клиент должен пытаться использовать то – дали полные права администратора домена – машину
TCP, если размер сообщения больше 1 байта. Solaris 9 со- добавил. Права забрали. Так что в чем конкретно было дело –
держит прекрасный анализатор трафика – snoop, который сказать не могу. Заводим машину в домен командой:
нам четко показывает, что по одному сообщению UDP кли-
ент и сервер все же умудряются обменяться. # /usr/local/samba/bin/net ads join -U domainlogin

№11, ноябрь 2006 71


безопасность
После указанных выше настроек и получения прав адми- Теперь осталось добавить строчки в соответствующие
нистратора домена команда отработала без ошибок. Про- места /etc/apache/httpd.conf:
верить можно, например, получив список групп домена:
LoadModule ntlm_winbind_module ↵
libexec/mod_auth_ntlm_winbind.so
# /usr/local/samba/bin/net ads group -U domainlogin AddModule mod_ntlm_winbind.c

Команда snoop в Solaris 9 разбирает LDAP-запросы, Перед перезапуском httpd можно проверить синтак-
что оказалось очень удобным, чтобы посмотреть, какие сис httpd.conf:
конкретно запросы формирует Samba к AD. Например, по-
лезно для того, чтобы достать из домена специфичные по- $ /usr/apache/bin/httpd –t
ля учетной записи пользователя – отображать на сайте имя
и фамилию пользователя, вместо логина. Если видим фразу «Syntax OK» – перезапускаем
Команда: Apache:

$ net ads search sAMAccountName=Administrator ↵ # /etc/init.d/apache restart


-U adusername

покажет нам все поля, которые доступны на чтение Проверяем работу модуля, для чего создаем тестовую
для adusername у учетной записи Administrator. папку, например:
Для запуска/остановки Samba использую следующий
скрипт: # mkdir /var/apache/htdocs/test-ntlm

#!/sbin/sh И в этой папке создаем файл .htaccess со следующи-


case "$1" in ми строчками:
start)
[ -f /usr/local/samba/lib/smb.conf ] || exit 0 AuthName "NTLM Authentication AD"
NTLMAuth on
/usr/local/samba/sbin/smbd -D NTLMAuthHelper "/usr/local/samba/bin/ntlm_auth ↵
/usr/local/samba/sbin/nmbd -D --helper-protocol=squid-2.5-ntlmssp"
sleep 30 NTLMBasicAuthoritative on
/usr/local/samba/sbin/winbindd AuthType NTLM
;; require valid-user
stop)
for i in `/usr/bin/ls ↵
/usr/local/samba/var/locks/*pid 2>/dev/null`
do Теперь можно использовать переменную REMOTE_USER
echo killed pid from file:$i из «Apache Environment» в своих веб-приложениях. Напри-
/usr/bin/kill `/usr/bin/cat $i`
/usr/bin/rm $i мер, прекрасно работает связка с Nagios.
done К сожалению, модуль не предоставляет возможности
;;
*) раздавать доступ конкретным пользователям (средства-
echo "Usage: $0 { start | stop }" ми Apache), но можно авторизовать по группам (из AD), ис-
exit 1
;; пользуя ключ --require-membership-of=GROUPNAME в ко-
esac манде ntlm_auth.
exit 0
Успехов!

Собираем и настраиваем 1. http://httpd.apache.org.


mod_smb_winbind 2. http://support.microsoft.com/kb/244474.
Скачиваем mod_ntlm_winbind.с (см. [5]). 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 /
Использовать стандартный Makefile (и apxs) не получит- windowsserver2003/technologies/security/tkerberr.mspx.
ся, т.к. Apache в Solaris 9 собран компилятором от SUN. Оп- 4. http://de.samba.org/samba.
ции будут немного отличаться от gcc. 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 t p : / / w w w.u n i xd o c . r u / i n d ex . p h p? m o d e = 2 & p o d m o d e =
$ cc -DSOLARIS2=290 -DMOD_PERL -DEAPI -DUSE_EXPAT ↵ 1&arcicle_id=145&theme=Samba%20ADS.
-I../lib/expat-lite -D_LARGEFILE_SOURCE ↵
-D_FILE_OFFSET_BITS=64 -DUSE_SO_LINGER ↵ 7. http://www.sunfreeware.com/indexsparc9.html.
-DHARD_SERVER_LIMIT=2048 -I/usr/apache/include ↵ 8. http://web.mit.edu/Kerberos/dist/index.html.
-Wall -o mod_ntlm_winbind.o -c mod_ntlm_winbind.c
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.
$ ld -G -o mod_auth_ntlm_winbind.so mod_ntlm_winbind.o 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.
# cp mod_auth_ntlm_winbind.so /usr/apache/libexec/ 14. http://gazette.linux.ru.net/lg82/shekhar.html.

72
bugtraq

Множественные уязвимости
в различных продуктах от Oracle Несколько уязвимостей в драйверах
Программа: JD Edwards EnterpriseOne Tools 8.x, JD Apple Airport
Edwards OneWorld Tools 8.x, Oracle Application Express 1.x, Программа: Apple Macintosh OS X.
Oracle Application Express 2.x, Oracle Application Server 10g, Опасность: Критическая.
Oracle Collaboration Suite 10.x, Oracle Database 10g, Oracle Описание: 1. Уязвимость существует из-за ошибок провер-
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. следующие продукты:
Опасность: Критическая.  Power Mac  Mac Pro
Описание: 1. Следующие пакеты недостаточно проверяют  PowerBook  Xserve
представленные данные перед использованием в SQL-за-  iBook  PowerPC-based Mac mini
просах. В результате возможно изменить существующий  iMac
SQL-запрос и внедрить произвольный SQL-код:
 DBMS_XDBZ  DBMS_SQLTUNE 2. Уязвимость существует из-за ошибки проверки гра-
 SDO_DROP_USER_BEFORE  SDO_GEOR_INT ниц данных в беспроводном драйвере AirPort при обработ-
 MD2  XDB_PITRIG_PKG ке обновлений кэша сканирований. Удаленный пользова-
 DBMS_CDC_IMPDP  SDO_DROP_USER тель может послать целевой системе специально сформи-
 DBMS_CDC_IPUBLISH  SDO_CS рованный фрейм, вызвать переполнение буфера и аварий-
 DBMS_CDC_ISUBSCRIBE но завершить работу системы или выполнить произволь-
ный код с привилегиями суперпользователя.
2. Переполнение буфера обнаружено в функции RELATE 3. Целочисленное переполнение буфера обнаружено
в пакетах MD2 и SDO_GEOM и в функции GEOM_OPERATION API беспроводных драйверов AirPort для стороннего ПО.
в пакете SDO_3GL, а также в функции TRANSFORM_LAYER Злоумышленник может послать приложению, использую-
в пакете SDO_CS. В результате злоумышленник, контро- щему уязвимый API, специально сформированный фрейм,
лирующий параметры к этим функциям, может выполнить вызвать переполнение буфера и выполнить произволь-
произвольный код на уязвимой системе. ный код на целевой системе с привилегиями суперполь-
3. Уязвимость существует в пакете WWV_FLOW_ITEM_ зователя.
HELP из-за недостаточной обработки входных данных в па- Примечание: Уязвимости №2 и №3 в Intel-based Mac mini,
раметре NOTIFCATION_MSG, и в Oracle Reports в параметрах MacBook и MacBook Pro не затрагивают системы до вер-
showenv, parsequery, cellwrapper и delimiter. Удаленный пользо- сии Mac OS X v10.4
ватель может выполнить произвольный код сценария в брау- URL производителя: http://www.apple.com/macosx.
зере жертвы в контексте безопасности уязвимого сайта. Решение: Установите исправление с сайта производите-
4. Уязвимость существует из-за ошибки, которая поз- ля.
воляет злоумышленнику только с привилегиями «create
session» редактировать, создавать и удалять виды.
URL производителя: http://www.oracle.com. Переполнение буфера в Clam AntiVirus
Решение: установите соответствующее исправление. Программа: Clam AntiVirus версии до 0.88.5.
Опасность: Критическая.
Переполнение буфера в драйверах Описание: 1. Уязвимость существует из-за ошибки про-
NVIDIA верки границ данных в распаковщике CHM-файлов
Программа: NVIDIA Driver For Linux v8774, NVIDIA Driver chmunpack.c. Удаленный пользователь может с помощью
For Linux v8762, NVIDIA Driver for FreeBSD, NVIDIA Driver специально сформированного CHM-файла вызвать отказ
for Solaris. в обслуживании приложения.
Опасность: Критическая. 2. Уязвимость существует из-за неизвестной ошибки
Описание: Уязвимость существует из-за ошибки при вос- в файле rebuildpe.c при пересоздании PE-файлов после их
произведении glyphs в бинарном драйвере NVIDIA. Уда- распаковки. Удаленный пользователь может вызвать пере-
ленный пользователь может вызвать переполнение буфе- полнение динамической памяти и выполнить произвольный
ра и аварийно завершить работу драйвера или выполнить код на целевой системе.
произвольный код на целевой системе. Уязвимость может URL производителя: http://www.clamav.net.
эксплуатироваться с помощью специально сформирован- Решение: Установите последнюю версию (0.88.5) с сайта
ной веб-страницы. производителя.
URL производителя: http://www.nvidia.com.
Решение: В настоящее время способов устранения уязви-
мости не существует.

№11, ноябрь 2006 73


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

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

Сергей Яремчук
Сегодня PHP – один из самых популярных языков, используемых при разработке
веб-приложений. Простота в изучении и использовании привлекает к нему новичков.

П
ринято считать, что ошибки мощью специализированных скане- Первая часть – небольшой патч к яд-
при программировании свойс- ров безопасности, работающих на при- ру, осуществляющий низкоуровневую
твенны только новичкам, кото- кладном уровне, вроде Acunetix Web защиту структур данных Zend LinkedList
рые многого еще не умеют и не зна- Vulnerability Scanner [2] и правильная и HashMap против переполнения бу-
ют, но это не так. Программист с опы- настройка всех компонентов системы фера и других уязвимостей ядра PHP.
том способен избежать большинства (веб-сервера, параметров PHP и ба- Это реализуется посредством хранения
проблем, но в то же время он также зы данных). Ручная проверка больших реальных указателей на используемые
не застрахован от ошибок. Кроме то- объемов кода является сложной и тру- деструкторы, и каждый раз при его вы-
го, многие сайты сегодня делаются доемкой задачей, требующей больших зове происходит проверка списка. Патч
под заказ специалистами-аутсорсе- знаний в различных областях, зай- защищает ядро и модули PHP от уязви-
рами и не всегда исполнитель может, мет много времени и 100% гарантии мости форматной строки и от ошибок
умеет и хочет провести полноценный все равно не даст. Сканеры безопас- в реализации функции realpath, прису-
аудит собственного кода. Крупные про- ности, как правило, позволяют выявить щей некоторым платформам (приводя
екты также содержат ошибки. Резуль- лишь общие ошибки. Вероятно, поэто- ее к принятой в FreeBSD).
тат – сегодня только и слышно о PHP му в последнее время активно разви- Вторая часть реализована в ви-
Include, SQL Injection, Cross site scripting ваются проекты, позволяющие защи- де расширения, которое фактически
(XSS) и других атаках, направлен- титься от атак глобально, независимо и осуществляет всю основную защи-
ных на веб-сервисы. Несмотря на то от присутствия ошибок на сайте. Один ту, при необходимости его очень прос-
что об этих технологиях и методах за- из вариантов – защита сервиса с по- то доустановить в уже рабочую систе-
щиты рассказано многое, взломы все мощью файервола веб-приложений [3], му, без полной пересборки PHP. Здесь
равно продолжаются. разработчики Suhosin пошли несколь- возможности уже гораздо шире (пол-
Так, по статистике Web Application ко иным путем. ный список приведен на сайте проек-
Security Consortium [1] количество та http://www.hardened-php.net/suhosin/
взломов веб-серверов в 2005 году Проекты Hardening-Patch a_feature_list.html):
по сравнению с 2004 годом увеличи- и Suhosin  добавлены функции sha256 (),
лось в три раза. Это, конечно, не са- Это два проекта от одного разработчи- sha256_file() и поддержка blowfish
мая точная и полная статистика, зато ка, имеющие сходную задачу, только для всех платформ;
в ней фигурируют только крупные про- реализованы по-разному. Задача – за-  кодирование Cookies и данных сес-
екты, защитой которых занимаются от- щита серверов и пользователей от це- сии;
нюдь не новички. Среди основных при- лого ряда известных проблем в прило-  запрещение вставки URL, закач-
чин такой негативной тенденции назы- жениях и ядре PHP. Кроме того, с помо- ки файлов и доступа к произволь-
вают широкую доступность инструмен- щью Hardening-Patch или Suhosin мож- ным файлам, верификация загру-
тов, необходимых для проведения ата- но защититься от неизвестных уязви- женных файлов через внешний
ки, и недостаточное внимание со сто- мостей. При этом Hardening-Patch ре- скрипт, запрет загрузки исполня-
роны разработчиков сайтов к вопро- ализован в виде патча к PHP и может емых файлов, удаление двоичных
сам безопасности. быть использован только после пол- данных из загружаемого файла;
Выходов из этой ситуации может ной пересборки PHP. В Suhosin вхо-  отключение функции eval(), запуск
быть несколько. Это и аудит кода, за- дят две независимые части, которые приложений с использованием
казанный у сторонней организации, могут использоваться как раздельно, eval() с применением белого и чер-
автоматическое тестирование с по- так и в совместно. ного списков;

74
безопасность
 принудительная установка максимальной глубины ре- $ sudo apt-get install bison flex libxml2 libxml2-dev
курсии;
 поддержка виртуальных узлов и каталогов, настраива- После этих операций PHP должен работать корректно
емых через черный и белый списки; и без ошибок. Если планируется, скомпилировать расшире-
 защита от прерывания HTTP-заголовка (HTTP Response ние вместе с PHP, то распаковываем архив suhosin-0.9.5.tgz
Splitting); и копируем все файлы из каталога src в ext/suhosin.
 з а щ и т а гл о б а л ь н ы х п е р е м е н н ы х о т ex t r a c t и Далее обычная сборка php, при конфигурировании
import_request_vars, а также от скриптов, манипулиру- не забываем включить опцию --enable-suhosin. Собираем
ющих memory_limit; модуль расширения:
 защита от длинных и неправильных идентификаторов
сессии; $ cd suhosin-0.9.5
$ phpize
 фильтрование ASCII-символов;
Configuring for:
 игнорирование переменных GET, POST, COOKIE с це-
PHP Api Version: 20041225
лым рядом параметров; Zend Module Api No: 20050922
 установка лимитов ряду переменных REQUEST. Zend Extension Api No: 220051025

$ ./configure
В случае нарушения установленных правил возможна
блокировка переменных, отсылка определенного HTTP-ко- По умолчанию скомпилированный модуль будет
да ответа, перенаправление браузера пользователя, выпол- установлен в каталог, в котором он компилируется,
нение другого PHP-скрипта. Все события заносятся в жур- что не очень удобно. Поэтому лучше использовать дирек-
налы, для чего может использоваться syslog, свой модуль тиву --prefix=/usr/lib.
или внешний скрипт. В журнале появится запись об IP-ад-
ресе атакующего, а также файл и номер строки, которые $ make
$ sudo make install
были использованы для атаки.
Версии Hardening-Patch и Suhosin-Patch привязаны к со-
ответствующей версии PHP, последние версии расширения Настройка Suhosin
Suhosin совместимы практически со всеми версиями PHP. Все настройки Suhosin производятся в файле php.ini. Сле-
Судя по ответу в FAQ, размещенному на сайте, Suhosin дует учесть, что патч поддерживает только опции ре-
сейчас продвигается на замену Hardening-Patch, поэто- гистрации. Первая запись, которая должна быть обя-
му его и рекомендуется использовать. Распространяются зательно помещена в файл, – это подключение модуля
эти два проекта под PHP License, version 3.01. suhosin.so (сам модуль должен быть виден переменной
LD_RUN_PATH):
Установка Suhosin
Установка Suhosin состоит из двух этапов: наложение пат- extension=suhosin.so
ча на PHP с последующей его пересборкой и компиляция
модуля расширения. Хотя возможна и сборка со встроен- В таблице 1 приведены основные опции Suhosin. Пос-
ным расширением. ле установки Suhosin будет работать с настройками по
В репозитарии Ubuntu 6.06 на момент написания статьи умолчанию, которые показаны во втором столбце табли-
была доступна версия php 5.12, для которой не имеется пат- цы. Константы могут использоваться только совместно
ча Suhosin. Поэтому будем устанавливать из исходных тек- с Suhosin-патчем, иначе придется работать с их числовыми
стов. Скачиваем PHP, патч suhosin под используемую вер- аналогами, для некоторых значений они приведены в скоб-
сию PHP и расширение. Все это распаковываем, наклады- ках. Остальные вы найдете в документации проекта.
ваем патч и компилируем. На сайте проекта приведен тест производительности,
замеренный с помощью скрипта bench.php [6]. При этом
$ tar -xvjf php-5.1.6.tar.bz2 использовался компьютер с процессором Pentium 4 с час-
$ gunzip suhosin-patch-5.1.6-0.9.5.patch.gz
$ cd php-5.1.6 тотой 2,80 Ггц и оперативной памятью 512 Мб. Замеры по-
$ patch -p 1 -i ../suhosin-patch-5.1.6-0.9.5.patch казали, что система, использующая патч и модуль Suhosin
$ make
$ make test на 8,84 % работает медленнее. На компьютере с процес-
$ sudo make install сором 2 Ггц получилась приблизительно такая же цифра.
Большую часть ресурсов забирает патч, модуль несильно
Хотя, чтобы не было проблем с зависимостями, нагружает систему. Но bench.php использует рекурсивную
в Ubuntu перед конфигурированием рекомендуется дать функцию с большим количеством вызовов, что в рабочих
команду: скриптах практически не встречается. Поэтому в реальной
системе присутствие Suhosin будет незаметно.
$ sudo apt-get build-dep php5 Suhosin является довольно интересным решением,
позволяющим защитить веб-сервис, использующий PHP,
и установить все недостающие пакеты (хотя большая от большинства известных и неизвестных угроз. В отли-
их часть в конкретном случае явно лишняя). Минимальный чие от mod_security, где администратор должен постоян-
набор для Ubuntu устанавливается так: но отслеживать события и подправлять при необходимос-

№11, ноябрь 2006 75


безопасность
Таблица 1. Опции Suhosin
Значение
Опция Возможные значения Пояснение
по умолчанию
Опции протоколирования
S_MEMORY, S_MISC,
S_VARS, S_FILES,
Указывает, какие классы тревог регистрируются в syslog. Вне зависимости
suhosin.log.syslog S_ALL (511) S_INCLUDE, S_SQL,
от настроек S_MEMORY регистрируется всегда
S_EXECUTOR, S_MAIL,
S_SESSION, S_ALL
LOG_KERN, LOG_USER,
LOG_MAIL, LOG_DAEMON,
LOG_AUTH, LOG_SYSLOG,
LOG_LPR, LOG_NEWS,
suhosin.log.syslog.facility LOG_USER (9) Указывает на компонент, который будет заносить сообщения в syslog
LOG_UUCP, LOG_CRON,
LOG_AUTHPRIV,
LOG_LOCAL0 ...
LOG_LOCAL7
LOG_EMERG,
LOG_ALERT, LOG_CRIT,
LOG_WARNING,
suhosin.log.syslog.priority LOG_ALERT (1) Приоритет сообщения
LOG_NOTICE,
LOG_INFO, LOG_DEBUG,
LOG_ERR
suhosin.log.sapi S_ALL – Определяет, какие классы тревог регистрируются через SAPI
Какие классы тревог будут регистрироваться через внешний скрипт,
suhosin.log.script 0 – S_MEMORY не может регистрироваться, так как его появление означает,
что процесс, возможно, в нестабильном состоянии
Какие классы тревог будут регистрироваться через PHP-скрипт, S_MEMORY
suhosin.log.phpscript – –
также не может регистрироваться
Полный путь к внешнему скрипту. Скрипту будет передано два параметра.
suhosin.log.script.name – –
Первый – класс тревоги в буквенной нотации, второй – сообщение
Полный путь к внешнему php-скрипту. Ему будет передано два параметра:
suhosin.log.phpscript.name – – SUHOSIN_ERRORCLASS и SUHOSIN_ERROR, назначение которых
аналогично предыдущему
Обычно IP-адрес атакующего извлекается из переменной REMOTE_ADDR,
suhosin.log.use-x-forwarded-for 0 (отключено) – включение этой опции позволит использовать HTTP-заголовок X-Forwarded-For
(например, используется прокси)
Опции исполнения
Задает максимально разрешенную глубину стека, после чего выполнение
suhosin.executor.max_depth 0 (отключено) –
скрипта будет остановлено
suhosin.executor.include.max_traversal 0 – Определяет, сколько знаков ../ в запросе будет расценено как атака
Разделенный запятой список разрешенных или запрещенных URL, которые
suhosin.executor.include.whitelist – – можно включить в скрипт. Если не указан белый список, используется только
черный, если не указаны оба, то вставка URL запрещена
suhosin.executor.include.blacklist – –
Список разрешенных или запрещенных для вызова функций. Если белый
suhosin.executor.func.whitelist – –
список пуст, анализируется черный, если пусты оба, то функции запрещены
suhosin.executor.func.blacklist –
Список функций, разделенных запятой, которые разрешено или запрещено
suhosin.executor.eval.whitelist – – запускать посредством eval(). Если белый список пуст, анализируется черный,
если пусты оба, то вызов функции через eval() запрещено
suhosin.executor.eval.blacklist – –
Глобальное отключение использования eval(). В журнале будут отображены
suhosin.executor.disable_eval 0 – все нарушения этого правила, поэтому можно отследить все случаи
использования eval()
Модификатор /e внутри функции preg_replace() позволяет выполнять код,
suhosin.executor.disable_emodifier 0 – разработчики рекомендуют отключить ее использование и применять
preg_replace_callback()
Дополнительные опции
Очень полезная опция, позволяет переводить систему в режим регистрации
suhosin.simulation 0 – нарушений, то есть создав правила, вы можете некоторое время только
регистрировать нарушения, чтобы затем комплексно оценить работу скриптов
Включает защиту функции mail(). 0 – отключена, 1 – контроль Subject:, To:,
suhosin.mail.protect 0 0, 1, 2
2 – дополнительно To:, CC:, BCC:
Управление изменением memory_limit, при 0 – изменение запрещено, любое
suhosin.memory_limit 0 – число показывает предел в Мб, при запросе скриптом большего значения
его выполнение будет остановлено

76
безопасность
Таблица 1. Опции Suhosin (продолжение)
Значение
Опция Возможные значения Пояснение
по умолчанию
Опции прозрачного шифрования
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, от которых будет зависить ключ шифрования
Шифрование Cookie. Значение остальных опций suhosin.cookie.cryptkey,
suhosin.cookie.encrypt 1 – suhosin.cookie.cryptua, suhosin.cookie.cryptdocroot, suhosin.cookie.cryptraddr
аналогично
Опции фильтрации
Определяет реакцию Suhosin на нарушение фильтров. По умолчанию
переменная блокируется, 402 – останавливает скрипт и возвращает
suhosin.filter.action – – код ответа 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 в переменных не разрешены
Максимальная глубина массива, зарегистрированного через URL Значение
остальных опций (suhosin.get.max_array_index_length, suhosin.get.max_name_length,
suhosin.get.max_array_depth 50 –
suhosin.get.max_totalname_length, suhosin.get.max_value_length, suhosin.get.max_vars,
suhosin.get.disallow_nul) сопоставимы с предыдущими
Максимальная глубина массива, зарегистрированного через POST.
Значение остальных опций (suhosin.post.max_array_index_length,
suhosin.post.max_array_depth 100 – suhosin.post.max_name_length, suhosin.post.max_totalname_length,
suhosin.post.max_value_length, suhosin.post.max_vars, suhosin.post.disallow_nul)
сопоставимы с предыдущими
Максимальная глубина массива, зарегистрированного через все доступные
методы URL, GET , POST или COOKIE. Может быть индивидуально
переопределена предыдущими опциями. Также доступны параметры
suhosin.request.max_array_depth 100 –
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 –
указанного значения будет создан новый идентификатор

ти правила. В Suhosin достаточно лишь оптимально уста- 3. Яремчук С. Как повысить безопасность веб-приложений.
новить параметры и в дальнейшем система не потребует //Системный администратор, № 2, 2006 г. – C. 60-66.
вмешательства. 4. Сайт проекта Hardening-Patch – http://www.hardened-php.net/hphp.
5. Сайт проекта Suhosin – http://www.hardened-php.net/suhosin.
1. Web Hacking Statistics – http://www.webappsec.org/projects/whid/ 6. Скрипт bench.php – http://cvs.php.net/viewvc.cgi/ZendEngine2/
statistics.shtml. bench.php?content-type=text/plain&view=co.
2. Яремчук С. Определяем уязвимость веб-сервиса с помощью 7. Документация по настройке Hardening-Patch (опции в боль-
Acunetix Web Vulnerability Scanner. //Системный администра- шинстве схожи с Suhosin) – http://www.hardened-php.net/
тор, № 9, 2005 г. – C. 68-69. hardening-patch-0.4.3-manual-alpha.pdf.

№11, ноябрь 2006 77


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

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

Андрей Шитов
Perl готовится сделать новый рывок и оставить конкурентов позади. До круглой цифры
счетчику версий осталось совсем немного, всего 0.1.2 версии.

П
ро Perl 6 впервые начали гово- язык от устаревших конструкций (на- тя так будут поступать разве что истин-
рить в 2000 году, когда было пример, GLOB), а с другой – добавить ные энтузиасты), а уж познакомиться
принято решение переписать «современности» (например, вклю- с языком просто необходимо.
существующий язык с чистого листа. чив в язык полноценную поддержку Общее направление задал со-
Исторически сложилось так, что фор- классов). здатель Perl Ларри Уолл: в статьях
мального стандарта никогда не су- под общим названием «Откровения»
ществовало. Стандартом пятой вер- Часть 1. До языка (Apocalypses) описано, каким он видит
сии фактически был язык, воплощен- К сожалению для разработчиков будущий язык.
ный в интерпретаторе. Желание иметь и к счастью для стандарта, после шес- Позже появился еще один цикл
четкие правила – одна из предпосылок ти лет еще не существует ни оконча- «Толкования» (Exegeses), в которых
к созданию нового языка. тельных правил, ни полноценного ком- Дамиан Конвей поясняет «Открове-
Кроме того, требовались измене- пилятора. Тем не менее, уже сегодня ния» на примерах. И, наконец, сущест-
ния, чтобы, с одной стороны, очистить язык можно применять на практике (хо- вует начатый Эллисон Рэндал набор

78
программирование
«Конспектов» (Synopses); они по су-
ти являются спецификацией, от кото-
рой отталкиваются разработчики ком-
пиляторов.
Одна из разработчиков (да, это жен-
щина!) нового компилятора Одри Танг
(Audrey Tang) изобразила на услов-
ном графике эволюцию Perl 6. Раз-
витие временами напоминает хаос,
тем не менее, надежда увидеть рабо-
тающий Perl 6 есть.

Perl 6 и Perl 5
Синтаксис пятой и шестой версий не
совместим друг с другом. Поэтому,
чтобы начать изучать Perl 6, не обя- Условная кривая развития Perl 6. (Рисунок Одри Танг)
зательно предварительно осваивать
Perl 5. Однако программистам, зна- Новый цикл разработки программ семблер (Parrot assembler, PASM), кото-
комым с пятой версией, будет проще на Perl 6 дает сразу два преимущест- рый содержит набор инструкций, очень
понять многие конструкции, которые ва. Во-первых, во время выполнения похожих на те, которые применяются
в новую версию либо полностью пе- теперь не требуется интерпретировать в обычном ассемблере для физичес-
решли из предыдущей, либо измени- исходный код, вместо этого виртуаль- ких RISC-процессоров. Все операции
лись только косметически. ная машина выполняет предваритель- выполняются с операндами в вирту-
Perl 5 и Perl 6 не просто разные но скомпилированный байт-код (идео- альных регистрах разных типов: напри-
версии одного языка. Правильнее бу- логия Java в чистом виде). Во-вто- мер, в одних регистрах хранятся целые
дет сказать, что это два разных язы- рых, появилась возможность созда- числа, в других строки. Один из типов
ка, объединенных одной идеей. Ны- вать программы из частей на разных необычен (как и его название Parrot
нешние компиляторы не способны языках, для которых созданы транс- Magic Cookie, PMC) и предназначен
выполнить программу другой версии. ляторы в байт-код (идеология .NET). специально для поддержки объектно-
Тем не менее изначально предполага- На первый взгляд может показаться, ориентированного программирования.
лось, что рабочая версия нового ком- что не было смысла создавать собс- Байт-код сохранялся в файле с расши-
пилятора станет универсальной. твенный формат байт-кода, а восполь- рением .pbc (pre-compiled bytecode).
Кстати, предыдущий «апгрейд» зоваться, например, правилами .NET. Поскольку число регистров огра-
языка с четвертой версии на пятую то- Но основные языки, с которыми рабо- ниченно, программировать непосредс-
же требовал от программистов допол- тает .NET, – языки с сильной типиза- твенно на ассемблере PASM неудобно
нительных усилий из-за некоторых не- цией. Байт-код же, используемый для (конечно, прежде всего разработчикам
совместимостей. Perl 6, сконструирован с расчетом на компиляторов), и появились сопутс-
динамические языки без фиксирован- твующий язык IMC (Intermediate Code)
Архитектура ных типов данных, подобные Perl, на- и компилятор IMCC (Intermediate Code
«Прошлый» Perl всегда был интерпре- пример, Python и Ruby. Compier). IMC представляет собой над-
тируемым языком. Это часто дава- Наличие промежуточного байт-ко- стройку над ассемблером и разреша-
ло повод противникам говорить о не- да не отменяет преимущества новой ет пользоваться произвольными пе-
возможности применять язык в кри- версии как традиционного скрипто- ременными, поэтому нехватка регис-
тических по времени приложениях. вого языка. Программу всегда мож- тров перестает ощущаться. Сегодня
Наличие mod_perl и компиляторов но модифицировать на ходу, выпол- вместо IMC используется PIR (Parrot
perl2exe не спасает положения, пос- няя ее с командной строки и не заду- Intermediate Representation).
кольку, например, для программиро- мываясь о том, что происходит внутри Ponie (еще одна тупиковая ветвь
вания под mod_perl требуется учи- компилятора. в развитии Perl 6) – это попытка со-
тывать специфические ограничения, здать компилятор в байт-код для про-
а perl2exe редко способен сгенериро- Parrot, PASM, IMC, PBC, Ponie, грамм, написанных на Perl 5.
вать работающий код для программы, PIR, PUGS, PIL, Perl6::* Библиотека CPAN содержит набор
более сложной, чем «Hello, World!». История развития за последние шесть модулей Perl6::*, которые были напи-
В Perl 6 с самого начало было ре- лет, даже несмотря на наличие генпла- саны, чтобы поэкспериментировать
шено изменить традиционный подход на, испещрена названиями и аббре- с синтаксисом шестой версии, имея
и применить схему «программа – ком- виатурами; часть из них уже потеряли компилятор пятой. Пользоваться эти-
пилятор – байт-код – виртуальная ма- свою актуальность. ми модулями сегодня особой необхо-
шина». Эта схема не новая, и к 2000 го- Parrot – это название упомянутой димости нет.
ду уже работала с языком Java, а чуть выше виртуальной машины. На ранней В состав Parrot входит около де-
позже в технологии .NET. стадии использовался собственный ас- сятка компиляторов, создающих байт-

№11, ноябрь 2006 79


программирование
ходных кодов без ошибок (за пару часов), но затем при ус-
тановке Pugs конфигуратор сообщил, что не хватает моду-
ля mtl в составе GHC:
*** Could not load the "mtl" package in your GHC installation.

Впрочем, далее в сообщении об ошибке следует разъ-


яснение о том, что дополнительно необходимо поставить
Приветствие, выводимое при запуске Pugs комплект библиотек extralibs.
Итого, при сборке компилятора Haskell из исходных ко-
код из программ на разных языках (иногда экзотических дов нужны два файла, в данном случае ghc-6.6-src.tar.bz2
типа Ook!), в том числе экспериментальный компилятор и ghc-6.6-src-extralibs.tar.bz2. Они находятся на том же сай-
Perl 6. те в разделе Source Distribution. Распаковав их в общий ка-
Компилятор в составе Parrot более не развивается, ему талог и заново собрав GHC (еще два часа), удалось полу-
на смену пришел проект Pugs (Perl 6 User’s Golfing System), чить все необходимое для сборки Pugs.
которым занимается Одри Танг. Pugs тоже внес свой вклад
в список сокращений, например, создав собственный фор- Часть 2. Язык
мат PIL (Pugs Intermediate Language). Самостоятельное изучение Perl 6 – сегодня занятие, боль-
ше похожее на исследовательскую работу. Теоретичес-
Установка Perl 6 кие источники знаний подборка Synopses, практичес-
Разбираться в месиве форматов необязательно, достаточ- кие каталоги с примерами, входящими в поставку Parrot
но установить последнюю версию Pugs. Правда, радуж- (languages/perl6/examples) и Pugs (examples/).
ная картина немного меркнет, когда узнаешь, что Pugs на- В оставшейся части статьи бегло рассмотрены основ-
писан на языке Haskell, и для сборки необходим работаю- ные моменты Perl 6. Предполагаю, что вы знакомы с пятой
щий компилятор. (А тем, кто захочет попробовать в дейс- версией, в этом случае чувство новизны языка ощущает-
твии новые регулярные выражения, возможно, потребует- ся сильнее.
ся и установленный Parrot.) Компилятор доступен на сай- Все приведенные примеры кода проверены в Pugs 6.2.13
те www.haskell.org/ghc как в исходных кодах, так и в бинар- на двух системах: под Windows и Linux. Запуск программ
ных дистрибутивах для некоторых платформ. Самостоя- на исполнение аналогичен тому, как это происходит в Perl 5.
тельная сборка компилятора GHC происходит крайне дол- Если код записан в файле, передайте его аргументом
го, хотя и гладко. при вызове pugs:
Итак, если для вашей платформы не нашлось бинар-
ной версии Pugs, необходимо последовательно выпол- > pugs programme.p6
нить две процесса: установить компилятор GHC, после че-
го собрать Pugs. Короткие однострочные программы допустимо записы-
Ссылки на исходные и бинарные коды находятся на сай- вать непосредственно в командной строке:
те проекта www.pugscode.org.
Процесс сборки из исходных кодов стандартный для мо- > pugs –e'print "This is Perl 6"'
дулей Perl:
Кстати, для запуска pugs удобно сделать псевдоним
perl Makefile.PL p6 или perl6.
make
make install Наконец, на платформе UNIX в файле с программой
можно указать путь к компилятору:
Примечание: исходный код Pugs размещен на сайте
CPAN, но он не имеет отношения к модулям Perl6::*, о ко- # !/usr/local/bin/pugs
торых говорилось в предыдущем разделе.
Во время подготовки статьи для тестирования программ и сделать файл исполняемым:
я пользовался двумя версиями Pugs под Windows XP SP2
и Linux Red Hat 9. На каждой системе установлены GHC 6.6, > chmod 0755 programme.p6
pugs –e'print "This is Perl 6"'
> ./programme.p6
Parrot 0.4.6, Pugs 6.2.13 и Perl 5.8.8.
Кстати, при установке Pugs просит самую последнюю К сожалению, объем журнальной статьи не позволяет
версию компилятора GHC, сообщая, что с более ранней описать все детали новых возможностей языка. Новшеств
скомпилировать-то пока удастся, но скорость работы бу- много, и они находятся на самых разных уровнях от спосо-
дет низкой, а в будущем старая версия GHC вообще не по- ба записи скобок при вызове функции до идеологии объ-
дойдет. ектно-ориентированного программирования. Хотя я отоб-
Компилятор Haskell под Windows установлен из msi-фай- рал для обзора наиболее интересные изменения, кому-то
ла (необходим один дистрибутив размером 37 Мб, находя- все равно может показаться, что подборка несколько субъ-
щийся на официальном сайте). ективна.
На второй системе получить желаемый набор удалось Все приведенные примеры содержатся в архиве, доступ-
не сразу. В первый раз компилятор GHC собрался из ис- ном по адресу: http://perl6.ru/publish/samag/code.zip.

80
программирование
Вывод на печать для списков и % – для хешей. Однако теперь при обраще-
Прежде чем рассматривать особенности Perl 6, необходимо нии к отдельным элементам массивов и хешей (а отдельные
познакомиться с механизмом вывода на печать, поскольку элементы чаще всего бывают скалярами) сигил изменять
он потребуется в каждом примере. не требуется. Например, обращение к элементу списка вы-
Стандартная функция print() по-прежнему доступна, глядит как @array[5], в то время как раньше приходилось
но в Perl 6 появился метод say(), действие которого ана- писать $array[5]. Иными словами, переменная всегда со-
логично работе функции print(), но всегда завершается пе- храняет свой префикс-сигил.
реводом строки. Новый способ вывода особенно удобен
в отладочных сценариях, когда вписывать переводы стро- # variables.p6
my $string = 'abcde';
ки вручную утомительно. my @array = ('alpha', 'beta', 'gamma');
my %hash = {'alpha' => 'A', 'beta' => 'B', 'gamma' => 'C'};
# say.p6 say $string; # abcde
say "This is Perl 6"; say @array[1]; # beta
say 123; say %hash{'gamma'}; # C
say(8 * 9);

Я не случайно назвал say() методом, поскольку им мож- Связывание переменных


но пользоваться не только как функцией, но и как методом Связывание (binding), или создание ссылок, осуществля-
объекта, например: ют операторы «:=» и «::=». Они создают синоним перемен-
ной, указанной справа от оператора. Любое обращение
# say-method.p6 к синониму эквивалентно обращению к оригинальной пе-
"This is Perl 6".say;
123.say; ременной:
(8 * 9).say();
# binding.p6
my $a = 123;
Вторая программа напечатает то же самое. Метод say() my $b := $a;
доступен для любых встроенных типов данных, в том чис- $b = 456;
say $a; # 456
ле для чисел. Обратите внимание, что скобки после имени
метода необязательны. Однако перед открывающей скоб- Хотя в последней строке происходит обращение к пере-
кой не должно быть пробела: менной $a, на экране появится значение 456, которое при-
своено через ссылку $b.
'error'.say (); Различие между формами с одним и двумя двоеточи-
ями заключается в моменте, когда выполняется связыва-
Такая запись приведет к ошибке: ние. В первом случае оно происходит на этапе выполнения
программы, во втором – на этапе компиляции.
$ p6 say-method.p6 Это также сказывается и на размере промежуточно-
*** го кода.
Unexpected "();" Например, если приведенную программу оттранслиро-
expecting comment, operator, statement modifier,
";" or end of input at say-method.p6 вать в промежуточный PIR-файл (указав опцию -CPIR), по-
line 7, column 13 лучится код длиной 91 049 байт, а та же программа с опе-
ратором «::=» окажется чуть короче (90 897 байт). Не сто-
Комментарии оформляются так же, как и в Perl 5, сим- ит пугаться таких размеров промежуточного кода, потому
волом #. что в нем собрано много определений операторов, которые
данной программой не используются.
Поддержка юникода
Исходный код программ на Perl 6 по умолчанию считается Конкатенация строк
написанным в юникоде. Поэтому можно смело пользовать- «Складывание» строк теперь выполняет не оператор «точ-
ся любыми символами из нелатинских кодировок: ка», а тильда:

# unicode.p6 # concatenation.p6
say "Превед!"; my $before = 'This is';
say "β-sitostérol"; my $after = 'Perl 6.';
say " !" say $before ~ ' ' ~ $after;

Если выполнить эту программу с командной строки Одинарные и двойные кавычки в строках имеют тот же
в стандартной оболочке, символы отобразятся неправиль- смысл, что и в Perl 5.
но; чтобы убедиться в работоспособности, сохраните вы-
вод в файл. Операторы «//» и «//=»
Бинарный оператор «//» (не путайте с началом одностроч-
Переменные ного комментария) принимает два операнда и возвраща-
В Perl 6 по-прежнему применяются сигилы (sigils) для обоз- ет первый из них, если он определен, и второй, если не оп-
начения типа структуры переменной: $ – для скаляров, @ – ределен первый.

№11, ноябрь 2006 81


программирование
# double-slash.p6 Еще раз отмечу, что при вызове функции скобки нужно
my $a = "a";
my $b = "b"; ставить вплотную к имени, иначе произойдет ошибка:
my $c; Extra space found after &callme (...) –
say $b // $a; # b did you mean &callme(...) instead?
say $c // $a; # a

При первом вызове метод say() получает значение пе- В объявлении наличие или отсутствие пробела не име-
ременной $b (поскольку она определена), а второй $a (по- ет значения.
тому что значение у переменной $c отсутствует). Одновременно с именами задаются и структурные ти-
Оператор «//=» выполняет то же действие, но над единс- пы формальных параметров (это было возможно и ранее,
твенной переменной: вызов «$a //= $b» равнозначен но не так наглядно).
«$a = $a // $b». Параметры функции могут содержать модификаторы
(traits), изменяющие их поведение. В частности, модифи-
Интервальные условия катор is rw дает возможность перезаписывать передан-
В Perl 6 операторы сравнения допускается объединять в це- ный аргумент:
почку, что позволяет создавать компактные записи, напри-
мер, для проверки попадания значения переменной в за- # sub-rw.p6
my $string = "before";
данный интервал: callme($string);
say $string; # after
sub callme ($value is rw)
# interval.p6 {
my $x = 5; $value = "after";
say "yes" if 0 < $x < 10; }
if 0 < $x < 10 {say "yes"}
Попытка изменить аргумент без такого модификатора
Кстати, из второго блока сравнений видно, что теперь будет пресечена компилятором:
необязательно использовать скобки в условии.
*** Can't modify constant item: VRef <Scalar:0x1c6cfc4>
at sub-rw.p6 line 9, column 9-25
Контексты
Perl 6 позволяет вручную управлять контекстом, в кото- Чтобы произвольно изменять значение, требуется ука-
ром происходит работа с переменной; в некотором смыс- зать модификатор is copy.
ле это подобно преобразованию типов. При вызове функции по умолчанию не происходит «сво-
Контекст устанавливается с помощью унарного опе- рачивания» всех переменных в общий массив. Например,
ратора: теперь удается безболезненно передать в функцию два мас-
сива, нигде явно не указывая их длину:
# contexts.p6
my @array = (5..10);
# sub-slurp.p6
# Строковый контекст my @odd = (1, 3, 5);
say ~@array; # 5 6 7 8 9 10 my @even = (2, 4, 6);
view(@odd, @even);
# Числовой контекст (возвращается размер массива) sub view (@a, @b)
say int @array; # 6 {
say +@array; # 6 say @a;
say "&";
# Два модификатора контекста say @b;
say ~ hash @array; # напечатает содержимое в два столбца }

my $value = 100;
Необязательные параметры (которые должны идти пос-
# Булевый контекст ледними в списке) помечают вопросительным знаком. До-
say ?$value; # 1 (то есть истина)
полнительно можно указать значение по умолчанию:

Функции # sub-optional.p6
callme(1, 2); # 1, 2
Ключевое слово для объявления функции sub не измени- callme(3); # 3, 4
лось. А механизм передачи параметров стал нагляднее. На- sub callme ($a, $b? = 4)
{
пример, при объявлении функции возможно указать име- say "$a, $b";
нованные аргументы. }
При вызове нужно либо соблюдать порядок объявле-
ния, либо явно указывать имена. И наконец Perl 6 позволяет объявлять анонимные функ-
ции с помощью стрелки:
# sub-args.p6
# sub-anonymous.p6
callme(10, 20);
callme(second => 7, first => 8); my $anonymous = -> ($value)
sub callme ($first, $second) {
{ say $value * 2;
say "\$first = $first, \$second = $second"; }
} $anonymous(10); # 20

82
программирование
В этом примере переменной $anonymous присвоен ука- # given.p6
my $x = 'y';
затель на безымянную функцию, после чего происходит вы- given ($x)
зов посредством этого указателя. {
when "a" {say 'First letter'}
when "b" {say 'Second letter'}
Перегрузка функций default {say "Is '$x'"}
}
Ключевое слово multi разрешает перегружать функции,
то есть создавать несколько функций с одинаковым назва- Блоки when могут содержать и более сложные конс-
нием, но разным типом или числом аргументов. трукции, например, сопоставление с регулярным выра-
жением:
# sub-reload.p6
multi sub action ($scalar) given ($x)
{ {
say "scalar"; when /<[a-z]>/ {say 'isalpha'}
} }
multi sub action ($scalar, $scalar)
{
say "two scalars";
} Программа напечатает isaplha, поскольку буква «y» сов-
multi sub action (@array) падает с символьным классом <[a-z]> в регулярном выра-
{
say "array"; жении.
}
action(10); # scalar
action(10, 11); # two scalars Новые регулярные выражения
my @arr = (1, 2); В документации на Perl 6 большой раздел посвящен ново-
action(@arr); # array
му синтаксису (не будет ошибкой сказать – новой идеоло-
гии) регулярных выражений. Кроме правил (regexps) те-
Перегрузка операторов перь существуют грамматики (grammars), их объединяю-
Возможность перегружать не только функции, но и опера- щие. Например, ранняя версия компилятора Perl 6, входя-
торы явно придется по вкусу любителям C++. Perl 6 позво- щая в состав Parrot, при первом запуске создавала файл
ляет с помощью ключевых слов prefix, infix и postfix опре- Perl6grammar.pm, описывающий синтаксис Perl 6, записан-
делять собственную семантику предопределенных опера- ный в виде грамматики Perl 6. Подробное рассмотрение но-
торов либо создавать новые: вых регулярных выражений требует отдельной статьи.

# xfix.p6 Классы и роли


multi infix:<+> ($a, $b) Классы и роли – одно из самых существенных нововве-
{ дений в Perl 6. Формально поддержка ООП была и в Perl
return $a - $b;
} 5, но «классы» являлись просто хешами с некоторыми до-
say 10 + 20; # -10 полнительными возможностями. Механизмы ООП в Perl 6
sub postfix:<@> ($power)
{ проще для понимания и образуют намного более стройную
2 ** $power; модель. Чтобы научиться применять классы, программис-
}
say 8@; # 256 там, знакомым с другими объектными языками, достаточ-
но познакомиться с синтаксисом, присущим Perl 6. Для оп-
ределения класса служит ключевое слово «class»:
gather и take
В Perl 6 появилась удобная пара gather/take, которая по- # class.p6
class Alphabet
могает избежать вспомогательного массива, когда нуж- {
но сохранять промежуточные результаты в циклических }
операциях.
Объекты класса создаются с помощью оператора new:
# gather.p6
say gather my $abc = new Alphabet;
{
for 1..5 -> $c
{
take $c; Члены-данные объявляют, используя has. Точка перед
} именем является признаком того, что переменная объяв-
}
ляется как открытая (public в общепринятой терминологии);
Каждый вызов take добавляет новое значение в мас- отсутствие точки делает ее закрытой (private):
сив, возвращаемый блоком gather, и программа напечата-
ет строку 12345. (Кстати, стрелка –> здесь является не чем class Alphabet
{
иным, как началом анонимной функции.) has $.Name;
has $Length;
}
given, when и default my $abc = new Alphabet;
Ключевые слова given, when и default предназначены для ор- $abc.Name = 'Latin'; # синтаксически верно
#$abc.Length = 26; # ошибка
ганизации конструкции типа switch в C:

№11, ноябрь 2006 83


программирование
При создании объекта возможно инициализировать Perl 6 на бумаге
члены-данные: Книг, посвященных Perl 6, пока исключительно мало.
Первая Perl 6 Essentials выпущена издательством
my $abc = Alphabet.new(Name => 'Latin', length => 26); O’Reilly летом 2003 года (ISBN 0-596-00499-0) и переизда-
say $abc.Name;
на через год под измененным названием Perl 6 and Parrot
Классы могут содержать методы; они так и объявляют- Essentials (ISBN 0-596-00737-X). Второе издание переведе-
ся с ключевым словом «method»: но на русский язык: «Perl 6 и Parrot: справочник». М.: «Ку-
диц-образ», 2005. ISBN 5-9579-0086-9. Обе книги написа-
class Alphabet ны Э. Рэндалом, Д. Сугальски и Л. Тёчем.
{
has $Name; Во время издания этих книг разговор о Perl 6 не мог
has $Length; обойтись без более или менее детального описания Parrot.
method Info
{ Поэтому значительная часть книги посвящена языку ас-
return "Aplhabet '$.Name' contains ↵ семблера Parrot.
$.Length letters.";
} К сожалению, по этим книгам нельзя научиться програм-
} мировать на Perl 6, поскольку описанные языковые конс-
трукции либо остались нереализованными, либо радикаль-
Обратите внимание: хотя теперь обе переменные объ- но изменились. Эти книги теперь можно назвать «истори-
явлены закрытыми, при обращении к ним из методов клас- ческими» или «идеологическими».
са все равно необходима точка: $.Name. Конструктор и де- В 2005 году вышла в свет книга Скота Вальтерса Perl 6
структор – это методы с именами BUILD и DESTROY. Now. The Core Ideas Illustrated with Perl 5. Примеры кода час-
Классы можно наследовать, причем в Perl 6 допусти- то используют модули Perl6::* и, возможно, не будут рабо-
мо множественное наследование. Чтобы создать произ- тать в «настоящем Perl 6» в том виде, в каком они опуб-
водный класс, нужно указать базовый после ключевого ликованы (впрочем, от этого не застрахованы и примеры
слова «is»: из моей статьи). Примеры кода из книги доступны на сай-
те www.perl6now.com.
class Characters is Alphabet
{
} Perl 6 в Интернете
my $chars = new Characters; На русском языке:
say $chars.Info();
1. http://perl6.ru – блог, в котором я описываю процесс ос-
Разрешено и множественное наследование: воения Perl 6. Первая запись на этом сайте появилась
в 2003 году.
class Unique; 2. http://real.perl6.ru – первый в России сайт, работающий
class Characters is Alphabet is Unique
{ под управлением Perl 6. Здесь есть несколько крошеч-
} ных примеров того, как можно написать CGI-приложе-
ние на Perl 6.
В 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, ко-
словом «does» вместо «is». торый является отправной точкой. Здесь же размещены
основные документы, описывающие будущую структу-
role HaveName ру языка: Apocalypses, Exegeses и Synopses.
{
has $.Name; 2. http://perlcabal.org/syn – на этой странице, названной
method GetName Official Perl 6 Documentation, содержится хорошо струк-
{
return $.Name; турированный сборник основных «правовых» докумен-
} тов.
}
class NamedAplhabet does HaveName 3. http://www.parrotcode.org – Parrot Virtual Machine. Исход-
{ ные коды и другая информация про Parrot.
}
my $abc = NamedAplhabet.new(Name => 'English'); 4. http://www.pugscode.org – сайт Pugs.
say $abc.GetName(); 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, ориентированный на новый язык.
ализовано в текущей версии Pugs. 8. http://en.wikipedia.org/wiki/Perl_6 – Perl 6 в «Википедии».

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

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

Илья Александров

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


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

86
ретроспектива
Предвестники на была уничтожить своих конкурен- ного. Если ему это не удавалось, иг-
электронных эпидемий тов. Выигрывал тот, кто захватит всю ра предлагала модернизировать ее,
Сказать, где и когда появился пер- отданную под игровой процесс опе- после чего появлялась возможность
вый вирус, невозможно, поскольку та- ративную память. Особых действий задавать дополнительные наводящие
ких данных в природе не существует. в игре не требовалось: необходимо вопросы.
Если на «компьютере» Чарльза Бэб- было лишь размножить принадлежа- Модифицированная версия про-
биджа, «отца» первой вычислитель- щих к своей расе на свободные ячей- граммы странным образом начина-
ной машины, вирусов ещё не было, ки ОЗУ или же захватить ячейки про- ла копироваться в другие директории,
к середине семидесятых годов про- тивника. Подобный алгоритм очень в результате чего через некоторое
шлого века они стали весьма рас- похож на логику работы деструктив- время во всех папках жесткого диска
пространенным и неприятным для ных программ. содержалась копия Pervading Animal.
большинства явлением. Тем не ме- Широкое распространение ком- Так как в то время каждый килобайт
нее, предпосылки к их созданию по- пьютерных сетей стало катализато- пространства был «на вес золота», по-
явились практически сразу же с со- ром появления на свет первых де- добное поведение игры мало кого об-
зданием первых ЭВМ. структивных программ – компьютер- радовало. До сих пор не ясно, была ли
Еще в 1940 году математик Джон ных вирусов. это ошибка программистов либо же за-
фон Нейман написал книгу, в кото- думка вирусописателей. Впрочем, про-
рой были описаны самовоспроизво- 70-е годы: начало блема была быстро решена – новая
дящиеся математические автоматы, Появление первого в мире компью- версия операционной системы Exec
то есть принципы, которые легли в ос- терного вируса было зафиксировано 8 базировалась на другом типе фай-
нову всех вирусов. В 1959 году аме- в начале 70-х годов прошлого столе- ловой системы, на которой програм-
риканский научный журнал «Scientific тия, когда на просторах военной ком- ма засорять файловое пространство
American» опубликовал статью Л. Пен- пьютерной сети APRAnet – прароди- больше не могла.
роуза, рассказывавшую о самостоя- тельницы современного Интернета –
тельно распространяющихся биоло- была найдена программа Creeper. Ви- 80-е: первые эпидемии
гических структурах. Автор рассмот- рус был написан для распространен- К восьмидесятым годам прошлого сто-
рел способности подобных структур ной в те времена операционной сис- летия компьютер перестал быть рос-
к мутациям, активации и размноже- темы Tenex, в которую он проникал, кошью, доступной лишь избранным.
нию. Другой ученый, Ф. Шталь, полу- распространяясь через модемную Владельцев ПК становится все боль-
ченные из этой статьи знания реали- связь. На экран зараженных компью- ше, кроме того, обмен информаци-
зовал на практике. Работая операто- теров периодически выводилась над- ей между пользователями с помощью
ром в научно-исследовательской ла- пись: «I’M THE CREEPER: CATCH ME электронных досок объявлений (BBS –
боратории, он имел доступ к мощней- IF YOU CAN». Деструктивных дейс- Buletin Board System) достиг междуна-
шей для того времени ЭВМ – IBM 650. твий Creeper не совершал, ограничи- родного масштаба.
Эксперимент очень удивил Шталя, ваясь лишь этим сообщением, раз- В 1981 году произошла первая по-
превзойдя все его ожидания. Полу- дражавшим пользователей. Чуть поз- настоящему массовая вирусная эпи-
чившийся в результате «мутации» же для него было написано «противо- демия. Пострадали широко распро-
математических алгоритмов элект- ядие» – программа Reaper, находив- страненные в то время компьютеры
ронный «зверек» удалил все следы шая файл с вирусом и удалявшая его. Apple II. Вирус Elk Clone записывался
своих «родителей», присутствовав- Распространялась она, кстати, ана- в загрузочные секторы дискет в мо-
ших в системе, после чего самоунич- логичным с Creeper способом. Можно мент обращения к ним пользователя.
тожился. сказать, что первый в мире антивирус Elk Clone искажал изображение на мо-
Естественно, все вышеперечис- был создан «по аналогии с вредонос- ниторе, выводил на экран различные
ленные труды и опыты были направ- ной программой». текстовые сообщения, заставлял ми-
лены не для того, чтобы нынешние ви- В 1974 году «частым гостем» на раз- гать текст. Неискушенные пользовате-
русописатели ежедневно выбрасыва- личных серверах была программа ли впадали от действий вируса в оце-
ли в Интернет мегабайты новой «за- с милым для животноводов названи- пенение, в то время как он сам продол-
разы». Изначально эти исследования, ем Rabbit. «Кролик» ничего, кроме рас- жал «перемещаться» с одного компью-
относившиеся к области создания ис- пространения и размножения само- тера на другой.
кусственного интеллекта, представ- го себя, не делал. Программа само- В 1983 году американский про-
ляли собой академический интерес. воспроизводилась с огромной скоро- граммист Лен Эйделман впервые
Однако любое открытие, сделанное стью, постепенно занимая все систем- употребил термин «вирус», которым
в мирных целях, может быть без осо- ные ресурсы. Иногда Rabbit даже вы- он обозначил саморазмножающиеся
бых трудностей превращено в мощное зывал сбой в работе серверов. программы.
оружие разрушения. Другой пример – логическая игра Спустя год Фред Коэн, один из са-
В 1961 году среди компьютерщиков Pervading Animal для операционной м ы х а в то р и тет н ы х в и рус ол о го в,
была очень популярна игра «Darwin». системы Exec 8, смысл которой за- дал четкое определение понятию
Её сюжет и смысл были просты: иг- ключался в отгадывании пользовате- «компьютерный вирус»: «программа,
рок руководил «расой», которая долж- лем загаданного программой живот- способная «заражать» другие про-

№11, ноябрь 2006 87


ретроспектива
граммы при помощи их модификации обнаружить вирусный код в програм- Созданная неким Робертом Моррисом
с целью внедрения своих копий». мах. Другим распространенным «ле- программа поражала компьютеры, ра-
В 1986 году 19-летний пакиста- карством» от вредоносных программ ботавшие под ОС UNIX. В планы созда-
нец Басит Фарук Алви написал вирус того времени были «иммунизаторы». теля не входило нанесение вреда сис-
Brain. Также как и Elk Clone, Brain по- Этот тип ПО модифицировал все про- теме, червь должен был лишь проник-
ражал загрузочные сектора дискет. граммы таким образом, чтобы вирусы нуть в сеть ARPAnet и оставаться там
Программа не была ориентирована считали их уже зараженными и не вы- незамеченным. Вирус обладал воз-
на какие-либо разрушительные функ- полняли по отношению к ним никаких можностью вскрытия паролей в ОС,
ции, она лишь меняла метку всех дис- действий. После того как количест- и в списке выполнявшихся процессов
кет на «(С)Brain». Как утверждает ав- во вирусов возросло в тысячи раз, ис- детище Морриса отображалось в виде
тор, он преследовал только одну цель – пользование иммунизаторов было уже обычного пользовательского процесса.
выяснить уровень компьютерного пи- бесполезным. Червь стремительно саморазмножал-
ратства у себя в стране. Но уже через Антивирусные фирмы чаще всего ся и пожирал все свободные ресурсы
несколько недель после активации ви- состояли из двух-трех человек и свои компьютера, вследствие чего из строя
руса зараженными оказались тысячи продукты продавали за символичес- выходили целые серверы. Некото-
компьютеров по всему миру, что вы- кую сумму либо раздавали бесплат- рые из них смогли вернуться к работе
звало настоящий переполох среди но. Но распространенность защитных лишь через пять суток, поскольку вак-
пользователей и бурю обсуждений программ была очень низка, да и не- цины против червя не существовало.
в средствах массовой информации. прерывное появление новых вирусов За время своего «хождения по миру»
В Brain был впервые использован при- делало их бессильными. Интернет вирус поразил около 6000 компьютер-
ем, когда при чтении зараженного сек- в то время ещё не успел «вырваться» ных систем, затронув даже компьюте-
тора диска вирус подставлял вместо из «объятий» учёных и военных, а об- ры исследовательского центра NASA.
этого раздела незараженный. новляться без наличия глобальной се- Роберт Моррис отделался 400 часами
В 1988 году была создана пер- ти было практически невозможно. общественных работ, но вошел в исто-
вая вредоносная программа, кото- В середине 80-х годов появился тер- рию как автор первого разрушительно-
рая не просто заражала компьютер, мин «Virus Hoax» – «вирусная мистифи- го сетевого червя.
но и наносила ему реальный вред. кация». В конце восьмидесятых пользо-
Этот вирус был создан в Лехайском ватели панически боялись вирусов: ми- 90-е: полиморфные
университете, в котором, кстати, рабо- фы о программах, выводящих из строя вирусы
тал ранее упоминавшийся Фред Коэн. аппаратную часть ПК, будоражили ум В начале 90-х годов прошлого столе-
Вирус Lehigh уничтожал информацию каждого владельца компьютера. Virus тия английская компания Sophos, в ко-
на дисках, поражая системные файлы Hoax были ничем иным, как ложными торой работали Ян Храске, Эд Уайл-
COMMAND.COM. Наличие квалифи- слухами о новых компьютерных эпи- динг и Питер Лэймер, приступила к вы-
цированных специалистов в универ- демиях. Вспоминается история, когда пуску журнала «Virus Bulletin». Virus
ситете оказалось спасением – за сте- один шутник разослал на разные BBS Bulletin рассказывал о компьютерных
ны учебного заведения он так и не про- сообщения о появлении нового виру- вирусах, а также обо всех аспектах
брался. Впрочем, немалую роль в уст- са, который распространялся через защиты от них. Авторами журнала яв-
ранении угрозы эпидемии сыграл и ал- модемы, работавшие со скоростью пе- лялись программисты, руководители
горитм самого Lehigh – во время фор- редачи информации 2400 бит в секун- антивирусных компаний, разработчи-
матирования винчестеров он само- ду. Чтобы не заразиться вирусом, ав- ки ПО. Журнал был некоммерческим:
уничтожался вместе с остальной ин- тор рекомендовал перейти на модемы за всю его историю в нем не было на-
формацией. со скоростью 1200 бит/с. И что вы ду- печатано ни одного рекламного объяв-
В это же время начало активно маете? Масса пользователей выброси- ления. Из-за этого Virus Bulletin не по-
развиваться программное обеспече- ла более быстрые модемы ради своей лучил широкой распространенности.
ние, защищавшее компьютеры от ви- «безопасности». Его читателями были в основном про-
русов. Антивирусные программы то- В 1988 произошла первая эпиде- фессионалы в сфере IT (информаци-
го времени представляли собой про- мия, вызванная сетевым компьютер- онных технологий), а также сотрудни-
стенькие сканеры, которые посредс- ным вирусом. Впоследствии такие ви- ки компьютерных фирм.
твом контекстного поиска пытались русы стали именоваться «червями». В 1990 году появился новый тип
вредоносных программ – полиморф-
ОБСУЖ ДАЕМ НА ФОРУМЕ  Перспективы профессии ные вирусы. «Полиморфизмом» была
ЖУРНАЛА  Настройка работы FreeBSD и Windows названа технология, при которой вирус
Вы можете прочитать журнал от корки  Аутсорсинг IT нельзя было обнаружить сканером, ис-
до корки. И еще раз прочитать. И еще. А по-  Как получить DVD-диск с архивом но- кавшим вирусы с помощью фрагмен-
том обсудить с коллегами самое интересное меров журнала тов уже известного вредоносного ко-
на форуме: http://www.samag.ru/forum.  И многое другое да. Полиморфизм позволяет програм-
Уже идет обсуждение тем: мам генерировать код во время испол-
 Управляем серверами в реальном вре- Задайте интересующие вас вопросы, нения, в результате чего копия виру-
мени поделитесь своим мнением! са на каждом новом заражённом ком-

88
ретроспектива
пьютере будет отличаться от предыду-
щей. Первым подобным вирусом стал Вирусы для мобильных устройств На сегодняшний день не вызывают
Chameleon, написанный Марком Ваш- В 2000 году был впервые найден ви- удивления вредоносные программы для
бёрном. После появления полиморф- рус для платформы PalmOS. Программа смартфонов. Первым вирусом для ОС
ных программ неотъемлемой частью Phage.936 переходила между КПК во вре- Symbian, стал вирус Cabir. Он не совершал
антивируса стал эмулятор для дешиф- мя передачи через ИК-порт. При зараже- никаких деструктивных действий и был со-
рации кодов, впервые использованный нии карманного компьютера могли быть здан лишь для демонстрации потенциаль-
Евгением Касперским. удалены некоторые файлы, а приложе- ной подверженности мобильных устройств
В этом же году в Болгарии, кото- ния часто самопроизвольно закрывают- к вирусным атакам и эпидемиям. Червь
рая тогда была центром мирового ви- ся. С тех пор появилось несколько десят- распространялся через Bluetooth-соеди-
русописания, появилась специализи- ков вирусов для различных платформ КПК, нения. Сколько ещё осталось ждать до по-
рованная BBS, с которой каждый же- хотя они не столь разнообразны и «гибки», явления по-настоящему разрушительных
лающий мог скачать вредоносные про- как их «собратья» для персональных ком- вирусов для мобильных устройств, пока-
граммы. Конференции, посвященные пьютеров. жет время.
программированию вирусов, появи-
лись и в UseNet. няемые файлы операционной систе- Windows 95 были заражены загрузоч-
В это же время была опубликова- мы, приводя некоторые из них в не- ным вирусом Form. К счастью, один
на книга «Маленькая Черная Книж- годность. из них обнаружил неладное, и на при-
ка о Компьютерных Вирусах» Марка лавки магазинов поступила нормаль-
Людвига. Она стала «Библией» всех Первый арестованный ная, незараженная система.
создателей вирусов. Была сформи- вирусописатель В августе того же года появил-
рована так называемая «VX-сцена» – На протяжении 1993-94 годов свет ся первый макровирус, написанный
сообщество программистов, специа- увидели новые конструкторы виру- на языке WordBasic, встроенном в тек-
лизирующихся на создании компью- сов: PS-MPC и G2. Сгенерированные стовый редактор MS Word. Макрови-
терных вирусов. ими вредоносные программы стали русом Concept были заражены сотни
самой распространенной опасностью тысяч компьютеров по всему земному
Конструкторы в Интернете. шару, вследствие чего он еще долго
вредоносных программ В это же время состоялся настоя- лидировал в статистических исследо-
В 1992 году хакер, известный под ни- щий «бум» среди производителей ан- ваниях компьютерных журналов.
ком Dark Avenger, выпустил в свет ути- тивирусов – их программы, наконец- В 1996 году первую эпидемию пе-
литу MtE (Mutation Engine). С её помо- то, стали обязательной составляю- режили пользователи Windows 95 –
щью любой, даже самый примитивный щей к практически любой ОС. На ры- их компьютеры были поражены загру-
вирус можно было сделать полиморф- нок безопасности решила проникнуть зочным вирусом Boza. В июле того же
ным. Этим же человеком был впервые даже Microsoft, выпустившая Microsoft года создатели макровирусов пере-
создан вирус Peach, наделенный спо- AntiVirus (MSAV). Первоначально про- ключились с Word на редактор элек-
собностью обходить антивирусное ПО. грамма была популярна, но впоследс- тронных таблиц MS Excel, выпустив
Peach удалял базу изменений програм- твии крупнейший производитель про- для него вирус Laroux.
мы Central Point AntiVirus. Эта програм- граммного обеспечения в мире пре- Не заставили себя ждать и рези-
ма, не находив свою базу данных, счи- кратил разработку продукта. дентные вирусы, использующие серви-
тала, что запущена впервые, и созда- Лидерство в этой области посте- сы «нулевого кольца» ОС. Win95.Punch
вала её вновь. Таким образом, вирус пенно завоевала компания Symantec, загружался в систему как VxD-драй-
обходил защиту и продолжал зара- частью которой стали крупнейшие вер, перехватывал обращения к фай-
жать систему. производители антивирусного про- лам и заражал их.
Группа программистов, извест- граммного обеспечения: Central Point
ная в сети, как Nowhere Man, выпус- и Fifth Generation Systems. Антивирусные склоки
тила конструктор вирусов VCL (Virus Эпидемия нового полиморфного К 1997 году операционная систе-
Creation Laboratory). Отныне любой вируса, Pathogen, уже не была событи- ма Linux, ранее считавшаяся опло-
школьник, даже не владеющий язы- ем из ряда вон выходящим, к подобно- том «чистоты и стабильности», боль-
ками программирования, мог воору- го рода событиям все уже начали при- ше не являлась платформой, свобод-
житься конструктором и собрать ви- выкать. Однако это был первый вирус, ной от вирусов. Linux.Bliss, распростра-
рус любого типа и разрушительной автор которого был найден и осуждён. нявшийся посредством конференций
силы. С появлением VCL и так нема- Безработный Кристофер Пайл за со- UseNet, заражал исполняемые фай-
лый «поток» новых компьютерных здание вредоносных программ был лы этой ОС.
вредителей стал просто огромным. приговорен к 18 месяцам тюремного В этом же году было отмече -
Стоит ли удивляться, что спустя не- заключения. но появление двух новых типов чер-
сколько дней после выхода в свет ОС вей, распространявшихся через IRC
Windows 3.11 появилась и первая де- Атака на Microsoft и FTP. Особо большим их количест-
структивная программа под эту плат- В 1995 году все разосланные бета-тес- вом мог «похвастаться» IRC, во мно-
форму? Win.Vir_1_4 поражал испол- терам диски с операционной системой гом из-за своей популярности, а также

№11, ноябрь 2006 89


ретроспектива
многочисленных «дыр» mIRC – основ- кие платы становились непригодными жённом компьютере устанавливалась
ного клиента подобных сетей. к использованию. Первый и последний специальная «лазейка», через кото-
Под конец ХХ века в погоне за ли- вирус, который наносил вред аппарат- рую злоумышленник получал полный
дерством стали нередки скандалы ной части ПК. доступ к системе. Вирус имеет более
среди производителей антивирусов. Melissa (1999) – 26 марта 1999 года ста модификаций.
Так, представители компании McAfee этот макровирус, распространявший- MyDoom (2004) – в январе 2004 го-
объявили о том, что ее программис- ся по электронной почте, заразил око- да этот вирус молниеносно распро-
ты обнаружили ошибку в антивиру- ло 20% офисных компьютеров по все- странился по всему Интернету, в ре-
се фирмы Dr.Solomon’s. Суть заявле- му миру. Крупнейшие корпорации, та- зультате чего средняя скорость загруз-
ния сводилась к тому, что Dr.Solomon’s кие как Intel, были вынуждены прекра- ки сайтов в глобальной сети уменьши-
мог находить новые и технически со- тить работу внутри своих локальных лась на 50%. Червю принадлежит ре-
вершенные вирусы только в специ- сетей. Ущерб – от 300 до 500 милли- корд по скорости распространения: ме-
альном «усиленном» режиме, в ко- онов долларов. нее чем за сутки было заражено около
торый переключался лишь после на- ILOVEYOU (2000) – скрипт, напи- двух миллионов компьютеров. Точную
хождения обычных, примитивных чер- санный на макроязыке Visual Basic. цифру из-за масштабов эпидемии при-
вей. В результате антивирус показы- Так же как и Melissa, распространялся вести невозможно. Вирус был создан
вал хорошие скоростные результа- по электронной почте с темой письма неизвестным программистом в качес-
ты при сканировании незараженных «I love you». Вирус рассылал свои копии тве эксперимента, и самостоятельно
дисков, и отличные показатели обна- по всем данным адресной книги поч- прекратил свою деятельность 12 фев-
ружения при работе с зараженными тового клиента. Все логины и пароли, раля того же года.
файлами. В ответ Dr.Solomon`s пода- найденные червем на компьютере, от- Sasser (2004) – вирус вызвал «пе-
ла иск в суд на McAfee, причиной ко- сылались автору программы. Послед- рерыв» в работе французских спутни-
торого стала её «некорректно постро- ний, кстати, и не пытался скрываться: ковых каналов передачи данных, от-
енная рекламная компания». В итоге он является жителем Филиппин, где на- менил рейсы некоторых авиакомпа-
вся «заварушка» завершилась покуп- казаний за компьютерные преступле- ний, не говоря уже об обычных ком-
кой McAfee контрольного пакета акций ния не предусмотрено. пьютерах, чья работа была полно-
Dr.Solomon`s. Code Red (2001) – сетевой червь, стью приостановлена. Распростра-
Спустя некоторое время публичное использующий ошибку в сетевом сер- нялся Sasser благодаря ошибке в сис-
заявление сделали тайваньские раз- висе Microsoft IIS. В заданный день за- теме безопасности Windows 2000 и XP,
работчики из фирмы Trend Micro, об- раженные компьютеры должны были запуская на зараженном компьюте-
винившие McAfee и Symantec в якобы начать DDOS-атаку по списку различ- ре сканер портов. Вирус был написан
«нарушении их патента на сканирова- ных серверов, среди которых были сис- 17-летним немецким школьником. Ин-
ние данных». Миру были сразу пред- темы правительства США. Огромные тересен тот факт, что парень запус-
ставлены доказательства о «безгреш- масштабы эпидемии и как итог – убыт- тил вирус в сеть в День своего совер-
ности» компаний, однако Trend Micro ки в 2,5 миллиарда (!) долларов. шеннолетия.
добилась своего, получив отменную Blaster (2003) – сетевой червь, вы-
бесплатную рекламу в средствах мас- водивший на зараженных компьюте- Конца и края нет
совой информации. рах сообщение о необходимости пе- История компьютерных вирусов до кон-
резагрузки. Через пару дней после его ца не дописана, продолжаясь и сегод-
Наиболее выпуска в Интернет (11 августа) бы- ня. Возможно, в то время как вы чита-
разрушительные вирусы ли заражены миллионы компьютеров ете эти строки, какой-нибудь провин-
Продолжать подробную историю ком- по всему миру. циальный программист пишет новый
пьютерных вирусов вплоть до наших Sobig.F (2003) – сетевой червь, вирус, еще более хитроумный и раз-
дней не имеет смысла, поскольку еже- распространявшийся по электронной рушительный, чем все вышеперечис-
годно появляются сотни и тысячи но- почте. Размножавшийся с огромной ленные.
вых вредоносных программ. Я ограни- скоростью вирус скачивал на заражён- Ну а нам остаётся лишь уповать
чусь лишь кратким рассказом о самых ный компьютер дополнительные фай- на милость компаний-производите-
известных вирусах, появившихся пос- лы, «сжигая» трафик и ресурсы систе- лей антивирусов и следить за защи-
ле 1997 года: мы. Интересная особенность – 10 сен- щённостью своих систем.
CIH (1998) – ущерб, нанесенный тября вирус прекращал свою деятель-
вирусом, составил порядка 80 мил- ность, больше не представляя угрозы Редактор рубрики
лионов долларов. Вирус был написан для пользователя. Автор Sobig.F, за ин- Дмитрий Мороз
программистом из Тайваня, и стал од- формацию о котором Microsoft пред-
ним из самых разрушительных в ис- лагала 250 тыс. долларов, не найден 1. http://www.viruslist.com/ru – вирусная
тории. «Чих» заражал исполняемые до сих пор. энциклопедия, описание всех вирусов.
файлы и активировался каждый год Bagle (2004) – сетевой червь, рас- Новости и аналитические обзоры.
26 апреля – в день годовщины аварии пространявшийся по классическому 2. http://vx.netlux.org – журналы, статьи
на Чернобыльской АЭС. CIH перезапи- способу, используя файловые вложе- о вирусах. Исходные коды и руководс-
сывал FlashBIOS, после чего материнс- ния в электронных письмах. На зара- тва.

90
bugtraq

Уязвимость состояния операции


в OpenSSH
Программа: OpenSSH 4.3, возможно более ранние вер- Множественные уязвимости в Mac OS X
сии. Программа: Apple Macintosh OS X версии до 10.4.8.
Опасность: Высокая. Опасность: Высокая.
Описание: Уязвимость состояния операции существует из- Описание: 1. Уязвимость существует из-за ошибки в ком-
за ошибки в обработке сигналов при включенной аутенти- поненте CFNetwork, которая позволяет злонамеренному
фикации GSSAPI. Удаленный пользователь может вызвать SSL-сайту выдать себя за доверенный сайт для клиентов
отказ в обслуживании и потенциально выполнить произ- CFNetwork (например, браузер Safari).
вольный код на целевой системе. 2. Исправлены уязвимости в Flash Player, которые поз-
URL производителя: http://www.openssh.org. воляли удаленному пользователю обойти ограничения бе-
Решение: Установите последнюю версию (4.4) с сайта про- зопасности и скомпрометировать целевую систему.
изводителя. 3. Уязвимость существует из-за ошибки провер-
ки границ данных в компоненте ImageIO при обработке
JPEG2000-изображений. Удаленный пользователь может
Множественные уязвимости с помощью специально сформированного изображения
в универсальной криптографической вызвать переполнение буфера и выполнить произвольный
библиотеке OpenSSL код на целевой системе.
Программа: OpenSSL 0.9.x 4. Уязвимость существует в механизме обработки оши-
Опасность: Высокая. бок ядра Mach exception ports. Локальный пользователь мо-
Описание: 1. Уязвимость существует из-за ошибки при об- жет повысить свои привилегии на системе.
работке некорректных ASN.1-структур. Удаленный пользо- 5. Непроверяемое состояние ошибки в компоненте
ватель может вызвать зацикливание приложения, исполь- LoginWindow может позволить локальному пользователю
зующего OpenSSL для обработки ASN.1-данных. Версии получить доступ к Kerberos-тикету после неудачной попыт-
до 0.9.7 не уязвимы. ки входа в систему.
2. Некоторые публичные ключи требуют много времени 6. Ошибка в компоненте LoginWindow во время обработ-
для их обработки и могут быть использованы для DoS-ата- ки Fast User Switching может позволить другим локальным
ки на приложение, использующее OpenSSL для обработ- пользователям получить доступ к Kerberos-тикету.
ки ASN.1-данных. 7. Логическая ошибка в LoginWindow компоненте может
3. Переполнение буфера обнаружено в функции позволить сетевым учетным записям без GUID обойти ог-
SSL_get_shared_ciphers(). Злоумышленник может пос- раничения на доступ службы LoginWindow.
лать список шифров приложению, использующему уяз- 8. Уязвимость существует из-за ошибки, которая позво-
вимую функцию, и выполнить произвольный код на це- ляет учетной записи после сброса административных при-
левой системе. вилегий управлять приложениями WebObjects.
4. Уязвимость существует из-за ошибки в клиентском 9. Уязвимость существует из-за ошибки поврежде-
коде SSLv2. Злоумышленник может использовать уязвимый ния памяти при обработке PICT-изображений в QuickDraw
клиент для создания SSLv2 соединения к серверу. Manager. Удаленный пользователь может с помощью спе-
URL производителя: http://www.openssl.org. циально сформированного PICT-изображения выполнить
Решение: Установите последнюю версию (0.9.7l или 0.9.8d произвольный код на целевой системе.
и выше) с сайта производителя. 10. Ошибка в SASL может позволить злоумышленнику
вызвать отказ в обслуживании службы IMAP.
11. Уязвимость существует из-за ошибки управления
Уязвимость форматной строки в Skype памятью в WebKit при обработке HTML-кода. Удаленный
Программа: Skype 1.5.*.79 и более ранние версии для пользователь может с помощью специально сформиро-
Mac OS. ванной страницы выполнить произвольный код на целе-
Опасность: Высокая. вой системе.
Описание: Уязвимость существует из-за ошибки формат- 12. Ошибка в Workgroup Manager может позволить не-
ной строки при обработке URL-аргументов. Удаленный которым учетным записям использовать слабый механизм
пользователь может с помощью специально сформирован- шифрования паролей.
ного URL, содержащего символы форматной строки, выпол- URL производителя: http://www.apple.com/macosx.
нить произвольный код на целевой системе. Решение: Установите последнюю версию (10.4.8) с сайта
URL производителя: http://www.skype.com/download/skype/ производителя.
macosx.
Решение: Установите последнюю версию (1.5.0.80) с сай- Составил Александр Антипов
та производителя.

№11, ноябрь 2006 91


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

Эффективное проектирование
приложений Oracle
Томас Кайт
на все это, вы откроете для себя ог- ние SPFILE для запуска базы данных,
ромное количество нужной и актуаль- восстановление данных, управление
ной информации. В первой главе, ко- пространством в сегменте и сегмента-
торая носит название «Правильный ми отката (UNDO). Обработка опера-
подход к созданию приложений», ав- торов (выполнение команд, запросы –
тор рассказывает об общих требова- от начала до конца, использование
ниях при проектировании приложе- переменных привязки). Большое вни-
ний, методологии их разработки, до- мание уделено проектированию эф-
статочно подробно освящены вопро- фективных схем, применению языков
сы, связанные с производительнос- SQL и PL/SQL. В общем и целом кни-
тью. Далее вы познакомитесь с основ- га оставила благоприятное впечатле-
ными инструментами, которые помогут ние, и если бы не явные ошибки в пе-
вам настроить систему на максималь- реводе, издание можно было бы на-
ную производительность (SQL*Plus, звать одним из лучших по теме Oracle
Издание – перевод знаменитой книги EXPLAIN PLAN, AUTOTRACE, TKPROF, на русском языке.
от культовой фигуры Oracle-сообщест- Runstats, Statspack, DBMS_PROFILER).
ва – Тома Кайта. Сразу отмечу, что из- В главе «Архитектурные решения» То-  Издательство: «Лори»
дание адресовано прежде всего спе- мас Кайт повествует о преимуществах  Год издания: 2006
циалистам, для новичков оно будет кластеризации, применении секциони-  Количество страниц: 638
сложным. К сожалению, перевод кни- рования, использовании параллель-  ISBN: 5-85582-251-6
ги не всегда корректен, что потенци- ных операций. Достаточно подроб-  Цена: ≈ 488 руб.
ально грозит непониманием инфор- но освещены вопросы эффективно- Книга предоставлена издательстким домом
мации в полном объеме. Но несмотря го администрирования – использова- «Вильямс».

Эффективная работа:
Windows Server 2003
Уильям Станек
и бета-версий (в то время проект назы- же вопросы, связанные с развертыва-
вался Windows Whistler). нием служб терминалов). Чрезвычай-
Спектр рассмотренных тем поисти- но подробно рассмотрены вопросы ра-
не всеобъемлющ. Установка Windows боты с Active Directory – архитектура,
Server 2003 (подготовка и начало ус- проектирование и управление домен-
тановки, интерактивная и автоматизи- ной средой, настройка сайтов и реп-
рованная установка, службы удален- ликации AD. Не остались без внима-
ной установки). Обновление и мигра- ния и вопросы планирования восста-
ция. Управление Windows Server 2003 новления после аварий и резервного
(оборудование: настройка и устране- копирования.
ние неполадок, управление реестром, На прилагаемом к книге диске вы
мониторинг и настройка производи- найдете электронную версию книги,
тельности, комплексный анализ и ре- а также большое количество различ-
Автор этой книги не нуждается в пред- гистрация событий). Управление запо- ных инструментов, которые, без сом-
ставлении. Уильям Станек по пра- минающими устройствами и файловой нения, окажутся полезными в вашей
ву заслужил уважение миллионов системой (обеспечение высокой до- повседневной работе.
пользователей и администраторов ступности, подготовка и размещение
Windows, опубликовав более 10 книг, серверных кластеров, управление за-  Издательство: «Питер»
по этой ОС. поминающими устройствами). Сете-  Год издания: 2007
В этом фундаментальном труде вые службы и службы печати (управ-  Количество страниц: 1104
автор обобщает свой опыт использо- ление DHCP, проектирование, реали-  ISBN: 5-469-01005-8
вания Windows Server 2003. Автор на- зация и поддержка DNS, использова-  Цена: ≈ 602 руб.
чал изучение этой ОС с первых альфа- ние удаленного рабочего стола, а так- Книга предоставлена издательством «Питер».

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

UML 2.0. Объектно-ориентированное


моделирование и разработка
Джеймс Рамбо, Майкл Блаха
но удалось достичь главной цели – приводится большое количество при-
в доступной форме объяснить читате- меров реализации той или иной зада-
лю всю суть объектно-ориентирован- чи на языках C++ и Java. Нельзя не от-
ного метода, не прибегая к описанию метить большое количество различ-
реализации в рамках отдельно взято- ных заданий и множества самых раз-
го языка программирования. В пер- нообразных советов, которые помо-
вой части книги авторы ознакомят вас гут вам наиболее быстро и эффектив-
с общими концепциями моделирова- но освоить весь излагаемый матери-
ния. Вторая часть посвящена анали- ал. Несмотря на достаточную слож-
зу и проектированию. В третьей части ность основных тем книги, она доста-
книги, которая носит название «Реа- точно легко читается, благодаря про-
лизация», авторы пишут о моделиро- стому и живому стилю изложения. Ре-
вании реализации, объектно-ориенти- комендую всем без исключения про-
«Перед вами поистине революцион- рованных языках, базах данных, а так- граммистам, желающим на практике
ная книга, посвященная базовым при- же стилях программирования. Завер- познакомиться и начать использовать
нципам объектно-ориентированного шает книгу практическая глава «Раз- технологии UML.
мышления. Своей универсальностью работка программного обеспечения»,
она выгодно отличается от множес- где авторы на примерах повествуют  Издательство: «Питер»
тва книг, описывающих отличитель- о итерационной разработке, управле-  Год издания: 2007
ные черты какого-нибудь одного язы- нии моделированием и унаследован-  Количество страниц: 544
ка программирования» – с этими сло- ных системах. В приложении вы най-  ISBN: 5-469-00814-2
вами в аннотации к изданию сложно дете систему графических обозначе-  Цена: ≈ 538 руб.
не согласиться. Авторам действитель- ний UML. На протяжении всей книги Книга предоставлена издательством «Питер».

Win32 API. Эффективная разработка


приложений
Юрий Щупак
хочется отметить, что объяснение те- шами», диалоговыми окнами, а также
мы начинается с самых азов, с «Hello, элементами управления общего поль-
World!», а это значит, что даже нович- зования. Из главы «Многозадачность»
ки в программировании смогут начать вы узнаете об объектах ядра, процес-
освоение материала этой книги без ви- сах и потоках, а также методиках их уп-
димых сложностей. Постепенно осваи- равления. Не остались без внимания
вая материал, вы узнаете о GDI – гра- вопросы синхронизации и обмена дан-
фическом интерфейсе устройства, на- ными между процессами. В приложе-
учитесь рисовать фигуры, линии, выво- нии вы найдете описание интегриро-
дить текст. Далее ознакомитесь с па- ванных сред Micorosoft Visual C++ 6.0
литрами, растрами и метафайлами. и Visual Studio.NET. Большое количес-
Подробно рассмотрены вопросы рабо- тво примеров и различных схем и таб-
ты со средствами ввода. В главе «Ре- лиц помогут вам усвоить весь излагае-
Как правильно заметил автор книги, сурсы Windows-приложения» вы най- мый материал в кратчайшие сроки.
многие люди, сразу начавшие осваи- дете информацию об основных ресур-
вать программирование для Windows сах, которые могут быть использова-  Издательство: «Питер»
на уровне MFC и Windows Forms, не за- ны вами в той или иной разрабатыва-  Год издания: 2007
трагивая Win32 API, впоследствии емой программе (пиктограммы, кур-  Количество страниц: 572
сталкиваются с рядом неразрешимых соры, растровые образы). Достаточно  ISBN: 5-469-01361-8
задач при создании более-менее се- подробно рассмотрены вопросы созда-  Цена: ≈ 400 руб.
рьезных приложений. Цель этой кни- ния меню и работы с «быстрыми клави- Книга предоставлена издательством «Питер».
ги – в простой и доступной форме рас-
сказать читателю о Win32 API. Сразу Обзор книжных новинок подготовил Александр Байрак

№11, ноябрь 2006 93


подписка на 2007 год

Оформите годовую подписку


и получите в подарок DVD-диск с архивом
всех вышедших номеров с 2002 года.
Диск будет вложен в январьский юбилейный
выпуск журнала
Редакционная подписка  Подписку можно оформить с любо-  Копию заполненного и оплаченно-
для физических лиц го месяца на любой срок. го бланка отправьте в редакцию по
 Подписку Вы можете оформить  В графе «Сумма» проставьте сум- факсу: (495) 628-8253 или на элек-
на любой российский адрес. му за выбранное количество номе- тронный адрес: info@samag.ru
 При заполнении разборчиво укажи- ров. Стоимость одного номера жур-  Журнал высылается почтой прос-
те фамилию, имя, отчество полно- нала 150 руб. За год – 1800 руб. той бандеролью только после
стью, почтовый индекс и адрес по- НДС и почтовые расходы включе- поступления денег на расчетный
лучателя, контактный телефон. ны в стоимость. счет.

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

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

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

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

№11 ноябрь 2006 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№11(48), Ноябрь, 2006 год

УЧРЕДИТЕЛИ
ЧИТАЙТЕ
Владимир Положевец
Александр Михалев В СЛЕДУЮЩЕМ
РУКОВОДИТЕЛЬ ПРОЕКТА
Петр Положевец
НОМЕРЕ:
РЕДАКЦИЯ
Исполнительный директор
Владимир Положевец Как предотвратить кражу мных решений. Если у вас сеть под уп-
Ответственный секретарь веб-содержимого равлением MS Windows, то вам навер-
Наталья Хвостова Эксклюзивный материал, однажды няка знаком такой продукт как Microsoft
sekretar@samag.ru опубликованный в сети, обречен на не- ISA Server 2004 – один из наиболее
Технический редактор избежное расползание по сотням ты- распространенных межсетевых экра-
Владимир Лукин сяч веб-серверов, жестких дисков и… нов. Об особенностях его работы и пой-
Редактор даже бумажных изданий. Что, согла- дет речь в следующем выпуске.
Алексей Коршунов
ситесь, обидно, особенно если автор
Внештатные редакторы
не получает вознаграждения, а его Обзор серверного
Алексей Барабанов
Сергей Супрунов имя затирается. Существует множес- дистрибутива tinysofa
Крис Касперски тво способов защиты веб-содержи- Установить и настроить надежную
Алексей Шелестов мого от несанкционированного копи- всесторонне защищенную систему
Алексей Мичурин рования, но большинство из них со- на сервер не такая уж и легкая задача.
Дмитрий Мороз вершенно неработоспособны – легко Упростить ее можно, только правильно
Андрей Бирюков взламываются или создают проблемы подобрав дистрибутив и компоненты
легальным посетителям. Тем не менее будущей системы. Один из вариантов –
РЕКЛАМНАЯ СЛУЖБА создание надежной защиты все-таки проект tinysofa, целью которого стало
тел./факс: (495) 628-8253 возможно! создание быстрой, надежной, стабиль-
Евгения Тарабрина
ной и безопасной операционной систе-
reсlama@samag.ru
Microsoft ISA Server 2004 – мы, которую можно применять на сер-
Верстка и оформление многофункциональный верах уровня предприятия.
maker_up@samag.ru межсетевой экран
Дизайн обложки Наличие подключения к Интернету Удобное получение
Николай Петрочук на сегодняшний день – неотъемлемая факсов
часть ведения бизнеса в любой сфе- Если вы хотите уйти от постоянно скру-
По вопросам распространения ре. Однако, помимо удобств, которые чивающейся термо-бумаги, потерян-
обращайтесь по телефону: предоставляются глобальной сетью, ных факсов и связанной с этим голо-
(495) 628-8253 (доб. 120) от нее может исходить и масса угроз: вной боли, читайте в следующем но-
атаки хакеров, вредоносные приложе- мере, как решить проблему получения
107045, г. Москва,
ния, утечка информации, нежелатель- факсов с использованием Linux-серве-
Ананьевский переулок, дом 4/2, стр. 1
ная почта. Для борьбы существует мно- ра и сделать просмотр и печать фак-
тел./факс: (495) 628-8253
Сайт журнала: www.samag.ru жество как аппаратных, так и програм- сов максимально удобными.

ИЗДАТЕЛЬ
ЗАО «Издательский дом Уважаемые читатели!
«Учительская газета»
Отпечатано типографией Обратите внимание, что теперь оформить подписку вы можете
ГП «Московская Типография №13» не только на полугодие, но и сразу на весь год.
Тираж 11000 экз. Годовой индекс по каталогу «Роспечать» – 20780.
Интер-почта – заказ журналов по тел.(495) 500-00-60.
Журнал зарегистрирован
Подписка on-line – SetBook.ru.
в Министерстве РФ по делам печати,
телерадиовещания и средств массо-
вых коммуникаций (свидетельство Приобрести новые и старые номера журнала
ПИ № 77-12542 от 24 апреля 2002 г.). вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.

За содержание статьи ответственность


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

96