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

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

№5(30) май 2005


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

СЬ
www.samag.ru

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

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

WPA-Enterprise, 802.1x EAP-TLS


НУ

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

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

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

№2(39) февраль 2006

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

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

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

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

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


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

Подключаемся к Интернету

№2(39) февраль 2006


через спутник

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

ИС НН
ЕН
УС

БО
НА ТПУ

ИЛ ДА
ТП

НЧ ЖИ
ВО

Чем уникальна Prevx1 –


РА Е О

КО НЕО
АВ СЛ
Л

Л
ХА

ПО

общественная система
УЕ

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

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

Как повысить безопасность


Ищем причины
Строим защищенную беспроводную сеть:
WPA-Enterprise, 802.1x EAP-TLS
Настраиваем UPS под Linux
Как восстановить

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

Доставку гарантируем:
создателем языка Perl

качество обслуживания
в пакетных сетях
ProFTPD: мастер своего дела
Практикум Python:
обрабатываем входящую
ПОДПИШИТЕСЬ И ЧИТАЙТЕ! электронную почту

Роспечать – 20780, 81655 Какова цена анонимности


Пресса России – 87836 в Сети
Интер-почта – тел. (095) 500-00-60
г. Москва, Хлебный переулок 2/3
тел. 29-161-32, 202-61-43
(круглосуточно)
e-mail: support@redline.ru

Íàøà êîìïàíèÿ 12 ëåò ïðåäîñòàâëÿåò ëèíèè ñâÿçè


â ñàìûõ íåïðîõîäèìûõ ìåñòàõ Ìîñêâû.
10 Ìáèò - $500, âêëþ÷åíî ÌÍÎÃÎ òðàôèêà.
Anything else?

Çâîíèòå, äîãîâîðèìñÿ!
;-)
оглавление

2 ТЕНДЕНЦИИ БЕЗОПАСНОСТЬ
ИНТЕРВЬЮ 48 Можно ли защититься от переполнения
буферов?
4 Free Software Foundation переходит Хакеры ломают разрекламированные защитные комп-
на технологию LinuxBIOS лексы один за другим. Почему? Давайте заглянем под
О подробностях рассказывает старший системный ад- капот Stack-Guard, Stack-Shield, Pro-Police и Microsoft
министратор организации FSF – Ward Vandewege. Visual Studio .NET, сравнив заявленные возможности
Антон Борисов с реальными. Крис Касперски
a.borisov@tesv.tmb.ru kk@sendmail.ru

АДМИНИСТРИРОВАНИЕ 56 Чем уникальна общественная


система предотвращения атак Prevx1
6 Вы всё ещё не используете WMI? Появление программ, работающих по новому принципу,
Часть 2: пишем сценарии может пошатнуть позиции антивирусных компаний.
Написание скриптов, использующих WMI для управле- Сергей Яремчук
ния распределенной сетевой инфраструктурой. grinder@ua.fm
Константин Леонтьев
klеоnt@miсrоsоft.соm 60 Как повысить безопасность веб-приложений
ModSecurity – функциональный, простой в конфигуриро-
16 Современный Linux-сервер: вании, и главное, совершенно бесплатный инструмент, ис-
как планировать дисковые ресурсы пользование которого позволит повысить безопасность
Часть 2 предоставляемых веб-услуг. Сергей Яремчук
Планирование дисковых ресурсов нужным образом, grinder@ua.fm
выполняемое на этапе закладки сервера, позволит
значительно сократить возможные издержки в непред- 66 Исследуем сетевую безопасность
виденных ситуациях. Для этого надо подойти к реше- посредством Linux Netwosix
нию многих привычных вопросов с учетом возможных Обзор дистрибутива, ориентированного на исследова-
последствий. ние сетевой безопасности.
Алексей Барабанов Сергей Яремчук
alekseybb@mail.ru grinder@ua.fm

24 ProFTPD: мастер своего дела СЕТИ


Разработчики ПО постоянно стараются реализовать
новые возможности в тесных рамках протокола FTP. 70 Подключаемся к Интернету через спутник
Один из наиболее ярких представителей этой плея- Спутниковый Интернет развивается семимильными
ды – проект ProFTPD. шагами, да и тарифы на передачу данных посредством
Сергей Супрунов спутниковых провайдеров одни из самых низких.
amsand@rambler.ru Антон Борисов
a.borisov@tesv.tmb.ru
32 FreeDOS – новый взгляд на старые вещи
MS-DOS давно устарел. Какие новые проекты доступ- 74 Какова цена анонимности в Сети
ны сегодня? Чем они отличаются? Есть ли их подде- Когда цена анонимности почтовой переписки или со-
ржка? Насколько они совместимы с программным и ап- вершения электронных платёжных операций высока,
паратным обеспечением? Предлагаем вам обзор од- применимы лишь самые надёжные методы.
ной из DOS-систем, поддерживаемой и развиваемой Андрей Погребенник
до настоящего времени. andrew.p@safe-mail.net
Иван Максимов
ivan_maksimov@inbox.ru 82 Доставку гарантируем: качество
обслуживания в пакетных сетях
ПРОГРАММИРОВАНИЕ Если вы работаете по ssh удаленно, слушаете интер-
нет-радио или просто играете в online-игры, то знаете,
38 Практикум Python: что получаемое удовольствие прямо пропорционально
обрабатываем входящую нагрузке на вашу сеть. Сергей Сикорский
электронную почту fagot@kalinovka.net
Методы и приёмы, которые продемонстрированы при
решении этой узконаправленной задачи, помогут вам РЕТРОСПЕКТИВА
решать проблемы гораздо более широкого спектра.
Сергей Супрунов 86 История компьютеров «Амига»
amsand@rambler.ru Часть первая: 1982-1994
Сегодня компьютерная индустрия поделена главным
42 Замыкания в Perl образом между Windows, Apple и Linux/UNIX-решени-
Замыкания являются одной из тех особенностей Perl, ями. Еще 10-15 лет назад ситуация на рынке ПК была
которые редко встретишь в других языках программи- совершенно другой. Сергей Зуев
рования. Да и программисты на Perl зачастую не вда- megabyte2003@list.ru
ются в такие дебри. Напрасно. Даже если вы не исполь-
зуете замыканий, знать о них весьма полезно. 92 КНИЖНАЯ ПОЛКА
Алексей Мичурин
alexey@office-a.mtu-net.ru
55, 65 BUGTRAQ

№2, февраль 2006 1


тенденции
Не все выставки одинаково интересны НПО «Схема» и компания SonicWall представили свои
Международный форум «Технологии безопасности» готовые решения – шлюзы, firewall и другие сетевые средс-
в этом году отметил своё десятилетие. Раз в год орга- тва.
низаторы собирают компании, так или иначе связан- Механические системы блокирования, среди которых
ные с обеспечением безопасности. Последние два го- кабель-замок для портативного компьютера, стационарно-
да форум проходит в «Крокус-Экспо». го компьютера, напольная подставка-замок для компьюте-
Оставим лирику в стороне и обратим внимание на са- ра и прочие системы физических блокировок, представи-
му выставку. Несмотря на малое количество отведённого ла компания Bariach Magem.
места под экспозиции IT, компаний присутствовало доста- Как и в прошлом году, НПО «Техника-Сервис» на своём
точно много. Представители наиболее интересных из них богатом и прекрасно оформленном стенде представила
с удовольствием рассказывали о представляемых продук- разновидности защищённых промышленных ноутбуков. По-
тах и щедро делились визитными карточками и пресс-ре- сетителям предлагали полюбоваться на компьютеры, под-
лизами. Что же было наиболее примечательного? вергающиеся различным внешним раздражителям, таким,
Итак, компания Nero предлагала всем желающим оз- как вибрации, влага, прямые удары, низкие температуры,
накомиться с системами мгновенного уничтожения данных большое количество пыли и прочие воздействия.
с магнитных носителей. В целом неправильно было бы сказать, что выставка
Представители компании SecureIT рассказывали о сис- пустовала, но и назвать её интересной и достойной вни-
теме Zlock, обеспечивающей гибкое управление доступом мания тоже нельзя. Из наиболее зрелищного в ряду IT-ком-
к аппаратным ресурсам компьютера. паний, наверное, стоило бы упомянуть девушек, затяну-
Компания «Актив» сообщала о своей системе со стран- тых в латекс, рекламирующих агентство телохранителей,
ным названием Guardant. Это система защиты интеллек- которое почему-то разместилось крайне близко к «ряду
туальной собственности разработчиков и издателей ком- ИТ-шников». Они вызывали наиболее оживлённый инте-
пьютерных программ, представляющая собой програм- рес у публики.
мно-аппаратный комплекс из электронных ключей и про-
граммного обеспечения. Мы привыкли к подобным систе- Алексей Коршунов
мам при использовании программ компании 1С. Ещё одна
разработка, только на этот раз для авторизации пользо- Выход новой версии CRM
вателей и защиты электронной переписки в сетях на базе от компании Microsoft
Windows-систем, ruToken, также предлагалась компанией 8 февраля 2006 года в офисе Американской торговой
«Актив» всем желающим. палаты прошла пресс-конференция, посвященная вы-
Фирма АНКАД представила свою основную продукцию – ходу новой версии системы управления отношениями
аппаратные шифраторы серии Криптон. с клиентами (CRM) от корпорации Microsoft – Microsoft
Компания STAR Force рассказывала всем желающим Dynamics CRM 3.0. Как видно из названия, это уже тре-
о системе Safe’n’Sec, комплексной системе компьютерной тья версия этого продукта, являющегося одним из ре-
безопасности класса IPS для корпоративных информаци- шений Microsoft Business Solutions.
онных сетей. Microsoft Dynamics CRM состоит из интегрированных мо-
ООО «Физтех-софт» предлагала систему защиты ин- дулей «Автоматизация продаж» (Sales) и «Обслуживание кли-
формации StrongDisk CE для смартофонов, КПК и других ентов» (Customer Service) и является инструментом для уве-
устройств под управлением ОС Windows Mobile. личения продаж и обеспечения высокого уровня сервиса
На стенде компании ABBYY красовались FineReader для клиентов компании. Сейчас множество компаний исполь-
и Lingvо, продукты весьма известные, но с не совсем по- зуют в своей работе эту систему. Те, кто использует Microsoft
нятным отношением к безопасности. CRM версии 1.2, могут обновить свою систему до версии 3.0,
а использующие CRM версий 2005 Alpha и 2005 TAP, лише-
ны такой возможности. Данная CRM зарекомендовала се-
бя как легкое в использовании, настройке и поддержке биз-
нес-приложение, которое может быть интегрировано с дру-
гими системами предприятия. Новая версия программы, со-
хранив все положительные стороны своей предшественни-
цы, за счет использования последних наработок и решений
софтверного гиганта (таких как MS SQL SERVER 2005) стала
более надежной, быстрой в работе и развертывании. Поль-
зовательский интерфейс претерпел изменения, сделавшие
работу в системе более очевидной и удобной. Основные же
изменения коснулись внутреннего устройства системы. Есть
все основания полагать, что Microsoft Dynamics CRM 3.0 зай-
мет достойное место на рынке систем управления отноше-
ниями с клиентами.

Стенд «живучих» ноутбуков Николай Никульшин

2
тенденции
Mozilla переродилась в SeaMonkey Проект Camino достиг релиза 1.0
Энтузиасты, не пожелавшие хоронить Mozilla Suite, анонси- Состоялся первый релиз веб-браузера с открытым кодом
ровали первый релиз реинкарнации единого набора интер- на базе движка Gecko для Mac OS X – Camino 1.0. Браузер
нет-приложений проекта Mozilla – SeaMonkey 1.0. оснащен родным интерфейсом Cocoa, специальными икон-
SeaMonkey 1.0 состоит из веб-браузера (Mozilla Browser, ками и другими особенностями, предназначенными для
в котором помимо множества других новых функций, поя- удобства его использования в среде Mac OS X. Причем ин-
вилась поддержка d’n’d в табах для мышки, автоматической теграция с Mac OS X в Camino 1.0 не ограничивается вне-
прокрутки и изображений в SVG), почтового клиента (Mozilla шним видом браузера. В Camino встроены и функции, ис-
Mail), HTML-редактора с интерфейсом WYSIWYG (Mozilla пользующие различные системные компоненты (Spotlight,
Composer), IRC-клиента (Chatzilla). Файлы для скачивания Address Book, Keychain, Finder, Dock, Bonjour, Services
доступны на www.mozilla.org/projects/seamonkey. и System Preferences). Официально объявлено о поддержке
Mac OS X версий 10.2, 10.3 и 10.4. Camino 1.0 распростра-
MySQL AB открыла японское няется под свободной лицензией Mozilla (MPL 1.1) и досту-
подразделение пен для скачивания с www.caminobrowser.org.
Компания MySQL AB, занимающаяся разработкой и подде-
ржкой самой популярной открытой СУБД, объявила об уч- Основатель Gentoo покинул Microsoft
реждении MySQL K.K. – японского подразделения с шта- Дэниэл Роббинс, основатель и бывший главный архитек-
бом в Токио. тор проекта популярного Linux-дистрибутива Gentoo, ушел
За 2005 год было зафиксировано более одного милли- из корпорации Microsoft, проработав там восемь месяцев.
она скачиваний сервера базы данных MySQL японскими Основная задача работы Роббинса в Linux- и Open Source-ла-
пользователями. Новая структура займется дальнейшим боратории Microsoft, на которую он поступил в мае прошлого
развитием этого успеха, повышением заинтересованнос- года, сводилась к «обучению» сотрудников гиганта ПО при-
ти в экономичных решениях RDBMS среди корпоративных нципам проектов, строящихся на базе сообщества и разра-
заказчиков, вопросами коммерческого лицензирования для боток с открытым кодом. Как сообщил основатель Gentoo
поставщиков программного обеспечения, а также подде- Linux в электронном письме агентству ZDNet UK, он покинул
ржкой продукции. Microsoft в связи с тем, что у него не было возможности при-
«Япония – один из крупнейших мировых рынков ПО для менять все свои технические навыки на этом посту.
баз данных корпоративного уровня, и интерес к MySQL
в этом регионе был очень высок на протяжении нескольких Составил Дмитрий Шурупов
последних лет, – прокомментировал Ларри Стефоник, пре- по материалам www.nixp.ru
зидент MySQL K.K. и старший вице-президент MySQL AB
по мировым продажам. – Открыв японское подразделение,
мы продолжаем развитие услуг по предоставлению помо-
щи нашим заказчикам и роста нашего бизнеса».

Oracle купила Sleepycat


В середине февраля корпорация Oracle сообщила о при-
обретении Sleepycat Software, которая специализирует-
ся на программном обеспечении с открытым кодом и хо-
рошо известна как разработчик популярной базы данных
Berkeley DB.
Покупка стала логичным следствием высказанного
на одной из недавних конференций Ларри Эллисоном, ис-
полнительным директором Oracle, заявлением, что его кор-
порация заинтересована в комбинировании программно-
го обеспечения с открытым кодом и проприетарных разра-
боток. Как сообщил Роберт Шимп, вице-президент по тех-
нологическому маркетингу в Oracle, корпорация продол-
жит поддерживать Sleepycat как автономное предприятие
со всей текущей деятельностью в области проекта с от-
крытым кодом Berkeley DB. В отличие от главного продук-
та Oracle – базы данных Oracle 10g – свободные разработ-
ки Sleepycat предназначены для встраивания в приложе-
ния. «Люди используют Berkeley DB, когда им не нужна вся
мощь реляционных систем баз данных SQL, – заявил не-
давно Майкл Олсон, исполнительный директор Sleepycat,
в интервью CNET. – В системах или устройствах, где вам
нужно надежно и быстро хранить данные, вы можете зара-
нее предугадать ее (СУБД) использование».

№2, февраль 2006 3


интервью

Free Software Foundation переходит


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

F
SF (Free Software Foundation) – не- лении (здесь и далее термины «тех- занных причин открытостью в том по-
коммерческая организация, ос- нология LinuxBIOS» и «платформа нятии, что мы пропагандируем.
нованная в конце 1985 года Ри- LinuxBIOS» равнозначны. – Прим. ав- Очевидно, что замена системно-
чардом Столлманом (Richard Stallman) тора). Но всё же остается очень мно- го проприетарного BIOS на открытый
для поддержки движения за свободное го работы. В современных ПЭВМ ис- LinuxBIOS сделает ПЭВМ более сво-
программное обеспечение, в частнос- пользуется определенное количество бодной, но свободной на 100% совре-
ти, проекта GNU. Организация из свое- firmware [2] (Firmware – программное менная ПЭВМ не будет. Надо понимать,
го фонда оплачивала создание свобод- обеспечение, которое внедрено в ап- что в настоящий момент эта цель недо-
ных программ до середины 90-х годов. паратное устройство. Например, про- стижима. Хотя, повторюсь, цель можно
Затем во многих компаниях намети- грамма, содержащаяся во FlashROM- достичь, но придется очень много по-
лась тенденция писать свободное ПО, или в ROM-чипе). работать в данном направлении.
поэтому сейчас сотрудники FSF заняты Есть системный проприетарный Другой аспект, который проявля-
в основном юридическими вопросами BIOS (Basic Input/Output System – ба- ется при переходе, заключается в сле-
в сообществе свободного ПО. зовая система ввода-вывода) [3], кото- дующем: LinuxBIOS, будучи аналогом
На вопросы журналиста отвечает рый может быть заменен на LinuxBIOS. системного проприетарного BIOS, за-
старший системный администратор Есть также VGA BIOS, который исполь- меняет большую часть функций пос-
организации FSF – Вард Вандеведж зуется в видеокартах. На некоторых леднего. Но LinuxBIOS не заменяет
(Ward Vandewege). машинах, например, Tyan S2881, при- функции VGA BIOS. Для серверных
сутствуют интегрированные контрол- решений отсутствие видеофункций не
Скажите, когда в FSF узнали о тех- леры сетевых карт. Код в указанных очень актуально, а вот для настоль-
нологии LinuxBIOS? контроллерах, а также в контролле- ных решений – это ключевой фактор.
Наша организация познакомилась рах IDE/SATA/SCSI (считайте для крат- Поэтому необходимо взять с сайта
с проектом LinuxBIOS достаточно дав- кости, что речь идет о жестких дисках), производителя архив системного BIOS
но, так как этот проект развивается проприетарный, т.е. закрытый. и распаковать его. Найти в нем (обычно
уже больше пяти лет. Мы даже начали Что следует понимать под проприе- это AwardBIOS или AMIBIOS. – Прим.
кампанию за свободный BIOS год на- тарным кодом? Это такое программное автора) файл VGA BIOS для встроен-
зад (см. «Campaign for Free BIOS» [1]). обеспечение, для которого существу- ной видеокарты и поместить его в ди-
ют различные ограничения, налагае- ректорию в LinuxBIOS. Затем пересоб-
Общеизвестно, что FSF – это флаг- мые разработчиками. Это могут быть рать образ LinuxBIOS с учетом исполь-
ман в движении за открытые техно- ограничения как технического харак- зования функций видеокарты. После
логии (Open Source). Переведя свое тера, например, запрет на тиражиро- этого получившийся образ LinuxBIOS
оборудование на LinuxBIOS, насколь- вание и распространение кода (в ком- записать во FLASH-память системной
ко ближе ваша организация окажет- мерческих или иных целях. – Прим. ав- платы, перезагрузиться и удостове-
ся к 100% свободному миру? тора), или же код поставляется только риться, что всё работает.
Вы знаете, многие путают термин «сво- в бинарном виде. (Настоятельно не рекомендуется
бодное ПО» (Free Software) с термином Ограничения юридического харак- воспринимать указанные манипуля-
«открытые исходные тексты» (Open тера подразумевают под собой: ли- ции как прямое руководство к дейс-
Source). Цель нашей организации – цензирование, подписание договоров твию. Во-первых, требуется опреде-
свобода для компьютерных пользова- о неразглашении информации (Non ленная техническая подготовка в дан-
телей, и она немного отличается от на- Disclosure Agreement) и другие спосо- ном вопросе. Во-вторых, следует убе-
правления команды, идущей с лозун- бы охраны авторского права в сфере диться, что ваше аппаратное обес-
гом Open Source. программного обеспечения. печение поддерживается LinuxBIOS –
Переход на платформу LinuxBIOS – Поэтому вы понимаете, что пропри- сделать это можно через список рас-
это большой шаг в правильном направ- етарный код не обладает в силу ука- сылки или на сайте проекта. В-третьих,

4
интервью
вы должны отдавать себе отчет в том, Если затрагивать функциональ- к Интернету. Что еще может переда-
что после перехода на эту платфор- ность, то в этом плане использование вать данный модуль, является загад-
му у вас может появиться значитель- LinuxBIOS в настольных машинах ве- кой. – Прим. автора.)
но больше вопросов, нежели до него. – роятнее всего более практично, неже- Вы также вряд ли сможете провес-
Прим. автора.) ли в серверах. Одно из преимуществ ти аудит кода, который используется
у LinuxBIOS – это очень быстрое вре- в проприетарном коде BIOS. По мере
Какие машины вы планируете пе- мя загрузки. Насколько нам известно, того как коммерческие BIOS стано-
ревести на платформу LinuxBIOS? пока не готова поддержка для како- вятся все более сложными, проблема
Будет затронуто всё оборудование го-либо ноутбука. Поэтому с грустью аудита их кода становится все более
или только веб-сервера и сервера можно констатировать, что перевести сложным вопросом. Что, если в коде
баз данных? ноутбуки на LinuxBIOS-платформу по- BIOS содержится функция отсылки по
Идеально было бы перевести все ка невозможно. электронной почте конкурентной сто-
то оборудование, которое у нас есть. роне ваших секретных данных?
Очевидно, что это займет определен- Для использования операционных И, наконец, вопрос надежности.
ное время, т.к. FSF некоммерческая систем, отличных от Linux, какой Здесь мы опять возвращаемся к про-
организация с ограниченным бюдже- вид загрузчиков (FILO/kboot/ADLO) блеме аудита исходного кода ком-
том, и многие из наших машин не могут больше всего подходит? мерческого BIOS. Предположим, что
быть переведены на эту технологию, У нас не слишком богатый опыт в дан- у нас работает приложение так назы-
т.к. просто-напросто это оборудование ном вопросе, т.к. мы проверяли за- ваемого класса высокой доступности
не числится в списке поддержки про- грузку Debian и Ubuntu. В качестве за- (high-availability) – например,сервер сис-
екта LinuxBIOS. Когда мы приобретаем грузчика выступал Etherboot, т.к. FILO темы управления полетом или управ-
новое оборудование, мы стремимся вы- не позволяет пока загрузиться с SATA- ления атомной станцией. Разве вам не
брать «совместимое с LinuxBIOS». дисков. Что касается остальных за- захочется быть абсолютно уверенным
На повестке дня у нас стоит заме- грузчиков, то мы их не пробовали ис- в надежности программного кода, кото-
на серверов. Мы планируем развер- пользовать. рый выполняет ваш компьютер? В этом
нуть 2 или 3 новых сервера в ближай- аспекте также можно рассматривать
шие несколько месяцев. Все они идут Как вы считаете, каким органи- LinuxBIOS в качестве надежной альтер-
на замену устаревшего парка, и их мы зациям сейчас стоит переходить нативы существующим решениям.
собираемся перевести на LinuxBIOS- на LinuxBIOS? Пока что количество пользователей
платформу. Это интересный вопрос. На сегодня ос- LinuxBIOS, честно говоря, ограничено.
новными пользователями LinuxBIOS Но по мере того как проект взрослеет,
Могли бы вы перечислить их аппа- являются те, кто работает с класте- и по мере роста актуальности безопас-
ратную начинку? рами. Использование LinuxBIOS поз- ности данных в компьютерной среде
Мы приобрели сервера Tyan Transport воляет достичь отличных результатов я подозреваю, что LinuxBIOS привле-
GX28 со следующей начинкой: в плане контроля за аппаратной час- чет к себе повышенное внимание.
 Материнская плата: Tyan S2881. тью кластеров. Тот факт, что коммерческие про-
 CPU: 2x AMD Dual-core Opteron 270. Существует также проблема обес- изводители начинают внедрять в код
 HDD: 4x WD Digital Raptor 74GB 10k печения безопасности. В условиях, где BIOS неприятные DRM-функции (Digital
RPM. необходима высокая безопасность, Rights Management), послужит еще од-
 RAM: 4GB Corsair ECC RAM. вы вряд ли позволите присутствовать ним толчком к переходу на LinuxBIOS.
программному обеспечению, имеюще- Мы считаем недопустимым, когда над
И Tyan, и AMD вносят сущест- му прямой доступ к аппаратуре. аппаратным обеспечением, кроме са-
венный вклад в развитие проекта (Речь идет не об операционных мого владельца, устананавливается
LinuxBIOS, поэтому мы рады покупать системах и драйверах, задача кото- контроль и сторонней компанией. Одна-
их оборудование. И эти серверы дейс- рых и состоит в «общении» с аппара- ко сейчас появляется возможность пол-
твительно очень быстрые! турой. Здесь имеются в виду недоку- ностью контролировать аппаратуру, пе-
ментированные функции и несанк- рейдя на платформу LinuxBIOS.
С вашей точки зрения, годится ли ционированный доступ к аппаратной
сейчас LinuxBIOS для использова- части. Например, известная эпопея Ссылки:
ния в настольных решениях? с системами безопасности ноутбуков 1. ht tp : / / w w w.fsf.org /c ampaigns / free -
Сейчас на рынке присутствует доста- PhoenixNet и CompuTrace – когда в ко- bios.html.
точно много наименований оборудо- де BIOS присутствует дополнительный 2. http://en.wikipedia.org/wiki/Firmware.
вания, для которого возможен пере- модуль, который может установить- 3. http://ru.wikipedia.org/wiki/BIOS.
ход на LinuxBIOS. Например, материн- ся в ОС на базе Windows NT. Его за- 4. http://www.linuxbios.org.
ские платы на базе чипов AMD, неко- дача – блокирование ноутбука в слу- 5. http://kboot.sourceforge.net.
торые из серий VIA EPIA. Предлагаю чае похищения по запросу владель- 6. http://te.to/~ts1/filo.
ознакомиться с сайтом LinuxBIOS [4], ца к производителю. Предполагает- 7. http://linuxbios.org/index.php/ADLO.
чтобы узнать, поддерживается ли ва- ся, что похищенный ноутбук будет за- 8. http://en.wikipedia.org/wiki/Proprietary_
ша материнская плата или нет. блокирован при первом подключении software.

№2, февраль 2006 5


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

Вы всё ещё не используете WMI?


Часть II: пишем сценарии

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

Пишем сценарии Листинг 1. VBScript


с использованием WMI strComputer = "."
Еще раз взгляните на изображение Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery( _
архитектуры WMI, которое я помес- "SELECT * FROM Win32_NetworkAdapterConfiguration",,48)
тил в начало первой части статьи [1], For Each objItem in colItems
Wscript.Echo "-----------------------------------"
рис. 1. Обратите внимание, что доступ Wscript.Echo "Win32_NetworkAdapterConfiguration instance"
к WMI может осуществляться через Wscript.Echo "-----------------------------------"
If isNull(objItem.IPAddress) Then
интерфейсы COM+ и .NET Framework. Wscript.Echo "IPAddress: "
Это означает, что любой язык програм- Else
Wscript.Echo "IPAddress: " & Join(objItem.IPAddress, ",")
мирования, который поддерживает End If
взаимодействие с Microsoft Windows Next
COM+ и .NET Framework, может ис- Листинг 2. VB.NET
пользоваться для работы с WMI. К пе-
Imports System
речню таких языков, в частности, от- Imports System.Management
носятся: VBScript, Visual Basic и Visual Imports System.Windows.Forms
Basic .NET, Java Script, Python, Perl, Namespace WMISample
PHP, C#, C++, Pascal, TCL и другие.
Public Class MyWMIQuery
Обращение к объектам и методам
WMI в разных языках может немного Public Overloads Shared Function Main() As Integer
отличаться из-за специфики синтак- Try
сиса работы с объектами и типами для Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
каждого конкретного языка, но в целом "SELECT * FROM Win32_NetworkAdapterConfiguration")
все приемы очень сходны.
For Each queryObj As ManagementObject in searcher.Get()
Для иллюстрации приведу несколь-
ко примеров (см. листинги 1-6). Озна- Console.WriteLine("-----------------------------------")
Console.WriteLine("Win32_NetworkAdapterConfiguration instance")
комившись с ними, очевидно, что не- Console.WriteLine("-----------------------------------")
важно, какой язык вы выберите, ра-
If queryObj("IPAddress") Is Nothing Then
бота с WMI из любого языка програм- Console.WriteLine("IPAddress: {0}", queryObj("IPAddress"))
мирования не вызывает затруднений. Else
Dim arrIPAddress As String()
Поэтому используйте тот язык написа- arrIPAddress = queryObj("IPAddress")
ния сценариев, который вам лучше из- For Each arrValue As String In arrIPAddress

6
администрирование
Console.WriteLine("IPAddress: {0}", arrValue) вестен и которым вам больше нравит-
Next
End If ся пользоваться.
Next
Catch err As ManagementException
MessageBox.Show("An error occurred while querying for WMI data: ↵ Строим moniker string
" & err.Message) Теперь более четко определимся,
End Try
End Function что такое moniker string? Дословный
End Class перевод этого словосочетания мог бы
End Namespace
звучать примерно так: строка-прозви-
Листинг 3. C# ще или строка-кличка. По смыслу же
using System; это некое специальное имя (ссылка)
using System.Management; для обращения к объектам или клас-
using System.Windows.Forms;
сам объектов WMI. Формат этой строки
namespace WMISample фактически представляет собой раз-
{
public class MyWMIQuery новидность URL (Universal Resource
{ Locator). Все moniker string начинают-
public static void Main()
{ ся с отличительного идентификато-
try ра Winmgmts:. Эта часть moniker string
{
ManagementObjectSearcher searcher = является обязательной. Далее фор-
new ManagementObjectSearcher("root\\CIMV2", мат зависит от того, как мы хотим об-
"SELECT * FROM Win32_NetworkAdapterConfiguration");
ращаться к объекту.
foreach (ManagementObject queryObj in searcher.Get()) Например, вот так:
{
Console.WriteLine("-----------------------------------");
Console.WriteLine("Win32_NetworkAdapterConfiguration instance"); Winmgmts://server01/root/cimv2: ↵
Console.WriteLine("-----------------------------------"); Win32_OperatingSystem

if(queryObj["IPAddress"] == null) В приведенном примере server01 –


Console.WriteLine("IPAddress: {0}", queryObj["IPAddress"]);
else это, как вы уже догадались, сетевое имя
{ компьютера, на котором мы хотим полу-
String[] arrIPAddress = (String[])(queryObj["IPAddress"]);
foreach (String arrValue in arrIPAddress) чить доступ к объекту WMI. Если указать
{ вместо сетевого имени символ «.» (точ-
Console.WriteLine("IPAddress: {0}", arrValue);
} ка), то подключение будет происходить
} к локальному компьютеру. Root/CIMv2 –
}
} это пространство имен репозитория
catch (ManagementException e) WMI (по аналогии очень похоже на вир-
{
MessageBox.Show("An error occurred while querying for WMI data: ↵ туальный каталог веб-сервера). Под-
" + e.Message); робнее пространства имен я опишу чуть
}
} ниже. После двоеточия идет наимено-
} вание класса WMI, к объектам которо-
}
го мы хотим обратиться. В данном при-
Листинг 4. Perl мере это класс Win32_OperatingSystem.
use strict; Следует заметить, что в moniker string
use Win32::OLE('in'); можно использовать не только прямую
use constant wbemFlagReturnImmediately => 0x10; наклонную черту, но и обратную, так что
use constant wbemFlagForwardOnly => 0x20; строки «winmgmts://server01/root/cimv2»
my $computer = "."; и «winmgmts:\\server01\root\cimv2» оди-
наковы.
my $objWMIService = Win32::OLE->GetObject("winmgmts:\\\\$computer\\root\\CIMV2") ↵
or die "WMI connection failed.\n"; При подк лючении к репозито-
my $colItems = $objWMIService->ExecQuery("SELECT * FROM ↵ рию WMI необязательно указы-
Win32_NetworkAdapterConfiguration", "WQL", ↵
wbemFlagReturnImmediately | wbemFlagForwardOnly); вать имя локального сервера точ-
кой. Строка может выглядеть и так:
foreach my $objItem (in $colItems) {
print "-----------------------------------"\n"; «WinMgmts:root/CIMv2». Если в строке
print "Win32_NetworkAdapterConfiguration instance"; moniker-string имя сервера не указано,
print "-----------------------------------\n";
print "IPAddress: " . join(",", (in $objItem->{IPAddress})) . "\n"; то подключение произойдет и к локаль-
} ному репозиторию WMI. Точно так же,
Листинг 5. JScript как и в случае использования строки
«WinMgmts://./root/CIMv2».
var wbemFlagReturnImmediately = 0x10;
var wbemFlagForwardOnly = 0x20;
Пространства имен WMI
var strComputer = ".";
Что же такое WMI namespace (про-
var objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\CIMV2"); странство имен WMI)? Пространс-

№2, февраль 2006 7


администрирование
var colItems = objWMIService.ExecQuery("SELECT * FROM ↵ свойство. Нажмите кнопку «Search
Win32_NetworkAdapterConfiguration", "WQL", ↵ for Property Values». Вы увидите все
wbemFlagReturnImmediately | wbemFlagForwardOnly);
варианты значений этого свойства
var enumItems = new Enumerator(colItems); для всех экземпляров объектов клас-
for (; !enumItems.atEnd(); enumItems.moveNext()) {
var objItem = enumItems.item(); са «Win32_TerminalServiceSetting». На-
жмите кнопку «Execute Code». Откро-
WScript.Echo("-----------------------------------");
WScript.Echo("Win32_NetworkAdapterConfiguration instance"); ется окно командной строки, где будет
WScript.Echo("-----------------------------------"); выведен результат работы скрипта.
try { WScript.Echo("IPAddress: " + (objItem.IPAddress.toArray()).join(",")); } Если опция «Remote Desktop» вклю-
catch(e) { WScript.Echo("IPAddress: null"); } чена, то будет отображена 1, в против-
}
ном случае 0. Проверьте в свойствах
Листинг 6. WMIC вашей системы, что результат работы
wmic nicconfig get IPAddress /value скрипта совпадает с тем, как установ-
лена опция «Remote Desktop».
тво имен WMI – это раздел (директо- В стандартной инсталляции Windows Теперь откройте закладку «Execute
рия) репозитория WMI, которая при- по умолчанию выбрано пространство a method». Снова выберите класс «Win32_
звана группировать классы и объек- имен root\cimv2. TerminalServiceSetting». В списке мето-
ты WMI по назначению, а также опре- дов выберите «SetAllowTS Connections»,
делять атрибуты безопасности при до- Знакомство с WMI Code как это показано на рис. 3.
ступе к классам и объектам в каждом Creator 1.0 З а т е м в с п и с ке « M e t h o d [ i n ]
таком контейнере. Фактически это, Теперь давайте познакомимся с од- parameters» установите значение
как уже отмечалось выше, полная ана- ной из наиболее удобных и функцио- «AllowTSConnections» противополож-
логия с директориями на веб-сервере нальных утилит для системного адми- ное от того, что мы получили на пре-
(см. рис. 1). Все пространства имен нистратора – WMI Code Creator 1.0 [2]. дыдущем шаге. Для этого ну жно
начинаются с корня, который в WMI На мой взгляд, сочетаемый этой ути- просто кликнуть мышью на входной
обозначается ключевым словом root. литой функционал и удобство превос- параметр метода. Нажмите кноп-
После имени корня через косую черту ходят все остальные описанные мной ку «Execute Code». Откроется кон-
указывается пространство имен. Про- ранее утилиты. В упражнении с этой сольное окно, в котором будет вы-
странства имен могут быть вложен- утилитой мы будем решать задачу дано значение, возвращенное ме-
ными. Пример того, как выглядит про- управления опцией Remote Desktop тодом SetAllowTSConnections. Если
странство имен: root/mynamespace/ в свойствах системы, которая позво- все прошло удачно – это будет 0. Те-
subnamespace. Подавляющее боль- ляет разрешить или запретить уда- перь проверьте, изменилась ли опция
шинство классов и объектов, которые ленные подключения к рабочему сто- «Remote Desktop» в свойствах вашей
интересуют вас, размещается в про- лу для задач администрирования. системы.
странстве имен root/CIMv2. Этот пример будет работать только Обратите внимание на то, что вы
Одно из существующих в Windows на ОС Windows XP и новее, а также можете очень быстро получить кон-
пространств имен WMI может быть на Windows 2000 Server с установлен- текстную справку из библиотеки MSDN
выбрано по умолчанию. Это означает, ными службами терминалов. по выбранному классу WMI, щелкнув
что если вы попытаетесь подключить- Для начала скачайте и распа- мышью по ссылке: «Get Documentation
ся к этому хосту, не указав в moniker- куйте эту утилиту. Запустите файл for this class from the online MSDN
string необходимое пространство имен, WMICodeCreator.exe и выберите в ме- Library».
то вы автоматически будете подклю- ню «Code Language Visual Basic Script».
чены к выбранному по умолчанию. Затем проверьте в меню «Target Краткий обзор вопросов
Computer», что установлена опция безопасности WMI
«Local Computer». После этого удос- Если внимательно изучить схему архи-
товерьтесь, что у вас открыта заклад- тектуры WMI, которую я приводил в на-
ка «Query for data from WMI class», чале статьи, то легко заметить, что все
и на этой закладке выберите класс взаимодействие с ядром WMI проис-
«Win32_TerminalServiceSetting». В на- ходит с использованием интерфейсов
боре свойств (properties) выделите COM+/DCOM. В свою очередь COM+
«AllowTSConnections», как это показа- и DCOM в качестве транспортного про-
но на рис. 2. токола используют RPC. Эта архитек-
Свойство «Win32_TerminalService турная особенность накладывает оп-
Setting.AllowTSConnections» определя- ределенный отпечаток на идеологию
ет состояние опции «Remote Desktop» системы безопасности WMI. В част-
в свойствах системы. В правом ок- ности, для людей, знакомых с техноло-
не вы увидите скрипт, который сге- гиями DCOM и COM+, слова «импер-
нерировала утилита для того, чтобы сонация» и «делегирование» не новы.
Рисунок 1. Дерево пространств
имен WMI вывести на экран выбранное вами Однако среди читателей большинс-

8
администрирование
тво – системные администраторы,
а не программисты, поэтому я поста-
раюсь уделить некоторое внимание
этим вопросам.
Для того чтобы некая учетная за-
пись имела возможность подклю-
чаться к репозиторию WMI, необхо-
димо дать ей соответствующие пра-
ва. Права, как вы уже могли дога-
даться, нужно дать как на пространс-
тво имен – WMI name space (восполь-
зовавшись оснасткой wmimgmt.msc),
так и на DCOM-приложения диспет-
чера WMI – CIM Object Manager (вос-
пользовавшись оснасткой управле-
ния COM+ comexp.msc или утилитой
dcomcnfg.exe). Вот минимальный спи-
сок приложений DCOM, права на ко- Рисунок 2. Окно утилиты WMI Code Creator 1.0 с открытой закладкой Query
торые необходимы для удаленной ра-
боты с WMI: Windows Management and
Instrumentation, Microsoft WMI Provider
Subsystem Host. Некоторые сведения
по вопросам настройки прав доступа
к WMI и сетевой безопасности вы мо-
жете почерпнуть из статьи Microsoft
Knowledge Base KB875605 или из биб-
лиотеки MSDN [3]. Права на другие
DCOM-приложения могут понадобить-
ся в зависимости от используемого ре-
жима имперсонации.

Имперсонация
Зачем нужна имперсонация? Все до-
вольно просто, это метод, при кото-
ром для подключения к ресурсу про-
цесс (поток) или система должны ис-
Рисунок 3. Окно утилиты WMI Code Creator 1.0 с открытой закладкой Execute
пользовать не свой контекст безопас-
ности, а учетные данные другого субъ- обладать привилегией создания мар- В случае с WMI делегирование
екта безопасности. Представьте, что керов доступа). может выглядеть так – мы, работая
некая служба, запущенная в контек- Бывает чуть более сложный вари- на станции администратора, подклю-
сте безопасности LocalSystem, долж- ант имперсонации – делегирование. чаемся по WMI к некому серверу и за-
на выполнить действие от лица другой Этот вариант необходим тогда, ког- пускаем на нем процесс с помощью ме-
учетной записи (например, от лица те- да подключение к конечному ресурсу тода Execute класса Win32_Process. Те-
кущего зарегистрированного на ком- выполняется не самим субъектом бе- перь представим, что этот процесс есть
пьютере пользователя). В этом случае зопасности (в нашем примере – служ- не что иное, как другой скрипт WMI, ко-
ей необходимо создать специальный бой от лица пользователя), а через торый подключается к еще одному хос-
маркер доступа (Access Token), опи- посредника (например, промежуточ- ту в сети для того, чтобы сделать ка-
сывающий контекст безопасности той ный сервер). Представьте ситуацию, кие-то действия. Если мы не восполь-
учетной записи, под которой мы хотим что интернет-пользователь подключа- зуемся делегированием, то на конеч-
выполнить указанное действие. Без- ется не напрямую к базе данных, а че- ной машине скрипт будет запущен
условно, для того чтобы создать та- рез веб-приложение на третьем сер- в контексте безопасности учетной за-
кой маркер доступа, этой службе не- вере. Для осуществления такого под- писи промежуточного сервера, что да-
обходимо знать учетные данные это- ключения веб-приложение должно по- леко не всегда желаемо. С другой сто-
го пользователя или, если этот про- лучить от субъекта безопасности (на- роны, подобная ситуация с делегиро-
цесс происходит на локальной маши- шей службы) маркер доступа с правом ванием в реальной жизни требуется
не, получить копию маркера доступа делегирования – это позволит веб-при- крайне редко.
зарегистрированного локально поль- ложению использовать маркер досту- В таблице 1 представлены под-
зователя (безусловно, для этого кон- па субъекта безопасности уже при под- держиваемые уровни имперсонации
текст безопасности службы должен ключении к базе данных. WMI.

№2, февраль 2006 9


администрирование
Таблица 1. Уровни имперсонации (привилегии пользователей), доступные в консоли безопас-
Уровень имперсонации Описание ности системы и групповых политиках домена. Ряд действий
Анонимный уровень имперсонации COM, маскирую- с операционной системой можно проделать только при на-
Anonymous
1
щий учетную запись вызывающего. Вызов WMI с этим личии у пользователя или группы, куда он входит, той или
уровнем имперсонации может завершиться ошибкой
иной привилегии. К таким действиям относятся, например,
Default перезагрузка системы (завершение ее работы), восстанов-
Уровень имперсонации по умолчанию
0
ление состояния системы из резервной копии или смена
Уровень имперсонации COM – делегирование. Разре-
шает использовать другим объектам учетные данные системного времени.
Delegate вызывающего субъекта для обращения к третьим объ- Поскольку с использованием WMI можно выполнить все
4 ектам. Этот уровень может дать неоправданно высо-
кие привилегии промежуточному объекту. Поддержи- эти действия, разработчики WMI заложили дополнитель-
вается только на Windows 2000 и выше ный механизм защиты. Смысл его в следующем: даже ес-
Уровень имперсонации COM – идентификация. Позво- ли учетная запись пользователя обладает необходимыми
Identify ляет объектам вызова запрашивать учетные данные
2 у вызывающего субъекта. Вызов WMI с этим уровнем для действия с системой привилегиями, он все равно не
имперсонации может завершиться с ошибкой сможет выполнить это действие, пока явно не активирует
Уровень имперсонации COM – обычная имперсонация. эту привилегию перед выполнением действия. В частнос-
Позволяет вызываемому объекту использовать учет- ти, если администратор запустит скрипт WMI, запраши-
Impersonate
ные данные вызывающего субъекта для совершения
3 вающий перезагрузку системы, этого все равно не про-
только своих действий. Это рекомендуемый уровень
имперсонации изойдет, пока в скрипте не будет явно активирована эта
Таблица 2. Варианты аутентификации и проверки целостности привилегия.
Уровень аутентификации Описание Список привилегий и их численных кодов указан в таб-
Call Call-level COM authentication. лице 3.
Call Аутентификация в начале каждого вызова Для каждой привилегии указано три имени: первое имя –
3 объекта WMI
это константы для использования в скриптах VBScript, вто-
Connect-level COM authentication. рое имя – это символические константы языка С++, третье
Connect
Аутентификация только при установлении соедине-
Connect имя привилегии – это имя, использующееся при составле-
ния с сервером WMI. Одни учетные данные использу-
2
ются для всего сеанса взаимодействия нии moniker string.
Default
WMI использует настройки аутентификации COM Каким образом активировать эти привилегии, показа-
Default
0
по умолчанию но в примерах из раздела «Подключение к удаленным ком-
None пьютерам». Важно запомнить, что активировать привилегии
None Аутентификация COM не используется нужно до подключения к репозиторию WMI, а не после.
1

Packet
Packet-level COM authentication.
Аутентификация всех данных, получаемых от кли-
Подключение к удаленным компьютерам
Pkt Подключение к другим компьютерам по сети чаще всего
ента, с подтверждением подлинности отправителя
4
для каждого RPC-пакета вызывает проблемы у тех, кто только начинает осваивать
PacketIntegrity Packet Integrity-level COM authentication. технологию WMI и программирование с ее использовани-
PktIntegrity Аутентификация и проверка целостности передавае-
5 мых данных для каждого RPC-пакета ем. Поэтому я считаю необходимым привести примеры кода
PacketPrivacy Packet Privacy-level COM authentication.
на VBScript, которые позволяют решать эту задачу, и кратко
PktPrivacy Аутентификация, проверка целостности и шифрова- пояснить их. Единственное, что необходимо запомнить, так
6 ние данных каждого передаваемого RPC-пакета
это то, что запрещается подключаться к репозиторию WMI
на локальном компьютере, используя другую учетную за-
Аутентификация пись (не ту, под которой происходит обращение к CIM Object
Аутентификация, целостность и конфиденциальность явля- Manager). Это ограничение обычно решается использова-
ются неотъемлемыми характеристиками безопасного вза- нием утилиты RunAs и ей подобных методов.
имодействия систем по сети. При использовании WMI под- Вариант подключения с использованием маркера до-
держиваются перечисленные в таблице 2 уровни аутенти- ступа произвольной учетной записи:
фикации и проверки подлинности. Наиболее часто упот-
ребимый уровень – Connect (аутентификация и автори- strComputer = "server01"
зация при вызове). Однако если вы хотите предотвратить Set objLocator = CreateObject("WbemScripting.SWbemLocator")
возможное изменение передаваемых данных или их пере- objLocator.Security_.AuthenticationLevel = 3
objLocator.Security_.Privileges.Add(18)
хват методом men in the middle, то лучшим выбором могут
являться режимы Pkt (проверка аутентичности клиента), Set objWMIService = objLocator.ConnectServer(_
strComputer, "root\cimv2", ↵
PktIntegrity (проверка аутентичности клиента и целостнос- "mydomain\administrator", "password")
ти передаваемых данных) и PktPrivacy (проверка аутентич-
objWMIService.Security_.ImpersonationLevel = 3
ности клиента и шифрование передаваемых данных с про-
веркой целостности). Set colItems = objWMIService.ExecQuery(_
"SELECT * FROM Win32_OperatingSystem",,48)

Привилегии For Each objItem in colItems


Wscript.Echo "-----------------------------------"
Администраторам Windows хорошо известны настройки бе- Wscript.Echo "Win32_OperatingSystem instance"
зопасности системы и их раздел «User Right Assignments» Wscript.Echo "-----------------------------------"

10
администрирование
Wscript.Echo "Caption: " & objItem.Caption Таблица 3. Привилегии
Wscript.Echo "Name: " & objItem.Name
Привилегии Описание
Rem Первый вариант вызова метода Reboot() wbemPrivilegeCreateToken
Set objOutParams = objWMIService.ExecMethod(_ SeCreateTokenPrivilege
"Win32_OperatingSystem.Name='" & CStr(objItem.Name) ↵ CreateToken
Привилегия требуется для создания основного
& "'", "Reboot") 1
токена безопасности процесса
0x1
Rem Второй вариант вызова метода Reboot()
objItem.Reboot() wbemPrivilegePrimaryToken
Next SeAssignPrimaryTokenPrivilege
Привилегия требуется для замены (назначения
AssignPrimaryToken
нового) основного токена безопасности процесса
Обратите внимание, что для того, чтобы перезагрузить 2
0x2
удаленный компьютер, нам необходимо явно активировать
эту привилегию. Кроме того, в этом примере мы используем wbemPrivilegeLockMemory
Привилегия требуется для закрепления соответс-
SeLockMemoryPrivilege
для подключения к удаленному компьютеру учетные данные 3
твия между страницами физической памяти и логи-
ческого адресного пространства
отличные от тех, под которыми запущен данный скрипт. 0x3

Другой вариант подключения с использованием теку- wbemPrivilegeIncreaseQuota


SeIncreaseQuotaPrivilege
щего маркера доступа и moniker string: IncreaseQuotaPrivilege
Привилегия требуется для назначения квот
процессу
4
strComputer = "server01" 0x4
wbemPrivilegeMachineAccount
Set objWMIService = GetObject(_ SeMachineAccountPrivilege
"WinMgmts:{impersonationLevel=Impersonate, ↵ MachineAccount
Привилегия требуется для создания учетной
authenticationLevel=Call, (Shutdown)}!//" ↵ 5
записи компьютера
& strComputer & "/root/cimv2") 0x5
Set colItems = objWMIService.ExecQuery(_ wbemPrivilegeTcb
"SELECT * FROM Win32_OperatingSystem",,48) SeTcbPrivilege
Привилегия обозначает ее владельца как часть
Tcb
For Each objItem in colItems 6
Trusted Computer Base
Wscript.Echo "-----------------------------------" 0x6
Wscript.Echo "Win32_OperatingSystem instance"
Wscript.Echo "-----------------------------------" wbemPrivilegeSecurity
Привилегия требуется для выполнения ряда функ-
Wscript.Echo "Caption: " & objItem.Caption SeSecurityPrivilege
ций, связанных с безопасностью, например про-
Wscript.Echo "Name: " & objItem.Name Security
смотр журналов аудита. Привилегия определяет
7
её владельца как Security Operator
Rem Первый вариант вызова метода Reboot() 0x7
Set objOutParams = objWMIService.ExecMethod(_
wbemPrivilegeTakeOwnership
"Win32_OperatingSystem.Name='" & CStr(objItem.Name) ↵
SeTakeOwnershipPrivilege Привилегия требуется для получения права вла-
& "'", "Reboot")
TakeOwnership дельца объекта на объекты безопасности в отсутс-
8 твии явных на то разрешений
Rem Второй вариант вызова метода Reboot()
0x8
objItem.Reboot()
Next wbemPrivilegeLoadDriver
SeLoadDriverPrivilege
Привилегия требуется для загрузки и выгрузки
LoadDriver
драйверов устройств
В данном примере мы познакомились с еще одной воз- 9
0x9
можностью, заложенной в moniker string. Мы можем вклю-
wbemPrivilegeSystemProfile
чать в строку moniker string в фигурных скобках «{ }» пара- SeSystemProfilePrivilege
Привилегия требуется для сбора профилирующей
метры имперсонации, аутентификации и набор использу- SystemProfile
информации всей системы
10
емых привилегий. Таким образом, полный формат moniker 0xA
string можно было бы записать так:
wbemPrivilegeSystemtime
SeSystemtimePrivilege
Привилегия требуется для изменения системно-
Winmgmts:{ <security settings>, (<privileges>) } ↵ Systemtime
го времени
!//<server>/<namespace>:<Class | Object> 11
0xB
Есть и еще не описанные мной поля в формате moniker wbemPrivilegeProfileSingle
string, но поскольку они довольно редко нужны на практи- Process
SeProfileSingleProcessPri
ке, то я рекомендую желающим ознакомиться с ними по vilege Привилегия требуется для сбора профилирующей
оригинальной документации на сайте Microsoft [3] само- ProfileSingleProcess информации для одного процесса
12
стоятельно. 0xC

События WMI и уведомляющие запросы wbemPrivilegeIncreaseBase


Priority
События WMI – это очень удобный и эффективный меха- SeIncreaseBasePriorityPri
Привилегия требуется для увеличения базового
низм выявления изменений в системе и экземплярах объ- vilege
проиритета процесса
IncreaseBasePriority
ектов WMI. Представьте, что вы хотите написать скрипт, ко- 13
торый будет реагировать на какое-либо системное событие. 0xD
Например, на запуск процесса или на перезагрузку систе-
мы или, скажем, на изменение конфигурации сетевого ин- wbemPrivilegeCreatePagefile
SeCreatePagefilePrivilege
терфейса. Если бы не было событий WMI, вам бы пришлось Привилегия требуется для создания и (или) изме-
CreatePagefile
нения файла подкачки
написать скрипт, который опрашивал бы состояние интере- 14
0xE
сующего вас свойства определенного экземпляра объекта

№2, февраль 2006 11


администрирование
Таблица 3. Привилегии (продолжение) фективное решение этого вопроса. И, как вы уже догада-
Привилегии Описание лись, – это события WMI и уведомляющие запросы.
wbemPrivilegeCreatePerm Обработка событий может быть синхронной и асинх-
anent ронной. Синхронная обработка событий – это когда про-
SeCreatePermanentPrivilege Привилегия требуется для создания постоянного
CreatePermanent общего объекта цесс ожидает события и более ничем не занят. Обычно это
15 ожидание – бесконечный цикл проверки условия: поступи-
0xF
ло событие или нет. Асинхронная обработка подразумева-
wbemPrivilegeBackup ет, что процесс регистрирует обработчик события (подпи-
SeBackupPrivilege
Привилегия требуется для выполнения резервно- сывается на событие) и далее продолжает выполнять раз-
Backup
го копирования
16 личные задачи. Когда событие возникает, нормальная ра-
0x10
бота процесса прерывается, запоминается место, где про-
wbemPrivilegeRestore Привилегия требуется для выполнения операции
SeRestorePrivilege восстановления. Эта привилегия позволяет ее вла- изошло прерывание, а управление передается на зарегис-
Restore дельцу устанавливать для любого объекта произ- трированный обработчик событий. После обработки собы-
17 вольный существующий SID в качестве владель-
0x11 ца объекта тия обработчиком, управление возвращается на то дейс-
wbemPrivilegeShutdown
твие основного процесса, которое было прервано.
SeShutdownPrivilege
Привилегия требуется для перезагрузки и завер-
Оба приведенных ниже скрипта отслеживают запуск
Shutdown
18
шения работы ОС процесса с именем cmd.exe. Однако между ними все же
0x12 есть различие.
wbemPrivilegeDebug Приведенный ниже скрипт (первый из двух) использу-
SeDebugPrivilege ет синхронную технику уведомляющего запроса для со-
Debug Привилегия требуется для отладки процессов
19 здания экземпляра объекта Win32_ProcessStartTrace, ко-
0x13 торый отвечает за отслеживание событий запуска процес-
wbemPrivilegeAudit сов о системе. Каждый раз, когда в системе порождается
SeAuditPrivilege
Audit
Привилегия требуется для записи в журналы процесс с именем cmd.exe, метод NextEvent возвращает уп-
аудита
20 равление скрипту.
0x14
wbemPrivilegeSystemEnvir strComputer = "."
onment
Привилегия требуется для модификации энергоне- Set objWMIService = GetObject("winmgmts:\\" ↵
SeSystemEnvironmentPrivilege
зависимой памяти в тех системах, которые исполь- & strComputer & "\root\CIMV2")
SystemEnvironment
зуют ее для хранения своей конфигурации
21 Set objEvents = objWMIService.ExecNotificationQuery _
0x15 ("SELECT * FROM Win32_ProcessStartTrace ↵
WHERE ProcessName = 'cmd.exe'")
wbemPrivilegeChangeNotify Привилегия требуется для получения нотифика-
SeChangeNotifyPrivilege ций об изменении файлов и директорий. Так же
Wscript.Echo "Waiting for events ..."
ChangeNotify эта привилегия отменяет перекрестную провер-
Do While(True)
22 ку доступа к файлам и папкам. Эта привилегия
Set objReceivedEvent = objEvents.NextEvent
0x16 по умолчанию дана всем пользователям
wbemPrivilegeRemoteShu Wscript.Echo "CMD.EXE started"
tdown
SeRemoteShutdownPrivilege Привилегия требуется для завершения работы ОС Loop
RemoteShutdown по сети
23
0x17 Второй скрипт, который приведен ниже, использует не-
wbemPrivilegeUndock
много другую синхронную технику. Этот метод более уни-
SeUndockPrivilege
Привилегия требуется для снятия компьютера
версальный, так как не завязан на специальный класс
Undock
24
с док-станции WMI Win32_ProcessStartTrace. С помощью уведомляю-
0x18 щего запроса отслеживается состояние всего пула объ-
wbemPrivilegeSyncAgent ектов класса Win32_Process. Каждый раз, когда в систе-
SeSyncAgentPrivilege
Привилегия требуется для вызова процедуры синх- ме порождается новый экземпляр объекта, принадлежа-
SyncAgent
25
ронизации службы каталога щего классу Win32_Process и полем Description, содержа-
0x19 щим строку cmd.exe, метод NextEvent возвращает управ-
wbemPrivilegeEnableDele ление скрипту.
gation
SeEnableDelegationPrivilege Привилегия требуется для доверия пользователям
EnableDelegation или группам при делегировании strComputer = "."
26 Set objWMIService = GetObject("winmgmts:\\" ↵
0x1A & strComputer & "\root\CIMV2")
wbemPrivilegeManageVolume Set objEvents = objWMIService.ExecNotificationQuery( ↵
SeManageVolumePrivilege
Привилегия требуется для операций обслуживания
"SELECT * FROM __InstanceCreationEvent WITHIN 1 ↵
ManageVolume
дисковых томов
WHERE (TargetInstance ISA 'Win32_Process') ↵
27 AND (TargetInstance.Description = 'cmd.exe')")
0x1B
Wscript.Echo "Waiting for events ..."
Do While(True)
WMI. Вам бы пришлось запускать такой скрипт с опреде- Set objReceivedEvent = objEvents.NextEvent
ленной периодичностью и сравнивать полученные значе-
Wscript.Echo "CMD.EXE started"
ния – согласитесь, в этом много бестолкового труда и из-
лишней траты системных ресурсов. Есть гораздо более эф- Loop

12
администрирование
Следует отметить, что скрипты WSH и ядро WMI поми-  инвентаризация программного обеспечения рабочих
мо синхронного ожидания событий позволяют асинхронно станций;
обрабатывать события и исключения. Вы можете не отда-  инвентаризация установленных и пропущенных обнов-
вать управления из скрипта менеджеру событий WMI и про- лений системного ПО;
должать выполнение необходимых действий. В то же вре-  группировка рабочих станций на основании данных ин-
мя, когда возникнет отслеживаемое вами событие, управ- вентаризации в коллекции;
ление будет передано на специальную подпрограмму скрип-  установка программного обеспечения на группы ком-
та, и будут выполнены необходимые действия. Это работа- пьютеров (коллекции);
ет так же, как прерывания или события форм в Visual Basic  установка операционных систем из образов на новые
или Visual Basic for Application. компьютеры и переустановка с сохранением профилей
Использование техники регистрации асинхронных со- пользователей на эксплуатируемых компьютерах;
бытий и их обработки требует детального изложения мате-  установка необходимых обновлений безопасности;
риала и не умещается в рамки этой статьи. Возможно, этот  выполнение на клиентских рабочих станциях задач об-
материал появится в виде отдельной статьи. Намекну лишь, служивания, оформленных в виде скриптов и/или ис-
что WMI Code Creator 1.0 позволяет легко создавать скрип- полняемых файлов;
ты для асинхронной обработки событий WMI.  управление мобильными устройствами PocketPC;
Есть еще один, принципиально иной способ обработки  определение частоты запуска указанных приложений;
событий с использованием WMI. С помощью создания эк-  отслеживание соответствия набора и версий програм-
земпляров объектов специальных классов (классов с об- много обеспечения на рабочих станциях заданным па-
щим названием Standard Event Consumers) отслеживать со- раметрам;
бытия и выполнять несколько типовых действий (отправка  формирование отчетов о рабочих станциях и серве-
уведомления по SMTP, запись в журнал событий, запись рах;
в текстовый файл, запуск приложения, запуск скрипта) во-  формирование отчетов о состоянии и работе самой сис-
обще без написания скриптов WSH. Однако об этом мето- темы;
де мы поговорим в другой раз.  оптимизация нагрузки на сеть при передаче дистрибу-
тивов и установке ПО на рабочие станции и серверы;
Продукты, использующие WMI  удаленная поддержка пользователей с использовани-
После знакомства с технологией WMI у читателей может ем Remote Tools, в состав которых входят: удаленное уп-
возникнуть желание начать разрабатывать собственные равление рабочим столом АРМ, передача файлов, уда-
скрипты и системы управления и мониторинга. Безусловно, ленная перезагрузка, интерактивное общение админис-
это похвальное желание, но, возможно, не стоит поступать тратора с пользователем и удаленная командная кон-
столь опрометчиво. Возможно, стоит оглянуться по сторо- соль;
нам и обнаружить, что уже многое сделано в этом направ-  обеспечение контроля доступа ко всем функциям и объ-
лении другими людьми и их решения успешно развива- ектам системы управления на базе SMS 2003 для авто-
ются. Для начала советую заглянуть в подборку скриптов ризованных пользователей.
в TechNet Script Center [4, 5]. Если все же вы не горите жела-
нием объединять разрозненные скрипты в единую систему Все эти функции SMS 2003 реализованы с использова-
управления и мониторинга и фактически изобретать велоси- нием технологии WMI. В частности, весь процесс инвента-
пед, советую вам обратить внимание на продукты Microsoft ризации, который производит агент SMS, представляет со-
SMS 2003 (http://www.microsoft.com/smserver) и Microsoft бой набор WMI-запросов.
Operations Manager 2005 (http://www.microsoft.com/mom). Все свои настройки и задания (Advertisements), а так-
же некоторые промежуточные результаты инвентаризации
SMS 2003 SP1 агент SMS также хранит в репозитории WMI в отдельном
Система управления изменениями и конфигурациями, пос- пространстве имен: root\CCM.
троенная на базе Microsoft Systems Management Server 2003,
представляет собой клиент-серверное распределенное при- MOM 2005 SP1
ложение. Клиентская часть устанавливается на управля- Система мониторинга на базе Microsoft Operations
емые рабочие станции и серверы и периодически запра- Manager 2005 позволяет решать следующие задачи:
шивает с сервера, входящего в состав системы SMS 2003,  обеспечение непрерывного наблюдения в реальном вре-
задания, которые затем выполняются на клиентской части мени за состоянием ИС компании и автоматическая ре-
ПО SMS 2003. Эти задания касаются как самих настроек гистрация инцидентов;
клиентской части, так и собственно задач, которые реша-  снижение времени, требуемого для оповещения дежур-
ет система SMS 2003. Основными задачами в сетях на ба- ной смены группы мониторинга об изменениях и сбоях,
зе продуктов Microsoft, решаемыми системой управления происходящих в ИС компании;
на базе SMS 2003, являются:  снижение количества незарегистрированных инциден-
 автоматизация процесса установки клиентской части тов;
системы SMS 2003 на рабочие станции;  обеспечение мониторинга всех компонентов ИС компа-
 инвентаризация аппаратного обеспечения рабочих стан- нии и распределенное по всем сегментам сети наблю-
ций; дение за их состоянием;

№2, февраль 2006 13


администрирование
 предоставление кратких рекомендаций администрато- Ко всему выше сказанному следует добавить еще то, что
рам системы по большинству событий, регистрируемых Windows XP и Windows Server 2003 поддерживают в груп-
системой мониторинга; повых политиках домена Active Directory технологию WMI
 обеспечение отказоустойчивости системы мониторин- Query Filtering. Что это такое? Это средство, которое позво-
га; ляет определять, какие групповые политики следует при-
 обеспечение возможности разделения административ- менять к каким рабочим станциям и пользователям на ос-
ных полномочий на участки системы мониторинга; нове результатов запросов WQL к WMI на том компьютере,
 возможность ведения корпоративной базы знаний по на котором должно выполняться применение этой полити-
инцидентам; ки. В частности, в сочетании с Software Distribution Policy
 выявление взаимосвязей между возникающими инци- вы можете сделать так, чтобы офисный пакет Office 2003
дентами и источниками проблем. мог устанавливаться только на те машины, которые име-
ют определенный объем ОЗУ и свободного пространства
Система мониторинга представляет собой клиент-сер- на жестком диске. Или, скажем, устанавливать очередной
верное распределенное приложение. На целевые серверы Service Pack через групповую политику только на те маши-
(те серверы прикладных систем, на которых осуществляет- ны, у которых на жестком диске имеется не менее 2 Гб сво-
ся мониторинг) устанавливается специальное программное бодного пространства. И все это делается одной простой
обеспечение – агент системы мониторинга MOM 2005. Аген- строкой WQL-запроса:
ты системы мониторинга получают свои настройки и прави-
ла (политики) мониторинга с управляющих серверов. Select * from Win32_LogicalDisk where FreeSpace > 2147483648
Для каждого сервера, за которым ведет наблюдение
его агент, в зависимости от установленного на него про- Теперь заглянем немного в ближайшее будущее. В об-
граммного обеспечения применяется свой набор правил ласти управления системами Windows Server Systems ком-
мониторинга. Правила мониторинга объединяются в группы пания Microsoft активно развивает свою новую инициативу
правил, которые применяются к группам компьютеров. Груп- – новый командный интерпретатор под кодовым названием
пы компьютеров содержат целевые системы мониторинга, MONAD [7]. Это очень гибкий и удобный интерпретатор ко-
которые туда добавляются либо автоматически на основа- манд, который будет встроен в следующую версию Microsoft
нии данных из реестра целевых систем, либо вручную. Exchange E12 и Longhorn Server, а также он может быть ус-
Множество правил мониторинга, которые использует тановлен на любую ОС, поддерживающую .NET Framework
MOM 2005, представляют собой скрипты, использующие 2.0 (Windows 98, Windows 2000, Windows XP, Windows Server
WMI для получения и обработки данных о системе и ее 2003). В основе большинства элементов синтаксиса и не-
компонентах. которых принципов работы с MONAD лежат удачные нара-
ботки, полученные при разработке WMI и WMIC. Консоль
Что же дальше? управления MMC 3.0 также будет полностью поддержи-
«Ну, хорошо, – скажете вы. – Я прочитал эту статью, но что вать архитектуру MONAD, и множество функций управле-
мне это даст. Автор рассуждает о WMI, но у меня конкрет- ния, доступные из консоли, будут не чем иным, как скрип-
ные проблемы, решение которых я ищу, и чем конкретно тами MONAD.
мне в моих проблемах поможет WMI?» Да, пожалуй, этот Со временем предполагается, что интерфейсы управ-
вопрос заботит любого системного администратора, когда ления MONAD будут встроены во все продукты компании
ему приходится столкнуться с новой технологией и встать Microsoft, и, как вы понимаете, навыки, полученные при ра-
перед выбором использовать ее или нет. боте с WMI и WMIC, будут очень полезны всем системным
Я надеюсь, что этот вопрос возникнет лишь у небольшо- администраторам, работающим с Windows.
го числа читателей, поскольку я постарался отразить в этой
статье значимость и пользу технологии WMI, а так же ра- Ссылки и литература:
зобрать самые скользкие и сложные вопросы, возникаю- 1. Леонтьев К. Вы всё ещё не используете WMI? Часть1. – Журнал
щие при ее использовании. Но все же я отвечу и тем, у ко- «Системный администратор», №1, январь 2005 г. – 4-11 с.
го этот вопрос все-таки возник. Уважаемые коллеги, WMI – 2. WMI Code Creator 1.0 – http://download.microsoft.com/download/0/
это открытая технология, основанная на открытых стандар- c/a/0ca7691c-6335-4143-8f9f-6708969f8212/WMICodeCreator.
тах, которая использует все больше и больше программных zip.
продуктов различных производителей. Она позволяет сэко- 3. Windows Management Instrumentation – http://msdn.microsoft.
номить вам свое рабочее время и решать поистине слож- com/library/en-us/dnanchor/html/anch_wmi.asp.
ные задачи простым способом. Стандарт WBEM, на кото- 4. TechNet Script Center – http://www.microsoft.com/technet/
ром основан WMI, реализован на UNIX и Linux системах [6] scriptcenter/default.mspx.
и позволяет вам развивать гибкую и кроссплатформенную 5. Portable Script Center – http://www.microsoft.com/downloads/
систему управления и мониторинга сетью. details.aspx?FamilyID=b4cb2678-dafb-4e30-b2da-b8814fe2da5
Вы можете пойти двумя путями – либо приобрести го- a&DisplayLang=en.
товый продукт управления и мониторинга (практически 6. Проект OpenWBEM – http://www.openwbem.org.
все из них совместимы с WBEM и WMI), а можете создать 7. Microsoft Shell (MSH) – MONAD beta 3 – http://www.microsoft.com/
свое средство, но в обоих случаях знания по WMI вам обя- downloads/details.aspx?FamilyID=e8e5203a-574c-4105-af6b-b2f
зательно пригодятся. ef39adf55&DisplayLang=en.

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

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

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

В
первой части обсуждения дан- от операционной системы загрузчика ная. Сетевая загрузка осуществляется
ной темы [1] на основании ана- обусловлена именно тем, что надо со- только с помощью внешних серверных
лиза эксплуатационного цикла гласовать уровни представления сис- ресурсов, поэтому опустим её рассмот-
сервера были выдвинуты два принци- тем хранения данных с точки зрения рение. Итак, далее обсуждаем только
па (использовать всегда RAID1 вмес- BIOS и того, как их «представляет» яд- загрузку с SAS-устройств.
то обычных разделов диска и перевес- ро ОС. Из двух крайностей, поместить В начальный момент времени BIOS,
ти максимум объема под управление BIOS в ядро или само ядро в BIOS, был собравший всю доступную информа-
LVM), исходя из которых, предлагалось выбран технологический компромисс – цию о физически подключенных ус-
производить планирование дисковых загрузчик. Обсудим подробнее. тройствах, производит в определен-
ресурсов. Но существует еще одна, ном порядке перебор систем хране-
и не последняя, цикличность в работе Процесс загрузки ния и поиск на них загрузчика. Управ-
серверов, как и любых компьютеров, Загрузка – это последовательность пе- ление будет передано первому подхо-
которую надо принять во внимание – редачи управления от BIOS оборудо- дящему. BIOS доступна лишь физичес-
процесс загрузки. Это неизбежная фа- ванию, которая включается в процес- кая структура устройств. Все, на что
за начинается сразу после включения се аппаратной инициализации, к ядру он «способен», – это загрузить первый
питания и завершается после выхода операционной системы. Процесс об- сектор, проверить наличие специаль-
системы в рабочий режим. Ключевую служивает упомянутый «загрузчик» ной сигнатуры и передать управление
роль в ней играет загрузчик. Необхо- (на диаграмме – LOADER). Существуют полученному коду. Главные ограниче-
димость существования независимого два типа загрузки – сетевая и локаль- ния: код размещается в объеме секто-

16
администрирование
ра (512 байт), выбирается всегда лишь точно ли одного только /boot, как счи-
первый сектор. Поскольку BIOS никак тают в компании RedHat, или все-таки
не учитывает существование разметки надо нечто посущественней? Для этого
дисков, то загрузчик смело может за- разберем, как работает загрузчик.
нимать 510 байт (512 – сигнатура).
Теперь обсудим конечную точку ра- Работа загрузчика
боты загрузчика (но не конечную точ- Linux в силу своей открытости стал
ку загрузки!). Загрузчик «должен» точ- весьма консервативной системой,
но так же, как чуть раньше это сделал так как каждая его компонента под-
BIOS, найти следующий программный вергается очень подробному анали-
код, то есть ядро ОС, загрузить его, зу на адекватность назначению. Хо-
проверить корректность и передать уп- тя вместе с дистрибутивом SuSE пос- Рисунок 1. Видимость уровней
представления на разных стадиях
равление. Естественно, расположение тавляются четыре загрузчика (Lilo, загрузки
ядра операционной системы и всех не- Grub, Syslinux, Loadlin), но в качестве
обходимых для загрузки файлов зави- стандартных, как правило, использо- сии 0.96. Этот релиз содержит ошибку.
сит от типа и свойств самой ОС. Хотя вались только два – Syslinux и Grub. В обновлениях предлагается версия
в заголовок статьи вынесено утверж- Долгое время они развивались, кон- 0.97. В дальнейшем будет применяться
дение, что рассматривается имен- курируя друг с другом, и лишь недав- именно эта, обновленная версия.
но Linux, но это не значит, что вместе но определилось, что будущее именно Рассмотрим, как работает Grub.
с ним на дисковых ресурсах не будут за Grub. Объясню, почему так. Для этого обратимся к рис. 2, где на-
располагаться и другие ОС. Опять возвращаемся к рис. 1. Пос- глядно представлен процесс установ-
Итак, получили «разрыв» пред- мотрите, загрузчик не обращается ки и загрузки Grub. Обсуждение будем
ставлений. Воспользуемся все той же к физическим дисковым устройствам, вести в терминологии Grub.
диаграммой переходов в процессе на- он «смотрит» только на файловые сис- Итак, в самом начале BIOS считы-
стройки для иллюстрации (рис. 1). темы. Именно это свойство, а не что-то вает код загрузчика из первого секто-
Синим цветом на рисунке обозна- иное определило преимущества про- ра диска (1 на рисунке). 512 байт явно
чено то, что «может видеть» BIOS, а зе- екта Grub. Дело в том, что загрузчик недостаточно, чтобы разместить там
леным то, что «должен видеть» загруз- должен предоставить оператору вы- драйвер файловой системы. Эта часть
чик. Между узлами 2 MD и 5 EXT3... бор путей загрузки. И Grub считыва- загрузчика называется stage1. Её на-
изображена двунаправленная стрел- ет файл меню, свои кодовые файлы значение – загрузить stage1_5 – спе-
ка. Как было показано в первой части и файлы загружаемых систем, поль- циальную фазу, содержащую драй-
статьи [1], логическая структура фай- зуясь только собственным драйвером вер файловой системы. Проблема
ловой системы, положенной поверх файловой системы и никак не привя- в том, чтобы добиться однозначнос-
RAID1, не меняется. Благодаря это- зываясь к физическим константам уст- ти размещения этой фазы по отноше-
му можно считать, что если загрузчик ройств. Lilo, являсь исторически более нию к stage1. Это достигается путем
обязан «понимать» файловую систему, ранним творением, не придерживался записи данной компоненты на «нуле-
то он будет «понимать» её, размещен- такой концепции, почему и вынужден вую» дорожку загрузочного устройс-
ную поверх MD. Но это и максимум его был уступить. тва, т.е. вслед за первым сектором, со-
«понятливости». Иначе говоря, на на- Внимание: изначально в дистрибу- держащим stage1. В режиме LBA (дис-
стоящий момент не представляется тиве SuSE 10.0 поставляется Grub вер- ки актуальных для серверов ёмкостей
возможным разместить всю систе-
му целиком на логических томах LVM.
Приходится часть, необходимую для
загрузки, все-таки выносить за преде-
лы этой столь удобной системы управ-
ления томами данных.
Это утверждение иллюстрируется
все тем же RHEL, в котором файлы,
участвующие в загрузке, размещае-
мые традиционно в /boot, записывают-
ся во внешний по отношению ко всей
системе том, который не подключает-
ся в управление LVM.
Вывод. Хотя очень правильно все,
что можно, внести внутрь LVM, но при-
ходится мириться с существованием
разделов, проинициализированных
в последовательности 1 DISK, 2 MD,
3 EXT3... И следующий вопрос: доста- Рисунок 2. Работа загрузчика Grub

№2, февраль 2006 17


администрирование
в другом режиме просто не работают), лов загрузчика, нужно разместить яд- нести на отдельный раздел. Аналогич-
на дисковом устройстве размещается ро и initrd, данные для инициализации ное соображение верно и в отношении
63 сектора в дорожке. То есть уровень виртуального диска, подключаемо- основной системы.
«интеллекта» stage1_5 может быть по- го в процессе загрузки ядра системы. Наблюдательный читатель спро-
вышен до 30 Кб. Для работы с файло- Примерно так и рассуждают в компа- сит: ну хоть /var можно вынести в при-
вой системой ext3 хватает чуть более нии RedHat, когда выделяют /boot в ка- монтированный том и тем самым со-
8Кбайт. Иначе говоря, резервы эволю- честве раздела загрузки. Теперь обсу- кратить размер корневого раздела?
ции у проекта Grub еще есть. дим реальное положение дел. Конечно, можно! Только надо учесть,
Пос ле под к лючения stage1_ 5 что в случае проблем с монтированием
(2 на рисунке) загрузчик уже «умеет» Эксплуатационные фазы в /var на «чистом» корне не будет ника-
читать выбранную файловую систе- Давайте мысленно вернемся к исход- ких структур, обеспечивающих работу
му и, значит, «может» найти все не- ным целям вырабатываемых механиз- сервисов – даже /var/run. Поэтому пра-
достающее для его работы. А имен- мов и способов разметки. Итак, глав- вильной последовательностью будет
но: основную свою компоненту stage2 ное – добиться условий для манипу- установка всей системы в единый раз-
(3 на рисунке) и файл, содержащий ме- ляций с логическими томами и разме- дел и потом уже перенос того, что нуж-
ню, menu.lst (4 на рисунке). Все! Теперь щенными на них файловыми систе- но, на другие тома LVM с последующим
в памяти компьютера работает полно- мами таких, чтобы максимально на- их монтированием. Такая последова-
стью собранный загрузчик, который сколько возможно оставлять сам сер- тельность установки позволит прак-
«пользуется» возможностями файло- вер в работоспособном состоянии, что- тически с минимальной потерей фун-
вых систем для поиска всех указанных бы для обслуживания не требовалось кциональности отключать все «на ле-
в меню файлов. Таким путем обеспе- физического вмешательства (посколь- ту» и соответственно менять. Значит,
чивается независимость первых фаз ку это несовместимо с автоматиза- сэкономить не получится!
загрузки от конкретного размещения цией и вообще с логикой работы вы- Таким образом, у нас появилась
файлов внутри файловой системы. числительных систем). Если, как это еще пара принципов планирования
То есть, если модифицировать stage2, предложено все в том же RHEL, кор- дисковых ресурсов серверов.
или изменить menu.lst, или какие-то невая файловая система размещена Принцип 3. Необходимо кроме ос-
из загружаемых файлов, описанных на логическом томе LVM, то для пре- новной системы создать независимую
в меню, то при следующей загрузке образований надо будет сначала от- по разметке вспомогательную систему,
stage1+stage1_5, как ни в чем не бы- монтировать корень. Конечно, мож- которая будет обеспечивать фазу об-
вало, загрузят новые файлы. но просто заявить, что это не понадо- служивания сервера в случае необхо-
На рис. 2 показано, как реальное бится, так как всегда можно к самому димости произвести online-преобразо-
разбиение жесткого диска «понимает- корню подмонтировать нужный объем, вания основной системы.
ся» загрузчиком. В процессе установки взятый все с того же LVM. Примем по- Принцип 4. Все данные, нужные
надо указать корень, где размещены ка это объяснение. А если возникает для работы системы в минимальной
все файлы загрузчика. В нашем слу- необходимость в обновлении исполь- функциональности, по возможнос-
чае это делается командой root (hd0,1). зуемой системы? А если надо выпол- ти, надо устанавливать в один корне-
Установщик определяет тип файло- нить в системе настройку, результат вой раздел. Это увеличит надежность
вой системы и согласно этому подби- которой может оказаться не на 100% системы и позволит независимым об-
рает следующую фазу – e2fs_stage1_5. успешным? Тогда возникает требова- разом манипулировать другими при-
И далее остается лишь указать, куда ние иметь на SAS-устройстве второй монтированными разделами.
записывать stage1+stage1_5. Это про- экземпляр системы со своим незави- Следствием этих принципов явля-
изводится командой setup (hd0). После симым корнем. И, загрузив этот второй ется то, что возникают все возмож-
чего нужные компоненты записывают- экземпляр системы, можно выполнить ности для создания дополнительного
ся на нулевую дорожку указанного ус- все перечисленные операции. резервирования. Кроме использова-
тройства, и в них жестко прошивает- Состояние сервера, работающе- ния «зеркальных» дисковых устройств
ся размещение и названия остальных го под управлением вспомогательно- можно создать «зеркальные» системы,
файлов stage2 и menu.lst, иначе говоря, го экземпляра операционной системы, которые позволят произвести «откат»
первая команда root (hd0,1), указыва- будем называть фазой обслуживания изменений в случае повреждения од-
ющая на корень загрузчика. Заметим, (на диаграмме Out Of Order). ной из них – той, которая была рабо-
что корень, в котором размещается за- Здесь снова получаем прежнюю чей, – в процессе online-обслужива-
грузчик, может, и даже очень часто, не проблему. Ведь можно и корень вто- ния. Иначе говоря, если один из дуб-
совпадать с корнем самой загружае- рой системы разместить на LVM, вы- лей системы предназначался для со-
мой системы. неся лишь /boot в отдельный раздел здания фазы обслуживания, то, сделав
Определим здесь минимум-мини- диска. Тогда задумаемся, какая глуби- эти дубли идентичными, получаем па-
морум того, что должно быть разме- на online-преобразований (без отклю- ру, состоящую из основной и резерв-
щено на разделе загрузки, (hd0,1) в на- чения) требуется. Если надо оставить ной системы. Конечно, здесь не идет
шем случае. Если мы обсуждаем за- возможность перепланировки всего речь о полном дублировании всех дан-
грузку Linux-системы, то на этом раз- дискового устройства, то разумно ВСЕ ных. Обсуждается лишь вопрос о со-
деле, кроме уже перечисленных фай- данные вспомогательной системы вы- здании дубликата корневого раздела

18
администрирование
в части, обеспечивающей функцио- тирования самого меню. И то и другое циального файла default, который за-
нал сервера. представляет собой весьма рукотвор- писывается утилитой grub-set-default.
Теперь вернемся к «нашим бара- ный процесс. Хотя можно и просто менять текст са-
нам». Итак, размещения лишь /boot Управляемой загрузкой будем счи- мого menu.lst.
на выделенном томе не достаточно, тать такой способ настройки, когда вы- Но чтобы данная функциональная
так как это не обеспечит независимой бор нужной фазы работы системы бу- схема запустилась, надо обеспечить
загрузки для манипуляции остальным дет происходить автоматически в про- назначение служебной фазы как пути
дисковым пространством. Значит, на- цессе загрузки. Конечно, для этого загрузки по умолчанию для следующей
до на отдельном разделе, установлен- в Grub не хватает функциональности. перезагрузки после запуска каждой
ном по схеме 1 DISK, 2 MD, 3 EXT3..., Его исполнительная часть stage2, ко- из других фаз – пунктов меню. Мож-
разметить всю систему. И кроме того, торая обрабатывает меню, позволяет но воспользоваться все той же утили-
сделать это дважды, поскольку надо модифицировать его и даже выпол- той grub-set-default или так же менять
обеспечить еще и фазу обслужива- нять какие-то действия с дисковыми содержимое menu.lst. Но в Grub есть
ния основной системы. Одновременно устройствами или сетевыми сервиса- специальный оператор (savedefault),
с этим получаем «бесплатный» дубли- ми, занимает от 100 до 200 Кб, в зави- который обеспечивает запись нужно-
кат рабочей системы на случай неожи- симости от сборки. Но этого недоста- го значения прямо из stage2, то есть
данного технического повреждения точно. В процедуре управляемой за- до передачи управления на загружае-
последней (например, из-за ошибки грузки нужно иметь возможность вы- мую ОС, которая в общем случае мо-
в процессе наложения патчей), то есть брать эксплуатационную фазу, анали- жет быть и несовместима с утилитой
фактически добавляем еще и фазу зируя параметры в контексте самого grub-set-default.
оперативного резерва. сервера, а не загрузчика. Элементар- Получается, что кроме уже пере-
Таким образом, система после за- но, например, если в ходе анализа пот- численных двух систем (одна основ-
грузки может перейти в одну из трех ребуется прочитать данные или с LVM, ная, другая резервная) надо создать
фаз: рабочую, обслуживания и резер- или с удаленного тома NFS, или полу- еще и третью? Нет, достаточно ис-
ва. Мысль эта не нова. Не могу привес- чить путь из LDAP, то вряд ли удастся пользовать одну из уже имеющихся,
ти пример из RHEL, но из SuSE – лег- остаться в рамках только пакета Grub но в специальном режиме. Как это сде-
ко! В стандартно создаваемом в про- для обеспечения такой функции управ- лать, покажем на примере чуть поз-
цессе установки menu.lst присутству- ления загрузкой. же. На примере же и проиллюстри-
ет пункт аварийной загрузки failsafe. Итак, обслуживание стадии управ- руем, как планируется диаграмма пе-
Хоть failsafe и полумера, но культурно- ления загрузкой будет производиться реходов состояний сервера в процес-
го шока от моих предложений не долж- Linux как универсальной платформой. се загрузки.
но быть. Присвоим новой фазе работы серве- А сейчас зададимся вопросом,
А что в результате, спрашивается? ра название служебной (на диаграм- а не ересь ли предлагается здесь –
Можно обойтись без спасательного мах Stuff). Это проходная фаза, в кото- создание специальной инсталляции
CD! И все? Ведь получается, что все рой по некоторым критериям будет вы- Linux только для обеспечения загруз-
равно переключение системы из фазы брана следующая фаза загрузки, про- ки? Нет! Есть аналог предложенного
работы в другие производится в тра- изведена соответствующая коррек- решения. Известен в «миру» как EFI
диционном варианте лишь с консоли. ция и далее произведена перезагруз- (Extensible Firmware Interface). Изна-
Ну можно, конечно, еще и путем ре- ка. В Grub существует механизм выбо- чально он создавался как новый фор-
дактирования menu.lst, благо, что воз- ра пути загрузки по содержимому спе- мат модульного заменителя традици-
можности Grub позволяют это делать
без переустановки. Нет, конечно, ради
такой чепухи и не стоило бы городить
столько. Все это даст эффект лишь
в том случае, если настроить систему
управляемой загрузки.

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

№2, февраль 2006 19


администрирование
онного BIOS. Но в результате получилось, что такой универ- default saved
hiddenmenu
сальный инструмент может грузить и ОС, используя свои timeout 5
сильно расширенные возможности. Для обеспечения про- #0
title Out Of Order
цесса загрузки с помощью EFI системы Linux использует- root (hd0,1)
ся компонента ELILO (программа в формате EFI), которая kernel /boot/vmlinuz root=/dev/sda2 vga=0x332 ↵
selinux=0 splash=0 showopts 3
читает все загружаемые файлы со специального систем- initrd /boot/initrd
ного раздела, размеченного в FAT. Объем такого раздела savedefault 4
#1
небольшой по нынешним меркам – 128 Мб, как рекомендо- title Linux
вано. На нем должны располагаться и ядра, и initrd, и все, root (hd0,1)
kernel /boot/vmlinuz root=/dev/sda2 vga=0x332 ↵
что может понадобиться как загрузчику ELILO, так и другим selinux=0 splash=0 showopts 5
компонентам EFI, список которых не ограничивается лишь initrd /boot/initrd
savedefault 4
драйверами и диагностическими утилитами. Но факт оста- #2
ется фактом: то, до чего еще не додумались разработчики title Windows
root (hd0,2)
проприетарного EFI, легко реализуется на самом Linux. chainloader +1
makeactive
savedefault 4
Пример управляемой загрузки #3
В качестве иллюстрации технологии управляемой загрузки title Terminal
bootp
рассмотрим синтетический пример: управляемую загрузку root (nd)
рабочей станции. Такая подмена предмета позволит сде- kernel /lts/pxe/vmlinuz.ltsp root=/dev/ram0 ↵
rw init=/linuxrc
лать пример полностью законченным и конкретным. Одно- initrd /lts/pxe/initrd.lts
временно это даст возможность продемонстрировать боль- savedefault 4
#4
шее число приемов загрузки с помощью Grub. И кроме то- title Stuff
го, покажет, что рамки применения, казалось бы, сервер- root (hd0,1)
kernel /boot/vmlinuz root=/dev/sda2 vga=0x332 ↵
ной технологии можно с успехом расширить. selinux=0 tonextboot splash=0 showopts 3
Поставим задачу следующим образом. Нужно создать initrd /boot/initrd
savedefault
универсальную рабочую станцию, которая будет автома- #
тически загружиться как Linux-станция, Windows-станция
и X-терминал. Согласно нашей концепции будут также ре- Это, конечно же, один из возможных вариантов, и мно-
ализованы дополнительные состояния – служебное и со- гие параметры надо назначить согласно используемому
стояние обслуживания. Полная диаграмма переходов со- оборудованию и принятым установкам работы. В частности,
стояний, начиная с запуска Grub, будет выглядеть, как пред- выше видно, что все состояния, обслуживаемые Linux, сов-
ставлено на рис. 3. мещают один экземпляр системы (так как цель демонстра-
Зеленым цветом обозначены узлы, соответствующие ции лишь управляемая загрузка). Пункты меню, соответс-
рабочим состояниям, желтым – служебные, красным – со- твующие основным состояниям, более-менее однозначны:
стояние обслуживания. Рабочая станция пребывает в со- № 1 Linux и № 2 Windows соответствуют стандартным спо-
стояниях обслуживания и служебном в течение времени, собам запуска этих систем из Grub. № 3 Terminal запуска-
необходимого на выполнение запрограммированных за- ет клиента LTSP путем загрузки ядра и initrd с ресурса tftp,
дач. А вот пребывание в рабочих состояниях ограничива- который указывается по протоколу DHCP. Для того чтобы
ется лишь целевой необходимостью и завершается коман- сработала команда bootp, надо вместо stage2, устанавли-
дой оператора на перезагрузку или выключение, но так- ваемой в ходе стандартной процедуры, разместить в корне
же может быть инициировано удаленным запросом с цен- Grub stage2, специально собранную для работы с сетью:
трального сервера, управляющего всей сетью подобных
рабочих станций. Естественно, технология такого запро- # cp /usr/lib/grub/stage2.netboot /boot/grub/stage2
са полностью определяется платформой, которой этот за-
прос должен управлять. Например, для того чтобы выклю- При этом выполнение всех остальных команд меню
чить MS Windows XP удаленно с Linux-сервера, можно вос- не пострадает. Пункты меню № 4 Stuff и № 0 Out Of Order
пользоваться специальным запросом MS RPC: во всем практически подобны стандартному режиму запус-
ка Linux на уровень 3. Но для их правильного функциони-
> rpcclient -c shutdowninit -U username%password ip-address рования надо запрограммировать специальную обработку
этих режимов в процессе инициализации соответствующе-
где username и password соответствуют бюджету админис- го уровня. Продемонстрируем, как это сделать для служеб-
тратора на компьютере с адресом ip-address, где будет за- ного режима, поскольку он является ключевым для реали-
пущена процедура выключения (которая, кстати, не сможет зации всей схемы.
автоматически завершить работающие программы, увы). Будем использовать в качестве управляющего призна-
Меню Grub для обеспечения требуемой смены состоя- ка содержимое файла, размещенного на локальном http-
ний можно построить следующим образом: ресурсе. Далее принимаются стандарты SuSE на располо-
жение таких файлов. Например, сделаем так: если следу-
# cat /boot/grub/menu.lst ет запустить станцию с адресом 192.168.0.166 с использо-
color white/blue black/light-gray ванием пункта меню Grub с номером 1, то запишем этот но-

20
администрирование
мер в файл, названный по IP-адресу нужной станции (дейс- start)
STUFF=$(cat /proc/cmdline | grep tonextboot)
твия производятся на http-сервере): [ "1${STUFF}" == "1" ] && { abort "use only ↵
for stuff level!" ; }
# echo 1 >/srv/www/htdocs/192.168.0.166
CURL=`which curl 2>$NULL`
[ "1${CURL}" == "1" ] && { abort "need curl!" ; }
Это значение можно прочесть со станции с помощью GRUB=`which grub-set-default 2>$NULL`
wget, lynx или curl, обратившись по адресу http://www.office. [ "1${GRUB}" == "1" ] && { abort "need ↵
grub-set-default!" ; }
localnet/192.168.0.166, если именно такой адрес у нашего
локального http-ресурса. Получив значение нового рабо- HOST=$(hostname -i | grep 192.168)
[ "1${HOST}" == "1" ] && { default "cant ↵
чего состояния, скрипт устанавливает параметры следую- resolve address!" ; }
щей загрузки, используя утилиту grub-set-default.
BOOT=$(${CURL} --max-filesize 2 -s ${SRV}${HOST} | ↵
Скрипт, который будет анализировать параметр управ- grep "[[:digit:]]")
ления загрузкой, назовем tonextboot. Для того чтобы он вы- [ "1${BOOT}" == "1" ] && { default "cant get ↵
boot way!" ; }
зывался автоматически, придется поместить его в процесс
стартовой инициализации соответствующего уровня, в на- echo -n " to $BOOT"
$GRUB $BOOT
шем случае уровня 3: rc_status -v
/sbin/shutdown -r now
# cp tonextboot /etc/init.d ;;
# insserv tonextboot *)
rc_status -s
;;
Но чтобы скрипт «знал», когда запускать систему в слу- esac
жебном режиме, добавим специальный параметр, кото- rc_exit
рый будем передавать через Grub ядру в командной строке
так, чтобы потом можно было проверить его наличие через Скрипт очень простой и прозрачный по смыслу. В нем
/proc/cmdline. Примем таким параметром управляемое сло- есть обработка только одной непредвиденной ситуации –
во «tonextboot». Если этого слова нет, то скрипт «считает», если скрипт «не может» вообще никак «узнать» следующее
что это какой-то иной режим запуска, а не Stuff. Если же та- состояние сервера. Тогда принимается политика «по умол-
кое слово обнаруживается, то следует выполнить действия, чанию», которая управляется переменной DEF.
указанные на рис. 3. Полный текст скрипта, сделанный по Нельзя не сказать и о том случае, когда grub-set-default
стандартам SuSE приведен ниже. Чтобы скрипт правильно будет вызван с номером, превышающим число возможных
встал в порядок загрузки, указано, что для его работы тре- ветвлений меню Grub. Тогда система запустится с парамет-
буется инициализированный сетевой уровень. рами нулевого пункта меню. Это надо учитывать при плани-
ровании порядка размещения состояний в меню Grub.
Скрипт tonextboot Все перечисленные настройки, включая модификацию
#!/bin/sh stage2, выполняются без переустановки Grub. Затем произ-
# водится начальная инициализация grub-set-default 4 и пос-
### BEGIN INIT INFO
# Provides: tonextboot ле перезагрузки система станет работать в зависимости
# Required-Start: network от того уровня, что назначен на сервере www.office.localnet
# Should-Start:
# Required-Stop: network для данной станции.
# Default-Start: 3 Таким приемом можно управлять офисом или классом
# Default-Stop:
# Description: Check and set next boot way компьютеров, заставляя их автоматически загружаться
### END INIT INFO в нужный режим.
. /etc/rc.status
rc_reset Сопутствующие вопросы
NULL=/dev/null Рассмотрение темы планирования дисковых ресурсов не
SRV="http://www.office.localnet/" будет полным, если не коснуться вопросов надежности про-
#VERB=1
DEF=2 граммных уровней представления данных (LVM, MD и проч.)
и выбора типа файловой системы. Вопреки традиционно-
abort() {
[ "1${VERB}" != "1" ] && { echo ; echo -n "Error: $1" ; } му подходу, не будем придавать этим вопросам статус ос-
rc_status -u новополагающих. И вот по какой причине.
rc_exit
} В отношении LVM существует расхожее бытовое мне-
ние о, якобы, низкой ее надежности, основанное на том
default() {
[ "1${VERB}" != "1" ] && { echo ; echo -n "Error: $1" ; } факте, что после повреждения структуры LVM практичес-
BOOT=$DEF ки невозможно восстановить данные файловых систем,
echo -n " to $BOOT"
$GRUB $BOOT созданных внутри логических томов. Это неверно пост-
rc_status -v роенная логическая цепочка рассуждений. По аналогии,
/sbin/shutdown -r now
rc_exit многие люди считают опасными самолеты, на том основа-
} нии, что, мол, летают быстро и высоко, и при падении вы-
echo -n "Check and set next boot way" живших крайне мало, но при этом забывают, что статисти-
case "$1" in ка свидетельствует, что обычный автотранспорт гораздо

№2, февраль 2006 21


администрирование
Таблица 1. Зависимость скорости доступа от типа файловой системы в секунду, рядом с которыми изобра-
ext3 reiserfs reiserfs4 xfs jfs жены индексы отклонения от средней
Символьная запись 47362 – 1,01 47965 – 1,02 37533 – 0,80 49783 – 1,06 52083 – 1,11 по данному тесту величины.
Блочная запись 60396 – 1,01 66731 – 1,12 51754 – 0,87 61549 – 1,03 57912 – 0,97
Для наглядности представим резуль-
таты в графической форме в виде стол-
Перезапись 21618 – 0,95 22360 – 0,98 22116 – 0,97 23365 – 1,03 24225 – 1,07
бчатой диаграммы (рис. 4). И убедимся,
Символьное чтение 21791 – 0,82 23956 – 0,90 29647 – 1,12 28199 – 1,06 28893 – 1,09
что серьезного преимущества нет ни у
Блочное чтение 53288 – 0,99 52851 – 0,98 53963 – 1,00 54159 – 1,01 54350 – 1,01 одного из форматов.
Итоговая оценка 2 – 0,96 2 – 1,00 1 – 0,95 5 – 1,04 4 – 1,05 Тогда определим для каждой из сис-
тем число индексов, превосходящих 1,
опаснее. Но и это не самое главное. В таком рассуждении рассчитаем средний индекс и запишем все это в итоговой
подменяется объект. Цикл эксплуатации состоит из време- строке (строка 6 в таблице 1). Теперь уже можно устано-
ни наработки на отказ, отказом и периодом восстановле- вить, что лучшие результаты у xfs и jfs, худший – у reiserfs4,
ния. Так вот, надежность всецело определяется временем а вот те файловые системы, что зачастую принимаются
наработки на отказ. И это время не зависит от сложности в качестве стандартных в инсталляторах «из коробки», «хо-
самой программной системы, а лишь от надежности обо- дят» в явных середнячках (и даже не в «троечниках»!). Хо-
рудования. Причина в том, что в настоящее время в ЭВМ тя отклонения не превышают 5%. Иначе говоря, нет ино-
применяются детерминированные алгоритмы. То есть вне го способа объяснить выбор форматов ext3 и reiserfs в ка-
зависимости от цепочки преобразований пара одинаковых честве стандартов, как учетом их большей отработаннос-
запросов вернет эквивалентные данные. Безусловно, чем ти (например, в jfs значительное число возможностей по-
сложнее преобразования, тем сложнее их реконструкция ка имеет статус экспериментальных) и большей историей
на этапе восстановления. Но, во-первых, это уже не име- использования.
ет отношения к надежности, а, во-вторых, кто сказал, что Тем более, вспомним, что выбор типа файловой сис-
восстановление сложных систем надо производить прими- темы для нас актуален лишь относительно. Используя ос-
тивными способами? новную систему, можно поменять формат файловых сис-
В отношении MD и остальных программных систем все тем, размещенных в LVM, почти «на лету»: создать «снап-
аналогично. Есть лишь те проблемы, что каждая из таких шот» LVM, произвести резервное копирование, создать но-
систем вводит в работу ряд параметров, например, назва- вый логический том, разметить его в новом формате, син-
ние MD устройства, имя группы LVM, и при физической мо- хронизировать данные и перемонтировать. Лишь две пос-
дификации дисковых устройств возможны конфликты по ледние операции потребуют кратковременного отключения.
этой причине. Наличие вспомогательной системы, кроме ос- Даже формат основной системы можно поменять, исполь-
новной, позволит модифицировать все подобные парамет- зуя вспомогательную систему. А потом и на ней изменить
ры у основной системы, чтобы избежать конфликта. разметку, воспользовавшись уже основной.
Самый спорный вопрос – это, конечно же, предпочте- Таким образом, эти, в обычном случае «важные» вопро-
ния типа файловой системы. Очень часто этот вопрос пе- сы – сложность LVM, выбор типа файловой системы – бла-
ретекает из области рациональной оценки в область вкуса, годаря использованным технологическим приемам пере-
привычек или политических предпочтений. А как же иначе? ведены в разряд второстепенных.
Ведь если бы существовало однозначное решение, так все
менее популярные проекты просто прекратили бы разви- Заключение
ваться. Значит, в каждой из файловых систем есть собс- Обсуждение вопросов, связанных с темой планирования
твенные преимущества. дисковых ресурсов, можно считать завершенной. Были
Попробуем решить спор тривиальным тестированием сформулированы четыре принципа, которые следует учиты-
с помощью bonnie (Таблица 1). Условия полностью совпада- вать при создании конкретного серверного решения. Про-
ют с теми, что были в первой части статьи [1]. Только пара- иллюстрированы разнообразные технологические приемы,
метром будет тип файловой системы (перечислены в верх- сопутствующие предложенным технологиям. Но, безуслов-
ней строке). Режимы тестирования указаны в самом левом но, все вышесказанное носит рекомендательный характер.
столбце. В перекрестьях замеренные результаты в Кбайт Не забывайте, что дисковые подсистемы и вопросы, их ок-
ружающие, являются лишь частью, хотя и достаточно важ-
ной, всех задач, которые решаются в ходе построения при-
кладного сервера. И конечный выбор способа, которым на-
до разбить дисковые устройства на разделы, полностью
определяется назначением самого сервера. О том, какие
преимущества можно получить, используя предложенный
здесь подход, обсудим в продолжении цикла.

Литература:
1. Барабанов А. Современный Linux-сервер: как планировать
Рисунок 4. Зависимость скорости доступа от типа дисковые ресурсы. – Журнал «Системный администратор»,
файловой системы №1, 2006 г. – 16-21 с.

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

ProFTPD: мастер своего дела

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

П
ри разработке FTP-сервера ProFTPD особое внима- собрать ProFTPD. Если коротко, то эти модули выполняют
ние уделялось безопасности и максимальной гиб- следующие функции:
кости настроек. Практически во всём прослежива-  IPV6: поддержка шестой версии протокола IP.
ется влияние проекта Apache – от структуры конфигура-  LDAP: поддержка аутентификации пользователей
ции и файлов .ftpaccess до модульной архитектуры. Сер- на LDAP-сервере.
вер полностью поддерживает базовый протокол FTP, оп-  MYSQL: поддержка СУБД MySQL для хранения учётных
ределённый в RFC 959, а также многие функции, описан- записей пользователей.
ные в RFC 1123.  POSTGRESQL: аналогичная поддержка для PostgreSQL.
Приставка «Pro», фигурирующая в названии, полностью  OPENSSL: поддержка шифрованных соединений.
оправдывает себя – это действительно профессиональный  QUOTA: позволяет настраивать лимиты для пользова-
сервер, с помощью которого вы можете реализовать прак- телей на используемое дисковое пространство.
тически всё, что может потребоваться от FTP-сервера.  IFSESSION: поддержка ограничений для конкретных
Конечно, все его возможности в рамках одной статьи ох- сессий.
ватить неисполнимо, но наиболее важные моменты я пос-  README: позволяет выводить сообщения об измене-
тараюсь для вас осветить. ниях в каталогах.
 RATIO: управление соотношением загрузок/скачива-
Инсталляция ний.
Установка выполняется достаточно традиционно. Пользо-  REWRITE: поддержка перезаписи имён запрашиваемых
ватели Linux наверняка (учитывая большую популярность файлов/каталогов на основе регулярных выражений.
данной программы) найдут предкомпилированный пакет  WRAP: ограничение входящих соединений по IP-адре-
для своего дистрибутива. Для FreeBSD стандартная реко- су источника (замена механизму TCPWrapper, исполь-
мендация – установить сервер из коллекции портов. Ну и, зуемому сервером inetd, при работе в автономном ре-
естественно, вы всегда можете вручную собрать ProFTPD жиме).
из исходных кодов.  RADIUS: поддержка авторизации на RADIUS-серве-
В дальнейшем все примеры будут относиться к FreeBSD рах.
(для конкретики), так что приступим к установке. Обновив
коллекцию портов, даём команду: О некоторых из них мы ещё поговорим, но вам уже сей-
час нужно будет определиться с тем, какие модули вам по-
# /usr/local/sbin/portinstall proftpd надобятся, так как при необходимости добавить что-то к уже
работающему серверу вам придётся пересобирать ProFTPD
Можно, конечно, и традиционно (cd /usr/ports/ftp/proftpd; с новыми параметрами. Но и включать всё, что есть, про за-
make install), но утилита portupgrade предоставляет целый пас, тоже не стоит – «меньше ставишь – лучше спишь».
ряд дополнительных возможностей, так что от себя поре- Кстати, запустив в следующий раз установку этого пор-
комендую установить её в любом случае. та (например, чтобы изменить список модулей или обновить
Запустив установку порта впервые, вы получите изоб- версию), вы уже не увидите этот диалог – ваш нынешний
ражённое на рис. 1 диалоговое окно, где нужно будет от- ответ будет сохранён в файле /var/db/ports/proftpd/options.
метить дополнительные модули, с которыми вы желаете Так что вам нужно будет либо удалить этот файл (вместе

24
администрирование
с каталогом proftpd), либо выполнить нужные правки пря-
мо в нём.
Пользователям Linux нужно будет подыскать подхо-
дящий пакет, собранный с нужными модулями, либо ста-
вить из исходных кодов, указав нужные расширения с по-
мощью параметра with-modules в команде ./configure, на-
пример, так:

# ./configure --with-modules=mod_rewrite:mod_postgresql

Более подробно о параметрах сборки можно, как обыч-


но, узнать, введя команду:

# ./configure --help Рисунок 1. Диалог выбора дополнительных модулей ProFTPD

Посмотреть полный список подключенных модулей


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

$ /usr/local/sbin/proftpd -l
Compiled-in modules:
mod_core.c
mod_xfer.c
mod_auth_unix.c
mod_auth_file.c
mod_auth.c Рисунок 2. Модульная архитектура ProFTPD
mod_ls.c (показаны не все модули)
mod_log.c
mod_site.c чем запускать наш FTP-сервер, проследуем в конфигураци-
mod_delay.c
mod_auth_pam.c онный файл (/usr/local/etc/proftpd.conf) и посмотрим, нет ли
mod_ratio.c в настройках по умолчанию чего-то такого, о чём мы могли
mod_readme.c
бы пожалеть в дальнейшем.
mod_rewrite.c
mod_wrap.c
mod_sql.c
mod_sql_postgres.c
Структура конфигурационного файла
mod_ifsession.c Сразу же бросается в глаза его синтаксическая схожесть
с httpd.conf – конфигурационным файлом Apache. В файле
В зависимости от того, какой из способов установки вы proftpd.conf можно выделить следующие секции (области
выберете, вам может понадобиться выполнить вручную не- действия директив):
которые действия:  секция <Global>: общие настройки для всех виртуаль-
 создать учётную запись пользователя, от имени ко- ных серверов;
торого будет работать сервер (традиционно это поль-  секция <VirtualHost>: параметры виртуальных хостов
зователь ftp, и обычно он уже присутствует в системе; (таких секций может быть произвольное число, см. да-
по умолчанию используется nobody, однако повсемес- лее раздел про организацию виртуального хостинга);
тное его использование может приблизить его по пол-  секция <Anonymous>: настройка анонимного доступа
номочиям к root); (см. ниже);
 создать каталог(и) для размещения файлов, кото-  секция <Directory>: параметры, относящиеся к фай-
рые вы хотели бы предоставлять пользователям ва- лам конкретного каталога;
шего сервера;  секция <Limit>: ограничения на работу с командами
 создать конфигурационный файл proftpd.conf (обыч- протокола FTP и ограничения авторизации;
но базовый файл создается автоматически во время ин-  «внешние» директивы: не включены в какую-либо сек-
сталляции); цию, действуют на весь сервер (директивы внутри сек-
 обеспечить возможность автоматического старта ций переопределяют общие настройки для своей сек-
сервиса при перезагрузках компьютера. ции).

В случае FreeBSD от вас потребуется только под- Кроме конфигурационного файла, некоторые на-
готовить рабочие каталоги и добавить в /etc/rc.conf стройки могут быть выполнены в файлах .ftpaccess (если
строчку «proftpd_enable = YES», чтобы получить воз- не запрещено переопределение параметров директивой
можность управлять сервисом с помощью сценария «AllowOverride off»). Действие данного файла распростра-
/usr/local/etc/rc.d/proftpd.sh, который заодно обеспечива- няется на каталог, в котором он размещён, и на все вло-
ет и автозапуск демона при загрузке системы. Но прежде женные каталоги.

№2, февраль 2006 25


администрирование
Приоритетом будет пользоваться та директива, «вло- Ну и пока мы здесь, можно указать имя нашего серве-
женность» которой больше, т.е. та, действие которой охва- ра в параметре ServerName – оно будет выводиться в бан-
тывает меньшую область сервера. нере приветствия при установке соединения.
Директивы можно условно разделить на две катего-
рии: «параметрические», которые требуют указать некото- Управление соединениями
рый параметр (например, IP-адрес), и «логические», кото- ProFTPD предоставляет широчайшие возможности по уп-
рые в качестве параметра принимают ключевое слово «on» равлению TCP-соединениями. Рассмотрим некоторые на-
или «off», соответственно включая или отключая действие иболее полезные параметры (напомню, что мы рассмат-
директивы. В дальнейшем в данной статье для параметри- риваем standalone-режим; в режиме inetd будет работать
ческих директив будет приводиться синтаксис их парамет- далеко не всё):
ров; логические директивы будут указаны без параметров  DefaultAddress IP-адрес: задаёт для сервера IP-адрес
(за исключением случаев, когда требуется подчеркнуть не- интерфейса, на котором следует ожидать входящие со-
обходимость установить конкретное значение). единения.
 Port порт: номер порта, на котором сервер будет ожи-
Некоторые сведения о режимах работы дать входящие соединения.
В первую очередь нужно будет определиться с тем, как  PassivePorts нач. кон.: крайне полезная для работы
ваш сервер должен работать. Поддерживается два ре- за межсетевым экраном опция. Позволяет задать кон-
жима – inetd и standalone, что определяется параметром кретный диапазон «высоких» портов, которые серверу
ServerType. В первом режиме, как следует из его названия, будет разрешено использовать в пассивном режиме.
proftpd будет запускаться суперсервером inetd (это же от- Например, PassivePorts 60000 61999.
носится и к xinetd, более популярному в современных дис-  SocketBindTight: логическая директива, включающая
трибутивах Linux). Это, может быть, разумно в том случае, «умное» прослушивание интерфейсов. Если она отклю-
если inetd у вас запущен (в последнее время хорошим то- чена, то каждый порт будет связываться со всеми об-
ном стало отказываться от его использования) и нагрузка служиваемыми интерфейсами.
на FTP крайне низка, что не оправдывает постоянное при-  Timeout*: группа директив, управляющих разрывом
сутствие в памяти ещё одного демона. В данном случае уп- соединений на различных этапах установления связи
равлять установлением соединений будет inetd (он прослу- в случае неактивности клиента. Подробности см. в до-
шивает 21-й порт и принимает решение о том, принять или кументации.
отклонить запрос на соединение, руководствуясь файла-  UseReverseDNS: включает или отключает определе-
ми /etc/hosts.allow и /etc/hosts.deny), однако возможности ние доменного имени клиента по IP-адресу («обратный»
ProFTPD в этом режиме существенно ограничены (в част- DNS). Если из-за проблем в работе DNS ваши клиенты
ности, нельзя создавать виртуальные серверы). жалуются на то, что подключение выполняется с боль-
Помимо параметра «Ser verType inetd» в файле шой задержкой, данную опцию можно отключить.
/etc/inetd.conf следует закомментировать строки, относя-  MaxClients*: группа опций, управляющая максималь-
щиеся к «родному» серверу ftpd (чтобы не было конфлик- ным количеством клиентов, которым разрешается од-
тов) и добавить строку для активации proftpd при получе- новременно работать с сервером. Вы можете ограни-
нии запроса на 21-й порт (впрочем, вы можете использо- чивать как общее число соединений (MaxClients чис-
вать и нестандартный порт, если очень хочется): ло [сообщение]), так и число соединений с одного хос-
та (MaxClientsPerHost число [сообщение]) или под
# ftp stream tcp nowait root ↵ одним именем пользователя (MaxClientsPerUser чис-
/usr/libexec/ftpd ftpd -l
# ftp stream tcp6 nowait root ↵ ло [сообщение]). Необязательный параметр «сообще-
/usr/libexec/ftpd ftpd -l ние» позволяет указать конкретную фразу, которая бу-
ftp stream tcp nowait root ↵
/usr/local/sbin/proftpd proftpd дет возвращаться клиенту в случае запроса на соеди-
нение, когда лимиты превышены.
Обязательно проверьте правильность пути к исполняе-  MaxConnectionRate запросов [сообщение]: задается
мому файлу: на некоторых системах proftpd может быть ус- максимальное число запросов на соединение, обслужи-
тановлен в /usr/sbin или в /usr/local/libexec. ваемое в одну секунду.
Автономный режим (standalone) оправдывает себя во
всех остальных случаях. Теперь proftpd постоянно при- На самом деле параметров конфигурации значитель-
сутствует в памяти, самостоятельно прослушивая нужные но больше, ознакомиться со всем многообразием вы смо-
адреса и порты и управляя всеми входящими соединени- жете в документах, ссылки на которые приведены в кон-
ями. Кстати говоря, и время реакции на запрос пользова- це статьи.
теля в этом случае будет меньше, т.к. не придётся каждый Здесь же рассмотрим два модуля: mod_wrap и mod_ratio.
раз считывать программу с диска и создавать новый про- Модуль mod_wrap предназначен для обеспечения
цесс. Именно режим standalone используется по умолчанию, функциональности, которую в случае inetd реализует
так что не будем ничего менять. Убедитесь, что в inetd.conf TCPWrapper. Собрав ProFTPD с поддержкой данного моду-
не активирован никакой сервис, обслуживающий порт, на ля, вы сможете указать файлы allow и deny, которыми сер-
котором будет работать proftpd, чтобы исключить конф- вер будет руководствоваться, принимая решение о том, об-
ликты. служивать соединение с данного адреса или нет. Вы мо-

26
администрирование
жете указывать эти файлы как для всех пользователей, ванными в системе. Формат файлов должен соответство-
так и для конкретных: вать системным, за исключением того, что пароль указы-
вается в этом же файле (аналога shadow нет), так что пре-
TCPAccessFiles /etc/hosts.allow /etc/hosts.deny дельно внимательно отнеситесь к ограничению прав до-
TCPUserAccessFiles admin /etc/admin.allow /etc/admin.deny
ступа к этому файлу.
С помощью символа «~» вы можете подключить для каж- Кроме того, вы можете указать требуемый логин и па-
дого пользователя свои wrap-файлы, размещаемые в их до- роль непосредственно в конфигурационном файле proftpd
машних каталогах: с помощью директивы UserPassword. Как здесь, так и в фай-
ле, определенном директивой AuthUserFile, должны исполь-
TCPAccessFiles ~/.allow ~/.deny зоваться хешированные пароли (если верить ряду про-
ведённых экспериментов, сервер самостоятельно опреде-
Формат файлов аналогичен /etc/allow.host, в качестве ляет тип хеша по его виду; поддерживается DES и «стан-
имени службы используется proftpd (можно задать другое дартный» MD5, причём допускается их совмещение в од-
с помощью TCPServiceName). ном файле). Для управления паролями можно использовать,
Модуль mod_ratio позволяет вам устанавливать огра- например, входящую в состав Apache утилиту htpasswd
ничения на соотношение скачиваемых файлов и загружа- (для формирования DES-паролей; то, что формирует эта
емых на сервер (грубо говоря, контролировать отношение утилита с ключом -m, сервером ProFTPD, не распознаёт-
исходящего трафика ко входящему). Рассмотрим следую- ся как MD5-хеш). Также существует аналогичная утилита
щую директиву: ftpasswd, разработанная специально для нужд ProFTPD,
но в стандартную поставку, по крайней мере, во FreeBSD,
Ratios on она почему-то не включена. (Почитать про неё можно здесь:
UserRatio ftp 10 5 20 256000
http://www.castaglia.org/proftpd/contrib/ftpasswd.html, а по это-
Здесь мы для пользователя ftp ввели следующие ог- му адресу находится собственно текст данной утилиты,
раничения: написанной на языке Perl: http://www.castaglia.org/proftpd/
 он должен скачать в десять раз больше файлов, чем за- contrib/ftpasswd).
грузит на сервер (первое число 10 означает, что соот- Рассмотрим также хранение информации об учётных за-
ношение download/upload = 10/1); писях пользователей в базе данных на примере PostgreSQL.
 первые 5 файлов можно закачать «в кредит»; Прежде всего, убедитесь, что ваш proftpd собран с подде-
 для размера файлов установлено соотношение 20/1; ржкой модулей mod_sql и mod_sql_postgres. Теперь подго-
 «кредит» – 250 Кб. товим базу данных (назовём её proftpdb), в которой созда-
дим две таблицы – users и groups:
Помимо этого вы можете устанавливать соотношения
для хостов (HostRatio), групп (GroupRatio), анонимных поль- $ psql -U serg
# create database proftpdb owner serg;
зователей (AnonRatio). Символ «*» можно использовать
в значении «все» (например, все пользователи). Установка CREATE DATABASE

какого-либо параметра в 0 означает снятие ограничений. # \c proftpdb serg

Вы подсоединились к базе данных "proftpdb" как пользователь "serg".


Права доступа и анонимные серверы
Если сравнивать proftpd со стандартным ftpd, входящим proftpdb=> create table users (username text, ↵
pass text, uid numeric,
в поставку FreeBSD, то в первую очередь следует отме- proftpdb(> gid numeric, home text, shell text);
тить гораздо большие возможности первого в вопросах уп-
CREATE TABLE
равления учётными записями и правами доступа. ProFTPD
в полном объёме поддерживает стандартные средства уп- proftpdb=> create table groups (groupname text, ↵
равления доступом (авторизация по системному файлу gid numeric, members text);
паролей, использование файлов /etc/shells, чтобы предо- CREATE TABLE
ставлять доступ только тем пользователям, которые име-
proftpdb=> insert into groups values('admins', 1000, ↵
ют действительную командную оболочку, и т. п.). Помимо 'admin');
этого к вашим услугам ряд других замечательных возмож-
INSERT 227037 1
ностей, о которых и поговорим.
Прежде всего отметим возможность использовать ба- proftpdb=> insert into users values ('admin', ↵
'adminpassword', 1000,
зу LDAP для аутентификации пользователей. Также вы мо- proftpdb(> 1000, '/home/admin', '/bin/sh');
жете вести базу виртуальных пользователей в обычном
INSERT 227038 1
текстовом файле или в СУБД (поддерживаются MySQL
и PostgreSQL). proftpdb=> \q
Для использования текстового файла, содержаще-
го данные учётных записей, используются директивы Как видите, структура таблиц очень напоминает струк-
AuthUserFile и AuthGroupFile. В этом случае ProFTPD будет туру файла /etc/passwd. Вам следует соблюдать уникаль-
руководствоваться данными этих файлов, как если бы поль- ность имён пользователя и группы, а также уникальность
зователи, описанные в них, были обычными, зарегистриро- uid в файле users и gid в файле groups. Если пользовате-

№2, февраль 2006 27


администрирование
Если в секции <Anonymous> вы укажете директиву
Вспомогательные утилиты AnonRequirePassword off, то вход на сервер будет выпол-
В составе пакета ProFTPD вы найдёте несколько утилит, кото- няться сразу после ввода имени пользователя (в нашем
рые могут быть весьма полезны для мониторинга работы ваше- случае – ftp или anonymous). Если же использовать значе-
го FTP-сервера и поиска в его работе «узких мест»: ние «on», то у пользователя будет запрошен адрес элек-
 ftpcount – выводит число подключённых в данный момент тронной почты в качестве пароля (хотя ввести он сможет
клиентов (с разбивкой по серверам); там всё что угодно).
 ftpdctl – позволяет управлять запущенным сервером proftpd; Более подробного рассмотрения заслуживает упомя-
 ftptop – аналог команды top для процессов proftpd; нутая выше секция <Limit>. С её помощью вы можете вво-
 ftpwho – выводит список подключённых к серверу пользова- дить ограничения как для всех пользователей (как в при-
телей; ведённом выше примере), так и для конкретных пользова-
 ftpshut – позволяет выполнить останов всех запущенных телей или групп. Вы можете налагать ограничения на ис-
proftpd-серверов в указанное время (аналог системной ко- пользование конкретных команд FTP-протокола (напри-
манды shutdown). мер, <Limit STOR> будет управлять использованием коман-
ды STOR). Существует несколько «макросов», охватываю-
Для каждой команды есть подробная страница справки (man). щих целые наборы FTP-команд (например, WRITE (группа
команд записи), READ (группа команд чтения), DIRS (работа
лей предполагается не слишком много, то об этом можно с каталогами). Секция <Limit LOGIN> определяет возмож-
заботиться и вручную. В противном случае следует уста- ность выполнять процедуру входа на сервер.
новить на соответствующие поля признак UNIQUE, чтобы Также нужно сказать пару слов о директиве AllowOverwrite,
СУБД сама следила за их уникальностью. с помощью которой вы можете полностью запрещать (off)
Последними двумя командами мы создаём группу или разрешать (on) перезапись существующих на сервере
«admins» и пользователя «admin». Теперь нужно указать файлов (дополнительно пользователь, пытающийся вы-
ProFTPD, как использовать эти данные: полнить такую перезапись, должен обладать достаточны-
ми системными правами).
### Настройка авторизации в PostgreSQL Ну и последнее, о чём следует упомянуть, говоря о про-
# Данные для подключения, формат:
# база@хост:порт логин пароль цедуре входа в систему, это о приветственных сообщениях,
SQLConnectInfo proftpdb@localhost:5432 serg sergpassword которые будут выводиться пользователю в том или ином
# Поддерживаемые типы авторизации
# (в данном случае – открытый текст) случае (при входе на сервер, при переходе в тот или иной
SQLAuthTypes plaintext каталог и т. д.). ProFTPD позволяет довольно гибко управ-
# Имя таблицы пользователей и далее – имена полей
SQLUserInfo users username pass uid gid home shell лять этими сообщениями, благодаря чему вы сможете сде-
# Имя таблицы групп и далее – имена полей лать работу на сервере достаточно простой и понятной. Ко-
SQLGroupInfo groups groupname gid members
# Сюда выводится отладочная информация нечно, большинство FTP-клиентов просто игнорируют по-
# (полезно на этапе настройки) добные сообщения, но для работы с помощью консольного
SQLLogFile /var/log/proftpd.log
клиента они могут быть полезны. Если вам захочется изме-
Теперь вы можете входить на сервер под именем «admin», нить то или иное сообщение, обратитесь к документации
хотя такого системного пользователя и нет. Главное – что- (см. директивы AccessDenyMgs, AccessGrantMsg, группу оп-
бы его домашний каталог реально существовал, если вы ций Display*), и вы наверняка найдёте способ сделать это.
используете директиву DefaultRoot ~. Обратите внимание,
что после авторизации процесс, обслуживающий соедине- Виртуальные серверы
ние, получит uid и gid, указанные в базе, так что вам следу- Виртуальный FTP-сервер? А почему бы, собственно, и нет!
ет позаботиться об отсутствии пересечений с системными Конечно, это будет не то же самое, что мы привыкли ви-
пользователями. Также учитывайте этот факт в контексте деть в Apache, когда на один IP-адрес «навешивается» не-
прав доступа к тем или иным файлам (заметьте, что вы мо- сколько десятков, а то и тысяч «народных» сайтов. Всё де-
жете дать на любой файл или каталог права несуществую- ло в том, что в протоколе FTP нет того «волшебного» пара-
щего пользователя, указав любые нужные вам идентифика- метра заголовка – Host, – который позволяет веб-серверу,
торы, например, так: chown 9999:9999 /home/admin). поддерживающему протокол HTTP версии 1.1, разобрать-
Для организации анонимного доступа используется сек- ся, что же на самом деле клиент желает увидеть на экра-
ция <Anonymous каталог>, где каталог – это имя каталога не своего монитора.
(абсолютный путь или с использованием символа ~), доступ В случае FTP каждый виртуальный сервер всё же дол-
в который будет осуществляться без обязательного знания жен иметь свой собственный IP-адрес, по которому к не-
пароля. Типичный пример приведён ниже: му будет осуществляться доступ. Для тех, кто испытыва-
ет дефицит адресного пространства (а разве бывает так,
<Anonymous ~ftp> # Анонимный доступ в каталог ~ftp чтобы IP-адресов всегда хватало?), есть обходной маневр –
User ftp # Пользователь и группа, с правами
Group ftp # которых будет работать процесс то, что в Apache называют «port-based vhosts». Вы можете
UserAlias anonymous ftp # Псевдоним anonymous = ftp настроить ProFTPD таким образом, что каждый виртуаль-
<Limit WRITE> #
DenyAll # Запрещаем запись ный сервер будет прослушивать свой порт. Очевидно, что
</Limit> # это непригодно для коммерческого хостинга, когда каж-
</Anonymous> #
дый клиент ожидает получить «стандартный» сервер, ко-

28
администрирование
торый будет отвечать на запросы, адресованные на 21-й кто не входит в перечисленные в директиве AllowGroup
порт. Однако для личных нужд (например, когда FTP ис- группы:
пользуется для доступа к корню веб-сервера) такой ме-
тод может оказаться вполне пригодным. Так что мы уде- DefaultRoot ~ !admin
RequireValidShell off
лим внимание и ему. <Limit LOGIN>
Итак, виртуальный сервер задаётся секцией <VirtualHost AllowGroup wheel,dialup
</Limit>
IP-адрес>. Вместо адреса можно указать и доменное имя. <Limit WRITE>
В данной секции допускаются очень многие директивы, уп- AllowGroup wheel
</Limit>
равляющие работой сервера – вы можете задать отдельно-
го пользователя, с чьими правами он будет работать; на- Теперь admin будет свободно «бродить» по всему дере-
страивать анонимный доступ; установить собственный спо- ву каталогов, а члены групп wheel и dialup смогут работать
соб авторизации; вводить различные ограничения. Общие в своих домашних каталогах. Заметьте, что пользователь
для всех виртуальных хостов опции можно вынести в сек- admin должен быть членом одной из указанных групп (ско-
цию <Global>. рее всего, он уже входит в wheel), иначе ему не позволят
Пример конфигурации см. ниже, в решении задачи 5. авторизоваться.

Другие директивы, которые могут Пример 2. Несколько анонимных каталогов


быть полезны Постановка задачи: требуется настроить на одном FTP-сер-
Существует масса директив, которые отвечают за запись вере три анонимных каталога – для разработчиков, для тес-
информации в лог-файлы, за фильтрацию запросов с по- теров и для пользователей.
мощью регулярных выражений (например, чтобы устано- Решение: в данном случае проще всего создать три сек-
вить ограничения на файлы с определённым расширени- ции <Anonymous> для разных пользователей, имена кото-
ем), за специальную обработку файлов (например, можно рых должны вводиться при подключении. Для определен-
автоматически добавлять префикс ко всем загружаемым ности разработчикам нужно будет входить под именем
на сервер файлам или управлять правами доступа с помо- developer, тестерам – tester, остальным пользователям –
щью Umask), и т. д. под стандартными anonymous/ftp (ну и для общности до-
Вы можете управлять дисковыми квотами (модуль бавим ещё один псевдоним – user):
mod_quota, директивы DefaultQuota, QuotaType, UserQuota,
GroupQuota и др.), скоростью скачивания, и проч. <Anonymous ~developer>
User developer
В общем, ознакомьтесь с документацией – там много Group project
интересного. </Anonymous>

<Anonymous ~tester>
Несколько практических примеров User tester
Group project
Для закрепления материала рассмотрим небольшие при- </Anonymous>
меры, демонстрирующие решение некоторых задач, свя-
<Anonymous ~user>
занных с настройкой FTP-сервера. User user
Group project
UserAlias ftp user
Пример 1. Конфигурация, близкая к стандартной UserAlias anonymous user
Постановка задачи: </Anonymous>
 необходимо с помощью FTP администратору (пользо-
ватель admin) открыть доступ ко всему дереву катало- Заметьте, что имя каталога, указанного в теге <Anonymous>,
гов сервера; не обязательно должно совпадать с именем пользовате-
 нескольким «своим» пользователям, входящим в груп- ля – оно может указывать на любой существующий ката-
пу wheel, – доступ в их домашние каталоги с правом за- лог. Имя же пользователя, при вводе которого осущест-
писи; вляется анонимный вход, задаётся директивой User, при-
 пользователям, работающим через коммутируемые со- чём указанный пользователь должен существовать в сис-
единения (группа dialup), дать доступ на чтение в один теме (в случае виртуальных пользователей для них долж-
из каталогов (для всех членов группы он установлен ны быть указаны uid и gid, под которыми будет запущен
как домашний); процесс). В последней секции мы указываем два псевдо-
 всем остальным доступ по FTP запретить. нима, чтобы в этот каталог можно было попасть не только
под именем user, но и как ftp или anonymous.
Решение: эту задачу можно решить в два этапа – во-пер-
вых, ограничим доступ домашними каталогами всем поль- Пример 3. Общий каталог
зователям, кроме пользователя admin (первая строка при- Постановка задачи: есть группа пользователей, которым
мера). Поскольку пользователи dialup не имеют реальной нужно предоставить полный доступ каждому в свой до-
командной оболочки, то второй строкой отключим провер- машний каталог, а также в общий для всех каталог толь-
ку наличия shell пользователя в файле /etc/shells. Ну и, во- ко на чтение.
вторых, в секциях <Limit> «отсекаем» возможность входить Решение: сразу напрашивается идея использовать
на сервер (LOGIN) и писать в каталоги (WRITE) для всех, символьную ссылку на общий каталог из домашних ка-

№2, февраль 2006 29


администрирование
талогов пользователей, а затем «запереть» всех с помо- ры на стандартном порту (21), при этом администратор дол-
щью «DefaultRoot ~». Однако выход за пределы корнево- жен иметь возможность работать с сервером с помощью
го (в данном случае – домашнего для пользователя) ката- третьего FTP-сервера. При этом реальных адресов на сер-
лога по символьной ссылке запрещён. Так что нужно ис- вере – всего два.
кать обходной путь, например, такой: Решение: поскольку «очень важных» клиентов ущем-
лять в правах нельзя, придется им давать «нормальный»
DefaultRoot /home !admin хостинг на реальных IP-адресах. Страдать, как обычно,
<Directory /home>
HideNoAccess on будет администратор, которому придётся довольствовать-
</Directory> ся работой через нестандартный порт (для красоты выбе-
рем порт 2121):
Чтобы это сработало, должны выполняться некоторые
ограничения – все домашние каталоги пользователей долж- DefaultAddress user1.mydomain.ru
Port 2121
ны размещаться в /home, кроме того, на них должны быть SocketBindTight on
выставлены права 0700 (доступ только владельцу катало-
<VirtualHost user1.mydomain.ru>
га). Общий каталог также должен располагаться в /home, ServerName "User1 Virtual Host"
но с правами, позволяющими любому пользователю читать Port 21
.. .. ..
его содержимое. В этом случае события будут развиваться </VirtualHost>
следующим образом:
<VirtualHost user2.mydomain.ru>
 после успешной авторизации процесс, обслуживающий ServerName "User2 Virtual Host"
соединение, получит права авторизованного пользова- Port 21
теля – владельца одного из каталогов; .. .. ..
 поскольку прав на чтение чужих домашних катало- </VirtualHost>
гов у данного пользователя нет, то сервер ProFTPD
в соответствии с директивой HideNoAccess скроет их Что здесь нужно пояснить: вне секций мы описываем
и не представит по команде LIST (теоретически доступ параметры «административного» сервера, который будет
в скрытые каталоги возможен, но в данном случае он привязан к домену user1.mydomain.ru и порту 2121. Дирек-
будет предотвращаться системными правами); тива «SocketBindTight on» требует от ProFTPD «разумного»
 общий каталог скрыт не будет, и пользователь, подняв- подхода к созданию сокетов, когда порты прослушивают-
шись из своего каталога (куда он попадёт автоматичес- ся только на тех адресах, где это необходимо, а не на всех
ки) в каталог /home, увидит его и сможет в него перейти. обнаруженных интерфейсах. Ну и секциями <VirtualHost>
вводим наши пользовательские серверы (показаны толь-
Пример 4. Запись без права чтения ко директивы, отвечающие за создание виртуальных сер-
Постановка задачи: разрешить анонимным пользователям за- веров).
грузку файлов на сервер. Чтобы избежать злоупотреблений
(когда ваш анонимный сервер превратится в средство обмена Напутствие
«пиратскими» файлами), чтение из данного каталога необхо- Пожалуй, приведённых сведений должно быть достаточно,
димо запретить (в дальнейшем администратор будет просмат- чтобы начать работать с ProFTPD. Но, как вы можете уви-
ривать файлы и публиковать нужные в других каталогах). деть в документации, существуют ещё десятки (если не со-
Решение: здесь всё достаточно просто – на рассматри- тни) опций, с помощью которых можно добиться от серве-
ваемый каталог нужно установить соответствующие огра- ра почти всего, что вам может понадобиться. Как говорит-
ничения (в секции LIMIT): ся, нет предела совершенству.
Дополнительную информацию вы всегда можете полу-
<Anonymous ~ftp> чить по ссылкам, приведённым ниже.
User ftp
Group ftp Удачи вам и настойчивости, чтобы преодолеть всё!
<Limit WRITE>
DenyAll
</Limit> Ссылки:
<Directory ~ftp/upload> 1. Официальный сайт проекта ProFTPD – http://www.proftpd.org.
<Limit WRITE>
AllowAll 2. ProFTPD mini-HOWTO – http://devil.st.vstu.edu.ru/ftpd/howto.
</Limit> 3. Богомолов С. FTP-сервер ProFTPD: установка, настройка и ис-
<Limit READ>
DenyAll пользование – http://bog.pp.ru/work/ProFTPD.html.
</Limit> 4. Лаврентьев А. Маленькие нюансы при установке и настройке
</Directory>
</Anonymous> ProFTPD – http://opennet.ru/base/net/adv_proftpd.txt.html.
5. Великанов С. Ограничение доступа на сервере proftpd при по-
То есть для каталога upload мы выставляем «инверсные» мощи mod_wrap – http://www.opennet.ru/base/net/proftpd_mod_
права – разрешаем запись, но запрещаем чтение. wrap.txt.html.
6. Бочкарёв Д. Настройка ProFTPD на сервере под управлени-
Пример 5. Виртуальные серверы ем FreeBSD – http://opennet.ru/base/net/proftpd_setup.txt.html.
Постановка задачи: есть два «очень важных» клиента, ко- 7. Настройка связки ProFTPD + MySQL – http://fr33man.ru/
торым необходимо предоставить виртуальные FTP-серве- proftpd.html.

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

FreeDOS – новый взгляд


на старые вещи

Иван Максимов
В мае 1994 года корпорация Microsoft выпустила последнюю версию операционной системы
MS-DOS, позже эта ОС входила в состав Windows, но различные компании и энтузиасты
продолжают создавать, развивать и дорабатывать DOS. Какие же проекты существуют
сегодня?

В
настоящее время многие за- совместимы с программным и аппа- темой. Первое и простое решение –
были про операционную сис- ратным обеспечением? Сегодня рас- создать загрузочный диск из Windows,
тему DOS, ее используют край- смотрим одну из DOS-систем, подде- добавить нужные компоненты и гото-
не редко, в случаях сбоя как послед- рживаемую и дорабатываемую до на- во, но есть в этом решении несколь-
нюю маленькую надежду для восста- стоящего времени, сравним с аналога- ко но... Места почти всегда не хвата-
новления данных и теста оборудова- ми и проведем тестирования. ет на обычный тест жесткого диска,
ния. Но MS-DOS давно устарел, ка- памяти и других узлов PC, нет нуж-
кие новые проекты доступны в насто- Почему FreeDOS? ных по современным меркам утилит
ящее время? Чем они отличаются? Некоторое время назад мне пришлось и иные проблемы... Поэтому было ре-
Есть ли их поддержка? Насколько они создать загрузочный диск с DOS-сис- шено ознакомиться с альтернативами.

32
администрирование
DR-DOS (www.drdos.com) оказался платным, а искать все-
возможные ключи и патчи не хотелось по многим причи-
нам. Предыдущая версия DR-DOS от компании Caldera бы-
ла слишком устаревшей, поддержка остановлена. Послед- Рисунок 1. Первое меню загрузочной дискеты
няя версия RxDos (http://rxdos.sourceforge.net) была выпуще-
на в 2000г. Достаточно любопытен проект PTS-DOS (http://
www.phystechsoft.ru) Российская разработка, поддержива-
емый, используемый в промышленных целях, но проект
не бесплатен. Еще одной альтернативой оказался FreeDOS
(www.freedos.org) – бесплатен, функционален, доступен
Рисунок 2. Начальная настройка инсталляции FreeDos
большой выбор утилит и до сих пор дорабатывается.
программы-оболочки: Volcov Commander, Norton Commander,
Применение Dos Navigator, SEAL, GEM. Тесты оборудования, компилято-
Я не стану переводить и переписывать информацию с раз- ры, ПО для резервного копирования данных и многие другие
ных сайтов, говорящую о том, что DOS еще нужен на сла- распространенные программы. Ниже я приведу более под-
бых машинах, всевозможных терминалах и специальном робный список наиболее необходимых утилит и программ
оборудовании, что это ОС с открытым исходным кодом, для работы в FreeDOS с ссылками на веб-ресурсы.
все это было уже сказано и не раз. Я опишу, где сталки- Нельзя не упомянуть и о 32-битной версии FreeDOS.
вался с ним в российской действительности. Впервые в ра- Проект находится в стадии разработки, но доступен для оз-
боте со специальным ПО, в частности для работы с мини- накомления. Нетрудно догадаться, что предназначен он
АТС. Также я его встречал проинсталлированным на гото- для работы с 32-битными приложениями, но на данной ста-
вых компьютерах в магазинах с установленными тестами, дии разработки 32-битный FreeDOS не стабилен. Разра-
покупателю предлагался Windows или установленная ОС ботчики предупреждают нас о возможных проблемах с ап-
( FreeDOS). Один раз мне довелось его увидеть в качестве паратной частью PC и о невозможности запуска 16-битных
дискеты для удаления Linux с компьютера. Зачем? Прода- приложений, поэтому большинство утилит и драйверов для
вец в магазине ответил, что на их PC устанавливается Linux, DOS применить невозможно. Но, несомненно, данная вер-
многие покупатели просто не знают, как его удалить, а дис- сия тоже заслуживает внимания, поэтому я кратко коснусь
кета при загрузке удалит Linux, создаст диск с FAT32, под- описания 32-битной версии в одном из разделов. Должен
ключит CD-ROM и установит Volkov Commander, благо ос- еще раз напомнить, что проект FreeDOS и большинство
новам «нортона» учили в школах многих. Еще я его видел утилит к нему бесплатны.
в офисе моего коллеги на загрузочных дисках с програм-
мой ghost от Symantec, естественно, с готовым образом ОС Установка и работа
Windows. Также мне попадались диски компаний Asus, MSI Возможны установки FreeDOS на дискету, компакт-диск или
с драйверами к материнской плате и c FreeDOS в качестве жесткий диск. Образы дискеты и компакт-дисков находят-
загрузочной ОС, с тестами и прошивками BIOS. Как видите, ся на официальном сайте (раздел «Download FreeDOS»).
DOS, а конкретно FreeDOS достаточно популярен. DR-DOS В данном разделе находится утилита «rawrite», позволя-
я встречал лишь раз, причем не текущую версию от компа- ющая разворачивать образ на дискету. Разработчики ре-
нии DRDOS, Inc, а от Caldera, Inc в продукте Partition Magic 8. комендуют использовать образы компакт-дисков, так как
Перейдем к обзору FreeDOS... они более стабильны и лучше протестированы. Размер
образа дискеты стандартен 1.4 Мб (доступны дистрибу-
Краткий обзор тивы дискет 360, 720 и 1200 Кб), компакт-дисков пример-
Последняя доступная версия (на момент написании статьи) но 12 Мб и 102 Мб. Итак, скачав нужный образ, копируем
FreeDOS Beta9SR2 от 1 декабря 2005. Итак, какие утилиты его на носитель.
и программы доступны в данной ОС? На официальном сай-
те (www.freedos.org) доступны необходимые и знакомые бы- Обзор дистрибутива на дискете
валым пользователям и администраторам такие DOS-ути- Начнем с обзора дискеты, командой:
литы, как fdisk, format, scandisk, emm386, mem, драйвера для
CD-ROM, мыши. Также стоит отметить драйвера для досту- rawrite -f fd1440.img
па к жесткому диску в режиме UDMA, утилиты для работы
с модемом, архиваторы. Пользователи ОС Linux найдут на копируем образ, перезагружаем PC. Думаю, не стоит доско-
официальном сайте такие распространенные программы, нально описывать каждый пункт меню, большинство поль-
как vim, lynx, wget, gzip и другие. Приятной особенностью зователей справятся с выбором диска и папки для инстал-
является то, что в командную строку встроен аналог bash- ляции системы, затрону лишь самые интересные и необхо-
completion. Со всеми утилитами можно ознакомиться и ска- димые пункты меню. После перезагрузки перед нами воз-
чать их на официальном сайте ОС. Важным нововведени- никает меню (см. рис. 1) с возможностью выбора:
ем в FreeDOS, думаю, стоит считать официальную подде-  Инсталлировать FreeDOS – образ дискеты развернет-
ржку протокола TCP/IP. Но что еще умеет FreeDOS? Что не- ся в виртуальный диск.
обходимо для подобной ОС? Существует множество утилит  Загружать утилиту Smart Boot Manager – мультизагруз-
для работы с файловыми системами NTFS, ext2/3 и reiserfs; чик ОС.

№2, февраль 2006 33


администрирование
 Не использовать CD-ROM.
 Использовать CD-ROM и редактировать файл инстал-
ляции install.bat.
 Загрузить дистрибутив из Интернета.

Выберем последний пункт меню. Нам предложат загру-


зить новые драйвера CD-ROM или образ 12 Мб дистрибу-
тива. Далее запускается аналог Linux-утилиты lspci (спи-
сок PCI-устройств), и нам предложат установить драйвера
для сетевой карты с рекомендацией конкретных файлов.
Далее идет мастер оснастки TCP/IP: наш IP, маска сети,
DNS-сервер и шлюз. После этого в зависимости от выбран-
ного пункта меню программа wget начнет загрузку из Ин-
тернета. Очень хотелось увидеть аналог портов в FreeBSD
для установки ПО, но, увы, видимо, мы это увидим (если
Рисунок 3. Меню загрузочного компакт-диска увидим) только в следующем релизе FreeDOS.
В заключение, последует мастер инсталляции FreeDOS
на жесткий диск. Будут установлены основные утилиты, об-
работчик команд (command.com), драйвера CD-ROM. Ути-
литы – стандартный набор fdisk, format, mem. После уста-
новки системы мы видим перед собой стандартный мини-
мальный набор программ, необходимый для работы с PC.
На дискете остаются тест памяти и Smart Boot Manager.
Что ж, большего ожидать было нелогично, перейдем к об-
зору CD-диска.

Обзор малого дистрибутива


Образ загрузочного диска разворачивается любой програм-
мой для записи компакт-дисков (в моем случае это была
«k3b»). Чем же отличается 12-мегабайтная версия, кроме
размера образа? Меню инсталляции иное, по сравнению
с представленным на дискете (см. рис. 3).
Рисунок 4. Интерфейс графической оболочки GemXP После загрузки CD-ROM нам предложат:
 Установить FreeDOS.
 Загрузиться с жесткого диска.
 Загрузиться с дискеты.
 Отменить загрузку с CD-ROM.

Серьезным отличием является поддержка 85 кодовых


страниц, включая русскую. В конце следует мастер инстал-
ляции FreeDOS на PC. Пункта загрузки дистрибутива из се-
ти Интернет нет. Отличие данного дистрибутива в большем
количестве стандартных утилит и драйверов. Присутствует
несколько версий драйверов для работы с мышью, утили-
ты для работы с верхней памятью, CD-ROM, режима досту-
па UDMA, несколько программ для восстановления данных
и многие другие. Всего после инсталляции в каталоге bin
появится 120 утилит и драйверов. Папки doc и help не пусты,
присутствует большое количество документации по утили-
Рисунок 5. Интерфейс графической оболочки Seal2 там и драйверам. Просматривая документацию, должен за-
метить, что она составлена достаточно грамотно, содержит
 Запускать тест памяти PC – memtest86+. много полезной информации. Набрав, предположим, коман-
 Инсталлировать FreeDOS (disk safe) – работа с дискеты. ду «help del», на экран выведется краткая подсказка по ко-
манде del. По сравнению с man в *nix-системах справка ме-
При выборе первого или четвертого пункта меню нее информативна, но поможет разобраться с синтаксисом
(см. рис. 2) нам предложат: программ. Не стоит забывать и про ключ «/?» в конце ко-
 Загрузить стандартные драйвера (нестабильная вер- манд – вывод основных параметров данной утилиты. В пап-
сия). ке appinfo присутствует информация о разработчиках всех
 Использовать свой драйвер CD-ROM. утилит, вошедших в ОС, их адреса электронной почты, веб-

34
администрирование
ресурсы. Исходных кодов утилит на диске нет, но их можно
найти на веб-страницах разработчиков, указанных в папке
appinfo или на сайте. Итоговый размер ОС FreeDOS после
инсталляции примерно равен 5 Мб.

Обзор полного дистрибутива


Рассмотрим самый большой дистрибутив FreeDOS, как
уже упоминалось, его размер 102 Мб. Меню при загрузке
диска не отличается от 12 Мб дистрибутива. При инстал-
ляции системы FreeDOS обнаруживает уже установлен-
ные операционные системы и добавляет «себя» в меню
boot.ini, не повреждая его. В момент установки несколько
раз были предупреждения об отсутствии некоторых паке-
тов, возможно, они появятся в финальной версии FreeDOS.
Чем же отличается столь большой дистрибутив? Количест-
во утилит в папке bin возросло до 239, появились шрифты
в папке founts, графические оболочки и текстовые редакто-
ры. Присутствуют графические оболочки GemCore, GemXP
(см. рис. 4), OpenGem и Seal2 (см. рис. 5).
О первых трех я ничего положительного, к сожалению,
сказать не могу, многие приложения «намертво виснут»,
не всегда отображаются все логические диски. Порадо-
вал Seal2 – приличная графика, продуманный интерфейс,
нормально определились и отобразились все устройства.
На мой взгляд, его в принципе можно использовать в рабо- Рисунок 6. Скриншот файла config.sys
те. Неприятным моментом было только одно обстоятельс-
тво: если драйвера мыши не загружены, seal2 при запуске
выбрасывает ошибку «Kernel panic:....», помогает только
reset. В целом, графические оболочки для данной ОС не-
актуальны, так как DOS-системы ориентированы на иные
интерфейсы.
В папках doc и help собрана документация по всем 239
утилитам. Появились еще два текстовых редактора, кроме
стандартного edit, это знакомый бывалым пользователям
DOS-систем редактор setedit и не менее известный Linux- Рисунок 7. Скриншот файла autoexec.bat
редактор vim. С данными редакторами проблем не возник-
ло. Размер полного дистрибутива после установки на жес- применять ее не рекомендуется. Будем ждать новых ре-
ткий диск примерно равен 90 Мб. лизов этой ОС.

Обзор 32-битного дистрибутива FreeDOS Создание загрузочного диска


На официальном сайте проекта (http://freedos-32.sourceforge. Сразу должен сказать, что буду описывать создание за-
net) доступен для ознакомления дистрибутив FreeDOS32 грузочной дискеты, так как хочу показать одно из преиму-
версии 0.0.5 от 1 июня 2005 года (образ для флоппи-дис- ществ FreeDOS – малый размер и функциональность, хотя
ка). Развернем образ на дискету. После загрузки перед на- все действия можно применить и к компакт-диску, и к жес-
ми появится меню загрузчика GRUB с различными возмож- ткому диску. Итак, какими функциями должна обладать по-
ностями загрузки FreeDOS32: работа с дискетой (нет воз- добная ОС на дискете? Конечно, это зависит от задач, но я
можности обратиться к жесткому диску), работа с жест- решил создать «реаниматор» в случае сбоя ОС и тест обо-
ким диском, тест 32-битного приложения. После загрузки рудования: значит необходима поддержка распространен-
выбранного пункта меню можно попробовать поработать ных файловых систем NTFS и ext2/3, тесты оборудования,
с данной ОС, именно «попробовать поработать». Система, работа с usb flash, приводом CD-ROM, небольшие систем-
как это уже было сказано, не запускает 16-битные прило- ные утилиты и драйвера. Для «аварийной дискеты», на мой
жения, при попытке запуска консольных win32-приложе- взгляд, этого достаточно.
ний ОС либо висла, либо сообщает о нехватке различных Для начала скачаем необходимые файлы для загрузоч-
библиотек. Доступны стандартные DOS-команды в мини- ной области и ядра, их три: kernel.sys, command.com, sys.com.
мальном наборе, драйвера CD-ROM, мыши, ... и все. Очень Из любой DOS-совместимой системы выполним команду
хотелось увидеть более-менее рабочую 32-битную версию «sys [имя диска:]». Создадим два необходимых конфигу-
FreeDOS, но чудо не свершилось... Возможно, данная вер- рационных файла: config.sys, autoexec.bat и подготовим не-
сия ОС будет интересна разработчикам, на сайте выложе- обходимые папки и файлы. Драйвера я разместил в папке
ны исходные коды 32-битной ОС, но для реальных задач drivers, а утилиты в utils.

№2, февраль 2006 35


администрирование
С официального сайта ОС скопируем необходимые ках. С USB немного сложнее: определение USB Flash длит-
нам программы: драйвер расширенной памяти himem.exe ся 3-5 сек., различные драйвера (версии 0, 1, 2, 3) предна-
и верхней emm386.exe. Драйвера мыши – ct-mouse.exe, значены для разных наборов чипсетов, поэтому перед за-
драйвера CD-ROM – xcdrom.exe, аналог программы грузкой каждого драйвера будет задан вопрос, загружать
mscdex.exe – shcdx33a.com, драйвера UDMA для жестко- данный драйвер или нет.
го диска. Драйвера USB-шины для DOS мне встретились Рассмотрим autoexec.bat подробнее. Как я уже писал,
в двух вариантах: драйвера «duse» я не использовал из- xmsdsk позволяет назначать буквенное обозначение име-
за достаточно крупного размера, поэтому я их не тестиро- ни виртуального диска сразу в момент загрузки драйвера,
вал, а вот драйвера от «Panasonic Communications» с ре- что я и сделал. Обработчик команд (command.com) удобнее
сурса http://johnson.tmfc.net занимали минимальное про- сразу переписать на виртуальный диск, для того чтобы по-
странство и, как это выяснилось позже, стабильно работа- том можно было работать без дискеты. Остальные парамет-
ли. Результаты тестирования FreeDOS на совместимость ры, думаю, не требуют дополнительного описания.
с программным и аппаратным обеспечением будут пред- Для ускорения работы программ и экономии места
ставлены ниже. на дискете, но в ущерб скорости загрузки системы мож-
Стандартные утилиты: format.exe, mem.exe, fdisk.exe, но запаковать крупные утилиты любым DOS-архиватором,
edit.exe. а позже распаковать их на виртуальный диск или для ав-
Утилит для работы с NTFS и ext2/3 из-под DOS-совмести- томатизации добавить строку распаковки в autoexec.bat.
мых систем предостаточно в Интернете, но я выбрал утили- Например:
ты, занимающие минимальное пространство, это: утилита
чтения разделов ext2/3 с сайта http://ext2read.sourceforge.net rawrite -f fd1440.img
и утилита ntfs reader c http://www.ntfs.com (утилиты бес-
платны). Итак, дистрибутив аварийной дискеты собран и готов
Утилит для создания виртуальных дисков много, на офи- к работе. Особенностью утилит чтения файловых систем
циальном сайте их около 20, мой выбор давно пал на ути- NTFS и ext2/3 является то, что они не «обращают внима-
литу xmsdsk. Почему именно так? Многие из тех пользова- ния» на политики безопасности файловых систем, так как
телей, кто в прошлом создавал загрузочные диски, стал- не имеют доступа к системозависимым пользовательским
кивался с проблемой определения буквы виртуального бюджетам, с которыми они создавались. Дополнительно
диска в системе. Утилита xmsdsk позволяет сразу назна- на дискету я записал комплексный тест DR.Hard, для тес-
чать имя диска, что достаточно удобно. Итак, после копи- тирования PC. После заполнения дискеты у нас осталось
рования, распаковки и размещения нужных программ на около 200 Кб.
дискете опишем их в конфигурационных файлах config.sys
(см. рис. 6) и autoexec.bat (см. рис. 7). Сравнения и тесты
Рассмотрим config.sys немного подробнее. Я решил Итак, на официальном сайте FreeDOS написано, что ОС
не создавать меню из псевдографики, так как дискета со- 100%-совместима с MS-DOS приложениями и стабильно
здавалась для определенной цели. Драйвера UDMA под- работает с оборудованием, проверим эти данные. Я про-
гружаются всех версий – их загрузка происходит доста- вел небольшие тесты на доступном мне ПО и оборудова-
точно быстро, а включаются они на разных жестких дис- нии, результаты представлены ниже.

Таблица 1. Размеры утилит различных DOS-систем Сравнение размера утилит


FreeDos-утилиты Win98-утилиты Caldera Dr-DOS 7.03 Продемонстрирую разницу в размере различных утилит.
command.com 64,8 command.com 93 command.com 66,7 Должен заметить, что малый размер означает не только
kernel.sys 43,7 msdos.sys+io.sys 218,8 Ibmdos.com 30,8 удобство, но и лучшую оптимизацию. Функциональность
sys.com 11,2 sys.com 18,7 sys.com 18,3 утилит за счет малого размера, как это может показать-
ся, не пострадала, а наоборот добавлено много новых
Fdisk.exe 37,9 Fdisk.exe 63,1 Fdisk.com 28,1
функций по сравнению с последним MS-DOS и аналога-
Himem.exe 8 Himem.sys 32,4 Himem.sys 14,7
ми (см. таблицу 1).
Format.exe 30,2 Format.com 48,9 Format.com 23,8
В разных ОС одни и те же утилиты иногда имеют раз-
Deltree.com 4,1 Deltree.exe 18,7 Deltree.bat 3 личные названия, были указаны их полные названия в каж-
Find.com 4,8 Find.exe 6,5 Find.exe 13,3 дой ОС, размер утилит указан в Кб. (Caldera Dr-DOS 7.03
Mem.exe 13,9 Mem.exe 31,6 Mem.exe 16,8 последнее обновление в 1999 г.)
shcdx33a.sys 6,7 mscdx.sys 24,9 mwcdex.sys 21,7
emsdsk.exe 19 ramdrive.sys 15 vdisk.sys 4 Работа с MS-DOS совместимыми приложениями
Label.exe 4 Label.exe 9,2 Label.com 9
Проблем с запуском ПО под DOS не возникало, кроме слу-
чаев, когда программа наотрез отказывалась работать
attrib.com 5 attrib.exe 15,4 attrib.exe 12,3
с драйвером emm или была нехватка базовой памяти, но это
chkdsk.exe 35,3 chkdsk.exe 28,5 chkdsk.exe 59,5
стандартные проблемы со специфичным ПО еще с давних
edit.exe 59,6 edit.com 70,3 edit.com 103,7 времен. Думаю, что стоит отдельно упомянуть, что про-
sort.com 4,2 sort.exe 25,8 sort.exe 10,2 блем с установкой ОС компании Microsoft из-под FreeDOS
Итого 352,4 720,8 435,9 не возникало.

36
администрирование
Полезные утилиты от сторонних разработчиков: Таблица 2. Тест на совместимость с «железом»
 http://www.egner-online.de/vc – Volkov Commander, од- Оборудование Проблемы
на из самых маленьких shell-оболочек. Ip1 166mmx/16simm/cdrom GoldStar 4x/hdd 1g quantum Все ОК
 http://www.ritlabs.com/dn – Dos Navigator, еще одна про- Amd k6-500/256dimm/dvd-rom Samsung/hdd 5g
грамма-оболочка. Все ОК
quantum/usb
 http://www.f-prot.com/index.html – F-Port, антивирус. Ip2 433cel/192dimm/hdd 10g seagate/usb USB Flash не заработала
 http://www.hwinfo.com – hwinfo, программа предостав- Ip3 1.1g cel/256dimm/cd-rom MSI/hdd 40g seagate/usb Все ОК
ляющая информацию пользователю о аппаратной час-
Ip4 2.1g cel/256ddr/cd-rw Toshiba/hdd 40g samsund/usb Режим udma не заработал
ти PC, обновляемая достаточно часто.
Amd k7-1.7g atlonXP/265ddr/cd-rom LG+cd-rw LG/hdd
 http://www.sysanalyser.com – еще один тест оборудо- 120g samsung+wd160g/usb
Все ОК
вания. Amd k7-2.5g Barton/512ddr/dvd-rw nec/sata raid на логи-
Режим udma не заработал
 http://www.sysinfolab.com/ru – и еще один небольшой ке sil3112 120+160wd/usb
тест оборудования.
 http://johnson.tmfc.net – сборник драйверов для USB-ус- Но были и проблемы:
тройств и иные утилиты.  Как видно из теста, возможны некоторые затруднения
с определением USB Flash-памятью в FreeDOS.
Запуск и работа этих программ прошли без проблем.  Были проблемы с стандартным драйвером atapicdd.
Существует еще огромное количество ПО для DOS, sys – на одной машине он не читал диски, на другой оп-
причем обновляемого до сих пор. На официальном сайте ределял один CD-ROM как два устройства, но драйвер
http://www.freedos.org в разделе ссылок можно найти раз- xcdrom.sys работал стабильно.
личные дополнительные утилиты и программы для работы  Был конфликт драйверов UDMA для жесткого диска
с файловыми системами, оборудованием, тесты и многое и CD-ROM (xcdrom.sys), причем система просто и скром-
другое. Я, конечно, просто не в силах протестировать да- но сообщала «kernel panic:...», все решилось заменой
же часть доступного на сайте ПО, но думаю, и остальные драйверов UDMA для жесткого диска.
приложения работать будут стабильно.  Также из трех представленных на сайте утилит format –
одна форматировала дискеты через раз, пришлось ее
Работа с оборудованием заменить.
В ходе тестирования были выявлены некоторые проблемы  Доступная на сайте утилита scandisk очень часто «вис-
с совместимостью оборудования, но в целом FreeDOS про- ла», но ее также успешно можно заменить.
шел и этот тест. Опишу лишь возникшие проблемы на данных  Самой большим неудобством было то, что при выни-
PC (см. таблицу 2). Стабильно работали USB Flash: Kingston мании USB Flash из гнезда и установки обратно Flash
USB Data Travel 2.0, Neo Flash Drive 1.0, Transcend JetFlash. не определялась.
После проблем с USB на PC № 3 (см. таблица 2) драй-  После инсталляции полного дистрибутива систе-
вера USB-Flash тестировать еще на 10 машинах: определе- мы русская кодовая страница иногда неправильно
ния универсальной последовательной шины и других драй- устанавливается, рекомендую проверить значения
веров прошло стабильно, за исключением отсутствия под- в fdconfig.sys:
держки UDMA на некоторых PC.
COUNTRY=007,866,C:\FDOS\BIN\COUNTRY.SYS
Общие впечатления
Постараюсь описать все плюсы и минусы, с которыми И в autoexe.bat две команды:
я столкнулся во время работы с FreeDOS. Итак, плюсы:
 Поддержка аналога bash-completion: «донабор» имен SET CODEPAGE=866
MODE CON CP PREP=((866) C:\FDOS\cpi\EGA3.CPX)
каталогов, история набранных команд и другое.
 Расширен синтаксис описания команд в конфигураци- В принципе это все серьезные проблемы, которые
онных файлах (config.sys, autoexec.bat). я встречал при исследовании готовых дистрибутивов
 Богатый набор утилит, их компактный размер и функ- и сборки собственного из сторонних утилит.
циональность.
 Приятно видеть, что «старичок» DOS способен на та- Выводы
кие вещи как: работа с Flash-памятью, работа с файло- В данном обзоре я не мог охватить все стороны ОС
выми системами NTFS, ext2/3 и даже reiserfs, возмож- FreeDOS, но постарался описать, на мой взгляд, его основ-
на и запись в данные файловые системы, но утилиты ные возможности. Данная ОС, по-моему, подходит для со-
слишком громоздкие для использования на дискетах. здания «аварийных дисков», начальных загрузчиков, при-
 Поддержка режима UDMA для жесткого диска и CD-ROM. чем может работать как на новом, так и старом оборудо-
 Было сюрпризом увидеть *nix-утилиты в FreeDOS, та- вании. Радует то, что проект развивается, осуществляется
кие как текстовый редактор vim, браузер lynx, архива- исправление ошибок, оптимизируется код программ, вво-
торы gzip, tar и другие программы. дятся новые возможности.
 Работает поддержка TCP/IP, хотя еще и на слабом уров- Чтож, посмотрим, какие еще возможности появятся
не, но для доступа к FTP с дистрибутивами FreeDOS в данной ОС в будущем, на этом я заканчиваю свой об-
вполне способна. зор.

№2, февраль 2006 37


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

Практикум Python:
обрабатываем входящую электронную почту

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

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

Е
сли говорить об автоматизации процессов админис- maildigest.py. На время тестирования можно будет не пе-
трирования, то более точно будет говорить о соот- реправлять, а дублировать почту на скрипт, оставив в ка-
ношении «время на разработку/экономия времени честве получателя и прежнего пользователя (чтобы избе-
в дальнейшем». Лично для меня наилучшее значение до- жать потери почты):
стигается при использовании языка Python.
В данной статье мы рассмотрим решение одной до- postmaster: admin, “| /usr/local/scripts/maildigest ↵
/maildigest.py”
статочно узконаправленной задачи. Тем не менее методы
и приёмы, которые будут здесь продемонстрированы, я на- Получая очередное сообщение на обработку, сценарий
деюсь, помогут вам решать проблемы гораздо более ши- должен будет проверить, не является ли оно уведомлени-
рокого спектра. ем от ClamAV (будем контролировать два параметра: тему
сообщения и тег заголовка «Auto-Submitted»). Если являет-
Постановка задачи ся, то обрабатываем его и записываем результат в некото-
Итак, есть почтовый сервер: FreeBSD + Sendmail + ClamAV, рый файл (о формате пока не думаем). Если же это какое-
остальное в данном случае не важно. то другое письмо, то положим его сразу в почтовый ящик
ClamAV выполняет проверку всей входящей корреспон- пользователя admin. При необходимости изменить имя
денции на вирусы и, помимо всего прочего, отсылает уве- получателя его можно будет подправить непосредствен-
домления об обнаруженных вирусах на адрес postmaster. но в коде сценария (не совсем «академическое» решение,
Проблема заключается в том, что администратору (для оп- но оно позволяет упростить код, не разбрасываясь на об-
ределённости будем считать, что он получает почту на ад- работку параметров).
рес admin, что достигается соответствующей настрой-
кой в /etc/mail/aliases) приходится обрабатывать достаточ- Небольшое исследование
но большое число таких уведомлений. В то же время, они Сначала давайте посмотрим, в каком виде сообщения пос-
позволяют следить за вирусной активностью на вверен- тупают на вход сценария, а заодно проверим, с какими пра-
ном узле, так что отказываться от такой информации не- вами наш сценарий исполняется (эта информация нам по-
желательно. надобится в дальнейшем для решения проблемы переда-
Таким образом, требуется снизить нагрузку на адми- чи «прочей» почты пользователю admin).
нистратора без потери накапливаемой в процессе рабо- Для этого напишем небольшой сценарий (как определе-
ты статистики. но в aliases, сохраним его под именем maildigest.py, не за-
быв установить права на исполнение):
Анализ проблемы
Попробуем решить данную задачу путём формирования Листинг 1. Первый эксперимент
ежедневных «дайджестов», отражающих вирусную актив- #!/usr/local/bin/python
ность за прошедшие сутки. Интересовать нас будет коли-
import os, sys
чество обнаруженных вирусов с разбивкой по их назва- mail = sys.stdin.read()
ниям. fd = open('/var/scripts/maildigest/mail.txt', 'w')
fd.write(mail)
Очевидно, что наиболее простым и в принципе более fd.write(os.popen('id').read())
правильным решением было бы отключить уведомления fd.close()
на postmaster и просто обрабатывать log-файлы, форми-
руемые в процессе работы. Здесь мы всё, что поступает на стандартный вход
Однако мы пойдём другим путём, чтобы рассмотреть (дескриптор определён в sys.stdin), записываем в файл
на практике один из достаточно полезных приёмов: поп- mail.txt. Сюда же добавляем строчку, возвращающую иден-
робуем обрабатывать всю поступающую на postmaster поч- тификатор текущего пользователя, для чего воспользуем-
ту, что называется, «на лету». Поскольку на данный адрес ся функцией os.popen(), которая создаёт канал между сце-
идёт почта не только от ClamAV, нам нужно перехватывать нарием и системной командой (в нашем случае это коман-
только интересующие нас уведомления, а всё остальное да id). На первых порах нужно разрешить любому пользо-
без изменений пересылать администратору (в нашем при- вателю создавать файлы в каталоге /var/scripts/maildigest.
мере, на адрес admin). В итоге получим примерно следующее (часть полей за-
головка за ненадобностью не показана):
Идеи по реализации From clamav@mydomain.ru Fri Feb 17 10:00:07 2006
Наиболее удобным выглядит перенаправление почты [. . .]
Date: Fri, 17 Feb 2006 09:53:41 +0300 (MSK)
на вход скрипта-обработчика путём создания канала (pipe), Message-Id: <200602170653.k1H6rfHX047203@mydomain.ru>
что можно реализовать с помощью псевдонимов (aliases). From: MAILER-DAEMON@mydomain.ru
To: postmaster@mydomain.ru
Например, если в файле /etc/mail/aliases добавить такую Auto-Submitted: auto-submitted (antivirus notify)
Subject: Virus intercepted
строку: X-Virus-Scanned: ClamAV 0.88/1291/Thu Feb 16 23:15:09 2006 on mydomain.ru
X-Virus-Status: Clean
postmaster: “| /usr/local/scripts/maildigest/maildigest.py” [. . .]

The message k1H6rBq7047195 sent from <info@salaried.com> to


<user@mydomain.ru>
то вся почта, поступающая на указанный адрес, будет contained Worm.SomeFool.P and has not been delivered.
передаваться на стандартный вход (STDIN) сценария uid=26(mailnull) gid=26(mailnull) groups=26(mailnull)

№2, февраль 2006 39


программирование
Распознавать уведомления ClamAV будем по призна- при условии, что запускался предыдущий тест, в результа-
кам, которые в приведённом выше выводе выделены те которого должен был сформироваться файл, который
красным шрифтом (можно ограничиться и каким-то од- в данном случае и используется. Значит, так и будем пос-
ним, но лучше перестраховаться). Интересующая нас ин- тупать в дальнейшем.
формация об обнаруженном вирусе содержится в предпос-
ледней строке. Ну и в самом конце выводится информа- Сбор статистики и формирование
ция о том, что работа сценария идёт от имени пользовате- «дайджеста»
ля mailnull, так что теперь можно ужесточить права на ка- Информация об обнаруженном вирусе (его название) со-
талог /var/scripts/maildigest. держится в последней строчке уведомления (если быть точ-
нее, то в предпоследней, а последняя – пустая). Если эту
Вопросы доставки строку разбить по пробелам, то нужное нам имя получим
Как видите, сообщение мы получаем в том виде, в каком оно во втором поле.
будет в дальнейшем помещено в почтовый ящик пользова- Учитывая, что на моём сервере больших нагрузок
теля. Обработать его проблем не составит – задействуем не предвидится, для хранения результата я выбрал фор-
модуль rfc822, содержащий методы для разбора заголов- мат DBM.
ков. А вот о чём придётся подумать, так это о том, как по- В стандартную поставку Python включён модуль anydbm,
ложить «транзитное» письмо в ящик пользователю. Мож- который самостоятельно определяет, какая именно реали-
но, конечно, воспользоваться протоколом SMTP, но при на- зация DBM используется в вашей системе, так что об этом
личии уже сформированного сообщения формировать его нам заботиться не придётся. Данные в этом формате хра-
заново выглядит не очень разумным. К тому же есть риск нятся в виде пар «имя – значение». Единственный его не-
зациклить обработку письма. Попробуем воспользоваться достаток в нашем случае – это то, что он позволяет хранить
услугами локального агента доставки (LDA). только текстовые данные, т.е. придётся в процессе работы
Хорошо бы просто отдавать сообщение на вход mail.local выполнять преобразования сохранённого значения, отра-
(LDA, используемый во FreeBSD по умолчанию). Здесь мы жающего количество обнаруженных вирусов данного типа,
упираемся в то, что для выполнения своей работы mail.local из строки в число и обратно.
должен запускаться с правами пользователя root. Для удобства будем хранить информацию посуточно,
Обойти это можно, установив на mail.local бит suid, од- для чего имя db-файла будет формироваться с учётом те-
нако поскольку такие права нужны нам для решения част- кущей даты (см. код сценария ниже).
ной задачи, то более правильно будет создать копию аген- Наконец, при смене даты нам нужно будет формиро-
та доставки с нужными правами, а оригинальный файл вать и отправлять сводный отчёт за прошедшие сутки.
не трогать: Поскольку отчёт предназначается локальному пользова-
телю, то проще всего будет сформировать «вручную» со-
# cd /usr/local/scripts/maildigest/ общение с нужными заголовками и воспользоваться тем
# cp /usr/libexec/mail.local mail.local.suid
# chmod 4555 mail.local.suid же LDA для его доставки.

Проведём ещё один эксперимент: Реализация


Итак, приступим к разработке сценария. Чтобы сохранить
Листинг 2. Второй эксперимент целостность восприятия, полностью приведу прокоммен-
#!/usr/local/bin/python тированный текст скрипта, а ниже дам некоторые пояс-
нения.
import os
prefix_bin = '/usr/local/scripts/maildigest/'
prefix_var = '/var/scripts/maildigest/' Листинг 3. Сценарий maildigest.py
lda_command = prefix_bin + 'mail.local.suid admin'
#!/usr/local/bin/python
mail = open(prefix_var + 'mail.txt', 'r').read() # -*- coding: koi8-r -*-
os.popen(lda_command).write(mail))
# Импортирование нужных модулей
Напомню, что все тестовые сценарии мы сохраняем import os, sys, rfc822, anydbm
from StringIO import StringIO
под именем maildigest.py, чтобы не вносить каждый раз из- from time import ctime, strftime
менения в /etc/mail/aliases.
# «Родительские» каталоги для размещения файлов
Здесь с помощью той же функции popen() создается ка- prefix_bin = '/usr/local/scripts/maildigest/'
нал с утилитой mail.local.suid, на вход которой передается prefix_var = '/var/scripts/maildigest/'
текст сообщения, сохранённого в файле в результате пре- # Команда доставки сообщения --
дыдущего эксперимента. Пользователя-получателя ука- lda_command = prefix_bin + 'mail.local.suid admin'
зываем явно (admin). В принципе этот сценарий можно вы- # Текущее имя db-файла (зависит от текущей даты)
полнить и непосредственно из командной строки, но луч- mdfile = prefix_var + 'md' + strftime('%Y%m%d')
ше использовать тот же способ запуска через aliases, что- # Файл хранит имя следующей для обработанной базы
бы лишний раз убедиться в отсутствии проблем с правами next = prefix_var + '.next'
доступа и переменными окружения. # Функция формирования и отправки «дайджеста»
Отправив тестовое сообщение на postmaster, убежда- def send_digest(fn=mdfile):
# Здесь ошибку не проверяем, поскольку всё равно
емся, что доставка выполняется нормально, естественно, # работу сценария придётся прерывать

40
программирование
lda = os.popen(lda_command, 'w').write

# Формируем необходимые заголовки


lda('From: maildigest\r\n')
lda('To: admin@mydomain.ru\r\n')
lda('Date: %s\r\n' % ctime())
lda('Subject: Virus digest\r\n')
lda('\r\n')

# Фомируем отчёт
lda('Вирусная активность за %s\r\n\r\n' % fn[-8:])
lda('%-30s | %3s\r\n' % ('Имя вируса', 'К-во'))
lda('-' * 38 + '\r\n')

try:
d = anydbm.open(fn)
total = 0
for i in d.keys():
lda('%-30s | %3s\r\n' % (i, d[i]))
total += int(d[i])

lda('-' * 38 + '\r\n')
lda('%-30s | %3d\r\n’ % ('ИТОГО', total))

# Записываем в .next следующую базу


open(next, 'w').write(mdfile)

except: Рисунок 1. Примерно так выглядят формируемые отчёты


lda('Ошибка формирования дайджеста для %s\r\n' % fn)
# Считываем поступившее сообщение... ную активность на почтовом сервере за истекшие сутки
mail = sys.stdin.read() (см. рис. 1).
# ...и разбираем его «по косточкам»
message = rfc822.Message(StringIO(mail))

# Если в заголовке есть указанные поля с указанными


Нет предела фантазии
# значениями, то считываем имя вируса и увеличиваем Насладившись работой нашего сценария, поразмышляем
# для него счётчик о том, что ещё полезного можно сделать подобным спо-
if (message.getheader('Subject') == 'Virus intercepted' and
message.getheader('Auto-Submitted') ==
собом.
'auto-submitted (antivirus notify)'): Во-первых, можно реализовать автоматический раз-
try:
# Первый «сплит» выделяет предпоследнюю строку
бор входящей почты (когда сообщения со словом «Дого-
# (последняя - пустая), а второй - второе поле
вор» в теме направляются в абонентский отдел, а со сло-
строки
virusname = mail.split('\n')[-2].split(' ')[1]
вом «Счёт» – в бухгалтерию). Заодно можно организовать
except: функцию автоматического ответа, когда отправитель со-
virusname = 'Format error'
stat = anydbm.open(mdfile, 'c') общения будет получать уведомление, что его письмо по-
if stat.has_key(virusname): лучено и передано на обработку Иванову Ивану Иванови-
stat[virusname] = str(int(stat[virusname]) + 1)
else: чу (ещё одно последствие борьбы со спамом, когда прихо-
stat[virusname] = '1' дится подтверждать доставку почти каждого важного пись-
else:
os.popen(lda_command, 'w').write(mail) ма, чтобы убедиться, что оно не попало под «жернов» од-
# Если в next-файле записано имя «прошлой» базы,
ного из фильтров).
# то отсылаем дайджест Во-вторых, обработка входящих сообщений позволяет
if os.path.isfile(next): при определённой доле осторожности и «разумности» ис-
mdf = open(next, 'r').read(len(prefix_var) + 10)
if mdfile != mdf: пользовать электронную почту для управления каким-ли-
send_digest(mdf) бо сервисом путём отправки команд в теле или теме со-
else:
open(next, 'w').write(mdfile) общения на определённый адрес (только не используйте
этот механизм для создания учётных записей и перезаг-
На всякий случай напомню, что блоки кода в Python за- рузки сервера!).
даются с помощью отступов. В принципе всё должно быть Наконец, можно пропускать входящую корреспонден-
понятно. Пояснения требует разве что использование пе- цию через собственные фильтры или собирать ту или иную
ременной lda в функции send_digest(). В первой строке статистику. В общем, полёт вашей фантазии ничем не ог-
мы присваиваем этой переменной ссылку на метод write(), раничен.
который применяется к каналу, созданному для коман-
ды, определённой в lda_command. В дальнейшем мы мо-
жем использовать функцию lda() как замену конструкции
os.popen(lda_command, 'w').write().
Ещё следует указать, что скобки позволяют обойти жёс-
ткие требования соблюдать отступ, чем мы и воспользова-
лись в трехстрочной конструкции if, где мы проверяем на-
личие в письме нужных нам заголовков.
Теперь вместо десятков уведомлений администратор
будет получать одно письмо в день, отражающее вирус-

№2, февраль 2006 41


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

Замыкания в Perl

Алексей Мичурин
Замыкания являются одной из тех особенностей Perl, которые редко встретишь в других
языках программирования. Да и программисты на Perl зачастую не вдаются в такие дебри.
Напрасно. Вы можете не иметь прав и автомобиля, не желать стоять в пробках, но правила
дорожного движения должен знать каждый. Точно так же, даже если вы не используете
замыканий, знать о них весьма полезно.
Суть замыканий но с ошибками в интерпретаторе Perl. менной? Чтобы ответить на этот воп-
Суть замыканий состоит в том, что па- Больше того, мы скоро убедимся в том, рос, надо сказать пару слов о системе
мять, занятая под временные пере- что интерпретатор «знает» о возник- сборки мусора, которой оснащён Perl.
менные, не освобождается дольше, шем замыкании и может уведомить Он автоматически освобождает фраг-
чем соответствующие переменные ос- вас, если вы того хотите. менты памяти, на которые нет ссылок.
таются доступны. Сразу скажу, что воз- Почему же память освобождает- Переменная может исчезнуть, но ссыл-
никновение замыканий никак не связа- ся не сразу после исчезновения пере- ка может остаться, тогда Perl не осво-

42
программирование
бодит память до тех пор, пока не ис- ние 1, осталась нетронутой, как и са- Если вы поняли, как и почему рабо-
чезнет последняя ссылка. мо значение. тает этот пример, то взгляните на об-
Эта система работы со ссылками Подобная сит уация возникает разчик классического замыкания:
противоположна C-подходу, где ссыл- и при замыкании: временной пере-
ка хранится независимо от соответс- менной уже нет, но память не осво- 1: #!/usr/bin/perl
2: sub gen {
твующего фрагмента памяти. Поэто- бождена. Однако замыканиями при- 3: my ($name, $count)=@_;
му в небрежно написанных програм- нято называть более узкий круг «яв- 4: return sub { print ↵
("$name: ".$count++."\n") }
мах на C случается, что ссылка ука- лений». К ним нас приближает следу- 5: }
зывает на фрагмент памяти, который ющий пример: 6: my $a=gen('CntA', 10);
7: my $b=gen('CntB', 20);
уже возвращён системе. Попытка об- 8: &$a();
ратиться к информации по этой ссыл- 1: #!/usr/bin/perl 9: &$a();
2: { 10: &$b();
ке всегда приводит к серьёзным сбо- 3: my $t=10; 11: &$b();
ям в работе программы. 4: print ' $t='.$t.' ↵ 12: &$a();
\$t='.\$t."\n";
Perl устроен иначе. В нём не может 5: sub f {
существовать неправильной ссылки, 6: $t=shift if (@_); По сути, этот пример очень похож
7: print 'f: $t='.$t.' ↵
но за это приходится платить неосво- \$t='.\$t."\n"; на предыдущий. Блок операторов те-
бождённой памятью. 8: } перь стал телом функции gen. Вместо
9: }
Давайте проиллюстрируем сказан- 10: f(); переменной $t в нём созданы две ло-
ное простым примером: 11: f(20); кальные переменные $name и $count.
12: f();
Внутри же создаётся не именован-
1: #!/usr/bin/perl Суть того, что мы сделали, состоит ная функция, как это было в преды-
2: sub f {
3: my $v=shift; в следующем. Мы создали блок (стро- дущем примере (там мы создава-
4: print 'f: \$v='.\$v.' ↵ ки 2-9) и в нём определили локальную ли функцию f), а анонимная функция,
$v='.$v."\n";
5: return \$v; переменную $t. В этом же блоке со- указатель на которую мы возвраща-
6: } здана функция f, которая использует ем как результат работы функции gen.
7: my $a=f(1);
8: print ' $a='.$a.' ↵ переменную $t. Функция может изме- Эта «вложенная» функция, как и в пре-
$$a='.$$a."\n"; нять значение переменной $t (если вы- дыдущем примере, использует ло-
звать её с аргументом) и печатает ин- кальные переменные, которые были
Результат работы этого кода таков: формацию об этой переменной (адрес объявлены вне её тела и которые бу-
и значение). Далее мы вызываем фун- дут не видны в основной программе –
f: \$v=SCALAR(0x8057b2c) $v=1
$a=SCALAR(0x8057b2c) $$a=1 кцию f в строках 10-12, то есть за пре- за пределами функции gen. Таким об-
делами блока, в котором существова- разом, суть выполняемых операций
Выполнение программы начинает- ла переменная $t. Сможет ли функция не изменилась. Единственное при-
ся с вызова функции f в седьмой стро- f нормально работать, ведь, казалось нципиальное отличие состоит в том,
ке. В теле функции создаётся времен- бы, переменной $t уже нет? что раньше наш блок выполнялся толь-
ная переменная $v, печатается её ад- Давайте посмотрим на результат ко единожды, а теперь мы можем вы-
рес и значение. Функция возвращает работы этой программы: зывать функцию gen многократно.
указатель на переменную $v и завер- $t=10 \$t=SCALAR(0x8057ae4)
Фактически функция gen является
шает работу. После этого переменная f: $t=10 \$t=SCALAR(0x8057ae4) генератором функций. Больше того, ге-
$v пропадает. Но корректней было бы f: $t=20 \$t=SCALAR(0x8057ae4) нерируемые функции используют пе-
f: $t=20 \$t=SCALAR(0x8057ae4)
сказать не «переменная пропадает», ременные, которые локальны для gen,
а «имя становится недоступно». Пото- Как видите, несмотря на то, что за но не для самих этих функций. Поэто-
му что значение переменной $v по-пре- пределами блока (строки 10-12) пе- му переменные $name и $count не ис-
жнему хранится в памяти. Мы больше ременная $t исчезла и явных ссылок чезают бесследно после окончания
не можем обратиться к этому значе- на неё не осталось, память не освобо- работы функции gen – они сохранят-
нию по имени $v, но указатель на эту дилась, а значение сохранилось. Что- ся интерпретатором Perl для дальней-
область памяти присвоен переменной бы убедиться, что с этой памятью мож- шего использования. Как вы понимае-
$a, он существует, а значит Perl не ос- но работать, мы поменяли хранящееся те, эти переменные сохранят свои зна-
вободит память, занятую ранее пере- в ней значение с 10 на 20. чения и между вызовами полученных
менной $v. Внимательный читатель уже заме- анонимных функций.
Чтобы окончательно убедиться тил сходство этого примера с преды- Так что же делает этот код? В стро-
в этом, напечатаем значения пере- дущим. Там память, выделенная под ке 6 мы вызываем генератор. Внутри
менной $a и разименуем этот указа- локальную переменную, не освобож- функции gen инициализируются две
тель в строке 8. Сравните первую и вто- далась потому, что за пределами об- локальные переменные $name (зна-
рую строки вывода программы. Пер- ласти видимости переменной сохра- чением CntA) и $count (значением 10).
вая напечатана, когда переменная $v нялись ссылки на эту область памяти. Там же создаётся анонимная функция-
ещё существовала. Вторая – когда пе- Теперь память не освобождается пото- счётчик, использующая эти перемен-
ременной $v уже не было. Но, как ви- му, что сохраняются функции, исполь- ные, указатель на неё возвращается
дите, память, выделенная под значе- зующие эту область памяти. и присваивается переменной $a. Пос-

№2, февраль 2006 43


программирование
ле окончания работы gen имена $name Perl не настолько «прост», он ли. Просто раньше мы сразу возвра-
и $count исчезают. не стал создавать две одинаковые щали указатель на функцию, а теперь
В строке 7 мы вызываем генера- функции, он дважды вернул ссылки мы сперва создаём функцию t (стро-
тор повторно. Внутри функции снова на один и тот же код. ка 5), а потом возвращаем указатель
создаются две локальные перемен- Локальная переменная $v в этом (строка 6). Но это «незначительное»
ные. Обратите внимание, они созда- примере создана только для того, что- изменение коренным образом изме-
ются заново и память для них отводит- бы лучше читалась преемственность нит результат:
ся новая(!). Им присваиваются соот- этого и других примеров.
ветствующие значения ($name='CntB', Теперь чуть изменим этот пример. gen: \$v=SCALAR(0x8057b2c) $v=1
gen: \$v=SCALAR(0x805728c) $v=2
$count=20), создаётся новая аноним- Пусть анонимная функция будет ис- CODE(0x8057bc8)
ная функция, которая будет использо- пользовать локальную переменную: 1 ok.
CODE(0x8057bc8)
вать уже эти новые значения, указа- 1 ok.
тель на функцию возвращается, а gen 1: #!/usr/bin/perl
2: sub gen {
завершает работу, и имена $name 3: my $v=shift; Как видите, функция t была созда-
и $count снова уходят в небытие. 4: print 'gen: ↵ на только при первом вызове gen. При
\$v='.\$v.' $v='.$v."\n";
В результате вызовов полученных 5: return sub {print "$v ok.\n"} повторном вызове функция t не была
функций в строках 8-12 мы видим сле- 6: } ни клонирована, ни изменена.
7: my $a=gen(1);
дующий вывод: 8: my $b=gen(2); Любопытное поведение? Мы ещё
9: print ($a."\n"); вернёмся к рассмотрению этого слу-
CntA: 10 10: &$a();
CntA: 11 11: print ($b."\n"); чая, а пока сделаем вывод, что замы-
CntB: 20 12: &$b(); кание сопровождается рождением но-
CntB: 21 вой функции только при создании ано-
CntA: 12
Мы получили классическое замы- нимных функций – только во втором
Мы получили два независимых кание: из рассмотренных примеров.
счётчика, инициализированных раз- Обратите также внимание на раз-
gen: \$v=SCALAR(0x8057b2c) $v=1
ными значениями. gen: \$v=SCALAR(0x8057d18) $v=2
ницу в «поведении» функций и пере-
Надеюсь, что с переменными не- CODE(0x805716c) менных, вызванную тем, что функция
ожиданностей уже нет. Мы уже рас- 1 ok. всегда глобальна, а все наши перемен-
CODE(0x8057d0c)
смотрели достаточно примеров. Да- 2 ok. ные локальны. (Кстати, сейчас широ-
вайте теперь изучим более тонкий ко обсуждается возможность создания
вопрос: когда и как создаётся новая При двух вызовах gen дважды бы- локальных функций; так что, возможно,
функция. ла создана локальная переменная $v; в шестой версии Perl мы сможем напи-
каждый раз новая в новой области па- сать что-то вроде my sub f {...}.)
Специфика анонимных мяти, о чём свидетельствуют первые
и именованных функций две строки вывода программы. И дваж- Нежелательные
Для начала рассмотрим пример, в ко- ды родилась новая функция. Как види- последствия замыканий
тором нет замыканий, но он для нас то- те, и поведение, и адреса двух получен- Сперва скажу несколько слов о том,
же будет интересен: ных анонимных функций отличаются. когда же замыкания могут возникнуть
Собственно, такой пример мы уже ви- без вашего ведома, «сами».
1: #!/usr/bin/perl дели в предыдущем разделе, но здесь Действительно, большинство про-
2: sub gen {
3: my $v=shift; я хотел подчеркнуть, что мы получили граммистов скажут, что, находясь
4: return sub {print "ok.\n"} именно две разные функции. в здравом уме, они не будут размещать
5: }
6: my $a=gen(1); Давайте рассмотрим, что будет, ес- функцию в теле другой функции. Смею
7: my $b=gen(2); ли генератор будет создавать имено- уверить: это могут сделать за вас.
8: print ($a."\n");
9: &$a(); ванную функцию. Ещё чуть-чуть изме- Существует множество задач, тре-
10: print ($b."\n"); ним пример: бующих, чтобы Perl-код компилировал-
11: &$b();
ся только один раз, но мог выполняться
Здесь вложенная функция не со- 1: #!/usr/bin/perl многократно. Эта возможность будора-
2: sub gen {
держит ссылок на локальные перемен- 3: my $v=shift; жит умы Perl-программистов, наверное,
ные. Но мы вызываем функцию gen 4: print 'gen: ↵ с первых дней появления Perl. Самая из-
\$v='.\$v.' $v='.$v."\n";
дважды, и дважды же создаём ано- 5: sub t {print "$v ok.\n"} вестная среда, в которой реализован
нимную функцию. Будут ли созданы 6: return \&t; такой подход – mod_perl. (В этой статье
7: }
две абсолютно одинаковые аноним- 8: my $a=gen(1); я буду говорить о mod_perl, имея в виду,
ные функции? 9: my $b=gen(2); в основном, только один его компонент –
10: print $a."\n";
Взгляните на вывод: 11: &$a(); Apache::Registry, который широко при-
12: print $b."\n"; меняется для переноса обычных CGI-
CODE(0x8057bbc) 13: &$b();
скриптов в mod_perl-окружение.) Там
ok.
CODE(0x8057bbc) Может показаться, что никаких при- скорость выполнения CGI-приложений
ok. нципиальных изменений мы не сдела- увеличивается многократно, благодаря

44
программирование
тому, что эти приложения компилируют- 1: #!/usr/bin/perl ко при первом запуске run. При повтор-
2: my $c=1;
ся только один раз. Подобные приёмы 3: sub incr ↵ ном вызове run, incr никак не изменит-
используются при «кэшировании» не- { print('$c='.$c++."\n") } ся, Perl, фактически, просто проигно-
4: incr();
которых частей кода, содержащих, на- 5: incr(); рирует строку 4.
пример, много регулярных выражений, 6: incr(); Это, наверное, самые неприятные
заданных переменными. Известно, что сюрпризы, возникающие из-за замы-
компиляция регулярных выражений – Если мы запустим её дважды, каний. С точки зрения Perl, никаких
достаточно ресурсоёмкая задача. то увидим вполне закономерный ошибок и нет, поэтому Perl просто вы-
Как же реализуется подобное од- и предсказуемый результат: полняет то, что написано. Ни опция -w,
норазовое компилирование и много- ни прагма strict не помогут вам обна-
$c=1
кратные запуски? В большинстве слу- $c=2
ружить эту ошибку.
чаев – очень просто: тело программы $c=3 Однако Perl имеет средства, позво-
включается внутрь некой функции, ко- $c=1 ляющие это сделать. Их мы ещё рас-
$c=2
торая потом может вызываться мно- $c=3 смотрим.
гократно, естественно, без повторной А сейчас давайте вернёмся к утеч-
компиляции, выполняя всё, что долж- По три строчки от каждого из двух кам памяти. Perl достаточно «умён»,
на была делать программа. вызовов. чтобы не допустить никаких утечек.
Поясню на примере. Допустим, Но давайте представим, что эта Если ссылка на функцию пропада-
у вас есть программа: программа оказалась в контексте, ет, то Perl удалит из памяти не толь-
аналогичном тому, который создаёт ко код, но и все переменные, замкну-
1: #!/usr/bin/perl mod_perl: тые на него.
2: print "ok.\n";
В следующем примере никаких уте-
«Кэшировать» её можно следую- 1: #!/usr/bin/perl чек не будет:
2: sub run {
щим образом: 3: my $c=1;
4: sub incr ↵ 1: #!/usr/bin/perl
{ print('$c='.$c++."\n") } 2:
1: #!/usr/bin/perl 5: incr(); 3: sub a {
2: sub run { 6: incr(); 4: my $v=0;
3: #!/usr/bin/perl 7: incr(); 5: sub b { $v=1 }
4: print "ok.\n"; 8: } 6: }
5: } 9: print "step 1:\n"; 7:
6: # далее, сколько угодно 10: run(); 8: while (1) {a}
7: # вызовов функции run 11: print "step 2:\n";
12: run(); Несмотря на то, что мы вызываем
Подобный подход обладает мас- генератор a бесконечно много раз, ни-
сой известных ограничений. Например, Справедливости ради следует от- какой утечки не происходит, ведь мы
в программах нельзя использовать метить, что здесь я несколько упростил не храним бесконечно много аноним-
конструкции __END__ и __DATA__, ситуацию. В реальной жизни приходит- ных функций, которые получаются
вызывать функции типа exit, осторож- ся избегать конфликтов имён, поэто- в результате его работы.
но надо обращаться с глобальными му вместо простой функции в mod_perl, Не будет утечки в следующем при-
переменными $^T, %ENV, $/ и прочи- точнее в модуле Apache::Registry, ис- мере:
ми, не злоупотреблять модификато- пользуются методы, разнесённые
ром /o в регулярных выражениях, ак- в разные пространства имён – как бы 1: #!/usr/bin/perl
2:
куратно работать с файлами... Многие в разные модули. 3: sub a {
«оплошности», вполне простительные Теперь мы компилируем нашу 4: my $v=0;
5: return sub { $v=1 }
в обычных условиях, способны вызвать программу единожды, а выполняем, 6: }
странные ошибки при работе програм- как и ранее, дважды. Какой же резуль- 7:
8: while (1) { my $f=a() }
мы в mod_perl-образном контексте. тат нас ожидает? Неподготовленного
Но больше всего недоразумений вы- человека он может обескуражить: Здесь мы сохраняем указатель
зывают замыкания. на анонимную функцию, но в локаль-
step 1:
Почему-то о замыканиях чаще все- $c=1 ной переменной. Как только перемен-
го вспоминают, когда говорят об утеч- $c=2 ная исчезает – уничтожается и функ-
$c=3
ках памяти. На самом деле в боль- step 2:
ция со всеми её замыканиями.
шинстве случаев замыкания вызыва- $c=4 Если вы не используете аноним-
ют не утечки памяти, а просто пере- $c=5 ных функций, то любая ваша функция
$c=6
расход памяти. будет компилироваться только один
На мой взгляд, основные проблемы Ес ли вы тоже обес к ура жены, раз, в любом случае – утечки просто
возникают из-за замыканий в имено- то вернитесь к концу предыдущего невозможны.
ванных функциях. С них мы и начнём раздела и сравните этот код с при- Можно, конечно, обеспечить утеч-
рассмотрение проблем. мером, который мы обсуждали там. ку памяти, но это происходит толь-
Взгляните на следующую про- По сути мы имеем одно и то же. Здесь ко в совсем экзотических ситуациях.
грамму: функция incr тоже будет создана толь- Вот пример:

№2, февраль 2006 45


программирование
1: #!/usr/bin/perl ную в последнем примере, трудно на- my $a=0;
2: sub a ↵ sub incr {
{ my $v; $v = sub { $v = 1 } } звать распространённой. my $v=shift;
3: a() while (1); $$v++;
}
Диагностика замыканий incr \$a;
Здесь мы замыкаем переменную Как мы видели только что, наиболее
$v и ей же присваиваем ссылку на за- неожиданные и неприятные эффек- Этот пример можно сделать более
мыкающую функцию. То есть, пока су- ты вызывают замыкания в именован- изящным, если использовать прототи-
ществует функция, будет существо- ных функциях. Именно такие замы- пы функций:
вать и переменная (как обычно: бу- кания позволяет отследить прагма
дет существовать не имя переменной, diagnostics. Я бы советовал обязатель- my $a=0;
sub incr (\$) { # <- прототип
а значение). Но пока будет существо- но добавлять строку: my $v=shift;
вать переменная, не исчезнет и функ- $$v++;
}
ция. Таким образом сама функция яв- use diagnostics; incr $a; # <- слэш больше
ляется гарантом своего вечного су- # не нужен
ществования. во все скрипты, которые могут запус-
Если вы запустите эту программу, каться через mod_perl или другой кэ- Можно непосредственно рабо-
то уже через несколько минут (или да- ширующий механизм. Кстати, если вы тать с элементами массива аргумен-
же секунд) почувствуете острую не- компилируете mod_perl самостоятель- тов @_. Это тоже позволяет изменить
хватку памяти. но, очень рекомендую задать опцию «внешние» переменные:
Только в последнем примере мы «PERL_DEBUG=1», тогда вся диагнос-
получили полноценную утечку памя- тическая информация будет выдавать- my $a=0;
sub incr {
ти. Возможна ли такая патологичес- ся и без прагмы diagnostics. $_[0]++;
кая ситуация в реальной жизни? В ре- При вк лючённой диагнос тике }
incr $a;
зультате ошибки – конечно. При орга- и при замыкании в именованной функ-
низации рекурсий – возможно. Но ес- ции Perl выдаёт весьма развёрнутое Все эти приёмы позволяют пол-
ли рекурсия организована правильно объяснение ситуации (рис. 1). ностью отказаться от использования
и вовремя останавливается, то и по- Если вы возьмёте на себя труд пе- внешних переменных в теле функций.
добная ситуация не возникнет. ревести это послание, то обнаружите, Это наиболее предпочтительная до-
Понятно, что такого рода утечки мо- что в нём просто кратко изложены ос- ктрина разработки.
гут быть вызваны и более сложными новные мысли этой статьи. Если же от работы с глобальными
связями. Например, в функции может переменными отказаться нельзя (труд-
использоваться хэш, в одном из эле- Как избежать замыканий но? лениво?), то можно использовать
ментов которого хранится ссылка на Самый простой способ – не использо- не my-переменные, а our-переменные.
массив, в котором хранится ссылка на вать в функциях глобальных перемен- Давайте чуть модифицируем наш при-
функцию. Могут возникать ситуации, ных. Это не только навсегда избавит мер, имитирующий работу в mod_perl-
когда набор функций A обеспечивает вас от замыканий, но и сделает ваш контексте:
сохранность функций B, а те, в свою код более читабельным и красивым.
очередь, отвечают взаимностью. Фан- Если вы хотите изменить в те- 1: #!/usr/bin/perl
2: sub run {
тазировать можно бесконечно, но суть ле функции значение «внешней» пе- 3: our $c=1; # <-- my заменено
везде остаётся одной и той же. ременной, то можете воспользовать- # на our
4: sub incr ↵
Тем не менее я бы не стал преувели- ся одним из множества средств, пре- { print('$c='.$c++."\n") }
чивать опасность утечек памяти из-за доставляемых Perl. Можно передать 5: incr();
6: incr();
замыканий. Конструкцию, приведён- ссылку на внешнюю переменную: 7: incr();
8: }
Variable "$tmp" will not stay shared at ./example.pl line 7 (#1)
9: print "step 1:\n";
10: run();
(W closure) An inner (nested) named subroutine is referencing a
11: print "step 2:\n";
lexical variable defined in an outer subroutine. 12: run();
When the inner subroutine is called, it will probably see the value of
the outer subroutine’s variable as it was before and during the *first*
Теперь он будет выдавать «пра-
call to the outer subroutine; in this case, after the first call to the вильный» результат:
outer subroutine is complete, the inner and outer subroutines will no
longer share a common value for the variable. In other words, the step 1:
variable will no longer be shared. $c=1
$c=2
Furthermore, if the outer subroutine is anonymous and references a $c=3
lexical variable outside itself, then the outer and inner subroutines step 2:
will never share the given variable. $c=1
$c=2
This problem can usually be solved by making the inner subroutine $c=3
anonymous, using the sub {} syntax. When inner anonymous subs that
reference variables in outer subroutines are called or referenced, they Аналогичного эффекта можно до-
are automatically rebound to the current values of such variables.
стичь, если использовать простые гло-
Рисунок 1. Perl выдаёт весьма развёрнутое объяснение ситуации бальные переменные:

46
программирование
3: $c=1; # <-- это уже не 1: #!/usr/bin/perl Результат работы этого кода, ес-
# my-переменная 2: sub new {
3: my $step=shift; тественно, будет точно таким же,
Но широкое использование гло- 4: my $c=0; как и предыдущего.
5: return sub {$c+=$step},
бальных переменных никогда не при- 6: sub {print "count=$c ↵ Обратите внимание, строки 5 и 6
ветствуется. (step=$step)\n"}; должны обязательно заканчивать-
7: }
Можно использовать глобаль- 8: my ($incr1, $print1)=new(1); ся точкой с запятой (довольно редкая
ные переменные с указанием пол- 9: my ($incr2, $print2)=new(100); ситуация: после закрывающей фигур-
10: &$print1;
ных имён: 11: &$print2; ной скобки обязательно требуется точ-
12: &$incr1; ка с запятой).
3: $main::c=1; 13: &$incr1;
14: &$incr2; Заметьте также, что создаваемые
15: &$incr2; функции должны быть строго аноним-
16: &$print1;
Но только в том случае, если вы 17: &$print2; ны. Если вы внесёте в код следующие
очень хорошо понимаете, что делае- изменения, то он будет работать ина-
те. Например, если использовать по- Здесь функция new создаёт две че и, скорее всего, не так, как вы ожи-
добный подход совместно с mod_perl, анонимные функции: первая – увели- даете.
то вы, скорее всего, получите очень чивает счётчик, вторая – печатает зна-
странные и неприятные ошибки. Де- чение счётчика. ...
5: sub incr {$c+=$step};
ло в том, что mod_perl кэширует мно- Каждая создаваемая пара функ- 6: sub prnt {print ↵
го сценариев. Для каждого он орга- ций отличается шагом счётчика ($step), "count=$c (step=$step)\n"};
7: return {'incr' => \&incr, ↵
низует отдельное пространство имён. который задаётся как аргумент «конс- 'print' => \&prnt}
Поэтому конфликтов глобальных пе- труктора» new при создании нового ...
ременных не происходит. Но если вы счётчика. Все создаваемые счётчи-
принудительно разместите перемен- ки, естественно, работают независи- Читатель, конечно, спросит: «А по-
ные в определённом пространстве мо друг от друга. чему бы нам не использовать просто
имён, то можете получить конфлик- Мы создаём две пары функций (два ОО подход вместо замыканий?» По-
ты, вызывающие самые неожидан- счётчика; строки 8, 9). Печатаем зна- жалуйста! Но всем известно, что пока
ные эффекты. чения счётчиков (строки 10, 11). По два объекты в Perl достаточно неповорот-
раза для каждого счётчика делаем ин- ливы. Мой опыт показывает, что в не-
Использование кремент (строки 12-15). И снова полу- которых ситуациях замыкания позво-
замыканий чаем значения счётчиков. ляют иногда получить выигрыш в быс-
Надеюсь, что читатель уже не счи- Запустив программу, можно убе- тродействии в полтора-два раза. Этот
тает замыкания недоработкой Perl. диться, что всё работает правильно: выигрыш становится особенно заме-
Они так же логичны, как «самоожив- count=0 (step=1)
тен, если методы выполняют короткие
ление» переменных (autovivification) count=0 (step=100) и простые операции.
и другие механизмы Perl. Но можно count=2 (step=1) Тех, кто сейчас скажет: «Ну уж я
count=200 (step=100)
ли использовать замыкания для сво- никогда не буду использовать в своих
ей пользы? Конечно! Этому коду можно придать и более программах таких изысков», я спешу
Вы уже видели, что замыкания поз- объектно-ориентированный вид: заверить, что большинство програм-
воляют генерировать функции, варь- мистов на Perl постоянно использу-
ируя некоторые аспекты работы этих 1: #!/usr/bin/perl ют замыкания, так как многие модули
2: sub new {
функций. Причём перекомпиляция 3: my $step=shift; используют это средство. Достаточно
кода при этом фактически не проис- 4: my $c=0; сказать, что замыкания есть в модуле
5: my $incr=sub {$c+=$step};
ходит; то есть новые функции созда- 6: my $print=sub {print ↵ DBI, который широко применяется при
ются практически мгновенно. Поэто- "count=$c (step=$step)\n"}; программировании интерфейсов к ба-
7: return {'incr' => $incr, ↵
му замыкания с успехом применяют- 'print’'=> $print} зам данных.
ся для создания множества обработ- 8: } Кроме того, считаться с замыка-
9: my $c1=new(1);
чиков событий при программировании 10: my $c2=new(100); ниями вам придётся, если вы захоти-
приложений, основанных на событи- 11: $c1->{print}->(); те создать собственный модуль. Что-
12: $c2->{print}->();
ях. Например, вы можете разработать 13: $c1->{incr}->(); бы обеспечить его универсальность,
библиотеку для создания графичес- 14: $c2->{incr}->(); вы должны обязательно учесть, что он
15: $c1->{incr}->();
кого пользовательского интерфейса. 16: $c2->{incr}->(); может быть использован и в mod_perl-
Каждому новому элементу «флажок» 17: $c1->{print}->(); контексте.
18: $c2->{print}->();
будет отвечать собственная функция- Кстати, замыкания часто использу-
обработчик. Эти функции должны быть Здесь функция new возвраща- ют как раз, чтобы избежать ситуаций,
схожи, но допускать некоторые отли- ет не две функции, а хэш, состоя- чреватых «неожиданными» замыка-
чия (цвет, форма, начальное положе- щий из пары функций, которые нам ниями. Поэтому замыкания встреча-
ние и прочее). Здесь уместно приме- уже хорошо знакомы. То есть мы со- ются в модулях и программах на Perl
нить замыкания. здаём не набор разрозненных мето- гораздо чаще, чем может показаться
Проиллюстрируем сказанное: дов, а единый «объект». на первый взгляд.

№2, февраль 2006 47


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

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

Народное

Крис Касперски
На рынке имеется множество средств как коммерческих, так и бесплатных, обещающих
решить проблему переполняющихся буферов раз и навсегда, но хакеры ломают широко
разрекламированные защитные комплексы один за другим. Почему? Давайте заглянем
под капот Stack-Guard, Stack-Shield, Pro-Police и Microsoft Visual Studio .NET, сравнив
заявленные возможности с реальными.

О
шибки переполнения вездесу- щий целостность адреса возврата пе- мок), и не в окно (там – сигнализация),
щи – это факт. Буквально каж- ред выходом из функции и предпри- а проникает через никем не охраняе-
дые несколько дней обнаружи- нимающий другие действия, затруд- мую вентиляционную/канализацион-
вается новая дыра, а сколько дыр ос- няющие атаку. ную трубу или даже дымоход.
таются необнаруженными – приходит- Расплатой за «безопасность» ста- Все защитные механизмы, имею-
ся только гадать. Как с ними борют- новятся снижение производительнос- щиеся на рынке, спроектированы так,
ся? Арсенал имеющихся средств до- ти (впрочем, довольно незначитель- что дрожь берет. Сразу видно, что их
вольно разнообразен и простирается ное) и необходимость перекомпиля- создатели никогда не атаковали чу-
от аппаратных защит типа NX/XD-би- ции всего кода. Но это только внешняя жие системы, не писали shell-код и да-
тов до статических анализаторов на- сторона проблемы. Понадеявшись на же не общались с теми, кто всем этим
подобие Spilnt. широко разрекламированные защит- занимается. Защита не только не оста-
В последнее время в обиход во- ные средства, разработчики расслаб- навливает атакующего, но в некоторых
шел термин «secure programming» ляются и… начинают строчить не- случаях даже упрощает атаку!
и издано множество книг по безопас- брежный код, который Stack-Guard
ности, настоятельно рекомендующих (Stack-Shield/Pro-Police) все равно «ис- Типы переполнения
использовать динамические средс- правит». Но что именно он правит? и типы защит
тва защиты типа Stack-Guard, внед- Давайте задвинем рекламу в сторону Существует множество типов ошибок
ряющие в компилируемую програм- и посмотрим на защиту глазами хаке- переполнения, подробно рассмотрен-
му дополнительный код, проверяю- ра, который ломится не в дверь (там за- ных в статье [1]. Это:

48
безопасность
 переполнение кучи (работающее как оператор POKE – Листинг 1. Демонстрационная программа с переполняющимся
буфером, которую мы будем защищать
запись значения в указанную ячейку памяти);
 целочисленное переполнение, ошибки форматиро- // дочерняя функция
f(char *msg)
ванного вывода (PEEK – чтение содержимого произ- {
вольной ячейки памяти) POKE в одном лице); // объявляем локальные переменные
int a; char buf[0x66];
 переполнение локальных стековых буферов.
// копируем аргумент в буфер без контроля длины,
// что на определенном этапе приводит к его переполнению
Стековое переполнение – не только не единственное, a = *strcpy(buf, msg);
но даже не самое популярное. Оператор new языка Си++
// выходим из функции
размещает переменные в динамической памяти, поэто- return a;
му актуальность атак на кучу все растет, а к стеку интерес }
снижается. Ложка дорога к обеду. После драки кулаками // материнская функция
не машут. Защитники стека явно опоздали и теперь подта- int main(int argv, char **argc)
{
совывают факты и разводят рекламу. int x; x = f(argc[1]);
Вот цитата из документации на Stack-Guard: «…emits }
programs hardened against «stack smashing» attacks. Stack
smashing attacks are the most common form of penetration Откомпилируем файл компилятором gcc с настройками
attack. Programs that have been compiled with StackGuard are по умолчанию (то есть без оптимизации) и загрузим полу-
largely immune to stack smashing attack» («Stack-Guard за- ченный elf в дизассемблер, чтобы посмотреть, как выгля-
каляет программы против срыва стека – наиболее попу- дит стандартный пролог/эпилог функции f().
лярного типа удаленных атак. Программы, откомпилиро-
ванные со Stack-Guard приобретают крепкий иммунитет Листинг 2. Дизассемблерный листинг исходной функции f
с моими комментариями
против этого»).
На самом деле Stack-Guard всего лишь затрудняет под- function_prologue:
push ebp ; // сохраняем старый указатель
мену адреса возврата, то есть противодействует подклассу ; // кадра
стековых атак, причем противодействует весьма неумело. mov ebp, esp ; // открываем новый кадр стека
sub esp, 98h ; // резервируем место
То же самое можно сказать и про остальные защиты, ус- ; // под локальные переменные
танавливая которые мы не должны забывать, что они сра-
; // тело программы
жаются лишь с определенным типом атак, а на остальные ; // копируем аргумент в регистр eax
просто не обращают внимания. mov eax, [ebp+arg_0]
; // кладем eax в стек (выглядит как засылка eax
Поскольку из рекламных проспектов (по недоразумению ; // в локальную переменную но в действительности –
называемых «технической документацией») ничего конк- ; // это такая передача аргументов, необычно,
; // но компилятору удобно)
ретного выяснить невозможно, используем дизассемблер, mov [esp+98h+var_94], eax
достоверно показывающий, что делает та или иначе защи-
; // получаем указатель на локальную переменную var_88
та и чем она реально занимается. lea eax, [ebp+var_88]
; // кладем его в стек
mov [esp+98h+var_98], eax
Stack-Guard ; // вызываем _strcpy(&arg_0[0], &var_88[0])
Первым, кто бросил вызов переполняющимся буферам, call _strcpy
; // eax = *((signed char*) eax);
был Stack-Guard, представляющий собой заплатку для ком- ; // копируем eax в локальную переменную var_C
пиляторов gcc и eggs, распространяемую по лицензии GPL. movsx eax, byte ptr [eax]
mov [ebp+var_C], eax
Раньше его было можно скачать с http://www.cse.ogi.edu/ ; // копируем содержимое var_C в eax
DISC/projects/immunix/StackGuard или immunix.org, но сей- mov eax, [ebp+var_C]
час эти ссылки мертвы, а проект заброшен. C тех пор как function_epilogue:
Immunix скупила Novell, Stack-Guard больше не поддержи- leave ; // mov esp, ebp/pop ebp
retn ; // выходим в материнскую функцию
вается, во всяком случае найти какие бы то ни было упоми-
нания о нем на официальном сайте мне не удалось. Содержимое стека на момент вызова f() представляет
Исходный код сохранился только у «коллекционеров», конгломерат локальных переменных и служебных данных.
как, например: http://www.packetstormsecurity.org/UNIX/ На вершине стека лежит буфер, под ним располагается це-
utilities/stackguard. Тут может возникнуть вопрос: «Если лочисленная переменная «a» (на самом деле порядок раз-
Stack-Guard устарел и мертв, какой смысл его исследо- мещения переменных не стандартизован и целиком зави-
вать?». сит от воли компилятора, то есть может быть любым). За ло-
На самом деле смысл есть. Stack-Guard – простей- кальными переменными следует сохраненный регистр ука-
ший защитный механизм, расковыряв который, мы смо- зателя кадра стека (в x86 процессорах его роль обычно иг-
жем разобраться и со всеми остальными, тем более что рает EBP), а за ним – адрес возврата и аргументы, передан-
между ними наблюдается стройная эволюционная пре- ные функции. Короче говоря, все это выглядит так:
емственность.
Возьмем следующую программу с умышленно допу- Листинг 3. Состояние стека на момент вызова функции f
щенной ошибкой переполнения и посмотрим, сможет ли [ buf ] ; <-- переполняющийся буфер
Stack-Guard ее защитить. [ a ] ; <-- прочие локальные переменные

№2, февраль 2006 49


безопасность
[ ebp ] ; <-- сохраненный указатель кадра leave ; // закрываем кадр стека
[ retaddr ] ; <-- адрес возврата в материнскую функцию ; // проверяем целостность canary word
[ arg 1 ] ; <-- аргументы, переданные функции cmp esp,AFF0Dh
[ --------- ] ; <-- \ ; // если canary изменено, прыгаем на canary_changed
[ --------- ] ; <-- +- кадр стека материнской функции jne canary_changed
[ --------- ] ; <-- / add esp,4 ; // удаляем canary из стека
; // возвращаемся в материнскую процедуру
ret
Переполняющийся буфер может воздействовать на сле-
дующие объекты: canary_changed: ; // завершаем выполнение программы
call __canary_death_handler
 локальные переменные, расположенные ниже его; ; // если завершить не удалось — зацикливаемся
 сохраненный указатель кадра стека; jmp .
 адрес возврата;
 аргументы, переданные функции; Листинг 5. Состояние стека функции f() на момент
завершения выполнения пролога и начала выполнения ее тела
 на кадр материнской функции.
[ buf ]
[ a ]
Все эти атаки подробно описаны в моей статье [1], поэ- [ ebp ]
тому не будем повторяться, а лучше пропустим программу [ 000aff0dh ]
[ retaddr ]
через Stack-Guard 1.0 и посмотрим, что это даст. [ arg 1 ]
[ --------- ]
Листинг 4. Дизассемблерный листинг функции f(), [ --------- ]
защищенной Stack-Guard (добавленные защитой строки [ --------- ]
выделены красным шрифтом)
После защиты Stack-Guard перед адресом возвра-
function_prologue:
; // забрасываем canary word на стек та располагается константа 000AFF0Dh (в терминологии
; // (следовало это делать после сохранение ebp) Stack-Guard – canary word), целостность которой проверяет-
push 000AFF0Dh
ся перед выходом из функции. Суть в том, что комбинацию
; // сохраняем старый указатель кадра в стеке символов, слагающих canary word – \x00\x0A\xFF\x0D, очень
push ebp
mov ebp, esp ; // открываем новый кадр трудно «воспроизвести» с помощью строковых функций, пос-
; // резервируем место под локальные переменные кольку в языке Си символ нуля трактуется как «конец стро-
sub esp, 98h
ки». Функция gets – одна из тех немногих, что обрабатывает
; // тело функции (точно такое же, как и в прошлый раз) ноль как обыкновенный символ, поскольку в качестве завер-
function_epilogue: шителя строки использует символ «возврата каретки».

50
безопасность
При работе с ASCIIZ-строками «подделать» canary word
невозможно! Адрес возврата можно считать надежно за-
щищенным. Ведь чтобы «дотянуться» до него, переполня-
ющемуся буферу необходимо пересечь (и затереть) canary
word! Разработчики торжествуют, а хакеры стреляются.
Или… все-таки нет?
Начнем с того, что на Unicode все эти ограничения
не распространяются и canary word подделывается без тру-
да (кстати говоря, пилотная версия Stack-Guard в качестве Рисунок 1. Адрес возврата по XOR случайным canary
сторожевого слова использовала 00000000h, что в Unicode
уже не воспроизводится, но может быть введено с помощью В версии 2.0 защита адреса возврата была как бы уси-
функции gets, которая сегодня практически никем и нигде лена – в нем появился случайный canary word, хранящийся
не используется). К тому же приложения, обрабатывающие в read-only памяти и «шифрующий» адрес возврата по XOR.
двоичные данные функциями типа memcpy, также остают- Угадать 32-битный canary word – нереально, но это и не нуж-
ся беззащитными. но! Достаточно подсунуть заведомо ложное значение. Тог-
Локальные переменные и указатель кадра стека во- да, убедившись, что стек переполнен и хакеры хакерству-
обще никак не защищены и могут быть беспрепятствен- ют, как крысы в амбаре, Stack-Guard передаст управление
но атакованы. Если среди этих переменных присутству- функции __canary_death_handler, которая завершает вы-
ет хотя бы один указатель на функцию, вызываемую пос- полнение программы, устраивая настоящий DoS. Но луч-
ле переполнения, хакер сможет подменить его адрес, пе- ше DoS, чем захват управления!
редавая управление на свой shell-код. Конструкция типа Весь фокус в том, что указатель на __canary_death_handler
«int *x; int a; … x = a;», которая к числу экзотических никак размещается в глобальной таблице смещений – GOT и мо-
не относится, позволяет атакующему модифицировать лю- жет быть атакован путем воздействия на локальные пере-
бые указатели на функции, в том числе и адрес возврата, менные через уязвимый указатель кадра стека. Если та-
и защита canary word уже не срабатывает, поскольку сто- кие переменные действительно есть (а куда бы они подева-
рожевое слово остается в неприкосновенности. Образно лись?), хакер просто перенаправляет __canary_death_handler
говоря, это как положить «перед шматком сала грозный на свой shell-код!
капкан». Тот, кто идет напрямую (классическое последо- В последующих версиях Stack-Guard canary world «пере-
вательное переполнение), попадет в него прежде, чем ус- ехал» на одну позицию вверх, взяв под свою защиту и ука-
пеет полакомиться. Но если десантироваться прямо на са- затель кадра, однако дальнейшего развития проект не по-
ло путем воздействия на переменные-указатели – капкан лучил и постепенно сдулся.
отдыхает (правда, в этом случае необходимо знать точное
положение вершины стека на момент атаки, что не всегда Microsoft Visual Studio .NET
возможно, поэтому хакеры предпочитают модифицировать Озабоченная последними хакерскими атаками, Microsoft ре-
таблицу импорта в Windows, а в UNIX – секцию got). ализовала в своем новом компиляторе Visual Studio .NET
Рассмотрим самый сложный случай, когда никаких пе- (бывший Visual C++) некоторую разновидность Stack-Guard
ременных в нашем распоряжении нет, а есть только сохра- в далеко не лучшей его «инаугурации». Никогда не раз-
ненный регистр кадра стека, который мы и будем атаковать. рабатывающая собственных продуктов, а только «вору-
Фатальной ошибкой Stack-Guard явилось то, что он не учел ющая» уже готовые (авторитетный товарищ Берзуков
«побочных эффектов» инструкции leave, которая работает в своей софт-панораме об этом только и говорит, сходите
так: «mov esp, ebp/pop ebp», позволяя хакеру воздейство- на www.softpanorama.org/Bulletin/News/Archive/news078.txt,
вать на кадр материнской функции. Если в каком-то месте почитайте – там много интересного), Microsoft, как это час-
стека или кучи атакующему удастся «сложить» конструкцию то и бывает, сама не поняла, что стащила и у кого. Ладно,
«000AFF0Dh &shell-code», (что в переводе на русский зву- все это лирика. Перейдем к фактам.
чит как: canary-word за которым следует указатель на shell- При компиляции с ключом /GS компилятор добавля-
код), ему остается всего лишь подменить сохраненный EBP ет в код security cookie – так в терминологии Microsoft на-
на адрес «своего» canary-word. Тогда при выходе из мате- зывается случайный 32-битный canary word, хранящийся
ринской функции управление будет передано на shell-код! в writable-памяти и инспектируемый функцией check_canary
Атаки этого типа называются ret2ret и давно описаны в ха- при выходе из функции:
керской литературе, однако какого-либо практического при-
ложения они так и не получили, поскольку в оптимизиро- Листинг 6. Дизассемблерный листинг функции f(),
откомпилированной Microsoft .NET с ключом /GS
ванных эпилогах (ключ -O2) вместо инструкции leave ком- (добавленные защитой строки выделены красным шрифтом)
пилятор использует более быстродействующую конструк-
function _prologue:
цию «add esp,x/pop ebp», и побочный эффект воздействия ; // сохраняем прежний указатель кадра
на ESP исчезает. В оптимизированном эпилоге хакер мо- push ebp
mov ebp, esp ; // открываем новый кадр
жет воздействовать только на стековый кадр материнской ; // резервируем место для локальных переменных
функции, «подсовывая» ей те значения локальных перемен- ; // и canary
sub esp, 9Ch
ных, которые он захочет. Для успешной реализации атаки push edx ; \
этого обычно оказывается вполне достаточно. ; + - сохраняем регистры,

№2, февраль 2006 51


безопасность
: которые будут изменены позволит подделать любой символ. Короче говоря, если
push esi
push edi ; / бы в Microsoft думали головой…

; // копируем глобальный canary в eax


mov eax, [canary] Stack-Shield
// сравниваем адрес возврата с canary Несмотря на схожесть в названии со своим собратом,
xor eax, [esp+10h];
; // кладем результат на стек, защищая указатель кадра Shack-Shield действует совсем по другому принципу. Это еще
mov [ebp-10h],eax одно расширение к gcc, последнюю версию которого мож-
; // тело функции но скачать с http://www.angelfire.com/sk/stackshield, но ино-
; (не совсем такое же, как и в прошлый раз, го типа. Если Stack-Guard реализован как патч к компиля-
; но различия между компиляторами к делу не относятся)
тору, «исправляющий» function_prologue и function_epilogue,
function_epilogue: то Stack-Shield «захватывает» ассемблерные файлы, сгене-
; // копируем сравненный canary в ecx
mov ecx, [epb-10h] рированные компилятором (в UNIX-мире они имеют расши-
; // сравниваем адрес возврата и кладем его в ecx рение .S), обрабатывает их, выплевывая защищенный ас-
xor ecx, [ebp+10h]
; // вызываем функцию проверки canary семблерный файл, возвращаемый компилятору для окон-
call check_canary чательной трансляции в двоичный код. Такая схема да-
pop edi ; \ ет Stack-Shiled намного большие возможности, и мне сра-
pop esi ; + - восстанавливаем регистры зу же захотелось посмотреть, как он ими воспользовался
pop ebx ; /
и можно ли его одолеть.
; // закрываем кадры стека небезопасным путем Соблазненный процессорными архитектурами с разне-
mov esp, ebp
сенным стеком (один стек для хранения адресов возврата,
; // (Microsoft повторяет ошибку Stack Guard) другой – для локальный переменных), создатель Stack-Guard
pop ebp
; // выходим в материнскую функцию попытался «проэмулировать» на x86 нечто подобное. Для
ret этой цели он использовал глобальный массив retarray на
check_canary: ; // функция проверки canary 256 адресов: эпилог копирует текущий адрес на вершину
; // сравниваем переданный ecx с глобальным canary массива, определяемую указателем retprt, а пролог «стяги-
cmp ecx, [canary]
; // если не совпадают – завершаем программу вает» этот адрес с вершины и передает ему управление.
jnz canary_changed Эта эмуляция далека от идеала, но сохраненный в стеке
; // все ок, продолжаем выполнение программы
ret адрес возврата в ней вообще не используется, и выполне-
ние программы продолжится даже после того, как он будет
Canary word защищает не только адрес возврата, затерт, что предотвращает DoS (впрочем, поскольку локаль-
но и кадр, что очень хорошо, правда, в оптимизированном ные переменные искажены, программа все равно рухнет).
коде, генерируемый этим же самым компилятором, локаль-
ные переменные адресуются непосредственно через ESP, Листинг 7. Дизассемблерный листинг функции f(), защищенной
Stack-Shield с настройками по умолчанию (добавленные
и дополнительный регистр им не нужен, поэтому фактичес- защитой строки выделены красным шрифтом)
ки защищается только один адрес возврата. Остальные пе-
function_prologue:
ременные остаются незащищенными, что открывает про- ; // сохраняем регистры, которые изменяет Stack-Shied
стор для махинаций с указателями. push eax
push edx
В частности, хакер может перезаписать глобальную пе- ; // копируем в eax смещение указателя массива retpt
ременную canary своим значением – тогда его проверка mov eax, offset retpt
cmp rettop, eax ; // смотрим – есть ли еще место?
пройдет нормально. ; // если места нет, отказываемся от записи
Это даже упрощает (!) атаку: в незащищенной систе- ; // нового адреса
jbe .LSHIELDPROLOG
ме существует проблема ввода «запрещенных» символов, ; // заносим в edx адрес возврата со стека
которую не всегда возможно обойти. Операция XOR поз- mov edx, [esp+8]
; // сохраняем его в массиве адресов возврата
воляет генерировать любые символы! В частности, чтобы mov [eax], edx
сформировать символ нуля, достаточно положить в canary
.LSHIELDPROLOG:
и зашифрованный адрес возврата два одинаковых симво- ; // увеличиваем указатель массива возвратов
ла. Как известно «X XOR X = 0». Остальные символы гене- ; // на первый взгляд это явный баг,
; // но на самом деле – оптимизация!
рируются аналогичным способом. add [retptr],4
Самое интересное, что Microsoft переняла ошибку ран-
; // восстанавливаем регистры назад
них версий Stack-Guard, причем даже не его ошибку, а осо- pop edx
бенность поведения компилятора gcc, позволяющую ата- pop eax ;
кующему воздействовать на регистр ESP через модифи- ; // сохраняем старый указатель кадра стека
кацию указателя кадра стека. push ebp
mov ebp, esp ; // открываем новый кадр
Microsoft Visual C++ 6.0 закрывал кадр стека безопасной ; // резервируем место под локальные переменные
конструкций «ADD ESP,XXX», а .NET вместо этого использу- sub esp, 98h
ет «MOV ESP, EBP». И хотя указатель кадра защищен canary ; // тело функции (такое же как в случае с Stack-Guard)
word, это еще не повод ослаблять защиту! Canary word ге-
function_epilogue:
нерируется не совсем случайным путем, и угадать его с не- ; // закрываем кадр стека небезопасным путем
скольких попыток вполне реально, ну а инструкция XOR leave

52
безопасность
push eax ; // сохраняем регистры
push edx
; // уменьшаем указатель массива возвратов
add [retptr], -4
; // заносим в eax смещение массива возвратов
mov eax, offset retptr
; // как на счет свободного места?
cmp eax, rettop
; // если места нет, значит и выталкивать нечего
jbe .LSHIELDEPILOG
; // снимаем сохраненный адрес со стека возвратов
mov edx, [eax] Рисунок 2. Безопасная модель стека Pro-Police
; // восстанавливаем стековый адрес не проверяя его
mov [esp+8],edx call [eax] ; // вызываем функцию по указателю
.LSHIELDEPILOG:
pop edx ; // восстанавливаем регистры Контроль за указателями на функции препятствует не-
pop eax ;
ret ; // выходим в материнскую функцию посредственной передаче управления на shell-код, но не ме-
шает хакеру использовать функции стандартной библио-
При компиляции с ключом -d, Stack-Shiled вставляет до- теки libc и функции самой уязвимой программы. Указате-
полнительную проверку, сравнивая адреса возврата на сте- ли на данные также остаются незащищенными. Кроме то-
ке и retarray. В случае расхождения вызывается функция го, при исчерпании массива адреса возвратов (что при глу-
SYS_exit, завершающая программу в аварийном режиме. бокой вложенности функций имеет место быть) он автома-
Ключи -r и -g задействуют механизм «Ret Range Checking», тически переходит в «обычный» режим, в котором прове-
проверяющий границы адресов возврата и останавливаю- ряет только границы адресов возврата, но не сами адреса.
щий программу, если они выходят за пределы некоторой за- Хорошая новость, нечего сказать!
ранее заданной величины (т.е. находятся в куче или стеке).
Таким образом, даже если хакер перезапишет retarray Pro-Police
(а он находится в записываемой области памяти), подсунуть Протектор Pro-Police, зародившийся в недрах японского от-
указатель на shell-код ему уже не удастся, правда, он может деления IBM (http://www.research.ibm.com/trl/projects/security/
беспрепятственно вызывать функции библиотеки libc, пере- ssp), – это без преувеличения самый сложный и самый со-
давая им любые аргументы (атака типа return-to-libc). вершенный механизм, реализующий модель безопасного
стека (Safe Stack Usage Model), который действительно за-
Листинг 8. Дизассемблерный код, раскрывающий сущность щищает, а не разводит пропаганду, чтобы выбить очеред-
механизма Ret Range Checking
ной грант. Сражение с такой защитой любой самурай поч-
function_epilogue: тет за честь.
; // закрываем кадр стека небезопасным путем
leave Pro-Police зарывается намного глубже, чем Stack-Guard
cmp [esp], offset shielddatabase и работает на уровне RTL. Это не библиотека времени ис-
; // ^ проверяем границы адреса возврата полнения, это – промежуточный системно-независимый
; // если все ок, то переходим на ret язык, генерируемый компилятором gcc и расшифровыва-
jbe .LSHIELDRETRANGE
емый как register transfer language.
; // если мы здесь, то адрес возврата вышел Абстрагирование от оборудования существенно упро-
movl eax,1
; // за допустимые пределы, возможно он был изменен щает портирование и Pro-Police поддерживает практичес-
movl ebx,-1 ки все современные платформы: x86, powerpc, alpha, sparc,
; // завершаем выполнение программы
int 80h mips, vax, m68k, amd64.
Самая главная инновация – переупорядочивание ло-
.LSHIELDRETRANGE:
ret ; // возвращаемся в материнскую процедуру кальных переменных. Pro-Police разбивает переменные
на две группы: массивы и все остальные. На вершину кад-
Усилилась и защита локальных переменных. Теперь пе- ра стека попадают обычные скалярные переменные. Мас-
ред вызовом функции по указателю, Stack-Shield убеждает- сивы идут за ними. Переполняющиеся буферы могут воз-
ся, что она находится в пределах сегмента кода: действовать друг на друга, но до указателей уже не достать,
во всяком случае не таким простым путем.
Листинг 9. Дизассемблерный код, показывающий Адрес возврата и указатель кадра защищены сторо-
как Stack-Shield контролирует указатели на функции
жевой константой guard, генерируемой произвольном об-
; // в eax находится указатель на функцию разом. Это все тоже canary word, только в обличии новой
; // проверяем границы указателя
cmp eax, offset shielddatabase терминологии.
; // если указатель в границах, перехрдим
; // на вызов функции Листинг 10. Псевдокод уязвимой функции до защиты Pro-Police
jbe .LSHIELDCALL
foo()
; // указатель на функцию выходит за допустимые границы {
mov eax,1 char *p; // локальная переменная-указатель
movl ebx,-1 ; // возможно, он был хакнут char buf[128]; // локальный буфер
; // завершаем выполнение программы
int 80h // функция, которая этот буфер и переполняет
gets (buf);
.LSHIELDCALL: }

№2, февраль 2006 53


безопасность
Сводная таблица различных защитных методов foo (int a, void (*fn)())
{
stack-guard .NET stack-shield pro-police char buf[128]; // локальный буфер
Защищает адрес возврата да да частично да
gets (buf); // функция, переполняющая буфер
Защищает указатель // вызов функции по указателю, переданному
нет да нет да // в качестве аргумента и затираемому при переполнении
кадра
(*fn)();
Защищает локальные
нет нет частично да }
переменные
Защищает аргументы нет нет нет да
Листинг 14. Псевдокод функции, защищенной Pro-Police
Защищает массивы нет нет нет нет (добавленные строки выделены красным шрифтом)
Canary word случаен нет частично – да // глобальный canary, генерируемый случайным образом
Защищает canary word
Int32 random_number;
от перезаписи
да нет – да // уязвимый аргумент-указатель
foo (int a, void (*fn)())
{
Листинг 11. Псевдокод функции, защищенной Pro-Police // локальная копия canary, охраняющая кадр
(добавленные защитой строки выделены красным шрифтом) volatile int32 guard;
// буфер идет перед переменными, но после аргументов
// глобальный canary, генерируемый случайным образом char buf[128];
Int32 random_number; // копируем аргумент во временную переменную
foo () (void *safefn)() = fn;
{ // копируем глобальный canary в локальную переменную
// локальная копия canary, охраняющая кадр guard = random_number;
volatile int32 guard;
// буфер идет перед всеми локальными переменными! gets (buf); // вызываем уязвимую функцию
char buf[128];
// локальная переменная-указатель // вызываем функцию по скопированному указателю
char *p; (*safefn)();
if (guard != random_number) /* program halts */
// копируем глобальный canary в лок. переменную }
guard = random_number;

gets (buf); // вызываем уязвимую функциюПри всей надежности Pro-Police отсутствие стороже-
вых слов между массивами делает атаку по-прежнему
if (guard != random_number) /* program halts */
} возможной, поскольку затирание нижеследующих мас-
сивов порождает целый каскад вторичных переполне-
Состояние стека на момент вызова функции f из лис- ний (особенно целочисленных), да и массивы из указа-
тинга 1 под Pro-Police выглядит так: телей не такая уж большая редкость. Тем не менее та-
кая проверка (кстати говоря, обещанная в следующих
Листинг 12. Состояние стека функции foo() на момент версиях Pro-Police) приведет к существенному падению
завершения выполнения пролога, обратите внимание,
что при переполнении буфера buf затирания локальных производительности, что явно пойдет не на пользу ее по-
переменных уже не происходит! пулярности.
[ p ]
[
[
buf
guard
]
]
Заключение
[ ebp ] Так все-таки можно защититься от переполняющихся буфе-
[ retaddr ] ров или нет? Pro-Police отсекает большое количество атак,
[ arg 1 ]
[ --------- ] но… все это атаки на стек, а помимо стека у нас еще есть
[ --------- ] целочисленное переполнение, спецификаторы и куча, ко-
[ --------- ]
торые Pro-Police даже не пытается охранять, поскольку они
Сравните это с листингом 5. Разница незначительная, находятся вне его «департамента». Это не упрек, а скорее
но принципиальная! По соображениям производительнос- констатация факта.
ти, Pro-Police внедряет защиту адреса возврата только Личное наблюдение – прочитав несколько популярный
функции, содержащие буферы, которые потенциально мо- статей и установив могучий Pro-Police, большинство зна-
гут быть переполнены. То есть Pro-Police совмещает в себе комых мне программистов упускают из виду, что необхо-
защитный механизм с системой аудита кода (рис. 2)! димо установить что-то еще. Безопасное программирова-
Pro-Police предусматривает даже такую неочевидную ние требует целого комплекса совокупных мер, жестоко
ситуацию, как подмена указателей, переданных в качестве карая за малейшие ошибки.
аргументов, и надежно защищает их. В прологе аргументы Использовать Pro-Police, безусловно, стоит, равно
копируются в промежуточные переменные, расположенные как и компилировать программы с ключом /GS, одна-
«над» переполняющимся буфером, а не «под» ним (где на- ко необходимо помнить, что эта мера отнюдь не гаран-
ходятся оригинальные аргументы). В дальнейшем все об- тирует защищенности, а всего лишь уменьшает вероят-
ращения к аргументам осуществляются через промежуточ- ность атаки.
ные переменные следующим образом:
Литература:
Листинг 13. Псевдокод уязвимой функции, вызывающей функцию 1. Касперски К. Ошибки переполнения буфера извне и изнутри
по указателю, передаваемому в качестве аргумента,
до защиты Pro-Police как обобщенный опыт реальных атак. – Журнал «Системный
администратор» №3, 2004 г. – 64-72 с.

54
bugtraq

Множественные уязвимости Обход ограничений безопасности


в Mozilla Firefox в продуктах Oracle
Программа: Mozilla Firefox 1.5 и более ранние версии. Программа: Oracle9i Database Standard Edition, Oracle9i
Опасность: Критическая. Database Enterprise Edition, Oracle9i Application Server, Oracle
Описание: 1. Обнаружено несколько ошибок в JavaScript Application Server 10g, Oracle Database 8.x, Oracle HTTP
engine при обработке временных переменных. Удаленный Server 8.x, Oracle HTTP Server 9.x.
пользователь может выполнить произвольный сценарий на Опасность: Высокая.
целевой системе. Уязвимы Mozilla Firefox 1.5 и более ран- Описание: Уязвимость существует из-за ошибки в компо-
ние версии. ненте Gateway в Oracle PL/SQL при проверке подлинности
2. Обнаружена ошибка при обработке динамических определенных HTTP-запросов. Удаленный пользователь
стилей. Удаленный пользователь может изменить стиль может обойти ограничения списка PLSQLExclusion и полу-
элемента с «position:relative» на «position:static» и получить чить доступ к запрещенным пакетам и процедурам с помо-
доступ к освобожденной памяти. Удачная эксплуатация щью специально сформированного HTTP-запроса. Удач-
уязвимости позволит злоумышленнику выполнить произ- ная эксплуатация уязвимости позволит злоумышленнику
вольный код на целевой системе. Уязвимость существу- получить доступ с привилегиями DBA к базе данных пос-
ет в версии 1.5. редством веб-сервера.
3. Уязвимость существует из-за ошибки в методе URL производителя: www.oracle.com.
QueryInterface в объектах Location и Navigator. Удаленный Решение: В настоящее время способов устранения уязви-
пользователь может выполнить произвольный код на целе- мости не существует.
вой системе. Уязвимость существует в версии 1.5.
4. Уязвимость существует при обработке входных данных Переполнение буфера в Red Hat
в имени атрибута при вызове функции XULDocument.persist(). Directory Server/Certificate Server
Удаленный пользователь может внедрить произвольный Программа: Netscape Directory Server 4.x, Netscape Certificate
XML или JavaScript-код в файл localstore.rdf, который будет Management System 4.x, Red Hat Certificate System 7.1 и бо-
выполнен во время следующего запуска браузера. лее ранние версии, Red Hat Directory Server 7.1 и более ран-
5. Несколько целочисленных переполнений обнаруже- ние версии.
ны в модулях E4X, SVG и Canvas. Удаленный пользователь Опасность: Высокая.
может выполнить произвольный код на целевой системе. Описание: Переполнение стека обнаружено из-за ошибки
Уязвимость существует в версии 1.5. при обработке событий кнопки «Help» на административ-
6. Уязвимость существует при обработке данных в функ- ных страницах в «Management Console». Удаленный поль-
ции nsExpatDriver::ParseBuffer() XML-парсера. Удаленный зователь может подключиться к консоли управления и с по-
пользователь может получить доступ к данным, хранящим- мощью специально сформированного запроса выполнить
ся в динамической памяти системы. Уязвимость существу- произвольный код на целевой системе.
ет в версии 1.0. URL производителя: www.redhat.com.
7. Уязвимость существует из-за недостаточной защи- Решение: Установите исправление для Red Hat Directory
щенности внутреннего объекта AnyName в модуле E4X. Server с сайта производителя. В настоящее время способов
Удаленный пользователь может создать коммуникацион- устранения уязвимости в Red Hat Certificate System не су-
ный канал между двумя окнами или фреймами в различ- ществует. В качестве временного решения рекомендуется
ных доменах. Удаленный пользователь может получить до- удалить файл help.cgi.
ступ к важным данным на системе. Уязвимость существу-
ет в версии 1.5. Отказ в обслуживании модуля netinet
URL производителя: www.mozilla.com. в FreeBSD
Решение: Установите последнюю версию (1.5.0.1) с сай- Программа: FreeBSD 5.3, 5.4.
та производителя. Опасность: Средняя.
Описание: Уязвимость существует в реализации алго-
Переполнение буфера в GNU Tar ритма выборочного подтверждения (SACK – Selective
Программа: GNU Tar 1.15.1, возможно более ранние вер- Acknowledgement) при обработке TCP-пакетов. Удаленный
сии. пользователь может послать уязвимой системе специаль-
Опасность: Высокая. но сформированные TCP-пакеты, вызвать зацикливание
Описание: Уязвимость существует из-за ошибки при об- TCP/IP-стека и потребить все доступные ресурсы на систе-
работке расширенных заголовков PAX. Удаленный поль- ме. Удачная эксплуатация уязвимости позволит злоумыш-
зователь может с помощью специально сформированного леннику вызвать отказ в обслуживании системы.
архива вызвать переполнение буфера и выполнить произ- URL производителя: www.freebsd.org.
вольный код на целевой системе. Решение: Установите исправление с сайта производите-
URL производителя: www.gnu.org/software/tar. ля.
Решение: Установите исправленную версию (1.15.90
(alpha)) с сайта производителя. Составил Александр Антипов

№2, февраль 2006 55


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

Чем уникальна общественная


система предотвращения атак Prevx1

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

В
журнале уже шла речь о про- но составляют безопасный профиль го в системе, хотя бы такого, чтобы по-
активных системах защиты [1] системы и работающих программ, явление нового процесса вызвало по-
и узловой системе останов- а CORE FORCE использует профиль, дозрение. На составление и тестиро-
ки атак CORE FORCE [2]. Назначе- заранее подготовленный сообщест- вание профиля для CORE FORCE тре-
ние у них одно – защита персональ- вом пользователей. Недостатки есть буется время, кроме того, в списке из-
ного компьютера от вирусов, извест- у обеих систем. На составление авто- вестных программ может не оказать-
ных и неизвестных уязвимостей, чер- матического профиля (обучение) ухо- ся нужной утилиты. Хотя эта пробле-
вей, шпионских и троянских программ. дит некоторое время, в течение кото- ма также решаема, пользователь сам
В том числе они способны среагиро- рого решение о допуске программы, может составить профиль или попро-
вать на так называемые атаки нулево- как правило, принимает пользова- сить помощи у сообщества, быстрота
го дня, которые, как правило, не обна- тель. И хотя подобные системы сегод- реакции которого – вещь труднопро-
руживаются традиционными средства- ня все меньше и меньше задают воп- гнозируемая. При правильно состав-
ми. Но эти системы отличаются прин- росов, от пользователя требуется не- ленном профиле пользователь может
ципом работы. Первые самостоятель- кий уровень понимания происходяще- и не участвовать в отражении атаки,

56
безопасность
но следует учесть, что вручную профи- вод (рис. 1). Если в центральной базе
ли составляются только для заведомо данных не было информации о новой
хороших программ. Вирус и шпионский программе, новый модуль заносится
модуль будут пойманы, только при по- в нее и помечается как неизвестный,
пытке выполнить какое-то неизвестное пользователь в таком случае предуп-
системе защиты действие. А ресурсы, реждается о возможном риске. В от-
затраченные для автоматической ге- личие от антивирусов, требующих не-
нерации профиля в проактивных сис- которое время, необходимое на ана-
темах, остаются неизвестными сооб- лиз специалистами, Community Watch
ществу, к тому же для них характерны в большинстве случаев сам способен
ложные тревоги. Истина, как извест- определить характер программы, ос-
но, где-то посередине. Возможно, со- новываясь на поведенческих характе-
здателям общественной системы пре- ристиках. Для этого используется ме-
Рисунок 1. При попытке установки
дотвращения атак (Community Intrusion тодика, названная «Four Axes of Evil» нового, неизвестного локальной базе ПО
Prevention System – CIPS) Prevx 1 уда- (четыре оси зла), определяющая ха- запрашивается информация из центральной
базы данных
лось ее найти. рактер программы по четырем состав-
ляющим: скрытность, поведение, про-
Что представляет собой исхождение и распространение. В ре-
Prevx 1? зультате создается ее описание, со-
Английская компания Prevx Limited, держащее около 120 параметров, поз-
имеющая 5-летний опыт по разработ- воляющих ее идентифицировать в бу-
ке систем предотвращения атак, вы- дущем. То есть если неизвестная ба- Рисунок 2. В режиме Pro и Expert
пустила в феврале 2004 года совер- зе утилита выполняет те же действия, пользователь будет получать информацию
о работе программ
шенно новый тип IPS, названный Prevx что и уже известная зловредная про-
Home. Уникального в представлен- грамма, то ее назначение очевидно. тер самостоятельно, так и может быть
ной системе было много. Так, в отли- Если данных, собранных агентом, все- усилена другими продуктами: меж-
чие от антивирусных систем, исполь- таки недостаточно для принятия од- сетевым экраном, антивирусом, про-
зующих для определения злонаме- нозначного решения, то база данных граммами для поиска шпионских мо-
ренных файлов сигнатуры, или неко- может потребовать копию программы дулей и пр. Программа проходит тес-
торых IDS-систем, использующих спи- для прогона. По заявлению разработ- тирование на совместимость, только
сок разрешенных приложений, в но- чиков только небольшой процент слу- межсетевые экраны могут закрывать
вой системе применялись правила, чаев требует ручного вмешательства доступ к базе, но это легко решается.
описывающие поведение и контроль- специалистов. При первом запуске Для установки агентов потребуются
ные суммы программ. Причем в спи- база данных содержала информацию Windows 2000/XP/2003, установлен-
сок попадали как заведомо хорошие об одном миллионе событий, через ные на компьютер с 256 Мб ОЗУ, и про-
программы, так и плохие, что позво- 20 месяцев в базе уже была инфор- цессор с частотой 600 Мгц. Замечу, что
ляло быстро определить характер но- мацию об 1 миллиарде событий. Такой при такой минимальной конфигурации
вой программы или процесса на ком- принцип фактически устраняет лож- система явно притормаживает, поэто-
пьютере. Но не это главное. В систе- ные позитивные и отрицательные сра- му для комфортной работы желатель-
ме используется единая база данных батывания. Как результат – появление но более мощное оборудование.
(Community Watch), являющаяся на- нового поколения программы Prevx 1,
иболее мощным источником инфор- бета-тестирование которой началось Семейство Prevx 1
мации, определяющим существова- с 16 июля 2005 года. Результат превы- Каждая копия установленного Prevx 1
ние, распространение и деятельность сил все ожидания – 100 тысяч разбро- состоит из двух основных частей:
как благоприятного, так и злонаме- санных по всему миру компьютеров консоли (pxconsole.exe) и агента
ренного программного обеспечения. с установленными на них Prevx 1 ока- (pxagent.exe). Консоль может работать
База данных прослеживает и анали- зались способны противостоять новым в трех режимах, выбираемых пользо-
зирует в реальном времени поведе- угрозам в реальном времени. В насто- вателем самостоятельно, кроме того,
ние и распространение каждой про- ящее время оптимизированная база возможно использование трех лицен-
граммы, выполняемое обществом. данных содержит более 10 миллионов зий. В зависимости от этого пользова-
Агенты безопасности, расположенные уникальных событий с 220 тысячами телю будут доступны различные пара-
на клиентских компьютерах, отслежи- вредных объектов. А система автома- метры и настройки.
вают ситуацию в защищаемой систе- тически обнаруживает и нейтрализует По умолчанию консоль устанавли-
ме. При установке нового приложе- ежедневно свыше 400 вредных и око- вается в режим Prevx1 ABC. Это самый
ния либо появлении нового неизвест- ло 10 тысяч программ различного на- простой режим, предназначенный для
ного локальной базе процесса соеди- значения, антивирусным программам неподготовленного (и ленивого) поль-
нялись с центральной (общественной) не угнаться за такой производитель- зователя. Выводится минимум инфор-
базой через Интернет и на основании ностью. Prevx1 может использовать- мации, внешне работа системы будет
полученной информации делали вы- ся как автономно, защищая компью- заметна только в случае возникно-

№2, февраль 2006 57


безопасность
жет работать автономно, без доступа
к внешней базе данных, так как инфор-
мация о новых процессах будет выво-
диться пользователю.
Теперь о лицензиях. Лицензия
Individual стоимостью 19,95 у.е., как вид-
но из названия, предназначена для за-
щиты одного персонального компьюте-
ра. При наличии 5 персональных ком-
пьютеров лучше использовать лицен-
зию Family стоимостью 39,95 у.е. Кро-
ме меньшей стоимости лицензии в пе-
ресчете на один компьютер, в вари-
анте Family Prevx1 умеет отправлять
почтовые сообщения о состоянии бе-
зопасности компьютеров семейства
при возникновении угроз, установке
нового ПО, загрузке подозрительного
контента и пр.
Самой мощной является лицензия
Enterprise. Кроме оповещений доступ-
ных в версии Famile, в этом варианте
Рисунок 3. После установки пользователю будет выведен результат использован более мощный End Point
Security агент. При попытке установки
нового ПО или попытке запуска неиз-
вестной программы агент производит
запрос к центральной базе данных на
предмет санкционированного исполь-
зования в предприятии. Если такое ПО
не разрешено, то попытка выполнения
блокируется. Если код известен, благо-
приятен и разрешен, тогда программа
выполняется, и ее данные добавляют-
ся к локальной базе данных. В течение
выполнения агент или база данных мо-
жет аннулировать право выполнения,
если код ведет себя с некоторой сте-
пенью анормальности.
Таким образом, при помощи Prevx1
можно не только защищать компьюте-
ры предприятия от известных и неиз-
вестных атак, но и контролировать ус-
тановку программного обеспечения.
Enterprise можно свободно установить
Рисунок 4. Вредные программы попадают в песочницу на 100 компьютеров и тестировать в те-
вения внештатной ситуации, контро- ние об установке программ, загруз- чение 3 месяцев, что позволяет полно-
лируется меньшее число параметров ке данных из Интернета и другой де- стью оценить качество продукта и вы-
программ, запуск, остановку и другие ятельности. явить слабые места в компьютерной
действия программ можно контролиро- Некоторым пользователям настро- сети предприятия.
вать в сплывающих окнах (рис. 2). ек Pro было мало, так как они не мог- Кроме этого пользователям пред-
Вариант Pro рассчитан на продви- ли тонко сконфигурировать систему, лагается свободная версия продукта,
нутых пользователей, которые хотят вот для них и предназначена версия имеющая литеру «R» в названии [3].
получать более подробную информа- Expert, дающая в руки наиболее пол- Здесь поступили очень просто: вмес-
цию о работе и остановке программ, ное управление системой. Агенты про- то обычного в таких случаях ограни-
попытке выхода в Интернет и дру- веряют большее количество парамет- чения функциональности продукта
гих действиях. Кроме того, пользо- ров, даже по сравнению с версией Pro. пользователям предоставляется са-
ватель получает доступ к больше- Учитывая возможность вмешательства мая последняя тестовая версия, имею-
му числу настроек и в результате мо- пользователя в режимах Pro и Expert, щая полную функциональность. Таким
жет самостоятельно принимать реше- в таком варианте система Prevx1 мо- образом, не только привлекаются но-

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

Установка Prevx1
Установка Prevx1 не представляет со-
бой ничего сложного, но обязательно
при активации и верификации требу-
ется подключение к Интернету. После
запуска исполняемого файла (5,45 Мб)
предстоит пройти четыре этапа:
 Installation – приложение копирует-
ся в заданный каталог и устанавли-
вается.
Рисунок 5. Для подтверждения запуска обновленного браузера Firefox требуется
 Activation – указывается файл ли- сверка с базой сообщества
цензий или использование тесто-
вого варианта.  Jail – программы перемещаются ей работы продуктом. Использование
 Disk Scan – происходит сканирова- в другую папку, переименовыва- многочисленных компьютеров как не-
ние жесткого диска в поиске испол- ются, и запустить их невозможно. коей распределенной системы обна-
няемых файлов и создание локаль- ружения атак позволяет вовремя обна-
ной базы данных. Эта операция про- Список всех активных программ руживать неизвестные угрозы, а при-
изводится один раз, при последу- доступен в окне «Status». Работу лю- меняемые для их описания алгоритмы
ющей эксплуатации системы, про- бой программы можно проконтролиро- практически полностью автоматизи-
граммы определяются при попыт- вать при помощи монитора (Programm руют процесс занесения их в базу дан-
ке запуска, поэтому периодическое Monitor). В результате пользователь мо- ных. Возможность контроля над уста-
сканирование не требуется. жет собрать полную информацию о клю- навливаемыми приложениями в версии
 Verification – происходит сверка чах реестра, к которым осуществлялся Enterprice и оповещение делает ее хоро-
с общественной базой данных, оп- доступ, сетевой и другой активности. шим помощником администратора. Ми-
ределение характера найденных Ее можно вывести в двух формах: спи- нусы тоже есть. Необходим постоянный
программ и завершение создания сок событий и тип событий (Event Type). и устойчивый канал в Интернете, к то-
локальной базы данных. На тесто- Последний очень удобен при ручном со- му же такая система во время установ-
вом компьютере с полусотней ус- ставлении правил. Но, к сожалению, эк- ки потребует некоторый трафик, кото-
тановленных программ такая свер- спортировать полученный список в ок- рый при большом количестве компью-
ка заняла около 600 Кб входящего но правил нельзя. Для переключения теров может стать большим. Возмож-
и исходящего трафика. в режимы Pro и Expert необходимо ак- ность использования централизован-
тивировать «Advanced Mode» во вклад- ной базы данных (даже в кэширующем
После чего компьютер считается ке «Preferences» и затем в появившей- варианте), расположенной на предпри-
защищенным и пользователю выво- ся вкладке «Advanced» выставить тре- ятии, снизила бы нагрузку на внешний
дится результирующая информация буемый режим. При желании настрой- канал, упростила администрирование
(рис. 3). Кроме того, о состоянии за- ки в «Preferences» можно защитить па- и сделала такую систему менее зави-
щиты вам подскажет индикатор в трее. ролем. симой от внешней базы. Таким обра-
Если он горит зеленым, то с защитой В моем случае даже не пришлось зом, повысилась бы надежность всей
все в порядке, красным – на компьюте- долго ждать, чтобы протестировать схемы. Но очевиден отход от класси-
ре найдены вредные программы, жел- работу системы. В процессе верифи- ческих схем определения атак и в бу-
тый цвет индикатора показывает на на- кации базы данных решил обновить- дущем, вероятно, подобные системы
личие неизвестных программ, в этом ся веб-браузер Firefox. После его пе- будут более распространены.
случае пользователь должен быть вни- резапуска консоль Prevx1 выдала со-
мателен. Все вредные программы бу- общение о том, что происходит запуск Литература, ссылки:
дут помещены в песочницу, имеющую неизвестной программы и требуется 1. Яремчук С. Проактивные системы за-
три варианта (рис. 4): проверка с базой данных сообщества щиты, или Есть ли жизнь без антивиру-
 Holding Cell – программы остают- (рис. 5). Хотя пользователь может за- са? – Журнал «Системный админист-
ся на своих местах, но они заблоки- пустить ее и без подтверждения, вы- ратор», №7, 2005 г. – 9-13 с.
рованы, и запустить их невозмож- брав вариант установки нового про- 2. Яремчук С. Защита Windows-систем
но, сюда программы попадают сра- граммного обеспечения. при помощи CORE FORCE – Жур-
зу после обнаружения. нал «Системный администратор», №1,
 On Probation – программа может Выводы 2006 г. – 54-59 с.
быть запущена, даже если Prevx1 Несомненно, Prevx1 является передо- 3. Свободная версия Prevx1R – http://free.
определил ее как вредную. вым и интересным по принципу сво- prevx.com.

№2, февраль 2006 59


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

Как повысить безопасность


веб-приложений

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

Т
радиционно для защиты сете- в реальном времени, требуется помес- запрос, содержащий злонамеренные
вых приложений используют сис- тить IPS и firewall поближе к приложе- данные, он вполне может отклонить,
темы обнару жения и останов- нию, т.е. на седьмой уровень. преобразовать запрос или выполнить
ки атак, а также межсетевые экра- любое другое действие. К слову ска-
ны, работающие на третьем сете- Firewall веб-приложений зать, на сегодняшний день нет единой
вом уровне модели OSI. В то же вре- Судя по статистике, именно веб-сер- устоявшейся терминологии, каждый
мя такой подход имеет и недостатки. висы привлекают сегодня нападаю- производитель называет продукт по-
Так, при включении в разрыв необхо- щего. Это, впрочем, не удивительно, своему. Поэтому в Интернете следует
дим IP-адрес, при этом IPS (Intrusion так как веб-технологии ориентирова- искать информацию в различных со-
Prevention Systems) легко обнаружи- ны в первую очередь на публичный четаниях. Например, Adaptive Firewall
вается и система сама может подвер- доступ 24 часа в сутки 7 дней в не- (Proxy, Gateway), Application (-level или
гнуться нападению. Выходом из такой делю. Поэтому его невозможно спря- -layer) Firewall, Web IPS или Deep Packet
ситуации является переход на более тать за межсетевым экраном. Каждая Inspection Firewalls и другие. Имеются
низкий, т.е. канальный уровень OSI, из атак, направленных на этот сер- как аппаратные решения, так и про-
что с успехом и применяется в такой вис, представляет собой специально граммные. К первым относятся такие,
IPS, как hogwash [1]. Но увеличение по- составленные запросы, которые вы- как TrafficShield Application Firewall [3],
токов данных привело к тому, что та- глядят как обычный трафик, поэтому в котором применена так называемая
кие системы требуют серьезной аппа- он беспрепятственно проходит через положительная модель безопасности,
ратной поддержки, иначе они просто него. Один из возможных путей ре- запрещающая все, что явно не раз-
не успевают обрабатывать информа- шения проблемы описан в [2], но та- решено, или NetContinuum NC-2000
цию. С другой стороны IPS, как прави- кие мероприятия можно отнести ско- AG Secure Application Gateways [4], ко-
ло, не знает, что конкретно она защи- рее к упреждающим. Для остановки торый является гибридным устройс-
щает (хотя это можно настроить, уб- атаки необходимо использовать пер- твом, объединяющим в себе функ-
рав лишние правила), поэтому ресурсы сональные IPS – firewall веб-приложе- ции firewall веб-приложений и комму-
системы расходуются зря. Но зато она ний (Web Application Firewall – WAF). татора седьмого уровня. Или подоб-
точно не владеет информацией о собы- Они действуют по принципу обрат- ный гибрид от компании Imperva Inc.
тиях, происходящих в конкретных при- ного прокси-сервера, стоящего меж- SecureSphere Web Application Firewall
ложениях. Кроме того, такие системы ду сервером и клиентами. Один такой [5], имеющий фирменную технологию
позволяют защитить только наиболее прокси может одновременно обслужи- Dynamic Profiling, которая формирует
часто используемые приложения. Поэ- вать несколько веб-серверов, что уп- модель нормального поведения при-
тому они смогут обеспечить только не- рощает администрирование, позволя- ложения. Такие гибридные устройс-
кий минимальный базовый уровень за- ет централизованно управлять досту- тва имеют подробное представление
щиты, а учитывая, что на сегодняшний пом, увеличивая производительность, о защищаемом веб-сервере и о кон-
день увеличилось количество нападе- кэшируя запросы, сжимая информа- кретных приложениях. Они обладают
ний на прикладном уровне, этого явно цию. Кроме того, такой подход скрыва- достаточной функциональностью, поз-
недостаточно. Для выполнения более ет топологию сети. Поскольку модуль воляющей надежно защитить веб-сер-
широкого набора проверок, контроля расположен между клиентом и серве- вис, но и стоят дорого. Среди програм-
трафика и реагирования на нападение ром, то в случае, когда он обнаружит мных решений особо хотелось бы вы-

60
безопасность
делить основанный на OpenBSD мощный и легкий в управ-
лении firewall веб-приложений датский продукт Profense [6],
стоящий отдельного обзора. А также бесплатные Open
Source продукты: написанные на Java и ориентированные
на все серверы, работающие по протоколу HTTP/HTTPS
Guardian@JUMPERZ.NET [8] и mod_security [9], о котором
пойдет речь далее.

Проект ModSecurity Рисунок 1. ModSecurity может быть установлен как отдельно,


ModSecurity создан Иваном Ристиком (Ivan Ristic) в 2003 го- так и защищать группу разнородных веб-серверов
ду и представляет собой firewall веб-приложений, который
может использоваться как модуль веб-сервера Apache, ли- паковываем архив и заходим внутрь каталога соответству-
бо работать в автономном режиме и позволяющий защитить ющего версии веб-сервера Apache.
веб-приложения как от известных, так и неизвестных атак.
Его использование прозрачно, как установка, так и удаление $ wget –c http://www.modsecurity.org/download/ ↵
modsecurity-apache-1.9.2.tar.gz
не требует изменения настройки сервисов и сетевой тополо- $ tar –xzvf modsecurity-apache-1.9.2.tar.gz
гии. Кроме того, при обнаружении уязвимого места теперь $ cd modsecurity-apache-1.9.2/apache2
не обязательно впопыхах изменять исходный код, делая но-
вые ошибки, достаточно на первых порах добавить новое Для сборки используется apxs – APache eXtenSion
правило, запрещающее вредную комбинацию. Modsecurity tool. Если Apache устанавливался вместе с дистрибути-
может защищать одновременно несколько веб-серверов, вом, убедитесь в наличии заголовочных файлов и ути-
в том числе и отличных от Apache (рис. 1). Кроме обычных литы apxs. В ALTLinux заголовочные файлы находятся
соединений может контролировать и защищенный SSL-тра- в /usr/include/apache2. Если в вашем дистрибутиве их нет,
фик. Гибкозадаваемые правила журналирования позволяют то доустановите соответствующий devel-пакет (например,
записать любые данные сеанса, позволяя в будущем пол- httpd-devel), в некоторых дистрибутивах в него включен
ностью разобрать запросы, предшествующие взлому. По- и apxs. В ALTLinux Master, в котором может быть установ-
нимание протокола HTTP позволяет очень тонко выполнить лена любая из двух версий Apache 1.3 и 2.0, скрипт apxs ис-
фильтрацию, поддерживается как GET, так и POST-методы, пользуется при компиляции динамических библиотек для
запросы к динамическим ресурсам. Для борьбы с различ- версии 1.3. При использовании второй версии сервера биб-
ными методами уклонения (ссылки на внешние сайты, за- лиотеки необходимо применять apxs2.
кодированные URL, использование нескольких слэшей, ну-
левые байты и пр.) пути и параметры нормализуются. В но- # /usr/sbin/apxs2 -cia mod_security.c
вой версии 1.9, вышедшей в ноябре 2005 года, возможно на- …
следование правил, используется новый формат контроль- /usr/lib/apache2/modules
/usr/share/apr/build/libtool --mode=install cp mod_security.la
ного журнала, позволяющий производить аудит в реальном /usr/lib/apache2/modules/
времени (старый формат оставлен, но может быть удален cp .libs/mod_security.so /usr/lib/apache2/modules/mod_security.so
cp .libs/mod_security.lai /usr/lib/apache2/modules/mod_security.la
в версии 2.0). Кроме того, в этой версии введен новый ме- cp .libs/mod_security.a /usr/lib/apache2/modules/mod_security.a
ханизм, названный guardian, задачей которого является кон- ranlib /usr/lib/apache2/modules/mod_security.a
chmod 644 /usr/lib/apache2/modules/mod_security.a
троль запросов, производимых с одного адреса, что позво-
PATH="$PATH:/sbin" ldconfig -n /usr/lib/apache2/modules
ляет защититься от DOS-атак, настраивая правила iptables. ------------------------------------------------------------------
Интеграция с Open Source антивирусом ClamAV дает воз- Libraries have been installed in:
/usr/lib/apache2/modules
можность сканировать загружаемые файлы на наличие ви- ------------------------------------------------------------------
русов. В версии добавлена поддержка PCRE, которую теперь chmod 755 /usr/lib/apache2/modules/mod_security.so
[activating module `security’ in /etc/httpd2/conf/httpd2.conf]
можно использовать вместо библиотеки regex для Apache
1.3. Количество кода по сравнению с предыдущей версией
выросло на 40%. Распространяется ModSecurity под двойной Последнее сообщение говорит о том, что в конфигура-
лицензией: GNU GPL, как свободное Open Source приложе- ционный файл веб-сервера занесена строка для запуска
ние, также доступно несколько вариантов end-user и OEM Dynamic Shared Object (DSO): «LoadModule /usr/lib/apache2/
коммерческих лицензий. modules/mod_security.so».
Проверьте ее наличие. При установке в качестве мо-
Установка ModSecurity дуля Apache необходимо скопировать файл mod_security.c
На момент написания статьи актуальной была версия 1.9.2, в подкаталог httpd-2.0.xx/modules/proxy и сконфигуриро-
имеющая незначительные исправления. Для упрощения вать со следующими опциями.
будем рассматривать использование ModSecurity для веб-
сервера, установленного на том же компьютере, описание $ ./configure -enable-security ↵
--with-module=proxy:mod_security.c
остальных настроек вы найдете в документации проекта. $ make
При установке из исходных текстов возможны два вариан- # make install
та: компиляция как динамической библиотеки и компиля-
ция в качестве модуля веб-сервера. В первом случае рас- Прежде чем перезапускать веб-сервер, необходи-

№2, февраль 2006 61


безопасность
мо отредактировать конфигурационный файл, в кото- # Кроме общих правил, можно задавать правила для отдельных
# каталогов веб-сервера
ром подключить библиотеки и настроить правила филь- <Location /axis/modsec.jws>
трации. Архив с исходными текстами содержит пример ….
</Location>
httpd.conf.example-minimal, копируем его на место:
# Далее при помощи директив SecFilter или SecFilterSelective
# cp httpd.conf.example-minimal ↵ # указываются правила
/etc/httpd2/conf/mod_security.conf </IfModule>

Подключаем его в конфигурационном файле веб-сер-


вера строкой: Правила ModSecurity
Отбор запросов ModSecurity осуществляет на основе пра-
Include /etc/httpd2/conf/mod_security.conf вил. Ключевое слово в правиле может быть не только прос-
тым текстом, но и записываться в виде регулярного выра-
жения. Например, используя следующее правило, можно
Конфигурационный файл ModSecurity отсеять все запросы, не содержащие слово php (действие
Рассмотрим основные параметры: deny используется по умолчанию, но для наглядности его
лучше прописывать явно):
<IfModule mod_security.c>

# Включение проверок ModSecurity, возможны три варианта: SecFilter !php


# Off – проверки не производятся, On – проверяется все
# и DynamicOnly – только динамически сгенерированные запросы
# (позволяет сэкономить ресурсы процессора) или так:
SecFilterEngine On

# При совпадении правил могут быть произведены одно SecFilter !php deny
# или более действий, каждый фильтр может иметь
# индивидуальный список действий, этим параметром
# определяются действия по умолчанию. или, например:
# Среди основных действий – deny, pass и redirect.
# Среди второстепенных – exec, к действиям, изменяющим
# прохождение цепочек, относится chain и skip. Действия SecFilter /etc/passwd
# описаны в таблице 1. После действий можно указать
# параметры, например статус
SecFilterDefaultAction "deny,log,status:430" а лучше:
# Включение декодирования POST-запросов, поддерживается
# два типа (application/x-www-form-urlencoded SecFilter "/(etc|bin|sbin|kernel|dev|tmp|var|opt)/"
# и multipart/form-data)
SecFilterScanPOST On
SecFilterCheckURLEncoding On Но такое правило хотя и пишется легко, но будет рабо-
SecFilterCheckUnicodeEncoding Off тать медленно, так как будет искать эту строку во всех па-
# Можно определить диапазон разрешенных символов раметрах. Поэтому на практике чаще всего используется
# (эта директива не распространяется на POST директива SecFilterSelective. В общем случае правило, со-
# с multipart/form-data)
SecFilterForceByteRange 0 255 ставленное с ее помощью, будет иметь такой вид:
# Можно замаскировать сервер, указав здесь другие данные.
# Некоторые эксплоиты перед началом работы проверяют банер SecFilterSelective LOCATION KEYWORD [ACTIONS]
#(ответ сервера), а нападающий будет сбит с толку, правда,
# на некоторое время, т.к. на Linux IIS не ставится.
# SecServerSignature "Microsoft-IIS/5.0" Параметры KEYWORD и ACTIONS аналогичны SecFilter,
LOCATION определяет местонахождение искомой строки.
# Параметры хранения временных файлов и скрипт для проверки
# ClamAV (найдете в каталоге util архива) Здесь может быть использовано регулярное выражение,
SecUploadDir /tmp IP-адрес, имя, идентификаторы, включая CGI-перемен-
SecUploadApproveScript /usr/bin/modsec_clamscan.pl
SecUploadKeepFiles Off ные (полный список приведен в «ModSecurity for Apache
User Guide», который найдете в подкаталоге doc-архива).
# Защита от DOS-атак, при превышении (по умолчанию)
# 120 запросов в минуту и 360 за 5 минут адрес блокируется Например:
# при помощи iptables, требует скрипт blacklist.
# Скрипт httpd-guardian и blacklist найдете в архиве [13]
SecGuardianLog | /usr/bin/httpd-guardian # Прием только тех запросов, которыми может
# Ведение журнала аудита и отладки # оперировать ModSecurity
SecAuditEngine RelevantOnly SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
# SecAuditLogRelevantStatus ^5 SecFilterSelective HTTP_Content-Type "!(^application/ ↵
SecAuditLog logs/modsec_audit.log x-www-form-urlencoded$|^multipart/form-data;)"
# Либо можно подключить экспериментальный скрипт
# modsec-auditlog-collector.pl, контролирующий журналы # Запрет GET или HEAD с ненулевым телом
# и отсылающий информацию на http-сервер. SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
# SecAuditLog | /path/to/modsec-auditlog-collector.pl ↵ SecFilterSelective HTTP_Content-Length "!^$"
logs/modsec_audit.log logs/index
# То же для каждого POST-запроса
SecFilterDebugLevel 0 SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterDebugLog logs/modsec_debug.log SecFilterSelective HTTP_Content-Length "^$"
# Просмотр выходной информации (работает только в версии # Чтобы избежать атак, направленных на переполнение
# для Apache 2) необходим для параметра OUTPUT # буфера, используем
# (примеры см. далее по тексту) SecFilterSelective THE_ REQUEST "!^[\x0a\x0d\x20-\x7f]+ $"
SecFilterScanOutput On # Запрет вывода, содержащего опасное словосочетание
SecFilterSelective OUTPUT "credit card numbers"

62
безопасность
Таблица 1. Действия, выполняемые при совпадении запроса
Действие Описание Пример
Действие, полезное в том случае, когда необходимо зарегистрировать событие, и далее продолжить
pass SecFilter KEYWORD "log,pass"
прохождение по цепочке правил
allow Действие разрешает запрос без прохождения по остальным цепочкам SecFilterSelective REMOTE_ADDR "^192\.168\.1\.99$" allow
deny Запрет запроса (по умолчанию используется статус 500)
Код HTTP-статуса при запрете запроса. Активизируется директива Apache ErrorDocument и выводит-
status SecFilter KEYWORD "deny,status:404"
ся соответствующая страница
Пользователь перенаправляется на указанный адрес (не должен содержать запятую). Переопределя-
redirect SecFilter KEYWORD "redirect:http://www.example.com"
ет status и deny
proxy Запрос перенаправляется на внутренний обратный прокси (mod_proxy) SecFilter KEYWORD "proxy:http://www.example.com"
Выполнение внешней команды (без параметров), которая получит все переменные CGI среды
exec (по окончании команда должна что-то вывести в stdin, иначе ModSecurity решит, что выполнение SecFilter KEYWORD "exec:/usr/bin/report-attack"
завершилось с ошибкой)
log Регистрация события в журнал ошибок
nolog Не регистрировать событие в журналах ошибок и аудита
skipnext Пропуск одного (по умолчанию) или нескольких следующих правил SecFilterSelective ARG_p value1 skipnext:2
Подключение нескольких правил в единый тест. Действие будет разрешено только в том случае, SecFilterSelective ARG_username admin chain
chain
когда будут выполнены все правила. Например, администратора только с указаного IP-адреса SecFilterSelective REMOTE_ADDR "^192\.168\.1\.99$"
pause Задержка в миллисекундах перед ответом на запрос (может быть полезна при борьбе со сканерами)
auditlog Регистрация в журнал аудита
noauditlog Не регистрировать событие в журнале аудита
Id – уникальный ID правила (для собственных правил ис-
id
пользуйте диапазон 1 – 99999)
rev Эти действия предназначены для вывода параметров в журнале ModSecurity, помогает собрать боль-
rev – версия правила
msg ше информации и классифицировать ошибки
msg – текстовое сообщение
severity
severity – цифровое значение (2-5) или название в syslog
mandatory Наследование правил
SecFilter KEYWORD setenv:name=value
setenv
Установка или сброс переменных среды и Apache Например, при помощи MODSEC_ENABLE можно на лету
setnote
переопределять значение директивы SecFilterEngine

# Или вывода команды ls –l назначенный для преобразования NASL правил сканера бе-
SecFilterSelective OUTPUT "total [[:digit:]]+"
# Также полезно запретить вывод пользователю ошибок зопасности Nessus/GNessUs. Формат запуска такой же.
# сценариев Теперь, когда правила составлены, перезапускаем веб-
SecFilterSelective OUTPUT "Fatal error:"
сервер и тестируем.
Команда разработчиков во главе с Иваном Ристи-
ком основной упор делает на усовершенствование кода # /etc/init.d/httpd2 restart
ModSecurity, оставляя создание правил пользователям, по- Stopping httpd2 service: [ DONE ]
этому оригинальный конфигурационный файл имеет все- Checking configuration sanity for httpd2: Syntax OK [ DONE ]
Starting httpd2 service: [ DONE ]
го несколько правил. Недавно был официально анонсиро-
ван субпроект, цель которого создание и тестирование пра-
вил [11]. Для их использования необходимо скачать и под- Тестируем правила
ключить требуемый файл правил в конфигурационном Для тестирования работы ModSecurity можно использовать
файле ModSecurity директивой Include. Некоторые из пра- любой из сканеров безопасности, умеющий проверять уяз-
вил требуют редактирования, кроме того, следует учиты- вимости веб-сервисов [2]. Кроме того, в комплект дистри-
вать особенности rexeс и PCRE, поэтому правила, создан- бутива входит скрипт run-test.pl, предназначенный для по-
ные для Apache 2.x, могут неправильно работать с первой сылок тестовых запросов. Попробуем создать простейшее
версией сервера (о том, как собрать первую версию с под- правило, запрещающее доступ к каталогу скриптов cgi-bin,
держкой PCRE, рассказано в документации). Кроме того, и отследить в журналах реакцию системы на его наруше-
в подкаталоге util найдете скрипт snort2modsec.pl, преоб- ние. Вот это правило:
разующий правила IDS Snort в правила ModSecurity (и го-
товый файл snortmodsec-rules.txt, содержащий преобразо- SecFilter cgi-bin
ванные таким образом правила, актуальные на момент вы-
хода дистрибутива). Запускаем веб-сервер сначала без поддержки ModSecurity
Получить их самому очень просто. и убеждаемся, что запрос к http://localhost/cgi-bin/printenv вы-
полняется успешно. Затем подключаем ModSecurity, резуль-
$ tar zxvf snortrules-snapshot-CURRENT.tar.gz тат на (рис. 2), как видите, запрос не прошел с кодом ошиб-
$ cat README.first > snortmodsec-rules.txt
$ ./snort2modsec.pl rules/* >> snortmodsec-rules.txt ки 403. Смотрим, что написано в журналах (в ALTLinux /var/
log/httpd2). Журнал регистрации запросов access_log со-
Аналогичную роль играет скрипт nessus2modsec.pl, пред- держит следующую запись.

№2, февраль 2006 63


безопасность
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90]
[rid#8182958][/cgi-bin/printenv][2] Checking signature
"^(GET|HEAD)$" at REQUEST_METHOD
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90]
[rid#8182958][/cgi-bin/printenv][3] Warning (chained rule).
Pattern match "^(GET|HEAD)$" at REQUEST_METHOD
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
[/cgi-bin/printenv][2] Checking signature "!^$"
at HEADER(Content-Length)
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90]
[rid#8182958][/cgi-bin/printenv][2] Checking signature "^POST$"
at REQUEST_METHOD
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
[/cgi-bin/printenv][2] Checking signature "!^$"
at HEADER(Transfer-Encoding)
Рисунок 2. Запрос, запрещенный правилами, не прошел [06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
[/cgi-bin/printenv][2] Checking signature "cgi-bin" at THE_REQUEST
127.0.0.1 - - [06/Feb/2006:15:16:25 +0000] [06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
"GET /cgi-bin/printenv HTTP/1.1" 403 299 [/cgi-bin/printenv][1] Access denied with code 403.
Pattern match "cgi-bin" at REQUEST_URI
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
Журнал ошибок поясняет, что доступ клиенту, пришед- [/cgi-bin/printenv][2] Logging phase starting
шему с адреса 127.0.01, запрещен модулем mod_security, [06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
[/cgi-bin/printenv][2] sec_audit_logger_serial: start
потому что совпал образец «cgi-bin».
[Mon Feb 06 15:16:25 2006] [error] [client 127.0.0.1] mod_security:
Access denied with code 403. Pattern match "cgi-bin" Выводы
at REQUEST_URI [hostname "localhost"] [uri "/cgi-bin/printenv"]Только система, не подключенная к сети, может быть 100%
[unique_id "vwk-VsCoABQAAA7tBpoAAAAA"]
безопасной, но веб-сервис должен быть публичным, иначе он
Кстати, на основании этой записи можно уже оптими- теряет смысл. Выявить все слабые места практически не воз-
зировать правило. Вот так: можно. По данным компании Netcraft, отслеживающей, какое
программное обеспечение используется серверами в Интер-
SecFilterSelective REQUEST_URI "cgi-bin" нете, хакеры всё чаще эксплуатируют дыры в распространен-
ных приложениях на основе РНР. Обычный межсетевой эк-
Теперь журналы ModSecurity. Файл modsec_audit.log со- ран здесь не помогает. Только специализированное програм-
держит всю информацию о запросе. мное обеспечение способно остановить атаку. ModSecurity
чрезвычайно функциональный, простой в конфигурировании
==83d74643==============================
Request: localhost 127.0.0.1 - - [06/Feb/2006:15:16:25 +0000] и главное совершенно бесплатный инструмент, использова-
"GET /cgi-bin/printenv HTTP/1.1" 403 299 "-" «Mozilla/5.0 ние которого позволит повысить безопасность предоставля-
(compatible; Konqueror/3.2; Linux) (KHTML, like Gecko)" vwk-
VsCoABQAAA7tBpoAAAAA "-"
емых веб-услуг, а относительная легкость написания правил
Handler: cgi-script поможет быстро среагировать на угрозу.
----------------------------------------
GET /cgi-bin/printenv HTTP/1.1
Connection: Keep-Alive Литература, ссылки:
User-Agent: Mozilla/5.0 (compatible; Konqueror/3.2; Linux) 1. Яремчук С. Все в одном, или Hogwash как пример Gateway-IDS. –
(KHTML, like Gecko)
Журнал «Системный администратор», №1, 2005 г. – 50-55 с.
Accept: text/html, image/jpeg, image/png, text/*, image/*, */*
Accept-Encoding: x-gzip, x-deflate, gzip, deflate 2. Яремчук С. Определяем уязвимости веб-сервиса с помощью
Accept-Charset: windows-1251, utf-8;q=0.5, *;q=0.5 Acunetix Web Vulnerability Scanner. – Журнал «Системный ад-
Accept-Language: ru, en
Host: localhost министратор», №9, 2005 г. – 68-69 с.
mod_security-action: 403 3. Сайт F5 Networks, Inc. – http://www.f5.com/products.
mod_security-message: Access denied with code 403. Pattern match
4. Сайт NetContinuum – http://www.netcontinuum.com.
"cgi-bin" at REQUEST_URI
5. Сайт Imper va Inc. – ht tp://w w w.imper va.com /products /
HTTP/1.1 403 Forbidden securesphere/web_application_firewall.html.
Content-Length: 299
Keep-Alive: timeout=15, max=100 6. Проект Profense – http://www.armorlogic.com.
Connection: Keep-Alive 7. Списки некоторых Web Application Firewall – http://www.bitpipe.
Content-Type: text/html; charset=iso-8859-1 com/rlist/term/Web-Application-Security.html.
--83d74643--
8. Проект Guardian@JUMPERZ.NET – http://guardian.jumperz.net.
А в modsec_debug.log найдете информацию обо всех ис- 9. Проект mod_security – http://www.modsecurity.org.
пользованных при запросе правилах: 10. Проект WASC (Web Application Security Consortium), здесь най-
дете документы, показывающие проблемы защиты веб-прило-
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
[/cgi-bin/printenv][2] Detection phase starting (request 8182958): жений и их возможные решения – http://www.webappsec.org.
"GET /cgi-bin/printenv HTTP/1.1" 11. Субпроект ModSecurity Rules – http://www.modsecurity.org/
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
projects/rules/index.html.
[/cgi-bin/printenv][2] Parsing arguments...
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958] 12. Ссылка на текущие правила для ModSecurity – http://www.
[/cgi-bin/printenv][3] Content-Type is not available modsecurity.org/download/modsecurity-rules-current.tar.gz.
[06/Feb/2006:15:16:25 +0000] [localhost/sid#80a8e90][rid#8182958]
[/cgi-bin/printenv][2] Checking signature "!^(GET|HEAD)$" 13. Архив инструментов для Apache – http://www.apachesecurity.
at REQUEST_METHOD net/download/snapshot/apache_tools-snapshot.tar.gz.

64
bugtraq

Обход ограничений безопасности Отказ в обслуживании при обработке


в frag3-препроцессоре в Snort LDAP-запросов в Fedora Directory Server
Программа: Snort 2.4.3. Программа: Fedora Directory Server 1.0.
Опасность: Средняя. Опасность: Средняя.
Описание: Уязвимость существует из-за ошибки в frag3-пре- Описание: 1. Уязвимость существует в LDAP-компонен-
процессоре, что может привести к тому, что Snort пропустит те при обработке BER-пакетов. Удаленный пользователь
ip_option_length-байты в конце IP-опций во время дизассем- может с помощью специально сформированного BER-па-
блирования пакета. Удаленный пользователь может с по- кета заставить приложение потреблять все доступные ре-
мощью специально сформированных фрагментированных сурсы системы.
пакетов обойти сигнатуры. 2. Уязвимость существует из-за ошибки в компоненте
URL производителя: www.snort.org. LDAP dn2ancestor при обработке DN, содержащих большое
Решение: В настоящее время способов устранения уязви- количество запятых. Удаленный пользователь может с по-
мости не существует. мощью специально сформированного запроса заставить
приложение потреблять все доступные ресурсы системы.
Множественные уязвимости 3. Уязвимость существует из-за ошибки при обработке
в Mozilla Thunderbird BER-пакетов. Удаленный пользователь может послать оп-
Программа: Mozilla Thunderbird 0.x, 1.x. ределенную последовательность BER-пакетов и вызвать
Опасность: Средняя. отказ в обслуживании приложения.
Описание: Обнаруженные уязвимости позволяют уда- URL производителя: www.directory.fedora.redhat.com/wiki/
ленному пользователю обойти ограничения безопаснос- Main_Page.
ти, произвести XSS нападение и выполнить произвольный Решение: Установите последнюю версию (1.0.1) с сайта
код на целевой системе. Удачная эксплуатация уязвимос- производителя.
ти возможна при включенном JavaScript (по умолчанию
JavaScript отключен). Отказ в обслуживании
URL производителя: www.mozilla.com/thunderbird. в MDaemon IMAP Server
Решение: В настоящее время способов устранения уязви- Программа: MDaemon IMAP Server 8.1.1.
мости не существует. В качестве временного решения ре- Опасность: Средняя.
комендуется запретить использование JavaScript и не от- Описание: Уязвимость существует при обработке входных
крывать письма из недоверенных источников. данных в команде LIST. Удаленный авторизованный поль-
зователь может с помощью специально сформированного
аргумента заставить приложение потреблять все доступ-
Отказ в обслуживании в службе IMAP ные ресурсы на системе. Пример:
в MailEnable Professional
M:\Distrib\nc>nc -v 127.0.0.1 143
Программа: MailEnable Professional версии до 1.72. Blaster [127.0.0.1] 143 (imap) open
Опасность: Средняя. * OK hack.com IMAP4rev1 MDaemon 8.1.1 ready
Описание: Уязвимость существует из-за неизвестной 0001 LOGIN "densen" "console"
0001 OK LOGIN completed
ошибки в команде EXAMINE. Удаленный пользователь мо- 0003 CREATE "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%
жет аварийно завершить работу IMAP-службы. s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s"
0003 OK CREATE completed
URL производителя: www.mailenable.com. 0004 LIST "%s%s%s%s%s%s%s" "%s"
Решение: Установите последнюю версию (1.72) с сайта
производителя. URL производителя: www.altn.com.
Решение: Установите исправление с сайта производите-
ля.
Обход ограничений безопасности
в Sun Java JRE Раскрытие данных
Программа: JDK and JRE 5.0 Update 5 и более ранние вер- в Fedora Directory Server
сии, SDK and JRE 1.4.2_09 и более ранние версии, SDK and Программа: Fedora Directory Server 1.0.
JRE 1.3.1_16 и более ранние версии. Опасность: Средняя.
Опасность: Высокая. Описание: Уязвимость существует из-за того, что Admin
Описание: Уязвимости существуют из-за неизвестных Server раскрывает пароль администратора из файла
ошибок в reflection API. Злонамеренный апплет может обой- adm.conf в теге IFRAME.
ти ограничения безопасности песочницы, прочитать и запи- URL производителя: www.directory.fedora.redhat.com/wiki/
сать произвольные файлы, выполнить произвольные при- Main_Page.
ложения на системе. Решение: Установите последнюю версию (1.0.1) с сайта
URL производителя: www.sun.com. производителя.
Решение: Установите исправленную версию с сайта про-
изводителя. Составил Александр Антипов

№2, февраль 2006 65


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

Исследуем сетевую безопасность


посредством Linux Netwosix

Сергей Яремчук
Буквально через пять дней после объявления релиза 1.3 дистрибутива Linux Netwosix
был анонсирован тестовый вариант следующей второй ветки. Что нового появилось
и для каких целей предназначен Linux Netwosix?

О
снователем и главным разра- боты, связанной с исследованием се- трибутив может также использоваться
ботчиком дистрибутива явля- тевой безопасности. Распространяет- для специальных исследований, таких
ется итальянец Vincenzo Ciaglia. ся по лицензии GNU GPL. как тесты на проникновение.
На основной странице проекта [1] ска- Одним из требований при его со- Главный замысел создателя Linux
зано, что Linux Netwosix является не- здании было дать большую свободу Netwosix состоит в том, что система со-
большим, мощным, легко настраива- в настройке администратору, так как держит минимально необходимое ко-
емым, оптимизированным дистрибу- только таким образом он может скон- личество пакетов, так как часто быва-
тивом, созданным для потребностей фигурировать мощный и стабильный ет в других дистрибутивах, в которых
сетевого администратора. Предназна- в работе сервер. Учитывая большое для удовлетворения всех зависимос-
чен для применения на серверах и ра- количество специальных утилит, дис- тей на жесткий диск сваливается боль-

66
безопасность
шое количество ненужных приложений ISO-образ является LiveCD, поэ- ваны разделы (/mnt). После этого пред-
и библиотек. Также нет и приложений тому записываем на диск, вставляем лагается установить базовый набор ( ),
с дублирующей функциональностью, в привод и перезагружаемся. После в который входит около 65 пакетов. Сре-
т.е. различных вариантов почтовых, ftp появления приглашения boot: необхо- ди них auticonf 2.59, automake 1.9.5, bash
и прочих серверов. димо нажать на Enter и затем зарегис- 3.0, coreutils 5.2.1, devfsd 1.3.25, gcc 3.43,
При таком подходе Linux Netwosix трироваться как root с пустым паролем. glibs 2.3.5, make 3.80, patch, lilo 22.7,
в некотором смысле напоминает Краткую инструкцию по установке и на- ncurces, perl 5.8.6, vim, sendmail 8.13.4,
Trustix Secure Linux. Этот базирую- стройке Linux Netwosix (на английском) wget, net-tools.
щийся на RedHat дистрибутив отлича- можно получить, зарегистрировавшись Выберите обязательно утилиты для
ется от своего прародителя тщатель- во второй консоли (<ALT> + <F2>) и вве- работы с портами ports. Кроме базово-
ным подбором пакетов и отсутствием дя «netwosix_howto». Следующий этап – го набора, на жесткий диск копируются
лишнего софта, за счет чего считает- создание дисковых разделов. Для этих исходные тексты ядра 2.6.14.5. По окон-
ся более безопасным. Но если Trustix целей используются fdisk или cfdisk чании процесса выводится отчет об ус-
является типичным представителем (GNU/parted нет). Разработчики реко- тановленных пакетах. На этом установ-
rpm-based дистрибутивов, то Netwosix мендуют создать четыре раздела: ка считается законченной. Но в тра-
принадлежит с source-based-дистрибу-  swap (2хОЗУ); дициях всех дистрибутивов, собира-
тивам, в котором утилиты собираются  root (350-500 Мб); емых из исходных текстов ядра, в та-
из исходных текстов.  /var (не менее 100 Мб); кой системе нет. Поэтому следующим
Базовый набор помещается на диск  /usr (> 1 Гб). шагом идет компиляция ядра. Перехо-
размером 242 Мб, и вся установка за- дим в chroot-окружение.
нимает не более 10 минут даже дале- Хотя в зависимости от назначения
ко не на самых мощных системах. Ес- сервера можно в этот список добавить # mount -t devfs devfs /mnt/dev
# mount -t proc proc /mnt/proc
тественно, весь набор софта не мог /home, /usr/local или /opt. Каждому раз- # chroot /mnt /bin/bash
поместиться в такой маленький объ- делу должен быть присвоен свой тип,
ем, для его пополнения и обновления т.е. swap 82, остальным 83. После со- И собираем ядро:
используется система портов Nepote здания разделов форматируем их под
(NEtwosix POrting Tool Environment), по- нужную файловую систему. В HOWTO # cd /usr/src/linux-2.6.14.5
# make menuconfig
добная xBSD-системам. приведены команды для создания ext2 # make all
Во второй ветке дистрибутив полу- (mke2fs /dev/hdaN), ext3 (mke2fs -J) # make modules_install
# cp arch/i386/boot/bzImage /vmlinuz
чил новую систему установки, взятую и ReiserFS (mkreiserfs), но в дистрибу- # cp System.map /
с CRUX Linux (те, кто работал с CRUX, тиве имеются утилиты для создания
вообще найдут очень много общего), JFS (mkfs.jfs) и XFS (mkfs.xfs). Поэто- Чтобы не терять времени, пока
обновлены многие программы, дист- му можно выбрать любую из этих фай- компилируется ядро, переходим во
рибутив стал более стабильным и бе- ловых систем. Создаем и активируем вторую консоль и приступаем к на-
зопасным. своп-раздел. стройке системы. Первым делом ус-
В комплект 2.0-rc1 входит послед- танавливаем пароль суперпользова-
нее стабильное ядро на момент рели- # mkswap /dev/hda1 теля командой passwd. Далее при по-
# swapon /dev/hda1
за 2.6.14.5. Работает Linux Netwosix на мощи редактора vi редактируем фай-
компьютерах с x86-процессорами, под- Интересно, что в документации на- лы /etc/fstab, /etc/rc.conf, /etc/rc.d/net,
держка других архитектур планирует- звания разделов приводятся пооче- /etc/hosts и /etc/resolv.conf. Хочется от-
ся в будущем. редно то в традиционном обозначении метить, что разработчики не стали ус-
В течение первого года с офи- вроде /dev/hda1, то в стиле devfs -/dev/ ложнять жизнь, а заготовили шабло-
циального сайта проекта дистрибу- discs/disc0/part1. В отличие от CRUX, ны. Например:
тив был скачан более 25 тысяч раз. в котором не поддерживается обрат-
Диск с ним был приложен к итальянс- ная совместимость, здесь будут рабо- # /dev/#REISERFS_ROOT# / ↵
reiserfs defaults 0 0
кому журналу Linux Magazine. Его ис- тать оба варианта, но такое расхожде-
пользует финское министерство об- ние может запутать новичка (хотя вряд Причем такие строки существуют
разования, и некоторые университе- ли новичок будет его ставить). И монти- для всех поддерживаемых ядром фай-
ты в Италии. руем все созданные разделы в /mnt/. ловых систем. Остается только раском-
ментировать нужную строку и вместо
Установка Linux Netwosix # mount /dev/hda2 /mnt # корневой #REISERFS_ROOT# вписать нужный
# mkdir /mnt/usr
Скачиваем iso-образ с официального # mkdir /mnt/var раздел. Теперь /etc/rc.conf, в котором
сайта проекта или любого из зеркал. # mount /dev/hda3 /mnt/usr необходимо указать клавиатурную рас-
# mount /dev/hda3 /mnt/var
После этого проверяем правильность кладку (можно посмотреть имеющиеся
полученного файла при помощи конт- После этого приступаем к собствен- в /usr/share/kbd/keymaps/i386/qwerty), уста-
рольной суммы. но установке, введя setup. В первом эк- новить часовой пояс (/usr/share/zoneinfo/),
ране выбираем установку или обновле- шрифт (/usr/share/kbd/consolefonts/)
# md5sum netwosix2.0-rc1.x86.iso ние Linux Netwosix, затем необходимо и указать автоматически запускающи-
e88a3a4c2d1f388cb9352442c89038f7 ввести каталог, в который смонтиро- еся при старте системы сервисы.

№2, февраль 2006 67


безопасность
Редактируем, записываем, нажав <Esc> и набрав «:wq».
И устанавливаем:

#lilo -v

Все, система полностью готова к работе, самое время


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

Система пакетов и портов Linux Netwosix


В документации проекта сказано все о системе портов
Рисунок 1. Выбор пакетов базовой установки
nepote, но абсолютно ни слова не говорится о системе па-
кетов, хотя они в системе используются, и умолчать об этом
У меня он получился такой. прав не имеем. Очевидно, пакеты планируется использо-
вать только при установке и обновлении системы, глав-
FONT=Cyr_a8x16 ную же роль при построении сервера будет играть все-та-
KEYMAP=ru4
TIMEZONE=Europe/Kiev ки nepote. Система пакетов не только полностью заимство-
HOSTNAME=host.com вана, но и даже совместима с Crux.
SERVICES=(net crond)
Устанавливаются пакаджи при помощи команды pkgadd
Обратите внимание на строку SERVICES, в которой с указанием полного имени пакета, при этом будет произве-
просто перечислены сервисы, которые необходимо авто- дена проверка зависимостей и после чего предварительно
матически запустить при старте системы, все имеющиеся скачанный с сайта пакет установится. Если пакет уже уста-
на данный момент можно найти в /etc/rc.d/. После установ- новлен, но требуется обновить его, то набрав:
ки в этом каталоге будет четыре файла, crond, inetd, net,
sendmail. Сетевые интерфейсы настраиваются в /etc/rc.d/net, # pkgadd -u package_name
который также снабжен шаблонами. Настроим один интер-
фейс жестко с IP-адресом 192.168.0.1, второму адрес на- избежим сообщения о том, что пакет уже установлен.
значает провайдер. Для того чтобы предотвратить модификацию некоторых
важных для системы каталогов и файлов они указывают-
#!/bin/sh ся в /etc/pkgadd.conf. Например:
#
# /etc/rc.d/net: start/stop network
# Linux Netwosix # UPGRADE ^.*$ YES
# <http://www.netwosix.org> UPGRADE ^etc/.*$ NO
UPGRADE ^var/log/.*$ NO
if [ "$1" = "start" ]; then UPGRADE ^etc/mail/cf/.*$ YES
/sbin/ifconfig lo 127.0.0.1
/sbin/ifconfig eth0 192.168.0.1 netmask 255.255.255.0
/sbin/dhcpcd eth1 Если снять комментарий с первой строки, будут моди-
/sbin/route add default gw 192.168.1.100
elif [ "$1" = "stop" ]; then фицированы все файлы. Более поздняя запись имеет боль-
/sbin/ifconfig eth1 down ший приоритет при запросе. Во второй и третьей строках
/sbin/ifconfig eth0 down
/sbin/ifconfig lo down запрещается модификация каталога и подкаталогов /etc
killall -q /sbin/dhcpcd и /var/log, но в последней строке разрешено изменение фай-
else лов в /etc/mail/cf/. Удалить пакет также просто:
echo "usage: $0 start|stop"

# pkgrm bash
# End of file
и его как не бывало, зависимости не проверяются, но, оче-
И последним этапом конфигурируем и устанавливаем видно, считается, что человек, дающий такую команду, зна-
загрузчик LILO. Файл /etc/lilo.conf также имеет шаблон, и нам ет, что делает, и понимает последствия. С другой стороны,
остается только указать правильно корневой раздел. удалять в дистрибутиве практически нечего, все и так ус-
тановлено по минимуму, поэтому особой необходимости
# в этом, очевидно, и нет. Узнать информацию об установ-
# /etc/lilo.conf
# Linux Netwosix ленных пакаджах можно, набрав:
# <http://www.netwosix.org>
#
lba32 # pkginfo -i
install=text
boot=/dev/hdа
image=/vmlinuz или если нужен определенный, то:
label=LinuxNetwosix
root=/dev/hdа2
read-only # pkginfo -l bash
append="quiet"

# End of file Используя pkgmk, можно собрать пакаджи самому.

68
безопасность
Но основным средством, предназначенным для уста- Как видите, ничего сложного здесь нет, это набор обыч-
новки приложений, является nepote. На момент написа- но задаваемых команд.
ния статьи в системе портов было около 190 приложений Для его установки необходимо зайти в каталог порта
в 9 категориях. Понятие порта здесь немного отличает- и ввести sh nepote.
ся от таковых в FreeBSD. Под портом понимается скрипт,
обеспечивающий загрузку и компиляцию конкретной про- # cd /usr/ports/net/apaсhe
# sh nepote
граммы, а также набор программ, упрощающих обновле-
ние дерева, поиск нужных портов. Перед началом работы После чего файл будет скачан, распакован, скомпили-
рекомендуется обновить дерево портов. Пока это делает- рован и установлен. Если в процессе установки появят-
ся вручную, в будущем планируется операцию автоматизи- ся проблемы, связанные с неудовлетворенными зависи-
ровать, хотя при желании простенький скрипт можно напи- мостями, то в этом случае следует использовать коман-
сать и самому. ду «sh nepote-dep».
Для установки флагов компилирования используется
# cd / файл /etc/pkgmk.conf.
# wget –c ftp://rm.mirror.garr.it/mirrors/netwosix/ ↵
nepote/ports.tgz
# tar xzf ports.tgz export CFLAGS="-O2 -march=i686 -pipe"
# rm ports.tgz export CXXFLAGS="-O2 -march=i686 -pipe"

Либо при помощи утилиты nepote: Хотя в дереве портов и программе установки 2.0
есть, на мой взгляд, несколько недоработок. Например,
# nepote на CD-диске /netwosix/additional присутствует раздел, содер-
*******************> Linux Netwosix - NEPOTE <******************* жащий исходные тексты 116 приложений, в том числе и вхо-
Select an option and press enter, please. дящих в дерево портов. Но ни во время установки системы,
*****************************************************************
(1) to update your NETWOSIX portage tree (from the net) ни при использовании nepote эти архивы никак не задейс-
(2) to update from the net your Linux Netwosix box твуются, лежа мертвым грузом. Хотя в принципе их можно
(0) to quit
*****************************************************************
использовать. Не скачивать же их повторно.
Nepote is developed by Vincenzo Ciaglia <ciaglia@netwosix.org> Например, смонтировать диск и скопировать архив
***************************************************************** веб-сервера Apaсhe httpd-2.2.0.tar.bz2 в каталог /usr/ports/
net/apaсhe. Но так просто установить его не получится,
Нажав клавишу <1>, можно произвести обновление все- т.к. скрипт nepote будет искать файл с расширением tar.gz.
го дерева портов как с официального сайта, так и указав Поэтому просто переделываем под свои нужды скрипт, ис-
любой другой сервер. Если выбрать <2>, то будет загружен правив следующие строки.
и установлен файл обновлений системы updateLN.tgz. Кон-
фигурационные файлы nepote находятся в /etc/nepote, за- # wget $source
tar xjf $package_name-$version.tar.bz2
глянув внутрь, можно легко подстроить систему под себя. rm $package_name-$version.tar.bz2
Для поиска порта используется команда nepote-find. Пос-
ле запуска будет предложено ввести название порта, ес- Теперь Apache установится без проблем. Далее на-
ли такой пакет будет обнаружен, то будет выведен полный звание подкаталога graphics, по моему мнению, несколь-
путь к нему. Например, файл порта веб-сервера Apaсhe ко не соответствует ожидаемым приложениям, т.к. зайдя
выглядит так. внутрь, готов увидеть что-то вроде GIMP. Сейчас внутри –
8 портов: axyftp, gftp, xchat, sylpheed, dxpc, pavuk, ethereal
# LINUX NETWOSIX - NEPOTE PACKAGE и crank.
# Description: Apache Server
# URL: http://www.apache.org
# Date created: Dec, 25 2005 Вывод
# Maintainer: Apache.org
Есть два типа администраторов. Первый не будет (или не лю-
# Please, change only this 4 lines, to build your package бит) заниматься «бесполезной» работой и использует то,
# from a portage tree
package_name=httpd что установлено вместе с дистрибутивом и доступно че-
version=2.2.0 рез обновления. Второй пересоберет критически важные
release=2
source=http://mirrors.publicshout.org/apache/httpd/ ↵ для него пакеты со своими настройками и уберет, по его
httpd-2.2.0.tar.gz мнению, лишнее. Netwosix предназначен именно для вто-
# STOP!
рых, которым этот дистрибутив будет несомненно интере-
# Downloading the package ... сен. При наличии подготовленных конфигурационных фай-
wget $source
лов ядра и серверов, систему под любые требования можно
# building the packages using NETWOSIX portage tree собрать в течение часа. И хотя предрелиз 2.0 явно сыроват,
tar xzf $package_name-$version.tar.gz но это не мешает его использовать полноценно.
cd $package_name-$version
./configure
make Ссылки:
make install 1. Сайт проекта Linux Netwosix – http://www.netwosix.org.
cd /usr/ports/net/apache
rm $package_name-$version.tar.gz 2. Vincenzo Ciaglia, «Linux Netwosix One Year Later» – http://www.
rm -r $package_name-$version linuxsecurity.com/content/view/117808/49.

№2, февраль 2006 69


сети

Подключаемся к Интернету
через спутник

Антон Борисов
Спутниковый Интернет развивается семимильными шагами. Тарифы на передачу данных
посредством спутниковых провайдеров одни из самых низких. Однако, если вы не являетесь
подписчиком услуг спутникового провайдера, данные вы сможете получить в любом случае.

И
стория развития DVB-S-стан- побольше – это может обычная теле- ние. Вроде бы всё ясно и понятно. А те-
дарта уходит корнями в пос- фонная линия к интернет-провайдеру, перь представьте, что обратного кана-
ледние несколько десятилетий либо GPRS-соединение к оператору ла нет. Будь у нас обычное модемное
прошлого века. Запуск искусствен- сотовой связи, либо оптоволоконная соединение или ethernet-подключение,
ных спутников Земли всегда был ин- линия до национального оператора. то разумно было бы расстроиться. Од-
тересной задачей для человечества, В случае, когда вы являетесь провай- нако это не повод впадать в депрессию
как в технологическом плане – вывод дером услуг интернет-связи и львиный в случае со спутниковым каналом. По-
на орбиту, так получаемыми возмож- трафик получаете со спутника, то на- чему? Сейчас разберемся.
ностями – наблюдение за атмосфер- верняка у вас на руках есть соотно- Когда пользователь отправляет за-
ными осадками, радионавигация и ра- шение исходящего и входящего тра- прос по обратному каналу спутниково-
диосвязь. Применений для орбиталь- фика. Чем больше делается запросов му оператору (предположим, что это
ных спутников много. По мере разви- по обратному каналу, тем больше дан- PlanetSky [2] или SatGate [3]), то пос-
тия технологий и, в какой-то степени, ных приходит по прямому каналу. По- ледний забирает файл в сети по ука-
их удешевления появилась возмож- этому в ситуации, когда требуется пе- занному url и со спутника отправляет
ность использовать спутниковые тех- редавать много данных по обратному уже для всей аудитории территории
нологии для передачи интернет-трафи- каналу, следует рассмотреть возмож- покрытия. А уж кому предназначается
ка конечному пользователю. Для при- ность подключения к скоростному ка- данный файл, решает конечный поль-
ема последнему следует обзавестись налу (см. рис. 1). Например, оптоволо- зователь, т.е. из всего DVB-потока вы-
спутниковой антенной и обратным ка- конная линия. бираются те данные, которые совпада-
налом связи. Трасса N1 – обратный канал свя- ют с MAC-адресом DVB-карты пользо-
Запрос на конкретный документ зи. На схеме не показан региональ- вателя и с PID, который был выдан при
в сети происходит по обратному ка- ный ISP, но его наличие предполага- его подключении к спутниковому опе-
налу связи, а на тарелку принимается ется. По трассе N2 проходит трафик ратору. Таким образом, фильтрация
трафик со спутника. С прямым каналом уже от/к самому спутниковому провай- данных в DVB-потоке на совести ко-
вроде бы всё ясно – скорость приема деру. Далее он передается на спутник нечного пользователя.
достаточно высокая, порядка 4 Мбит/с и в качестве СВЧ-излучения по трассе Теперь попробуем вывернуть дан-
(а если быть точным, то ограничение N3 (прямому каналу) приходит к вам ную ситуацию наизнанку. Предполо-
здесь накладывает DVB-S-карта с её в дом. жим, что пользователь фильтровать
максимальной символьной скоростью, Итак, по обратному каналу проис- ничего не хочет. Тогда он сможет по-
которую она может обработать). С об- ходит запрос на ресурс в сети, по пря- лучить весь трафик на конкретном
ратным каналом количество вариантов мому каналу происходит его получе- транспондере (частоте) данного спут-

70
сети
ника. Луч достаточно широкий, поэтому получить сигнал
теоретически сможет любой, было б необходимое обору-
дование. Здорово, не правда ли? Эта процедура и называ-
ется – спутниковая «рыбалка».
Дабы не быть голословным, рассмотрим данный вид
«спорта» на реальном примере. Считаем, что тарелка,
DVB-S-карта установлены, драйвера настроены и вы в кур-
се, что такое PlanetSky (или хотя бы слышали).
Я переориентирую тарелку на направление 40E (вос-
точная долгота) – это спутник Express AM 1 [5].
Рисунок 1. Асинхронное подключение к спутниковому
Проверяю уровень сигнала, который приходит на та- Интернету [4]
релку.

$ szap -c /etc/channels.conf "PlanetSky"


reading channels from file '/etc/channels.conf'
zapping to 64 'PlanetSky':
sat 0, frequency = 11051 MHz H, symbolrate 29650000, vpid = 0x020c, apid = 0x020c
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
status 03 | signal b893 | snr cfde | ber 0000039b | unc 00000000 |
status 1f | signal b81d | snr d4c7 | ber 00000008 | unc 00000000 | FE_HAS_LOCK
status 1f | signal b8a7 | snr d4ac | ber 00000000 | unc 00000000 | FE_HAS_LOCK
status 1f | signal b6dc | snr ccd2 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
status 1f | signal b83d | snr d566 | ber 00000000 | unc 00000000 | FE_HAS_LOCK

В среднем значение 72%. Вполне терпимо.


Сам файл channels.conf выглядит так:

# 40E
FirstChannel:3675:r:0:33483:650:512:1:1
Rossiya:3675:r:0:33483:660:513:1:2
RMayak:3675:r:0:33483:0:651:1:11
PlanetSky:11051:h:0:29650:524:524:524

Если для приема видео/аудио каналов AID, VID и важ-


ны (последние 3 цифры в параметрах транспондера),
то для приема потока они не важны. Почти.
Чтобы посмотреть, какие PID (Packet IDentifier) передают-
ся на данной частоте, стоит запустить утилиту dvbtraffic.

$ dvbtraffic
0200 2543 p/s 466 kb/s 3825 kbit
0202 3926 p/s 720 kb/s 5904 kbit Рисунок 2. Указываем интерфейс для приема
0203 724 p/s 132 kb/s 1089 kbit
0204 1252 p/s 229 kb/s 1883 kbit DVB Network Interface Manager
0205 792 p/s 145 kb/s 1191 kbit Version 1.1.0-TVF (Build Втр Сен 06 23:45:44 2005)
0207 200 p/s 36 kb/s 301 kbit Copyright (C) 2003, TV Files S.p.A
0208 342 p/s 62 kb/s 514 kbit
0209 723 p/s 132 kb/s 1088 kbit Device: /dev/dvb/adapter0/net0
020a 791 p/s 145 kb/s 1190 kbit Status: device dvb0_1 for pid 512 created successfully.
020b 235 p/s 43 kb/s 354 kbit
020c 844 p/s 154 kb/s 1269 kbit # ifconfig dvb0_0 192.168.0.1
020d 225 p/s 41 kb/s 339 kbit
020e 1232 p/s 226 kb/s 1853 kbit
Для приема данных воспользуемся пакетом owns –
020f 137 p/s 25 kb/s 206 kbit
0210 194 p/s 35 kb/s 292 kbit One Way Network Sniffer [6]. Программа довольно простая.
0211 849 p/s 155 kb/s 1277 kbit Требуется указать интерфейс, на котором будем вылавли-
0212 373 p/s 68 kb/s 561 kbit
022b 575 p/s 105 kb/s 865 kbit вать поток данных (см. рис. 2).
0309 359 p/s 65 kb/s 540 kbit Затем по вкусу выставить размер файлов. Я выставил
0378 140 p/s 25 kb/s 211 kbit в качестве фильтра все графические и текстовые файлы
03e7 140 p/s 25 kb/s 211 kbit
2000 16606 p/s 3048 kb/s 24976 kbit больше 100 Кб (см. рис. 3).
Нажимаем на кнопку «Start Capture» и можно ждать.
Получается, что потоки с номерами PID (обращаю ваше Главное, чтобы место на жестком диске не кончилось.
внимание на их шестнадцатиричную нотацию) в самом на- Пока файлы постепенно начинают приходить, давай-
чале списка и в конце наиболее оживленные. Однако пос- те обратим внимание на моральную сторону данного заня-
ледний поток – это суммарный общий поток. Начнем с про- тия. С одной стороны, получается, что вы получаете дан-
стого – опробуем самый первый. ные, предназначенные вовсе не вам. С другой стороны,
Для этого настроим dvb-интерфейс на этот PID. вы просто отфильтровываете один большой поток – уместно
сравнение с радиоэфиром. Если у вас есть радиоприемник
# dvbnet -p 0x200 FM-диапазона и вы умеете крутить на нем кнопки, насколь-

№2, февраль 2006 71


сети

Рисунок 3. Выставляем фильтр на размер файлов Рисунок 4. Анализируем статистику приема

ко неэтично слушать радиостанции FM-диапазона? Пожа- тило кванта времени на переключение контекста задачи
луй, этично. А если вы слышите разговор по беспроводно- и, в итоге, «вылетел» маленький кусочек большого файла.
му телефону в этом диапазоне? Мне кажется, что это будет В случае, если это графический или видео-файл, то поч-
уже забота тех, кто болтает, чтобы их не слышали. В приме- ти ничего страшного. Однако если попался архив, то увы
нении к спутниковому Интернету это означает, что сохран- и ах (см. рис. 5).
ность информации зависит от профессиональности прини- Другой негативный момент – обилие информации.
мающей стороны. Что это означает? «Рыбалка», по-види- Требуются большие запасы свежего места на винчесте-
мому, ваш промежуточный шаг к использованию асиммет- ре, т.е. это мегабайты и гигабайты свободного места, ко-
ричного спутникового Интернета. Технология поворота ан- торое через несколько часов перестанет быть свобод-
тенны и получение трафика без ошибок отработана. Сле- ным. А отсюда вытекает проблема сортировки. В частнос-
дующее действие – подключение к спутниковому провай- ти, у OWNS не слишком развита система фильтрации фай-
деру. А вот в этот момент вы уже знаете, что данные может лов. Что делать?
получить и кто-то еще. Нужно безопасное соединение? Ис- Обратимся к альтернативной программе – skynet [6].
пользуйте VPN-шлюзы! Тогда ваш трафик придет в зашиф- Нет, это не сеть из Terminator 2 – это программа отечест-
рованном виде. Не желаете использовать полную шифра- венной инженерной мысли. Как в лучших детективах, из-
цию – упаковывайте архивы с паролями. В противном слу- вестен о нем только позывной – s.o.v.a.
чае получайте данные в открытом виде, например, филь- Интерфейс у skynet довольно оригинальный, если
мы, звуковые файлы, книги и т. п. Аудитория спутниковых не сказать спартанский (см. рис. 6).
рыбаков будет вам благодарна. Но похоже мы с вами рас- Однако, как было упомянуто на одном форуме, имен-
фантазировались и забежали в будущее – пока же мы сами но горизонтальные полоски, характеризующие процесс
работаем обычными «рыболовами-спортсменами». получения файлов, а также их разбивку по типам файлов
Так, что там с полученными данными (см. рис. 4)? (jpeg, avi, djvu и т. д.), являются визитной карточкой skynet.
За 737 секунд входящий трафик оказался немалень- Ну и, конечно же, алгоритм сборки файлов по фрагментам.
ким – более 300 Мб. Весьма и весьма неплохо. Более И стоит отметить особо – самый минимальный размер сре-
2/3 трафика пришлось на TCP-соединения, 1/3 – на дру- ди программ подобного класса – всего 150 Кб!
гие протоколы. Чтобы сказать более точно, что это за про- Обращаю внимание, что ключевым файлом к успешной
токолы, следует скопировать весь поток в файл и проана- рыбалке является содержимое файла skynet.ini, в котором
лизировать его. задается частота транспондера, символьная скорость и PID
В спутниковой рыбалке есть свои негативные сторо- потоков. В моем варианте самые важные параметры вы-
ны. Самый жирный минус – невозможность докачать файл ставлены следующим образом.
или получить заново некоторые его части, если произош-
ла ошибка. Вы же не будете звонить эфемерному, неиз- tuner=11051000,H,29650000,A
pids=512
вестному пользователю с просьбой забрать тот или иной
файл заново. Ошибка может возникнуть и на вашей сторо- incomplete=/mnt/BigMuzzy/SkyTest/incomplete
temp=/mnt/BigMuzzy/SkyTest/temp
не. Например, из-за высокой нагрузки процессора не хва- ok=/mnt/BigMuzzy/SkyTest/ok

72
сети
Как можно догадаться, последние три параметра –
это путь к неполным файлам (у них произошел тайм-аут,
после которого они перемещаются из временного ката-
лога temp в каталог incomplete), собственно к файлам, на-
ходящимся в процессе сборки, и файлы, которые получе-
ны без ошибок.
Кроме указанного skynet.ini существуют файлы regex.txt
и rules.txt – названия их говорят сами за себя. В первом хра-
нятся шаблоны, с помощью которых происходит идентифи-
кация типа файла, а во втором – правила, по которым сле-
дует ловить файлы.
Предположим, что вам интересны будут только zip-фай-
лы, предназначенные для определенного MAC-адреса. Тог-
да использование указанной ниже конструкции в rules.txt
позволит подхватывать данные архивы.

m 0011223344 +zip

Предположим, что все zip-файлы не представляют ин-


тереса, а нужны только файлы больше 500 Кб и с опреде-
ленного IP-адреса.

s 1.2.3.4 +zip[500k-]
Рисунок 5. Помехи при приеме вызывают потерю данных

Можно указывать не только, с какого именно IP-адреса,


но и для какого адресата предназначен файл.

d 1.2.3.4 +zip[-500k]

В этом случае, все zip-файлы, предназначенные


для адресата с IP-адресом «1.2.3.4» и размером меньше,
чем 500 Кб, попадут к вам на обработку.
Чтобы во время работы добавлять/удалять нужные
классы файлов, следует нажать <Ctrl+G>. На дополни-
тельной цифровой панели справа с помощью серых кла-
виш «+»/«-» указать нужный диапазон размеров фай-
лов. И не забыть нажать <Ctrl+S>. Тогда созданный файл
regex.dat в директории с xskynet позволит в дальнейшем
не запускать X-Server и xskynet, а непосредственно из кон-
соли заниматься столь интересным делом, как спутнико-
вая рыбалка.
Бывает так, что файл приходит с «дырками» в архиве.
Рисунок 6. Фильтрация данных в программе skynet
Что делать? Исправлять по мере возможности. Если фай-
лы упакованы zip, то попытаться его исправить: то нелишним будет ознакомиться с информацией волго-
градского ресурса [8].
$ zip -FF ZipArchive.zip На этом пока всё. Желаю творческих успехов в сор-
$ unzip ZipArchive.zip
тировке полученных гигабайтов. Надеюсь, вы по-настоя-
Естественно, что целым распакованный файл не будет, щему оцените тот калейдоскоп, который буквально пада-
но во всяком случае вам удастся его распаковать. Напри- ет на нас сверху.
мер, полученный мною архив с документом в pdf-форма-
те оказался физически битым, но ошибки пришлись толь- Ссылки:
ко на фотографии внутри документа, так что текст, можно 1. http://hostinfo.ru/htmltree/communication/satellite.
сказать, не пострадал. 2. http://www.planetsky.com.
Для упакованных файлов архиватором rar используйте 3. http://www.satgate.com.
следующую комбинацию: 4. http://www.space-service.ru/technology.html.
5. http://www.lyngsat.com/eam1.html.
$ rar x -kb RarArchive.rar 6. http://owns.sourceforge.net.
7. http://skynet.mcdir.ru/files/skynet090.7z.
Если вас заинтересовали тонкости настройки skynet, 8. http://www.volgosat.ru/skynet.html.

№2, февраль 2006 73


сети

Какова цена анонимности


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

Виктор Пелевин «Затворник и шестипалый»

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

74
сети

В
современном обществе пробле- Важен и аспект
ма балансирования между го- с ох р а н е н и я а н о -
сударственной безопасностью нимности и конфи-
и индивидуальной свободой (катего- денциальности при
риями столь же необходимыми, сколь условии воздейс-
и противоречивыми) стоит как никог- твия методов соци-
да остро. При всей сложности данно- альной инженерии
го вопроса один факт неопровержим – или какого -либо
те государства, в которых права и сво- давления на опера-
боды гражданина становятся размен- тора сервера: ведь
ной монетой, как правило, не достига- прокси- или VPN-
ют требуемой безопасности. С ростом сервера представ-
роли Интернета как средства массо- ляют собой единую
вой информации, в котором еще спо- точку отказа (еди-
собна существовать свобода слова, ная точка выхода Рисунок 1. Схематическое изображение образования сеанса
связи через сеть Tor
именно он становится основным по- в большую Сеть).
лем конфликта. Это значит, что пора Многоуровневое же шифрование жительности сеансов связи узлов сети.
раскрыть тему анонимности и приват- и распределённый характер аноним- Для успешного проведения атаки пе-
ности в Сети. ных сетей, устраняя единую точку от- ресечения также необходима возмож-
Мы будем рассматривать ПО двух каза и единый вектор атак, позволя- ность анализа трафика в глобальных
типов: ПО анонимных сетей общего ют сделать перехват трафика или да- масштабах.
назначения и клиентов анонимных ре- же взлом части узлов сети вовсе не Классифицировано большее чис-
мэйлеров электронной почты. Специ- фатальным для общего блага собы- ло атак, но остальные выходят за рам-
фика систем информационной безо- тием. ки статьи.
пасности заключается в том, что раз- Теоретические работы, которыми В общем случае безопасность ано-
работчики вынуждены идти на ком- руководствуются разработчики ано- нимной сети прямо пропорциональ-
промисс между степенью защиты нимных сетей, предлагают термины, на количеству узлов-участников сети.
и лёгкостью использования системы, которые автору следует определить Улучшение равномерности статисти-
её «прозрачностью» для конечного моделью угрозы анонимной сети. ческого распределения узлов также
пользователя. Итак, против анонимных сетей и се- является действенной мерой против
Речь пойдёт о средствах достиже- тей ремэйлеров эффективны атаки пе- многих типов атак. Учитывая люби-
ния надёжной анонимности (militant ресечения. Анонимные сети и ранние тельский характер анонимных сетей,
grade anonymity), работающих поверх разработки в области криптографи- главным катализатором их развития
Интернета – открытой сети, к которой ческих ремэйлеров также подверже- являются степень доверия и сотруд-
нет доверия, что на поверку оказыва- ны тайминг-атакам (http://www.i2p.net/ ничество пользователей. Доверие же
ется одной из сложнейших задач ин- how_threatmodel). к системам такого класса возможно
формационной безопасности. Неуди- Тайминг-атака заключается в поис- лишь при условии открытости исход-
вительно, что за анонимность пользо- ке и анализе повторяющихся паттер- ного кода, основополагающих протоко-
ватель расплачивается увеличенной нов в частоте отправки сообщений. Ме- лов и проектной документации. Одна-
латентностью сети, снижением скоро- тоды защиты от тайминг-атаки вклю- ко исследования показывают, что да-
сти, нередко – гигабайтными объёма- чают внесение переменных задержек же в ПО движения Open Source могут
ми трафика. в характер информационного обмена, в течение долгого времени оставать-
перемешивание и объединение сооб- ся незамеченными оставленные про-
Модель угрозы щений, пересылку их блоками фикси- фессионалами потайные ходы, в свя-
Сразу следует развеять некоторые рованного размера. зи с чем чрезвычайно высока роль
заблуждения касательно более рас- Атакой «brute force» называют исследований экспертов-аналитиков
пространённых методов достижения действия могущественной третьей и криптологов.
«анонимности» и конфиденциальнос- стороны, «наблюдателя», способного
ти в сети, а именно VPN и анонимных прослушивать интернет-трафик в гло- Ранние анонимные сети.
прокси-серверов. бальных масштабах, направленные на Freedom и Freenet
VPN-т уннели по определению установление соответствия между со- Первой успешной анонимной сетью
не являются средством анонимизации общением (пакетом) и его отправите- был коммерческий сервис Freedom,
(я отнюдь не имею в виду конфиденци- лем. Некто со столь широкими возмож- существовавший в период с 1998
альность) соединения, уязвимости же ностями может наводнить сеть огром- до 2001 года. Компанией ZKS были
наиболее распространенного их стан- ным объемом данных и изучить кор- установлены выделенные серверы,
дарта (PPTP MPPE) уже стали притчей реляцию входного и выходного тра- с которыми клиенты «общались» пос-
во языцех. Анонимный прокси-сер- фика сети. редством криптографического прото-
вер и вовсе не имеет ничего общего Наконец атака пересечения бази- кола. Узел, на который приходили па-
со стойкой криптографией. руется на данных о моментах и продол- кеты от пользователя Freedom, не мог

№2, февраль 2006 75


сети
идентифицировать настоящего отпра- ляется полностью децентрализован- что искать пути разворачивания собс-
вителя. Сама сеть функционировала ной – существуют 3 центральных сер- твенного сервера каталогов на основе
на уровне протокола IP. вера каталогов, хранящие подписан- разработанного в рамках Tor протоко-
Перед тем как перейти к «главным ный актуальный список узлов сети Tor ла, используя для этого разного рода
героям» статьи, следует сказать пару с их реальными адресами и отпечатка- туннели, или же разрабатывать иную
слов о проекте Freenet [1] – хронологи- ми открытых ключей (генерируемыми систему обнаружения узлов и серви-
чески также один из первых, но разви- заново каждые 7 дней), т.е. регистра- сов в сети Tor.
вающийся по сей день. Он реализовал ция серверов производится центра- С каждым пересылаемым паке-
анонимное и конфиденциальное рас- лизованно. Что касается территори- том (включая саму команду откры-
пределённое хранилище статических альной распределённости, то два из тия туннеля) ассоциируется симмет-
данных, не связанное с конкретным трёх серверов каталогов размещены ричный ключ шифрования и иденти-
узлом сети. В сети Freenet информа- в США, а число энтузиастских серве- фикатор следующего узла туннеля.
ция хранится в зашифрованном ви- ров в США также выше, чем в любой Эти данные зашифровываются после-
де, при этом ни операторы узлов сети, другой стране. довательно открытыми ключами всех
ни её создатели не знают содержимо- Сеть Tor называют вторым поколе- выбранных серверов, начиная с пос-
го хранимых ими данных (т.н. систе- нием сетей, построенных по принципу леднего, – образованные структуры
ма с нулевым уровнем знаний), физи- «onion routing». Суть его в следующем. и называются «луковицами» (onions).
ческого местоположения данных и ни- Клиентская сторона формирует це- Для межсерверных коммуникаций ис-
как не могут влиять на процесс их пе- почку из трех произвольно выбранных пользован TLS.
ресылки. узлов сети Tor. Среди них есть вход- Образованные цепочки каждые 10
Freenet позволяет анонимную, ной (entry node) по отношению к кли- минут перестраиваются: таким обра-
без цензуры, публикацию различных енту узел и выходной (exit node), сеть зом через каждый узел сети проходит
материалов, владелец файла и его Tor при этом функционирует как шлюз ограниченный объём данных от каждо-
пользователь в равной степени ано- между клиентом и внешней сетью (Ин- го клиента. Для каждой вновь образо-
нимны. Конфиденциальность данных тернетом). Каждый Tor-сервер «знает» ванной цепочки серверов генерирует-
обеспечивается строгой криптогра- о предшествующем ему и последую- ся новый сеансовый ключ, а для про-
фией. Файл можно извлечь, сообщив щем, но не более того, а замыкающие тиводействия атакам анализа трафика
в запросе к системе ассоциированный узлы не знают, кто находится на дру- блок данных имеет, как уже было ска-
с ним ключ. гой стороне канала и кто иницииро- зано, постоянный размер – 512 байт.
Роль такого ключа выполняет хэш- вал соединение. Отсутствие логичес- «Луковица» может содержать сведе-
код файла или DSA-ключ, что образу- кой связи между отправителем и со- ния, необходимые для установки об-
ет также механизм проверки целос- общением и гарантирует надёжную ратного канала – двусторонних соеди-
тности. анонимность. нений. Функционируя на уровне TCP
В разработке находится версия 0.7 На рис. 1 схематически показан (и пересылая лишь легитимные по-
проекта Freenet, – новой масштабиру- процесс анонимной пересылки сооб- токи TCP), Tor предоставляет надеж-
емой сети, реализующей механизм щения. В пути, проложенном по Ин- ный транспорт для прикладных про-
«onion routing» [2], а значит – потенци- тернету через произвольно выбран- грамм посредством протокола SOCKS
ально сопоставимой по функциональ- ные серверы сети Tor красной лини- (см. статью «Универсальный прокси-
ности с сетью Tor, к описанию которой ей изображены зашифрованные ка- сервер», Системный администратор,
мы и переходим. Там же будет изложе- налы, зелёной – незашифрованные. №2, 2005 г.).
на суть механизма onion routing. Узлы сети Tor выделяются зелёным Пользователь Tor может вручную
цветом. формировать цепочки входящих и ис-
Анонимная сеть Tor Несложно заметить, что такая схе- ходящих серверов сети Tor (параметры
Tor [3] – наиболее известная и развитая ма делает бесполезным перехват тра- EntryNodes и ExitNodes) и выбирать по-
среди существующих анонимных се- фика на стороне ISP (ваш провайдер литику участия в сети (exit policy): сер-
тей (несмотря на раннюю стадию раз- «видит» лишь поток шифртекста, со- вер сети Tor может функционировать
работки, в которой пребывает проект), стоящий из пакетов постоянной дли- как посредник (middleman node), толь-
создаётся в США с середины 2002 года ны). ко передающий трафик другому узлу,
в рамках проекта Free Haven [4]. Дейс- Использование Tor как шлюза на пу- так и выходной узел (exit node), трафик
твия же в области разработки протоко- ти к большой Сети позволяет защитить из которого в открытом виде выходит
лов «onion routing» велись с середины права пользователей из стран, в кото- в большую Сеть.
1996 года. Корни проекта ведут к MIT, рых регулируется доступ во Всемир- Следовательно, пользователям
а список спонсоров включает DARPA, ную Сеть (таких, как Китай). По край- сети для сокрытия трафика от выход-
Office of Naval Research и Electronic ней мере на некоторое время: ведь ного узла следует помнить о целесо-
Frontier Foundation. Распределённая такой стране достаточно заблокиро- образности применения SSL или по-
сеть серверов сети Tor насчитывает вать доступ даже не ко всем серве- добных ему протоколов на приклад-
около 350 постоянно подключённых уз- рам сети Tor, а лишь к трём централь- ном уровне.
лов, а количество активных пользова- ным серверам каталогов. А в таком Оператор сервера может блокиро-
телей превышает 100000. Сеть не яв- случае энтузиастам останется разве вать определенные IP-адреса или пор-

76
сети
ся каждые 20 минут в режиме серве-
Правовое регулирование вой практике автору неизвестно. ра и 1 час – в режиме клиента.
использования стойкой Далее, требование эксплуатации ис- Естественно, администратор может
криптографии ключительно сертифицированных ФАПСИ управлять этими параметрами, а так-
Разумеется, использование ПО, о кото- средств криптографической защиты ин- же назначать группы серверов (кли-
ром идёт речь в статье, не регулируется формации действительно лишь по отно- ент избегает одновременного исполь-
законодательством специальным обра- шению к информации, относящейся к го- зования узлов одной группы; это име-
зом. Тем не менее, правовые аспекты ис- сударственной тайне, или конфиденци- ет смысл, если вы оперируете более
пользования средств криптографической альной информации государственных ор- чем одним узлом Tor).
защиты информации (СКЗИ, будь то кли- ганов власти. Сертификация служит га- Можно даже настроить ПО на ра-
ентское ПО анонимных сетей или ремэй- рантией качества алгоритма и свидетель- боту в режиме сервера каталогов, что
леров или иное ПО, с которым вы работа- ством того, что он разработан под строгим позволяет развернуть самодостаточ-
ете), заслуживают отдельного рассмотре- государственным контролем. Следователь- ную сеть Tor в вашей локальной сети.
ния. Правовая модель, принятая в РФ, сле- но, использование иностранных криптоал- Что касается сетевой безопаснос-
дует знакомому вам принципу: «разреше- горитмов и эксплуатация импортирован- ти, то здесь, кроме атак с участием
но всё, что явно не запрещено». Основная ных СКЗИ, в том числе включённых в дис- «глобального наблюдателя» и тайминг-
правовая база – законы «Об информации, трибутивы ОС с открытым исходным ко- атак (которым по определению не мо-
информатизации и защите информации» дом, в любых частных и коммерческих це- гут полностью противостоять аноним-
и «О коммерческой тайне», Приказ ФСБ лях, легальны. ные сети с низкой латентностью), уг-
«Об утверждении положения о разработ- Что касается лицензирования СКЗИ, розу представляет практическая воз-
ке, производстве, реализации и эксплуа- п. 4 Указа Президента N334 от 03.04.95 за- можность корреляции анонимного
тации шифровальных средств защиты ин- прещает деятельность юридических и фи- и неанонимного трафика, так как все
формации», Указ Президента РФ «О мерах зических лиц по эксплуатации СКЗИ без ли- TCP-соединения мультиплексируются
по соблюдению законности в области раз- цензии, выданной ФАПСИ при Президенте в один канал.
работки производства, реализации и экс- РФ. В соответствии с п. 1 ст. 1 Федерального В качестве контрмеры здесь целе-
плуатации шифровальных средств, а так- закона «О лицензировании отдельных ви- сообразно поддерживать несколько
же предоставления услуг в области шиф- дов деятельности» от 08.08.2001, «закон ре- параллельно работающих экземпля-
рования информации». гулирует отношения, возникающие между ров процесса Tor. Если же пользова-
Итак, в законодательстве РФ нет ог- федеральными органами исполнительной тель поддерживает собственный сер-
раничений на длину ключа используемых власти, органами исполнительной власти вер сети Tor, то отличить порождае-
криптоалгоритмов, а депонирование крип- субъектов Российской Федерации, юриди- мый им трафик от трафика, проходя-
тографических ключей частных лиц и не- ческими лицами и индивидуальными пред- щего через его сервер от других кли-
государственных организаций в России принимателями в связи с осуществлением ентов, и вовсе невозможно. Компроме-
не проводится, хотя в случае санкции су- лицензирования отдельных видов деятель- тация же одного или нескольких сер-
да подследственный обязан выдать ключ ности в соответствии с перечнем, предус- веров цепи к потере анонимности или
или пароль для проведения расследования. мотренным пунктом 1 статьи 17 настоящего конфиденциальности не ведёт. Так, ес-
В противном случае подследственному ин- Федерального закона». Но перечень из п. 1 ли скомпрометировано c из n узлов
криминируется сокрытие вещественных ст. 17 не включает положения о лицензиро- сети Tor, то вероятность успеха ком-
доказательств и препятствование ведению вании деятельности, связанной с эксплуа- прометации случайного сеанса свя-
следствия. Впрочем, доказать факт пред- тацией СКЗИ, следовательно, эксплуата- зи равна c 2 /n2.
намеренного сокрытия информации, ины- ция лицензированию не подлежит. Подво-
ми словами знания ключа – задача вовсе дя итоги вышесказанного, следует сказать, Практические вопросы
не тривиальная, а, учитывая возможность что регулирующее сферу компьютерной бе- При настройке прикладных программ
физического разделения ключа между не- зопасности законодательство в РФ весьма не-HTTP-приложения, не обладающие
сколькими лицами, в т.ч. нерезидентами, либерально, впрочем некоторые противо- поддержкой SOCKS, должны быть под-
порой неразрешимая. Так или иначе, о по- речивые моменты вполне могут сбить с тол- вергнуты процедуре соксификации.
добных прецедентах в российской право- ку иного IT-специалиста. Гораздо проще этот процесс происхо-
дит в UNIX-подобных ОС, в Windows
ты, предотвращая, например, исполь- Tor, и с этой точки зрения гибкость на- же он сопряжён с большими трудно-
зование filesharing-сервисов и рассыл- стройки политик – одно из наиболее стями.
ку спама. мощных свойств сети Tor, повышаю- Для этого в дистрибутив Tor вклю-
Так, принятая по умолчанию поли- щих её привлекательность для энтузи- чены команды tsocks и torify, исполь-
тика предусматривает блокирование астов, желающих поддерживать свой зующие механизм LD_ PRELOAD;
всех исходящих соединений на порт сервер сети Tor. можно использовать и Socat [5] – ре-
TCP 25 для борьбы со спамом, а также Информация о статусе серверов лэй для двусторонней передачи дан-
портов наиболее популярных клиен- сети Tor обновляется каждые 15 ми- ных между независимыми каналами
тов пиринговых сетей. Поскольку вы- нут при работе в режиме сервера и 30 – (в роли которых могут выступать фай-
ходной узел «видит» открытый текст, в режиме клиента, а подписанный спи- лы, сокеты, специальные устройства,
он становится слабым звеном в цепи сок всех серверов сети Tor загружает- SOCKS-клиенты и т. д.).

№2, февраль 2006 77


сети
Для Linux существует эксперимен-
Сети криптографических цах или же запросить у самого сервера, от- тальное решение для соксификации
ремэйлеров правив на его почтовый адрес письмо с те- всех сетевых соединений на уровне
Движение шифрпанков, возникшее в уни- мой remailer-key. ядра – Kernel Socks Bouncer [6].
верситете Беркли, ставило своей целью со- Проект Mixmaster [19] представил Для прозрачного соксифициро-
хранить преимущества сети Интернет как не только средства защиты от анализа вания программой пользовательско-
средства самовыражения и среды для су- трафика, но и функциональность сервера го режима Linux можно использовать
ществования свободы слова и остро реаги- псевдонимов, или ним-сервера. Как средс- TranSocks [7] и Transproxy [8] в связке
ровало на любые попытки контроля и слеж- тво защиты от анализа трафика были реа- с iptables. Впрочем, Transproxy подде-
ки. Один из разработанных ими механиз- лизованы: дополнение/разбивка сообще- рживает и FreeBSD с ipfw, но прокси-
мов анонимности, сети анонимных ремэй- ния на блоки постоянного размера в 28 Кб; рует эта программа лишь HTTP-тра-
леров, гарантирует анонимность элект- внесение случайной задержки во время от- фик.
ронной переписки. Их принято классифи- правки каждого блока и «перемешивание» На платформе Windows дейс -
цировать по нескольким поколениям: так, блоков сервером-ремэйлером. Двусторон- т в е н н ы п р о г р а м м ы Fr e e C a p [ 9 ]
сети нулевого поколения, type 0, состояли няя же пересылка анонимных сообщений и SocksCap [10]. Данные для настрой-
из одного промежуточного сервера, вы- реализована благодаря связыванию псев- ки многих популярных приложений
полняющего задачу сродни анонимному донима отправителя с сообщением. Факти- можно найти на странице http://wiki.
прокси-серверу – удаление из сообщений чески «обратная связь» была предусмотре- noreply.org/noreply/TheOnionRouter/
электронной почты идентифицирующих от- на еще в ремэйлере нулевого поколения – TorifyHOWTO.
правителя заголовков. Слабость ремэйле- знаменитом anon.penet.fi Йохана Хельсин- Для анонимизации HTTP-трафи-
ров нулевого поколения была обусловле- гьюса. Сервер anon.penet.fi ассоциировал ка в связке с Tor обычно применяют
на незащищенностью цепи «отправитель- с адресом отправителя сообщения адрес локальный прокси-сервер Privoxy [11].
ремэйлер» и их централизованностью. Од- вида anXXXX@anon.penet.fi. Если получа- Privoxy производит подмену/удаление
нако уже в следующем, первом поколении тель отправлял ответное сообщение на та- сведений конфиденциального харак-
ремэйлеров (type 1) был представлен пол- кой адрес, сервер пересылал ответ обрат- тера из отправляемых клиентскими
ностью переработанный протокол аноним- но на почтовый адрес автора первого со- приложениями HTTP(S)-заголовков,
ной переписки. Широко известная сегодня общения. В 1996 году Хельсингьюс закрыл а также удаление баннеров.
система Mixmaster относится к ремэйлерам свой сервис, через год после того, как под Однако даже с его применени-
второго поколения (type 2), разрабатывае- угрозой судебного преследования был вы- ем Java-апплет, JavaScript-сцена-
мым с 1995 года. Очень амбициозен и про- нужден выдать адреса отправителей не- рий, cookie, сохранённая браузером
ект Mixminion, называемый сетью третье- которых анонимных писем. Чтобы не до- история, Flash или ActiveX-содержи-
го поколения (type 3). Современные сети пустить подобных инцидентов, ремэйле- мое (а также «нечестный» плагин ва-
криптографических ремэйлеров включа- ры со времен Mixmaster хранят ассоции- шего браузера: плагины Realplayer
ют десятки энтузиастских серверов в раз- рованные с псевдонимом адрес и откры- и mplayer, к примеру, игнорируют ука-
ных частях мира. тый ключ, предварительно зашифровав занные в браузере настройки прокси)
Принцип действия ремэйлеров лучше их открытыми ключами серверов-ремэй- могут легко скомпрометировать вашу
показать на примере первого поколения леров. На сайте проекта QuickSilver [20] анонимность.
ремэйлеров шифрпанков. Отправитель со- можно загрузить реализацию протокола Посетив страницу [12] можно уви-
общения волен выбрать несколько проме- Mixmaster для платформы Windows, отлич- деть, какой объём информации с готов-
жуточных серверов-ремэйлеров. Он шиф- ную от референсной. ностью сообщает ваш браузер.
рует письмо открытыми PGP-ключами вы- Хотя проект Mixminion [21] – сеть ано- Стоит обратить внимание на та-
бранных серверов, начиная с последнего. нимных ремэйлеров третьего поколения – кие расширения браузера Firefox,
Каждый промежуточный сервер расшиф- все еще находится в ранней стадии разра- как JSBlocker, NoScript, User Agent,
ровывает сообщение своим закрытым клю- ботки, представленные им идеи более чем Web Developer, Flashblock, Add N Edit
чом и удаляет все служебные заголовки, интересны. Сторона-отправитель разбива- Cookies, Cookie Button.
присоединяя новые. Таким образом скры- ет сообщение на пакеты постоянной длины Для удобного переключения между
вается логическая связь между отправи- и выбирает для каждого пакета последова- прокси-серверами в Firefox существуют
телем и получателем сообщения, а сооб- тельность серверов, через которую пакет SwitchProxy, ProxyButton и SwitchProxy
щение обладает свойством анонимности. будет передаваться, при этом каждый па- Tool. Наконец, разумным может быть
Компрометация небольшого числа проме- кет содержит информацию о следующем запрет с помощью firewall всех исхо-
жуточных серверов не меняет общей кар- сервере на своем пути. В рамках протоко- дящих соединений, кроме тех, что ис-
тины. Ремэйлеры первого поколения (в от- ла Mixminion разработана также технология ходят от ПО Tor.
личие от последующих) не требуют специ- Single-Use Reply Blocks (SURBS), обеспечи- Сложную проблему представля-
альных программ для формирования со- вающая анонимность получателя письма, ет и сокрытие DNS-активности узла.
общения, зато вам понадобятся открытые и технология взаимной анонимности от- Privoxy позволяет решить эту зада-
ключи выбранных промежуточных серве- правителя и получателя. Другие нововве- чу, однако ограничение состоит в том,
ров и их адреса. С адресами помогут мно- дения включают выделенные серверы ка- что лишь клиент SOCKS версии 4a мо-
гочисленные сайты статистики, ключи же талогов, ограничение срока жизни ключа, жет выполнить разрешение доменных
можно получить на специальных страни- применение TLS и другое. имен анонимно (посредством сети Tor),

78
сети
и то лишь при условии грамотного про-
граммирования. Echelon ляется частью комплекса Echelon. Внед-
Потому рекомендуется в настрой- Общим свойством любых анонимных се- ренная как средство контроля над СССР
ках, обладающих поддержкой SOCKS- тей или сетей криптографических ремэй- система Echelon сегодня стала не толь-
приложений явно указывать IP-ад- леров является уязвимость по отношению ко весомым аргументом в борьбе с меж-
реса вместо доменного имени. Для к слежке со стороны могущественного дународным терроризмом и наркоторгов-
разрешения доменных имен в IP-ад- «глобального наблюдателя». В данном кон- лей, но и орудием, способным утвердить
реса анонимным образом следу- тексте следует помнить о факте существо- превосходство стран-участников на поли-
ет использовать команду tor-resolve, вания автоматизированной системы конт- тической арене. Существуют факты, поз-
а в Windows – и анонимный DNS-сер- роля и слежения Echelon. Echelon был со- воляющие предположить о применении
вер TorDNS [13]. здан к 1971 году альянсом англоязычных Echelon в качестве орудия промышленно-
Работой в режиме клиента или сер- стран UKUSA, образованным в качестве го шпионажа или средства внутреннего на-
вера управляет параметр ClientOnly. агентства перехвата и разведки инфор- блюдения (domestic surveillance).
Для использования Tor в качестве мации (signal intelligence) специальными Во многих других странах разработа-
клиента в общем случае не требу- агентствами англоязычных стран во гла- ны собственные средства глобального кон-
ется ни малейших изменений в кон- ве с National Security Agency (NSA) США. троля и слежения, аналогичные Echelon.
фигурации по умолчанию, настрой- В альянс UKUSA входят и ведомства Ве- Так, в России функциональным аналогом
ка же Privoxy исчерпывается внесе- ликобритании, Канады, Австралии и Но- служит СОРМ (система оперативно-ра-
нием в файл конфигурации Privoxy вой Зеландии, а некоторые «третьи» стра- зыскных мероприятий), в странах Евросо-
(/etc/privoxy/config или /usr/local/etc/ ны имеют на своей территории оборудова- юза действует система RES, а в США по-
privoxy/config большинстве UNIX-по- ние комплекса Echelon. До сих пор отсутс- мимо Echelon одно время существовала
добных ОС) одной строки, задающей твует исчерпывающая информация о сис- и локальная система Carnivore. Как бы то
перенаправление HTTP-соединений теме Echelon, а правительство США офици- ни было, общая тенденция такова, что да-
в сеть Tor посредством SOCKS 4a: ально не признало её существования. Ис- же мощности Echelon недостаточно для
точником имеющихся сведений послужили анализа всего передаваемого в электри-
forward-socks4a / localhost:9050 несколько отчетов о Echelon и книга «Secret ческих и волновых каналах связи трафи-
Power: New Zealand’s Role in the International ка, а следовательно – подобные системы
Есть у Privoxy и веб-интерфейс: он Spy Network», увенчавшая 12-летние иссле- вынуждены действовать выборочно и це-
будет доступен по адресу: http://config. дования Nicky Hager. ленаправлено, в соответствии с набора-
privoxy.org. Известно, что система Echelon наделе- ми фильтров.
Настройка сервера Tor включает на функциями перехвата трафика радио- Проблема приватности и анонимнос-
выбор nickname и порта (ORPort). Ин- эфира и линий спутниковой, радиорелей- ти в Сети отнюдь не умаляется европей-
формацию о себе (включая слепки сге- ной и сотовой связи, телефонных линий скими органами власти: так, Европарла-
нерированных ключей и свой статус) и компьютерных сетей. Мощность комп- мент в отчете о Echelon 2001 года реко-
сервер автоматически передаст сер- лекса Echelon, по имеющимся сведениям, мендовал гражданам стран ЕС применять
верам каталогов. Последующие шаги достаточна для перехвата миллиардов со- средства криптографии для защиты пра-
обычно включают ограничение про- общений ежечасно. Работу системы обес- ва на приватность, а в 2004 ЕС выделил
пускной способности (что рекоменду- печивают передовые разработки в области 11 миллионов евро на развитие проекта
ется в случае обладания асимметрич- систем анализа трафика и обработки дан- SECOQC (Secure Communication based on
ным подключением), установку лими- ных, в частности – систем искусственного Quantum Cryptography) – системы кванто-
та трафика (иначе сервер сети Tor мо- интеллекта. Наиболее производительная вой криптографии, теоретически непод-
жет потреблять сотни гигабайт тра- в мире система NAS, использующая твер- верженной воздействию Echelon или по-
фика ежемесячно) и выбор политики дотельные диски (solid-state disk, SSD), яв- добных ей систем.
участия в сети.
Есть и шлюз p2p-сети Entropy – ано- svnd) и запуска использования изоли-
«Скрытые» ресурсы нимного распределённого хранилища рованных окружений (chroot, jail).
сети Tor данных, схожего с Freenet. Пользовате- ПО Tor доступно в портах pkgsrc,
Хотя Tor используется преимуществен- ли имеют возможность самостоятель- FreeBSD и OpenBSD, включено в не-
но для анонимизации на стороне кли- но открывать скрытые сервисы. которые дистрибутивы Linux (Debian,
ента, существуют и анонимные серве- Уместно привести несколько реко- Red Hat, портежи Gentoo), доступно
ра, предоставляющие внутри сети Tor мендаций для операторов Tor-узлов: для MacOS X и Windows. Tor и Privoxy
«скрытые» ресурсы, отличаемые с до- веб-сервера класса Apache подобно также входят в дистрибутив Anonym.
менным суффиксом .onion. При этом сложному браузеру могут быть кана- OS, основанного на OpenBSD 3.8
гарантируется взаимная анонимность лом утечки конфиденциальных дан- LiveCD [14].
клиента и сервера. ных (за thttpd, к примеру, «уследить» Для пользователей Windows со-
Так устроены системы аноним- куда проще), а доверие к вашему уз- здан готовый для записи на флэш-
ных блогов, электронной почты, IRC, лу будет гораздо выше в случае пол- диск дистрибутив Torpark [15], состо-
Jabber, USENET, форумы/BBS, Wiki, ного шифрования дискового раздела ящий из уже настроенной связки Tor
SSH, серверы PGP-ключей и пр. (dm-crypt, luks, loop-aes, gbde, geli, cgd, и Mozilla Firefox. Большое количество

№2, февраль 2006 79


сети
дополнительной информации находит- жит записей для многих сайтов се- Так, каждый узел туннеля «знает»,
ся на страницах [16]. ти – исправить положение можно, до- частью какого туннеля он является.
бавив строку: К примеру, если для передачи сооб-
Анонимная сеть I2P щения используется туннель из 2 уз-
Сеть I2P [17] возникла в 2003 году http://orion.i2p/hosts.txt лов, и Боб получает сообщение от Чар-
как форк проекта Freenode. При обме- ли, которое он должен переслать Али-
не данными по I2P выполняется их мно- в раздел управления вашими под- се, очевидно, что Алиса является по-
гоуровневое шифрование (сквозное, писками (http://localhost:7657/susidns/ лучателем сообщения.
туннельное, шифрование транспорт- subscriptions.jsp). К выходу первого публичного рели-
ного уровня) и криптографическая ау- Пользователь сети может легко со- за разработчики планируют устранить
тентификация конечных узлов. здать собственный сайт, так называе- известные слабые места. Хоть прямое
Узлы сети I2P представлены иден- мый eepsite, доступный только в сети сравнение I2P и Tor и не совсем коррек-
тификаторами, не имеющими логи- I2P через eepProxy. Впрочем, послед- тно, нельзя не отметить более распре-
ческой связи с их реальными IP-адре- нее не совсем верно – «входной» прок- делённый и самодостаточный харак-
сами. Клиентское программное обес- си-сервер [18] позволяет получить до- тер первой, преимуществом является
печение функционирует как I2P-мар- ступ к ресурсам сети I2P из любого уз- и применение в I2P туннелей односто-
шрутизатор, записывающий в табли- ла Интернета, просто дописав tin0.de роннего типа.
цу данные узлов для передачи входя- к URL ресурса сети I2P. Принятые разработчиками реше-
щего и исходящего трафика. Переда- После запуска I2P на порту 4444 ния в сумме обеспечивают лучшее со-
ваемый пакет проходит временные од- ожидает соединения прокси- сер - крытие сетевой активности. Тем не ме-
носторонние цепочки: маршрутизато- вер. Privoxy можно сконфигурировать нее до выхода новых релизов, больше-
ры исходящего трафика, построенные на доступ к ресурсам Tor и I2P одновре- го распространения сети I2P и публи-
на узле-отправителе, и маршрутизато- менно, добавив в файл настроек сразу кации результатов её научных иссле-
ры входящего трафика, построенные после строки Tor следующее: дований (без которых сложно пред-
узлом-адресатом. Такие туннели пе- ставить проект на стыке анонимности
рестраиваются каждые 10 минут. Уп- forward .i2p localhost:4444 и криптографической науки) следует
равляя длиной цепочки маршрутиза- признавать Tor изученным средством
торов в клиентском ПО, пользователь Все запросы к ресурсам, доменное анонимности.
выбирает для себя нужное соотноше- имя которых заканчивается на .i2p, бу- ПО сети I2P относится к катего-
ние между степенью анонимности, ла- дут идти через сеть I2P, а остальной рии Open Source; реализации прото-
тентностью и пропускной способнос- трафик – через Tor. кола I2P и SDK выполнены на языке
тью сети. Передаваемое же сообще- Использование Tor здесь обосно- Java, а следовательно – кроссплат-
ние проходит такой путь, который от- вано, поскольку сайты I2P могут со- форменны.
вечает моделям угрозы отправителя держать рисунки, cgi-скрипты, фрей- Управление ПО сети I2P произво-
и получателя. мы, размещенные на серверах боль- дится через веб-интерфейс и настоль-
В то время как Tor служит промежу- шой Сети, с которыми охотно уста- ко просто, что не нуждается в допол-
точным звеном для анонимного досту- новит соединение клиент I2P. А мощ- нительных разъяснениях с моей сто-
па клиента в большую Сеть I2P пресле- ность и надежность выходных узлов роны.
дует цель анонимного доступа к внут- I2P гораздо ниже, чем у Tor: повторим- Существует и простой API с фун-
ренним ресурсам I2P в первую очередь. ся, этот проект ставит перед собой не- кциональностью Simple Anonymous
Внутренние ресурсы сети I2P, иденти- сколько иные цели. Messaging (SAM) для языка С, в разра-
фицируемые доменным суффиксом Будучи основанной на UDP (вернее ботке находятся API для Perl и Python,
i2p, предоставляют сервисы аноним- его модификации Secure Semireliable что обещает проекту долгую жизнь.
ных блогов («Syndie»), анонимного до- UDP, SSU, имеющей функции ау-
ступа в сеть IRC («ircProxy»), аноним- тентификации, управления потоком JAP: Java Anon Proxy
ной электронной почты («Susimail»), и пр.), IP2 предлагает мост TCP/I2P, Проект JAP, он же AN.ON [22], пресле-
передачи файлов, групп новостей, т.н. I2PTunnel, обеспечивающий пере- дует гораздо менее глобальные цели,
шлюзы сетей Freenet и Mnet. Сущест- дачу TCP-пакетов по сети I2P, а следо- чем два предыдущих: JAP предназна-
вуют и выходные узлы для анонимного вательно – и средство создания защи- чен для анонимизации только HTTP-
веб-сёрфинга посредством анонимно- щенных туннелей к любым TCP-служ- трафика. Хотя само ПО поддержива-
го HTTP-прокси, «eepProxy». бам, в доступе к которым может воз- ет и SOCKS, разработчики аргумен-
Список сайтов сети I2P доступен никнуть необходимость. тируют поддержку своими сервера-
по адресу orion.i2p, для поиска в се- На момент написания статьи ко- ми лишь HTTP с высоким риском зло-
ти I2P можно использовать search.i2p личество серверов сети оценивается употреблений. Пересылка трафика
или eepsites.i2p. цифрой порядка 300, и для достиже- производится в зашифрованном ви-
Сразу после запуска ПО интегриро- ния более высокого уровня безопас- де через фиксированный каскад микс-
ванная адресная книга (средство раз- ности сеть должна обрести большее серверов: пользователь не имеет воз-
решения имен в сети I2P, простой тек- количество пользователей. можности составить произвольную це-
стовый файл) вашего узла не содер- Существуют и другие проблемы. почку серверов. Преимущество дан-

80
сети
ного подхода в том, что так проще до- ция JAP не безупречна, а Tor и I2P яв- 3. http://tor.eff.org – анонимная сеть Tor,
стичь той «критической массы» поль- ляются гораздо более привлекатель- официальный сайт.
зователей, которая гарантирует вы- ными средствами обеспечения на- 4. http://www.freehaven.net – родительский
сокую степень анонимности, а так- дежной анонимности и конфиденци- по отношению к Tor проект, в наличии
же более высокой скорости серфинга альности. архив научных исследований.
(и она действительно выше, чем у пол- 5. http://www.dest-unreach.org/socat – до-
ностью распределенных сетей). Кроме Заключение машняя страница проекта socat.
того, поскольку пользователь не слу- Безусловно, мы не открыли вам лёгко- 6. http://ksb.sourceforge.net – Kernel Socks
жит в данном случае конечным звеном го и универсального пути достижения Bouncer, соксификация Linux-ядра.
цепи, то он защищен от посягательств надёжной анонимности, но «швейцар- 7. ht t p : / / t r a n s o c ks . s o u rc e fo r g e.n e t –
со стороны лиц, желающих завладеть ских ножей» в данной области попрос- TranSocks, прозрачный соксификатор
данными (ведь он не служит промежу- ту не существует: безопасность и про- пользовательского режима Linux.
точным звеном при передаче трафика стота вообще слабо совместимые по- 8. ht tp: // transprox y.sourceforge.net –
от других узлов; впрочем, exit policies нятия. Я не ставил своей целью пред- Transproxy, прозрачный HTTP-прокси.
сети Tor предоставляют более гибкое ложить вам готовое решение: в посто- 9. ht tp://w w w.freecap.ru – домашняя
решение данной проблемы). Компро- янно меняющемся мире информацион- страница Freecap, соксификатора
метация анонимности клиента невоз- ной безопасности (а тем более в срав- для Windows.
можна без перехвата всего входящего нительно новой и экспериментальной 10. h t t p : / / w w w . s o c k s . p e r m e o . c o m –
и исходящего трафика всех узлов кас- области анонимности) это было бы SocksCap, ещё один соксификатор
када и их содействия с целью расшиф- преступлением. Успеха, по моему мне- для Windows.
ровывания пакетов. нию, можно достичь лишь путём гра- 11. http://www.privoxy.org – домашняя стра-
С помощью функции forwarding су- мотного и прагматичного комбиниро- ница анонимизирующего прокси-сер-
ществует возможность предоставлять вания существующих средств аноним- вера Privoxy.
анонимный доступ другим клиентам. ности и конфиденциальности, к кото- 12. http://gemal.dk/browserspy – информа-
С мая 2005 года JAP умеет использо- рым нет и не может быть абсолютно- ция, сообщаемая вашим браузером.
вать узлы сети Tor в качестве каска- го доверия, таким образом, чтобы об- 13. http://sandos.ath.cx/~badger/tordns.html –
да для анонимизации HTTP-трафика. разованная система соответствовала TorDNS, анонимный DNS-сервер для
Это происходит автоматически в том ценности защищаемых данных и сте- Windows.
случае, если в настройках браузера пени ущерба в случае нарушения ано- 14. http://theory.kaos.to/projects.html – до-
выбран SOCKS-, а не HTTP-прокси. нимности. машняя страница Anonym.OS.
JAP гарантирует шифрование трафика Так, разумным подходом выглядит 15. ht tp: // w w w.freehaven.net /~arrakis /
от клиента до каскада JAP-серверов, сочетание нескольких средств дости- torpark.html – Torpark, дистрибутив
но не выполняет дополнение пакетов жения анонимности и/или конфиден- Tor + Firefox для Windows.
до постоянного размера, чего заведо- циальности в сети: анонимных се- 16. h t t p : / / w i k i . n o r e p l y . o r g / n o r e p l y /
мо недостаточно для противостояния тей, прокси, туннелей OpenVPN, SSH TheOnionRouter – Wiki проекта Tor.
атакам, основанным на анализе тра- и SLIRP [23]. Даже в области аноним- 17. http://www.i2p.net – официальный сайт
фика. Полная конфиденциальность пе- ной переписки следует изучить воз- анонимной сети I2P.
редаваемых данных достигается лишь можность комбинирования аноним- 18. http://inproxy.tino.i2p.tin0.de – входной
в случае дополнительного шифрова- ной сети Tor и криптографических ре- прокси-сервер к сети I2P.
ния на верхних уровнях с помощью та- мэйлеров, имеющих точку входа внут- 19. ht tp : / / mixmaster.sourc eforge.net –
ких протоколов, как SSL. Со второй по- ри сети Tor (таких, как Pantha Rei [24] Mixmaster, анонимный ремэйлер вто-
ловины 2006 года в рамках JAP решено или Bananasplit [25]. рого поколения.
предоставлять платный премиум-сер- Тема анонимности в Сети побужда- 20. h t t p : / / w w w . q u i c k s i l v e r m a i l . n e t –
вис, так как проект лишился прежнего ет великое количество вопросов право- QuickSilver – альтернативная реа-
источника финансирования. вого, политического или этического ха- лизация Mixmaster для платформы
Реализация JAP выполнена на язы- рактера, предвосхитить которые хочет- Windows.
ке Java, ПО – свободно и кроссплат- ся словами Б. Франклина, произнесён- 21. http://www.mixminion.net – Mixminion –
форменно. Программа разработана ными им более 200 лет назад: «Те, кто анонимный ремэйлер третьего поко-
в Германии, каскад JAP-серверов рас- готовы пожертвовать своими фунда- ления.
положен там же. Известен случай ком- ментальными свободами ради времен- 22. http://anon.inf.tu-dresden.de /index _
прометации сети германским Federal ной безопасности, не заслуживают ни en.html – домашняя страница анони-
Bureau of Criminal Investigation, FBCI. безопасности, ни свободы». майзера JAP.
В реализацию JAP разработчиками 23. http://slirp.sourceforge.net – SLIRP, эму-
был встроен потайной ход (backdoor), Ссылки: ляция PPP или SLIP через терминаль-
а пользователям настоятельно реко- 1. http://freenetproject.org – официальный ную сессию.
мендовали провести обновление ПО. сайт проекта Freenet. 24. http://www.panta-rhei.eu.org – ним-сер-
Вскоре суд признал действия FBCI не- 2. http://www.onion-router.net – описание вер Panta Rhei.
легитимными, а потайной ход из кода концепции onion routing, архив публи- 25. http://www.bananasplit.info – приватный
JAP устранен. Так или иначе, репута- каций. Mixmaster-ремэйлер.

№2, февраль 2006 81


сети

Доставку гарантируем: качество


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

Б
удь то Windows Update с вашей  Параметры надежности – про- в довольно больших пределах. Когда-
же машины, или FlashGet с со- цент потерянных и искаженных то давно, во времена магнитных лент
седней, все равно приложени- пакетов. и бородатых инженеров, это всех ус-
ям надо будет «поделиться». Вот вам траивало, но сейчас требования при-
и «изюминка» совместного использо- Самый простой способ гарантиро- ложений к качеству обслуживания су-
вания интернет-канала – постоянные вать их выполнение – избыточность, щественно возросли и продолжают
скачки, рывки и задержки. Иными сло- то есть если сеть будет быстрее и на- увеличиваться. Разумеется, тенден-
вами, ваши данные не получают соот- дежнее «чем надо», проблем навер- ция не осталась незамеченной – ре-
ветствующего качества обслуживания няка не будет. Если же это невозмож- шений, соответствующих требовани-
(Quality of Service, QoS). И к несчастью, но, необходимо на всем пути паке- ям, хватает. Вот только работают они
это так же неизбежно, как налоги… тов, из конца в конец, обеспечить со- разными способами и с разной эф-
Задержки отдельных дейтаграмм ответствующее качество обслужива- фективностью.
на пути от отправителя к получате- ния «вручную».
лю являются принципиальной осо- Frame Relay, ATM и MPLS –
бенностью сетей с коммутацией па- Коммутация каналов – дорого, но сердито
кетов (таких, как сети TCP/IP), из ко- светлое прошлое QoS Все три технологии используют ме-
торых собственно и состоит Интернет. Строго говоря, гарантировать посто- тод коммутации виртуальных кана-
Но где есть спрос – там всегда есть янство характеристик качества обслу- лов для передачи данных и работа-
предложение, и на сегодняшний день живания некоего потока данных можно ют по принципу предварительного ре-
существует целый ряд технологий, поз- только в сетях с коммутацией каналов зервирования полосы пропускания.
воляющих свести к минимуму влияние (аналоговых или ISDN). В таких сетях Но при этом используя технику комму-
«врожденных» недостатков этого ме- выделенный канал обычно использу- тации пакетов, что делает их более эф-
тода передачи данных. О них и пойдет ется монопольно, а его параметры из- фективными и менее дорогостоящими
речь в этой статье. вестны заранее и неизменны на про- в сравнении с классическими сетями
тяжении всего сеанса связи. Но как коммутации каналов.
Качество обслуживания – ни странно, это же является и основ- Технология Frame Relay основыва-
какой же этот «серверный» ным недостатком такой техники пере- ется на передаче кадров, но возник-
олень?.. дачи данных. Невозможность перерас- ла как служба в сетях ISDN. За счет
Под «качественным обслуживанием» пределения неиспользуемых ресурсов предварительного резервирования
обычно понимают выполнение неких абонентов приводит к неэффективно- пропускной способности на всем пу-
требований, предъявляемых приложе- му использованию сети в целом и зна- ти следования дейтаграмм техноло-
нием к сети, для удовлетворительной чительно сказывается на ее стоимос- гия Frame Relay позволяет гарантиро-
его работы. Что это за требования, за- ти. Таким образом, метод коммутации вать основные показатели качества
висит от типа задач, решаемых прило- каналов хоть и позволяет удовлетво- обслуживания – среднюю скорость пе-
жением. Одним важна скорость, дру- рить требования к качеству обслужи- редачи данных при допустимых пуль-
гим – время доставки данных, треть- вания, но не имеет будущего в гетеро- сациях трафика, просто отбрасывая
им – и то, и другое. В общем случае, ос- генных сетях. пакеты, поступающие слишком быст-
новными критериями понятия «качест- Сети с коммутацией пакетов ли- ро. Правда, технология Frame Relay не
ва обслуживания» являются: шены этого недостатка, причем лише- очень подходит для передачи интерак-
 Параметры пропускной способ- ны настолько, что в принципе не дают тивных данных, поскольку не гаран-
ности – минимальная, средняя возможности что-либо гарантировать – тирует отсутствия задержек. Еще од-
и максимальная. качество обслуживания отдельных па- ним недостатком Frame Relay являет-
 Параметры задержек – их вели- кетов зависит от общей загруженнос- ся низкая пропускная способность –
чины и вариации. ти сети, которая может варьироваться всего 2 Мбит/с.

82
сети
ATM – технология асинхронного до- ки – FastEthernet и GigabitEthernet так- ит из трех битов IP Precedence и че-
ступа (Asynchronous Transfer Mode) бы- же не получили таких возможностей тырех битов, собственно указыва-
ла создана с учетом все возрастаю- поскольку разработчики сочли ус- ющих на тип сервиса (последние
щих потребностей приложений в про- ложнение этих технологий излишним два бита не используются и должны
пускной способности сети, требуе- ввиду больших скоростей передачи быть нулями). Восемь двоичных зна-
мом качестве обслуживания и недо- данных, им присущих. Стандарт IEEE чений IP Precedence (от 000 – обыч-
статков уже существующих техноло- 802.1Q, который был разработан от- ный трафик, до 111 – служебная ин-
гий. ATM подходит для передачи лю- носительно недавно и определяет ос- формация маршрутизаторов) озна-
бых видов трафика, обладает мощ- новные правила построения вирту- чают, что на границе сети при необ-
ными средствами обеспечения QoS, альных локальных сетей, расширя- ходимости (высокой загруженности
а диапазон поддерживаемых скоро- ет заголовок Ethernet-кадра на 4 бай- каналов, например) из всего потока
стей очень широк – от десятков мега- та (путем уменьшения размера поля данных дейтаграммы с меньшим зна-
бит до нескольких гигабит. Но универ- пользовательских данных), из кото- чением Precedence могут быть сбро-
сальность этой технологии ее и по- рых три бита отводятся под приоритет шены без повторных попыток достав-
губила, сделав ее слишком сложной, кадра (802.1p). Таким образом, появ- ки по назначению. А биты типа серви-
дорогостоящей и… неэффективной ляется возможность «поделить» тра- са – Low Delay, High Throughput, High
на практике. Владельцы уже сущест- фик на восемь классов, с последу- Reliability и Minimize Monetary Const, –
вующих сетей не спешили переходить ющей соответствующей обработкой указывают на необходимость отпра-
на новое дорогое оборудование. А тем (коммутаторы и мосты, не поддержи- вить пакет по каналу с наименьшей за-
временем появились методы обеспе- вающие 802.1p, должны «не замечать» держкой, наибольшей пропускной спо-
чения QoS в (уже популярных) сетях эти биты). собностью, надежностью и наимень-
TCP/IP и дешевый Gigabit Ethernet, спо- Ну а для настоящих любителей шей стоимостью (с финансовой точ-
собный удовлетворить даже очень се- «быстрой езды», да еще и по «бездо- ки зрения) соответственно.
рьезные требования к пропускной спо- рожью», сегодня существует Gigabit Использование поля TOS хотя
собности. Ethernet, работающий даже на кабе- и позволяет в некотором роде приори-
Самая новая из рассматривае- ле UTP пятой категории, что делает тезировать трафик, но не является до-
мых технологий – Multi-Protocol Label эту технологию необычайно недорогой статочно гибким. Например, если ад-
Switching (MPLS, RFC-3031) благода- и эффективной. Забавно – она облада- министратору надо повысить приори-
ря своей гибкости может использо- ет всеми недостатками ее предшест- тет каким-то двум видам трафика над
ваться для целого ряда задач. В ос- венников, но это совершенно не ска- остальными, то это в принципе воз-
нове ее лежит использование меток – зывается на темпах ее распростра- можно. Но указать при этом, что при се-
дополнительного заголовка, которым нения. Основные причины тому – ско- рьезной загруженности каналов мож-
снабжаются поступающие в сеть паке- рость и стоимость, которые покрыва- но одним из них пожертвовать в поль-
ты. Метка содержит всю необходимую ют и отсутствие средств обеспечения зу второго – уже нельзя. Кроме того, не
MPLS-маршрутизаторам информацию качества обслуживания, и другие не- стоит ожидать, что простая установка
для передачи пакетов, данные IP-за- достатки технологии, такие как невоз- его в нужное значение что-либо гаран-
головка для выбора пути дейтаграмм можность построения сетей с избыточ- тирует. Это связано с тем, что на сегод-
внутри сети не используются. Это поз- ными связями. няшний день поле TOS чаще игнориру-
воляет сократить накладные расходы ется, чем используется, а маршрутиза-
на анализ заголовков пакетов, сокра- Качество обслуживания торы имеют право его менять по свое-
щая таким образом задержки их про- в сетях TCP/IP – мечтать му усмотрению. Хотя в пределах ва-
движения и нагрузку на оборудова- не вредно шей сети вы вольны использовать по-
ние. Кроме того, использование тех- Стек протоколов TCP/IP до недав- ле TOS как считаете нужным.
ники виртуальных каналов позволя- него времени практически не имел
ет конструировать пути прохождения средств управления трафиком. Более IntServ и DiffServ –
пакета оптимальным образом (Traffic того, при разработке основных про- две стороны одной
Engineering) и предварительно зака- токолов стека главный упор делался медали
зывать требуемую пропускную способ- на максимально возможную утилиза- Чтобы удовлетворить все возрастаю-
ность. Сфера применения MPLS не ог- цию каналов, в результате чего даже щие требования к качеству обслужива-
раничивается задачами управления нескольким потокам одного приложе- ния данных в сетях TCP/IP, организаци-
трафиком, но имеет необычайно бога- ния приходится «бороться» между со- ей Internet Engineering Task Force (IETF),
тые возможности для их решения. бой за право отправить пакет, а уж были разработаны две модели пре-
о качестве обслуживания не может доставления QoS – IntServ и DiffServ.
Gigabit Ethernet идти и речи... Модель IntServ (RFC-1633, RFC-2212,
и стандарт 802.1Q/p – Поле Тип Сервиса (Type Of Service, RFC-2215) с помощью протокола сиг-
сила есть... и остальное TOS) IP-пакета и является меткой, поз- нализации RSVP (ReSerVation Protocol,
тоже воляющей указать желаемое качес- RFC-2205) позволяет «заказывать»
Классический Ethernet не имеет средств тво доставки пакета, но только в об- желаемую пропускную способность
управления трафиком. Его наследни- щих чертах. По RFC-1349, оно состо- на всем пути продвижения пакета,

№2, февраль 2006 83


сети
за счет чего и гарантирует качество кладной, транспортный, уровень меж- пакеты протоколов, не осуществляю-
доставки данных. Это похоже на при- сетевого взаимодействия и уровень щих контроль передачи данных (таких,
нцип работы Frame Relay, за тем ис- сетевых интерфейсов. как UDP) ни в коем случае нельзя, пос-
ключением, что речь идет не о вирту- В принципе, классифицировать кольку это приведет только к увеличе-
альном канале (ввиду его отсутствия), трафик для последующей обработки нию их потока (из-за повторной пере-
а о потоке данных между двумя при- можно на всех четырех уровнях стека, дачи), если приложение само следит
ложениями (однозначно идентифици- начиная с маркировки данных на осно- за их доставкой.
руемом IP-адресами источника/назна- ве MAC-адресов и вплоть до попыток Исходя из этого крайне не жела-
чения, портами и транспортным прото- доставки пользователям html-страниц тельно определять в один класс TCP-
колом). Разумеется, все оборудование, со словом «трафик» с наименьшей за- и UDP-потоки, ведь при «недостатке»
через которое пойдут данные, должно держкой. Но первый подход не очень скорости, TCP-протокол будет постоян-
поддерживать такую модель обслу- гибок, поскольку не позволяет «твор- но уменьшать интенсивность переда-
живания. IntServ хорошо справляется чески» подойти к разграничению тра- чи, а UDP – «подгребать» под себя ос-
со своими обязанностями (гаранти- фика, а второй – слишком требова- вободившиеся ресурсы, образовывая
руя пропускную способность), но слож- телен к системным ресурсам и не да- замкнутый круг.
ность реализации и цена поддержива- ет никаких гарантий по определению.
ющего RSVP-оборудования ограничи- Таким образом, самые популярные Средства узла
вают его применение крупными корпо- и эффективные методы классифика- для обеспечения QoS –
ративными сетями. ции трафика основываются на анализе для тех, кто на такси
Принципом работы DiffServ (RFC- адресов источника/назначения IP-па- в булочную не ездит
2474, RFC-2475) является распределе- кетов и TCP-, UDP-портов. То есть речь Все рассмотренные выше средства
ние трафика на классы, называемые идет о транспортном и уровне межсе- обеспечения качества обслуживания
Class of Service (CoS) и применение тевого взаимодействия. подразумевают использование единой
к этим классам неких параметров QoS. Очень важно при выборе политики технологии передачи данных на всем
Для этого пакеты маркируются по по- обслуживания данных учитывать при- пути следования пакета. Более того,
лю TOS-заголовка IP-пакета, а затем нципы работы транспортного протоко- вы обязаны либо быть владельцем се-
обрабатываются желаемым образом. ла, доставляющего эти данные. Напри- тей, по которым передаются ваши дан-
В технологии DiffServ поле TOS на- мер, протокол TCP постоянно следит ные, либо арендовать их – как мини-
зывается DS (Differentiated Services), за качеством передачи данных, и поте- мум на время их использования.
в котором первые 6 бит используются ря пакетов для него – сигнал к умень- А что же делать, если вы – все-
для задания до 64 (26) классов трафи- шению скорости их передачи. Таким го лишь администратор частной сети,
ка (и называются Differentiated Services образом, преднамеренно уничтожая пользователи которой, видимо, ощу-
Code Point, DSCP), а два последних по- слишком быстро поступающие TCP-па- щая жгучий информационный голод,
ка не используются. кеты, можно «заставить» отправите- так и ломятся в ваш и без того узкий
Одной из ключевых особеннос- ля снизить интенсивность их отправки. канал Интернет? Вася из бухгалтерии
тей DiffServ является то, что тра- Это довольно грубый метод управле- сутками напролет мультики качает, на-
фик маркируется в классы оборудо- ния скоростью потока – корректнее бы- чальник в трубку жалуется, что у него
ванием по всей сети, а маршрутиза- ло бы манипулировать значением поля «почта тормозит», а вам – так вообще
торам, осуществляющим обработку Window TCP-пакета, или, в крайнем слу- давно пора «мифриловые перчи» по-
трафика, достаточно лишь распреде- чае, преднамеренно задерживать кви- купать, но так «лагает», что играть не-
лить доступные ресурсы между ними, танции о получении (ACK). Но просто- возможно… Можно ли что-то сделать
что обеспечивает хорошую произво- та реализации и неприхотливость к сис- в этом случае?
дительность. темным ресурсам сделали такой метод В принципе, да, но насколько хоро-
управления трафиком довольно попу- шо это у вас получится, зависит от не-
Классификация данных – лярным. Например, принцип умышлен- скольких факторов. Самые важные
что, где, куда? ного уничтожения пакетов лежит в осно- из них – является ли ваш шлюз в Ин-
Эталонная модель OSI определяет ве всех разновидностей RED (Random тернет самым узким местом на всем
семь уровней взаимодействия систем Early Detection) – механизма предва- пути следования пакетов, какой имен-
в сетях с коммутацией пакетов, кото- рительного обнаружения перегрузок, но шлюз используется в вашей сети,
рым должны соответствовать уров- который в случае превышения задан- и насколько хорошо вы себе представ-
ни стеков коммутационных протоко- ной (но еще не критичной) скорости ляете, как он работает.
лов. Но поскольку многие протоколы поступления данных уничтожает паке- Если коротко – у каждого сетево-
(например, TCP/IP) были разработа- ты, случайным образом выбранные из го интерфейса вашего маршрутизато-
ны до появления модели OSI (нача- потока. Дальнейшим развитием этой ра есть очередь устройства (queue of
ло 80-х годов), они соответствуют ей идеи является задержка пакетов вмес- a device), в которую попадают все паке-
не полностью. то уничтожения, что позволяет избе- ты перед отправкой их непосредствен-
Стек протоколов TCP/IP, получив- жать их повторной передачи, но требу- но в «железяку». Это область памяти,
ший на сегодняшний день наибольшее ет больших накладных расходов. откуда драйвер устройства выбирает
распространение, имеет 4 уровня: при- А вот преднамеренно уничтожать пакеты по одному и обрабатывает.

84
сети
Размещением пакетов в очереди оритизации «на месте», конечно, не бу- или мощностей вашей сети и оборудо-
занимается так называемая «дисцип- дет. Самый простой способ предотвра- вания достаточно для обработки всех
лина обработки очереди». И по умол- тить это – использовать высокоско- поступающих данных, рано или поздно
чанию, это скорее всего разновидность ростные технологии локальных сетей это изменится. Не пренебрегайте воз-
FIFO (First In First Out, «первым при- (такие как FastEthernet) и не забыть можностью оптимизировать использо-
шел – первым ушел») – самый прос- про пунктик в договоре с ISP, о гаран- вание ваших каналов, и они отплатят
той способ обработки пакетов, досто- тированной полосе пропускания. вам сторицей.
инствами которого являются просто- Доступные вам средства управле- Но эффективно управлять трафи-
та и скорость, а недостатками – собс- ния трафиком зависят от используе- ком, не имея понятия об особенностях
твенно, отсутствие методов обеспече- мого оборудования. Смею предполо- используемых технологий и протоко-
ния QoS. Все дисциплины, работаю- жить, что если вы все еще читаете эту лов, конечно, нельзя. Поэтому, если
щие по принципу FIFO, просто помеща- статью, то явно не сидя на ящике от ка- хотите побольше узнать об управле-
ют приходящие пакеты в некий буфер кого-то магистрального маршрутиза- нии трафиком и качестве обслужива-
(очередь), постепенно выводя из не- тора, но это вовсе и не обязательно. ния, начните не с руководства по ваше-
го пакеты, пришедшие раньше, а при Даже обычная машина, под управле- му маршрутизатору и попыток понять
его заполнении – отбрасывают новые нием ОС Linux, имеет довольно бога- синтаксис соответствующих команд,
(безвозвратно), пока под них не осво- тые возможности по управлению тра- а ознакомьтесь с форматами кадров,
бодится место. фиком. Другое дело – что настроить их принципами работы основных прото-
Но поскольку скорость обработки оптимальным образом бывает доволь- колов и т. д. Удачи.
данных системой обычно значительно но сложно (хотя это относится не толь-
выше, чем скорость их передачи в сеть, ко к Linux. Источники информации
становится возможным использовать 1. Общие сведения:
другие, довольно сложные алгорит- SLA – доверяй, 1.1. Компьютерные сети. Принципы, тех-
мы обработки очереди, которые будут но проверяй нологии, протоколы: Учебник для ву-
не просто помещать пакеты в очередь Когда речь заходит о предоставле- зов. 3-е изд. http://www.piter.com/
по одному, но и выстраивать их в оп- нии услуг гарантированного качест- book/978546900504.
ределенной последовательности, от- ва, очень важно сначала определить- 1.2. http://utc.jinr.ru/nets/semenov.
брасывать или совершать иные дейс- ся с тем, что собственно подразуме- 1.3. http://www.protocols.com/protocols.htm.
твия. В результате всего этого стано- вается под словами «качество» и «га- 2. Frame Relay – http://www.networksorcery.
вится возможным управлять потоками рантии». Соглашение об уровне обслу- com/enp/protocol/framerelay.htm.
трафика по своему усмотрению (в ра- живания (Service Level Agreement, SLA) 3. ATM – http://www.cisco.com/univercd/cc/
зумных пределах). как раз и является тем документом, td/doc/cisintwk/ito_doc/atm.htm.
Подобно технологии DiffServ вы на основании которого потребитель 4. MPLS:
можете попытаться менять приори- и провайдер заключают договор о пре- 4.1. http://www.ietf.org/html.charters/mpls-
тет некоторых потоков трафика та- доставлении услуг. charter.html.
ким образом, чтобы дать преимущес- В нем описываются параметры 4.2. http://www.riverstonenet.com/support/
тво тем пакетам, которым оно дейс- QoS, методы проверки и санкции за на- mpls/mpls_introduction.htm.
твительно необходимо. При этом сов- рушение обязательств (как поставщи- 4.3. http://www.cisco.com/univercd/cc/
сем не обязательно маркировать па- ка услуг, так и пользователя), всячес- td /doc /product /software /ios120 /
кеты «по порту» на коммутаторах или кие дополнительные услуги и соглаше- 120newft/120t/120t5/lsc.htm.
использовать еще какое-то дополни- ния. В общем случае, обычно говорится 4.4. http://polaris.umuc.edu/~jhubbard/
тельное оборудование – все действия об усредненных значениях неких пока- msit_660/MPLS/MPLS%20Def.
будут производиться на вашем шлю- зателей за определенный период вре- 4.5. http://www.mpls-exp.ru.
зе. Например, пакеты приложений, не мени и их допустимых пульсациях. 4.6. h t t p : / / w w w . s y r u s . r u / i n d e x .
требовательных к задержке (первый SLA может быть составлен как в ин- cgi?Template=all_docs&TreeId=199
кандидат – smtp-данные) могут «ме- дивидуальном порядке, с учетом спе- 51&DocId=81.
няться местами» в очередях устройств цифики работы конкретного абонента, 4.7. http://www.nsi-com.ru/art001.htm.
с пакетами более интерактивных при- так и быть типовым договором, подпи- 5. TCP/IP:
ложений, чтобы уменьшить задержку сываемым с любым клиентом при под- 5.1. http://www.faqs.org/rfcs/rfc793.html.
их прохождения. ключении. 5.2. http://www.faqs.org/rfcs/rfc791.html.
Но все это реализуемо, только ес- 5.3. http://www.faqs.org/rfcs/rfc768.html.
ли ваш шлюз – действительно единс- Заключение 5.4. http://www.faqs.org/rfcs/rfc1349.html.
твенное место, где эти задержки вно- Так или иначе, на сегодняшний день 6. IntServ, DiffServ:
сятся. Если до того, как пакеты посту- средства управления трафиком игра- 6.1. http://www.faqs.org/rfcs/rfc1633.html.
пят на маршрутизатор (где-то в вашей ют большую роль в качественном пре- 6.2. http://www.faqs.org/rfcs/rfc2749.html.
сети), или после того, как покинут его доставлении телекоммуникационных 6.3. http://www.cisco.com/warp/public/
(на каналах провайдера или выше), услуг. Даже если сейчас вы не испы- cc/pd/iosw/ioft/iofwft/prodlit/difse_
они не будут получать требуемую про- тываете необходимости в приорити- wp.htm.
пускную способность, пользы от при- зации голосового трафика например, 6.4. http://www.gta.ufrj.br/diffserv.

№2, февраль 2006 85


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

История компьютеров «Амига»


Часть первая: 1982-1994

Сергей Зуев
На протяжении последних лет компьютерная индустрия оказалась поделена между
Windows-системами, продукцией от Apple и Linux/UNIX-решениями, куда входят также
и знаменитые рабочие станции SGI/Sun. Однако буквально десять-пятнадцать лет назад
ситуация на рынке персональных компьютеров была совершенно другой.

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

Н
а протяжении последних лет ли на частотах до 14 МГц и адресова-
компьютерная индустрия оказа- ли до 16 Мб адресного пространства,
лась поделена между Windows- что было на голову выше даже самых
системами, продукцией от Apple близких их конкурентов от Intel – про-
и Linux/UNIX-решениями, куда входят цессоров 8086/88. Майнер сделал не-
также и знаменитые рабочие станции сколько запросов к руководству ком-
SGI/Sun. Однако буквально десять-пят- пании для выделения ему отдельной
надцать лет назад ситуация на рын- лаборатории по разработке новой вы-
ке персональных компьютеров была числительной системы, однако каж-
совершенно другой. Существовало дый раз получал отказ. Это вынуди-
по крайней мере два-три десятка раз- ло его оставить корпорацию и занять-
личных платформ, отличающихся и ди- ся индивидуальными исследованиями
зайном, и процессором, и какими-то в данной области.
специфическими оригинальными ре- Игнорирование мнения Майнера Рисунок 1. Джей Майнер – создатель
компьтеров «Амига»
шениями в аппаратной части. Одна- сыграло злую шутку с Atari – в сере-
ко, несмотря на то, что большая часть дине восьмидесятых, все еще ориен-
рынка уже занята вышеперечисленны- тируясь на рынок восьмиразрядных
ми системами, старые компьютеры ни- компьютеров, корпорация потерпела
куда не делись. Для них до сих пор пи- огромные финансовые убытки, следы
шется программное обеспечение и со- от которых тянулись вплоть до ее пол-
здается новое железо. Пример тому – ного банкротства в середине девянос-
компьютеры Amiga. тых годов.
В 1982 году Майнеру позвонил
Зарождение идеи его бывший коллега, также уволив-
История Amiga начинается в 1980 году, шийся из Atari, Ларри Кеплен. Кеплен Рисунок 2. Промежуточный вариант
Lorraine
в лабораториях Atari, где Джей Май- к тому времени уже создал свою ма-
нер проектировал восьмиразрядные ленькую фирму по разработке компью- ям по выпуску продуктов к ее компью-
системы. Именно он разработал та- терных игр, хорошо известную сегодня терам, Nintendo же вообще имела мо-
кие знаменитые компьютеры и кон- как Activision. Как и Майнер, он искал нопольное право на выпуск картрид-
соли, как Atari 2600, Atari 400 и Atari финансовую помощь для дальнейшей жей для своих приставок, и сторон-
800. Основной упор в проектирова- деятельности своего детища. ние разработчики должны были пла-
нии делался на создание custom-чи- По счастливому стечению обстоя- тить деньги за право выпуска своих
пов (микросхемы, которые заказыва- тельств, дантист Майнера был богатым игр на ее системах.
ются специально на заводах для кон- человеком, который вкладывал деньги Проект по созданию новой систе-
кретной линейки продуктов), каждый в новые, перспективные разработки мы рос, как на дрожжах. В кратчайшие
из которых брал на себя определен- в области компьютерных игр. Благо- сроки группа спроектировала и, самое
ную функцию по выводу графики, син- даря ему новая фирма Джея, Hi-Toro, главное, воплотила в жизнь множест-
тезированию звука, управления внут- получила стартовый капитал в 7 мил- во революционных идей.
ренней шиной и пр. Это разгружало лионов долларов. Новый компьютер основывался
центральный процессор от несвойс- Hi-Toro разделилась на две груп- на процессорах Motorola и имел не-
твенных ему задач и весьма ощути- пы. Первая, Atari Peripheral, занима- сколько сопроцессоров для выпол-
мо повышало общую производитель- лась разработкой фирменных джойс- нения второстепенных задач. Сопро-
ность системы. тиков и игр для Atari 2600. Вторая груп- цессоры содержали в себе такие бло-
В то время Atari была настолько па работала над проектом с кодовым ки, как Blitter (занимался быстрым пе-
крупной компанией, что сегодня мог- именем «Lorraine», названным так ребросом областей памяти из трех ис-
ла бы соперничать с Sony или Nintendo. в честь жены CEO Дейва Морзе. Не- точников в четвертое конечное место
Однако в ней присутствовали сильный смотря на то что группа была весьма одновременно с выполнением логи-
коммерческий дух, жестко спланиро- немногочисленной, ее цели были ко- ческих операций над ними) и Copper
ванное производство, и это не остав- лоссальными. (следил за положением луча на экра-
ляло ни малейшей возможности та- Предполагалось создать револю- не, в зависимости от значений мог или
лантливым рабочим для продвижения ционную игровую систему, у которой изменять значения внутренних регис-
своих идей в производство. Это и слу- были бы 3.5" дисковод и клавиатура. тров, или вызывать прерывание цент-
чилось с Майнером. Он считал, что эра Изначально были определены главные рального процессора для выполнения
восьмиразрядных компьютеров закан- разработчики игр, Activision и Imagic, каких-либо процедур).
чивается и пора переходить на более для того чтобы обеспечить систему иг- Каждому процессору давались
совершенные технологии. рами на момент начала продаж. На то женские имена, например, Paula явля-
Как раз в 1979 году Motorola выпус- время это был беспрецедентный шаг, лась контроллером дисковода и звуко-
тила свое новое семейство процессо- например, та же Atari всячески прег- вой подсистемой, обеспечивала ком-
ров 68000. Эти процессоры работа- рождала дорогу сторонним компани- пьютер 4-канальным 8-разрядным

№2, февраль 2006 87


ретроспектива
лефонном справочнике между назва- мини-компьютер из трех стоек. Каж-
ниями Apple и Atari. дый «чип» занимал по несколько плат,
1983 год начался с гигантских по- причем на каждой было по 50 микро-
терь на компьютерном рынке, за- схем (рис. 2).
крылось множество мелких фирм.
Amiga Inc. также потерпела крупные Эпоха Commodore
неудачи в продажах, и в итоге ситуа- В самом начале 1984 года, на амери-
ция сложилась так, что Lorraine стала канской выставке CES была произве-
единственной возможностью компа- дена первая демонстрация Lorraine ши-
нии заработать деньги. Для ускорения рокой публике. Компьютер до сих пор
разработки проекта в компанию были представлял собой груду печатных
приглашены новые люди: Боб Бернс, плат и множество проводов, но все это
Рисунок 3. Amiga 1000 Гленн Келлер, Дейл Лак, ЭрДжи Ми- старательно было спрятано под стол,
звуком; Agnus – контроллер прямо- каль, Дейв Нидл, Рон Николсон, Боб на котором оставили только монитор.
го доступа в память, генератор так- Парисо и Карл Сассенрат. Появление Самой большой проблемой на этой
товой частоты; Denise управлял аппа- новых инженеров позволило разбить демонстрации было обеспечение
ратными спрайтами и содержал в се- команду разработчиков на две группы: вентиляции системы – пространство
бе Copper. первая занималась собственно разра- под столом никак не вентилировалось,
Помимо вышеперечисленных воз- боткой компьютера, а вторая – написа- и оборудование могло в любую секун-
можностей, новый компьютер имел па- нием программного обеспечения к не- ду выйти из строя, но, к счастью, это-
литру до 4096 цветов, с возможностью му. За вторую группу отвечал ЭрДжи го не произошло.
использования до 16 в режимах вы- Микаль. Позже, в интервью, он расска- Lorraine произвела фурор – на эк-
сокого разрешения 640х256 (или 512 зывал следующее: ране крутилась известная демонстра-
в режимах с чересстрочной разверт- «В Amiga Inc. я начинал как инженер ция «Boing Ball», которая рисовала вра-
кой), и до 32 в режимах низкого раз- ПО, я отвечал за проектирование гра- щающийся, прыгающий трехмерный
решения 320х256 (512). фических библиотек. Затем под моим красно-белый шар. При этом, достиг-
Также существовал специальный руководством был создан Intuition – ос- нув краев экрана, он со стереозвуком
режим HAM (Hold-And-Modify) для од- нова графического интерфейса буду- ударялся о стенки и двигался в обрат-
новременного показа всех 4096 цве- щей операционной системы. Это был ную сторону. На фоне других, восьми-
тов в низком разрешении. Достигалось очень тяжелый для нас период – раз- разрядных компьютеров, возможности
это благодаря аппаратным цикличес- работка длилась несколько месяцев Lorraine смотрелись просто шикарно!
ким изменениям значений цветовых по 100 часов в неделю!» Однако несмотря на торжество на вы-
регистров, т.е. на каждом новом пик- Для того чтобы иметь какие-либо ставке среди посетителей, крупные
селе можно было изменить одну цве- средства в начале года, отдел компа- компании восприняли новинку весь-
товую составляющую (R, G или B) пре- нии, занимающийся изобретением но- ма прохладно.
дыдущего пикселя или выбрать новый вых игровых контроллеров, выпустил К тому времени первоначальный
цвет из палитры. очень оригинальную игру Zen Meditaton. капитал в 7 миллионов долларов уже
Следует отметить два эффекта Смысл ее заключался в том, что надо иссяк, а продажи игровых контрол-
Copper, которые часто использовались было сидеть максимально долгое вре- леров не давали значительного до-
программистами ПО и даже в самой мя не шевелясь, в позе Лотоса на спе- хода. Положение было критическое,
операционной системе. Это возмож- циальном контроллере, выполненном и руководство компании решило про-
ность использования нескольких ви- в виде доски для сноуборда. Цель иг- дать свое детище какому-нибудь гига-
деорежимов на экране. Для примера: ры была в том, чтобы, достигнув опре- нту. Были контакты с Sony, Apple, Atari
верхняя часть экрана работает в раз- деленного временного результата, по- и почти удавшийся контракт с Silicon
решении 640х200 на 8 цветов, а ниж- пасть в нирвану. В операционной сис- Graphics. Стив Джобс, CEO Apple, на-
няя – на 320х200 на 32 цвета (в совре- теме Amiga при сбоях демонстриро- пример, посчитал, что компьютер
менных видеокартрах этого нет). Вто- вался мигающий прямоугольник с над- имеет «очень продвинутое hardware»,
рой эффект – это возможность смены писью «Guru Meditation», т.е. «гуру ме- что не приемлемо для домашних сис-
цветовой палитры в различных час- дитирует». Эта фраза была данью раз- тем. Из всех компаний только Atari со-
тях экрана. работчиков своему прошлому. гласилась заключить серьезную сдел-
В конце 1982 года Hi-Toro сменила К сентябрю 1983 года были закон- ку с Amiga Inc. В 1992 году в интервью
свое имя на Amiga Incorporated в свя- чены макеты трех основных custom- Джей Майнер сообщил:
зи с иском японской фирмы Toro о на- чипов: Agnus (Address Generator), «Atari дала нам 500 тысяч долларов
рушении авторских прав. Новое имя Daphne, которую позже переименовали с таким условием, что если мы за ме-
компании было выбрано не случайно – в Denise (Display Adapter) и Porita, поз- сяц не успеем закончить custom-чипы,
основатели компании хотели, чтобы же названную Paula (Purts and Audio). то они купят наши акции по бросовым
имя звучало максимально дружелюб- То, что было сделано hardware-отделом, ценам. Это был очень глупый контракт,
но (Amiga с итальянского переводится мало походило на обычный домашний но из-за отсутствия других вариантов
как «подружка») и располагалось в те- компьютер, скорее, это напоминало мы согласились.»

88
ретроспектива
Однако к тому времени Amiga Inc. и продавать компьютер по значитель-
подвернулась удача, гигант в области но меньшей цене. Плюс, компьютер
домашних компьютеров Commodore изначально имел MIDI-разъемы и со-
согласился приобрести компанию ответствующее программное обес-
за 3 миллиона долларов, превра- печение, что сразу предопредели-
тив ее в одно из своих подразделе- ло его успех на рынке музыкальных
ний и оставив весь ее состав. Бла- компьютеров.
годаря этой сделке Amiga Inc. быс- 1985-1986 годы прошли под флаг-
тро вернула Atari ее 500 тысяч дол- манским лидерством компьютеров
ларов. Commmodore переименовала Atari, причем за это время было вы- Рисунок 4. Авторская Amiga 500
Amiga Inc. в «Commodore-Amiga Inc.» пущено три новых модели со встро-
и выделила 27 миллионов долларов енным дисководом и увеличенным
на дальнейшую разработку компью- до 1 Мб объемом оперативной памя-
тера. ти. Однако Commodore все это время
К концу 1984 года новое подраз- не дремала.
деление выпустило первый прото- В 1986 году началась разработ-
тип нового компьютера – Amiga 1000 ка новой модели Amiga 2000, которая
(рис. 3). По тем временам это была отличалась вместительным desktop-
очень мощная машина с 256 Кб опе- корпусом с большим количеством
ративной памяти и desktop-корпу- разъемов расширения, причем при-
сом, позволяющим убирать клавиа- сутствовали даже разъемы под ши-
туру под него. Для ускорения процес- ну ISA для периферии от компьюте-
са разработки операционной систе- ров IBM PC. Для их функционирования
мы была нанята британская фирма были разработаны аппаратные эму- Рисунок 5. Amiga 3000
MetaComCo. Она занялась портирова- ляторы IBM PC с процессорами 8088 Для поддержки пользователей
нием ядра своей ОС Tripos на процес- и 80286. Это позволяло значительно под спонсорством Commodore в 1985
соры Motorola. расширить объем программного обес- году начался выпуск первого журна-
В 1985 году Amiga 1000 поступи- печения под Amiga. ла для пользователей Amiga – «Amiga
ла в продажу по официальной цене Благодаря возможностям расши- World».
в 1 500 долларов. Commodore счита- рения Amiga 2000 продемонстрирова- В 1987 году на рынок вышли две но-
ла, что победила, так как выпустила ла новую технологию автоматической вые модели – Amiga 2000 и Amiga 500
первую домашнюю шестнадцатираз- конфигурации устройств AutoConfig. (рис. 4). Вторая представляла со-
рядную систему. Смысл ее заключался в том, чтобы ав- бой упрощенный вариант первой.
Однако на той же самой выстав- томатически предоставлять при вклю- Как и Atari ST, A500 была укомплекто-
ке CES’85, где демонстрировались чении компьютера новому устройс- вана в единый с клавиатурой корпус,
первые компьютеры, Atari предста- тву область памяти, прерывания и ли- плюс ее цена была меньше 1000 дол-
вила свою новинку. Это был компью- нии DMA. Через десять лет подобное ларов, оставляя в себе все возмож-
тер Atari ST. Он был основан на том появилось в IBM PC под названием ности от старшей сестры. Ввиду сво-
же процессоре MC68000, что и Amiga, Plug’n’Play. ей низкой цены А500 стала объектом
имел зашитую в ПЗУ однозадачную В 1985 году было разработано сто- мечтаний множества людей и сподвиг-
операционную систему, представля- ронней компанией новое устройство нула массы на переход с устаревшей
ющую собой гибрид MS-DOS, CP/M Genlock, которое устанавливалось восьмиразрядной технологии (компью-
и графического интерфейса от Digital в разрыв между видеоразъемом и мо- теры Spectrum, Amstrad и пр.) на новые
Research – GEM (Graphic Environment ниторным кабелем Amiga. Данное уст- шестнадцатиразрядные машины.
Manager). ройство предназначалось для смеши- В 1988 году общий объем продаж
Графические и музыкальные спо- вания видеосигнала от внешнего ис- от компьютеров и программного обес-
собности также были не на высоте – точника (видеомагнитофон, видеока- печения превысил аналогичную циф-
320х200 точек на 4 цвета из палитры мера и т. п.) и компьютера. Одновре- ру у Atari. С тех пор последняя всег-
в 512 цветов, плюс 640х200 и 640х400 менно с этим для Amiga были разра- да находилась на втором месте пос-
на 2 цвета, причем последний режим ботаны первые программы для трех- ле Amiga.
требовал специального монитора. мерного моделирования и графичес- Игровой рынок также перешел в ру-
В качестве музыкального сопро- кие редакторы. В то время профес- ки Amiga, поскольку для нее выходили
цессора служил хорошо знакомый сиональные компьютеризированные такие игры, которые просто невозмож-
поклонникам компьютера ZX Spectrum видеостудии стоили до 50 тыс. долла- но было сделать на Atari. Последняя на-
контроллер YM-2149 (4 бита, 3 кана- ров, цена же Amiga с этими програм- чала иск против Commodore, посколь-
ла, 8 октав). мами и GenLock составляла пример- ку изначально Майнер работал в Atari
Однако упрощенная, по сравне- но две – три тысячи долларов, поэто- и все свои идеи придумал именно в ее
нию с Amiga, архитектура позволи- му ее популярность на данном рынке лабораториях, однако этот иск не был
ла быстрее наладить производство быстро возросла. удовлетворен судом.

№2, февраль 2006 89


ретроспектива
более серьезным. Но самое главное – да выводить изображение – на чипсет
это был выход Amiga 3000. Компью- или на видеокарту.
тер включал в себя новый чипсет ECS Sun заключила договор с
(Enhanced ChipSet, первый же стали Commodore о создании новой опера-
называть OCS – от слова Original), ко- ционной системы для A3000, UNIX-кло-
торый адресовал до 2 Мб памяти и под- на Amiga UNIX. Специально для нее вы-
держивал не только две жестко задан- пускались модели A3000UX, которые
ные экранные частоты (PAL, NTSC), включали в себя стриммер, графичес-
Рисунок 6. Авторская Amiga 600 но позволял гибко менять из значе- кий и сетевой контроллеры, плюс конт-
ния с 15 до 31 КГц для строчной часто- роллер на 6 последовательных портов
ты и от 45 до 83 для кадровой частоты. для терминалов.
Это позволило использовать вошед- Помимо А3000 была выпущена
шие в моду VGA-мониторы от IBM PS/2. еще одна модель – Commodore CDTV.
Поскольку большая часть старых игр Это была старая А500 с 1 Мб памя-
была написана прямым программиро- ти и с приводом CD-ROM, заключен-
ванием чипсета, то для работы с этими ная в корпус, похожий на видеомаг-
мониторами в компьютер было встро- нитофон. Для этого компьютера про-
ено устройство ScanDoubler, позоля- давались инфракрасная клавиатура,
Рисунок 7. Amiga 4000 ющее удвоить телевизионную часто- мышь и внешний дисковод. Не смот-
ту с 15 до 31 КГц. ря на оригинальную идею, эта модель
А3000 производилась в Desktop- провалилась – за последние несколь-
корпусе (рис. 5), имела шину SCSI-2 ко лет люди пресытились возможнос-
для накопителей, 4 разъема для рас- тями А500.
ширения с шиной Zorro-II, 3 разъема На замену А500 в 1991 году при-
ISA и специальный разъем Fast Slot. шел новый вариант – А500+. Эта ма-
Дело в том, что на материнской плате шина имела тот же самый чипсет ECS,
компьютера располагался процессор что и А3000. Последнюю дополнила
Рисунок 8. Авторская Amiga 1200 MC68030 на 16/25 МГц (в зависимости модель А3000Т – это была та же самая
от версии), а оперативная память мог- А3000, только с семью слотами Zorro-2
ла расширяться только до 16 Мб. Fast и в Tower-исполнении.
Slot предназначался для специаль-
ной платы с новым процессором, ра- Advanced Amiga
ботающим на большей частоте, и до- Architecture
полнительных слотов для оператив- К концу года IBM свернула свою ли-
ной памяти. нейку PS/2, оставив после нее «на-
Здесь стоит отметить одну особен- следство» в виде двух разъемов мы-
ность строения оперативной памяти ши/клавиатуры, слотов SIMM и, са-
Amiga – адресное пространство делит- мое главное, графических адапте-
Рисунок 9. A1200 (вид снизу): ся на две области: Chip-RAM, к кото- ров VGA. Последние привнесли но-
установлена процессорная карта рой имеет доступ и процессор, и чип- вый режим 320х200х256 цветов, что
Blizzard 1260 от Phase 5
сет (он хранит в ней звуки и изображе- превосходило параметры чипсетов
Первые попытки давления от ния), причем последний имеет боль- Amiga, и поэтому публика требовала
Microsoft и Apple начали ощущаться ший приоритет; и Fast-RAM, к которой улучшений.
в следующем, 1989 году. Для удержа- имеет доступ только процессор. Такое В лабораториях Commodore к этому
ния своих позиций Commodore улучши- разделение хорошо тем, что ни про- времени разрабатывался новый ком-
ла чипсет для поддержки 1 Мб памяти цессор, ни чипсет практически не пе- пьютер – А3000+. Это была внешне
и сильно снизила цену на А500. Девид ресекаются, каждый работает со сво- та же А3000, но внутри – кардинально
Плизенс, будущий глава Commodore ей областью по циклам прямого до- измененная аппаратная часть. Прежде
UK, создал «А500 Batman bundle», бла- ступа в память и не мешают друг дру- всего это новый чипсет AGA. Это бы-
годаря чему продал тысячи компьюте- гу. Но позже это стало создавать огра- ла если не революция, то по крайней
ров и обеспечил их огромную популяр- ничения – чипсет с его возможностями мере серьезная эволюция по сравне-
ность в начале девяностых годов. со временем устаревает, потребности нию с ECS. Общая скорость работы
1990 год ознаменовался коренным в памяти растут, но она все равно ог- повысилась в четыре раза, но самое
улучшением программной и аппарат- раничена изначальным максималь- главное – это новые цветовые режи-
ной части компьютеров. Вышла новая ным объемом в 2 Мб и максимальным мы: к имеющимся ранее режимам в 2,
версия AmigaOS 2.x. В программном трансфером в 7 Мб/с. Проблему сла- 4, 8, 16, 32 цвета плюс EHB (Extra Half
плане (API, интерфейсы) это был на- бого чипсета стали решать с помо- Bright – режим в 32 цвета, плюс они же,
стоящий прорыв по сравнению с пре- щью видеокарт. Дело в том, что с точ- но с половинной яркостью) и HAM до-
дыдущей ОС. Даже внешний вид стал ки зрения AmigaOS нет разницы, ку- бавились 64, 128 и 256 цветов и плюс

90
ретроспектива
HAM-8, причем во всех разрешени- появилась новая шина расширения – новременно с этим на рынке появи-
ях. Общая цветовая палитра увеличи- Zorro-3. Она совместима со своей про- лась Amiga CD32 – игровая консоль
лась с 4096 до 16 млн. цветов, а пос- шлой версией электрически, но рабо- с CD-ROM. Аппаратно она представля-
ледний режим давал возможность од- тала на гораздо большей скорости – ла собой ту же А1200 без клавиатуры
новременного вывода 262 144 цветов. 25 Мб/с против 3,5 Мб/с и адресова- и с чипсетом, выполненным по мень-
Также планировалось устанавливать ла 512 Мб адресного пространства шему технологическому процессу.
в эту модель DSP-процессор MC56001 против 8 Мб. При помощи позже выпущенных мо-
для обеспечения работы того, что сей- Atari предприняла свою последнюю дулей от сторонних фирм (ProModule,
час называется «программный мо- попытку отвоевать рынок у Amiga, вы- SX-1, SX-2) эта консоль превращалась
дем», декодирования звуковых и ви- пустив новый компьютер Atari Falcon в полноценный компьютер с клавиату-
део (MPEG) данных. с процессором MC68030 на 25 МГц рой, мышью, накопителями и процес-
В начале 1992 года вышла заме- и немного более качественным чип- сором MC68030 на 50 МГц. В маркетин-
на А500+ – Amiga 600 (рис. 6). С ап- сетом, чем AGA, но было уже слишком говом плане CD32 имела успех только
паратной точки зрения это была та же поздно. Невыпущенная модель Atari на британском рынке, а на остальных
А500+, но с контроллером IDE для но- Microbox и провалившаяся шестидеся- провалилась.
утбучных 2.5" жестких дисков и слотом тичетырехразрядная игровая консоль Интересный факт: в 1993 году
PCMCIA. Самое главное – это разме- Atari Jaguar доконали компанию, и ее Microsoft разрабатывала свою новую
ры. От клавиатуры оставили только ос- имущество и бренд были распроданы операционную систему Windows NT,
новную часть, без цифровой, благода- с молотка компании JTS Corp., произ- которую планировалось перенести
ря этому удалось сделать удивительно водящей жесткие диски. на множество платформ, в том чис-
компактный корпус. Однако к 1992 го- К концу 1992 года, продолжая ле и на Amiga. Однако этим планам
ду иметь все тот же чипсет ECS, про- развитие своего модельного ряда, не суждено было сбыться.
цессор MC68000 на 7 МГц и 1 Мб па- Commodore выпускает Amiga 1200 После AGA началось проектиро-
мяти – было уже несерьезно. (рис. 8, 9). Это самая продаваемая вание чипсетов Hombre и AAA, кото-
Проект А3000+ был остановлен, Amiga за всю свою историю. Понача- рые должны были значительно уско-
однако новый чипсет AGA не был за- лу цена на нее составляла 699 фун- рить работу, привнести новые цвето-
брошен. На его основе была разра- тов стерлингов, но позже опустилась вые режимы до 16-бит, HAM-12, под-
ботана новая модель – Amiga 4000 до 399 фунтов стерлингов. держку более высоких частот раз-
(рис. 7). Внешне улучшенная (добав- Внешне это была усеченная по верток, что дало бы разрешения до
лен пятидюймовый отсек для диско- глубине А500. Внутри стоял новый 1280x1024 и множество других новов-
водов 5.25", стриммеров, CD-ROM чипсет AGA, 32-разрядный процес- ведений. Commodore объявила, что бу-
и пр.), внутри слегка упрощенная сор MC680EC20 на 14 МГц, 2 Мб Chip- дущие модели будут строиться на ба-
(IDE вместо SCSI, убран DSP, выки- памяти, такие же разъемы IDE 2.5" зе новых процессоров от Motorola –
нут ScanDoubler), это была маши- и PCMCIA, как и у А600. Внизу ком- PowerPC или от HP – PA RISC.
на-мечта. Внутрь устанавливалась пьютера, под пластмассовой кры- В марте 1994 года началось произ-
процессорная карта с процессором шечкой, располагался 150-контакт- водство Tower-версии А4000 – Amiga
MC68040 на 25 МГц. По тестам на про- ный слот TrapDoor. Подобное было 4000T. Amiga были весьма популярны
изводительность этот процессор об- и у А500, и у А600, но у них он служил на домашнем рынке, в области виде-
ходил 80486, работающий на 50 МГц. для установки плат с дополнительной опроизводства (на Amiga считались
Для этой машины была написана но- Chip-памятью, а у А1200 туда были вы- эффекты в Babylon-5, морфинг 3D-мо-
вая ОС – AmigaOS 3.0. Это был также ведены процессорные шины и сигна- делей в Terminator-2), в музыкальной
серьезный прорыв. Для чтения дисков лы. Под этот слот в последующие го- области (ранние альбомы The Prodigy
от IBM PC была интегрирована подсис- ды было разработано великое мно- писались на Amiga) и множество дру-
тема CrossDOS. Для удобства написа- жество процессорных карт. При их ус- гих. Доход от продаж компьютеров
ния прикладного ПО появились дата- тановке старый процессор отключал- был высок, однако промахи с попыт-
тайпы (плагины к системе, позволяю- ся, но влючался новый (от 68020 на бо- ками выжать все соки из старых тех-
щие любому приложению открывать лее высокой тактовой частоте и с FPU нологий в виде A500+, A600 и CDTV,
требуемые ему графические, звуко- до 68060 на 50-66 МГц и PowerPC 603e оставили большую брешь в бюдже-
вые, текстовые форматы), единая сис- 160-240 МГц), добавлялась Fast-па- те компании.
тема локализации приложений, улуч- мять. Все это привело к тому, что к се-
шенный скрипт-язык AREXX (позво- редине года компания объявила се-
лял из одного скрипт-файла полно- Банкротство бя банкротом. Помимо этого 20 ию-
ценно управлять одновременно не- В 1993 году Commodore наконец пол- ня 1994 года Джей Майнер скончался
сколькими приложениями). Были про- ностью свернуло производство сво- от обширного инфаркта сердца. Бан-
изведены улучшения в файловой сис- их популярных восьмиразрядных ма- кротство компании заставило отвер-
теме (кеширование директорий, под- шин Commodore 64. За 11 лет их «жиз- нуться от Amiga множество фирм, вы-
держка не латинских имен), стандар- ни» было выпущено 30 миллионов пускавших программное и аппаратное
тная подсистема установки приложе- компьютеров, что даже было зане- обеспечение. Ее будущее было неоп-
ний и многое другое. Для периферии сено в Книгу рекордов Гиннесса. Од- ределено.

№2, февраль 2006 91


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

Внедрение, управление и поддержка


сетевой инфраструктуры
Microsoft Windows Server 2003
Дж. С. Макин, Йен Маклин
ты на них), а также лабораторная рабо- ление удаленным доступом (авториза-
та, выполнение которой поможет луч- ция подключений удаленного доступа,
ше усвоить прочитанный материал. Те- развертывание VPN, RADIUS), управ-
мы книги: основные сведения о сетях ление безопасностью сети (мониторинг
Windows 2003 Server (ключевые момен- и устранение неполадок основных про-
ты проектирования инфраструктуры токолов сети), поддержка сетевой инф-
сети, создание сетей на основе стан- раструктуры (наблюдение за работой
дартных компонентов), общие сведе- и методики решения проблем, связан-
ния о TCP/IP (общие концепции TCP/IP, ных с сетями). На прилагаемом к кни-
IP-адресация, разбиение сетей на под- ге диске вы найдете демоверсию экза-
сети), мониторинг и устранение непо- менационного теста, электронные кни-
Эта книга является переводом офи- ладок подключений TCP/IP, настройка ги (на английском языке), материалы,
циального пособия для самостоятель- серверов и клиентов DNS. Развертыва- необходимые для исполнения лабора-
ной подготовки к экзамену 70-291. Без ние структуры DNS, мониторинг и ус- торных работ.
сомнения, это издание окажется вам транение неполадок. Конфигурирова-
полезным, даже если вы не собирае- ние DHCP-серверов и клиентов, а так-  Издательство: «Питер»
тесь сдавать вышеобозначенный экза- же наблюдение и выявление проблем,  Год издания: 2006
мен. Каждая глава разбита на занятия, связанных с DHCP. Маршрутизация  Количество страниц: 620
в конце которых представлено резюме в Windows 2003 (локальные сети, NAT,  ISBN: 5-469-01357-X
написанного. В завершение глав пред- протоколы маршрутизации OSPF и RIP,  Цена: ≈ 510 руб.
ложены контрольные вопросы (и отве- фильтры пакетов), настройка и управ- Книга предоставлена издательством «Питер».

Oracle PL/SQL для профессионалов


Стивен Фейерштейн, Билл Прибыл
ном объеме, разве что «все возмож- ний с базами данных Oracle средства-
ности PL/SQL» освящены не полно- ми SQL, подробно рассказано о том,
стью, но это отнюдь не оттого, что ав- как определить транзакции, обновляю-
торы что-то недописали, а скорее по- щие, дополняющие и удаляющие дан-
тому, что действительно досконально ные таблицы). Разработка приложений
и в полном объеме описать все воз- PL/SQL (в этой части освящены вопро-
можности PL/SQL в рамках одной кни- сы структуры основных составляющих
ги неосуществимо. Изложенный мате- частей любой программы: процедуры,
риал разделен на 6 логических частей. функции, триггеры, пакеты). Особые
Программирование на PL/SQL (исто- возможности PL/SQL (основные эта-
рия языка, краткий обзор некоторых пы исполнения кода PL/SQL, исполь-
главных функций, простые примеры зование памяти, различий между сер-
и основы языка). Структуры програм- верным и клиентским PL/SQL, показа-
мы PL/SQL (условные if и case и пос- но, как вызвать код на Java и C из при-
ледовательные goto и null, операторы ложений PL/SQL). Без сомнения, эта
При написании книги авторы в качес- управления потоком и обработка ис- книга – просто находка для всех людей,
тве основных целей и задач выбрали ключений). Работа с данными в PL/SQL использующих (или желающих начать)
следующие направления: изучение (рассмотрены различные типы про- PL/SQL в своей работе.
всех возможностей PL/SQL, исполь- граммных данных, таких как числа,
зование PL/SQL для решения повсед- строки, записи и коллекции, не оста-  Издательство: «Питер»
невных задач и создание эффективно- лось без внимания и описание встро-  Год издания: 2005
го кода, который легко сопровождать. енных функций, предоставляемых  Количество страниц: 941
Подробно ознакомившись с содержа- Oracle для выполнения различных опе-  ISBN: 5-318-00528-4
нием книги, могу сообщить, что заду- раций с данными). SQL и PL/SQL (ор-  Цена: ≈ 525 руб.
манное авторам удалось почти в пол- ганизация взаимодействия приложе- Книга предоставлена издательством «Питер».

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

Snort 2.1. Обнаружение вторжений


Рейвен Олдер, Джейкоб Баббин, Адам Докстейтер,
Джеймс Фостер, Тоуби Колленберг, Майкл Раш
атак Snort. Для тех, кто решил занять- рошо знаком со Snort, откроют для себя
ся вопросами обнаружения атак почти что-то новенькое.
с нуля, хочет понять и разобраться с точ- Прилагаемый к книге компакт-диск
ки зрения пользователя, как установить для человека, имеющего под рукой Ин-
и настроить IDS Snort, книга будет неза- тернет, абсолютно бесполезен. Диск за-
менима. В книге рассмотрено не толь- полнен процентов на десять програм-
ко несколько вариантов установки про- мами, о которых идёт речь в книге и ко-
граммы под разные дистрибутивы и да- торые без проблем можно найти в сети.
ны рекомендации, но и понятным для Все программы раскинуты по директо-
продвинутого пользователя языком по- риям, видимо, с намёком на главы, од-
ясняется структура каждой части про- нако это не вносит порядка: несколь-
граммы. Стиль «HowTo» разбавляется ко программ встречаются по два раза,
литературными абзацами и картинками, одни и те же версии есть как в архиве,
Несмотря на то, что из-за перевода кни- что делает чтение более лёгким. Но, не- так и распакованные, а некоторые име-
га отстала от жизни года на три (напом- смотря на такие приятные моменты, не- на файлов вообще обрезаны и закан-
ню, что первые публикации о Snort были льзя назвать перевод на 100% удачным: чиваются на ~1.
в «Системном администраторе» в 2003 несколько бессмысленными кажут-
году и что сейчас актуальной являет- ся дословно переведённые конспекты  Издательство: «Бином-Пресс»
ся серия 2.4, частично несовместимая и FAQ в конце каждой главы, не буду-  Год издания: 2006
с версией 2.1), книга является актуаль- чи адаптированными для нас. Пример-  Количество страниц: 656
ной и новой для нас потому, что это пер- но пятая часть книги подробно расска-  ISBN: 5-9518-0136-2
вое русское издание значительного объ- зывает о наиболее часто используемых  Цена: ≈ 374 руб.
ёма и качества о cистеме обнаружения дополнениях к Snort, где даже те, кто хо-

Аппаратные средства IBM PC


Михаил Гук
метить, что эта книга входит в число Большое количество различных
официальных учебных пособий в ря- диаграмм, таблиц и иллюстраций спо-
де учебных заведений. Книга хорошо собствует лучшему пониманию изуча-
структурирована. Весь материал из- емого материала. Исходя из содержа-
лагается простым и доступным язы- ния можно подумать, что книга носит
ком. Все темы освящаются достаточ- сугубо теоретический характер, но это
но глубоко и развернуто. Основные не так, некоторая часть материала но-
из них: устройство и общая архитек- сит исключительно практическое зна-
тура компьютера (устройство PC, пи- чение. Книгу можно порекомендовать
тание, архитектура IBM PC-совмести- широкому кругу читателей, возмож-
мых компьютеров, организация ввода- но использование и как учебного по-
вывода, BIOS); ядро компьютера – ма- собия, так и просто как справочника.
теринская плата, процессор и память; Последнее издание книги пополне-
периферия (устройства хранения дан- но материалами о PCI-X, PCI-Express,
ных, ввода-вывода и их интерфейсы, HT, SATA, а также дополнены некото-
Думаю, эта книга не нуждается в пред- видео- и аудиосистемы, сетевые уст- рые главы.
ставлении широкому кругу читателей. ройства); интерфейсы периферийных
Она по праву считается одной из луч- устройств (шины расширения, парал-  Издательство: «Питер»
ших книг на русском языке, посвящен- лельный интерфейс, проводные и бес-  Год издания: 2006
ных аппаратному обеспечению IBM PC. проводные последовательные интер-  Количество страниц: 1072
Издание пользуется популярностью фейсы, шины USB, FIREFIRE, интер-  ISBN: 5-469-01182-8
у широкого круга читателей, начиная фейсы IDE: ATA/ATAPI/SATA, а также  Цена: ≈ 480 руб.
от обычных пользователей и заканчи- SCSI и Fibre Channel). Книга предоставлена издательством «Питер».
вая серьезными специалистами в об-
ласти «железа». Также нельзя не от- Обзор книжных новинок подготовили Александр Байрак, Павел Закляков

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

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

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

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

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

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


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

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

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


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

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


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

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


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

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


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

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


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

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

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

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

№2, февраль 2006 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№2(39), Февраль, 2006 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец В СЛЕДУЮЩЕМ
НОМЕРЕ:
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
Технический редактор
Владимир Лукин
Редактор
Алексей Коршунов Создаем порт для FreeBSD ление которым можно, и, как правило,
Внештатные редакторы своими руками нужно автоматизировать. Для реше-
Алексей Барабанов Автоматизированная система сбор- ния этой задачи был разработан про-
Кирилл Тихонов ки стороннего программного обеспе- токол SNMP. Существует масса го-
Сергей Супрунов чения из исходных текстов (система товых коммерческих решений по уп-
Валентин Синицын портов) – это то, чем по праву гордится равлению различными устройствами
Татьяна Ильченко FreeBSD. Система содержит ссылки на с помощью SNMP, например HP Open
десятки тысяч программ, и этот список View, однако не каждой организации
РЕКЛАМНАЯ СЛУЖБА
постоянно пополняется. Кто их созда- по карману приобретение подобного
тел./факс: (095) 928-8253
Дарья Хохлова ет, эти пополнения? Некие выдающие- ПО, к тому же, эти программные про-
reсlama@samag.ru ся специалисты? Да вовсе нет. Вы то- дукты предназначены для управления
же сможете стать одним из них, прочи- большим количеством устройств и их
Верстка и оформление тав эту статью. использование в небольших сетях не-
maker_up@samag.ru целесообразно.
Дизайн обложки Переходим от VBScript
Николай Петрочук к ASP и ASP.NET: Конфиденциально?
дописываем Framework Защитим!
По вопросам распространения на примере сетевых папок Утечка даже части конфиденциальной
обращайтесь по телефону:
Программисты Microsoft, создававшие информации может нанести непопра-
(095) 928-8253 (доб. 120)
Framework, явно не ориентировались вимый вред компании. Мы зачастую от-
107045, г. Москва, на системных и сетевых программис- даем сервер, жесткий диск на ремонт
Ананьевский переулок, дом 4/2, стр. 1 тов, поэтому там отсутствуют функции или замену, выбрасываем старые ар-
тел./факс: (095) 928-8253 по управлению DFS, сетевыми папка- хивные ленты, в лучшем случае тща-
Сайт журнала: www.samag.ru ми и т. д. Возникает вопрос: «А как же
тельно стараясь удалить некогда хра-
решить данную проблему, ведь, напри- нимую на нем конфиденциальную ин-
РУКОВОДИТЕЛЬ ПРОЕКТА мер, в VBScript можно было без осо- формацию низкоуровневым формати-
Петр Положевец бых усилий управлять сетевыми папка- рованием либо специализированны-
ми (Shared Folders). Неужели в VB.NETми утилитами, что не всегда успешно.
УЧРЕДИТЕЛИ это невозможно сделать?» На рынке существует несколько про-
Владимир Положевец
граммно-аппаратных комплексов для
Александр Михалев
Управляем сетевым защиты конфиденциальной информа-
ИЗДАТЕЛЬ оборудованием с помощью ции на рабочих станциях и серверах
ЗАО «Издательский дом протокола SNMP посредством шифрования. Мы рас-
«Учительская газета» Сегодня практически в любой сети да- скажем вам о возможностях програм-
же небольшой организации есть ак- мных продуктов Zserver и Zbackup ком-
Отпечатано типографией тивное сетевое оборудование, управ- пании SecurIT.
ГП «Московская Типография №13»
Тираж 10000 экз.
Уважаемые читатели!
Журнал зарегистрирован
в Министерстве РФ по делам печати,
телерадиовещания и средств массо-
Спешите оформить подписку
вых коммуникаций (свидетельство
на первое полугодие 2006 года!
ПИ № 77-12542 от 24 апреля 2002 г.).
Приобрести новые и старые номера журнала
За содержание статьи ответственность вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
несет автор. За содержание рекламно-
го объявления ответственность несет
рекламодатель. Все права на опубли-
кованные материалы защищены.
Доставка почтой в любую точку России.

96