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

№4(29) апрель 2005

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


www.samag.ru

Почтовая система
Alt-N MDaemon
Базовая настройка
маршрутизатора Cisco
Windows Server Update Services
Apache как прокси-сервер
Виртуальная машина SVISTA
Архивируем данные
с помощью Bacula
Защита коммуникаций
Windows Mobile
Система создания
документации POD
Оптимизация циклов
№4(29) апрель 2005

под Linux
оглавление

СОБЫТИЯ 3 Базовая настройка маршрутизатора


Cisco начального уровня
ТЕНДЕНЦИИ 5, 6 Андрей Маркелов
АДМИНИСТРИРОВАНИЕ andrew@markelov.net 48
Windows Server Update Services Slackware на ракетном топливе,
или Обзор VectorLinux 5.0.1 SOHO
Сергей Сергеев
sergs13@yandex.ru 8 Сергей Яремчук
grinder@ua.fm 51
Автоматизация MS Windows,
или AutoIt как мечта эникейщика Реинкарнация данных
Часть 1
Сергей Супрунов
Алексей Барабанов amsand@rambler.ru 54
alekseybb@mail.ru 11
БЕЗОПАСНОСТЬ
Чудо-юдо Resource Kit
Защита коммуникаций Windows Mobile
Александр Шибенко
pulse@hotmail.r 16 Наталья Мельникова
hataha@yandex.ru 60
Alt-N MDaemon – почтовая система
для средних и крупных компаний Управление безопасностью
Internet Explorer
Роман Марков
stepan-razin@newmail.ru 18 Наталья Мельникова
hataha@yandex.ru 66
Kaspersky Anti-Spam 2.0 + Sendmail
ПРОГРАММИРОВАНИЕ
Денис Городецкий
denik27@nm.ru 25 Система создания документации POD
Часть 2
Система вещания на основе
Windows Media Services 9 Алексей Мичурин
alexey@office-a.mtu-net.ru 72
Михаил Платов
platov@cs.vsu.ru 28 Техника оптимизации под Linux
Часть 3
Apache как прокси-сервер
Крис Касперски
Валентин Синицын kk@sendmail.ru 78
val@linuxcenter.ru 34
ОБРАЗОВАНИЕ
SVISTAть всех наверх!
Сервер для школ
Сергей Яремчук
grinder@ua.fm 38 Сергей Яремчук
grinder@ua.fm 88
Архивируем данные с помощью Bacula
Алексей Гринько
КНИЖНАЯ ПОЛКА 93
zeiba@zeiba.org.ua 42 BUGTRAQ 87, 94

Спешите оформить подписку на второе полугодие 2005 года!


Подписной купон на стр. 95

¹4, àïðåëü 2005 1


конкурс

IT-ТУРНИР СТУДЕНЧЕСКИХ КОМАНД


«КУБОК СЕТЕВЫХ ПРОЕКТОВ MICROSOFT»
Какому человеку, постоянно или время от времени выпол- Среди призов следует особо отметить домашний ин-
няющему роль системного администратора, не хочется ра- тернет-центр ZyXEL P-662 HW ЕЕ, лицензионную копию
сти профессионально и получать достойную оплату? Хотя Windows XP Professional и бесплатное обучение по любому
студенческий турнир IT-команд «Кубок сетевых проектов курсу Microsoft с последующей международной сертифи-
Microsoft» и не решает проблему роста (профессионально- кацией. Участники лучшей команды получат в подарок го-
го и зарплаты) кардинально, он тем не менее дает всем довую подписку на журнал «Системный администратор».
участникам возможность набраться опыта, заработать де- К участию в турнире приглашаются студенты всех мос-
нег и получить весьма неплохие призы. ковских вузов. При этом организаторы заявляют, что «Ку-
«Кубок сетевых проектов Microsoft» – это конкурс сту- бок сетевых проектов Microsoft» – это не олимпиада и не
денческих проектов по созданию функциональной компь- соревнование «для самых умных», так как не всем в ко-
ютерной сети небольшого предприятия. Проект требует пер- манде нужна техническая подготовка. Многое в итоге бу-
воначального планирования, согласно заданному техничес- дет зависеть не только от тех, кто будет настраивать обо-
кому заданию, а затем выполняется на реальном оборудо- рудование, а от тех, кто будет писать техническую доку-
вании командой студентов и защищается перед независи- ментацию и демонстрировать проект независимой комис-
мой комиссией. В ходе проекта студентам предстоит на- сии. Для всех, кто сомневается в собственных силах, Учеб-
строить серверы и рабочие станции, соединить удаленные ный центр ВМК МГУ & SoftLine Academy (на базе которого
офисы предприятия, обеспечить беспроводной доступ и по- проводится турнир) будет проводить специальное обучение,
думать о проблемах безопасности. готовящее к выполнению проекта.
В составе команды может быть 3 или 4 человека. За Поскольку турнир командный, главное – собрать коман-
каждым человеком закрепляется определенная функция: ду и зарегистрироваться on-line на сайте до 31 мая. Лучше
Руководитель проекта, Исполнитель решения, Составитель всего собрать собственную команду из своих друзей. Мож-
проектной документации или Демонстратор решения. но также участвовать индивидуально и собрать свою ко-
Чтобы защитить оборудование от совершенных «чай- манду на специальном семинаре позже.
ников», студенты, претендующие на роли Руководителя про- Само выполнение проекта на оборудовании начнется 1
екта или Исполнителя решения, должны будут пройти не- июня, а награждение победителей состоится 1 октября.
большой технический тест. По описанию турнир кажется достаточно интересным,
чтобы принять в нем участие, потратить немного собствен-
ного времени и вплотную познакомиться с современными
IT-технологиями, такими как ADSL, VPN, беспроводной до-
ступ, распределенная система Active Directory, WEP/WPA и
802.1x. Если учесть, что в рамках турнира также предлага-
ется и обучение, в ближайшее время организаторам сле-
дует ждать настоящего шквала заявок на участие.
Турнир организован компаниями Microsoft и SoftLine при
поддержке московского представительства компании ZyXEL.
Регистрация на него открыта с 4 апреля 2005 г. на сайте
http://www.it-university.ru/itproject.

Организаторы турнира: Генеральный партнер:

Информационная поддержка:

Ãëàâíûé ïðèç îò êîìïàíèè ZyXEL – èíòåðíåò-öåíòð P-662 HW ÅÅ

2
события
Open Source Forum Russia:
27-29 все двери открытому коду
рен приехать в Россию, чтобы выступить с докладом на
Open Source World Russia. Именно Ларри Уолл в 1987 году
АПРЕЛЯ открыты! создал язык программирования Perl. Он удостоился пер-
Как мы уже писали в одном из последних номеров, с 27 по вой награды Free Software Foundations за продвижение ПО
29 апреля в Москве будет проходить Open Source Forum на открытом коде. Господин Уолл также известен как соав-
Russia – первое в России информационно-выставочное ме- тор знаменитой книги «Programming Perl» и создатель про-
роприятие, которое соберет вместе российских, американ- граммы для чтения новостей rn Usenet.
ских и европейских лидеров индустрии Open Source, веду- Свою заинтересованность в участии в конференции под-
щих поставщиков технологий с открытым исходным кодом твердил Рич Боуен (Rich Bowen) СТО компании Cooper
и заказчиков, заинтересованных в развертывании надеж- McGregor CTO и эксперт по Apache. Он является соавтором
ных и экономичных Linux-решений, а также российские IT- книг «Apache Administrator’s Handbook», «Apache Server
компании, которые намерены развивать собственные ре- Unleashed». Господин Боуен внес огромный вклад в проект по
шения на базе программного обеспечения Open Source. развитию Apache, и он регулярно принимает участие в меж-
Сообщаем вам подробности предстоящего события. дународных конференциях, посвященных открытому коду.

Узнайте о новых возможностях Развивайте свой бизнес


Open Source Forum Russia откроет для посетителей мир но- Open Source Forum Russia соберет лучших IT-профессио-
вейших технологий с открытым исходным кодом, совершен- налов, работающих над созданием и продвижением техно-
ных бизнес-приложений на платформе Linux и IT-услуг кор- логий с открытым исходным кодом. На сегодня это мероп-
поративного уровня. Главными темами первого российско- риятие – наилучшая в России площадка для завязывания
го Open Source Forum станут безопасность программных деловых контактов, установления и развития партнерских
продуктов и технологий, возможности и преимущества ис- связей в сфере продуктов, решений и услуг Open Source.
пользования Linux-решений в государственных учреждени- Участвуя в первом российском Open Source Forum, вы оп-
ях России, а также перспективы использования продуктов ределяете дальнейшие пути влияния Linux и технологий
Open Source в корпоративном секторе. Open Source на развитие общественных структур, бизнеса
и технологий России.
Обсуждайте стратегии с лидерами Вход свободный – регистрация обязательна!
мировой ИТ-индустрии Подробную информацию и регистрационную форму
На выставке и конференции Open Source Forum Russia бу- можно найти здесь: http://www.opensource-forum.ru.
дут представлены все лидирующие мировые поставщики IT,
активно участвующие в развитии технологий Open Source, –
IBM, Novell, Hewlett Packard и др. Руководители высшего
звена глобальных корпораций – Ричард Зайбт (President
Novell EMEA) и Адам Джолланс (IBM) – обратятся напря-
мую к представителям государственных организаций и ча-
стных компаний России. Посетив Open Source Forum Russia,
вы получите уникальную возможность услышать выступ-
ления выдающихся экспертов по Linux-технологиям, обсу-
дить с руководителями мировых корпораций стратегичес-
кие тенденции мира Open Source, а также опробовать в дей-
ствии и оценить новейшие продукты и решения на базе ПО
с открытым исходным кодом.
Специально для выступления в конференции в Москву
приезжает Джон «мэддог» Холл (John maddog Hall), испол-
нительный директор Linux International. Господин Холл –
один из основателей движения сторонников открытого кода.
Его перу принадлежит книга «Linux for Dummies», и он яв-
ляется автором многочисленных статей, посвященных спе-
цифике открытого кода.
Свое участие подтвердил один из основателей MySQL –
Дэвид Аксмарк (David Axmark). Господин Аксмарк более 20
лет работает в качестве консультанта в области разработ-
ки ПО. В 80-е годы он увлекся идей свободного программ-
ного обеспечения, и сейчас он является сторонником биз-
нес-модели, основанной на технологиях открытого кода.
В MySQL господин Аксмарк работал над стратегией и ас-
пектами, касающихся бизнеса и коммерции, установки и
документации.
СЕО компании Perl Ларри Уолл (Larry Wall) также наме-

¹4, àïðåëü 2005 3


тенденции
Новости проекта Планируется, что проводимое в рамках
OpenNet.ru OpenNet.ru мероприятие получит про-
Завершен первый конкурс разработчи- должение в серии конкурсов, направ-
ков открытого программного обеспече- ленных на поддержание и стимулиро-
ния, проводимый проектом OpenNet.ru вание русскоязычных разработчиков
совместно с ассоциацией РУССОФТ, открытых программ.
компанией LinuxCenter и журналом «Си-
Максим Чирков
стемный администратор».
Всего на участие в конкурсе было 64-битные серверные
подано 25 заявок, из которых, путем от- платформы от HP
крытого голосования, определились три Пресс-конференция HP, посвященная
победителя: презентации нового поколения серве-
! 1 место – Глеб Смирнов (525 бал- ров HP ProLiant ML570 G3 и DL580 G3,
лов). Разработчик и коммиттер опе- состоялась 5 апреля в отеле «Катери-
рационной cистемы FreeBSD. на» в Москве. Главной темой стали 4-х
! 2 место – Андрей Бешков (254 бал- процессорные сервера третьего поко-
ла). Автор статей и редактор жур- ления на базе новейших 64-разрядных
нала «Системный Администратор», процессоров Intel Xeon MP Cranford
занимается локализацией и про- (3.66 ГГц и 1 Mб L2) и Potomac (3.33 ГГц
движением системы Nagios. и 8 Mб L3). В этом секторе рынка HP
! 3 место – Михаил Кашкин (223 бал- лидирует (44%) и новые сервера, по-
ла). Занимается поддержкой и про- строенные с использованием чипсета
движением проектов python, zope, Intel Twin Castle, лишь усиливают от-
plone и системы Asterisk. Является рыв от конкурентных аналогов. Четы-
автором сайтов: plone.org.ru, xen.ru, ре процессора, соединенные с четырь-
cook.python.ru. мя контроллерами памяти двумя ши-
нами, могут работать с общей памя-
Конкурсанты, занявшие призовые тью, как с однородным пространством.
места, примут бесплатное участие в Такое архитектурное решение, кроме
форуме Open Source Forum Russia. значительного увеличения объема опе-
Также победителям конкурса вручена ративной памяти, позволяет реализо-
годовая подписка на журнал «Систем- вать на ней новые технологии, ранее
ный администратор» от редакции из- доступные только для дисковой памя-
дания и комплект призов от компании ти: зеркалирование, RAID-5 и горячая
LinuxCenter. Кроме того, специальный замена (Hot Plug RAID memory). В слу-
приз от проекта OpenNet.ru, в виде 3 чае отказа происходит определение
тысяч рублей, вручается Константину поврежденного модуля памяти и опе-
Осипову, принимающему активное уча- ративное восстановление информации
стие в разработке СУБД MySQL. за счет избыточности RAID, что позво-
В десятке лидеров: ляет, отключив соответствующий блок
! 4 место (201 балл) Максим Коше- памяти, вынуть его из корпуса и про-
лев (автор Downloader for X); извести замену поврежденного моду-
! 5 место (142 балла) Руслан Стари- ля, естественно, все без разгрузки сер-
цын (WIPFW – Windows-порт пакет- вера. Добавив к этому RAID6 на дис-
ного фильтра ipfw); ковом массиве вместе с бэкапной ба-
! 6 место (141 балл) Владислав Хар- тареей на 72 часа для write-back кеша
чев (автор патчей к огромному чис- SCSI контроллера получаем превос-
лу проектов); ходную платформу для систем высокой
! 7 место (140 баллов) Юрий Хныкин степени готовности, ориентированных
(CLIP – Clipper/xBase-совместимый на приложения с интенсивным исполь-
компилятор); зованием памяти. И не удивительно,
! 8 место (122 балла) Виктор Костро- что на эталонном тесте SAP ® Standard
мин (автор нескольких книг по Linux, Application Benchmark сервер DL580 G3
поддерживает проект rus-linux.net); обеспечил работу на 270 пользовате-
! 9 место (118 баллов) Андрей Мар- лей больше, чем его предшественник
келов (статьи и переводы); второго поколения, что обозначило
! 10 место (102 балла) Андрей Елсу- рост производительности на 40%!
ков (статьи, патчи, помощь в фору-
мах). Алексей Барабанов

¹4, àïðåëü 2005 5


тенденции
Уменьшение числа Изменение курса
лицензий Open Source Mozilla Foundation
Организация Open Source Initiative, как Некоммерческая организация Mozilla
и обещала, начала инициативу по сни- Foundation объявила о том, что более
жению числа используемых лицензий не будет обновлять веб-браузер Mozilla,
Open Source. По словам представителей отдав предпочтение другим откры-
OSI, группа вводит трехбалльную сис- тым продуктам: Firefox и Thunderbird.
тему оценки и в качестве «предпочти- По словам разработчиков, несмотря на
тельных» будет называть лишь неболь- предварительные редакции Mozilla 1.8,
шое число открытых лицензий. Какие альфа- и бета-релизы которой, как вы-
из действующих лицензий удостоятся яснилось, были предназначены для те-
этого статуса, пока еще не решили. стирования движка, финальная версия
Кроме того, OSI приняла три новых ад- «Seamonkey» так и не увидит свет, а
министративных постановления, что ветка 1.7.x станет последней для
помогут проводить проверку появляю- Mozilla. Однако совсем забывать про
щихся лицензий для выяснения меры Mozilla Suite в ближайших планах
их бесполезности. Реакция на данное Mozilla Foundation нет: уже 21 марта
решение не заставила себя ждать: ком- выходит очередное обновление – 1.7.6
пания Intel отозвала свою открытую ли- (одновременно с релизом Thunderbird
цензию, основанную на BSD License. 1.0.2), ни о каких окончательных сро-
ках прекращения поддержки Mozilla не
Linux-инициативы Novell сообщается.
Компания не перестает активное выс-
тупление на ИТ-сцене со своими Linux- Составил Дмитрий Шурупов
предложениями. Сначала Novell объяв- по материалам www.nixp.ru
ляет о том, что до октября 2005 года
агентства государственного сектора HDDlife PRO:
Германии с числом пользователей до профессиональный
500 человек получают скидку в разме- подход к мониторингу
ре 60% на все продукты, объявив глав- состояния жесткого диска
ной целью акции популяризацию идей Компания BinarySense объявила о вы-
миграции на ОС Linux. Позже совмест- ходе профессиональной версии HDD
но с HP и Red Hat запускает веб-сайт life – удобной и функциональной про-
VersiBa, предназначенный для немец- граммы, позволяющей пользователю
ких банков и страховых компаний, же- полностью контролировать состояние
лающих воспользоваться Linux-услуга- жесткого диска своего компьютера и
ми. На новом портале представлена предотвратить таким образом потерю
информация о ПО, специально разра- данных. Использование принципиально
ботанном для финансовой области, а новой уникальной технологии JustNow,
также об офисных и коммуникационных реализованной в программе HDDlife
Linux-предложениях от Novell, Red Hat Pro, делает возможным получение ин-
и других независимых поставщиков. формации о состоянии здоровья и про-
изводительности жестких дисков ком-
Mandrakesoft меняет пьютера при первом же запуске про-
название на Mandriva граммы, исключая необходимость дли-
Причин произошедшей смены назва- тельного предварительного контроля.
ния было две: недавнее слияние ком- Функция AnywhereView обеспечивает
пании Mandrakesoft с бразильским возможность увидеть эти данные из лю-
Linux-производителем Conectiva, а так- бой программы и приложения: в меню
же судебное разбирательство с корпо- «Мой компьютер», в окне «Открыть
рацией Hearst, для завершения кото- файл» в Microsoft Word и т. д. Програм-
рого, как решили, куда проще пойти на ма поддерживает все распространен-
некоторые уступки. Все сервисы и про- ные виды жестких дисков (IDE, Serial
дукты Mandrakesoft получили соответ- ATA, SCSI), обладает удобным и краси-
ствующие наименования: дистрибутив вым пользовательским интерфейсом,
Mandriva Linux, клуб пользователей переведенным на 15 языков, а также
Mandriva Club и т. п. Официальный веб- возможностью настройки проверки по
сайт теперь доступен по адресу расписанию и рассылки уведомлений о
www.mandriva.com. проблемах по e-mail.

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

WINDOWS SERVER UPDATE SERVICES

СЕРГЕЙ СЕРГЕЕВ
Одним из необходимых мероприятий по обеспечению на- Automatic Updates (автоматическое обновление). В крупных
дежного и безопасного функционирования современной ин- компьютерных сетях Windows отслеживание и установка об-
формационной системы является своевременная установка новлений без специального средства может занимать зна-
обновлений для существующих программных продуктов. На чительную часть рабочего времени системного админист-
компьютерах под управлением операционной системы ратора, либо увеличивать трафик интернет-соединения.
Microsoft Windows загрузкой и установкой критических об- Начиная с 2002 года Microsoft предоставляет бесплатный
новлений системных компонентов занимается служба продукт для управления обновлениями в сетях Windows.

8
администрирование
Сначала это был сервер Software Update Services (SUS), и, сайта Microsoft Update, централизованно управлять обнов-
наконец, 22 марта 2005 года на сайте Microsoft (http:// лениями программных продуктов Microsoft в сети органи-
www.microsoft.com/windowsserversystem/updateservices/ зации.
default.mspx) была опубликована информация о выходе в Интерфейс консоли администрирования WSUS, доступ
свет Release Candidate-версии нового продукта – Windows к которой осуществляется по протоколу http через Internet
Server Update Services (WSUS RC). Документация и файлы Explorer версии 6.0 или старше, достаточно понятен и удо-
установки WSUS RC доступны для свободной загрузки с бен для работы. Доступ к средствам администрирования
сайта Microsoft. из другого интернет-браузера, а также из операционных си-
Служба WSUS предназначена для централизованного стем ниже Windows 2000, не поддерживается.
управления обновлениями и исправлениями корпоративных
продуктов Microsoft: Windows XP Professional, Windows 2000,
Windows Server 2003, Office XP, Office 2003, SQL Server 2000,
SQL Server 2000 Desktop Engine (MSDE) 2000, Exchange
Server 2000 и Exchange Server 2003. Скорее всего, набор
поддерживаемых продуктов будет увеличиваться. Это под-
тверждается тем фактом, что при первой же синхрониза-
ции WSUS с сайтом Microsoft Update список обновляемых
продуктов в окне настройки параметров синхронизации зна-
чительно вырос.
От предыдущего продукта Microsoft для управления об-
новлениями (SUS), WSUS отличается значительным набо-
ром функций и возможностей:
! расширен набор обновляемых продуктов;
! объединение клиентских компьютеров в группы, на-
стройка правил обновлений для каждой группы;
! возможность автоматической загрузки и установки не-
обходимых обновлений без ручного вмешательства ад-
министратора;
! развитая система отчетов позволяет получать инфор-
мацию о клиентских компьютерах, а также о требуемых,
загруженных и установленных обновлениях; Ðèñóíîê 1. Ãëàâíîå îêíî êîíñîëè àäìèíèñòðèðîâàíèÿ WSUS
! использование базы данных для хранения настроек сер- Существует возможность настроить службу таким об-
вера, описаний обновлений, состояния клиентских ком- разом, что обновления не будут храниться локально на сер-
пьютеров; вере WSUS, а загружаться по запросу клиентов с сайта
! возможность загрузки так называемых файлов эксп- Microsoft. Тем не менее этот вариант в большинстве случа-
ресс-установки, обеспечивающих ускоренную загрузку ев представляется менее целесообразным, особенно в сред-
и установку обновлений на клиентские компьютеры, но них и крупных сетях с большим количеством компьютеров
увеличивающих время получения обновлений сервером; с одинаковым набором программного обеспечения.
! дочерние серверы WSUS могут управляться как цент- Для сетей с развитой инфраструктурой возможно исполь-
рализованно основным сервером, так и независимо от зование последовательности (цепочки) серверов WSUS, один
него; из которых загружает обновления с сайта Microsoft Update,
! применение технологии Background Intelligent Transfer а остальные синхронизируют свою базу обновлений с ба-
Service (BITS) 2.0 для более эффективного использова- зой этого (или вышестоящего) сервера. Причем имеется
ния сетевого трафика сервером и клиентом WSUS; возможность передачи обновлений с одного сервера WSUS
! передача базы обновлений между серверами WSUS че- на другой не только по каналам связи, но и при помощи
рез переносные устройства хранения информации; процедуры выгрузки на переносное устройство хранения
! специальная утилита WSUSUTIL позволяет управлять информации с последующей загрузкой на другой сервер.
сервером WSUS из командной строки; Это особенно актуально для территориально удаленных
! возможна установка WSUS поверх существующего сер- подразделений организаций в случае отсутствия или низ-
вера SUS, а также при помощи специальной утилиты кой скорости и качества каналов связи с ними (рис. 2).
импорт базы обновлений с другого сервера SUS; WSUS состоит из серверной и клиентской частей. Сер-
! возможность доверять локальным администраторам са- верная часть устанавливается на компьютеры с операци-
мим настраивать порядок загрузки и установки обнов- онными системами Windows 2000 Server или Windows Server
лений на управляемые ими компьютеры. 2003. Клиентами WSUS могут быть компьютеры под уп-
равлением Windows 2000 с установленными Service Pack 3
WSUS является весьма полезным инструментом для си- или 4, Windows XP Professional Service Pack 1 или 2, Windows
стемных администраторов сетей разных масштабов. Эта Server 2003.
служба позволяет снизить трафик интернет-соединения Для своей работы WSUS использует сервер баз данных
организации за счет однократной загрузки обновлений с MS SQL Server 2000. Возможно использование как полно-

¹4, àïðåëü 2005 9


администрирование
функциональной версии MS SQL Server 2000, так и бесплат- загрузки и установки («одобрить», в терминологии WSUS)
ной Microsoft SQL Server 2000 Desktop Engine (MSDE) (дос- только необходимые обновления. Есть возможность авто-
тупна для загрузки на сайте Microsoft) при установке на ком- матизировать операции одобрения обнаружения и установ-
пьютер с операционной системой Windows 2000 Server; или ки обновлений, задав соответствующие условия для пра-
Microsoft Windows SQL Server 2000 Desktop Engine (WMSDE), вил. Другими словами, WSUS можно настроить таким об-
которая включена в состав дистрибутива WSUS и доступ- разом, что синхронизация с Microsoft Update и установка
на только при установке на Windows Server 2003. В базе обновлений будет выполняться в полностью автоматичес-
данных хранятся описания обновлений, конфигурация сер- ком режиме.
вера WSUS, информация о состоянии обновлений клиент- В сетях, использующих Active Directory (AD), настройка
ских компьютеров. параметров автоматического обновления клиентов выпол-
няется при помощи групповой политики, в сетях без AD –
настройкой параметров реестра операционных систем
Windows клиентских компьютеров. Параметры службы ав-
томатических обновлений позволяют настроить получение
и установку обновлений как с участием конечного пользо-
вателя, так и автоматически с последующим уведомлени-
ем о необходимости перезагрузки компьютера.
Протоколирование работы службы WSUS ведется в жур-
налах событий, а также в файлах с расширением *.log, и на
сервере, и на клиенте. Исходя из собственного опыта и со-
общений в форумах, можно сделать вывод, что основные
проблемы при внедрении WSUS возникают при подключе-
нии клиентов к серверу, установке клиентской части WSUS
и необходимых программ для загрузки обновлений. Зачас-
тую диагностика и определение источника проблемы вы-
зывает затруднение даже у опытных администраторов. К
примеру, возникали проблемы при подключении компью-
тера с операционной системой Windows 2000 Professional
SP4 к серверу WSUS. В файле WindowsUpdate.log фикси-
ровалась серия ошибок с кодом 0x80244001. Проблему уда-
лось решить только с помощью специалистов Microsoft, об-
ратившись на сайт Beta News. Она заключалась в непра-
Ðèñóíîê 2. Îäíà èç âîçìîæíûõ ñõåì îðãàíèçàöèè ðàáîòû WSUS вильной настройке компонентов Internet Explorer 5.0 на кли-
Клиент WSUS – служба Automatic Updates (автомати- ентском компьютере. После установки Internet Explorer 6.0
ческое обновление) – работает с сервером по протоколу ошибка исчезла. Поэтому хотелось бы, чтобы содержание
http, поэтому на сервере должна быть установлена и запу- сообщений WSUS (особенно об ошибках) было более ин-
щена служба WWW (World Wide Web) из состава сервера формативным.
IIS (Internet Information Services). Окончательный выход WSUS намечен на конец второго
Администратор сервера WSUS имеет возможность вы- квартала 2005 года. Согласно информации от Microsoft, для
бирать обновления для синхронизации по версии продук- пользователей WSUS RC будет возможно обновление до
та, типу (классу) обновления (драйверы, критические об- финальной версии. На данный момент WSUS RC доступен
новления, накопительные пакеты обновлений, обновления только на двух языках: английском и японском. Окончатель-
системы безопасности, и т. д.) и языку. К сожалению, нет ная версия продукта будет локализована для всех языков,
возможности выбирать конкретные классы обновлений и поддерживаемых серверными и клиентскими операцион-
языки интерфейса в зависимости от продукта. Например, ными системами Windows.
невозможно настроить WSUS так, чтобы синхронизировать Развертывание службы WSUS в сети организации прак-
список обновлений Windows 2000 только для английской тически не связано с дополнительными затратами. Эту
версии и в то же время обновлений Windows XP только для службу можно установить на уже существующий сервер,
русской версии. При включении в списке языков русского и при этом нужно использовать либо имеющийся сервер баз
английского будут синхронизироваться обновления на обо- данных MS SQL Server 2000, либо бесплатный MSDE. Служ-
их языках и для Windows 2000, и для Windows XP (есте- бу можно настроить так, что пользователи даже не будут
ственно, при условии включения загрузки обновлений этих знать о ее существовании. Несмотря на явные выгоды от
операционных систем в настройках списка продуктов). Син- внедрения систем управления обновлениями, многие ад-
хронизацию списка обновлений сервера WSUS с базой министраторы все еще не используют их в своих сетях.
Microsoft Update можно выполнять как в ручном режиме, Думается, что с выходом такого мощного и в то же время
так и автоматически ежедневно в заданное время. После простого и удобного в администрировании средства, как
получения списка доступных обновлений и, как правило, WSUS, количество организаций, использующих централи-
после сбора информации о состоянии обновлений клиент- зованные средства управления установкой обновлений,
ских компьютеров («обнаружения»), можно отметить для увеличится.

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

АВТОМАТИЗАЦИЯ MS WINDOWS,
ИЛИ AUTOIT КАК МЕЧТА ЭНИКЕЙЩИКА
ЧАСТЬ 1 Если не работает ксерокс,
вызывайте сисадмина.
Это ведь электронный прибор,
разве нет?1

АЛЕКСЕЙ БАРАБАНОВ
Со дня появления компьютеров человечество разделилось Например, пользователи IBM 360, работающие в среде
на пользователей и «компьютерщиков». Они стояли по раз- DOS, должны были так или иначе знать и уметь применять
ные стороны от электронной вычислительной машины, иног- язык управления заданиями JCL, а если они работали в кон-
да путаясь в точной принадлежности к своему классу или сольном режиме, то и язык управления работой всей сис-
группе. Но постепенно всё и все стали на свои места. Чис- темы. А вот те же пользователи IBM PS/2, работающие в
ло пользователей увеличивалось, а число «компьютерщи- среде OS/2, уже могли ничего не знать про настройки сис-
ков» лишь уточнялось. Пока компьютеров было мало, и они темы и довольствоваться лишь тем, что им предоставляет
представляли собой большие инженерные сооружения, об- графический интерфейс.
служиваемые целыми бригадами «компьютерщиков», в Таким образом, вопрос отличия пользователей от сис-
составе которых находилось изрядно механиков и элект- темных администраторов свелся к отличию применяемых
риков, то и число пользователей, приходящееся на один ими интерфейсов. Пользователь компьютера, встроенного
компьютер, старались сделать максимально большим. Об- в мобильный телефон, управляет устройством с помощью
щее соотношение пользователей к «компьютерщикам» графического интерфейса и кнопок на корпусе аппарата, а
мало кого интересовало, поскольку главным ресурсом были техник, обслуживающий этот же телефон, пользуется кон-
именно компьютеры. Но с появлением персональных ком- сольными командами или графическим интерфейсом про-
пьютеров, когда пропорция их числа к количеству пользо- граммы специального компьютера, к которому упомянутый
вателей бесповоротно перешла в разряд целых чисел, телефон подключается через технологический разъем JTAG.
иметь бригаду для обслуживания каждого компьютера ста- Другими словами, интерфейс должен соответствовать ре-
ло очень накладно. Именно с этого момента, с момента со- шаемым задачам. Но для персональных компьютеров ин-
здания персональных компьютеров, разработчики как обо- терфейс имел поистине судьбоносное значение. Ведь са-
рудования, так и программного обеспечения стали задумы- мое главное отличие их от компьютеров, использующихся
ваться о снижении затрат на обслуживание своих изделий. коллективно, заключался в монопольном предоставлении
Именно тогда абстрактные «компьютерщики» стали пре- всех ресурсов одному пользователю. Это не могло не ска-
вращаться в системных администраторов, специализиру- заться на способе решения проблемы интерфейса. Многие
ющихся на обслуживании компьютерных систем. Одновре- из первых персональных компьютеров продавались как при-
менно с этим стали появляться и специальные программ- ставка к телевизору, например Sinclair. То есть без телеви-
ные продукты, предназначенные именно для системных ад- зора это был еще не компьютер, а вот после его подключе-
министраторов или ориентированные в первую очередь на ния компьютером уже можно было пользоваться. В этом
решение задач обслуживания. проявлялась важность интерфейса.

1
Здесь и далее, околокомпьютерный фольклор.

¹4, àïðåëü 2005 11


администрирование
Коммерческий успех ПК в очень большой степени зави- де Microsoft Windows превращалась в бесконечную трени-
сел от того, как решался вопрос интерфейса, и насколько ровку кистевых мышц, поскольку ничем практически их воз-
легко этим интерфейсом могли пользоваться неподготовлен- можности не отличались от тех, что были предоставлены
ные потребители. Если бы первые ПК имели такой же тек- рядовым пользователям, менялись лишь заголовки и со-
стовый интерфейс, как мейн-фреймы (для сведения, JCL держание выпадающих окон. Это сыграло свою положи-
многие за сверхзапутанность называли «птичьим языком»), тельную роль – манипулятор типа «мышь» за последнее вре-
то, скорее всего, лишь появившись, эти устройства канули мя из примитивной «каталки» с крыльчатками и обрези-
бы в Лету. Но этого не произошло именно благодаря доступ- ненным шариком превратился в высокотехнологическое ус-
ному и привлекательному графическому интерфейсу. Сна- тройство на основе оптического (лазерного) сканера и ос-
чала главное было в самом экране, то есть в телевизионной нащенное радиоканалом для связи с компьютером. Но ясно,
трубке. Вероятно, людей привлекало то, что с помощью ее что даже если манипулятор «мышь» будет преобразован в
можно было просматривать не только новости и кинофиль- имплантант с компьютерным интерфейсом, это все равно
мы. Но затем в компании Xerox прошли удачные опыты по не позволит одному системному администратору обслужи-
обучению разумных прямоходящих млекопитающих навыкам вать одновременно большее число компьютеров, как этого
использования манипулятора «мышь» с одной кнопкой. Это требует современная IT-индустрия, подчиняющаяся жест-
было поистине революционным событием. И хотя «мышь» с ким рамкам TCO: http://www.telecominfo.ru/?t=2012, табли-
того времени успела увеличить число кнопок, но предложен- ца 2. И рост показателя числа одновременно обслуживае-
ный способ взаимодействия с ПК путем нажатия на кнопки мых пользовательских компьютеров (Full Time Equivalent –
мыши, или «кликов», прочно вошел в обиход компьютерных FTE) сдерживался неразвитостью средств автоматизации
пользователей. И точно так же однозначно заставил принять системных работ в ОС, построенных на основе графичес-
системных администраторов негативную позицию к этому ких интерфейсов.
процессу – «мышиному» кликанью. Нельзя сказать, что все было ограничено лишь техно-
логическими проблемами. Дело в том, что на платформе
Интерфейсы MS Windows, которая долгое время была безальтернатив-
Если сисадмин по телефону говорит вам, ной для персональных компьютеров, применяются в основ-
какие кнопки надо нажимать, почитайте газету. ном проприетарные программные продукты. А решение
Hа самом деле я не хочу, чтобы вы что-то делали. проблемы их массовой установки идет в разрез с требова-
Мне просто нравится звук моего голоса. ниями соблюсти обязательную процедуру регистрации (ле-
Чем же «мышки» так не устроили сисадминов? Дело было гализации, активации) каждой копии программы. Обычно
не столько в манипуляторах «мышь», а в особенностях при- процедура регистрации копии обставлена специальными
меняемого тогда графического интерфейса. Поскольку защитными протокольными и не всегда техническими дей-
главным показателем уровня системного администрирова- ствиями, например, требуется согласиться с лицензией, вве-
ния стало число обслуживаемых одним сотрудником ком- сти серийный номер с бокса или CD-диска, вставить клю-
пьютеров, то средства обеспечения автоматизации систем- чевой диск в лоток привода, провести активацию через
ных операций, установки ОС, ее настройки и управления, Интернет и многое иное, что взбредет в голову озабочен-
приобретали решающее значение. И вплотную решение ного получением прибыли разработчика. Даже сама ОС MS
этого вопроса соприкасалось с обеспечением всех этих же Windows в ее коробочном воплощении не предназначена
работ по каналам удаленного доступа. Естественно, для для создания автоматизированных систем установки на ее
платформ с текстовым интерфейсом и первое, и второе основе. В чем смысл автоматического размножения одной
решалось легко. Существовали простые скриптовые язы- копии, если по маркетинговому замыслу все продаваемые
ки, которые позволяли очень быстро запрограммировать копии этой системы требуют оригинальной для каждой из
любую операцию управления ОС, и средства обеспечения них процедуры регистрации. Были, конечно, оставлены ла-
удаленного доступа в текстовом режиме обеспечивались зейки и прочие оговорки. Ну не могли же «отцы-основате-
на достаточно слабом технологическом уровне коммуника- ли» этой софтверной «пирамиды» просто низвести весь ин-
ций. Например, так решались вопросы администрирования ститут системных администраторов до положения «эникей-
в ОС семейства UNIX. Но в операционных системах, ори- щиков». Поэтому существовали так называемые «корпо-
ентированных на работу в графической среде, все было не ративные» версии, которые допускали серийную установ-
так просто. Во-первых, графический интерфейс с семанти- ку, как копирование одной и той же установочной процеду-
ческой точки зрения полностью определяется прикладной ры на множество компьютеров. Правда, в отместку там вво-
программой. То есть, реакция на активацию кнопки «ОК» в дились иные ограничения, например, на установку обнов-
графическом меню зависит от фазы диалога и от назначе- лений. Но даже такую суррогатную свободу автоматизации
ния программы, его обслуживающей. Во-вторых, обеспе- рутинных операций установки собственной продукции мог-
чение удаленной работы в графической среде требовало ла позволить далеко не каждая фирма-производитель про-
гораздо большей пропускной полосы от каналов связи, чем граммного обеспечения. Поэтому еще одна проблема ав-
работа в текстовом интерфейсе. Все это привело к тому, томатизации работ в среде GUI заключена в том, что мно-
что автоматизация графических настроек практически не гие программные продукты не предназначены для автома-
развивалась. Ну разве что самим разработчиком ОС, в дан- тической установки и настройки в силу дизайна, так как
ном случае Microsoft, путем увеличения сложности вложен- требовали в процессе установки именно «человеческих»
ных меню. И для системных администраторов работа в сре- действий.

12
администрирование
Анимация вместо автоматизации Итак, как же это работает. Такое средство должно иметь
Если вы увидели сообщение «Are you sure?», возможность ввести в управляемую им среду все необхо-
нажмите «Yes» как можно быстрее! димые данные, проанализировать ответ и в меру стандар-
Черт побери, если бы вы не были уверены, тных языковых возможностей организовать интерактивное
вы бы не делали этого, не так ли? выполнение описанного процесса. Все! Если интерфейс
И вот все эти проблемы получили свое решение. Появи- текстовый, что верно в отношении expect, то такая система
лось средство автоматизации операций в графической должна вводить строковые последовательности, принимать
оконной среде, которое имитировало работу человека-опе- и анализировать ответные строки и в зависимости от ре-
ратора, названное AutoIt и предназначенное изначально для зультата и в силу возможностей своего синтаксиса органи-
автоматизации операций установки программ. Сейчас мож- зовывать некоторый алгоритмический процесс. Если интер-
но воспользоваться версией 2.64, загрузив ее с http:// фейс графический, то к перечисленному добавляется GUI-
www.hiddensoft.com/AutoIt, и версией 3.1.0, доступной по специфика. К вводимым данным добавляются управление
адресу: http://www.autoitscript.com/autoit3/index.php .Эти про- поведением окон (обнаружение, активация, минимизация,
граммы распространяются под открытыми лицензиями. Вер- закрытие и проч.), закладок и других элементов оконного
сия 2.64, написанная Джонатаном Беннетом (Jonathan интерфейса, передвижение мыши и нажатия кнопок на ней.
Bennet), в некоммерческих проектах может быть использо- Точно так же, к получаемым данным добавляются события
вана без ограничений, а в коммерческих необходимо вме- по созданию, активации и прочим операциям с окнами. Ну
сте с продуктом указывать ссылку на сайт разработчика. а оставшееся всецело определяется дизайном встроенно-
Версия 3.1.0, авторство которой принадлежит упомянуто- го языка. В версии 2.* используется язык с синтаксисом
му Джонатану Беннету вместе с AutoIt Team, уже идет под подобным ассемблерному с разделителями в виде запятых
GNU GPL, что свидетельствует о зрелости подхода и о не- и примитивными управляющими операторами, основанны-
возможности в дальнейшем изъять эту программу из сво- ми на условных переходах. В 3-й версии это уже практи-
бодного оборота, переведя под какую-нибудь закрытую чески полноценный язык программирования с привычны-
лицензию. На обе версии есть, кроме прилагаемого файла ми управляющими структурами, включая функции, и как
Help на английском языке, еще и русская версия докумен- следствие goto из употребления в этом релизе изъят. И та
тации в формате chm, подготовленная Валерием Ивановым. и другая версии позволяют, как интерпретировать опера-
Если рассмотреть эту программу отдельно от контекста торы, записанные в отдельный скриптовой файл, так и со-
предполагаемого применения, то это всего лишь средство здавать исполняемую версию на основе runtime-компонен-
перехвата анализа состояния оконного интерфейса и эму- тов. Но версия 3.* «тяжелее» в полтора раза. Поэтому ис-
ляции нужных сообщений якобы от лица оператора. Прак- полняемые файлы на основе 2-й версии имеют размер от
тически смотрится как демонстрационная мультипликация. 40 Кб, а версии 3.* – от 116 Кб. Вероятно, из-за большего
Но с точки зрения языковой машины, например, юниксово- числа встроенных функций. Кроме уже перечисленного вер-
го bash, интерпретирующей некоторый скрипт, все действия сия 3.* имеет встроенные тайм-ауты в операторах ожида-
выглядят точно так же мультипликативно. Только это нико- ния, что позволяет решать проблемы «зависаний» неустой-
му не заметно, если происходит не на экране, а в текстовой чивых приложений, но в практике автоматизации стандар-
консоли. И тем более что в текстовых интерпретаторах есть тных действий можно с успехом обойтись и без этого. Дру-
возможность прятать и перенаправлять обрабатываемые гими словами, решения, построенные на версии 2.* не ут-
потоки символов. Но можно назвать и полную текстовую ратили актуальности для 90% задач, решаемых с помощью
аналогию из мира *nix обсуждаемой здесь программе. Это AutoIt, но релиз 3.* позволяет создавать полноценные при-
известное средство expect. Оно позволяет заменить для ложения, если такое нужно. В интернет-ресурсах, посвящен-
некоторой прикладной программы общение с текстовыми ных AutoIt есть даже примеры игровых программ.
терминалами и тем самым автоматизировать работу опе-
ратора путем эмуляции процесса его работы. Применяется Установка программного обеспечения
это обычно для автоматизации работ с интерактивными Если вы занимаетесь на вечерних компьютерных курсах,
средами, например с ftp. Примечательно, что и expect, и обязательно проверьте свои знания на своем
AutoIt имеют в своем составе средство, облегчающее со- и всех соседских компьютерах.
здание сценариев путем записи перехваченных реальных Мы любим работать до 2:30 ночи, исправляя это.
интерфейсных данных. Конечно, в AutoIt это пока очень Думаю, теории достаточно. Далее рассмотрим разнообраз-
незрелое ручное средство, которое в модальном окне по- ные примеры реального использования предложенной тех-
казывает характеристики выбранного элемента графичес- нологии. Здесь не ставится целью писать большие и изощ-
кого интерфейса. ренные программы. Главное, чтобы это были работоспо-
С точки зрения технологии AutoIt всего лишь использует собные и применимые в практике скрипты и программы.
возможности, заложенные в API графического интерфейса. Часть из них будет разобрана в тексте, другая просто ука-
Того же самого результата можно добиться с помощью Visual зана в ссылках и предназначена для самостоятельного изу-
Basic или даже C++. Но в том-то и разница, что использо- чения. Многие из них будут использованы в заключитель-
вание AutoIt позволяет избежать программирования на «тя- ном комплексном примере создания диска для автомати-
желых» языках. Ибо сисадмин не программист, и ему нуж- ческой установки MS Windows. Начиная с самой простой
но не писать программы, а лишь решать стандартные про- предложенные программы будут усложняться постепенно,
блемы автоматизации, возникающие в ходе его работы. что не мешает после прочтения всей статьи вернуться к

¹4, àïðåëü 2005 13


администрирование
началу и переработать рассмотренные программы с исполь- // óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõ
зованием всего арсенала AutoIt. SetTitleMatchMode, 2
DetectHiddenText, on
В качестве первого практического примера рассмотрим // óáåðåì âñå îêíà ñ ýêðàíà
автоматизацию установки самого AutoIt. Поскольку мы рас- WinMinimizeAll
// ïîäîæäåì ñåêóíäó
полагаем сразу двумя работоспособными релизами, 2-м и Sleep, 1000
3-м, то решим задачу автоматической установки AutoIt вер- // çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèè
Run, autoit-v3-setup.exe
сии 3 с помощью скрипта для 2-й. Для этого установим AutoIt // äîæäåìñÿ íóæíîãî îêíà è íàæìåì Next
версии 2 в систему и создадим с помощью текстового ре- WinWaitActive, AutoIt v3.1.0 Setup
Send, {ENTER}
дактора Notepad файл setup_autoit3.aut. Расширение «aut» // âûâåäåì îêîøêî ñ ñîîáùåíèåì
является стандартным для скриптов AutoIt2. Запишем сле- MsgBox, 0, AutoIt, Setup done
// çàâåðøåíèå
дующую последовательность операторов: Exit

// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõ Для проверки отменим установку и запустим скрипт по
SetTitleMatchMode, 2
DetectHiddenText, on новой.
// óáåðåì âñå îêíà ñ ýêðàíà После остановки снова завершим наш скрипт, развер-
WinMinimizeAll
// ïîäîæäåì ñåêóíäó нем все окна и проанализируем результат, изображенный
Sleep, 1000 на рисунке.
// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèè
Run, autoit-v3-setup.exe
// âûâåäåì îêîøêî ñ ñîîáùåíèåì
MsgBox, 0, AutoIt, Setup done
// çàâåðøåíèå
Exit

Это очень короткая программка станет основой разра-


батываемого скрипта. Все операторы снабжены коммента-
риями и совершенно очевидны по содержанию. Но прежде
чем запускать ее на выполнение загрузим «AutoIt Reveal
Mode» – специальное средство для просмотра информации,
скрытой в структурах связанных, с окнами в MS Windows.
Затем запустим скрипт и дождемся завершения. После
появления сообщения о завершении закроем его нажати-
ем на кнопку «ОК» и снова развернем все окна. Должно
получиться так, как показано на рисунке.

Ðèñóíîê 2
Здесь аналогично первому запуску проследим за участ-
ками, отмеченными красным. Задача заключается в том, что
надо «отловить» новое окно и активировать нужное действие.
Но окно имеет такое же название, что и предыдущее! Тогда
смотрим в окошке перехватчика, какие еще строковые зна-
чения нам доступны. Находим строку «License Agreement».
Эта строка как нельзя лучше отражает специфическое зна-
чение полученного окна. И поскольку здесь снова нужное
действие сразу стоит по умолчанию, то после обнаружения
этого окна нужно снова отправить в него Enter. Меняем текст
следующим образом:

// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõ


SetTitleMatchMode, 2
DetectHiddenText, on
Ðèñóíîê 1 // óáåðåì âñå îêíà ñ ýêðàíà
WinMinimizeAll
Здесь обратите внимание, что в окне AutiIt v2.64 приво- // ïîäîæäåì ñåêóíäó
дится весь перечень текстовых строк с активного окна, на- Sleep, 1000
// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèè
чиная с его заголовка. Именно на эти строки и будет далее Run, autoit-v3-setup.exe
«ловиться» установщик в нашем скрипте, и поскольку кноп- // äîæäåìñÿ íóæíîãî îêíà è íàæìåì Next
WinWaitActive, AutoIt v3.1.0 Setup
ка Next уже выделена как активная, то сразу, как только Send, {ENTER}
скрипт дождется активности окна с названием «AutoIt v3.1.0. // àíàëîãè÷íî äîæäåìñÿ license agreement
WinWaitActive, , License Agreement
Setup», можно отправлять этому окну Enter, что приведет к Send, {ENTER}
нажатию активной кнопки, то есть к переходу на следую- // âûâåäåì îêîøêî ñ ñîîáùåíèåì
MsgBox, 0, AutoIt, Setup done
щий экран установщика. Вот текст следующей, более слож- // çàâåðøåíèå
ной фазы разработки: Exit

14
администрирование
Обратите внимание, как изменился синтаксис операто- to v3 Converter». Такой подход позволяет сразу получить
ра WinWaitActive, поскольку теперь нужно определить окно синтаксически верную программу. Вот результат:
не по названию, а по тексту внутри, то детектируемая стро-
ка записывается в третьем поле. Снова прекратим установ- // V2.64 to V3.0.100 (Version 1.0.6)
// Converted with AutoItV2toV3 [Version 1.0.6]
ку и проделаем те же операции, что и в предыдущем запус- // (C) Copyright 2004 J-Paul Mesnage.
ке. После остановки должен получиться результат, сходный // óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõ
AutoItSetOption ( "WinTitleMatchMode", 2 )
с изображенным на рисунке. AutoItSetOption ( "WinDetectHiddenText", 1 )
// óáåðåì âñå îêíà ñ ýêðàíà
WinMinimizeAll ( )
// ïîäîæäåì ñåêóíäó
Sleep ( 1000 )
// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèè
Run ( 'autoit-v3-setup.exe' )
// äîæäåìñÿ íóæíîãî îêíà è íàæìåì Next
WinWaitActive ( 'AutoIt v3.1.0 Setup' )
Send ( '{ENTER}' )
// àíàëîãè÷íî äîæäåìñÿ license agreement
WinWaitActive ( '', 'License Agreement' )
Send ( '{ENTER}' )
// îêíî ñ âûáîðîì ìåñòà óñòàíîâêè
WinWaitActive ( '', 'Choose Install Location' )
Send ( '{ENTER}' )
// çàâåðøåíèå óñòàíîâêè
WinWaitActive ( '', 'Click Finish to close' )
Send ( '{ENTER}' )
// âûâåäåì îêîøêî ñ ñîîáùåíèåì
$__msgbox = MsgBox ( 0, 'AutoIt', 'Setup done' )
// çàâåðøåíèå
Exit

Ðèñóíîê 3 Как видно по тексту, никаких существенных изменений


Здесь все аналогично второму такту разработки скрип- новый синтаксис не несет. Скрипт после конвертации был
та автоматизации. Находим строку для детектирования помещен в файл setup_autoit3.au3, расширение у которого
окна, определяем, какие кнопки надо нажать. Все записы- имеет стандартное для версии 3 значение. Но программа
ваем в скрипт. Точно так же происходит разработка и чет- делает все то же самое. Если преобразовать ее в исполня-
вертого такта. Собственно, можно прогнать всю установку емый код с помощью имеющегося в версии 3 компилятора,
в непрерывном цикле и просто запоминать строки, опреде- то после удаления AutiIt v3 из системы его можно снова ус-
ляющие каждое из окон установщика, и записывать клави- тановить с помощью новой программы. Это и будет про-
атурные коды, которые вводятся в этом процессе. Програм- веркой работоспособности.
мирование в AutoIt чрезвычайно простое занятие. В итоге Совершенно таким же способом можно создать сред-
получается следующая программа: ства автоматической установки практически любого про-
граммного обеспечения вне зависимости от особенностей
// óñòàíîâèì ðåæèì äåòåêòèðîâàíèÿ ñêðûòîãî òåêñòà â îêíàõ использованного разработчиками установщика. Конечно
SetTitleMatchMode, 2
DetectHiddenText, on же, в реальной работе можно сразу начать создание скрипта
// óáåðåì âñå îêíà ñ ýêðàíà в среде AutoIt версии 3, и тогда для определения строк, по
WinMinimizeAll
// ïîäîæäåì ñåêóíäó которым происходит детектирование нужных окон, надо
Sleep, 1000 будет воспользоваться «перехватчиком» окон из версии 3,
// çàïóñòèì óñòàíîâêó èç òîé æå äèðåêòîðèè
Run, autoit-v3-setup.exe который называется «AutoIt v3 Active Window Info». Но в ос-
// äîæäåìñÿ íóæíîãî îêíà è íàæìåì Next тальном последовательность действий будет точно такой
WinWaitActive, AutoIt v3.1.0 Setup
Send, {ENTER} же: запускаются приложения, определяются названия окон
// àíàëîãè÷íî äîæäåìñÿ license agreement или тексты внутри них, записываются клавиатурные нажа-
WinWaitActive, , License Agreement
Send, {ENTER} тия (например, клавиша ALT как активатор меню) и все это
// îêíî ñ âûáîðîì ìåñòà óñòàíîâêè переводится в скрипты AutoIt. Полученные скрипты, преоб-
WinWaitActive, , Choose Install Location
Send, {ENTER} разованные в исполняемые файлы, можно разместить в
// çàâåðøåíèå óñòàíîâêè соответствующих дистрибутивных директориях под крас-
WinWaitActive, , Click Finish to close
Send, {ENTER} норечивыми названиями auto_setup.exe. И в практической
// âûâåäåì îêîøêî ñ ñîîáùåíèåì деятельности установку очередного 1С клиента можно све-
MsgBox, 0, AutoIt, Setup done
// çàâåðøåíèå сти к запуску только одной программы. Более того, можно
Exit даже поделиться почетной обязанностью установить 1С с
тем бухгалтером, которому это нужно. Чего же проще –
Эта программа устанавливает AutoIt v3 в автоматичес- кликнуть один раз!
ком режиме. Её можно преобразовать в исполняемый, а не Но точно так же, как не вся работа системного админи-
интерпретируемый код. Но предлагаю прогнать ее полнос- стратора сводится лишь к установке прикладного программ-
тью и далее перейти к работе в AutoIt v3, который как раз и ного обеспечения, так и возможности AutoIt не ограничива-
будет установлен к этому моменту. Прежде всего, восполь- ются лишь обслуживанием программ типа setup.exe. Но об
зуемся утилитой перевода тестов из 2-й версии в 3-ю «v2 этом в следующей части.

¹4, àïðåëü 2005 15


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

ЧУДО-ЮДО RESOURCE KIT

АЛЕКСАНДР ШИБЕНКО
В многолетнем споре между приверженцами Linux1 и сто- Что же такое Windows 2000 Resource Kit? Это семь то-
ронниками Windows первые в качестве одного из аргумен- мов документации и установочный CD. После инсталляции
тов часто утверждают, что большинство задач по управле- пакета, а она необходима, если нужна его полная функцио-
нию производимыми компанией Microsoft ОС невозможно нальность3, на жестком диске появляется занимающий по-
выполнить без графического интерфейса, и администра- чти 60 Мб каталог C:\Program Files\Resource Kit. Он содер-
тор фактически становится его заложником. Что ж, доля жит электронные версии вышеупомянутых семи книг и еще
истины в этом есть, но целиком согласиться с ним можно, четырех справочников, руководство и документацию по ути-
только если забыть (или не знать) о том, что в дополнение литам, а также сами утилиты общим числом около трехсот.
к операционным системам «парни из Редмонда» уже дав- Выражаясь языком Хрюна Моржова: «Внушает»...
но выпускают Resource Kit2, включающие комплект отпеча- Описывать здесь каждую утилиту в отдельности не име-
танной документации и набор утилит. ет смысла. Имеющаяся документация достаточно подроб-

1
Именно Linux, т.к. по наблюдениям знатоки AIX, HP-UX, Solaris и других *nix-подобных систем редко тратят время на участие в подобных
дебатах.
2
Правда, за отдельную плату и с определенными лицензионными ограничениями.
3
Многие утилиты нормально работают и без инсталляции.

16
администрирование
на, кроме синтаксиса, хорошо структурирована, содержит желательно, а может, даже и необходимо использовать до-
еще и примеры. В зависимости от решаемых задач утили- полнительный инструментарий вроде Excel или Access.
ты в ней разделены на следующие основные группы: В завершение приведем примеры из реальной практи-
! Утилиты управления компьютером (computer manage- ки. Наверняка во многих организациях руководство спра-
ment tools). Сюда входят инструменты для работы с ре- шивает у системного администратора, кто из пользовате-
естром, для управления сервисами и процессами и для лей на каких принтерах и в каких количествах распечаты-
обработки журналов событий. вает документы. Для решения воспользуемся входящей в
! Утилиты для развервертывания системы (deployment группу диагностических средств утилитой dumpel, позво-
tools). Типичный представитель утилит этой группы – не- ляющей обрабатывать журналы событий:
безызвестная sysprep.exe.
! Диагностические средства (diagnostic tools). Это несколь- dumpel -f pr.txt -l system -m print -e 10
ко утилит по отображению информации о распределе-
нии так называемой «кучи»4, snmp-монитор, компилятор В данном случае из системного журнала (ключ -l system)
MIB и ряд других. выбираются события «печать» (ключ -m print) с кодом, соот-
! Утилиты для работы с файлами и дисками (file and disk ветствующим постановке задания в очередь печати (ключ -e
tools). Основные представители этой группы – разнооб- 10) и помещаются в текстовый файл pr.txt. Каждая строка
разные средства для копирования. файла соответствует одному заданию. Как видно, здесь при-
! Инструментарий для Internet Information Service (IIS tools). сутствует и имя пользователя, и название принтера, и коли-
Здесь можно найти сканер безопасности, стресс-тест чество напечатанных страниц (последнее число в строке).
для веб-сервера и предопределенные шаблоны безо- Наиболее простым способом получения требуемого отчета
пасности для его конфигурирования. мне представляется написание макроса в Excel. Приводить
! Утилиты управления сетью (network monitor tools). Боль- его здесь, пожалуй, не стоит. Для умеющего программиро-
шая часть утилит этой группы позволяет из командной вать человека сделать это не составит большого труда, а
строки управлять пользователями и группами и выпол- новичку подобную задачу вполне можно рекомендовать в
нять другие администраторские задачи на локальном и качестве имеющего прикладное значение практикума.
удаленном компьютерах. И еще один пример. Однажды возникла необходимость
! Утилиты оценки производительности (performance tools). после перезагрузки компьютера копировать на него с сер-
Их назначение понятно и без комментариев. вера некий каталог, в свою очередь, содержащий подката-
логи и файлы. Но необходимо было получить «зеркальную
Кроме этих, достаточно представительных групп, суще- копию» серверного каталога за исключением пустых подка-
ствует еще несколько, объединяющих всего по нескольку талогов. Для этого был написан следующий командный файл,
утилит: который вызывался штатным планировщиком задач по со-
! утилиты отладки (debugging tools); бытию «загрузка системы» от имени администратора:
! утилиты рабочего стола (desktop tools);
! утилиты для Internet Explorer (IE tools); @echo off
sleep 60
! инструментарий для сценариев (scripting tools); now.exe > c:\log\copy.log
! утилиты безопасности (security tools). net use m: \\server\backup /user:oper 123
if errorlevel 1 echo net use error >> c:\log\copy.log
robocopy.exe m:\daily\ d:\archive\ ↵
Многие утилиты позволяют получать информацию или /log:c:\log\rc.log /np /mir /s
if errorlevel 1 echo robocopy error >> c:\log\copy.log
выполнять какие-либо действия не только на локальном ком-
пьютере, но и при наличии соответствующих прав, на уда- Утилиты now.exe, sleep.exe и robocopy.exe входят в со-
ленном. Так, c помощью команды вида: став Resource Kit. Now.exe выдает в стандартный вывод те-
кущую дату и время. Sleep.exe нужна для того, чтобы под-
netsvc /list \\REMOTESERVER ключить каталог сервера после того, как запустятся все не-
обходимые службы и сервисы. Иначе команда net use мо-
можно получить список запущенных сервисов на компью- жет просто не выполниться. Ну а требуемую величину за-
тере REMOTESERVER, а команда: держки можно подобрать опытным путем. И наконец, зер-
кальное копирование (ключ /mir) с помощью robocopy.exe
shutdown \\REMOTESERVER /r содержимого каталога m:\daily\ в d:\archive\. При этом если
d:\archive\ содержит каталоги и файлы, не имеющие ана-
его перезагрузит. Даже этой информации достаточно для логов в m:\daily\, они будут удалены. Ключ /s запрещает
того, чтобы понять, какие возможности открываются перед копировать пустые каталоги, а /np подавляет вывод на эк-
системными администраторами и каким мощным потенци- ран информации о ходе копирования. Ключ /log:c:\log\rc.log,
алом обладают эти средства. Усилия, затраченные на их надеюсь, понятен без комментариев.
освоение, с лихвой окупятся за счет так любимой и цени- На самом деле robocopy.exe обладает широкими воз-
мой юниксоидами автоматизации многих рутинных задач. можностями, включая копирование разрешений NTFS, что
Правда, для полноценной обработки информации крайне может оказаться весьма полезным.

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

¹4, àïðåëü 2005 17


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

ALT-N MDAEMON –
ПОЧТОВАЯ СИСТЕМА
ДЛЯ СРЕДНИХ И КРУПНЫХ
КОМПАНИЙ

РОМАН МАРКОВ
Alt-N MDaemon – почтовый сервер корпоративного уровня ! RelayFax – факс-сервер с возможностями OCR и под-
для ОС семейства Windows. Уже с первых версий данный держкой TWAIN. Входящие и исходящие факсы марш-
продукт пользовался заслуженной популярностью среди ад- рутизируются в соответствии с гибкими правилами и
министраторов Windows-систем, благодаря чему постоян- могут включать различные критерии, такие как OCR,
но совершенствовался и дополнялся новыми возможнос- Caller-ID или факс-аппарат.
тями. На сегодняшний день MDaemon – это SMTP/POP/IMAP
сервер с полным набором возможностей: защита от спама, Системные требования
безопасный доступ к почте через веб-интерфейс при помо- и первоначальная установка
щи обычного браузера, удаленное администрирование, а MDaemon не слишком требователен к ресурсам при мини-
также при установленном MDaemon AntiVirus защита вашей мальной нагрузке, однако при ее возрастании (увеличение
системы от почтовых вирусов. количества учетных записей, многочисленные правила сор-
MDaemon AntiVirus был разработан Alt-N совместно с тировки, большой поток писем) эти требования резко ме-
Kaspersky Labs для обеспечения хорошего уровня встроен- няются. Прежде всего необходимо обеспечить достаточно
ной защиты для пользователей MDaemon. Он перехватыва- большой объем оперативной памяти. Именно ее может не
ет, подвергает карантину, исправляет и/или удаляет любое хватить при большой нагрузке на почтовый сервер. Произ-
сообщение, в котором найден вирус. Большой набор гибких водитель (www.altn.com) указывает следующие минималь-
правил для Content Filter позволяет производить дополнитель- ные требования к оборудованию:
ный анализ, сортировку и обработку писем. Например, яв- ! Pentium III 500 МГц и выше.
ное запрещение вложений в виде исполняемых файлов по- ! 512 Мб RAM (рекомендуется 1 Гб).
зволяет максимально защититься от новых вирусов, сигна- ! Свободное место на диске для установки – 30 Мб + до-
туры которых еще не включены в антивирусную базу. полнительное место под хранение писем, а также log-
К сожалению, антивирусные продукты других произво- файлов.
дителей не анонсированы на официальном сайте Alt-N, что ! Microsoft Windows 95 OSR2/98/ME/XP/NT/2000/2003.
является минусом для администраторов, предпочитающих ! Winsock 2 (для старых версий ОС).
другие решения. Однако «прикрутить» к Mdaemon другой ! Internet Explorer 4.0 и выше.
антивирус все же можно, используя нетривиальные подхо-
ды. Например, правила сортировки с запуском сторонней К сожалению, на сайте производителя не указывается,
программы при поступлении письма, а также запуск про- для какой нагрузки необходимы именно такие требования.
граммы при наличии сообщений в очереди. Помимо этого Поэтому ниже приведены проверенные автором на практи-
можно использовать online-сканирование папок, в которых ке данные о необходимых ресурсах.
сохраняются временные файлы при получении письма, а Многолетний опыт использования почтового сервера
также папок пользователей. Причина отсутствия штатной MDaemon (начиная с версии 3.xx и до сегодняшней – 7.xx)
интеграции с другими антивирусами автору данной статьи, показал, что он идеально подходит для организаций любого
к сожалению, неизвестна. масштаба – от малого бизнеса до крупной компании. Поэто-
Помимо этого с MDaemon интегрируются следующие му использование этого продукта даже для сети из 5-10 ком-
продукты от Alt-N: пьютеров оправдано: гибкая система сортировки практичес-
! LDaemon – LDAPv3-сервер (Lightweight Directory Access ки по любым условиям и в зависимости от этих условий –
Protocol). С LDaemon ваши адресные книги путешеству- выполнение разнообразных действий (например, при нали-
ют вместе с вами. LDaemon скачивается отдельно и чии в письме вложения с «запароленным» архивом – отсечь
предлагается пользователям MDaemon бесплатно. вложение, отправить автоответ, запустить указанную про-
! MDaemon GroupWare – вместе с MDaemon Pro раскры- грамму, и изменив тему письма, доставить пользователю),
вает функции групповой работы Microsoft Outlook, ис- наличие веб-интерфейса и другие описанные выше возмож-
пользуя MDaemon в качестве серверной платформы. ности помогают сделать любую почтовую систему безопас-
Пользователи Outlook могут совместно использовать ной и удобной. Причем минимальные системные требова-
папки Календаря, Задач, Контактов, Заметок и Дневни- ния, указанные производителем, являются несколько завы-
ка без применения Microsoft Exchange Server. шенными применительно к объему оперативной памяти.

18
администрирование
Автор статьи использует в качестве почтового сервера на деле Features. Мы выбираем полный функционал – Run
базе MDaemon 7.xx компьютер с объемом оперативной па- MDaemon in «Advanced Mode». В следующем окне будет
мяти 256 Мб. При этом в системе функционирует около 200 предложено установить MDaemon в качестве системной
почтовых ящиков, встроенный антивирус, веб-интерфейс, службы. Устанавливаем флажок «Setup MDaemon as a
а также довольно много правил сортировки. Правда, одно- system service». Оставляем флажок «Start MDaemon» в пос-
временное использование всех возможностей, дополни- леднем окне мастера и выбираем «Finish». Сервер должен
тельных модулей, а также дальнейший рост количества запуститься. Если по каким-либо причинам этого не про-
пользователей как раз и увеличит этот лимит до 512 Мб. изошло при первоначальной установке, выберите из меню
Для установки почтового сервера рекомендуется ис- «Пуск → MDaemon» ярлык «Start MDaemon». Если вы ис-
пользовать ОС семейства Windows NT (Windows NT/2000/ пользуете не тестовую, а полноценную версию программы,
XP/2003), так как MDaemon, как и любое серверное прило- прежде всего необходимо активировать ваш программный
жение, лучше устанавливать в качестве системной служ- продукт. Делается это в меню «Help → Activate your
бы. Дистрибутив скачиваем с официального сайта: http:// software». Запустится мастер активации. Вам будет пред-
www.altn.com/download. ложено активировать автоматически через интернет или
В этой статье описывается установка и настройка анг- вручную, введя код активации. На этом установка завер-
лийской версии MDaemon. Существует локализованная сто- шена, и сервер готов к настройке.
ронней компанией русская версия (www.MDaemon.ru), од-
нако чаще всего системные администраторы не доверяют Начальная настройка почтового сервера
«нефирменным» локализациям, предпочитая оригинальные Настройка почтового сервера начинается с конфигуриро-
версии от производителя продукта. вания системных параметров. Не будем расписывать все
Если система будет масштабной и критичной к сбоям, опции каждого меню конфигурирования – это тема отдель-
выбираем качественный и надежный носитель, например, ного справочника. К тому же встроенная справочная сис-
RAID-1 из SCSI-дисков. В окне «Registration Information» вво- тема подробно и полностью описывает назначение каждой
дим имя приобретенной лицензии и имя компании, а также настройки (на английском языке). Опишем только те опции,
регистрационный ключ. Продукт имеет 30-дневный trial-пе- которые необходимо изменить либо проверить их значение.
риод, в течение которого его можно протестировать бес- Для настройки в качестве примера можно использовать при-
платно. После окончания срока работы пробной версии не- веденные скриншоты.
обходимо будет активировать продукт. Меню «Setup → Miscellaneous Options». На закладке GUI
Сразу после установки запустится мастер, при помощи задаем параметры запуска сервера MDaemon. Тут все ин-
которого можно ввести первоначальную информацию о по- дивидуально и зависит от личных предпочтений. Скажем
чтовой системе. В первом окне «What is your domain name» лишь, что полезно установить опцию «Start MDaemon…» в
введите имя своего домена (то, что находится справа от «In the system tray» и «Create Sessions…» в «In a hidden
символа @, не включая сам символ). Например, тестовый window». Первая при старте сворачивает MDaemon в сис-
домен: lagman.spb.ru. Здесь же можно кликнуть по ссылке темный трей, а вторая задает запуск активных сессий (от-
и воспользоваться услугами бесплатного сервиса по реги- правка и получение почты) в скрытом окне, которое не бу-
страции доменов «dns4you». Однако такой способ хорош дет мешать при просмотре логов и настроек. Параметр «Max
только для тестового режима. number of log lines…» задает количество строк, которое бу-
Для создания корпоративной почтовой системы реко- дет отображаться в окнах протоколирования сессий перед
мендуется зарегистрировать доменное имя, воспользовав- их затиранием. Обращаем внимание на то, что эти пара-
шись услугами провайдеров. В следующем окне «Please метры влияют только на количество отображаемых на эк-
Setup your first account» необходимо ввести первую учет- ране строк – размер лог-файлов задается в другом меню.
ную запись нашей почтовой системы, которой автомати- Раздел «Composite log windows contains» позволяет вклю-
чески будут делегированы полные права по конфигуриро- чить/отключить отображение требуемых окон протоколиро-
ванию домена, а также сопоставлен alias «Postmaster» как вания. То есть если мы не используем LDAP и IMAP – мож-
обязательный согласно требованиям RFC. Вводим имя, но смело отключить вывод этих окон (рис. 1).
предпочитаемый вами login (без символа @ и имени доме- На закладе Servers оставляем почти все, как есть. В поле
на – они будут автоматически добавлены при создании), а «POP/IMAP server always accept connections from IP» устанав-
также пароль. Помните, что пароль этой учетной записи дол- ливаем адрес локальной петли 127.0.0.1 или IP-адрес на-
жен быть сложным. Убедимся, что флажок «This account is шего сервера. Подключения с этого адреса будут возмож-
an administrator – full configuration access is granted» уста- ны всегда, независимо от параметров защиты MDaemon.
новлен и перейдем на следующую страницу мастера. В окне Если ваш сервер предоставляет POP3 доступ для клиен-
«Please Setup Your DNS» вводим адреса DNS-серверов, пре- тов с тонкими и нестабильными интернет-каналами, полез-
доставленных нам провайдером подключения к сети Ин- но установить флажок «POP DELE command immediately
тернет, либо других доступных DNS-серверов. Флажок «Use removes messages from mailbox». Тогда уже полученные
Windows DNS-settings» снимаем – такие настройки лучше клиентами сообщения будут удаляться немедленно и при
прописывать явно. обрыве связи получение продолжится с первого еще не
В следующем окне мастера выбираем режим, в кото- доставленного сообщения (в обычном режиме полученные
ром будет запускаться сервер – Easy или Advanced. Отли- сообщения удаляются только после завершения сессии
чия данных режимов описаны на сайте производителя в раз- POP3, и при обрыве связи доставка начинается с начала,

¹4, àïðåëü 2005 19


администрирование
дублируя уже полученные письма и создавая лишний тра- солютно все почтовые адреса почтового сервера. Данные
фик). При необходимости можно установить лимит на объем списки позволяют организовывать корпоративную рассыл-
отсылаемых/получаемых по протоколу SMTP писем. Для ку для всех сотрудников, что является очень удобным спо-
этого предназначены опции Data Transfer Limits. Крайне ре- собом оповещения работников предприятия. При соблюде-
комендуется установить значение Max acceptable SMTP нии политики сложных паролей и прочих параметров безо-
message size отличным от 0. В противном случае неопыт- пасности можно быть уверенным, что спаммеры не восполь-
ные пользователи будут беспрепятственно отсылать пись- зуются данным списком, так как по умолчанию отправить
ма любой величины (частый пример – огромные фотогра- письмо для списка рассылки может только администратор
фии или видеоролики). Приемлемое значение – от 2500 до почтовой системы либо пользователь, которому админист-
10000 Кб. Не рекомендуется устанавливать значение ме- ратором явно делегировано такое право.
нее 2500 Кб, так как стандартный размер дискеты 1.44 Мб
при пересылке достигает примерного объема 2,2 Мб. Бо-
лее 10 Мб также устанавливать не стоит – приучайте пользо-
вателей разбивать файлы на части. Даже если ваш почто-
вый сервер отправит такое сообщение – не всякий почто-
вый сервер его примет. В итоге сообщение вернется к вам,
создав никому не нужный входящий трафик. Если передаю-
щий клиент поддерживает команду ESMTP SIZE, то соеди-
нение будет разорвано сразу. В противном случае MDaemon
начнет прием сообщения, и после завершения соединения
отвергнет его доставку адресату. Опция «Kill the connection
if data transmission exceeds» позволяет задать суммарный
объем данных на сессию, при превышении которого дан-
ное соединение будет разорвано (рис. 2).

Ðèñóíîê 2

Ðèñóíîê 3
Флажок «Require strong passwords» предписывает исполь-
зовать только сложные пароли (не менее 6 символов, вклю-
чающие в себя буквы и цифры в разных регистрах, а также
не содержащие частей названия ящика) к ящикам для пре-
дотвращения возможности несанкционированного доступа.
Ðèñóíîê 1 Если вы будете предоставлять доступ к почтовому серверу
На следующем скриншоте видно, что сеанс был завер- извне – крайне рекомендуем использовать именно такие
шен принимающим сервером сразу после того, как обна- пароли, причем увеличить их длину до 8 символов. Мини-
ружилось несоответствие размера принимаемого письма мальная длина пароля задается в файле MDaemon.ini
и заданного на сервере ограничения (рис. 3). (MDaemon\Apps) → Секция [Special] → MinPassword
Следующие закладки до «Misc» пропускаем – для нашей Length=XX. Пароли для всех протоколов едины и задаются в
настройки они пока не нужны. На закладке «Misc» проверяем свойствах каждой учетной записи (либо, если используется
и устанавливаем флажки «Create ‘Everyone Lists’», «Create сквозная аутентификация в домене NT/AD, берутся из соот-
‘MasterEveryone’ Lists». В предыдущих версиях MDaemon дан- ветствующей БД).
ные опции были включены по умолчанию. Они создают спис- Флаг «Periodically check for new MDaemon updates» раз-
ки рассылки. Everyone@<domain> включает в себя все почто- решает серверу MDaemon самостоятельно проверять на-
вые адреса конкретного почтового домена (почтовых доме- личие обновлений на сайте производителя. В случае появ-
нов может быть несколько), а MasterEveryone@<domain> – аб- ления новой версии значок в трее будет мигать (рис. 4).

20
администрирование
вание старых файлов, возраст которых превысил количе-
ство дней, задаваемое в поле «Automatically ZIP and archive
log file older than ….. days». При этом следует помнить, что
данная опция действует, только если на предыдущей зак-
ладке выбрана опция «Create a standard set of log files».
На закладке Options отмечаем те службы, протокол ра-
боты которых необходимо записывать в log-файлы. Также
устанавливаем флажки «Always log to screen» и «Log session
in real time». Первая опция устанавливает одновременный
вывод протоколов, записываемых в log-файлы на экран, а
вторая – разрешает этот вывод в режиме реального вре-
мени, а не постфактум после осуществления операции. Это
полезно при анализе и устранении возможных ошибок.

Ðèñóíîê 4
Теперь настроим размер и расположение log-файлов.
По непонятной причине (ошибка разработчиков или сомни-
тельная задумка) независимо от пути установки MDaemon
создает на диске C: папку MDaemon и в ней подпапку Logs,
куда и записывается часть log-файлов. Сразу исправим эту
ошибку: остановим сервис MDaemon, откроем файл \Apps\
MDaemon.ini и заменим значение переменной LogFiles в
секции [Directories] на путь установки MDaemon. После это-
го перенесем все файлы из папки C:\MDaemon\Logs в пап-
ку установки, удалим с диска C: уже ненужный каталог и
снова запустим службу. Затем в окне «Setup → Logging»
настроим необходимые нам параметры.
На закладке «Log Mode» необходимо выбрать вид имен
log-файлов (стандартные или основанные на дате/дне неде- Ðèñóíîê 5
ли). Для общего комплексного анализа рекомендуется выс-
тавить «Create a standard set of log files». Если необходимо Настройка доменной почтовой системы
осуществлять поиск записей по дням – лучше воспользовать- Определимя со способом доставки почты. MDaemon – пол-
ся набором log-файлов с именами, основанными на днях нофункциональный почтовый сервер и имеет различные ме-
недели или дате. То же самое с опциями «Log detailed mail- ханизмы для получения почты, которые при необходимости
sessions» (записывать подробный протокол сессий) и «Log могут использоваться одновременно. Первый способ – на-
summarized mail sessions» (записывать краткий протокол сес- стройка MX-записи с наивысшим приоритетом в DNS-запи-
сий). Если необходимо будет анализировать возможные про- сях вашего домена на внешний IP-адрес сервера MDaemon.
блемы с отправкой/приемом писем по протоколу SMTP – Помните, что такой способ требует от вас внимательной на-
лучше записывать подробный протокол. Это может понадо- стройки безопасности почтового сервера. В противном слу-
биться при рассмотрении жалоб пользователей, связанных чае вы рискуете предоставить спамерам открытый relay, что
с функционированием системы доставки почты. Если log- неизбежно повлечет за собой жалобы вашему провайдеру,
файл служит только для краткого анализа успеха/неудачи а также создаст большой паразитный трафик.
(например, анализ системой подсчета трафика) – лучше Замечание. Если почтовый сервер, на который установ-
выбирать краткий формат файлов. Разумеется, что подроб- лен MDaemon, находится внутри локальной сети и выходит в
ное протоколирование требует гораздо большего дисково- Интернет, используя технологию NAT, необходимо органи-
го пространства. Опция «Log each service into separate log зовать проброс портов (Port-Map) с 25-го порта внешнего ин-
file» позволяет разделять протоколы различных служб терфейса сети на внутренний интерфейс почтового серве-
MDaemon по отдельным файлам, что, несомненно, удоб- ра. Также не забудьте прописать шлюз по умолчанию и DNS-
нее при поиске необходимой информации. сервера в свойствах TCP/IP-соединения по локальной сети.
Опции закладки «Maintenance» позволяют задать макси- Второй способ – это создание провайдером доменного
мальный размер log-файлов, а также настроить архивиро- почтового ящика, в который будут доставляться абсолют-

¹4, àïðåëü 2005 21


администрирование
но все письма, посланные на ваш почтовый домен (или до- писем для неопознанных адресатов, такие сообщения бу-
мены, если их несколько). MDaemon будет получать пись- дут либо приняты и направлены пользователю Postmaster,
ма с этого ящика по протоколу POP3, сортировать и скла- либо – так же, как и в предыдущем случае – возвращены
дывать в папки существующих пользователей. В этом слу- отправителю. Как выход, при грамотном планировании пе-
чае при расположении сервера MDaemon на интернет-шлю- ревода почтовой системы от провайдера к себе можно на-
зе компании не забудьте о принудительном запрете входя- строить MX-запись с более высоким приоритетом на свой
щих подключений к порту TCP/25 внешнего интерфейса для IP-адрес уже после полной настройки почтового сервера.
предотвращения попыток несанкционированной рассылки В случае перевода на MDaemon системы с получением
с использованием вашего сервера. В некоторых случаях почты по протоколу POP3 с единого ящика, перед настрой-
порт TCP/25 требуется открыть, например, если вы разре- кой параметров в DomainPOP (см. далее) необходимо со-
шите использовать ваш сервер в качестве SMTP-сервера здать все необходимые ящики.
для обладателей ящика на нем. В этом случае необходимо Произведем настройку нашего почтового домена (Primary
очень тщательно спланировать безопасность, например, Domain). Меню «Setup → Primary Domain». На закладке
включив обязательную авторизацию SMTP-сессий и задав «Domain» уже указаны настройки, которые мы ввели во вре-
всем учетным записям сложные пароли. Mdaemon поддер- мя установки почтового сервера. При необходимости их
живает шифрованные протоколы аутентификации, а так- можно изменить. Если используется прямое получение по-
же STARTTLS, STLS для SMTP, POP3, IMAP-сессий. Поми- чтовым сервером почты по протоколу SMTP (MX-запись со-
мо этого имеется возможность шифровать сессии веб-дос- ответствует нашему внешнему IP-адресу), то в поле «Primary
тупа к почтовым ящикам. Настройку можно произвести в Domain IP» указываем именно этот IP-адрес. В противном
меню Security – SSL/TLS/Certificates. случае можно указать либо внутренний IP, либо адрес ло-
В обоих случаях мы получаем полную независимость кальной петли 127.0.0.1.
от провайдера (кроме содержания DNS-записи, если, ко- На закладке «Delivery» указывается способ отправки пи-
нечно, вы не делаете это своими средствами) и возмож- сем нашим почтовым сервером во внешний мир:
ность управления своими почтовыми ящиками внутри на- ! «Always send every outbound email to the server specified
шей сети, мгновенно активизируя внесенные изменения. below» – всегда отправлять исходящие сообщения на
Поддерживается и третий способ получения почты – сервер, указанный в поле «Mail server». В поле «Mail
ETRN. Он объединяет в себе преимущества первого метода server» указывается SMTP-сервер вашего провайдера.
и безопасность второго и заключается в том, что провай- ! «Try direct delivery but send problem emails to the server
дер собирает всю адресованную вам почту в одну очередь, specified below» – пытаться отправить напрямую, а в слу-
которую и перенаправляет на ваш IP-адрес по протоколу чае неудачи – через хост, указанный в поле «Mail Server».
SMTP, когда ваш хост доступен, либо по сигналу от вашего ! «Always send all outbound email directly to the recipient’s
сервера на разбор очереди. В этом случае мы должны бу- mail server» – всегда отправлять почту только напрямую
дем разрешить входящие подключения на порт TCP/25 толь- получателям.
ко для Relay-сервера провайдера.
Устанавливаем расписание обмена почтой: «Setup → Закладка Ports позволяет изменить стандартные при-
Event Scheduling». Для постоянной доставки почты через вязки служб MDaemon к портам. В случае если вы поменя-
определенный интервал времени устанавливаем флажок ли какое-либо значение, для вступления изменений в силу
«Deliver/collect remote mail at this interval» и передвигаем ука- необходимо нажать «Bind to new port values now». В про-
затель интервала на необходимое нам время. Также уста- тивном случае изменения вступят в силу только после пе-
навливаем флаг «Deliver remote mail immediately upon резагрузки службы MDaemon.
reception» для того, чтобы полученные письма сразу достав- В закладке «DNS» находятся данные об используемых
лялись пользователю. Если вам необходимо создать другое, почтовым сервером DNS-серверах, указанные нами еще на
более гибкое расписание, то в вашем распоряжении все сред- этапе установки. При необходимости их можно сменить. По-
ства для этого. Снимаем флаг: «Deliver/collect remote mail at мимо этого можно настроить параметры опроса MX- и A-за-
this interval» и вручную настраиваем любое расписание. Если писей, согласно которым будут производиться действия над
вы используете Dial-Up, то здесь же можно настроить пара- письмами в случае получения сообщений об ошибках. В ча-
метры подключения и отключения (RAS setup). стности, установка флага «Use ‘A’ record IP addresses found
Помните, что если почтовый сервер будет получать пись- within MX record packets» разрешает серверу MDaemon при
ма напрямую от отправителей по протоколу SMTP, то пись- отсутствии MX-записи для домена попытаться доставить
ма начнут доставляться сразу после создания домена, по- сообщения по IP-адресу, возвращенному A-записью получа-
этому если вы переводите на MDaemon уже существующую теля. Более подробно о протоколе SMTP можно прочитать в
внешнюю систему, сначала необходимо завести учетные RFC1891 (для хорошего понимания принципов обмена по
записи пользователей (почтовые ящики), а только затем почтовым протоколам настойчиво рекомендуется это сде-
производить открытие порта TCP/25 на вход. Однако это лать). Установка флага «Immediately return mail when DNS says
спорное решение, т.к. в данном случае отправителям бу- domain does not exists» позволит сразу же возвращать от-
дут возвращены все письма, которые были посланы ими в правителю письмо, если DNS-запрос имени домена возвра-
момент перевода MX-записи домена на ваш IP-адрес. Если тил результат «Домен не существует». Это предотвратит
же сначала открыть порт TCP/25, а затем заводить пользо- постановку такого письма в очередь системы повтора, что, в
вателей, то в зависимости от настройки условий доставки общем-то, является в данном случае бесполезным (исклю-

22
администрирование
чения составляют некорректные переносы зон их держате- only. При этом создаваемые нами учетные записи пользова-
лями, однако это редкое исключение из правил). телей уникальны и принадлежат только конкретному доме-
Раздел «Timers» предоставляет возможность изменить ну. То есть при создании новой учетной записи через Account
величины тайм-аутов на различные события при соединении. Manager в системе с несколькими доменами нам необходи-
На закладке «Sessions» рекомендуется настроить пре- мо ввести его Login, а также указать, к какому домену он
дельное количество одновременных сессий различных ти- принадлежит, выбрав из выпадающего списка требуемый.
пов. При медленной исходящей скорости канала рекомен- При импорте пользователей из базы NT/AD необходимо выб-
дуется установить величину «Maximum concurrent SMTP рать, в какой домен будут внесены записи. Если необходи-
outbound sessions» значением не более 2-4. В любом слу- мо, чтобы один пользователь получал почту с разных доме-
чае даже при наличии быстрого канала не стоит злоупот- нов, необходимо создать соответствующие алиасы.
реблять этим параметром. Приемлемая величина этой пе- Если почтовый сервер будет забирать почту у провайде-
ременной для быстрых каналов (512 kbit/s и более) – 10-20. ра по протоколу POP3 c доменного почтового ящика, то пос-
Параметр «Maximum concurrent SMTP inbound sessions» ледним шагом первоначальной настройки MDaemon будет
влияет на максимальное количество одновременно входящих указание свойств этого ящика (их может быть несколько).
сессий по протоколу SMTP. В случае превышения заданной Меню «Setup → DomainPOP». На закладке Account устанав-
величины клиенты получат сообщение «Server too busy». ливаем переключатель «Enable DomainPOP mail collection
Закладка «Unknown mail» позволяет указать на действие, engine» и вводим адрес POP3-сервера, имя и пароль для
которое необходимо производить с письмами, адресат кото- доступа. Если ящиков, с которых будет доставляться почта,
рых не опознан. Подразумевается, что доменный адрес в до- несколько (например, при наличии нескольких почтовых до-
ставленном письме соответствует обслуживаемым доменам менов), то можно задать параметры остальных ящиков, на-
MDaemon, однако такого пользователя в системе не существу- жав «Extra hosts» и отредактировав текстовый конфигура-
ет. Имеется возможность возвращать письмо отправителю ционный файл по указанному в нем же шаблону. После при-
с комментарием «No such user», а также отправлять копию нятия изменений MDaemon будет собирать почту с указан-
такого письма администратору почтового сервера (копия от- ных ящиков согласно расписанию, созданному нами в меню
правляется как вложение). Возврат письма отправителю воз- «Event Scheduling». Можно задать дополнительные парамет-
можен только при получении почты по протоколу SMTP. ры, например, оставлять письма на сервере – «Leave a copy
На закладке «Pruning» задаются образцы доменных of message on host server», не скачивать (и при необходимо-
квот. Здесь рекомендуется задать значения, отличные от сти удалять прямо с сервера) письма, размер которых боль-
0, так как в противном случае редко проверяемые ящики, ше, чем указанная величина, – «Don’t download messages
на которые приходит большое количество писем, будут за- larger than [XX] KB (0 = no limit)». При медленном входящем
нимать много места на диске. Это же замечание относится канале полезно установить опцию «Download messages
к ящикам пользователей, которые бездумно устанавлива- according to size (small messages first)». В этом случае сооб-
ют в свойствах почтового клиента опцию «Оставлять пись- щения будут скачиваться согласно их размеру – меньшие по
ма на сервере», не указывая максимальный срок их хране- размеру в первую очередь. Это позволит большому количе-
ния. Разумные сроки удаления неактивных учетных запи- ству малых по размеру сообщений быть полученными быст-
сей и устаревших писем для каждой организации свои. рее, не заставляя многих получателей страдать из-за одно-
Просто рекомендуем не забывать про наличие этого раз- го пользователя, которому было послано многомегабайтное
дела. Письма в Mdaemon хранятся для каждого ящика от- письмо. На закладке «Foreign mail» обязательно установите
дельно, в папке Users. Каждое письмо представляет собой опцию «Do not deliver mail addressed to non-local addresses».
отдельный файл с расширением *.msg. При парсинге полученных сообщений в поле TO: могут по-
Раздел «Archival» позволяет отправлять копию абсолют- падаться другие, нелокальные для вас адреса. Данная оп-
но всех входящих и исходящих писем указанным пользова- ция запретит пересылать такие письма указанным адреса-
телям (адреса разделяются запятой), а также архивировать там. Она наиболее безопасна с точки зрения защиты от не-
их в общую IMAP-папку, доступ к которой по умолчанию санкционированной рассылки с использованием вашего по-
имеет только Postmaster. Данная опция применяется для чтового сервера.
контроля службой безопасности любой проходящей через
ваш почтовый сервер информации. Заведение учетных записей
«Dequeue» – данная закладка служит для настройки по- пользователей
лучения почты от провайдера по ETRN. Укажите здесь ад- Управление учетными записями производится при помощи
рес, по которому ваш сервер должен посылать сигнал о на- меню Accounts. MDaemon поддерживает импорт учетных за-
чале сеанса доставки вам почты по протоколу SMTP со сто- писей пользователей из домена NT/Active Directory и сквоз-
роны провайдера. ную аутентификацию пользователей. Для этого выбираем
Если у нас несколько почтовых доменов, то необходимо из меню Accounts – Importing опцию «Import accounts from the
их сконфигурировать. Заходим в Setup – Secondary Domains, NT SAM database». Если имя домена NT/AD не совпадает с
указываем имя для вторичного домена, в поле Ip Address созданным нами, то в открывшемся окне указываем домен,
указываем IP адрес для этого домена. Если подключение к из которого будет производиться импорт, а также имя сер-
вторичному почтовому домену будет осуществляться с ис- вера, если оно не было найдено автоматически, и нажима-
пользованием IP адреса, не совпадающего с IP адресом пер- ем кнопку Refresh. Если учетные записи для импорта не по-
вичного домена, необходимо указать Bind sockets to this IP явились (либо появились далеко не все – например, только

¹4, àïðåëü 2005 23


администрирование
учетные записи администраторов домена), то скорее всего
учетная запись, от имени которой запущена служба MDaemon
не имеет привилегии «SE_TCB_NAME» в указанном доме-
не. Для выхода из этой ситуации необходимо создать в до-
мене учетную запись с минимальными правами доступа,
единственной задачей которой будет получение доступа на
чтение базы учетных записей домена. Затем в свойствах
службы MDaemon необходимо настроить ее запуск с этими
учетными данными и перезапустить службу (эту настройку
можно произвести в меню «Setup → System Service»). После
этого перезапускаем процедуру импорта, выделяем требуе-
мые учетные записи, указываем способ задания паролей для
создаваемых пользователей почтового сервера, и подтвер-
ждаем выбор кнопкой «Import Selected Account». Не стоит
устанавливать опцию «Set account passwords equal to account
names», так как это выходит за рамки любых требований
безопасности. Лучше всего установить сквозную аутентифи-
кацию в домене (не забыв при этом усилить политику безо-
пасности паролей в домене), либо вручную задать единый
сложный пароль и затем вручную генерировать и изменять
пароли для каждой учетной записи. По умолчанию пользо-
ватели могут изменять свои пароли двумя способами – че-
рез веб-интерфейс и при помощи специально сформирован-
ного письма на адрес Mdaemon@domain содержащего в поле
письма адрес электронной почты и пароль (однако паро-
ли, которые проверяются через сквозную аутентификацию
NT/AD, изменить таким образом не удастся). Если данные
аутентификации совпадают, то тело письма интерпретиру-
ется сервером как последовательность инструкций. Более
подробно о них можно узнать из встроенной системы по- Ðèñóíîê 6
мощи. Из соображений безопасности рекомендуется сме- «Forwarding» – позволяет отсылать копии письма на ука-
нить стандартные шаблоны прав пользователей, по умол- занные (через запятую) адреса. Установив флаг «Retain a
чанию запретив им изменение собственных настроек – осо- local copy of forwarded mail», копия письма будет оставать-
бенно возможность самостоятельной смены пароля, адре- ся в ящике пользователя.
сов пересылки и автоответчика (меню «Accounts → Account «Admin» – здесь можно делегировать пользователю пра-
Manager → New Account Default»). В любом случае при пра- ва глобального администратора (имеющего полный доступ
вильной политике паролей сменить данные настройки воз- к администрированию почтового сервера), либо только ад-
можно, только зная пароль учетной записи. Кстати, из сооб- министратора домена, который обладает только правами по
ражений безопасности тема таких писем не записывается в конфигурированию данного домена, используя WebAdmin
файлы и окна протоколирования (рис. 6). (описывается в разделе «Настройка веб-доступа»).
Дальнейшее управление учетными записями пользова- «Quota» – здесь настраиваются персональные квоты
телей, а также заведение пользователей, не используя им- пользователей. Если опция квотирования включена, то при
порт из домена, производится через меню Accounts, исполь- превышении заданного количества сообщений или объе-
зуя консоль Account Manager, а также другие функции дан- ма, занимаемого письмами, последующие письма для та-
ного меню. Рассмотрим свойства отдельной учетной запи- кого пользователя будут отвергаться с сообщением «User
си, прокомментировав назначение некоторых параметров over quota». В отличие от квот домена по умолчанию, кото-
в различных закладках. рые первоначально применяются на все ящики, данная оп-
«Account» – кроме понятных всем стандартных парамет- ция перекрывает общие настройки, задавая персональные
ров имеется кнопка «Aliases», нажав на которую можно за- квоты. Таким образом можно выделять привилегированных
дать для учетной записи так называемые «Алиасы» (допол- или наоборот, более ограниченных пользователей.
нительные почтовые адреса, почта для которых также бу- Последним действием при запуске системы в действие
дет доставляться данному пользователю). То есть для ука- является проверка запуска минимально необходимых сер-
зания множества почтовых адресов, письма с которых дол- висов MDaemon – POP3, SMTP, Antivirus, DomainPOP. Это
жны адресоваться одному пользователю, достаточно со- делается в левой части основного окна программы. Если
здать для него алиас. Например, после создания алиаса нужный нам сервис имеет статус «Inactive», дважды кликни-
vasya@domain.com для пользователя user2@domain.ru все те по нему и проконтролируйте, что статус изменился на
полученные письма, в поле адресата которых будет встре- «Active».
чаться адрес vasya@domain.com, будут доставляться в ящик В следующем номере читайте продолжение статьи про
пользователя user2@domain.ru. более тонкую первоначальную настройку MDaemon.

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

KASPERSKY ANTI-SPAM 2.0 + SENDMAIL

ДЕНИС ГОРОДЕЦКИЙ
Ответив на простой вопрос: «Сколько ненужных писем было Все правила и профили уже предустановлены, на этом
удалено из почтового ящика?», вы легко можете рассчи- мы остановимся чуть позже, но подробно описывать каж-
тать, какие объемы занимает трафик, создаваемый ненуж- дое из них мы не будем, т.к. эта тема отдельной статьи. Вы
ной почтой. Спамеры забрасывают нас рекламой в таком можете сами понять, что необходимо, а что вы не будете
количестве, что при чистке своего ящика удалить «полез- использовать, после того как ответите на несколько вопро-
ное письмо» можно, даже не заметив его среди мусора. сов: какая информация нужна, а какая нет, критично ли по-
Способов борьбы с этими преступниками довольно мно- терять «полезное письмо», можно ли пропустить несколь-
го. Рассматривать все сразу в одной статье смысла особо- ко «ненужных» писем и т. п.
го не имеет, разве что в виде краткого обзора. Что нужно, чтобы KAS смог работать:
Предлагаю остановиться на рассмотрении следующей ! Операционная система Linux или FreeBSD 4.х, 5.х (тес-
схемы: Kaspersky Anti-Spam (KAS) + Sendmail. тирование проходило на Red Hat 9.0).
Первое, что мне поручили, когда я пришел на новое мес- ! Процессор Intel Pentium III с частотой не менее 500 МГц.
то работы, – это борьба со спамом. Читая документацию и ! Оперативная память не менее 256 Mб.
разбираясь в конфигурации, был приятно удивлен тем, что ! Наличие установленных программ wget, bzip2.
разработчики данного продукта на славу потрудились, до ! Наличие одной из почтовых систем: Sendmail, Postfix,
того как представить его для повсеместного использования. Exim, Qmail, Communigate Pro.
Итак, что такое KAS 2.0 и каковы принципы его работы.
Как и большинство ныне действующих фильтров, KAS Замечание. Перед установкой я всегда рекомендую де-
фильтрует почтовое сообщение в процессе приема, т.е до лать резервные копии тех конфигурационных файлов, ко-
того как письмо попадет в почтовый ящик пользователя. KAS торые будут затронуты, в данном случае это файлы с на-
обрабатывает сообщение и, руководствуясь правилами и стройками вашего почтового агента.
действиями, установленными администратором, может: Внедрение продукта не требует особенных знаний и
! доставлять получателю в неизменном виде; навыков, т.к. все делается при помощи входящих в пакет
! блокировать получение; инсталляторов, начиная от установки программ из состава
! генерировать сообщение о невозможности приема пись- KAS и заканчивая интеграцией в почтовую систему.
ма;
! добавлять или изменять заголовок. # rpm -i <èìÿ ïàêåòà>

¹4, àïðåëü 2005 25


администрирование
подразумевает: В каталоге CONFSRC имеются следующие подкаталоги:
! создание пользователя и группы mailflt; ! CONFSRC/profiles – каталог, содержащий файлы с опи-
! установку всех программ, входящих в состав KAS, со- саниями профилей;
здание и установку скрипта запуска всех сервисов, ко- ! CONFSRC/emails – каталог, включающий файлы со
торый выполняется при перезапуске операционной си- списками адресов e-mail;
стемы; ! CONFSRC/iplists – каталог файлов со списками IP-ад-
! запуск необходимых программ и сервисов; ресов;
! создание записи в crontab пользователя mailflt для ав- ! CONFSRC/dnsblacklists – каталог файлов со списками
томатического запуска скрипта загрузки обновлений служб DNSbasedRBL;
базы контентной фильтрации. ! CONFSRC/samples – каталог, содержащий файлы с об-
разцами спамерских писем.
Затем командой:
Собственно говоря, разработчиками было сделано мно-
# /usr/local/ap-mailfilter/bin/install-key ↵ гое, чтобы упростить жизнь администратора, и все конфи-
<èìÿ_êëþ÷åâîãî_ôàéëà>
гурационные файлы после инсталляции, мной, были остав-
устанавливаем лицензионный ключ. лены без изменения за исключением blacklist_ip.xml (о нем
Перед началом работы необходимо создать список ли- мы поговорим позже) и kas-thhtpd.conf (в данном файле оп-
цензированных почтовых адресов, для которых почта бу- ределены настройки для доступа к конфигурации через веб-
дет проверяться на наличие спама. интерфейс). Здесь была изменена всего одна строка.
Интеграция в почтовую программу происходит тоже до-
статочно легко и безболезненно. # document root
dir=/usr/local/ap-mailfilter/www
Запускаете: user=mailflt
port=2880
# /usr/local/ap-mailfilter/bin/MTA-config.pl host=0.0.0.0 # ïî óìîë÷àíèþ çíà÷èòñÿ 127.0.0.1,
# ÷òî îçíà÷àåò äîñòóï ê êîíôèãóðàöèè
# ÷åðåç âåá òîëüêî ñ ëîêàëüíîãî õîñòà
Это универсальный скрипт, который определит тип по- pidfile=/usr/local/ap-mailfilter/run/kas-thttpd.pid
чтового агента и изменит его конфигурацию.
Также для каждой почтовой системы существуют конк- Конфигурирование через веб предоставляет удобный,
ретные программы настройки. Особых отличий я не нашел, интуитивно понятный интерфейс. В нем есть свои плюсы и
и в том случае, если ваш МТА настроен нестандартно, все минусы. Данный инструмент позволит человеку, заменяю-
равно нужно будет указать правильное размещение фай- щему системного администратора, быстро и с минималь-
лов конфигурации МТА. ными усилиями управлять настройками фильтра, даже если
Для Sendmail скрипт-интегратор запускается командой: он ни разу не работал с UNIX-подобными системами. Од-
нако самому же администратору для понимания принципов
#/usr/local/ap-mailfilter/bin/sendmail-config.pl функционирования системы я бы рекомендовал изменять
конфигурационные файлы используя редакторы, входящие
Для интеграции kas-milter с Sendmail в конфигурацион- в состав ОС.
ном файле /etc/sendmail.cf прописывается: Действия с письмами, определенными как спам, могут
быть как самыми жесткими (отказ принять сообщение), так
Xfilter1, S=local:/usr/local/ap-mailfilter/run/ ↵ и достаточно мягкими (например, приписать сообщению до-
kasmilter.sock, F=R
O InputMailFilters=kasfi полнительный заголовок-«ярлык» для последующей обра-
ботки в почтовой программе пользователя). Применение
Подробное описание настройки фильтров в sendmail.cf различных действий к спаму – прерогатива администрато-
приведено в документации по Sendmail ра почтового сервиса. Скажу лишь одно, в состав KAS вхо-
На этом будем считать процесс установки законченным дит несколько предустановленных профилей с определен-
и перейдем к конфигурированию. ными наборами правил и действий по этим правилам. Для
Конфигурационные файлы Kaspersky Anti-Spam находят- тех, кто не хочет, и даже для тех, кто хочет изобретать ве-
ся в каталоге /usr/local/ap-mailfilter/conf/src (далее . CONFSRC) лосипед, того, что есть, хватит с лихвой. Существующие
и его подкаталогах. общие профили различаются «строгостью» оценки призна-
Непосредственно в CONFSRC находятся файлы с фик- ков спама (профили Soft признают спамом меньше писем,
сированными именами: а профили Hard, больше писем) , использованием или не
! profiles.xml – список профилей фильтрации; использованием проверок по RBL (а также на наличие име-
! emails.xml – набор списков e-mail-адресов; ни посылающего сервера в DNS).
! iplists.xml – набор списков IP-адресов; Оставив общим профилем тот, который был по умолча-
! dnsblacklists.xml – набор списков служб DNS-based RBL; нию, проблем с распознаванием спама я не обнаружил. За
! samples.xml – список пользовательских образцов спа- месяц после изменения настроек антиспамного фильтра
мерских писем; фильтр отследил порядка 25000 спам писем (и это всего на
! settings.xml – файл дополнительных настроек фильт- 10 лицензированных пользователей) при этом произошло
ра. всего лишь одно ложное срабатывание.

26
администрирование
Сделать активным профиль можно редактируя файл: </Rule>
...
# /usr/local/ap-mailfilter/conf/src/profiles.xml
</Profile>
<?xml version="1.0" encoding="koi8-r"?>
<Profiles> Теперь пришло время остановиться на файле blacklist_
<Common>
<ProfileRef active="no" file="detect-standard.xml" ↵ ip.xml. Выглядит он примерно вот так:
name="Spam Detection Standard"/>
<ProfileRef active="yes" ↵ <?xml version="1.0" encoding="koi8-r"?>
file="detect-standard-no-rbl.xml" ↵ <IPList description="This list contains ip-addresses
name="Spam Detection Standard (no RBL &amp; ↵
DNS check)"/> of spam senders relays. Must be filled up by user."
name="Spam Senders' Relays">
<ProfileRef active="no" file="detect-soft.xml" ↵ <IP mask="0.0.0.0"/>
name="Spam Detection Soft"/>
<ProfileRef active="no" file="detect-soft-no-rbl.xml" ↵ <IP mask="212.185.0.0/16"/>
<IP mask="66.112.0.0/17"/>
name="Spam Detection Soft (no RBL &amp; ↵ <IP mask="62.84.0.0/16"/>
DNS check)"/>
<ProfileRef active="no" file="detect-hard.xml" ↵ ...
name="Spam Detection Hard"/>
<ProfileRef active="no" file="detect-hard-no-rbl.xml" ↵
name="Spam Detection Hard (no RBL &amp; ↵ <IP mask="141.156.192.0/18/>
<IP mask="24.239.0.0/16/>
DNS check)"/>
<ProfileRef active="yes" file="syslog.xml" ↵
name="Logging"/> </IPList>
</Common>
<Personal> Значение атрибута mask может быть указано в двух
<ProfileRef active="yes" file="rcpt-root.xml" ↵
name="root: No Filtering"/> форматах: aaa.bbb.ccc.ddd/nn или aaa.bbb.ccc.ddd (равно-
<ProfileRef active="no" file="do-mark-subject.xml" ↵ значно aaa.bbb.ccc.ddd/32).
name="Marking Spam - Subject"/>
<ProfileRef active="no" file="do-mark-keywords.xml" ↵ Поддерживая его в актуальном состоянии, вы можете
name="Marking Spam - Keywords"/> быть уверенными, что 95% тех писем, которые нам не же-
<ProfileRef active="yes" file="do-archive.xml" ↵
name="Archiving Spam"/> лательно получать, будут распознаваться, и дальнейшая их
<ProfileRef active="no" ↵ судьба будет определена в соответствии с вашими поже-
file="do-archive-or-reject.xml" ↵
name="Archiving/Rejecting Spam"/> ланиями.
</Personal> В итоге, приложив немного усилий, поэкспериментиро-
</Profiles>
вав с профилями и правилами, получаем эффективный
На выходе данного этапа в письмо добавляются следу- антиспамный фильтр.
ющие специальные заголовки: По сравнению с решением на основе SpamAssasin по-
! X-SpamTest-Categories – заголовок, содержащий инфор- нравились следующие удобные особенности KAS:
мацию о том, какие контентные категории были присво- ! простая установка и интеграция в почтовую систему;
ены письму по результатам фильтрации. ! легкая и гибкая конфигурация;
! X-SpamTest-Status – заголовок, указывающий на окон- ! возможность применять персональные профили к от-
чательный статус письма по результатам всех прове- дельным пользователям или группам;
рок: SPAM, Probable Spam, Trusted или Not detected. ! отсутствие балловой оценки (хотя кому-то это покажет-
Данный заголовок используется при последующей об- ся не плюсом, а минусом, поскольку не позволит прово-
работке письма персональными профилями. Он может дить тонких граней в оценке письма);
также использоваться для обработки письма почтовым ! меньшая загрузка системы.
клиентом получателя.
Единственное чего, как мне кажется, не хватает – от-
Как мы видим, из персональных профилей активиро- сутствие возможности самобучения распознавания спама,
ван тот, который пересылает спамные письма в выделен- которое позволило бы администратору более гибко исполь-
ный почтовый ящик (пока это сделано в целях получения зовать фильтрацию. Фильтр, конечно, позволяет добавлять
статистической информации, в дальнейшем планируется образцы спамерских писем в базу, кроме того, он ее сам
применить «Archiving/Rejecting Spam»). регулярно обновляет, но поскольку спамеры постоянно са-
В примере конфигурационного файла активного персо- мосовершенствуются, то и стиль написания меняется, и как
нального профиля приводим лишь ту часть, которая пре- следствие, некоторые письма все равно просачиваются и
терпела изменения. обычно это не одно, а сразу несколько одинаковых писем.
Вот поэтому считаю необходимым добавить следущее свой-
... ство – фильтр отслеживает повторяющиеся письма и при
<Rule> достижении определенного количества самостоятельно
<Conditions> добавляет их в базу. Так же дело обстоит и с IP-адресами
<HeaderMatch header="X-SpamTest-Status" ↵
regexp="SPAM" /> сервера отправителя, поскольку хакерами ежедневно взла-
</Conditions> мывается несколько новых, через которые идет рассылка,
<Actions>
# íåîáõîäèìî çàìåíèòü àäðåñ íà ðåàëüíî ñóùåñòâóþùèé и они не успевают попадать в black-листы и обновления.
<DoRcptReplaceAll new="spam@domain.ru" /> Особую благодарность хочу выразить Таранову Алек-
<!-- Must be changed to a real address -->
<DoAccept /> сандру, ведущему инженеру ЗАО «Телепорт-ТП», за содей-
</Actions> ствие и интеллектуальную поддержку при написании статьи.

¹4, àïðåëü 2005 27


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

СИСТЕМА ВЕЩАНИЯ НА ОСНОВЕ


WINDOWS MEDIA SERVICES 9

МИХАИЛ ПЛАТОВ
Вы когда-нибудь слушали интернет-радио? Смотрели люби- ними с другой стороны, скорее всего, приведут иную клас-
мые телепередачи через спутник или Интернет? Или, быть сификацию – по способу доставки медиаданных:
может, работали с системой видеонаблюдения через сеть? ! системы с одноадресным вещанием (unicast);
Если ответ на любой из этих вопросов положительный, мо- ! системы с многоадресным вещанием (broadcast, multi-
жете смело причислять себя к пользователям систем ве- cast).
щания! Впрочем, даже если вышеприведенные вещи вам
не знакомы, не расстраиваетесь, потому что после прочте- Для того чтобы понять, в чем заключаются плюсы и ми-
ния этой статьи вы не только узнаете, что это такое и как нусы каждого из способов, давайте более пристально по-
оно работает, но и получите представление о том, что про- смотрим на процесс передачи данных. В случае одноадрес-
исходит «по ту сторону кулис», а именно – о создании сис- ного вещания данные передаются в рамках установленно-
тем вещания. Предметом нашего изучения будет один из го TCP-соединения. Соответственно для каждого клиента,
наиболее популярных продуктов организации систем ме- подключающегося к нашему серверу, будет создан соб-
диавещания – Microsoft Windows Media Services 9. ственный «канал», по которому клиент получит запраши-
ваемую информацию. На первый взгляд никаких подвод-
Теоретическое отступление ных камней здесь нет, ведь этот же принцип лежит в осно-
А каким оно вообще бывает, это «вещание»? Человек, ко- ве большинства служб Интернета, однако с увеличением
торый работал с системами вещания на уровне пользова- количества одновременно обслуживаемых клиентов начи-
теля, скажет «аудио и видео», люди, которые общались с нает проявляться проблема, казавшаяся ранее несуще-

28
администрирование
ственной. Давайте рассмотрим простой пример: пусть у нас пространять медиаданные в форматах MPEG4 и 3GPP (од-
есть один аудиопоток с битрейтом 64 Кбит, который необ- нако, по моим субъективным впечатлениям, функциональ-
ходимо доставлять 100 клиентам одновременно. Для реше- ность Darwin Streaming Server сильно уступает ближайшим
ния этой задачи с использованием режима unicast нам по- конкурентам от Microsoft и Real Networks).
требуется канал с пропускной способностью 6,4 Мбит1! Среди систем аудиовещания хотелось бы упомянуть
Во втором подходе данная проблема отсутствует, так как NullSoft ShoutCast (продукт, созданный авторами Winamp) и
при использовании многоадресного вещания сервер пере- Open Source-проекты iceCast [2] и SlimServer [3], описание
дает данные либо сразу на всю подсеть (режим broadcast), настройки которой можно найти в [4]. На этом позвольте за-
либо на определенную группу многоадресной рассылки (multi- кончить теоретическое отступление и перейти к описанию
cast group, адрес сети класса D стандарта 802.3 Ethernet). нашего сегодняшнего героя – Windows Media Services 9.
Соответственно в нашем примере для передачи потока 64
Кбит от сервера требуется возможность обеспечить канал Так вот он какой, серверный олень!
именно в 64 Кбит, независимо от количества подключен- Windows Media Services (WMS) – это программный продукт,
ных в данный момент клиентов (0 или 10000). Минусом же разработанный и распространяемый корпорацией Microsoft
является то, что сетевая инфраструктура, используемая для как средство для организации вещания аудио- и видеоин-
передачи вещаемых данных, должна быть соответствую- формации в локальных сетях, Интернете и беспроводных
щим образом сконфигурирована для передачи multicast – сетях. Данный продукт представляет собой набор компо-
трафика2. Как правило, это легко достижимо в корпоратив- нентов, работающих под управлением различных версий
ных сетях и с трудом реализуемо в масштабах современ- операционных систем семейства Windows. Помимо средств,
ного Интернета (представьте себе dial-up-пользователя, ко- позволяющих быстро и просто организовывать различные
торый вынужден принимать multicast-поток от радиостан- виды вещания аудио- и видеоинформации, в состав WMS
ции провайдера при каждом соединении). Поэтому истори- также входят компоненты, обеспечивающие тесную интег-
чески сложилась следующая ситуация: рацию с Active Directory и IIS, средства оценки и контроля
! multicast используется в корпоративных сетях, при орга- производительности сервера, а также инструменты сбора
низации «вещания» для большого количества клиентов, статистики об общей работе служб. Серверная часть WMS
получающих один и тот же неинтерактивный контент (ин- является частью ОС Windows 2000 Server и Windows Server
тернет-радио, IP-телевидение, видеоконференции с 20033. Клиентская же часть доступна практически для всех
большим числом «зрителей»); ОС от Microsoft (от Windows 9х до Windows Mobile 2005. Кро-
! unicast же используется при передаче в Интернете, а так- ме того, поддержка видео в формате Windows Media при-
же для организации дополнительных сервисов, персо- сутствует в двух наиболее популярных проигрывателях для
нифицированных с конкретным абонентом (Video on Linux – xine [5] и mplayer [6].
Demand, Time Shift, и другие сервисы, при которых кли- Спектр применения Windows Media Services достаточно
ент может «управлять» передаваемым ему потоком). широк. На их основе может быть организована как неболь-
шая интернет-радиостанция с небольшим (менее ста) ко-
А как же обстоит дело с реальными продуктами? Если личеством обслуживаемых одновременно пользователей,
рассматривать системы коммерческого видеовещания, то так и крупный медиапортал в Интернет, ежедневно обслу-
безусловными лидерами здесь являются компании Microsoft живающий десятки тысяч посетителей. Секрет этой гибко-
c продуктом Windows Media Services 9 (вещание в формате сти кроется в структуре самой системы:
wma и wmv) и Real Media с системой вещания Helix Server
(в самой функциональной редакции поддерживает веща-
ние в 55 различных форматах). Оба решения поддержива-
ют вещание как аудио, так и видеоданных, нацелены на один
сектор рынка и архитектурно очень похожи.
Из «открытых» решений хотелось бы упомянуть о про-
екте VideoLAN [1], первоначально ориентированном на орга-
низации вещания спутниковых DVB-каналов в локальную
сеть. На данный момент поддерживается гораздо большее
число видов источников, все широкоиспользуемые форма-
ты видеоданных (MPEG1, MPEG2, MPEG4, divx) и большин-
ство распространенных кодеков.
Для поклонников Macintosh и формата QuickTime суще-
ствует продукт QuickTime Streaming Server 5 (входит в со-
став Mac OS X Server) и его «открытый» брат Darwin Streaming
Server (доступный в том числе и для x86), позволяющие рас- Ðèñóíîê 1

1
В случае видеовещания требуемая пропускная способность потребуется еще больше.
2
Для передачи в нескольких сетях требуется настройка маршрутизаторов. Если же локальная сеть построена на неуправляемых свитчах и
хабах (без маршрутизаторов), то и настраивать ничего не придется.
3
Кроме Windows Server 2003 Web Edition.

¹4, àïðåëü 2005 29


администрирование
Итак, в состав Windows Media Services входят следую- ! круглосуточное вещание музыки (локальный аналог ин-
щие основные компоненты: тернет-радио);
! Сервер Windows Media. Этот компонент по праву мож- ! multicast-вещание4 в сеть телевизионного канала с TV-
но считать «сердцем» системы WMS. Именно он зани- тюнера;
мается организацией самого процесса вещания и отве- ! multicast-вещание в сеть картинки с веб-камер, распо-
чает за «раздачу» медиапотоков конечным пользовате- ложенных в интересующих нас местах5;
лям. В качестве источника этих потоков могут высту- ! доступ к обширному видеоархиву «важных производ-
пать .wma-, .wmv- и .mp3-файлы (расположенные либо ственных мероприятий»6.
локально на самом сервере, либо на файл-сервере, до-
ступном по протоколу SMB), а также потоки, получае- Кроме того, будем считать, что у нас есть «толстый» ка-
мые с других серверов или непосредственно с кодиров- нал в Интернет и нам не жалко отдавать наружу одновре-
щика Windows Media. Ядро сервера реализовано в виде менно несколько потоков музыки и пару потоков с «избран-
набора DCOM-компонентов и системных служб, для уп- ной» веб-камеры, общим объемом не более 500 Кбит/сек.
равления которыми используется стандартный для про- При реализации будем руководствоваться общей структур-
дуктов Microsoft инструмент – консоль MMC (Microsoft ной схемой Windows Media Services (см. выше). Заметим,
Management Console). что для каждого «внешнего» устройства (TV-тюнера или
! Кодировщик Windows Media. Задачей этого компонента веб-камеры) нам, скорее всего, понадобится отдельная ма-
является приведение информации к форме, пригодной шина. Аудиофайлы для радиостанции и файлы видеоархи-
для передачи сервером Windows Media, или, проще го- ва будем хранить либо на самом медиасервере, либо на
воря, перекодирование входных данных (будь то аудио- удаленном общем ресурсе (хоть бы и на самбе, включен-
или видеофайлы, сигнал с TV-тюнера или веб-камеры) ной в Windows-домен). Также нам понадобится веб-сервер,
в потоковый формат .wma или .wmv. Кодировщик рас- в качестве которого мы для простоты будем использовать
пространяется свободно и может быть загружен с сайта IIS6.0, установленный на компьютере с медиасервером (хотя
Microsoft. В состав этого продукта входят две програм- все то же самое будет великолепно работать практически
мы: Windows Media Encoder с графическим интерфей- на любом Linux веб-сервере, включенном в Windows-домен
сом и консольный скрипт WMCmd.vbs на языке Visual согласно способу, описанному в [7]).
Basic Scripting. Кроме того, с сайта Microsoft также мож- С постановкой задачи мы определились, и теперь мож-
но загрузить пакет разработчика (SDK), содержащий все но плавно перейти к ее реализации.
необходимое для разработки собственных приложений,
использующих интерфейсы кодировщика Windows Настройка сервера Windows Media
Media. Таким образом, можно добавить возможности ко- Сервер Windows Media Services поставляется вместе с опе-
дирования в уже существующие приложения. рационной системой. Для его установки необходимо вос-
! Проигрыватель Windows Media. Задача этого компонен- пользоваться мастером установки и удаления компонентов
та в системе вещания достаточно очевидна – декоди- системы: «Start → Control Panel → Add/Remove Programs/
рование и воспроизведение потока информации, полу- Add/Remove Windows components».
чаемого с сервера Windows Media. В качестве отличи- Выберем пункт «Windows Media Services», нажмем на
тельных особенностей этого проигрывателя можно от- «Details» и выберем компоненты «Windows Media Services»
метить поддержку защиты авторских прав (DRM) и по- и «Windows Media Services Snap-in». При нажатии кнопки
токовых кодеков Windows Media. «Next» выбранные компоненты будут установлены на ком-
! Веб-сервер. Играет вспомогательную функцию и исполь- пьютер. После завершения процесса установки в списке ос-
зуется для размещения информации об имеющихся на насток появится новая запись – «Windows Media Services»,
медиасервере потоках. В отличие от предыдущих ком- с помощью которой мы и будем управлять нашим серве-
понентов в качестве веб-сервера может использовать- ром (рис. 2).
ся практически любой веб-сервер. Проблем у нас пока нет, кэшировать мы тоже пока ни-
чего не будем, поэтому прямиком направляемся в раздел
Теперь, после того как мы получили общее представле- «Publishing Points». В оснастке WMS точки распростране-
ние о системе, самое время перейти непосредственно к ее ния можно создать двумя способами: с помощью «масте-
настройке. ра» и с помощью более функционального «диалогового
окна». Интерфейс «мастера» вполне понятен и разобрать-
Тяжело в учении – легко в бою! ся с ним самостоятельно не составит большого труда, а вот
Однако прежде давайте определимся, что же мы все-таки на содержимом «диалогового окна» хотелось бы остано-
хотим получить. Будем считать, что у нас есть маленькая вится поподробнее (рис. 3).
корпоративная сеть, пользователям которой мы хотим пре- Первым делом мы определяем тип точки распростра-
доставить следующие сервисы: нения: В WMS их может быть 2:

4
Для поддержки multicast-вещания нам понадобится Enterprise или Datacenter редакция ОС Windows Server 2003.
5
Например, «очередь к окошку кассы в период зарплаты», хроники событий в местном буфете или просто «панорама города» или автосто-
янка перед офисом.
6
Для простоты будем считать, что у нас есть набор AVI-файлов, выбор их содержимого пусть будет за вами.

30
администрирование
! Точки для «загрузки по требованию». Представляют со- ранения (режим push)9. Выбор того или иного режима оп-
бой инструмент для организации централизованных хра- ределяется характером кодируемых данных. Так, если ко-
нилищ медиаданных. Преимуществами таких хранилищ дировщик работает постоянно (24/7), то имеет смысл ис-
являются централизованный доступ к размещаемым ме- пользовать более легкий в настройке режим pull. Если же
диаресурсам 7, возможность создания динамических кодируемые данные носят периодический характер (не-
play-листов с навигацией (остановка, пауза, переход к сколько часов в день), то лучше использовать режим push.
следующему файлу и т. д.) между ними8, легкая интег- В нашем случае можно использовать режим pull для рет-
рация с различными веб-приложениями, возможность рансляции TV-канала, и режим push для веб-камер.
контроля доступа к каждому ресурсу и т. д. Работа с
такими точками распространения сильно персонифици-
рована, поэтому для передачи данных может использо-
ваться только режим unicast. В нашем примере мы бу-
дем использовать on-demand точки распространения для
создания маленькой корпоративной видеотеки;
! Точки для «вещания». При использовании точек распро-
странения этого типа возможна организация потоково-
го аудио- и видеовещания (без возможностей останов-
ки, пауз, перемотки и т. д.). В качестве способа дос-
тавки видеоданных может использоваться как unicast,
так и multicast. Именно этот тип точек распростране-
ния будет основным при реализации описанных выше
задач.

Затем мы определяем источник медиаданных. В каче-


стве источников могут использоваться:
! отдельный медиафайл;
! папка с файлами;
! play-лист;
! cgi-скрипт, возвращающий play-лист;
! кодировщик Windows Media Encoder;
! другая точка распространения (unicast или multicast).
Ðèñóíîê 3
Итак, создадим on-demand точку распространения с на-
званием «library», источником которой будет являться пап-
ка «c:\library», содержащая архивные видеозаписи в фор-
мате wmv (рис. 4).
Теперь создадим анонс для точки вещания. Для этого
перейдем в раздел «Properties» и в закладке «General» вклю-
чим опцию «Enable access to directory content using wildcards».
После этого перейдем на закладку «Announce» и нажмем
на кнопку «Run Unicast Announcement Wizard». В качестве
источников файлов выберем «All files in the directory», путь
подключения оставим без изменений, для местоположения
.asx-файла укажем одну из папок, доступную для веб-сер-
вера. На завершающем шаге мастера убедимся, что фла-
жок «Test files when this wizard finished» отмечен, и нажмем
«Finish» (рис. 5).
Ðèñóíîê 2 Если все было сделано правильно, то после нажатия на
При использовании в качестве источника кодировщика кнопку «Test» запустится Media Player, воспроизводящий
возможны два способа получения данных: либо сервер WMS play-лист, состоящий из всех файлов, находящихся в дан-
самостоятельно «забирает» поток (режим pull), либо актив- ной папке.
ной стороной выступает кодировщик, помещающий поток Перейдем к следующему номеру нашей программы –
на сервер и создающий соответствующую точку распрост- настройке вещания телевизионного канала с TV-тюнера.

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

¹4, àïðåëü 2005 31


администрирование
Для выполнения этого этапа нам понадобится машина10 с вое» вещание с TV-тюнера, так что выберем наиболее под-
TV-тюнером. В моем случае это был AverMedia Model 203 с ходящий нам шаблон «Broadcast a live event».
драйверами от Ивана Ускова [8].

Ðèñóíîê 6
С помощью соответствующих кнопок «Configure» на-
страиваем параметры TV-тюнера11 и звуковой карты. На-
жимаем «Next» и переходим к следующему окну. Здесь мы
выбираем режим доставки закодированного потока до сер-
Ðèñóíîê 4 вера (pull или push). Выберем pull с портом 2187 и перейдем
к следующему шагу – настройке кодеков. Из списка предоп-
ределенных шаблонов выберем Live broadcast video и CD
Quality Audio для видео и звукового потока соответственно.
Разрешение и битрейт оставим по умолчанию – 320x240 и
323 Кбит. Для всех остальных шагов оставим стандартные
значения. После завершения мастера кодирования мы уви-
дим следующее сообщение:

Ðèñóíîê 7
Вообще говоря, для того чтобы «вещать», не обязатель-
Ðèñóíîê 5 но использовать сервер Windows Media. Можно настроить
Первым делом нам нужно установить кодировщик кодировщик на работу в режиме pull и подключать к нему
Windows Media Encoder 9. Для этого идем на сайт http:// клиентов напрямую. Однако в этом случае о таких вещах
www.microsoft.com, вводим в поле поиска «Windows Media как «отслеживание обращений»,«ограничение пропускной
Encoder 9 download» и неспешно загружаем 10-мегабайт- способности», «аутентификация с Active Directory», «под-
ный исполняемый файл. После установки и запуска соот- держка multicast» и других возможностях сервера придет-
ветствующего ярлыка нас поприветствует очередной мас- ся забыть. Единственное, что будет нам доступно – возмож-
тер настройки. Мы собираемся настраивать более чем «жи- ность запрета/разрешения доступа к потоку кодировщика

10
И хотя технически возможно размещение сервера вещания и кодировщика на одной машине, делать этого не рекомендуется. Дело в том,
что процесс real-time кодирования является достаточно ресурсоемким (так, при реализации описанного ниже примера средняя загрузка
процессора Celeron 2.0GHz составляла 50%), что может создать проблемы для других приложений, работающих на машине с кодировщи-
ком.
11
При настройке TV-тюнера удобно использовать следующий прием. Предварительно, перед запуском кодировщика, с помощью идущей в
комплекте с тюнером программы определяем номер нужного канала и его цветовое представление (PAL или SECAM). Полученные цифры
вводим в свойствах драйвера после нажатии кнопки «Configure».

32
администрирование
для конкретных IP-адресов через диалог «Broadcast security» казываться картинка с TV-тюнера. Также можно протести-
из меню «Tools». Причем даже в нашем случае не лишним ровать веб-страницу (рис. 10).
будет разрешить доступ к кодировщику только со стороны
сервера Windows Media. Итак, после успешного заверше-
ния мастера перед нами предстанет картинка с TV-тюнера:

Ðèñóíîê 9

Ðèñóíîê 8
Далее нажмем на кнопку «Start Encoding» и перейдем к
настройке сервера. На сервере нам нужно создать broadcast
точку распространения с источником Encoder (Pull). В поле
«Location of content» нужно ввести имя машины, на кото-
рой работает кодировщик в формате: http://ip_адрес:номер_
порта. Точка вещания создана, и теперь нужно отредакти-
ровать некоторые ее свойства. Для этого перейдем на зак-
ладку «Properties». В первую очередь нам нужно включить
«WMS Multicast Data Writer» из раздела «Multicast Streaming»
(там же указать адрес multicast группы и сетевой интерфейс,
с которого будет производиться рассылка). При необходи-
мости для данной точки распространения в разделе «Limits»
можно задать ограничения на количество одновременно ра-
ботающих клиентов и отводимой им пропускной способно-
сти. Наигравшись вдоволь с настройками, перейдем к сле- Ðèñóíîê 10
дующему шагу – созданию анонса для multicast точки рас- В следующей статье мы продолжим изучение Windows Media
пространения. Для этого перейдем на уже знакомую нам Services 9 и подробно рассмотрим следующие моменты: на-
закладку «Announce» и нажмем на кнопку «Run Multicast стройка параметров авторизации и аутентификации клиен-
Announcement Wizard». На первом шаге мастера отметим тов, использование push-режима для кодировщика, unicast
пункт «Automaticaly create a web page», затем в окне «Stream rollover, архивирование передаваемых данных, а также по-
Formats» добавим источник-кодировщик, точно так же, как смотрим, как можно использовать программные интерфей-
и при создании точки распространения (рис. 9). сы Windows Media Encoder 9 в собственных приложениях.
В диалоге «Save Multicast Announcement Files» выберем
место сохранения файлов (внутри webroot веб-сервера) и Литература, ссылки:
перейдем к следующему шагу – диалогу выбора способа 1. http://videolan.org.
доступа к точке вещания. В нашем варианте мы будем об- 2. http://www.icecast.org.
ращаться к файлам через веб-сервер, поэтому выберем 3. http://www.slimdevices.com/su_downloads.html.
первый вариант, дополнительно удостоверившись, что имя 4. Яремчук С. Лейся песня или сервер потокового аудио
сервера совпадает с тем, по которому будут обращаться своими руками. – Журнал «Системный администратор»,
пользователи. Для остальных вопросов используем стан- №11, ноябрь 2004 г. – 28-31 с.
дартные ответы, в заключительном окне отметим пункты, 5. http://xinehq.de/index.php/features.
отвечающие за активацию точки распространения и ее те- 6. http://mplayerplug-in.sourceforge.net.
стирование. Если все было сделано правильно, то, как и в 7. Гребенников Р. Танцуем Самбу. – Журнал «Системный
первом случае, при нажатии кнопки «Test» напротив «Test администратор», №11, ноябрь 2004 г. – 32-38 c.
announcement» запустится Media Player, в котором будет по- 8. http://www.iulabs.com/download/848wdm_iu.zip.

¹4, àïðåëü 2005 33


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

APACHE КАК ПРОКСИ-СЕРВЕР

ВАЛЕНТИН СИНИЦЫН
Рассмотрим типичную для небольшой организации конст- роены по принципу: общая база + провайдеры. Мы не раз
рукцию – шлюз в Интернет, работающий под управлением убедимся в этом по ходу изложения. Итак, приступим к пер-
UNIX или Microsoft Windows, прокси-сервер, веб-сервер сети вой фазе.
Интранет, почтовый сервер и т. д. Оказывается, число ее
элементов можно несколько сократить, и в соответствии с Запуск прокси-сервера
золотым правилом инженера увеличить тем самым общую Для того чтобы Apache мог принимать и обрабатывать про-
надежность системы. Сегодня мы поговорим о делегиро- кси-запросы, необходимо загрузить модуль mod_proxy, вхо-
вании Apache основных функций кэширующего прокси-сер- дящий в стандартный комплект поставки и прекрасно до-
вера (например, Squid) и даже кое-чего сверх них. В каче- кументированный. Здесь и далее в этой статье мы не бу-
стве базовой ОС будем использовать Linux, хотя многое из дем дублировать страницы руководства, останавливаясь
сказанного ниже может быть без ограничения общности лишь на нетривиальных моментах. Mod_proxy, как и боль-
применено и для других платформ. шая часть других упомянутых в статье модулей, обычно не
Согласен, использование Apache в качестве прокси-сер- собирается в стандартной конфигурации Apache, поэтому
вера выглядит несколько нестандартно, однако, оно имеет вам, вероятно, придется заново скомпилировать сервер,
ряд преимуществ. Это, в первую очередь, возможность ди- указав соответствующие параметры сценарию configure. За
намического сжатия документов, отправляемых клиентам, поддержку mod_proxy отвечает опция «--enable-proxy», про-
что может вылиться в серьезную экономию, если для пере- чие же параметры я буду приводить в тексте в скобках пос-
дачи данных используется арендованный канал с помега- ле имени соответствующего модуля.
байтной оплатой входящего трафика (допустим, офисов у В соответствии с представленной выше формулой, mod_
фирмы два, а сервер всего один). Кроме того, оно сокра- proxy образует фундамент, на котором работает система
щает число сервисов, работающих в системе, а значит, у поддержки прокси-запросов. Их реализации, специфичные
потенциального злоумышленника будет меньше мишеней для различных протоколов, вынесены в отдельные модули:
для проведения атаки, а у администратора в свою очередь mod_proxy_http (--enable-proxy-http), mod_proxy_ftp (--enable-
меньше объектов, требующих неусыпного наблюдения и proxy-ftp) и mod_proxy_connect (--enable-proxy-connect). Пос-
поддержки. Впрочем, как и все в нашем неидеальном мире, ледний из них необходим для работы с запросами HTTP
Apache в роли прокси-сервера имеет и некоторые недостат- CONNECT, в частности, защищенными SSL-соединениями.
ки, как то: содержит экспериментальные или написанные Прежде чем говорить о настройке mod_proxy, сделаем
сторонними разработчиками модули (при желании можно пару замечаний. Первое – Apache поддерживает два типа
обойтись и без них) и неизвестным образом ведет себя при прокси-серверов: прямые (forwarding proxy) и обратные
увеличении нагрузки (вполне допускаю, что все будет пре- (reverse proxy). Нас будут интересовать исключительно пря-
красно работать, однако, специализированного стресс-те- мые прокси-сервера, т.е. промежуточные сервисы, переда-
стирования не проводил). Какая чаша перевесит – решать ющие запросы от нашего локального клиента к удаленно-
вам. Руководствуясь личным опытом, я вполне могу реко- му (чужому) серверу. Обратные прокси действуют с точно-
мендовать применение прокси-сервера на базе Apache в стью до наоборот, т.е. передают запросы от удаленного (чу-
небольших сетях. жого) клиента локальному веб-серверу и применяются в
Покончив с теоретическими вопросами, перейдем к тех- основном для балансировки нагрузки. Второе – прокси-зап-
ническим деталям. Для реализации задуманного нам по- рос не является для Apache чем-то чужеродным. Заглянув
надобится Apache версии 2.0.53 и выше1 с включенными в исходные тексты сервера, вы обнаружите, что все клиен-
mod_proxy, mod_cache и mod_deflate. В отличие от специа- тские запросы, независимо от того, кому они адресованы,
лизированных решений вроде упомянутого выше Squid, описываются одной и той же структурой. Apache помечает
прокси-сервер на базе Apache имеет модульную архитек- запросы, предназначенные другим серверам, специальным
туру, все мыслимые и немыслимые функции которой пост- флагом, но не более того. Из этого, к примеру, следует, что

1
Более ранние версии имеют ошибки в mod_cache, препятствующие нормальной работе с кэшированными документами.

34
администрирование
в параметрах модуля mod_proxy отсутствует директива для указывающей, требовать ли от потенциального клиента со-
указания порта, который следует использовать для приема ответствия всем условиям (применительно к нашей задаче
входящих соединений2. Apache способен принимать и об- это означает «иметь разрешенный IP-адрес и ввести пра-
рабатывать прокси-запросы на любом порту, который раз- вильное имя пользователя/пароль») или лишь одному из
решен к «прослушиванию» директивой Listen. Впрочем, на них. Последний вариант наиболее интересен с практичес-
практике зачастую оказывается удобнее провести границу кой точки зрения, поскольку позволяет избежать раздра-
между локальными и переадресуемыми запросами. Для до- жающей процедуры ввода пароля для пользователей внут-
стижения этой цели можно создать специальный виртуаль- ренней сети организации.
ный хост, например, на порту 3128, пользуясь директивой Внеся необходимые изменения в httpd.conf, не забудьте
VirtualHost. Подробности ищите в документации к Apache. перезапустить Apache. После этого откройте свой любимый
Дальнейшее изложение неявно предполагает, что вы уже браузер и удостоверьтесь, что настройки безопасности дей-
настроили виртуальный хост и размещаете предлагаемые ствуют именно так, как вы задумали.
директивы внутри принадлежащей ему секции httpd.conf
(Подсказка для самых нетерпеливых: в конце статьи приве- Кэширование
ден завершенный фрагмент конфигурационного файла, Мы успешно справились с первым этапом, а именно: на-
практически пригодный для непосредственного применения). учили Apache обрабатывать запросы, адресованные вне-
Чтобы Apache мог принимать прокси-запросы, необхо- шним серверам. Нашей следующей задачей будет органи-
димо явным образом разрешить их, используя директиву зация локального кэширования запрашиваемых данных. По
«ProxyRequests On». Однако не спешите этого делать, не некоторым сведениям, это позволяет сэкономить 10-20%
позаботившись о безопасности сетевых соединений! Оп- внешнего трафика, что, согласитесь, не так уж мало.
лачивать мегабайты, загруженные предприимчивыми под- Кэшированием данных в Apache заведует модуль mod_
ростками с ProxyHunter в руках – не самое приятное вре- cache (--enable-cache). Именно он принимает решение о том,
мяпровождение. допустимо ли локальное сохранение того или иного объек-
Параметры доступа к серверу задаются в секции <Proxy> та. Непосредственной записью данных на носители зани-
и, в частности, могут иметь следующий вид: маются модули-«провайдеры», из которых нас в первую оче-
редь будет интересовать mod_disk_cache (--enable-disk-
<Proxy *> # Äëÿ âñåõ ïðîêñè-çàïðîñîâ cache), реализующий хранение кэша на жестком диске.
Order deny,allow # Ñïåðâà çàïðåòèòü, ïîòîì ðàçðåøèòü
Deny from All # Çàïðåòèòü âñåì Отметим, что в Apache 2.0 оба этих модуля (mod_cache
Allow from 192.168.0.1/24 # Ðàçðåøèòü äîñòóï èç âíóòðåííåé и mod_disk_cache) имеют статус экспериментальных. Си-
# ñåòè îðãàíèçàöèè
</Proxy> туация обещает измениться в Apache 2.1, который пока что
пребывает в состоянии альфа-версии.
Здесь реализована простейшая схема контроля досту- Чтобы включить кэширование, используйте директиву
па, базирующаяся на IP-адресах клиентов. Во многих слу- «CacheEnable disk /», где «disk» – идентификатор модуля-
чаях ее будет достаточно. Но что делать, если вы хотите провайдера. Местоположение дискового кэша и его желае-
разрешить использование сервера с компьютеров, не име- мый объем (в килобайтах) задается соответственно дирек-
ющих фиксированного IP-адреса (например, домашних тивами «CacheRoot <имя каталога>» и «CacheSize <NNN>»,
машин особо приближенных сотрудников, которые не прочь относящимися уже не к mod_cache, а к mod_disk_cache.
получить «городской прокси»)? Для этих целей можно при- Apache предпринимает меры к тому, чтобы конфиденци-
менить авторизацию по имени пользователя и паролю. По- альные данные никогда не попадали в кэш сервера, одна-
скольку директивы контроля доступа, заключенные между ко лишняя безопасность все же не повредит. Я рекомен-
тегами <Proxy> и </Proxy> на самом деле обрабатываются дую сделать каталог, в котором хранится кэш, недоступ-
теми же самыми модулями, что обеспечивают защиту ло- ным ни для кого, кроме Apache.
кальных каталогов сервера (ну, не говорил ли я вам, что
Apache практически не отличает прокси-запрос от обычно- # chown apache:apache /path/to/cache
# chmod 0700 /path/to/cache
го?), вы можете использовать привычную конструкцию:
Естественно, если в вашей системе Apache работает от
<Proxy *> # Äëÿ âñåõ ïðîêñè-çàïðîñîâ имени другого пользователя, имя и группу владельца ката-
AuthName “Tresspassers” # «Ïîñòîðîííèì â.»
AuthFile /some/secret/file # Èìÿ ôàéëà, ñîäåðæàùåãî лога также следует изменить соответствующим образом.
# ðåêâèçèòû ïîëüçîâàòåëåé В целях повышения производительности дисковый кэш
AuthType Basic # Ìåòîä àâòîðèçàöèè – áàçîâûé
Require valid-user # Ïðîïóñêàòü âñåõ, êòî ïåðå÷èñëåí имеет многоуровневую структуру. Глубиной вложенности
# â /some/secret/file подкаталогов и максимальной длиной их имени управляют
</Proxy>
директивы CacheDirLevels и CacheDirLength.
Естественно, предварительно следует создать файл /some/ По умолчанию для них используются следующие значе-
secret/file при помощи утилиты htpasswd(1) и загрузить со- ния: CacheDirLevels 2, CacheDirLength 3.
ответствующие модули (mod_access и/или mod_auth). При К сожалению, Apache 2.0 не имеет никаких штатных
необходимости оба метода можно комбинировать. Также средств для управления содержимым кэша. Вы не можете
бывает полезно пользоваться директивой «Satisfy All|Any», постепенно удалять старые данные или делать это при пре-

2
Напомним, что согласно общепринятым соглашениям для этих целей используется порт 3128.

¹4, àïðåëü 2005 35


администрирование
вышении кэшем некоторой дисковой квоты. Часть из этих мать перед отправкой. Однако спустя некоторое (обычно –
проблем решена в Apache 2.1 при помощи специальной ути- весьма непродолжительное) время обнаруживаются стран-
литы htcacheclean, которая очищает кэш по мере необходи- ные артефакты. Архивы почему-то оказываются упакован-
мости. Мне не известно, перенесена ли она в ветвь 2.0, од- ными дважды, что пугает неподготовленных пользователей.
нако в качестве некоторой замены вы можете написать сце- И тут же возникают два вековечных русских вопроса: «Кто
нарий, периодически очищающий каталог (и для верности виноват?» и «Что делать?»
перезапускающий Apache), самостоятельно. Если вы все же Благо, за ответом на первый из них далеко ходить не
не последовали данному выше совету – выделить прокси- надо. Как наверняка уже догадался проницательный чита-
серверу отдельный виртуальный хост, – имейте в виду, что тель, проблема кроется в излишней «жадности» нашего
настройки кэширования влияют не только на переадресован- mod_deflate, который сжимает все и вся, тогда как браузер
ные, но и на обычные запросы, что может иметь неожидан- готов распаковать лишь вполне определенные типы фай-
ные побочные эффекты вроде задержки между редактиро- лов: текст, HTML-страницы, графические изображения...
ванием файла на диске и фактическим изменением веб-стра- Лежащее на поверхности решение – ограничить список
ницы с точки зрения внешнего пользователя. файлов, подлежащих динамическому сжатию, по расши-
На данном этапе мы завершили все работы, необходи- рению (кстати, оно очень хорошо описано в документации
мые для получения «идентичного натуральному аромати- к mod_deflate), можно отбросить сразу же. Расширение
затора» Squid, а точнее, того подмножества его функций, файла далеко не всегда соответствует его содержимому
которое используется в типичной малой сети. Теперь мы (те же архивы иногда называются как-нибудь вроде http://
пойдем несколько дальше и реализуем нечто новое – про- www.some-tricky-company.ru/download/download.pl?id=
зрачное сжатие веб-страниц. 1234&uid=5678), кроме того, вариантов, подлежащих филь-
трации, оказывается чересчур много. На самом деле, нам
Сжатие проще сказать, что должно сжиматься и выкинуть осталь-
Модуль для сжатия HTTP-документов известен каждому ное..
уважающему себя веб-мастеру. Называется он mod_deflate Вторая идея – использовать директиву «AddOutputFilter
(--enable-deflate), и, к вящей радости замученного бесконеч- ByType DEFLATE <список MIME-типов>» также терпит фи-
ными сборками из исходных текстов читателя, обычно вклю- аско, поскольку она принципиально не способна работать
чен даже в стандартной конфигурации. Его основное пред- с прокси-запросами (это редкое исключение, подтвержда-
назначение – сжимать локальные HMTL-страницы перед от- ющее правило). Да и нужные нам шаблоны, типа «text/*»,
правкой их пользователю, но, коль скоро Apache «близо- не говоря уж о более сложных, ей явно не по зубам. Что же
рук» и не делает особых различий между обычным и пере- делать?
адресованным запросом, он вполне годится и для после- Решение существует! Это специализированный модуль
дних. mod_filter, написанный Ником Кью (Nick Kew) и включен-
После своей загрузки mod_deflate создает фильтр ный в стандартный комплект поставки Apache 2.1, усечен-
«DEFLATE», который может быть установлен стандартным ная версия которого была портирована автором этих строк
образом, например, при помощи директивы «SetOutputFilter обратно в 2.0. В данном разделе речь будет вестись имен-
DEFLATE». Руководство к модулю рекомендует поостеречь- но о ней.
ся и отключить сжатие данных для браузеров, которые, не- Исходный код модуля доступен по адресу: http://ktf.
смотря на заявленную функциональность3, не могут обеспе- physics.usu.ru/~val/mod_filter.zip. Чтобы установить его, рас-
чить должный уровень поддержки (например, Netscape пакуйте архив во временный каталог на вашем сервере и
Navigator 4.x может корректно обрабатывать только сжатые дайте команду:
данные типа text/html, а его версии 4.06-4.08 не способны
даже на это), однако применительно к прокси-серверу это apxs -c -i -a mod_filter.c
имеет смысл лишь в том случае, когда такие «динозавры»
до сих пор имеют хождение в вашей организации. Из других Основная идея mod_filter состоит в том, чтобы заменить
директив, поддерживаемых mod_deflate, следует упомянуть обычный фильтр так называемым «умным» (smart filter). «Ум-
DeflateCompressionLevel, устанавливающую степень сжатия ный» фильтр – это некоторая абстрактная конструкция, со-
данных (число от 0 до 9). Большее значение этой величины держащая условия срабатывания и набор так называемых
обеспечивает меньший размер результирующих файлов, но провайдеров (опять это слово!), которые, в свою очередь,
повышает нагрузку на процессор. Для среднестатистичес- являются обычными фильтрами. В перспективе подобный
кой системы оптимальным выбором считается 6. Вы може- подход может сократить количество дублирующегося кода,
те не использовать эту директиву, тогда будут иметь место встречающегося практически в каждом модуле и дающего
значения по умолчанию, принятые при сборке системной ответ на вопрос: «Должны ли мы обработать эту порцию дан-
библиотеки Zlib. ных?» Впрочем, сейчас нас будут интересовать сугубо прак-
тические аспекты.
mod_filter Условия срабатывания «умного» фильтра могут исполь-
Казалось бы, все хорошо. Наш Apache теперь умеет обра- зовать самую различную информацию: поля заголовков
батывать прокси-запросы, хранить их в кэше и даже сжи- прямого запроса (req) и ответа на него (resp), значения внут-

3
Отметим, что отсечение клиентов, не поддерживающих сжатие данных, mod_deflate производит сам, без всякого участия администратора.

36
администрирование
ренних переменных Apache, устанавливаемых с помощью щий момент имеют статус экспериментальных или являют-
mod_setenvif (env), имена обработчиков (handler), а также ся сторонними разработками. Ситуация изменится с выхо-
тип передаваемых данных (Content-type). дом финальной версии Apache 2.1, который будет содержать
Для создания «умного» фильтра используется директи- «штатные» реализации mod_cache и mod_filter. До тех пор
ва «FilterDeclare <имя фильтра>». Подключением отдельных вы при желании можете рассматривать предлагаемое реше-
провайдеров управляет директива «FilterProvider <имя филь- ние как перспективное, хотя мой личный опыт показывает,
тра> <имя провайдера> <условие>». Здесь под именем про- что надежности вышеупомянутых модулей вполне достаточ-
вайдера подразумевается название «обычного» фильтра, но для решения «бытовых» задач. Попробуйте сами!
например, DEFLATE. Завершив настройку «умного» фильт-
ра, следует добавить его в «цепочку» командой FilterChain. Приложение
При обработке поступившего запроса звенья цепочки пос-
ледовательно просматриваются до тех пор, пока не будет Пример вызова configure, обеспечивающий
найден фильтр, условие срабатывания которого для данно- поддержку всех необходимых модулей
го конкретного запроса окажется истинным. По умолчанию
добавление нового «умного фильтра» происходит в конец ñonfigure \
--enable-proxy –-enable-proxy-http -–enable-proxy-ftp -–
цепочки, однако это поведение можно подавить, используя enable-proxy-connect\
специальные префиксы в директиве FilterChain. Подробнос- --enable-cache –enable-disk-cache\
--enable-deflate\
ти ищите в документации. --enable-mods-shared=all
Теперь путь решения проблемы становится ясным. Нам
необходимо добавить «умный» фильтр «Compressor» (конеч-
но, вы можете использовать другое имя), который будет об- Фрагмент файла httpd.conf, реализующий
рабатывать данные с типом «text/*». На самом деле диапа- описанную в статье систему
зон MIME-типов, подлежащих сжатию, может быть более
широким. ...
# Ñëóøàòü ïîðò 3128
Я, например, использую следующую конструкцию: Listen 3128
...
FilterProvider Compressor DEFLATE resp=Content-type $text/ # Çàãðóçèòü íåîáõîäèìûå ìîäóëè
FilterProvider Compressor DEFLATE resp=Content-type ↵ LoadModule cache_module modules/mod_cache.so
LoadModule disk_cache_module modules/mod_disk_cache.so
$application/xhtml ...
FilterProvider Compressor DEFLATE resp=Content-type ↵
$application/xml LoadModule deflate_module modules/mod_deflate.so
...
LoadModule proxy_module modules/mod_proxy.so
Знак долара «$» в начале каждого условия обозначает LoadModule proxy_connect_module modules/mod_proxy_connect.so
операцию поиска по подстроке. Кроме него, доступен по- LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
иск по регулярному выражению (обрамляется символами ...
«/»), а также весь спектр арифметических операций срав- LoadModule filter_module modules/mod_filter.so
...
нения и специальное условие «*», которое всегда истинно. # Ñîçäàòü âèðòóàëüíûé õîñò íà ïîðòó 3128
Обратите внимание, что мы используем «resp=Content-type» NameVirtualHost *:3128
<VirtualHost *:3128>
вместо «Content-type». Между этими двумя вариантами су- # Âêëþ÷èòü ïîääåðæêó ïðîêñè-çàïðîñîâ
ществует тонкое различие. В первом случае MIME-тип оп- ProxyRequests On
<Proxy *>
ределяется по заголовкам, сформированным удаленным # Îãðàíè÷åíèå äîñòóïà ïî IP
сервером, тогда как в последнем сведения поступают из Order deny,allow
Deny from all
локальной базы MIME-типов. Некоторые сайты, например, Allow from 192.168.0.1/24
репозитарий SourceForge.net, используют для своих фай- # èëè àâòîðèçàöèÿ ïî èìåíè ïîëüçîâàòåëÿ è ïàðîëþ
AuthName "No trespassers"
лов двусмысленные имена, что приводит к недопониманию: AuthType Basic
http://prdownloads.sourceforge.net/project/release-x.y.tar.gz? AuthUserFile <ôàéë ñ ðåêâèçèòàìè ïîëüçîâàòåëåé>
Require valid-user
download на проверку оказывается HTML-страницей, содер- # Åñëè îáå ñõåìû èñïîëüçóþòñÿ ñîâìåñòíî, óêàæèòå çäåñü
жащей список доступных зеркал для файла release-x.y.tar.gz, # All, ÷òîáû çàòðåáîâàòü ðàçðåøåííûé IP-àäðåñ
# è ïðàâèëüíûé ïàðîëü Any, ÷òîáû çàòðåáîâàòü
поэтому лучше доверить право определения типа содер- # ðàçðåøåííûé IP-àäðåñ èëè ïðàâèëüíûé ïàðîëü
жимого удаленному серверу. Уж он-то точно знает, что нам Satisfy Any
</Proxy>
отправил. # Íàñòðîéêè êýøà
CacheEnable disk /
CacheRoot <ïóòü ê êàòàëîãó êýøà>
Заключение CacheSize 51200
Вот и подошла к концу данная статья. Если вы внимательно CacheDirLevels 2
CacheDirLength 3
и творчески следовали всем перечисленным рекомендаци- # «Óìíûé» ôèëüòð äëÿ äèíàìè÷åñêîãî ñæàòèÿ
ям, то сейчас в вашем распоряжении имеется многофункци- FilterDeclare Compressor
FilterProvider Compressor DEFLATE resp=Content-type $text/
ональный сервер Apache, который может самостоятельно FilterProvider Compressor DEFLATE resp=Content-type ↵
обрабатывать запросы, переадресовывать их удаленным $application/xhtml
FilterProvider Compressor DEFLATE resp=Content-type ↵
веб-узлам, кэшировать и динамически сжимать передавае- $application/xml
мые данные, причем делает все это в рамках одной кодовой FilterChain Compressor
</VirtualHost>
базы. Некоторые из описанных в статье функций в настоя-

¹4, àïðåëü 2005 37


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

SVISTAТЬ ВСЕХ НАВЕРХ!

СЕРГЕЙ ЯРЕМЧУК
Сегодня на рынке виртуальных машин, позволяющих за- торых случаях даже превосходящие VMWare), пользуются
пускать на одном компьютере сразу несколько операцион- популярностью в большей степени или в основном среди
ных систем, признанным лидером является VMWare. Это сторонников UNIX-систем, скорее всего из-за отсутствия по-
действительно мощный продукт, обладающий понятным нятного интерфейса. К тому же Bochs, при всех его досто-
интерфейсом, простой в настройке, разобраться с исполь- инствах, еще и очень медленно работает, поскольку не ис-
зованием которого под силу и новичку. Но есть и некото- пользует динамическую трансляцию. Хотя в последнее вре-
рые неудобства. Так как VMWare является коммерческим мя Qemu уже обзавелся вполне понятными оболочками, но
продуктом, то придется либо купить лицензионную версию, боюсь, что настоящая популярность придет к нему позже.
либо смириться с тем, что лицензия ограничивает пользо- Между тем существует по крайней мере еще один коммер-
вателя по времени. Довольно часто, особенно во время вы- ческий проект, предлагающий виртуальную машину, и са-
хода новых версий программы, сайт бывает так перегру- мое интересное, что в его разработке участвуют програм-
жен, что не сразу удается получить новый ключ. Продукт мисты из России.
Microsoft Virtual PC, по моему мнению, еще не пользуется SerenityVirtual Station 2004 – SVISTA, именно так называ-
большой популярностью хотя бы потому, что не достиг того ется решение, предлагаемое Serenity Systems International –
уровня функциональности, который позволит тягаться с SSI (http://www.serenityvirtual.com/index.php), первый пресс-
VMWare. Свободные же версии виртуальных машин вроде релиз с упоминанием о ней датируется 1 ноября 2004 года.
Bochs, Qemu и пр. несмотря на свои возможности (в неко- Разработкой SVISTA занимается компания «Параллели –

38
администрирование
Программная Студия» (http://www.parallels.ru), образован- ! AC97-совместимая звуковая карта;
ная в феврале 2001 года в Москве. ! клавиатура с поддержкой расширенных 104 клавиш;
Итак, что умеет SVISTA? В качестве основной операци- ! мышь PS/2 с колесом.
онной системы могут использоваться Linux, FreeBSD,
Windows, IBM OS/2 и eСomStation. В качестве гостевых опе- Как видите, SVISTA несколько проигрывает VMWare, нет
рационных систем могут применяться: поддержки SCSI-, USB-устройств (планируется в следую-
! OS/2 2.1, OS/2 Warp 3.0, 4.0, 4.5, eComStation 1.0, 1.1, 1.2 щей версии), да и сетевая карта всего одна (в VMWare –
! MS-DOS, Windows 3.0, 3.1, 3.11 три). Однако разработчиками заявлено о поддержке нестан-
! Windows 95 дартного оборудования вплоть до картридеров.
! Windows NT 4.0, Windows 2000, Windows XP, Windows
Server 2003 Установка SVISTA
! Linux (kernel 2.2, 2.4 и 2.6) SVISTA очень проста в установке и настройке. Но для нача-
! FreeBSD ла необходимо кроме самого дистрибутива, предназначен-
ного для конкретной основной системы, получить лицензи-
Конкретные версии и дистрибутивы в официальной ин- онный ключ. Под UNIX-системы приложение, т.е. оболочка,
формации не названы, и скорее всего здесь особых огра- распространяется по лицензии GPL и доступно в исходных
ничений нет. Я запускал виртуальную машину в ALT Linux текстах, библиотеки и файлы ресурсов являются закрыты-
2.4 Master, ASPLinux v10, FreeBSD 5.3 и Windows XP SP1 и ми. Сам продукт является коммерческим, поэтому у нас есть
2 – проблем не заметил. Системные требования также обыч- два варианта: купить полную лицензию за 99 у.е., либо зап-
ные для такого рода продуктов, и принцип один – чем боль- росить демонстрационный ключ, который позволит исполь-
ше, тем лучше. В SVISTA часть кода выполняется на реаль- зовать программу без каких-либо ограничений в течение 30
ном процессоре, минуя виртуальный, что увеличивает бы- дней, если вы не хотите, чтобы работе мешало сообщение
стродействие системы. Доскональных испытаний я не про- об использовании нелицензионной версии. Правда, по ис-
водил, но на компьютере 1.1 Celeron с 256 ОЗУ, SVISTA течении этого срока никто не запрещает повторить всю
работает примерно с такой же скоростью, что и VMWare, процедуру с самого начала. Здесь все как в VMWare, толь-
но медленнее Qemu. Если в SVISTA и VMWare загрузка в ко с тем отличием, что в SVISTA необходимо для каждой
гостевой ОС такого монстра как KDE, происходит минут за основной системы получать ключ отдельно, но зато можно
15, то в Qemu на это уходит около 10 минут. SVISTA 2004 пользоваться одним и тем же почтовым ящиком. В VMWare
имеет набор инструментов для гостевой OС, например со- в получении ключа на e-mail, который уже имеется в базе
вместный буфер обмена, который позволяет сделать рабо- данных, будет отказано. При использовании в качестве ос-
ту более удобной. Версия для Windows специально опти- новной системы Linux получаем архив svista-2004-lnx.zip
мизирована для работы с Citrix Metaframe. В качестве при- размером 1.93 Мб.
менения своему продукту разработчики видят в первую оче- После распаковки вы найдете ReadMe-файл и два паке-
редь различные варианты клиент-серверных архитектур та: SVISTA-2004.1056-Lin.i386.rpm и SVISTA-2004.1056-Lin.tgz.
(One technology – many environments), когда терминалы «тон- Первый предназначен для дистрибутивов, поддерживаю-
ких клиентов» загружают с сервера необходимую рабочую щих rpm-пакеты, второй – для всех остальных.
среду. Подробности смотрите в документации на сайте.
Пользователь, запустивший SVISTA, получает в свое # rpm –i SVISTA-2004.1056-Lin.i386.rpm
распоряжение следующую виртуальную машину:
! CPU Pentium II или AMD Duron (в зависимости от марки Или для tgz:
процессора на компьютере);
! материнская плата, совместимая с Intel i815; # tar xzvf SVISTA-2004.1056-Lin.tgz
#./install.sh
! до 512 Мб оперативной памяти (но не больше половины
имеющейся на PC); После чего запускаем скрипт SVISTA-config:
! VGA и SVGA-совместимая видеокарта с поддержкой
VESA 3.0, что позволяет использовать любые режимы # /usr/bin/SVISTA-config
вплоть до 1280x1024x256; Configuring SVISTA 2004 build 1056
! дисковод формата 3.5'' на 1.44 Мб (может быть пред- You must read and accept license agreement to run SVISTA 2004
ставлен как реальным устройством, так и образом); To list by pages use Spacebar key.
! виртуальный жесткий диск IDE объемом до 32 Гб, пред- Press 'ENTER' to continue...

ставленный как образ; Далее будет выведен текст лицензии:


! виртуальный CD-ROM (может быть как реальным уст- Do you accept terms of license agreement ? (Y/N) y
ройством, так и iso-образом);
! до 4 последовательных портов (COM); Trying to configure SVISTA 2004 drivers...
configure: error: C compiler cannot create executables
! до 3 параллельных портов (LPT);
! виртуальная Ethernet-сетевая карта, совместимая (на Can't configure ! Read "/usr/lib/SVISTA/Doc/INSTALL"
выбор) с RTL8029, NE2000 или NE2000plus, версия для and follow instructions that written there

Windows дополнительно поддерживает виртуальную Смотрим в указанный файл. Выясняется, что для ком-
Token-Ring сетевую карту; пиляции (под UNIX-системы часть SVISTA поставляется в

¹4, àïðåëü 2005 39


администрирование
исходных текстах) необходимо наличие исходных текстов
ядра, библиотек QT 3.xx и конечно же, gcc с glibc. Если ка-
кого-либо из этих компонентов нет – установите. Теперь
компиляция происходит нормально.

Trying to configure SVISTA 2004 drivers...


Trying to rebuild drivers...
Drivers rebuilt successfully.
Installing drivers...
Starting drivers...
Starting SVISTA 2004 main driver
Starting SVISTA 2004 network driver
Adding adapter eth0 to bridge 0... succeed.
Configuration completed successfully

Удалять также просто, вводим «rpm -e SVISTA» или за-


пускаем скрипт uninstall.sh. Установка в Windows происхо-
дит обычным образом, т.е. запуском исполняемого файла.
Дальнейшая работа версий для UNIX и Windows также не
отличается, за исключением того, что в Windows интерфейс
локализован и пользователю будет легче разобраться с не-
понятными терминами и настройками. Исходя из этого, все
дальнейшее описание будет относиться к версии для Linux,
но если будут различия, о них будет рассказано отдельно.

Запуск виртуальной машины


После установки работать от имени суперпользователя уже
не обязательно.
Запускаем утилиту:

# SVISTA& Ðèñóíîê 2
Если при запуске не будет найдено загрузочное устрой-
После чего появляется экран новой виртуальной маши- ство или оно не правильно сконфигурировано, то вы полу-
ны. чите предупреждение «No boot device available, press enter
to continue». Параметр Memory определяет количество ре-
альной оперативной памяти, которое будет выделено вирту-
альной машине, установите его в пределах от 4 до 512 Мб,
но не более половины размера ОЗУ. Если конфигуратор
Windows сразу устанавливает предел в половину имеющей-
ся памяти (кроме случаев, когда часть ОЗУ отдана встро-
енной карте, см. рис. 3), то в Linux его придется контроли-
ровать самому. Если переусердствуете, то получите ошиб-
ку «System error E4003: Can't map VM memory».

Ðèñóíîê 3
В Options определяются действия, выполняемые при
старте виртуальной машины. Так, «Start immediately after
Ðèñóíîê 1 opening configuration» позволяет запустить виртуальную
Для дальнейшей работы необходимо ввести регистра- машину сразу после выбора конфигурационного файла, без
ционный номер, зайдя в пункт Help/Registration. Теперь при- дополнительных действий со стороны пользователя.
ступаем к созданию новой виртуальной машины, выбрав Опция «Start virtual machine in full screen mode» запуска-
меню New. Во вкладке Main (рис. 2) устанавливаются ос- ет виртуальную машину в полноэкранном режиме (в него
новные параметры виртуальной машины, тип гостевой си- можно также перейти, нажав кнопку на панели, либо через
стемы, параметр Boot sequence позволяет выбрать один из соответствующий пункт меню).
трех типов загрузки: Включив «Show full screen mode startup warning message»,
! Floppy, Hard drive, CD-ROM. вы будете получать предупреждения о переходе в полноэк-
! Hard drive, Floppy, CD-ROM. ранный режим.
! CD-ROM, Hard drive, Floppy. Опция «Enable acceleration» включена по умолчанию, но

40
администрирование
для некоторых гостевых систем (Windows NT и 2000), при шей частью автоматически, для RTL8029 compatible систе-
работе которых возможны сбои, появляется возможность ма сама выбирает IRQ.
отключить ускорение. Для остальных типов адаптеров придется IRQ выстав-
И наконец, «Enable write-back disk cache» также вклю- лять самому. После установки всех параметров будущей
чена по умолчанию и разрешает производить запись не сра- гостевой системы выходим из настроек и сохраняем кон-
зу в образ, а в кеш. Вкладки Floppy drives и IDE drives похо- фигурацию (по умолчанию файл с расширением *.svs). Если
жи. В них указываются соответствующие устройства (дис- в процессе использования гостевой системы возникла не-
ковод, жесткий диск и CD-ROM), которые будут доступны обходимость в редактировании параметров, воспользуйтесь
на виртуальной машине. При этом могут быть указаны как пунктом Edit.
реальные устройства, так и предварительно созданные Òàáëèöà.1 Ñïèñîê ïîääåðæèâàåìûõ ñåòåâûõ àäàïòåðîâ
образы. Для создания файл-образа используется кнопка â çàâèñèìîñòè îò òèïà ãîñòåâîé ñèñòåìû
«Create file», при этом задается размер файла (дисковод
1.44 Мб по умолчанию имеет расширение .fdd, жесткий диск
от 20 до 32768 Мб, расширение hdd). В Windows файл со-
здается автоматически, а в Linux его необходимо предва-
рительно создать вручную:

# touch /home/sergej/vm/knoppix.hdd

Я не экспериментировал со всеми возможными образа-


ми, но отмечу, что для работы можно использовать образы,
подготовленные для Qemu. Напомню, что в составе Qemu
имеется утилита qemu-img, которая с параметром convert
позволяет конвертировать образы в различные форматы.
Флажок «Compress free space» позволяет сэкономить дис-
ковое пространство. Так, только что созданный 4-гигабай-
товый контейнер занимает всего 100 Кб, но затем расши-
ряется по мере заполнения.
Опции «Start floppy disk connected» и «Start CD-ROM disk
connected» автоматически включают устройство при пода-
че питания на виртуальный компьютер.
В Windows для создания образов удобно использовать
программу ImageTool.exe, идущую в комплекте.

Ðèñóíîê 4
Следующие две вкладки «Serial ports» и «Parallel ports»
открывают доступ к соответствующим портам.
Во вкладке «Sound settings» доступны опции «PC speaker
support enable» и «Sound support enable», активация кото-
рых позволяет использовать спикер и виртуальную AC’97-
звуковую карту. При использовании в качестве основной Ðèñóíîê 5
системы Windows в каталоге, в который установлен SVISTA, Теперь на виртуальную машину можно подавать пита-
имеется файл tools.fdd, содержащий драйвера AC’97 и се- ние. В дальнейшем работа происходит обычным образом.
тевых устройств в основном для OS/2 и Windows NT. Наличие всего одного сетевого адаптера не позволяет
И наконец, вкладка «Network settings» позволяет акти- создавать такие разветвленные конфигурации, как в VMWare,
вировать сетевое устройство (рис. 5). В зависимости от ис- но имеющихся возможностей SVISTA вполне достаточно для
пользуемой гостевой системы будут доступны различные тестирования программного обеспечения и сетевых серви-
сетевые адаптеры (таб. 1). сов, работы или презентации возможностей тех или иных
И последним шагом настройки является установка port, приложений, написанных под разные операционные систе-
IRQ и MAC-адреса. Параметр port устанавливается боль- мы.

¹4, àïðåëü 2005 41


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

АРХИВИРУЕМ ДАННЫЕ С ПОМОЩЬЮ BACULA

АЛЕКСЕЙ ГРИНЬКО
Bacula – это мощное средство создания и управления ре- го, имеет полный набор необходимых вам функций». Что ж,
зервными копиями данных, а также восстановления инфор- проверим это утверждение разработчиков.
мации при необходимости. Имея модульную архитектуру, Начнем с описания компонентов, из которых состоит эта
Bacula легко масштабируется и может быть использована система. Bacula имеет клиент-серверную архитектуру, ее
как на нескольких, так и на сотнях компьютеров. Кому бу- схема представлена ниже (рис. 1).
дет полезен этот инструментарий? Как сказано в докумен-
тации, «... если вы используете такие программы, как tar, Взаимодействие служб в Bacula
dump, bru для создания резервных копий, и хотели бы иметь Сердцем системы является «центр управления» (Director), в
удобное средство для сетевой работы, то Bacula, скорее все- его функции входит хранение заданий, их запуск, ведение

42
администрирование
журнала всего происходящего. Эта часть на данный момент управления), bacula-sd.conf (хранилище). Начнем с самого
реализована только для FreeBSD и Linux. Для хранения жур- простого – bacula-fd.conf:
налов создания архивных копий и их содержимого исполь-
зуется SQL Server (служба хранения каталога). В его роли Director { # îïèñàíèå öåíòðà óïðàâëåíèÿ,
Name = main-dir # êîòîðîìó ðàçðåøåíî îáðàùàòüñÿ
может выступать PostgreSQL, MySQL и SQLite. Созданные Password = "bacula" # ê ýòîé ñëóæáå ôàéëîâ
архивные копии передаются в «хранилище» (Storage Server), }
где они записываются в «тома» (Volume). Тома физически FileDaemon { # îïèñàíèå ñëóæáû ôàéëîâ
могут записываться в простейшем случае в файл, но Bacula Name = main-fd # èìÿ êëèåíòà
FDport = 9102 # èñïîëüçóåìûé ïîðò
поддерживает работу с накопителями на магнитной ленте, WorkingDirectory = /var/lib/bacula # ðàáî÷èé êàòàëîã
в том числе и устройства с автоматической сменой кассеты. Pid Directory = /var/run # ôàéë ñ íîìåðîì ïðîöåññà
}
Если выбран вариант хранения томов в виде файлов, то пос-
ле достижения файлом длины 650-700 Мб (CD) или же 4.5 Гб Messages { # îïèñàíèå êàíàëà ñîîáùåíèé
Name = Standard # èìÿ êàíàëà
(DVD), целесообразно закончить работу с этим томом и за- director = main-dir = all, !skipped # ãäå îí íàõîäèòñÿ
писать его на носитель CD/DVD. Еще одним элементом си- }
стемы является «Служба файлов» (File Daemon). Это клиен-
тская часть, которая устанавливается на компьютеры, хра- Конфигурационные файлы состоят из объектов (дирек-
нящие данные для архивации. Вся прелесть в том, что дан- тив), параметры каждого объекта находятся внутри фигур-
ная часть реализована для различных платформ: FreeBSD, ных скобок {}. Здесь приведены следующие объекты: Director
Linux и Windows. Таким образом, собирать данные для раз- (центр управления), FileDaemon (служба файлов) и Messages
мещения в архив можно вне зависимости от того, какая опе- (канал сообщений). Описанием первого объекта мы разре-
рационная система установлена на компьютер. Остался еще шаем центру управления с именем main-dir подключаться
один элемент – «Консоль» (Bacula Console). Он также су- и передавать задания. Второй объект задаёт параметры ра-
ществует в версиях для различных ОС, его целью является боты самой службы файлов. В третьем же задается имя
создание, управление и контроль выполнения архивных ко- канала сообщений, в который будут передаваться отчеты о
пий, а также менеджмент томов и пулов. проделанной работе, состояние, ошибки.
Для оповещения о ходе работы, поставленных задачах
и результатах их выполнения используются каналы сооб-
щений. Можно задействовать несколько каналов, к приме-
ру, по числу заданий, и отправлять отчеты пользователям,
чьи данные были заархивированы. Мы же создадим один
канал для отправки всех сообщений администратору. Так-
же по почте будут приходить уведомления о смене кассеты
или подключении нового файлового тома, если текущий за-
полнен. Для отправки сообщения Bacula использует соб-
ственный инструментарий – bsmtp, который может отправ-
лять сообщения не только локально, но и на удаленный smtp-
сервер.
Следующий конфигурационный файл описывает на-
стройки хранилища:

Storage { # îïðåäåëåíèå õðàíèëèùà


Name = main-sd # èìÿ
SDPort = 9103 # èñïîëüçóåìûé ïîðò
WorkingDirectory = "/var/lib/bacula" # ðàáî÷èé êàòàëîã
Pid Directory = "/var/run" # ôàéë ñ íîìåðîì ïðîöåññà
}
Director { # îïèñàíèå öåíòðà óïðàâëåíèÿ,
Name = main-dir # êîòîðîìó ðàçðåøåíî îáðàùàòüñÿ
Password = "bacula" # ê ýòîìó õðàíèëèùó
Ðèñóíîê 1 }

Как видно, поместить службу хранения каталогов, хра- Messages { # îïèñàíèå êàíàëà ñîîáùåíèé
Name = Standard # èìÿ êàíàëà
нилище и центр управления разумнее всего на одном сер- director = main-dir = all, !skipped
вере. В FreeBSD есть следующие порты для установки: # ïåðåäàâàòü ñîîáùåíèÿ â öåíòð óïðàâëåíèÿ
}
! /usr/ports/sysutils/bacula-server
! /usr/ports/sysutils/bacula-client Device {
Name = FileStorage
#
#
óñòðîéñòâî õðàíåíèÿ òîìîâ
èìÿ
Media Type = File # òèï íîñèòåëÿ (ôàéëîâûé)
Нам понадобятся оба, так как компьютер, на котором Archive Device = /tmp # ïóòü ê óñòðîéñòâó
LabelMedia = yes # äàâàòü òîìàì ìåòêè
будет запущен центр управления Bacula, тоже будет высту- Random Access = Yes # óñòðîéñòâî ñ ïîçèöèîíèðîâàíèåì
пать в роли клиента. После установки необходимо настро- AutomaticMount = yes # àâòîìàòè÷åñêîå ïîäêëþ÷åíèå òîìà
RemovableMedia = no # ÿâëÿåòñÿ ëè ñúåìíûì íîñèòåëåì
ить три конфигурационных файла, находящихся в $PREFIX/ AlwaysOpen = no # áëîêèðîâêà èçâëå÷åíèÿ íîñèòåëÿ
etc/: bacula-fd.conf (служба файлов), bacula-dir.conf (центр }

¹4, àïðåëü 2005 43


администрирование
Device { # óñòðîéñòâî õðàíåíèÿ òîìîâ мя вопросов возникнуть не должно. Verify используется для
Name = DDS-4 # èìÿ проверки, изменялись ли данные с момента последнего ар-
Description = "DDS-4" # îïèñàíèå
Media Type = DDS-4 # òèï íîñèòåëÿ (êàññåòà ñòðèììåðà) хивирования. Тип задания Admin используется для удале-
Archive Device = /dev/nsa1 # ïóñòü ê óñòðîéñòâó ния устаревших записей из каталога. Задание обязательно
AutomaticMount = yes # àâòîìàòè÷åñêîå ïîäêëþ÷åíèå òîìà
AlwaysOpen = yes # áëîêèðîâêà èçâëå÷åíèÿ íîñèòå- должно содержать следующие элементы: имя (Name), тип
ëÿ (Type), типы архивирования (только для заданий Backup),
Offline On Unmount = no # èçâëåêàòü êàññåòó
# ïðè ðàçìîíòèðîâàíèè какие файлы архивировать (FileSet), с какого клиента (Client),
Hardware End of Medium = no # àïïàðàòíîå îïðåäåëåíèå в какое хранилище (Storage), какой пул (Pool – группа то-
# êîíöà êàññåòû
BSF at EOM = yes # ñòàâèòü ìåòêó â êîíöå мов) использовать, приоритет задания (Priority). Целесооб-
# (äëÿ FreeBSD) разно часть этих опций описать в шаблоне задания и со-
Backward Space Record = no # íàñòðîéêè äëÿ óñòðîéñòâ
Fast Forward Space File = no # ñ íåïðîèçâîëüíûì здавать задания на его основе. В этом случае не нужно
# ïîçèöèîíèðîâàíèåì каждый раз указывать одни и те же опции. Если же мы хо-
TWO EOF = yes # ïîìå÷àòü êîíåö êàññåòû
# äâóìÿ EOF тим использовать значение элемента, отличное от приве-
} денного в шаблоне, достаточно его переопределить в опи-
В этом файле описываются следующие объекты: Storage сании задания. Ниже приведен пример шаблона и описа-
(хранилище), центр управления, имеющий право работать с ния задания архивирования:
данным хранилищем, канал сообщений и, наконец, два уст-
ройства для архивирования – файловое и накопитель на гиб- JobDefs {
# øàáëîí çàäàíèÿ
кой магнитной ленте (стриммер). Pool = Default # ïóë ñ òîìàìè
Перед тем как приступить к последнему, самому слож- # îïèñàíèå ïóëîâ äëÿ ðàçíûõ òèïîâ àðõèâèðîâàíèÿ
Full Backup Pool = FullBackups
ному файлу конфигурации, необходимо подготовить служ- Differential Backup Pool = DiffBackups
бу каталога. Подойдет PostgreSQL, MySQL или SQLite. Incremental Backup Pool = IncBackups
Name = DefaultJob # èìÿ
Я остановил свой выбор на MySQL, это довольно рас- Type = Backup # òèï çàäàíèÿ
пространенный SQL-сервер, присутствующий почти в каж- Level = Full # òèï àðõèâèðîâàíèÿ
Client=main-fd # êëèåíò
дой UNIX-системе. В комплекте с Bacula есть скрипты для Storage = File # õðàíèëèùå
конфигурирования базы данных: создание пользователя и Messages = Standard # êàíàë ñîîáùåíèé
Priority = 10 # ïðèîðèòåò
установка необходимых прав (grant_mysql_privileges), Reschedule On Error = yes # ïîâòîðÿòü ëè ïðè îøèáêå
(create_mysql_database) и таблиц (make_mysql_tables), на- Reschedule Interval = 6h # èíòåðâàë äëÿ ïîâòîðà
Reschedule Times = 3 # êîëè÷åñòâî ïîâòîðîâ
ходящихся в $PREFIX/bacula. Для создания пользователя и }
назначения ему необходимых прав, лучше использовать
Job { # îïèñàíèå çàäàíèÿ
скрипт, поставляемый по умолчанию. Поэтому создаем но- Name = "UnixCfg" # èìÿ
вую базу данных ./create_mysql_database и затем выполня- JobDefs = DefaultJob # èñïîëüçóåìûé øàáëîí
FileSet="UnixCfg" # íàáîð ôàéëîâ
ем следующее: Storage = File # èñïîëüçóåìîå õðàíèëèùå
}
mysql -u root -p
mysql> grant all privileges on bacula.* to bacula@localhost ↵
identified by 'baculapwd' with grant option; Как видно, в шаблоне мы описали используемый по
mysql> flush privileges; умолчанию пул, указали, что для каждого типа архивиро-
вания будем использовать свой пул, – это довольно удоб-
Далее запуском скрипта ./make_mysql_tables создаем но. Делать полные копии большого количества файлов еже-
необходимые для работы Bacula таблицы. На этом подго- недельно неразумно. Гораздо удобнее сделать раз в месяц
товка службы каталога завершена и можно приступать к (или реже) полные копии, а еженедельно создавать инкре-
настройке центра управления. ментальные (Incremental) копии, в которых будут храниться
Файл конфигурации имеет несколько частей: только измененные с момента последней архивации фай-
! описание центра управления; лы. Приведу еще одно немаловажное задание:
! описание заданий;
! клиенты, графики запуска; Job {
Name = "BackupCatalog" # èìÿ çàäàíèÿ
! доступные хранилища; JobDefs = DefaultJob # èñïîëüçóåìûé øàáëîí
! набор файлов; FileSet="Catalog" # íàáîð ôàéëîâ
# çàïóñêàòü ïî ãðàôèêó, âûïîëíèòü ïåðåä çàäàíèåì è ïîñëå íåãî
! служба каталога; Schedule = "WeeklyCycleAfterBackup"
! каналы сообщений; RunBeforeJob = "/usr/local/etc/bacula/make_catalog_backup ↵
-u bacula -pbaculapwd"
! пулы хранения томов.
RunAfterJob = "/usr/local/etc/bacula/ ↵
delete_catalog_backup"
Некоторые директивы нам уже знакомы, но есть и но- Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr"
вые – описание заданий (Job), набор файлов (FileSet), гра- Storage = FileStorage # èñïîëüçóåì ôàéëîâîå õðàíèëèùå
Priority = 11 # ïðèîðèòåò
фик запуска (Schedule). Начнем с описания заданий (Job) и }
шаблона задания (JobDefs). Задание может быть несколь-
ких типов (Type) – архивирование данных (Backup), восста- Использование этого задания очень важно, ведь оно со-
новление данных (Restore), проверка целостности данных здает дамп SQL-базы службы каталога. Делать это необ-
(Verify) и обслуживание каталога (Admin). С первыми дву- ходимо для того, чтобы застраховать себя от сбоев на са-

44
администрирование
мом сервере. Если что-то случится со службой каталога, было сконфигурировать автоматический запуск архивиро-
то, имея на руках одни кассеты с архивами, восстановить вания. Если в описании задания не указана директива
данные будет совсем непросто. Поэтому данные записы- Schedule, то оно будет запускаться только вручную.
ваются в другое хранилище (файловое). Хранить эти фай- Запуск задания в этом режиме осуществляется из кон-
лы после их заполнения рекомендуется на другом сервере соли Bacula.
или на носителях CD/DVD. Кроме того, здесь используются
новые элементы RunBeforeJob и RunAfterJob и, как ясно из Schedule {
Name = "WeeklyCycle"
названия, это скрипты, которые необходимо запустить до Run = Full 1st sun at 1:05
и после начала архивирования. Перед запуском задания Run = Differential 2nd-5th sun at 1:05
Run = Incremental mon-sat at 1:05
создается дамп базы, с помощью скрипта make_catalog_ }
backup (входящего в дистрибутив Bacula). Дамп помещает-
Schedule {
ся в файл /var/lib/bacula/bacula.sql. Элемент Schedule (гра- Name = "WeeklyCycleAfterBackup"
фик запуска) показывает, что это задание необходимо вы- Run = Full sun-sat at 1:10
}
полнять периодически. Выбранный график запуска «Weekly
CycleAfterBackup», как будет рассмотренно позже, указы- Первый график запуска определяет выполнение полного
вает на то, что архивирование будет запускаться ежеднев- архивирования файлов в первое воскресенье месяца в 1.05.
но, после выполнения всех основных резервных заданий. Инкрементальное архивирование осуществляется с поне-
Заметим, добились мы этого установкой приоритета ниже дельника по субботу в 1.05. А дифференционное архиви-
обычного. По умолчанию значение приоритета для зада- рование в каждое воскресенье, кроме первого, в 1.05. Вто-
ния равно 10. рой график будет запускать задания каждый день, после
Если мы хотим повысить приоритет задания, его необ- того как будут выполнены дневные архивирования.
ходимо назначить меньше 10, и наоборот. Если в одно и то Теперь настала очередь описания клиентов и парамет-
же время запланировано несколько задач, то первой будет ров обращения в службе каталогов. Настройки клиента
выполнена задача с более высоким приоритетом, осталь- (службы файлов, которой будут отправляться задания) и
ные будут поставлены в очередь на ожидание. Задание, по- службы каталогов прокомментированы и должны быть ин-
ступившее в очередь позже, но имеющее приоритет выше, туитивно понятны.
будет выполнено в обход тех, что уже стоят в очереди. При
этом работа выполняемого архивирования не прерывается Client {
Name = main-fd # èìÿ êëèåíòà
даже при поступлении в очередь задания с более высоким Address = localhost # åãî àäðåñ, èìÿ DNS
приоритетом. FDPort = 9102 # èñïîëüçóåìûé ïîðò
Catalog = MyCatalog # èñïîëüçóåìàÿ ñëóæáà êàòàëîãà
Переходим к следующим объектам – описание набора Password = "bacula" # ïàðîëü äëÿ äîñòóïà
файлов для архивирования. В задании с именем UnixCfg File Retention = 30 days # ñðîê õðàíåíèÿ ôàéëîâ
# â àðõèâå
мы указали, что будем использовать набор файлов UnixCfg. Job Retention = 6 months # ñðîê õðàíåíèÿ çàïèñåé
Расшифруем, что мы имели в виду: # â êàòàëîãå
AutoPrune = yes # óäàëÿòü ñòàðûå çàïèñè è ôàéëû
}
FileSet {
Name = "UnixCfg" # èìÿ íàáîðà ôàéëîâ Catalog {
Include = signature=MD5 { # îïöèè – ïîñ÷èòàòü Name = MyCatalog # èìÿ êàòàëîãà
# ñóììû MD5 äëÿ ôàéëîâ # èìÿ SQL-áàçû äàííûõ, ïîëüçîâàòåëü è ïàðîëü
/etc # àðõèâèðîâàòü êàòàëîã /etc dbname = bacula; user = bacula; password = "baculapwd"
/usr/local/etc # à òàêæå /usr/local/etc }
}
Exclude = { # ôàéëû-èñêëþ÷åíèÿ
*.bak # èñêëþ÷èòü èç àðõèâà ôàéëû ïî ìàñêå Ниже приведены описания настроек устройств, исполь-
} зуемых в качестве хранилища. Его имя, а также тип носи-
}
теля обязательно должны быть такими же, как и те, что ука-
FileSet { заны в bacula-sd.conf.
Name = "Catalog"
Include = signature=MD5 {
/var/lib/bacula/bacula.sql Storage {
} Name = File # èìÿ õðàíèëèùà
} Address = localhost # IP-àäðåñ èëè DNS-èìÿ
SDPort = 9103 # èñïîëüçóåìûé ïîðò
Password = "bacula" # ïàðîëü
Все интуитивно понятно. Описаны два набора файлов – Device = FileStorage # óñòðîéñòâî (òàêîå æå,
соответственно для двух вышесозданных заданий. Добав- # êàê â bacula-sd.conf)
Media Type = File # òèï íîñèòåëÿ (òàêîå æå,
лю только то, что при использовании файлового хранили- # êàê â bacula-sd.conf)
ща, а не стриммера, будет полезным добавить вслед за оп- }
цией «signature=MD5» опцию «compression=GZIP», которая Storage {
указывает на необходимость архивирования файлов перед Name = DDS-4 # èìÿ õðàíèëèùà
Address = localhost # IP-àäðåñ èëè DNS-èìÿ
помещением в том. В случае со стриммером это не имеет SDPort = 9103 # èñïîëüçóåìûé ïîðò
смысла – большинство устройств имеют аппаратную под- Password = "bacula" # ïàðîëü
Device = DDS-4 # óñòðîéñòâî (òàêîå æå,
держку сжатия. # êàê â bacula-sd.conf)
На очереди следующий элемент – описание графика Media Type = DDS-4 # òèï íîñèòåëÿ (òàêîé æå,
# êàê â bacula-sd.conf)
выполнения заданий. Делается это для того, чтобы можно }

¹4, àïðåëü 2005 45


администрирование
Подробно стоит остановиться на системе информирова- mailcommand = "bsmtp -h localhost \"\(Bacula\) %r\" ↵
ния о ходе выполнения заданий. Ниже приведено описание -s \"Bacula: %t %e of %c %l\" %r"
# êîìàíäà îòïðàâêè çàïðîñà ñìåíû íîñèòåëÿ
канала сообщений с именем Standard, в который мы будем operatorcommand = "bsmtp -h localhost \"\(Bacula\) %r\" ↵
передавать сообщения со всех служб Bacula. Команда опо- -s \"Bacula: Intervention needed for %j\" %r"
# îòïðàâëÿòü ïî ïî÷òå âñå òèïû ñîîáùåíèé, çà èñêëþ÷åíèåì
вещения о результате выполнения задается с помощью # ïðîïóùåííûõ ôàéëîâ
mailcommand. Для отправки сообщений, не дожидаясь окон- mail = root@localhost = all, !skipped
# àäðåñ îïåðàòîðà ñìåíû íîñèòåëÿ
чания задания, используется команда, определенная с по- operator = root@localhost = mount
мощью operatorcommand. Для информативности можно ис- # ïðîäóáëèðîâàòü âñå òèïû ñîîáùåíèé â êîíñîëü Bacula,
# çà èñêëþ÷åíèåì ïðîïóùåííûõ è íåñîõðàíåííûõ ôàéëîâ
пользовать следующие переменные: console = all, !skipped, !saved
! %c – имя клиента; # çàïèñûâàòü ñîîáùåíèÿ â ôàéë
append = "/var/lib/bacula/log" = all, !skipped
! %d – имя центра управления; }
! %e – код завершения задания;
! %i – номер задания; Как видно выше, мы направляем на адрес root@localhost
! %n – имя задания; все типы сообщений, за исключением пропуска файлов. Все
! %l – тип архивирования; эти сообщения будут продублированы в файл /var/lib/bacula/
! %r – получатель; log. Пропущенными могут быть файлы, попавшие под маску
! %t – тип задания. исключения в описании набора файлов или в случае инкре-
ментального архивирования, если эти файлы со времени
Запись, определяющая передачу сообщений, может последнего резервирования не изменялись. В консоль Bacula
иметь два формата: будут направляться все сообщения, кроме пропущенных по
желанию пользователя файлов (!skipped), а также ошибок
<ïóòü> = <òèï ñîîáùåíèé1>, <òèï ñîîáùåíèé2>,... при сохранении файлов (!saved). Если мы не хотим получать
<ïóòü> = <àäðåñàò> = <òèï ñîîáùåíèé1>, <òèï ñîîáùåíèé2>,...
сообщения по почте и записывать отчеты в файл, достаточ-
В первом варианте в качестве <путь> может быть стан- но закомментировать эти строки. Но хоть один из видов уве-
дартный взвод (stdout), стандартный поток ошибок (stderr) домления рекомендуется оставить, иначе не будет видно
или консоль Bacula (console). При использовании второго возникновения ошибок или запроса на смену носителя.
типа формата путь может принимать следующие значения: Последний элемент, который необходимо рассмотреть, –
! центр управления (director); это описание пула томов. Приведено описание только од-
! файл (file); ного пула, но нам необходимо для работы еще три – для
! добавление в существующий файл (append); полного, дифференционного и инкрементального архиви-
! системный лог (syslog); рования. Имена им необходимо дать те, что были исполь-
! сообщение по почте (mail); зованы при описании шаблона задания (FullBackups, Diff
! сообщение по почте при ошибке (mail on error); Backups, IncBackups).
! немедленное сообщение (operator).
Pool {
Name = Default # èìÿ òîìà
Отличие пути «operator» от «mail» состоит в том, что по- Pool Type = Backup # òèï ïóëà
ступившее сообщение будет отправлено немедленно, а не Recycle = yes # ñòèðàòü ëè ïîìå÷åííûå
# íà óäàëåíèå òîìà
после завершения задания. Это удобно для отправки сооб- AutoPrune = yes # ïîìå÷àòü íà óäàëåíèå ñòàðûå òîìà
щения о том, что текущий том заполнен, и для продолжения Volume Retention = 3m # ñðîê õðàíåíèÿ òîìà 3 ìåñÿöà
LabelFormat = "File-" # ôîðìàò ìàðêèðîâêè òîìà
выполнения задания необходимо подключение нового. }
Bacula имеет следующие типы сообщений:
! информационное (info); Теперь можно проверить правильность созданных кон-
! предупреждение (warning); фигурационных файлов. Сделать это можно, запустив по
! ошибка (error); очереди каждого из демонов с ключами -t -c /$PREFIX/bacula/
! критическая ошибка (fatal); bacua-<daemon>.conf:
! остановка службы (terminate);
! сохранение без ошибок(saved); bacula-fd -t -c bacula-fd.conf
bacula-sd -t -c bacula-sd.conf
! файл не сохранен (notsaved); bacula-dir -t -c bacula-dir.con
! необходимо подключение нового тома (mount);
! файл восстановлен (restored); Задав нужное количество заданий, периодически запус-
! все типы (all). каемых планировщиком, мы получим удобную систему по
созданию резервных копий данных. Вмешательство со сто-
Если перед типом сообщения указать модификатор «!», роны администратора будет необходимо в случае, если
то это будет означать, что данный тип сообщений включать закончится место на кассете и нужно будет ее сменить, о
не нужно. Исключение определенных сообщений исполь- чем Bacula уведомит по почте. В следующей части статьи
зуется совместно с типом «all». пойдет речь о консольных командах работы с этой систе-
мой – запуск заданий вручную, проверка целостности дан-
Messages { ных, восстановление информации из архивов и управле-
Name = Standard # èìÿ êàíàëà ñîîáùåíèé
# êîìàíäà îòïðàâêè îò÷åòà нием томами и пулами.

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

БАЗОВАЯ НАСТРОЙКА МАРШРУТИЗАТОРА CISCO


НАЧАЛЬНОГО УРОВНЯ

АНДРЕЙ МАРКЕЛОВ
Устав бороться дома с несогласным стабильно работать мар- ! DHCP-сервер;
шрутизатором DLink 624+, я наконец решил поменять это ! поддержка протокола Point-to-Point Protocol over Ethernet
недорогое, но проблемное устройство на что-нибудь более (PPPoE), по которому осуществлялось подключение к
надежное. провайдеру;
Необходимо было выполнение следующих типичных для ! надежность и возможность мониторинга состояния мар-
дома или небольшого офиса функций: шрутизатора, которой так не хватало в DLink 624+.
! подключение до пяти сетевых устройств (реально у меня
одновременно работало не больше двух, требующих В итоге я остановил свой выбор на младшем маршру-
выхода за пределы домашней сети); тизаторе модельного ряда компании Cisco Systems.
! развитый брандмауэр и сетевая трансляция адресов Далее я приведу описание процесса базовой настрой-
(NAT); ки маршрутизатора, которое может послужить отправной

48
администрирование
точкой для самостоятельного конфигурирования домашней/ Home(config)#no ip http server
офисной «кошки» UNIX- или Windows-администратором, Home(config)#no ip http secure-server
Home(config)#no cdp run
ранее не работавшим с оборудованием Cisco.
Теперь включим режим хранения паролей в файле кон-
Подключение фигурации устройства в зашифрованном виде:
Для первоначальной настройки маршрутизатора необходи-
Home(config)#service password-encryption
мо подключиться к консольному порту на задней панели
устройства. Консольный порт с разъемом RJ-45 представ- После чего можно задать и сами пароли. Для начала на
ляет собой обыкновенный асинхронный последовательный консольное подключение:
порт TIA/EIA-232. Для подключения к ПК вам понадобится
Home(config)#line con 0
помимо так называемого rollover-кабеля, идущего в комп- Home(config-line)#password пароль
лекте с маршрутизатором, переходник к DB-9, и, естествен- Home(config-line)#login
но, COM-порт на рабочей станции. Установка соединения Home(config-line)#exit
Home(config)#
осуществляется со стандартными значениями – 9600 бод/8
бит данных/1 стоп бит/без проверки четности и контроля Затем таким же способом, но уже на подключение с по-
прохождения. мощью telnet. Вместо команды line con 0 в этом случае бу-
В Windows-системах вы можете использовать утилиту дет line vty 0 4, остальное останется неизменным. Зададим
HyperTerminal, а в Linux – cu или minicom. В дальнейшем, также пароль, который маршрутизатор будет спрашивать
когда маршрутизатору будет присвоен IP-адрес, вы сможе- у уже подключившегося пользователя при попытке перей-
те обращаться к нему по протоколам telnet или ssh, но пер- ти из пользовательского в привилегированный режим ко-
вый раз без консольного подключения не обойтись. мандой enable:
Итак, даем с рабочей станции команду на подключение,
Home(config)#enable secret пароль_enable_режима
и после нажатия <Enter> оказываемся в командной строке
маршрутизатора. Думаю, к этому моменту я привел достаточно примеров
того, как выглядит работа с командной строкой маршрути-
Router>
затора Cisco и в оставшейся части статьи, чтобы избегать
Теперь необходимо перейти в привилегированный ре- повторов, я просто буду ссылаться на соответствующие
жим, в котором и будем осуществлять настройку: строки конфигурации маршрутизатора, приведенной в кон-
це материала.
Router>enable
Router#

Нужно заметить, что в дальнейшем мы установим на


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

Router#erase startup-config
Router#reload

За ходом перезагрузки можно наблюдать по появляю-


щимся сообщениям в окне терминала. По окончании про-
цесса перезагрузки снова заходим в командную строку и
переходим в привилегированный enable-режим. После чего
можно приступить к конфигурированию маршрутизатора. Ðèñóíîê 1

Базовые настройки Настройка интерфейсов и PPPoE


Для начала присвоим маршрутизатору имя. Переходим в Поскольку мы настраиваем маршрутизатор, то, естествен-
глобальный конфигурационный режим и в нем используем но, у него имеется минимум два интерфейса. Внутренний –
команду hostname: Ethernet0 и внешний Ethernet1. Определяются они в строках
31-35 и 37-43 соответственно. Для внутреннего интерфейса
Router#configure terminal
Enter configuration commands, one per line. End with CNTL/Z. мы задаем IP-адрес 192.168.0.88 и маску 255.255.255.0,
Router(config)#hostname Home а для внешнего указываем команду: no ip address. Все вне-
Home(config)#
шние параметры будут получены через PPPoE (строки 42 и
Как мы видим, отображение приглашения несколько из- 43). Для того чтобы закрыть обсуждение ethernet-интерфей-
менилось. Теперь займемся безопасностью. Отключим уп- сов, но несколько забегая вперед, обращаю внимание на
равление маршрутизатором через http и https, а также про- строчку 33, где указан внутренний интерфейс для NAT.
приетарный Cisco Discovery Protocol, который нам в дан- В строках с 45 по 55 приведено описание интерфейса
ном случае абсолютно не нужен. Dialer0. Это виртуальный интерфейс, через который и осу-

¹4, àïðåëü 2005 49


администрирование
ществляется подключение к PPPoE. Хочу обратить особое 05: service password-encryption
внимание на 53 и 54 строки, где нужно задать имя и па- 06: !
07: hostname Home
роль, выданные вам провайдером. А также на строку 55 – 08: !
без которой маршрутизатор не получит IP-адресов DNS- 09: enable secret xxxxxx
10: enable password xxxxxx
серверов провайдера. 11: !
Помимо описания Dialer0 к настройке PPPoE относятся 12: username homeuser password xxxxxx
13: aaa new-model
также строки 25-29 и 77. За более подробной информаци- 14: !
ей я рекомендую обратиться к документации и сайту 15: aaa session-id common
16: ip subnet-zero
www.cisco.com. Последнее, о чем необходимо упомянуть, – 17: ip dhcp excluded-address 192.168.0.1 192.168.0.90
строка 59, где задается маршрут по умолчанию, указываю- 18: !
19: ip dhcp pool CLIENT
щий на Dialer0. 20: import all
21: network 192.168.0.0 255.255.255.0
22: default-router 192.168.0.88
Настройка NAT, DHCP и брандмауэра 23: lease 0 2
Переходим к настройке NAT. Тут в IOS все достаточно про- 24: !
25: vpdn enable
сто. Помимо 33 строки, про которую уже упоминалось во 26: !
время разбора конфигурации внутреннего интерфейса, за 27: vpdn-group 1
28: request-dialin
NAT отвечают строки 57 и 64. Как мы видим, 57 строка ссы- 29: protocol pppoe
лается на 64, в которой описан так называемый access-list, 30: !
31: interface Ethernet0
определяющий внутренние IP-адреса, которые мы будем 32: ip address 192.168.0.88 255.255.255.0
транслировать во внешний на интерфейсе Dialer0. 33: ip nat inside
34: ip tcp adjust-mss 1452
С помощью тех же «листов доступа» мы в строках с 65 34: no cdp enable
по 76 на Dialer0 организуем простейший межсетевой экран, 35: hold-queue 32 in
36: !
безусловно пропуская icmp, www, smtp, pop3, ftp и dns-тра- 37: interface Ethernet1
фик. Также при уже установленной tcp-сессии будем прини- 38: no ip address
39: no ip unreachables
мать пакеты с номером порта, большим чем 1023. Кроме того, 40: ip tcp adjust-mss 1452
в строке 49 определен IP-адрес рабочей станции, с которой 41: duplex auto
42: pppoe enable
разрешен доступ по telnet для управления маршрутизатором. 43: pppoe-client dial-pool-number 1
Если вам понадобится подкорректировать правила – опять 44: !
45: interface Dialer0
же смотрите документацию. 46: ip address negotiated
Последнее, что мы рассмотрим, – это настройку DHCP- 47: ip access-group 110 in
48: ip mtu 1492
сервера. В строке 17 мы указываем область, выделенную 49: ip nat outside
под статические IP-адреса. В нее должен попасть и IP-ад- 50: encapsulation ppp
51: dialer pool 1
рес внутреннего интерфейса маршрутизатора. В строках 52: dialer-group 1
19 – 23 описан пул адресов нашего DHCP-сервера. Коман- 53: ppp chap hostname homehostname
54: ppp chap password xxxxxx
дой import all клиентам передаются полученные через Dialer0 55: ppp ipcp dns request
сетевые настройки. В качестве шлюза по умолчанию выс- 56: !
57: ip nat inside source list 102 interface Dialer0 overload
тупает внутренний интерфейс с IP-адресом 192.168.0.88. 58: ip classless
59: ip route 0.0.0.0 0.0.0.0 Dialer0
60: no ip http server
61: no ip http secure-server
62: !
63: access-list 49 permit 192.168.0.13
64: access-list 102 permit ip 192.168.0.0 0.0.0.255 any
65: access-list 110 permit tcp any any gt 1023 established
66: access-list 110 permit tcp any any eq www
67: access-list 110 permit tcp any any eq smtp
68: access-list 110 permit tcp any any eq pop3
69: access-list 110 permit tcp any any eq ftp
Ðèñóíîê 2 70: access-list 110 permit tcp any any eq ftp-data
71: access-list 110 permit tcp any any eq domain
72: access-list 110 permit udp any any eq domain
Полный конфигурационный лист 73: access-list 110 permit udp any eq domain any
В заключение статьи приведу полную конфигурацию мар- 74: access-list 110 permit tcp any eq domain any
75: access-list 110 permit icmp any any
шрутизатора, полученную по команде show running-config. 76: access-list 110 deny ip any any
В листинге вы можете увидеть часть команд, которые не 77: dialer-list 1 protocol ip permit
78: no cdp run
были описаны в статье, они или были сформированы са- 79: !
мим устройством или не имеют принципиального значения 80: line con 0
81: exec-timeout 120 0
для первого знакомства с маршрутизатором. Для уточне- 82: password xxxxxx
ния значения этих команд рекомендую обратиться к доку- 83: no modem enable
84: stopbits 1
ментации. 85: line aux 0
86: line vty 0 4
87: access-class 49 in
01: version 12.3 88: exec-timeout 120 0
02: no service pad 89: password xxxxxx
03: service timestamps debug uptime 90: !
04: service timestamps log uptime 91: end

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

SLACKWARE НА РАКЕТНОМ ТОПЛИВЕ


ИЛИ ОБЗОР VectorLinux 5.0.1 SOHO
...Built on Slackware Linux, one of the most stable and
best performing distributions available today...

http://distrowatch.com/?newsid=02042

СЕРГЕЙ ЯРЕМЧУК
Пока идут горячие споры по поводу возможности исполь- занимающую много места. Последнее реализуется за счет
зования GNU/Linux на рабочих столах пользователей, прак- тщательного отбора утилит, в которых реализованы наи-
тически все основные производители дистрибутивов уже большая функциональность и удобство с одновременным
представили соответствующие версии своих продуктов. В уменьшением количества дублирующих приложений. Дис-
последнее время наметилась устойчивая тенденция к по- трибутив свободно доступен с ftp-архива в виде iso-обра-
явлению версий дистрибутивов, направленных на конкрет- за, кроме того, продается в онлайн-магазинах по цене 26.97
ную целевую аудиторию, которая, очевидно, будет наблю- USD. Последний вариант комплектуется extra-диском, со-
даться и в дальнейшем. Причин достаточно. Так, пользова- держащим дополнительные приложения (ядро 2.6.10,
тели не желают платить за ненужные диски, особенно ког- RealPlayer, Opera, Adobe Acrobat Reader и пр.) и книгу по
да задача состоит в простом знакомстве с новинками (в установке дистрибутива. Кроме SOHO, у VectorLinux есть и
этом случае хватит и LiveCD), с другой стороны, на серве- другие варианты. Так Standard Edition, размером 350 Мб,
ре совсем не нужны графические оболочки и различные содержит минимально необходимую среду, его главный
мультимедиапроигрыватели. К тому же очень жесткие тре- девиз – скорость и легкость. Версия Deluxe Edition также
бования к защите серверов на домашнем компьютере бу- имеет диск с дополнительным софтом и брошюру, содер-
дут скорее мешать, так как пользователю важно в первую жащую информацию об установке, и во многом напомина-
очередь удобство. Среди других позиций, которые хотелось ет SOHO, но составом приложений предназначена больше
бы иметь в дистрибутиве, ориентированном на неподготов- для профессионального использования. И наконец, «неста-
ленного пользователя, – простая и понятная программа ус- бильная ветка» Dynamite Edition используется в основном
тановки и максимально возможная поддержка оборудова- разработчиками, на ней отрабатываются все нововведения,
ния, включая различные USB, Bluethooth и беспроводные которые, возможно, появятся в следующих релизах
устройства, TV-тюнеры, не говоря уже о принтерах, скане- VectorLinux. Вероятно, «динамит» является самым друже-
рах и программах записи CD и DVD. Далее хотелось бы любным Slackware на сегодняшний день.
иметь нормальную локализацию и понятную программу по- Также хотелось бы отметить, что не так давно проект
стустановочной настройки дистрибутива, а также софт на обзавелся более-менее понятной документацией (имею-
все (или почти на все) случаи жизни. Еще не хочется долго щейся в том числе и на диске, правда, на английском язы-
искать нужное приложение в меню, т.к. даже при минималь- ке), позволяющей разобраться с особенностями работы в
ной установке Linux количество различных программ пере- VectorLinux. Единственный недостаток VectorLinux, который
валивает за тысячу, и пользователю необходимо иметь хоть в наших условиях является критичным, – это полное отсут-
какую-то подсказку, что у него установлено и для чего оно ствие локализации, в системе доступен только английский
предназначено. интерфейс. Поэтому ею придется заниматься самому, взяв
Наиболее популярные производители настольных вер- необходимые пакеты из Slackware.
сий Linux, вроде SuSE, Mandrake, Fedora, пытаются разме-
стить все приложения на трех-пяти дисках, и пользователю Установка
приходится долго выбирать из длинного списка то, что ему Устанавливать VectorLinux можно несколькими способами,
действительно нужно. Создатели канадского VectorLinux в том числе и используя скачанный iso-образ без записи
SOHO (http://www.vectorlinux.com), основой которого послу- его на диск. Начинающие пользователи не очень любят
жил Slackware, решили ограничиться одним-единственным Slackware, в том числе и за программу-инсталлятор. Надо
диском, на который поместилась полноценная рабочая сре- отметить, что в VectorLinux, как и в родительском дистри-
да со всеми необходимыми библиотеками и приложения- бутиве, программа установки не блещет графическими кра-
ми. В феврале 2005 года был анонсирован 5.0 релиз этого сотами: все та же простота и управляемость. Но создатели
дистрибутива, о котором и пойдет речь в статье. Как видно проделали хорошую работу и упростили то, что упростить,
из названия SOHO (Small Office/Home Office), этот дистри- казалось, уже невозможно. Мне приходилось иметь дело с
бутив предназначен для использования в настольных ком- предыдущими версиями VectorLinux. Почти полгода на моем
пьютерах. Главная задача SOHO версии VectorLinux – со- компьютере стояла версия SOHO 3.2. Тогда установка зак-
здать удобную рабочую среду с хорошей интеграцией при- лючалась в распаковке 650-мегабайтового архива в ука-
ложений, работающую быстро, простую в установке и не занный раздел, и единственное действие, которое необхо-

¹4, àïðåëü 2005 51


администрирование
димо было сделать пользователю, – это создать его при (VectorLinux System Menu). Полная установка занимает око-
помощи cfdisk, отформатировать под необходимую файло- ло 2 Гб.
вую систему и указать на него программе. Причем можно Оборудование определилось нормально, проблема
было использовать только одну точку монтирования – кор- была только с мышью. Причем здесь по сравнению с вер-
невую, что было не совсем удобно. В версии 5.0 у пользо- сией 3.2 положение даже ухудшилось. Тогда внешняя USB-
вателя, производящего установку, выбор несколько боль- мышь исправно работала, а touchpad пришлось настраи-
ше. Так можно запросто восстановить загрузчик, для чего вать, вручную изменив параметр Protocol с IMPS/2 на PS/2.
достаточно выбрать нужный пункт меню. Для создания раз- Теперь же выяснилось, что не работают обе мыши. Также
делов используется GNUParted (в пункте меню RESIZE) и не советую выбирать русскую раскладку клавиатуры для
cfdisk, но теперь в ходе установки позволяется выбрать две X-Window, иначе после перезагрузки, которая последует
точки монтирования (корневой и /home, рис. 1), которые после окончания настроек, в систему вы не попадете, пото-
можно отформатировать под reiserfs, ext2 или ext3. му что не сможете изменить раскладку. Все это лучше бу-
дет сделать потом, вручную подправив файл /etc/X11/
xorg.conf. Что ж, удобство программы установки VectorLinux
весьма спорно, если учесть ориентацию дистрибутива на
SOHO-пользователя. Но поскольку процессом инсталляции
обычно заправляют администраторы, то простота интер-
фейса является, наоборот, преимуществом, к тому же вре-
мени на установку уходит минимум. Начинающие пользо-
ватели редко устанавливают систему сами, доверяя эту
процедуру товарищам поопытнее.

Работа в VectorLinux
Основной вывод после первого моего знакомства с Vector
Linux заключался в том, что это удобный настольный дист-
рибутив. Буквально с первых шагов чувствовалась забота
о пользователе, в консоли выводились подсказки, на рабо-
чем столе лежали «нужные» ярлыки. Особенно понрави-
Ðèñóíîê 1 лось меню Midnight Commander, в котором были дополни-
Если что-то не выходит, то, выбрав соответствующий тельные пункты, позволяющие конвертировать, установить,
пункт меню, можно выйти в оболочку (причем это будет пол- распаковать, создавать пакеты для установки в дистрибу-
ноценная оболочка с mc и прочими удобствами), где будет тиве. Причем работа с rpm, deb и tgz-пакетами была реали-
доступен fdisk и другие утилиты для форматирования и про- зована так, что пользователь вообще не задумывался о раз-
верки указанных выше файловых систем. Также пользова- нице между ними. Плюс дистрибутив имел свой аналог apt-
тели получили некоторую свободу в выборе программ. Пред- get из Debian, который назывался vec-get. Вопрос о быст-
лагаются две группы приложений. В первую, названную роте как-то не стоял, очевидно, быстродействие версии 3.2
«Bulk», входит три пакета: veclinux, содержащий базовую было приблизительно на одном уровне с другими дистри-
систему и основные приложения, OpenOffice, назначение бутивами. Хотя, учитывая продуманные загрузочные скрип-
которого понятно из названия, и XAMPP, представляющий ты и то, что без спроса не один сервис не запускался, гру-
из себя удобную инфраструктуру для программирования и зился он действительно быстро. К версии 5.0 применим
тестирования веб-приложений (Apache + MySQL + PHP + только один термин – ракета. По сравнению с ней осталь-
ProFTP и пр.). ные – это медленно ползущие черепахи. Рядом с ним по
Вторая группа packages включает общим счетом 61 при- быстродействию можно поставить разве что Gentoo stage3.
ложение, представляющие в большинстве своем альтерна- Я довольно редко работаю в KDE, которую считаю хоть и
тиву входящим в базовый комплект. Среди них MPlayer, удобной, но все же несколько медленной средой. В случае
AmaroK, Kaffeine, XMMS, Sylpheed, GIMP, Inkscape, Firefox с VectorLinux реакция системы была так быстра, что от этих
(с плагинами Flash, Java и Mplayer), QCad и пр. предрассудков не осталось и следа. И это при том, что сре-
После копирования файлов установка собственно и за- ди остальных вариантов SOHO считается самым медлен-
канчивается, система предлагает извлечь диск и перезаг- ным, отчасти от того, чтобы сделать пребывание пользова-
рузиться. После чего наступает этап постинсталляционной теля более удобным и комфортным. Огорчает то, что в ран-
настройки, в ходе которой необходимо будет определить- них версиях дистрибутива пакеты для локализации KDE
ся, куда устанавливать загрузчик, настроить X.Org, времен- хотя и не устанавливались вместе с системой, но все же
ной пояс, сеть, звук, задать пароль root и создать дополни- имелись на диске. Теперь их, как было отмечено выше,
тельных пользователей, а также выбрать вариант работы просто нет. Если же KDE (рис. 2) все равно покажется слиш-
(текстовый или графический, настольный или серверный). ком медленным, то пользователю предлагается альтерна-
При выборе графического режима работы сразу же загру- тива в виде IceWM. Причем его можно загрузить, так ска-
жает X-Window. В серверном варианте, дополнительно стар- зать, в чистом виде, а можно и с включенным ROX-Filer
туют Samba и sshd. Можно все настроить сейчас, но лучше – (http://rox.sourceforge.net), который расширяет возможнос-
потом, загрузившись и воспользовавшись утилитой VASM ти IceWM, добавляя поддержку иконок рабочего стола.

52
администрирование
Обычно у пользователей возникает проблема при мон- ивает сеть, принтеры, межсетевой экран, устанавливает заг-
тировании/размонтировании сменных носителей. В Vector рузчик, производит резервное копирование файлов и пр.
Linux работа с такими устройствами реализована на долж- Как видите, разработчики собрали в одной простой утили-
ном уровне, а при помощи контекстного меню, вызываемо- те все возможные настройки, с которыми обычно прихо-
го правой кнопкой мыши, можно всегда отмонтировать ус- дится иметь дело пользователю. Естественно, есть fdisk,
тройство даже в том случае, когда оно занято. В том числе Центр Управления KDE, GuardDog (настройка межсетевого
успешно получается проделать это и CD-ROM. экрана) и прочие утилиты, предназначенные для настрой-
ки отдельных параметров и сервисов, но в VASM сочетает-
ся одновременно интеграция возможностей и простота, по-
зволяющая без труда понять, как сделать ту или иную опе-
рацию, что в совокупности делают его хорошим орудием.
Хотя до возможностей SUSE YaST и Mandrake Control Center
он пока не дотягивает.
В последних версиях дистрибутива появилась еще одна
утилита, на которую возложена задача по установке/уда-
лению приложений, т.е. по работе с пакетами, называюща-
яся VLAPT.

Ðèñóíîê 2
Дистрибутив, кроме стандартных утилит, для настрой-
ки, имеет и свой конек – VASM (рис. 3), который появился в
версии 2.0 и постоянно модернизировался с учетом пред-
ложений пользователей.

Ðèñóíîê 4
Базируется VLAPT на slapt-get. В более ранних версиях
эту работу можно было сделать при помощи VASM, vec-get,
пунктов меню Midnight Commander (традиционные утилиты
от Slackware вроде installpkg, upgradepkg, естественно, тоже
доступны). Сейчас все лишнее убрано, и, очевидно, в даль-
нейшем пользователю, не желающему вникать в особен-
ности работы slapt-get и других консольных утилит из
pkgtools, будет предложен только VLAPT. О конкретных при-
ложениях особого смысла говорить нет. Достаточно отме-
тить, что поставляемые по умолчанию в дистрибутиве ути-
Ðèñóíîê 3 литы охватывают весь спектр потребностей среднестатис-
Начиная с версии 3.2, SOHO VASM получил графичес- тического пользователя. Меню организовано традиционно,
кий интерфейс (ранее можно было работать только из кон- а по клику на файле вызывается сопоставленное приложе-
соли), некоторые пункты стали доступны в виде отдельных ние. Так, веб-браузером по умолчанию является Firefox, как
команд. При вызове проверяется значение переменной альтернатива Konqueror. И все. Пользователю не нужно
$DISPLAY и в зависимости от того, в каком режиме (кон- будет выбирать между 5 разными браузерами. Аналогично
соль или X-Window) его запускают, используется соответ- и с остальными приложениями. В VectorLinux нет десятка
ствующий интерфейс. Некоторые надстроечные функции, текстовых редакторов, проигрывателей музыкальных и ви-
предоставляемые скриптом, будут доступны только пользо- деофайлов, почтовых клиентов. Пользователю предостав-
вателю root, а часть параметров (настройка X-сервера, об- лен необходимый, но удобный в работе минимум. В общем,
наружение нового оборудования) работают только в консо- он будет чувствовать себя здесь достаточно комфортно.
ли. VASM позволяет автоматически отключить, определить Пора подвести итоги. Подойдет ли VectorLinux SOHO
и настроить новое оборудование, берет на себя работу с начинающему пользователю? Сомнительно, хотя в уже на-
пользователями (добавление, удаление, изменение паро- строенной системе ему будет трудно запутаться. Но он при-
ля, быстрые команды /sbin/vuser, /sbin/vuseradd, /sbin/ дется по вкусу пользователю с небольшим уровнем подго-
vuserdel и /sbin/vpasswd), конфигурацию X-Window и на- товки или желающему освоить работу в Linux, использую-
стройку менеджера входа в систему, уровень запуска сис- щему Slackware, но считающему его несколько неудобным
темы, задает сервисы, запускаемые при загрузке, настра- или непонятным.

¹4, àïðåëü 2005 53


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

РЕИНКАРНАЦИЯ ДАННЫХ

СЕРГЕЙ СУПРУНОВ
Трудно представить себе предприятие или организацию, где мандой delete, она физически остается в файле, а в поле
не использовались бы базы данных для хранения инфор- признака удаления заносится символ 0x2A («*»). Такая за-
мации. Это и списки инвентаризации основных средств, и пись считается помеченной на удаление и по умолчанию в
базы абонентов – пользователей услуг предприятия, и т. п. операциях не участвует. Физическое удаление осуществ-
На российских просторах все еще огромной популярнос- ляется только в результате так называемой упаковки (pack)
тью пользуется формат DBF, в частности, именно в нем таблицы данных. Таким образом, нужно помнить, что дли-
хранит свои таблицы старый добрый FoxPro. Тем не менее на каждой записи будет определяться суммой длин полей
жизнь не стоит на месте, рано или поздно возникает воп- плюс один байт.
рос о переносе всех накопленных данных на более функ- Òàáëèöà 2. Ñòðóêòóðà «îãëàâëåíèÿ» òàáëèöû
циональные СУБД. В данной статье рассматривается не-
сколько способов осуществления такой миграции из FoxPro
в БД PostgreSQL. Способы различаются как сложностью
реализации (хотя это довольно субъективный критерий), так
и степенью автоматизации. Естественно, перечень возмож-
ных реализаций никоим образом не ограничивается при-
веденным здесь.
Итак, задача – перенести информацию, хранящуюся в
формате DBF (СУБД FoxPro 2.6), в базу данных PostgreSQL
(используемая версия сервера – 8.0.1, операционная сис-
тема – FreeBSD 5.3). Прежде чем приступать к решениям,
рассмотрим, что представляет собой DBF-файл. Импорт внешних файлов в PostgreSQL
СУБД PostgreSQL позволяет осуществлять загрузку дан-
Формат DBF ных из внешних файлов и экспорт во внешние файлы с по-
Формат DBF достаточно прост: 32 байта заголовка файла, мощью команды COPY.
«оглавление» таблицы, данные. В таблице представлен фор- Ее синтаксис следующий:
мат заголовка с кратким описанием каждого поля:
serg=> \h copy
Òàáëèöà 1. Ñòðóêòóðà çàãîëîâêà DBF-ôàéëà Команда: COPY
Описание: копировать данные между файлом и таблицей
Синтаксис:
COPY tablename [ ( column [, ...] ) ]
{FROM | TO} { 'filename' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column [, ...] ]

Для загрузки данных из внешних файлов используется


команда COPY FROM. Таблица tablename, в которую будет
осуществляться загрузка, должна существовать и иметь
поля, тип которых соответствует формату полей загружае-
Далее следует оглавление таблицы – каждые 32 байта мого текстового файла. Обратите внимание, что исходная
описывают одно поле данных (имя поля, тип данных, длину таблица и таблица PostgreSQL не обязательно должны
поля и т. д.) (см. таблицу 2). иметь одинаковую структуру – в процессе подготовки дан-
«Оглавление» завершается символом 0x0D, после ко- ных, как будет показано ниже, и количество и типы экспор-
торого следуют записи данных. Самый первый байт каж- тируемых полей могут меняться. Например, в процессе эк-
дой записи – признак удаления. Если запись удаляется ко- спорта исходное поле типа Date может быть записано в

54
администрирование
файл в виде «2005-04-04», что позволит в дальнейшем заг- Первые два способа особых сложностей вызвать не дол-
рузить его также в поле даты. А может принять вид «4 ап- жны, поэтому в дальнейшем сосредоточимся на третьем, и
реля 2005 года», и его уже можно будет импортировать толь- будем осуществлять преобразование данных из cp866 в
ко в текстовое поле. koi8-r в процессе переноса данных.
Опции BINARY и OIDS в данном случае нас не интере-
суют – они могут быть полезны, когда и импорт, и экспорт Замечание о memo-полях
выполняется в PostgreSQL. FoxPro использует поля типа MEMO для хранения больших
Текстовый формат загружаемого файла достаточно текстовых данных неопределенного размера во внешнем
прост – каждая запись должна размещаться в одной стро- файле (обычно используется расширение fpt). Работа с эти-
ке, поля разделяются с помощью одиночного символа ми полями имеет ряд особенностей, но о них поговорим в
«delimiter». Если символ-разделитель встречается внутри следующей части статьи, поэтому сейчас будем полагать,
поля данных, он должен экранироваться символом «\». Оди- что экспортируемые таблицы полей такого типа не содер-
ночный символ «\», встречающийся в данных, должен так- жат.
же экранироваться, чтобы исключить его специальную трак-
товку. Путь 1: подготовка данных
Начиная с версии PostgreSQL 8.0 поддерживается так- с помощью FoxPro
же загрузка из CSV-файла, который является, по сути, фай- СУБД FoxPro предоставляет пользователю достаточно мощ-
лом с разделителем (обычно – запятая), с той разницей, ный язык программирования, чем мы и воспользуемся. В
что поля данных для исключения неоднозначности при об- данном разделе мы напишем несложную программу, кото-
работке символов могут заключаться в кавычки. рая будет формировать текстовый файл с разделителями,
Еще один параметр, NULL AS, задает символьную стро- пригодный для импорта в PostgreSQL с помощью команды
ку, которая будет рассматриваться как значение NULL. По COPY. В качестве разделителя будем использовать сим-
умолчанию используется последовательность «\N». вол табуляции.
Нужно заметить, что при работе в терминале psql дос-
тупны две команды: COPY и \COPY. Первая – это SQL-ко- Ëèñòèíã 1. Ïðîãðàììà dbf2pg.prg íà FoxPro
манда, выполняемая сервером, вторая – команда интерак- *  FoxPro êîììåíòàðèè íà÷èíàþòñÿ ñèìâîëîì «*»
тивного клиента. Разница между ними в правах, с которы- * Óñòàíàâëèâàåì ôîðìàò äàòû
SET DATE TO YMD
ми они выполняются. В первом случае возможности досту- SET CENTURY ON
па определяются правами процесса postmaster, во втором * Îòêðûâàåì òàáëèöó äëÿ ýêñïîðòà
USE s_cats ALIAS tab
– правами пользователя, запустившего psql. * Îïðåäåëÿåì ðàçäåëèòåëü êàê ñèìâîë òàáóëÿöèè
Обратите внимание, что если в процессе загрузки воз- m.delimiter = CHR(9)
никает ошибка (например, в какой-то строке не хватает поля * Îïðåäåëÿåì ñòðîêè äëÿ ïåðåêîäèðîâêè â koi8
или имеется лишнее, формат данных не соответствует типу !Ö¤ ·°¹ð¸'
m.koiabcb = 'ñò¢÷ôõ¡·ùúûüýþÿ¨ªº¯¿öøó!
m.koiabcs = ' '
поля, в которое осуществляется запись и т. д.), то ни одна m.koiabc = m.koiabcb + m.koiabcs
из записей в итоговую таблицу не попадает, то есть им-
m.dosabcb = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞß'
порт выполняется как единый транзакционный блок. m.dosabcs = 'àáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
m.dosabc = m.dosabcb + m.dosabcs
Несколько слов о кодировках * Óêàçûâàåì êîäèðîâêó
Как всегда, если речь идет о переносе данных между раз- m.dstcp = 'koi8'
личными системами, встает вопрос о преобразовании ис- * Ñîçäàåì ðåçóëüòèðóþùèé ôàéë è îòêðûâàåì åãî
пользуемых кодировок. FoxPro обычно хранит данные в * íà çàïèñü (äåñêðèïòîð – â ïåðåìåííîé m.txf)
m.txf = FCREATE('table.txt')
cp866 (FoxPro for DOS) или в cp1251 (FoxPro for Windows).
В то же время кодировка баз PostgreSQL может быть иной * Äåëàåì òàáëèöó àêòèâíîé
SELECT tab
(у меня, например, это koi8-r). Решить эту проблему можно * Öèêë ïî âñåì çàïèñÿì òàáëèöû
одним из трех способов: SCAN
* Ôîðìèðóåì ñòðîêó, óäàëÿÿ ëèøíèå ïðîáåëû
! Создать базу данных PostgreSQL с кодировкой, соответ- m.temp = ALLTRIM(uniqueid) + m.delimiter + ;
ствующей кодировке DBF-файлов. Это выполняется с по- ALLTRIM(user) + m.delimiter + ;
ALLTRIM(city) + m.delimiter + ;
мощью ключа ENCODING команды CREATE DATABASE. ALLTRIM(address) + m.delimiter + ;
Однако при этом могут возникнуть дополнительные ALLTRIM(tariff) + m.delimiter + ;
ALLTRIM(category) + m.delimiter + ;
трудности при обработке данных, если кодировка БД не IIF(EMPTY(date), '\N', ;
соответствует установленной локализации операцион- STRTRAN(DTOC(date), '/', '-'))
ной системы. * Åñëè âñòðå÷àåòñÿ òàáóëÿöèÿ – ìåíÿåì íà 4 ïðîáåëà
! Если сервер будет использоваться преимущественно как m.temp = STRTRAN(m.temp, CHR(9), SPACE(4))
сервер баз данных, а БД будет хранить в основном дан- IF m.dstcp == 'koi8'
ные, импортированные из FoxPro, то имеет смысл сра- * Åñëè â koi8, òî èñïîëüçóåì ñâîþ ôóíêöèþ
m.temp = dos2koi(m.temp)
зу «подогнать» кодировку операционной системы и базы ELSE
данных под кодировку файла DBF. * èíà÷å – ïîëüçóåìñÿ øòàòíîé ôóíêöèåé ïåðåêîäèðîâêè
m.temp = CPCONVERT(866, m.dstcp, m.temp)
! Наиболее универсальный способ – перекодировка дан- ENDIF
ных на стадии импорта. * Ýêðàíèðóåì ñèìâîëû '\'

¹4, àïðåëü 2005 55


администрирование
m.temp = STRTRAN(m.temp, '\', '\\') Путь 2: формирование файла
* Çàïèñü ïîëó÷åííîé ñòðîêè â ôàéë с разделителями с помощью
=FPUTS(m.txf, m.temp)
ENDSCAN сценария на Python
=FCLOSE(m.txf) Если у вас нет под рукой FoxPro или вы с ним не очень друж-
USE IN tab ны, то преобразование можно выполнить с помощью любо-
*=============================================== го другого языка программирования, правда, в этом слу-
* Ôóíêöèÿ ïåðåêîäèðîâêè èç cp866 â koi8-r чае DBF-файл придется разбирать вручную, отыскивая поля
PROCEDURE dos2koi данных в соответствии с информацией заголовка и «оглав-
PARAMETER m.string
ления». В данном разделе мы воспользуемся языком Python,
m.res = '' а в следующем аналогичные действия реализуем на Perl.
FOR m.i = 1 TO LEN(m.string)
m.pos = AT(SUBSTR(m.string, m.i, 1), m.dosabc) Из информации заголовка (первые 32 байта) интерес
IF m.pos > 0 для нас представляют только количество записей в табли-
m.res = m.res + SUBSTR(m.koiabc, m.pos, 1)
ELSE це и смещение первой записи, чтобы не вычислять эти зна-
m.res = m.res + SUBSTR(m.string, m.i, 1) чения лишний раз.
ENDIF
ENDFOR Сценарий будет выглядеть следующим образом:
RETURN m.res
Все здесь достаточно просто – сканируем таблицу, для Ëèñòèíã 2. Ñöåíàðèé dbf2pg.py – ðó÷íîé ðàçáîð ôàéëà DBF
каждой записи формируем строку, содержащую данные, #!/usr/local/bin/python
разделенные указанным в начале программы символом. # Êëàññ äëÿ õðàíåíèÿ èíôîðìàöèè î ïîëÿõ òàáëèöû
class field:
Если в данных встречается символ табуляции – заменяем def __init__(self):
его четырьмя пробелами (не самое красивое решение, но self.name = ''
self.type = 'C'
вполне пригодное). Повозиться приходится с перекодиров- self.len = 0
кой. Если PostgreSQL работает в cp1251, то для преобразо- self.dec = 0
self.pos = 0
вания кириллицы можно воспользоваться штатной функци-
ей FoxPro CPCONVERT. Перекодировать в koi8-r она, к со- # Ôóíêöèÿ ôîðìèðîâàíèÿ ôàéëà ñ ðàçäåëèòåëÿìè
def dbf2pg(fname):
жалению, не умеет, поэтому здесь придется использовать # Îòêðûâàåì dbf-Ôàéë â áèíàðíîì ðåæèìå
самописную функцию dos2koi. Смысл ее в том, чтобы по- dbf = open(fname, 'rb')
символьно заменить все, что входит в строку m.dosabc сим- # Ñ÷èòûâàåì çàãîëîâîê
волами из m.koiabc, расположенными на тех же местах. Во- head = dbf.read(32)
обще, чтобы не возиться с перекодировкой силами FoxPro # Âûáèðàåì èç çàãîëîâêà ÷èñëî çàïèñåé
(к слову, приведенная выше функция будет работать очень dblen = ord(head[7]) * 16777216 + ↵
ord(head[6]) * 65536 + ord(head[5]) * 256 + ↵
медленно), можно сформировать файл в исходной кодиров- ord(head[4])
ке, а затем пропустить его через внешний перекодировщик
# è ïîçèöèþ ïåðâîé çàïèñè
(когда-то мне попадался замечательный плагин к FAR). posfirst = ord(head[9]) * 256 + ord(head[8])
После того как текстовый файл сформирован, готовим
wexit = 0
таблицу в базе PostgreSQL и выполняем команду COPY: num = 0
totlen = 1
serg=> create table s_cats(uid char(10), catname char(35)); fields = []
CREATE TABLE while not wexit:
serg=> \copy s_cats from '/usr/home/serg/test/psql/TABLE.TXT' # ×èòàåì èíôîðìàöèþ î ïîëÿõ òàáëèöû
\. line = dbf.read(1)
serg=> select * from s_cats; if ord(line) == 0x0D:
# Åñëè ïåðâûé ñèìâîë – 0x0D, òî âûõîä –
uid | catname
# «îãëàâëåíèå» çàêîí÷åíî
------------+------------------------------------- wexit = 1
P0RH0S0SXJ | Без льгот else:
P0RH0S0SXN | Без начисления абонплаты # Èíà÷å äî÷èòûâàåì äî 32-õ ñèìâîëîâ
P0RH0S0SXR | ВОВ инвалиды line = line + dbf.read(31)
.. .. ..
# Íîâûé îáúåêò êëàññà field
К достоинствам рассмотренного способа можно отнес- fld = field()
ти то, что на этапе подготовки файла мы можем выполнить
# Èìÿ ïîëÿ – ñíà÷àëà äî ïåðâîãî ñèìâîëà 0x00
любую предварительную обработку данных – разбить одно fld.name = line[:line.find('\0')]
поле (например, «Абонент») на несколько («Фамилия»,
# Òèï ïîëÿ – 11-é áàéò
«Имя», «Отчество»), объединить несколько полей в одно, fld.type = line[11]
выбрать для экспорта только некоторые поля.
# Ñìåùåíèå ïîëÿ äàííûõ îò íà÷àëà çàïèñè
Недостатки – достаточно большой объем ручной рабо- fld.pos = ord(line[15]) * 16777216 + ↵
ты, поскольку программу dbf2pg.prg каждый раз нужно пра- ord(line[14]) * 65536 + ↵
ord(line[13]) * 256 + ↵
вить под конкретные поля экспортируемой таблицы. Кроме ord(line[12])
того, обработку всего, что не касается данных в таблицах,
# Äëèíà ïîëÿ
FoxPro выполняет сравнительно медленно. fld.len = ord(line[16])
Например, преобразование таблицы абонентов, содер- # Äëèíà äðîáíîé ÷àñòè
fld.dec = ord(line[17])
жащей 6 символьных полей и около 5000 записей, выпол-
няется порядка 40 секунд. # Çàíîñèì èíôîðìàöèþ â ìàññèâ

56
администрирование
fields.append(fld) # Åñëè ôîðìèðóþòñÿ êîìàíäû äëÿ \i, òî çàêàí÷èâàåì
num = num + 1 # äàííûå ñòðîêîé ‘\.’
totlen = totlen + fld.len if withcommand:
print '\\.'
if withcommand:
# Åñëè ïåðåìåííàÿ èñòèííà, òî ôîðìèðóåì êîìàíäó # Óñòàíàâëèâàåì íàñòðîå÷íûå ïåðåìåííûå
# íà ñîçäàíèå òàáëèöû delimiter = "\t"
withcommand = 1
cmd = 'CREATE TABLE %s (' % tablename tablename = 'users'
for i in range(num):
fld = fields[i] # âûçûâàåì ôóíêöèþ ïðåîáðàçîâàíèÿ
cmd = cmd + fld.name + ' ' dbf2pg('users.dbf')
if fld.type == 'C':
cmd = cmd + ↵ Вывод в данном случае направляется в стандартный
'char(' + str(fld.len) + '), '
поток stdout, поэтому для формирования файла следует
elif fld.type == 'D': использовать перенаправление:
cmd = cmd + 'date, '
elif fld.type == 'N' : $ ./dbd2pg.py > USERS.TXT
cmd = cmd + ↵
'numeric(' + str(fld.len) + ↵
',' + str(fld.dec) + '), ' При переменной withcommand, установленной в 0, мы по-
# Ïîñëåäíþþ çàïÿòóþ è ïðîáåë ìåíÿåì лучаем такой же файл с разделителями, как и ранее с помо-
# íà çàêðûâàþùóþ ñêîáêó è òî÷êó ñ çàïÿòîé щью FoxPro. Соответственно импортироваться в PostgreSQL
cmd = cmd[:-2] + ');'
print cmd информация будет аналогично.
# Ôîðìèðóåì êîìàíäó ÷òåíèÿ äàííûõ èç ïîòîêà ââîäà
Однако обратите внимание, что теперь мы имеем всю
cmd = 'COPY users FROM stdin;' информацию о полях данных, включая тип поля и его на-
print cmd звание. Так почему бы не воспользоваться этим для авто-
# Ôîðìèðóåì ñàì ïîòîê ââîäà матического формирования таблицы PostgreSQL нужной
dbf.seek(posfirst) структуры? Именно эта идея и реализуется, если перемен-
for rec in range(dblen):
if dbf.read(1) != '*': ной withcommand присвоить значение 1. При этом загрузка
# Åñëè çàïèñü íå ïîìå÷åíà íà óäàëåíèå, òî îáðàáîòêà: данных будет осуществляться по тому же принципу, какой
line = '' используется при восстановлении из текстовой резервной
for i in range(num): копии: при выполнении команды «\i файл» в терминале psql
# Öèêë ïî âñåì ïîëÿì
fld = dbf.read(fields[i].len) содержимое указанного файла будет рассматриваться как
# Åñëè äàòà – ïðåîáðàçóåì ввод с клавиатуры в интерактивном режиме.
# â ôîðìàò YYYY-MM-DD
# èç ôîðìàòà YYYYMMDD Таким образом, мы формируем команду CREATE TABLE
if fields[i].type == 'D': в соответствии с информацией о названиях и типах полей
fld = fld[:4] + '-' + ↵
fld[4:6] + '-' + ↵ таблицы, а затем команду COPY .. FROM stdin, которая бу-
fld[6:] дет считывать последующие данные, пока не обнаружит стро-
# Åñëè äàòà ïóñòàÿ, ìåíÿåì ку «\.». Здесь следует обратить внимание на то, что имена
# åå íà çíà÷åíèå NULL полей должны быть допустимы в PostgreSQL. Так, например,
if fld == ' - - ':
fld = '\N' имя USER, вполне нормальное для FoxPro, PostgreSQL рас-
# Äëÿ ïóñòûõ ÷èñëîâûõ ïîëåé
сматривает как служебное слово, не позволяя создавать
# ñòàâèì çíà÷åíèå 0 таблицу с таким столбцом. Впрочем, это ограничение мож-
if fields[i].type == 'N' ↵ но обойти, если имена полей заключить в кавычки – в та-
and fld[-1] == ' ':
fld = '0' ком случае любое имя будет восприниматься «как есть»,
# Ýêðàíèðóåì ñèìâîë ‘\’,
правда, и в дальнейшей работе нужно будет использовать
# åñëè òàêîâîé âñòðå÷àåòñÿ кавычки и строго соблюдать регистр символов.
# â êîíöå ïîëÿ, Еще одно замечание – теперь, поскольку таблицу мы
# ò.ê. îí ýêðàíèðóåò ðàçäåëèòåëü
if fld[-1] == '\\': создаем автоматически, на момент импорта она не должна
fld = fld + '\\' существовать.
# Äëÿ ñòðîêîâûõ ïîëåé âûïîëíÿåì Рассмотренный способ хотя и требует несколько боль-
# ïåðåêîäèðîâêó ших усилий на разработку сценария, но заметно упрощает
if fields[i].type == 'C':
fld = unicode(fld, ↵ перенос данных, автоматизируя создание нужных таблиц.
'cp866').encode('koi8-r') При этом работа идет заметно быстрее – на обработку той
# Äîïèñûâàåì ê ñòðîêå çàïèñè же таблицы абонентов тратится менее секунды.
# ÷åðåç ðàçäåëèòåëü
line = line + fld + delimiter
Путь 3: непосредственная запись
# Âûâîäèì ïîëó÷åííóþ ñòðîêó, îòðåçàâ в базу данных
# ïîñëåäíèé ðàçäåëèòåëü
print line[:-1] Рассмотренные выше способы так или иначе привязаны к
else: команде COPY. А что, если мы не можем записать тексто-
# Åñëè çàïèñü ïîìå÷åíà íà óäàëåíèå,
# òî ïðîñòî äî÷èòûâàåì åå îñòàòîê, вый файл на диск в том месте, где он будет доступен про-
# íè÷åãî íå îáðàáàòûâàÿ цессу postmaster? Или нет доступа к клиенту psql? В этом
dbf.read(totlen - 1)
dbf.close случае можно непосредственно формировать команды

¹4, àïðåëü 2005 57


администрирование
INSERT серверу БД вместо создания промежуточных фай- }
лов. Конечно, это будет работать заметно медленнее, но в $sqlcommand = substr($sqlcommand, 0, length($sqlcommand) - 2);
$sqlcommand .= ');';
некоторых ситуациях такой путь может оказаться един-
ственно возможным. Рассмотрим этот способ на примере. # Îòïðàâëÿåì åå íà ñåðâåð
$sth = $dbh->prepare($sqlcommand);
Для разнообразия воспользуемся языком Perl. Алгоритм $sth->execute;
разбора DBF-файла остался прежним, даже синтаксис по- # Ïåðåõîä íà íà÷àëî äàííûõ
хож. Только на этот раз нужно будет для каждой записи фор- seek(DBF, $posfirst, 0);
мировать команду INSERT и отсылать ее на сервер СУБД: for($rec = 0; $rec < $dblen; $rec++) {
read(DBF, $first, 1);
if($first ne '*') {
Ëèñòèíã 3. Ñöåíàðèé dbf2pg.pl $sqlcommand = "INSERT INTO $tabname VALUES (";
for($i = 0; $i < $num; $i++) {
#!/usr/bin/perl -w read(DBF, $fld, $fields[$i]{len});

# Ïîäêëþ÷àåì ìîäóëè äëÿ ïåðåêîäèðîâêè è ðàáîòû ñ ÑÓÁÄ if($fields[$i]{type} eq 'C') {


use Lingua::RU::Charset qw(alt2koi); ($fld) = &alt2koi($fld);
use DBI; $fld = "'" . $fld . "'";
} else {
# Óñòàíàâëèâàåì ñîåäèíåíèå ñ ÁÄ $fld =~ s/\s//g;
$dbh = DBI->connect('dbi:Pg:dbname=serg', 'serg', ''); }

# Èñõîäíûé ôàéë è èìÿ èòîãîâîé òàáëèöû if($fields[$i]{type} eq 'D') {


$fname = 'S_CATS.DBF'; if($fld ne '') {
$tabname = 's_cats_pl'; $fld = '"' .
substr($fld, 0, 4) . '-' .
# Îòêðûâàåì ôàéë DBF â áèíàðíîì ðåæèìå substr($fld, 4, ↵
open(DBF, "$fname"); 2) . '-' .
binmode(DBF); substr($fld, 6, ↵
read(DBF, $head, 32); 2) . '"';
$dblen = ord(substr($head, 7, 1)) * 16777216 + ↵ } else {
ord(substr($head, 6, 1)) * 65536 + ↵ $fld = 'NULL';
ord(substr($head, 5, 1)) * 256 + ↵ }
ord(substr($head, 4, 1)); }

$posfirst = ord(substr($head, 9, 1)) * 256 + ↵ if(($fields[$i]{type} eq 'N') && ↵


ord(substr($head, 8, 1)); ($fld eq '')) {
$fld = '0';
$wexit = 0; $num = 0; $totlen = 1; }
while(! $wexit) {
read(DBF, $first, 1); $sqlcommand .= $fld . ', ';
if(ord($first) == 13) { }
$wexit = 1; $sqlcommand = substr($sqlcommand, 0,
} else { length($sqlcommand) - 2);
# Äàëåå ÷èòàåì ôàéë ñðàçó â ïåðåìåííûå $sqlcommand .= ');';
read(DBF, $name, 10);
$name = $first . $name; # Îòïðàâëÿåì êîìàíäó INSERT
$sth = $dbh->prepare($sqlcommand);
# Âûðåçàåì èç èìåíè ñèìâîëû 0x00 $sth->execute;
# (çäåñü ^@ - íå äâà ñèìâîëà, ïðîñòî 0x00 } else {
# òàê âûãëÿäèò â vi) read(DBF, $tmp, 31);
$name =~ s/^@//g; }
}
read(DBF, $type, 1); close(DBF);
read(DBF, $tmp, 4); $dbh->disconnect;

read(DBF, $tmp, 1); Рассмотренный способ универсален как в плане досту-


$len = ord($tmp);
па к базе данных (достаточно иметь возможность отправ-
read(DBF, $tmp, 1); лять на сервер SQL-команды), так и в плане использова-
$dec = ord($tmp);
ния конкретной СУБД. При минимальных синтаксических
read(DBF, $tmp, 14); изменениях данный сценарий можно использовать для ра-
$fields[$num]{name} = $name; боты практически с любой системой управления базами
$fields[$num]{type} = $type; данных – MySQL, Oralce и т. д. К тому же в данном случае
$fields[$num]{len} = $len;
$fields[$num]{dec} = $dec; каждая запись переносится отдельно от других, и если при
этом возникнет ошибка, на импорт других записей это ни-
$num++; $totlen += $len;
} как не повлияет. Правда, если предъявляются высокие тре-
} бования к целостности данных, то подход «все или ничего»
# Ôîðìèðóåì êîìàíäó ñîçäàíèÿ òàáëèöû более предпочтителен. За указанные удобства приходится
$sqlcommand = "CREATE TABLE $tabname ("; расплачиваться быстродействием – та же тестовая табли-
for($i = 0; $i < $num; $i++) {
$sqlcommand .= $fields[$i]{name} . ' '; ца из 5000 записей переносится почти одну минуту.
if($fields[$i]{type} eq 'C') {
$tmp = 'char(' . $fields[$i]{len};
} elsif($fields[$i]{type} eq 'D') { Завершение
$tmp = 'date'; Итак, мы рассмотрели несколько способов переноса данных
} elsif($fields[$i]{type} eq 'N') {
$tmp = 'numeric(' . $fields[$i]{len} . из формата DBF в таблицу PostgreSQL. Каждый из них име-
',' . $fields[$i]{dec}; ет свои особенности, и я надеюсь, вам удастся найти тот,
}
$sqlcommand .= $tmp . '), '; который лучше всего подойдет именно к вашим условиям.

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

ЗАЩИТА КОММУНИКАЦИЙ
WINDOWS MOBILE

НАТАЛЬЯ МЕЛЬНИКОВА
В последний год рынок мобильных устройств переживает на- зует цифровые сертификаты, в связи с чем первым этапом
стоящий бум. Стремительно совершенствуясь, мобильные в настройке защищенных коммуникаций является настрой-
телефоны по уровню «интеллектуальной» начинки догоня- ка клиентских компонентов PKI на КПК.
ют карманные компьютеры (КПК), а те, в свою очередь, раз-
вивают свои коммуникационные возможности. И порой уже Управление сертификатами
трудно понять, чем является то или иное устройство – смарт- В мобильной версии Windows существует только одно хра-
фоном (т.е. интеллектуальным сотовым телефоном) или ком- нилище сертификатов, управлять которым можно с помо-
муникатором (КПК с расширенными сетевыми возможнос- щью приложения Certificates («Start → Settings → System →
тями). Certificates»). В приложении имеется две закладки: Personal
Большинство современных КПК оснащено модулями и Root.
беспроводной связи 802.11, и имеют возможность исполь-
зовать GPRS-функции сотового телефона для подключе-
ния к Интернету (причем делать это тоже «по воздуху» –
через инфракрасный порт или Bluetooth). Этот потенциал
сначала поражает, но быстро становится привычным, и че-
рез некоторое время отсутствие возможности синхронизи-
ровать свой КПК с корпоративным сервером Exchange вос-
принимается как нечто совершенно «дикое».
Но как обычно бывает в жизни, удобства в одной обла-
сти приносят проблемы в других сферах. Так, серьезным
препятствием на пути внедрения мобильных клиентов в кор-
поративных сетях является низкий уровень стандартных
средств защиты беспроводных коммуникаций, таких как
A5/A8, WEP и т. д. Ðèñóíîê 1. Óïðàâëåíèå ñåðòèôèêàòàìè
Мобильные клиенты на основе Windows Mobile 2003 пре- Первая из них относится к персональным сертификатам
доставляют администратору богатый арсенал средств за- устройства или пользователя (в Windows Mobile нет такого
щиты сетевых соединений. В него входят прекрасно заре- жесткого разделения, как в настольной версии).
комендовавшие себя протоколы, такие как WPA и 802.1X, Во второй перечислены доверенные центры сертифи-
L2TP/IPSec, SSL/TLS. Большинство этих технологий исполь- кации (CA).

60
безопасность
За редким исключением сертификат корпоративного цен- Session», перейти на закладку «Security» и присвоить пра-
тра сертификации не является доверенным по умолчанию. во Enroll группе мобильных пользователей. Затем нужно сно-
Для того чтобы устройство могло проверять сертификаты, ва щелкнуть на пункте «Certificate Templates» в оснастке уп-
выданные корпоративным центром сертификации, необхо- равления CA и выбрать пункт контекстного меню «New →
димо поместить сертификат CA в список доверенных (кор- Certificate Template To Issue», после чего дважды щелкнуть
невых) центров. Для этого достаточно скопировать серти- на пункте «Authenticated Session».
фикат CA на КПК с помощью ActiveSync и щелкнуть на нем.

Ðèñóíîê 2. Óñòàíîâêà ñåðòèôèêàòà CA


После подтверждения намерений сертификат будет до- Ðèñóíîê 4. Äîáàâëåíèå øàáëîíà ñåðòèôèêàòîâ
бавлен в список доверенных сертификатов (рис. 1). Полу- Затем на мобильном устройстве запускается утилита
чить сертификат CA можно и через Web, для чего необхо- Enroll («Start → Settings → System → Enroll»). В утилите
димо зайти на основную страницу веб-интерфейса серве- необходимо указать имя пользователя, пароль и адрес сер-
ра сертификатов и щелкнуть по ссылке «Download a CA вера сертификатов.
certificate, certificate chain, or CRL». После этого необходи-
мо загрузить сертификат в кодировке DER и установить его
(рис. 3) как в предыдущем случае.

Ðèñóíîê 5. Çàïðîñ ñåðòèôèêàòà


Утилита Enroll обладает рядом недостатков. Во-первых,
она позволяет запрашивать только сертификаты, основан-
Ðèñóíîê 3. Óñòàíîâêà ñåðòèôèêàòà CA ÷åðåç âåá-èíòåðôåéñ ные на шаблоне «Authenticated Session». Во-вторых, Enroll
Следующим этапом является получение персональных не поддерживает возможности запроса сертификата у сер-
сертификатов. В стандартную поставку Windows Mobile вхо- вера, требующего использования SSL. Кроме того, утили-
дит утилита Enroll, которая генерирует ключевую пару, со- та имеет возможность работать только с сервером серти-
здает запрос на получение сертификата и отправляет его фикатов Microsoft.
серверу сертификатов. Для взаимодействия с сервером Если возникает необходимость получать сертификаты,
сертификатов используются HTTP-запросы к веб-интерфей- основанные на других шаблонах, можно модифицировать со-
су стандартного CA Windows 2000/2003. держимое файла C:\WINDOWS\system32\certsrv\certfnsh.asp.
Утилита Enroll имеет возможность запрашивать только В строке 47 необходимо заменить sAttributes=Request.Form
сертификаты, основанные на шаблоне «Authenticated («CertAttrib») на название требуемого шаблона, например
Session». Они могут быть использованы для аутентифика- sAttributes=«CertificateTemplate:User».
ции устройства в протоколах EAP, IPSec и SSL. В случае если на предприятии используется сервер сер-
Чтобы настроить сервер сертификатов на выдачу сер- тификатов, отличный от Microsoft Certification Authority, мож-
тификатов данного типа, необходимо открыть оснастку уп- но воспользоваться одной из утилит, например PPCCert
равления CA, щелкнуть правой кнопкой мыши на пункте (http://webs.ono.com/usr030/kiko_vives/ppccert), позволяющих
«Certificate Templates» и выбрать пункт «Manage». В появив- импортировать файлы в формате PKCS#12 (pfx) в храни-
шемся окне открыть свойства шаблона «Authenticated лище Windows Mobile.

¹4, àïðåëü 2005 61


безопасность
Беспроводные соединения работать внутри виртуального канала, зашифрованного с
Основой современных стандартов защиты беспроводных помощью TLS (PEAP расшифровывается как Protected EAP).
сетей, таких как Wi-Fi Protected Access (WPA) и 802.11i яв- Чтобы обеспечить нормальную работу протоколов EAP и
ляется технология 802.1X. Она была разработана для пре- PEAP, необходимо установить сертификат, основанный на
дотвращения возможности несанкционированного доступа шаблоне «RAS and IAS Server», на сервер RADIUS и указать
к ресурсам сети даже при наличии физического соедине- этот сертификат в политиках удаленного доступа (рис. 6).
ния. Перед тем как получить доступ к сети на канальном Настройки со стороны устройства довольно просты. Пос-
уровне каждое подключаемое устройство должно пройти ле активации беспроводного интерфейса необходимо пе-
аутентификацию с использованием протокола Extensible рейти в пункт настроек беспроводного подключения
Authentication Protocol (EAP) или его модификаций. («Settings → Connections → Connections → Advanced →
В инфраструктуре 802.1X разделяют три основных ком- Network Card») и нажать на ссылке «Add new». В появив-
понента: клиентский компьютер (Supplicant), коммутатор шемся окне указывается SSID сети, после чего на заклад-
или точка доступа (Authenticator), сервер аутентификации ке «Network key» выбирается тип аутентификации WPA и
(Authentication Server). шифрование TKIP. На странице 802.1X указывается исполь-
Функции сервера аутентификации выполняет корпора- зуемый тип аутентификации (рис. 7).
тивный сервер RADIUS. Он проверяет подлинность предо- В случае если был выбран метод «Smart Card or Certi-
ставленных клиентом для аутентификации данных и конт- ficate», на устройстве должен присутствовать действующий
ролирует доступ к ресурсам сети. Точка доступа или ком- клиентский сертификат. При использовании метода PEAP-
мутатор являются своеобразным посредником (proxy), пре- MSCHAPv2 необходимо указать имя и пароль пользовате-
образующим клиентские запросы EAPoL (EAP over LAN) в ля.
данные протокола RADIUS и обратно. Для отладки соединения очень удобно пользоваться
Windows Mobile 2003 поддерживает стандарт WPA с журналом System сервера RADIUS. В случае сбоя подклю-
аутентификацией 802.1X. При использовании 802.1X, для чения в нем сохраняются события с EventID 2, содержащие
аутентификации клиента может быть задействован цифро- подробную информацию о причине возникновения ошиб-
вой сертификат (EAP-TLS) либо пароль пользователя (PEAP- ки. Например, сообщение, приведенное ниже, характерно
MSCHAPv2). Во втором случае протокол MSCHAPv2 будет для тех ситуаций, когда в политиках удаленного доступа

Ðèñóíîê 6. Íàñòðîéêà ïîëèòèê óäàëåííîãî äîñòóïà RADIUS

62
безопасность
сервера RADIUS указан протокол аутентификации, отлич- необходимо нажать на кнопку Network Card и указать, что
ный от протокола, используемого устройством. данные сетевые карты подключены к Интернету (рис. 9).
Event Type: Warning
Event Source: IAS
Event Category: None
Event ID: 2
Date: 02.04.2005
Time: 14:13:40
User: N/A
Computer: DC
Description:
User dom01\User was denied access.
Fully-Qualified-User-Name = dom01.infosec.ru/Users/User
NAS-IP-Address = 192.168.0.50
NAS-Identifier = DWL-2000AP
Called-Station-Identifier = 00-0d-88-84-a2-b1
Calling-Station-Identifier = 00-30-05-73-60-06
Client-Friendly-Name = Access Point
Client-IP-Address = 192.168.0.50
NAS-Port-Type = Wireless - IEEE 802.11
Ðèñóíîê 8. Íàñòðîéêà ïðîôèëÿ VPN
NAS-Port = 0
Proxy-Policy-Name = Use Windows authentication for all users
Authentication-Provider = Windows
Authentication-Server = <undetermined>
Policy-Name = Wireless
Authentication-Type = EAP
EAP-Type = <undetermined>
Reason-Code = 22
Reason = The client could not be authenticated because the Extensible
Authentication Protocol (EAP) Type cannot be processed by the server.

For more information, see Help and Support Center at


http://go.microsoft.com/fwlink/events.asp.

Ðèñóíîê 9. Íàñòðîéêà ñåòåâûõ àäàïòåðîâ


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

Ðèñóíîê 7. Íàñòðîéêà WPA íà êëèåíòå

Построение VPN
Мобильный клиент на основе Windows может использовать
технологии VPN для подключения к ресурсам сети. Поддер-
живаются протоколы PPTP и L2TP/IPSec. В случае исполь-
зования IPSec для аутентификации устройства могут при-
меняться цифровые сертификаты или общий ключ. Ðèñóíîê 10. Ñîåäèíåíèå VPN
Если при соединении с сервером VPN используется не Для мониторинга соединений удобно пользоваться ос-
модем, а беспроводной адаптер, необходимо настроить про- насткой «MMC IP Security Monitor» или утилитой командной
фили подключения. Для этого в настройках соединения строки netsh.
(«Settings → Connections → Connections → Advanced →
Select Network») нужно открыть настройки «внутренней»
сети, нажав на нижнюю кнопку «Edit», после чего на заклад-
ке «VPN» нажать кнопку «New» и указать параметры под-
ключения к VPN (рис. 8).
Затем указывается, что беспроводной адаптер подклю-
чает устройство к Интернету, а не к внутренней сети. Это
делается для того, чтобы Windows могла задействовать VPN
при активном соединении. Для этого в настройках соеди-
нений («Settings → Connections → Connections → Advanced») Ðèñóíîê 11. Ïðîñìîòð ñîåäèíåíèé IPSec â óòèëèòå nesh

¹4, àïðåëü 2005 63


безопасность
Подробнее об устранении неисправностей в работе IPSec
можно узнать из статьи «Неизвестный IPSec», Windows &
.NET Magazine №6, 2003 г.

Доступ к серверу Exchange


Для доступа к серверу Exchange из Windows Mobile 2003 при-
меняется синхронизация ActiveSync или online-доступ че-
рез Outlook Mobile Access (OMA). Обе эти технологии ис-
пользуют в качестве транспорта HTTP и должны быть за-
щищены с помощью SSL.
Для включения поддержки этих функций на сервере
Exchange необходимо в оснастке Exchange System Manager
открыть свойства пункта Mobile Services и разрешить синх-
ронизацию со стороны пользователя (Enable user initiated Ðèñóíîê 13. Íàñòðîéêè ActiveSync
synchronization) и поддержку OMA. Дополнительно можно
включить обработку запросов от неподдерживаемых уст-
ройств.

Ðèñóíîê 14. Äîñòóï ê OMA


Лаконичный интерфейс OMA мало подходит для рабо-
ты с заполненными почтовыми ящиками, но позволяет сэ-
кономить ресурсы устройства. Хотя, если пропускная спо-
собность канала связи не является ограничивающим фак-
Ðèñóíîê 12. Íàñòðîéêà ìîáèëüíîãî äîñòóïà ê Exchange тором, даже при разрешении экрана 320x240 можно доволь-
Это бывает удобно, когда доступ к Exchange осуществ- но комфортно работать с полнофункциональной версией
ляется с настольного компьютера или ноутбука, но посред- Outlook Web Access (рис. 15). В современных КПК, поддер-
ством слабого канала связи. Поскольку интерфейс OMA го- живающих расширение 640x480, OWA практически не от-
раздо более «лаконичен», чем интерфейс OWA, его исполь- личается от своего настольного варианта.
зование помогает экономить время и нервы при чтении по-
чты. Поскольку и OMA, и ActiveSync используют аутенти-
фикацию Basic, необходимо убедиться, что в настройках
аутентификации сервера IIS установлено правильное имя
домена по умолчанию. Кроме того, необходимо включить
обязательное использование SSL при обращении к вирту-
альным директориям OMA и Microsoft-Server-ActiveSync. Это
можно проделать с помощью стандартных средств настрой-
ки безопасности Internet Information Server.
Настройка ActiveSync на КПК довольно проста. Необходи-
мо запустить приложение ActiveSync («Start → Programs →
Activesync»), выбрать пункт меню «Tools → Options» и на
закладке Server указать имя сервера и синхронизируемые
объекты. Дополнительно можно настроить автоматическую Ðèñóíîê 15. OWA â ðàçðåøåíèè 320x240
синхронизацию через заданные интервалы времени (кноп- Таким образом, мобильные клиенты могут задействовать
ка «Options»). современные технологии защиты коммуникаций, начиная
Если сервер настроен на поддержку SSL, то необходи- с канального уровня модели OSI (WPA) и заканчивая защи-
мо установить опцию «This server uses an SSL connection» той доступа к приложениям. К неудобствам, возникающим
(рис. 13). при настройке Windows Mobile, можно отнести отсутствие
Для работы с OMA достаточно подключиться к сети, за- возможности импорта сертификатов в формате PKCS#12
пустить Pocket Internet Explorer и ввести в строке URL вида и списков отозванных сертификатов. Кроме того, отсутству-
https://<servername>/oma (рис. 14). ет возможность настраивать IPSec отдельно от L2TP.

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

УПРАВЛЕНИЕ БЕЗОПАСНОСТЬЮ
INTERNET EXPLORER

НАТАЛЬЯ МЕЛЬНИКОВА
Проблема защиты клиентского рабочего места становится вание российских специалистов в области информацион-
всё более и более актуальной. Это связано с рядом при- ной безопасности [1] показывает, что для обхода большин-
чин, но в первую очередь – со смещением вектора атак с ства современных средств защиты клиентских приложений
серверного на клиентское программное обеспечение. Ста- достаточно умения работы с программой «Блокнот» и эле-
тистика инцидентов показывает, что больший процент на- ментарных навыков программирования на VBScript.
рушений компьютерной безопасности как в корпоративном, Наиболее часто рассматриваемым в данном контексте
так и в частном секторе, происходит именно посредством приложением является браузер Internet Explorer. Его возмож-
компрометации рабочих мест пользователя. ности не только обеспечивают создание многофункциональ-
К сожалению, проблеме защиты приложений пользова- ных интерактивных веб-приложений, но позволяют зло-
теля уделяется меньше внимания, чем защите серверов. В умышленнику повышать свои привилегии на рабочей стан-
современных корпоративных информационных системах ции пользователя. В связи с большим количеством уязви-
большинство средств защиты сконцентрировано на пери- мостей в IE, опубликованных во второй половине прошло-
метре сети, и если они были обойдены, сеть становится без- го года, в сообществе специалистов в области безопасно-
защитной. Злоумышленник получает доступ к рабочей стан- сти довольно бурно обсуждается идея перехода на альтер-
ции и соответственно ко всем ресурсам сети, с которыми нативные программы работы с World Wide Web. Даже та-
может работать пользователь. Этого вполне достаточно для кая уважаемая организация, как CERT, не удержалась от
решения широкого спектра задач – от рассылки спама и спекуляций на эту тему [2].
сбора конфиденциальной информации до промышленного Однако при попытке заменить Internet Explorer в корпо-
шпионажа. ративных сетях администратору приходится столкнуться с
Конечно, индустрия не стоит на месте, и появляются но- некоторыми проблемами. Первая – отсутствие необходимых
вые методы и продукты для защиты приложений пользова- функциональных возможностей. Многие распространенные
теля. Однако, как показывает практика, на настоящий мо- серверные приложения, такие как Outlook Web Access,
мент их недостаточно. Недавно опубликованное исследо- SharePoint Portal Server активно используют различные рас-

66
безопасность
ширения DHTML, реализованные только в Internet Explorer. Поскольку разрешения на ветвь HKLM запрещают поль-
Многие клиентские приложения также используют COM- зователю модифицировать значения, содержащиеся в ни-
объекты Internet Explorer для формирования интерфейса жележащих разделах, то у него не будет возможности из-
пользователя. Таким образом, на клиентском рабочем ме- менить параметры, назначенные администратором. В боль-
сте оказывается две программы для работы с WEB – Internet шинстве случаев рекомендуется задействовать данную на-
Explorer для обращения к корпоративным приложениям, и стройку, поскольку пользователь или вредоносное про-
альтернативный браузер для выхода в Интернет. Это сни- граммное обеспечение, работающее в его контексте безо-
жает удобство использования и повышает вероятность воз- пасности, может менять настройки браузера, снижая уро-
никновения пользовательских ошибок. Кроме того, возни- вень защищенности. Примером может являться троянская
кает ряд дополнительных проблем. программа Win32.Secdrop.C [4], при установке разрешаю-
Усложняется задача управления сетью. Поскольку боль- щая загрузку и запуск неподписанных компонентов ActiveX
шинство из альтернативных программ работы с WWW не из Internet.
поддерживает функции централизованного управления (ти- В случае если задействована эта настройка, все пара-
ражирование конфигурационных файлов через групповые метры Internet Explorer необходимо изменять в ветви HKLM
политики – не самый удобный путь), повышаются затраты (или разделе Computer Configuration ОГП). Соответствен-
на поддержку клиентских машин. Вновь встает задача уп- но, если для изменения параметров будут задействованы
равления оперативными обновлениями, поскольку миф об сценарии, то необходимо использовать те из них, которые
отсутствии ошибок в альтернативных браузерах, как и пред- выполняются с достаточными привилегиями, а именно –
полагалось [3], был быстро развеян. Выходят обновления и Startup Script и Shutdown Script. Кроме того, для примене-
новые версии программ, но современные средства управ- ния параметров необходимо, чтобы отработала групповая
ления обновлениями (и поиска уязвимостей) их не поддер- политика уровня компьютера, что в некоторых случаях тре-
живают, и администратору приходится следить за актуаль- бует перезагрузки. Ещё одной потенциальной проблемой
ностью версий программ самостоятельно. является то, что исчезает возможность персонифицировать
Кроме того, в сети на основе Active Directory часто про- настройки Internet Explorer для разных пользователей од-
исходит снижение уровня безопасности, поскольку вместо ного и того же компьютера. Однако необходимость в раз-
привычных протоколов аутентификации NTLMv2 и Kerberos личных настройках IE для разных пользователей является
начинают использоваться гораздо более уязвимые меха- скорее исключением, чем правилом.
низмы Digest или Basic. Не всегда хорошо работает аутен- Для настройки зон безопасности используются следую-
тификация с использованием клиентских сертификатов из щие подразделы: HKLM(HKKU)\Software\Microsoft\Windows\
хранилища Windows или Smartcard. CurrentVersion\Internet Settings:
Учитывая все вышеперечисленное, вполне вероятно ! TemplatePolicies
предположить, что снижение рисков, которое сулит пере- ! ZoneMap
ход на альтернативные браузеры, не окупит повышения зат- ! Zones
рат на эксплуатацию.
Давайте рассмотрим стандартные возможности настрой- Раздел TemplatePolicies содержит предопределенные
ки Internet Explorer, использование которых позволяет под- уровни безопасности, которые в дальнейшем могут исполь-
нять уровень защищенности клиентских рабочих мест на зоваться для настройки зон. Этот раздел содержится толь-
довольно высокий уровень. Дополнительным преимуще- ко в ветке HKLM, и модифицировать его не рекомендуется,
ством использования данных настроек является то, что они поскольку такая операция затруднит процесс восстановле-
легко тиражируются с помощью стандартных средств уп- ния стандартных настроек в случае возникновения сбоев.
равления корпоративной сетью на базе Windows, таких как В разделе ZoneMap описывается привязка узлов и до-
Active Directory. менов к зонам безопасности. Подраздел Domains содер-
Основным средством настройки безопасности интернет- жит иерархическую структуру, в которой в качестве клю-
приложений Microsoft были и остаются зоны безопасности. чей выступают имена доменов и узлов, параметры описы-
Зоны безопасности представляют собой группы адресов вают протоколы, а значения параметров указывают на но-
(URL), которым соответствуют те или иные настройки под- мер зоны безопасности. Нижеприведенная структура раз-
системы безопасности. Настройки Internet Explorer сохра- делов реестра указывает на то, что при обращении к сер-
няются в разделах HKLM(HKCU) Software\Microsoft\Windows\ веру www.isc2.org по протоколу https будут задействованы
CurrentVersion\Internet Settings. настройки второй зоны безопасности (Trusted Sites, Дове-
По умолчанию Internet Explorer считывает настройки из ренные узлы): ZoneMap → Domains → sc2.org → www → https
ветви HKCU, однако это поведение можно изменить. Уста- (DWORD)=2.
новка значения Enabled в параметре объекта групповой по- Структура может быть более сложной. Например, сле-
литики (ОГП) Computer Configuration\Administrative Templates\ дующий вариант предписывает при обращении к любому
Windows Components\Internet Explorer\Security Zones: Use only узлу в домене *.microsoft.com по протоколу https использо-
machine settings присваивает значение параметру реестра. вать зону безопасности Trusted Sites. Для обработки содер-
HKLM\Software\Policies\Microsoft\Windows\CurrentVersion\ жимого страниц на сервере www.microsoft.com, полученных
Internet Settings\Security_HKLM_only равным 1, после чего по протоколу http, будут использоваться настройки зоны
Internet Explorer начинает использовать настройки из ветви Internet: ZoneMap → Domains → microsoft.com → https
HKLM. (DWORD)=2, www → http (DWORD)=3.

¹4, àïðåëü 2005 67


безопасность
Если клиентом является Microsoft Windows Server 2003 него есть только два уровня доверия – Internet и Trusted Sites.
и задействована опция Internet Explorer Enhanced Security Он не может разрешить выполнение сценариев для одной
Configuration, то настройки следует сохранять в подразде- группы серверов, включить поддержку ActiveX для второй и
ле EscDomains, а не Domains. отключить активное содержимое для остальных.
В случае если разграничение уровня безопасности про- Òàáëèöà 2
исходит не на основе FQDN, а с помощью IP-адресов, за-
действуется подраздел Ranges.
Нижеприведенная структура описывает ситуацию, когда
для IP-адресов, принадлежащих сети 10.1.1.0/24, использу-
ется зона безопасности Trusted Sites: ZoneMap → Ranges →
Range1 → * (DWORD)=2, :Range (SZ)=10.1.1.1-10.1.1.254.
В подразделе ProtocolDefaults описывается, какая зона
будет задействована в случае использования того или ино-
го протокола, если дополнительные правила не примени-
мы. По умолчанию большинство протоколов используют
зону 3 – Internet.
Кроме описанных параметров оказывать влияние на то,
какая зона безопасности будет использоваться для обра-
ботки содержимого того или иного сервера, может значе-
ние параметра Flags, содержащегося в разделе, описыва-
ющем зону.
Например, по умолчанию этот параметр для зоны 1
(Intranet) имеет значение 219: HKLM(HKCU)\Software\Micro-
soft\Windows\CurrentVersion\Internet Settings\Zones\1:
Чтобы решить эту проблему, удобно изменить зону по
Flags(DWORD)= 219 умолчанию, применяемую для различных протоколов: HKLM
(HKKU)\Software\Microsoft\Windows\CurrentVersion\Internet
Это значение формируется на основе параметров бито- Settings\ZoneMap\ProtocolDefaults:
вой маски (таблица 1) и содержит значения 128, 16 и 8. Со-
ответственно в зону Intranet будут автоматически включать- ftp(DWORD)=4
http(DWORD)=4
ся те узлы, обращение к которым произошло по имени Net https(DWORD)=4
BIOS и узлы, работающие не через Proxy-сервер (параметр
HKLM(HKCU)\Software\Microsoft\Windows\CurrentVersion\ После этого узлы, ранее принадлежащие зоне Internet,
Internet Settings\ProxyOverride). автоматически попадут в зону Restricted Sites. Зона Internet
Òàáëèöà 1. Çíà÷åíèå ïàðàìåòðà Flags станет промежуточной, и в неё будут включаться сервера,
для работы которых необходима поддержка сценариев или
некоторых компонентов ActiveX. Зона Trusted Sites не изме-
нит своих функций, в неё включаются узлы, работа с кото-
рыми требует всех функциональных возможностей Internet
Explorer.
Для того чтобы появилась возможность модифициро-
вать состав зоны Internet, параметру Flags для этой зоны
необходимо присвоить значение, равное 3.

Функции зон безопасности Настройка зон


В подразделе Zones содержатся непосредственно настрой- Зона безопасности My Computer является основной целью
ки безопасности каждой из зон. Стандартно Windows со- атакующих. Многие опубликованные уязвимости в Internet
держит 5 зон безопасности (таблица 2). Каждая из этих зон Explorer нацелены именно на получение возможности обра-
содержит настройки параметров безопасности, подробное ботки данных в контексте этой зоны, что дает возможность
описание которых доступно в статье KB182569. обращаться к файловой системе и запускать программы [5].
Таким образом, сайты, не принадлежащие зоне безо- В Windows XP Service Pack это поведение изменено с помо-
пасности Local Intranet, обрабатываются в контексте зоны щью механизма «Local Machine Zone Lockdown» [6]. Однако,
Internet. В случае если эти настройки чрезмерно жесткие, как показывает практика, задействованные настройки не-
можно включить сервер или домен в зону Trusted Sites. Если достаточно строги, поэтому рекомендации по усилению па-
сервер является потенциально опасным, он включается в раметров безопасности для XP SP2 также актуальны.
зону Restricted Sites. Рекомендуется дополнительно настраивать безопас-
Этот подход не соответствует текущим реалиям, посколь- ность для этой зоны, запрещая обработку сценариев и/или
ку весь Internet является слабо доверенной системой. Кроме компонентов ActiveX. В статье KB833633 описано, как на-
того, администратор ограничен в настройках, поскольку у страивать параметры зоны безопасности с помощью моди-

68
безопасность
фикации реестра. Однако зачастую удобней предваритель- Configuration → Administrative Templates → Windows
ную настройку осуществлять с помощью GUI. Для того что- Components → Internet Explorer → Administrator Approved
бы зона безопасности отображалась в Internet Explorer, не- Controls».
обходимо уменьшить значение параметра Flags для этой По умолчанию набор компонентов невелик и может не
зоны на 32: HKLM(HKCU)\Software\Microsoft\Windows\Current содержать необходимые ActiveX. В этом случае целесооб-
Version\Internet Settings\Zones\0: разно изменить административный шаблон %systemroot%\
inf\inetres.adm, добавив в него CLSID используемых элемен-
Flags(DWORD)=1 тов ActiveX.

После этих изменений зона появится на закладке Security


приложения Internet Options и станет доступной для моди-
фикации через графический интерфейс.
В результате настройки могут возникнуть проблемы при
работе с некоторым программным обеспечением, исполь-
зующим Internet Explorer. Типичным примером являются ос-
настки управления MMC. Поскольку правая панель в осна-
стках представляет собой компонент ActiveX, их отключе-
ние в зоне безопасности My Computer приводит к нерабо-
тоспособности некоторых оснасток.
Наиболее приемлемым решением здесь является раз-
решение использования только одобренных администрато-
ром компонентов, для чего необходимо установить пара-
метр безопасности Run ActiveX Controls and Plugins равным
Administrator Approved. После этого необходимо описать раз- Ðèñóíîê 2. Ðåäàêòèðîâàíèå àäìèíèñòðàòèâíîãî øàáëîíà
решенные элементы ActiveX, что можно сделать через ре- Аналогичные настройки осуществляются различными
дактор групповых политик (см. рис. 1) в разделе «User утилитами, осуществляющими настройку безопасности

Ðèñóíîê 1. Ðàçðåøåííûå ýëåìåíòû ActiveX

¹4, àïðåëü 2005 69


безопасность
компьютера. Например, Qwik-Fix Pro [7] в качестве одного ние об отключенных ActiveX, выскакивающее при обраще-
из защитных механизмов устанавливает более строгие раз- нии к каждой странице, где содержится запрещенный ком-
решения в зоне My Computer. понент. До выхода Windows XP Service Pack 2 эту проблему
При использовании описанного выше подхода Restricted приходилось решать путем модификации соответствующе-
Sites является стандартной зоной безопасности для вне- го компонента Internet Explorer. Также могут возникнуть про-
шних узлов, необходимо ослабить настройки этой зоны. Для блемы с некоторыми приложениями при изменении настро-
нормальной работы большинства пользователей достаточ- ек безопасности для зоны My Computer.
но разрешить загрузку файлов из неё. Ещё одной полез-
ной настройкой является разрешение обработки файлов
Cookie в Restricted Sites. Это устранит проблемы со многи-
ми серверами, отслеживающими сессию с помощью Cookie.
Включать обработку сценариев для этой зоны не реко-
мендуется, поскольку она же используется при обработке
содержимого почтовых сообщений в программах Outlook и
Outlook Express, соответственно чрезмерное ослабление
настроек безопасности может привести к снижению обще-
го уровня безопасности. В случае если необходимо разре-
шить выполнение сценариев для всех узлов, лучше восполь-
зоваться методом расширения набора зон безопасности,
описанным далее.
В зоне безопасности Internet обычно разрешается под-
держка сценариев и некоторых ActiveX-компонентов, напри-
мер, Macromedia Flash. Загрузку и инициализацию всех под-
писанных и неподписанных элементов в этой зоне лучше
отключить. Для доверенных узлов (Trusted Sites) можно вклю-
чить поддержку загрузки подписанных элементов ActiveX.
Желательно отключить формирование состава зоны
безопасности Local Intranet на основе сетевой топологии и
добавлять узлы или сети в неё вручную. Это защитит от
внутренних атак, таких как установка ложных веб-серве-
ров, NTLM Relaying [8] и т. д. Ðèñóíîê 3. Äîáàâëåíèå çîíû áåçîïàñíîñòè
Не забывайте включить в эти зоны адреса Proxy-серве- Наиболее эффективным методом будет настройка пред-
ров для корректной работы функции автоматической аутен- полагаемых параметров для организационного подразде-
тификации пользователя. В обратном случае возможны ления отдела IT с последующей коррекцией по результа-
различные проблемы, особенно при аутентификации с по- там тестирования. Все крупные эксперименты лучше сна-
мощью Smartcard. чала проводить на себе.
Список доверенных или частично доверенных серверов
Расширение набора зон проще всего формировать на основе журналов межсете-
При необходимости можно расширить набор зон безопас- вого экрана с последующим согласованием у руководства.
ности, доступный для Internet Explorer. Для этого в реестр Не забывайте про формальную процедуру включения не-
добавляется зона с новым номером (например, 5). Самый обходимых узлов в зоны безопасности по запросу работ-
простой способ произвести подобную операцию – это экс- ников. Эта процедура должна быть документально оформ-
портировать раздел реестра, содержащий наиболее близ- лена, доведена до пользователей и являться не слишком
кую по настройкам зону в текстовый файл, изменить его и обременительной для них.
импортировать в реестр (рис. 3). Централизованно настраивать параметры безопаснос-
Используя этот подход, можно изменить идеологию при- ти для Internet Explorer удобнее всего через групповые по-
менения зон. Например, все внешние узлы по умолчанию литики. Для этого в соответствующем ОГП необходимо от-
попадают в зону Internet, в которой запрещена обработка крыть раздел User configuration/Windows settings/IE User
сценариев и компонентов ActiveX. Серверы со средним configuration/Windows settings/IE Maintenance/Security, дваж-
уровнем доверия включаются в дополнительную зону, вы- ды щёлкнуть на Security Zones and Content Ratings и поста-
полнение сценариев в которой разрешено. Ну и наиболее вить переключатель в положение Import the current security
функциональные серверы попадают в зону Trusted Sites. zones and privacy settings (рис. 4).
В административном шаблоне, входящем в Windows XP
Развертывание и поддержка Service Pack 2, настройка зон безопасности была вынесе-
Перед внедрением описанного подхода необходимо провес- на в отдельную ветку (рис. 5). Соответственно появилась
ти некоторые подготовительные операции. Первая из них – возможность настройки параметров для всех зон, включая
выяснение влияния настроек безопасности на используе- My Computer непосредственно в объекте групповой поли-
мое программное обеспечение. тики. Для того чтобы применять эти настройки в домене,
Хорошим примером является раздражающее сообще- достаточно импортировать в групповую политику админис-

70
безопасность
тративный шаблон %systemroot%\inf\inetres.adm из дистри- опубликованным проблемам. Кроме того, не стоит забы-
бутива Windows XP Service Pack 2. вать о других средствах защиты, таких как управление об-
новлениями безопасности и фильтрация содержимого. На-
пример, на сервере www.isatools.org можно найти сценарии,
настраивающие ISA Server 2004 на блокировку распрост-
раненных атак.

Литература:
1. Обход средств защиты клиентских приложений. – http://
www.security.nnov.ru/advisories/bypassing.asp.
2. US-CERT. Vulnerability Note VU#713878. – http://www.kb.
cert.org/vuls/id/713878.
3. Drew Copley. Switching Software Because of Bugs. – http://
www.securityfocus.com/archive/1/367723/2004-06-25/2004-
07-01/0.
Ðèñóíîê 4. Èìïîðò íàñòðîåê çîí áåçîïàñíîñòè â ÎÃÏ 4. Trojan Win32.Secdrop.C. – http://www3.ca.com/security
Хотя распространенность уязвимостей типа «Внедрение advisor/virusinfo/virus.aspx?id=40225.
сценариев» (Cross-Site Scripting) в веб-серверах делает кон- 5. Internet Explorer «Object Type» vulnerability. – http://www.cve.
цепцию разделения уровня безопасности по зонам на ос- mitre.org/cgi-bin/cvename.cgi?name=CAN-2003-0532.
нове имен доменов и IP-адресов серверов очень условной, 6. Windows XP Service Pack 2 Enhancements to Internet
не стоит отказываться от этого механизма защиты. Explorer 6. – http://www.microsoft.com/windows/ieak/
Описанные настройки позволяют значительно повысить techinfo/deploy/60/en/appendix.mspx.
защищенность Internet Explorer от 0day-угроз, т.е. тех уяз- 7. Qwik-Fix Pro. – http://www.pivx.com/qwikfix.asp.
вимостей, которые ещё не были устранены производите- 8. NTLM и корпоративные сети. – http://www.securitylab.ru/
лем. Всегда стоит отслеживать новые уязвимости и тести- 49547.html.
ровать свою конфигурацию на подверженность недавно

Ðèñóíîê 5. Íàñòðîéêè çîí áåçîïàñíîñòè â ÎÃÏ

¹4, àïðåëü 2005 71


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

СИСТЕМА СОЗДАНИЯ ДОКУМЕНТАЦИИ POD


ЧАСТЬ 2

АЛЕКСЕЙ МИЧУРИН
Напомню коротко, что POD – это система разработки элек- вертирование русской man-страницы в тот же PostScript ока-
тронной документации. Она предполагает, что документ раз- зывается не такой уж простой задачей. Во-вторых, LaTeX-
рабатывается в определённом достаточно простом форма- исходник открывает перед вами все возможности системы
те, и предоставляет средства конвертирования исходного LaTeX. Вы можете вставлять в документ рисунки, форма-
POD-документа в другие форматы для печати и просмотра. тировать документ в несколько колонок, формировать ав-
В первой части статьи мы рассмотрели средства конвер- томатические оглавления, пользоваться системой автома-
тирования в форматы «неразмеченный текст», man-страни- тической расстановки переносов и многое другое. В фор-
ца и HTML. В этой части рассмотрим конвертирование в мате man все эти возможности недоступны. Согласитесь,
PostScript и PDF. некоторое усложнение вполне стоит того.
Напомню, что POD-документ состоит из абзацев, кото-
рые разделяются пустой строкой. Абзацы бывают трёх ти- Первое знакомство с pod2latex
пов: форматированные, для представления обычного тек- Первое знакомство с pod2latex может окончиться конфу-
ста, неформатированные, для листингов программ, и уп- зом. Скорее всего, конвертер pod2latex откажется обраба-
равляющие, для формирования структурных элементов (за- тывать русскоязычные документы. Насколько мне удалось
головков, списков) и внедрения формат-специфических разобраться, скрипт pod2latex и все модули, вызываемые в
вставок. Неформатированные абзацы начинаются с пробе- нём, полностью игнорируют локализацию.
ла. Управляющие – с команды. В форматированных и уп- Источник проблемы – модуль Pod::Find, который с по-
равляющих абзацах допустимо элементарное оформление мощью Perl-оператора -T проверяет, является ли файл дей-
текста (например, I<курсив> или B<жирный шрифт>) и встав- ствительно текстовым. Этот оператор может счесть ваш до-
ка не ASCII-символов (например, E<deg> – значок градуса). кумент двоичным файлом из-за присутствия в нём русских
Команды начинаются со знака «равно» (например, =head1 букв.
задаёт заголовок первого уровня). Более того, насколько я понимаю, оператор -T делает своё
В качестве примера я использовал тот же POD-документ, заключение, проанализировав только небольшую часть ин-
что и в первой части статьи. формации в начале файла. Поэтому если файл начинается
На сайте журнала http://www.samag.ru в разделе «Ис- с некоторого английского текста, а первые русские буквы
ходный код» вы можете взять архив с POD-кодом и всеми начинают встречаться ниже, то pod2latex может обработать
обсуждаемыми здесь скриптами. такой файл. Но если русские буквы появятся ближе к нача-
лу файла, то pod2latex наотрез откажется с ним работать.
Конвертирование POD в TeX, Такое поведение утилиты может сбить с толку при поиске
PostScript и PDF причины недоразумений.
Для конвертирования POD-документов в форматы PostScript Идеологически верным решением является подключе-
и PDF проще всего сперва сконвертировать POD в LaTeX, ние в pod2latex поддержки локализации, за которую отве-
a из LaTeX-исходника получить все необходимые PostScript- чает прагма locale. То есть в начало скрипта pod2latex сле-
и PDF-файлы. дует добавить строку:
На первый взгляд такой путь может показаться излиш-
не сложным. Действительно, мы уже умеем создавать man- use locale;
страницы (см. первую часть статьи). А из них легко можно
получить PS- или PDF-файл; например так: И конечно, вам следует настроить локаль. Проще всего
это сделать, установив переменную среды LANG. У меня
cat page.man | /usr/bin/tbl | LANG=ru_RU.KOI8-R. В вашей системе называние русской
/usr/bin/groff -S -Wall -mtty-char -man -Tps >page.ps
локали может слегка отличаться. Вы можете посмотреть
Но это экстенсивный путь. Во-первых, man-документ не полный список локалей, установленных в вашей системе,
несёт никакой информации о кодировке и корректное кон- выполнив команду locale -a.

72
программирование
Другой, более вероломный путь, практически не потре- % Îãîâàðèâàåì êîäèðîâêó äîêóìåíòà
бует знания Perl и перенастройки системы (иногда настрой- %\usepackage[cp866]{inputenc}
\usepackage[koi8-r]{inputenc}
ка русской локали бывает нежелательна). \usepackage[russian]{babel}
Самое простое решение – отредактировать модуль \selectlanguage{russian}
\usepackage{draftcopy}
Pod::Find, удалив соответствующую проверку. Внимание!
Cохраните оригинальную версию файла, прежде чем редак- % Âêëþ÷àåì ãðàôè÷åñêèé ïàêåò
\usepackage[dvips]{graphicx}
тировать его! В моей системе это файл /usr/local/lib/perl5/5.8.5/ %\graphicspath{{ps/}}
Pod/Find.pm. У меня установлен Pod::Find версии 0.24_01, % Ìàêðîñ äëÿ âñòàâêè êàðòèíîê
\newcommand{\inspsfig}[3]{
в нём проверка выполняется в строке 251. Чтобы отменить \begin{figure}[!htbp]
проверку замените \begin{center}
\includegraphics[angle=0, width=#2\textwidth]{#1}
\end{center}
unless(-f $file && -T _ && ($file =~ /\.(pod|pm|plx?)\z/i ↵ \caption{#3}
|| -x _ )) %\label{text}
\end{figure}
на }

% Çàäà¸ì ìåæñòðî÷íûé èíòåðâàë


unless(-f $file && ($file =~ /\.(pod|pm|plx?)\z/i || -x _ )) \linespread{1}

% Äîêóìåíò íà÷àëñÿ
Так или иначе теперь мы заставили pod2latex работать \begin{document}
с русскими документами, и вы точно сможете сконвертиро- %  íà÷àëå äîêóìåíòà ãåíåðèðóåì îãëàâëåíèå è ...
вать русскоязычный POD-документ в формат LaTeX. Но до- \tableofcontents
% ... ñïèñîê èëëþñòðàöèé
кумент окажется неполным. \listoffigures
Дело в том, что LaTeX-документы, как и HTML-докумен- % Ìîæíî íà÷àòü äîêóìåíò ñî ñëåäóþùåé ñòðàíèöû
%\newpage
ты, состоят из заголовка и тела. Утилита pod2latex создаёт % à ìîæíî ïðîñòî çàäàòü îòñòóï
только тело. Надо сказать, что эта утилита способна со- %\vspace{50mm}
здать и полный документ, но в нём не будет содержаться Первым делом мы задаём класс документа (\document-
никакой информации о языке и кодировке, то есть для рус- class). Настраиваем размер шрифта (10pt), размер бумаги
скоязычных документов эта возможность не очень полез- (A5), если вам необходимо сверстать документ в две ко-
на. Видимо, и разработчики POD считают её не очень по- лонки, добавьте через запятую параметр twocolumn. Здесь
лезной, так как по умолчанию она отключена. же указан класс документа (article). LaTeX поддерживает
В полученном документе не хватает завершения (его три размера шрифта 10, 11 и 12 пунктов. Необычный раз-
следует добавить): мер бумаги мы используем умышленно. Стиль article наибо-
лее подходит для короткой статьи, LaTeX поддерживает и
\end{document} другие стили.
При разработке крупных пакетов документации вам мо-
и так называемой преамбулы, о которой следует сказать жет пригодиться стиль report (документы, объёмом около
подробнее. пятисот тысяч печатных знаков) или даже book. От стиля
article они отличаются практически только одной, но очень
Преамбула LaTeX документа важной особенностью.
В преамбуле LaTeX-документов располагаются инструкции, В документах класса article предусмотрены заголовки
в соответствии с которыми производится вёрстка докумен- section, subsection и subsubsection, то есть заголовки пер-
та. Вот пример преамбулы. Я постарался упомянуть в ней вого второго и третьего уровней. В классах report и book
все пакеты и директивы, которые часто бывают полезны при добавляется возможность разбивать документы на главы,
разработке документов. Поэтому часть директив закоммен- новая команда chapter (и её близнец part), создаёт заголо-
тирована (во избежание противоречий). Комментариями в вок как бы нулевого уровня. Pod2latex не создаёт глав. С
LaTeX являются все символы от «%» до «конца строки» вклю- одной стороны, это делает результаты работы pod2latex ма-
чительно. Мы обсудим и закомментированные директивы. лопригодными для вёрстки в классах report и book; с дру-
гой стороны, получаемые article-документы легко и есте-
% Çàäà¸ì ãëîáàëüíûå àòðèáóòû äîêóìåíòà ственно могут входить как отдельные главы в большой
\documentclass[10pt, a5paper]{article}
\usepackage[magstep2]{scale} report-документ.
Если вы планируете разрабатывать документы большо-
%\usepackage[a3paper]{geometry}
го объёма и объединять POD-документы, в первую очередь
% Èçìåíÿåì ïîëÿ обратите внимание на ключ -h1level утилиты pod2latex. Он
\addtolength{\hoffset}{-1cm}
\addtolength{\textwidth}{2cm} позволяет получить документы, в которых все заголовки
\addtolength{\voffset}{-1in} логически «сдвинуты», например POD-команде =head1 со-
\addtolength{\textheight}{2in}
% Êðàñíàÿ ñòðîêà ответствует подзаголовок (второй уровень) и так далее.
\setlength{\parindent}{0.3cm} Такие документы можно использовать, как разделы или под-
% Ðàññòîÿíèå ìåæäó àáçàöàìè
\setlength{\parskip}{0pt} разделы более крупных документов.
% Ðóññêèé ñòèëü îôîðìëåíèÿ àáçàöåâ Из возможностей LaTeX обратите внимание на колон-
\usepackage{indentfirst}
титулы (команды pagestyle и thispagestyle). Если в вашем

¹4, àïðåëü 2005 73


программирование
документе более ста страниц, колонтитулы перестают быть первых, не придётся указывать путь к каждому графичес-
просто украшением. Очень полезной при слиянии докумен- кому файлу, а во-вторых, будет легко изменить сразу все
тов может оказаться LaTeX-команда include. пути, если вы переместите файлы.
В завершение отступления о больших документах по- С помощью команды \newcommand я создал макрос,
зволю себе небольшой психологический этюд. Весь мой позволяющий в дальнейшем легко добавлять иллюстрации.
опыт показывает, что большие документы отпугивают поль- Подробное описание способов включения графики в LaTeX
зователя. Если предоставить пользователю пару десятков выходит за рамки настоящей статьи.
коротеньких инструкций, то он в них легко ориентируется. На первых порах вы вполне можете ограничиться этим
А если ту же самую информацию сверстать на полусотне макросом или его подредактированными версиями. Под-
страниц одного документа, то пользователь не читает этот робнее о том, как его использовать, я расскажу чуть поз-
документ вообще (даже оглавление не читает), а вместо же.
этого звонит (пишет по e-mail, ICQ...) разработчику. Если В конце преамбулы задаём межстрочный интервал ко-
вы создаёте руководства, чтобы уменьшить количество глу- мандой \linespread.
пых вопросов на вашу голову, то следует избегать пугаю- С команды \begin{document} начинается тело LaTeX-до-
щих документов. кумента. Преамбула закончилась, всё дальнейшее будет
Если вы будете создавать одностраничные инструкции- попадать на страницы.
памятки, то наверняка захотите подавить нумерацию стра- Я включил в тело автоматически создаваемые оглав-
ниц. Это делается командой \pagestyle{empty}. ление (команда \tableofcontents) и список иллюстраций (\list-
Продолжим наше знакомство с преамбулой. offigures).
В следующей строке мы подключаем пакет scale, кото- Если вы хотите, чтобы кроме оглавления на первой стра-
рый масштабирует листы, увеличивая их в 1.4 раза. Таким нице ничего не было, раскомментируйте директиву \newpage.
образом, мы получим документ на бумаге привычного фор- Если вы предпочитаете просто сделать дополнительный от-
мата A4 и шрифт из «десятого» превратится в «четырнад- ступ, укажите его величину в аргументе директивы \vspace.
цатый». Если вам нужен, скажем, «двенадцатый» шрифт, LaTeX – мощная система вёрстки. Я, конечно, не смогу
то вы можете просто сразу указать 12pt, размер бумаги A4 осветить здесь все её возможности. Тем не менее я поста-
и не использовать пакет scale. рался не забыть ничего, что когда-либо требовалось мне
Пакет geometry позволяет задать размер бумаги A3 и при подготовке документа.
больше. Это можно использовать, чтобы потом отмасшта- Тем, кто хочет лучше узнать LaTeX, я бы очень реко-
бировать документ и получить необычно мелкий шрифт. мендовал книгу «Не очень краткое введение в LaTeX2e».
Серия команд \addtolength изменяет поля документа. По Она очень проста, компактна и охватывает широкий спектр
умолчанию LaTeX делает очень большие поля. Считается, возможностей LaTeX. Перевод этой книги (Б. Тоботрас) до-
что это правильно с точки зрения профессиональной вёрст- ступен по адресу: http://xtalk.msk.su/tex.
ки, но людям, навсегда испорченным программой MSWord, О кириллизации LaTeX (включая настройку системы ав-
невозможно привыкнуть к этой красоте. томатических переносов) подробно написано в «The Linux
Двумя следующими командами \setlength мы устанав- Cyrillic HOWTO (russian)» Евгения Балдина, доступном по
ливаем отступ красной строки абзаца и расстояние между адресу: http://www.inp.nsk.su/~baldin.
абзацами. В иностранной литературе принято не делать Вот как выглядят первые две страницы моего примера,
красных строк, отделяя абзацы небольшим дополнитель- свёрстанные с приведённой преамбулой (рис. 1).
ным интервалом. Отечественная традиция иная. Незначительные изменения в преамбуле позволяют су-
Пакет indentfirst предписывает делать красную строку и щественно изменить результат (рис. 2).
у первого абзаца. По умолчанию LaTeX следует западному Здесь документ свёрстан «двенадцатым» шрифтом в
стандарту, не делая красную строку у первого в главе аб- две колонки.
заца.
Пакет inputenc задаёт кодировку LaTeX-файла. Я исполь- Итак, конвертируем POD в PostScript и PDF
зовал koi8-r. LaTeX поддерживает огромное количество ко- Вы видите, что pod2latex выдаёт достаточно «сырой» мате-
дировок, среди которых cp866, cp1251, maccyr. Поддержи- риал. С одной стороны, это хорошо, потому что из этого
ваются и украинские кодировки. «материала» можно «вылепить» практически что угодно.
Пакет babel и команда \selectlanguage{russian} русифи- С другой стороны, «лепить» каждый раз с нуля – не оправ-
цирует LaTeX. После подключения этого пакета LaTeX бу- данно трудоёмко.
дет автоматически использовать русские слова «Оглавле- В собранном мною архиве вы найдёте скрипты, выпол-
ние», «Рисунок», «Глава» и другие. няющие всю сборку автоматически. Принцип их действия
Пакет draftcopy выполняет чисто декоративную функ- прост.
цию. На всех страницах наискосок печатается слово draft. Сперва создаём «сырой» файл:
Это удобно, когда вы распечатываете неокончательную,
«черновую» версию документа. pod2latex -out file file.pod
Далее мы подключаем графический пакет graphicx. Если
вы храните включаемые графические файлы в отдельной Будет создан файл file.tex (расширение добавляется ав-
директории, удобно использовать директиву \graphicspath, томатически).
чтобы раз и навсегда указать путь к картинкам. Вам, во- Затем чуть корректируем «сырой» файл:

74
программирование
cat file.tex | latex file-14pt.tex
sed 's/\\label{_}//g' | latex file-14pt.tex
sed 's/\(subsection\)\*/\1/g' > file.tex.temp dvips -o file-14pt.ps file-14pt.dvi
ps2pdf file-14pt.ps
Первый sed-конвейер уничтожает пустые метки, которые
создаются из-за нашей русскоязычности. Второй sed-кон- Двойная обработка необходима, чтобы latex смог со-
вейер удаляет звёздочку во всех директивах «subsection*». здать оглавление.
Это не обязательная операция. Звёздочка говорит о том, Кстати, утилита dvips тоже может масштабировать до-
что раздел не должен отображаться в оглавлении. Pod2latex кументы (ключ -x). Можно было не использовать пакет scale,
предполагает, что в оглавление войдут только заголовки а отмасштабировать страницы на этапе конвертирования
первого уровня. Обычно, это как раз то, что нужно. Но мне dvi-файла в PostScript-формат.
захотелось, чтобы все заголовки попали в оглавление. Как В скрипте, который я включил в архив примеров, все
видите, добиться этого совсем не сложно. эти команды вложены в цикл, в котором «собираются» две
Далее мы присоединяем к документу преамбулу и за- модификации документа: в одну колонку шрифтом 14pt и в
вершение: две колонки шрифтом 12pt, как это было показано на ри-
сунках.
cat doc-head-14pt.tex file.tex.temp doc-tail.tex > file-14pt.tex Напоследок скажу, что я даже не ставил перед собой
задачу описать все опции конвертера pod2latex. Эта утили-
Теперь мы получили полноценный LaTeX-файл file-14pt.tex. та предоставляет возможности и выделения только части
Дважды обработав его системой latex, мы получаем одно- документа, и включения преамбулы и завершения, указан-
имённый dvi-файл. DVI (DeVice Independent) – стандартный ные пользователем, и многие другие. Просто мой опыт по-
формат, генерируемый системой LaTeX. Несмотря на гром- казывает, что использование многих из этих возможнос-
кое название, его не следует использовать для обмена ин- тей или неоправданно, или невозможно для русскоязычных
формацией. Дело в том, что dvi-файл обычно далеко не документов. Если вы хотите получить исчерпывающую ин-
самодостаточен. Например, он не включает графические формацию по pod2latex, обращайтесь к соответствующей
объекты, а содержит только ссылки на них. Поэтому, если документации perldoc pod2latex.
вы перенесёте dvi-файл на другую машину или просто пе-
репишете его в другую директорию, не предприняв ника- Графика в PostScript и PDF
ких дополнительных мер, то скорее всего его уже не удаст- Для LaTeX естественным форматом представления графи-
ся просмотреть или конвертировать в другой формат. К сча- ки является PostScript. Существуют средства, позволяющие
стью, из dvi-файла можно сделать полноценный PostScript- работать и со многими другими форматами, но эти сред-
и/или PDF-файл: ства представлены отдельными пакетами, которые могут и

Ðèñóíîê 1

¹4, àïðåëü 2005 75


программирование
не входить в ваш дистрибутив LaTeX (особенно если вы \includegraphics[angle=0, width=#2\textwidth]{#1}
пользуетесь LaTeX под Windows). Я бы советовал работать \end{center}
\caption{#3}
только с PostScript, тем более что получить файл в этом фор- %\label{text}
мате совсем не сложно. С таким преобразованием легко \end{figure}
}
может справиться, например, утилита convert из набора
ImageMagic. В первой строке мы создаём новую команду \inspsfig, у
которой будет три аргумента. В теле команды создаётся
convert file.bmp file.ps окружение \begin{figure}-\end{figure}. Команда \begin{figure}
имеет строку-параметр, о которой следует сказать отдель-
LaTeX предоставляет множество способов вставки гра- но. Этот параметр определяет, где будет расположен пла-
фики. Мой способ далеко не единственный, но, как мне ка- вающий объект (каковым является иллюстрация).
жется, наиболее неприхотливый и простой. В строке-параметре «!htbp» первый символ заставляет
Пользуясь предлагаемым мною макросом, вы можете LaTeX не рассматривать большинство своих правил и ста-
легко вставить картинку в текст: раться выполнить инструкции «во что бы то ни стало». Бук-
ва h говорит о том, что первым делом LaTeX должен попы-
=for latex таться разместить иллюстрацию там, где она находится в
\inspsfig{two.eps}{.35}{Íåòðóäíî çàìåòèòü, ÷òî, ñîâìåñòèâ
äâóõ ìàëåíüêèõ äðàêîí÷èêîâ, ìû ïîëó÷èì áîëüøîãî.} тексте документа. Если это невозможно, то LaTeX рассмот-
рит букву t и постарается разместить картинку вверху стра-
Этот параграф предназначен для LaTeX-документов (=for ницы. Если и это ему не удастся, будет рассмотрена b, пред-
latex). В нём вызван мой макрос \inspsfig. Первый параметр, писывающая размещать плавающий объект внизу страни-
как вы видите, имя eps-файла. Второй – доля листа, кото- цы. И, наконец, если все попытки закончатся неудачей, то
рую должна занять картинка по горизонтали. Третий – под- в силу вступит инструкция p, и LaTeX выделит для плаваю-
пись к картинке. Нумерацию рисунков LaTeX ведёт автома- щего объекта отдельную страницу и разместит его там.
тически. Теперь становится ясно, что если вы хотите, например,
Давайте вкратце рассмотрим, как работает этот мак- чтобы все рисунки размещались вверху страницы, то па-
рос, и что в нём можно изменить и адаптировать под ваши раметр должен начинаться с буквы t, за которой могут сле-
нужды. довать альтернативные варианты.
Итак, текст макроса таков: Команда \includegraphics вложена в окружение \begin
{center}-\end{center}. Картинка будет отцентрована по гори-
\newcommand{\inspsfig}[3]{ зонтали. Вы видите, что мы не поворачиваем картинку
\begin{figure}[!htbp]
\begin{center} (angle=0), а ширину рассчитываем как произведение вто-

Ðèñóíîê 2

76
программирование
рого параметра макроса \inspsfig на ширину текста djvm -create result.djvu file1.djvu file2.djvu ↵
(width=#2\textwidth). В качестве имени файла с картинкой file3.djvu file4.djvu
будет использован первый параметр \inspsfig. В файле result.djvu объединены все страницы.
Команда \caption задаёт подпись к рисунку. Если проделать все эти операции с четырёхстраничным
Закомментированная команда \label бывает полезна, если документом-примером к этой статье, то размер DjVu-файла
вы хотите ссылаться на рисунки из текста. Она (в сочетании составит менее 25 Кб.
с другими командами) позволяет автоматически поддержи- Если вам понадобится документ MSWord или RTF, то
вать корректность ссылок. Я не буду на ней подробно оста- проще всего создать HTML-документ (конвертирование в
навливаться. HTML мы рассматривали в предыдущей статье), скопиро-
вать его из Explorer в Word и «сохранить как...».
Конвертирование в другие форматы Хотя POD поддерживает не все существующие в при-
В большинстве случаев уже рассмотренных форматов впол- роде форматы, я ни разу не сталкивался с безвыходной
не достаточно. Не надо торопиться отказываться от Post ситуацией.
Script. Он весьма гибок. Например, вы можете сразу подго-
товить документ для печати в виде брошюры: Проверка корректности POD
Для проверки корректности POD-исходника существует
pstops '4:-3L@.7(21cm,0)+0L@.7(21cm,14.85cm)' ↵ очень полезная программа podchecker. Если вы укажете ей
page-14pt.ps page-14pt-booklet-up.ps
pstops '4:1L@.7(21cm,0)+-2L@.7(21cm,14.85cm)' ↵ опцию -warnings, то получите все возможные предупреж-
page-14pt.ps page-14pt-booklet-down.ps дения. Пример:

Теперь можно на одной стороне листов напечатать со- podchecker -warnings file.pod
держимое файла page-14pt-booklet-up.ps, а на другой – page-
14pt-booklet-down.ps и сброшюровать. Вряд ли MSWord по-
зволит вам сделать буклет (и не только буклет) так же легко. Недостатки и перспективы POD
Подробнее о pstops вы можете почитать в соответству- Огромным недостатком POD является отсутствие средств
ющем man. формирования таблиц. Частично это компенсируется воз-
Имея в распоряжении PostScript, легко сделать DjVu-файл можностью вставки формат-ориентированных фрагментов.
или даже jpeg, что тоже может пригодиться, например, при Так, HTML-таблица может быть создана средствами HTML:
написании подобной статьи.
Следующая команда обработает файл page-12pt.ps и =for html
<table><tr><th>A</th><th>B</th></tr>
создаст серию файлов file001.jpeg, file002.jpeg и так далее, <tr><td>A</td><td>B</td></tr></table>
по одному на каждую страницу.
Но если вам требуется создать множество достаточно
gs -sDEVICE=jpeg \ сложных таблиц, если вы хотите видеть их в документах
-sOutputFile=file%03d.jpeg \
-dBATCH \ разных форматов, то скорее всего вам следует использо-
-dNOPAUSE \ вать другое средство.
-r72x72 \
page-12pt.ps Существенным недостатком является и то, что POD не
позволяет создавать документы, разнесённые в разные фай-
Улучшить качество изображения (и увеличить размер лы. В POD-языке отсутствуют операции типа include, что не
файлов) можно, изменив разрешение в параметре -r. удобно при разработке больших документов. Это можно ча-
Создать DjVu-файл тоже несложно. Последовательность стично скомпенсировать, создавая некий гибридный доку-
действий во многом определяется набором инструментов, мент, предназначенный для предварительной обработки ка-
которым вы располагаете. Я могу предложить следующий ким-нибудь препроцессором, например, cpp или m4. Упрос-
алгоритм. тит ли это усовершенствование жизнь – решать вам.
Сперва создаём PPM-изображения каждой страницы: Система POD продолжает развиваться. Наиболее мно-
гообещающей мне представляется команда =encoding. Со-
gs -sDEVICE=ppm \ гласно документу perlpod, она должна использоваться в
-sOutputFile=file%d.ppm \
-dBATCH \ начале документа.
-dNOPAUSE \ Приведён даже пример (цитирую!):
-r120x120 \
page-12pt.ps
=encoding koi8-r
Далее конвертируем все страницы (пусть иx будет че-
тыре) в формат DjVu: Упоминается эта команда и в perldocspec. Но я, честно
говоря, так и не понял, как её использовать. Podchecker
for i in 1 2 3 4 сообщает, что такая команда ему не знакома. Конвертеры
do
cpaldjvu -dpi 120 file$i.ppm file$i.djvu предупреждают об ошибке и игнорируют её.
done Тем не менее, работа над форматом и средствами POD
продолжается, и сделано уже немало. Работать с POD про-
И объединяем полученные файлы в один документ: сто, приятно и эффективно.

¹4, àïðåëü 2005 77


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

ТЕХНИКА ОПТИМИЗАЦИИ ПОД LINUX


ЧАСТЬ 3

Áîëüøîå òåñòîâîå ñðàâíåíèå Linux-êîìïèëÿòîðîâ ïðîäîëæàåòñÿ! Òåìà ñåãîäíÿøíåãî


èññëåäîâàíèÿ – öèêëû è èõ îïòèìèçàöèÿ. Â îñíîâíîì ìû áóäåì ãîâîðèòü î òðåõ íàèáîëåå
ïîïóëÿðíûõ êîìïèëÿòîðàõ – GCC 3.3.4, Intel C++ 8.0 è Microsoft Visual C++ 6.0, ê êîòîðûì
òåïåðü ïðèñîåäèíèëñÿ è GCC 4.0.0 ñî ñâîèì íîâûì îïòèìèçàòîðîì öèêëîâ.

КРИС КАСПЕРСКИ
По статистике до 90% времени исполнения приходится на ют циклы, располагая их в памяти как угодно. В худшем
глубоко вложенные циклы, от качества оптимизации кото- случае это приводит к трех-четырехкратному падению про-
рых зависит быстродействие всей программы в целом. Со- изводительности. В среднем же теряется порядка 30%.
временные компиляторы поддерживают множество про- Компилятор gcc позволяет выравнивать циклы на вели-
грессивных технологий оптимизации и способны букваль- чину, кратную степени двойки. За это отвечает ключ -falign-
но творить чудеса! loops=n (по умолчанию n равен двум, что, как уже отмеча-
Стратегия оптимизации циклов тесно связана с архи- лось, далеко не самая лучшая стратегия выравнивания, и
тектурой процессора, кэш-контроллера и контроллера опе- лучше выравнивать циклы по границе четырех байт).
ративной памяти. Это слишком объемная, можно даже ска- Ключ -fno-align-loops (аналогичный ключу -falign-loops=1)
зать, монументальная тема, и в рамках настоящей статьи отключает выравнивание. На уровнях оптимизации -O2 и
она не обсуждается. Читайте документацию, распростра- -O3 выравнивание циклов по умолчанию включено, и от-
няемую фирмами Intel и AMD (причем не только по процес- ключать его было бы неразумно.
сорам, но и по чипсету) или мою книгу «Техника оптимиза- Итого:
ции программ – эффективная работа с оперативной памя- ! msvc – не выравнивает.
тью», в ней эти вопросы освещены достаточно подробно. ! icl – не выравнивает.
! gcc – выравнивает по границе степени двойки.
Выравнивание циклов
Выравнивание циклов (loop alignment) имеет много общего Разворот циклов
с выравниванием ветвлений, о котором мы уже говорили в Микропроцессоры с конвейерной архитектурой (а к тако-
предыдущей статье. Кратко опишем ситуацию для тех, кто вым относятся все современные x86-процессоры), плохо
не читал ее. Компиляторы msvc и icl вообще не выравнива- приспособлены для работы с циклами. Для достижения наи-

78
программирование
высшей производительности процессору необходим доста- for(a=0;a<n;a++)
точно протяженный участок «трассы выполнения», свобод-
ный от ветвлений. всегда разворачиваются на 5 итераций, а оставшиеся (n % 5)
Компактные циклы вида: итераций выполняются в отдельном неразвернутом цикле.
Циклы с ветвлениями разворачиваются только при транс-
for(a=0;a<n;a++) *dst++= *src++; формации в линейный код (при этом ветвления, естествен-
но, исчезают):
исполняются очень медленно и для увеличения быстродей-
ствия приходится прибегать к их развороту (unrolling). for (a=0; a<3;a++) if (a%2) x[a]++; else x[a]--;
Под «разворотом» в общем случае понимается много-
кратное дублирование цикла, которое реализуется прибли- преобразуется в:
зительно так:
x[0]--; x[1]++; x[2]--;
Ëèñòèíã 1. Öèêë äî ðàçâîðîòà

for(i=1; i<n;i+) Компилятор gcc по умолчанию не разворачивает циклы


k += (n % i); даже на уровне оптимизации O3, и делает это только с клю-
Ëèñòèíã 2. Öèêë ïîñëå ðàçâîðîòà (áîëüøèé ðàçìåð — áîëüøàÿ чом -funroll-all-loops, поддерживающим все виды циклов, а
ñêîðîñòü) не только цикл for. Циклы с известным количеством итера-
// ðàçâîðîò öèêëà íà 4 èòåðàöèè ций, где const <= 32 разворачиваются полностью, при
// âûïîëíÿåì ïåðâûå n – (n % 4) èòåðàöèé const > 32 – приблизительно на 4 итерации (точное значе-
for(i=1; i<n;i+=4)
{ ние зависит от количества инструкций в теле цикла). Если
k += (n % i) + \ внутри цикла присутствуют одно или несколько ветвлений,
(n % i+1) + \
(n % i+2) + \ при развороте они неизбежно дублируются, в результате
(n % i+3); чего производительность оказывается даже ниже, чем была
}
до оптимизации! Циклы с неизвестным количеством ите-
// âûïîëíÿåì îñòàâøèåñÿ èòåðàöèè раций не разворачиваются вообще. Для тонкой настройки
for(i-=4; i<n;i++) k += (n % i);
существуют ключи max-unrolled-insns (максимальное коли-
Ëèñòèíã 3. Öèêë ïîñëå ðàçâîðîòà (ìåíüøèé ðàçìåð, ìåíüøàÿ чество инструкций, при котором цикл еще может быть раз-
ñêîðîñòü — ìàøèííîå ïðåäñòàâëåíèå i++ íàìíîãî áîëåå
êîìïàêòíî, ÷åì i+const, îäíàêî åñëè âûðàæåíèÿ вернут, и если он будет развернут, это значение определя-
…(n % i+const_1) + (n % i+const_2) … ìîãóò âûïîëíÿòüñÿ ет величину разворота), max-average-unrolled-insns (макси-
îäíîâðåìåííî, òî …(n % i++) + (n % i++)… âû÷èñëÿþòñÿ
ïîñëåäîâàòåëüíî, ïîñêîëüêó ñîäåðæàò çàâèñèìîñòü ïî äàííûì) мальное среднее количество инструкций, которое цикл мо-
жет иметь после разворота) и max-unroll-times (максималь-
for(i=1; i<(n-3);)
{ ная степень разворота). Разворот по всех случаях выпол-
k += (n % i++) + \ няется по сценарию больший размер – большая скорость.
(n % i++) + \
(n % i++) + \ Итого:
}
(n % i++); ! msvc:
! не разворачивает никакие циклы.
for(;i<n;i++) k += (n % i); ! icl:
! циклы с переменным количеством итераций разво-
Компилятор msvc вообще не разворачивает циклы, и эту рачивает на 5 итераций;
работу приходится выполнять вручную. ! циклы с cost <= 32 разворачивает полностью;
Компилятор icl разворачивает только циклы for по сце- ! циклы с const > 32 разворачивает на величину, крат-
нарию больший размер – большая скорость. Причем цик- ную const, но не больше 10h;
лы с заранее известным количеством итераций: ! учитывает количество инструкций в цикле;
! циклы разворачиваются по сценарию: больший раз-
for(a=0;a<const;a++) мер – большая скорость.
! gcc:
где const <= 32 трансформируются в линейный код, и цикл ! на уровне O3 по умолчанию не разворачивает;
как таковой при этом исчезает (см. раздел «Шелушение ! циклы с переменным количеством итераций никог-
циклов»). Как следствие – размер программы существен- да не разворачиваются;
но возрастает, а вместе с ним возрастает и риск «выле- ! циклы с постоянным количеством итераций разва-
теть» за пределы кэша первого уровня, после чего произ- риачиваются приблизительно на 4 итерации (но тут
водительность упадет так, что не поднимешь и домкратом. все зависит от числа инструкций).
Если const >32, цикл разворачивается на количество ите-
раций, кратное const, но не более 16, при этом компилятор Шелушение циклов
учитывает число инструкций в теле цикла – более компак- Идея шелушения циклов (по-английски «peeling») заклю-
тные циклы разворачиваются на большее число итераций. чается в «сдирании» с цикла одной или нескольких итера-
Циклы, количество итераций которых компилятору не- ций с последующей трансформацией в линейный код. Фак-
известно: тически шелушение циклов является частным случаем раз-

¹4, àïðåëü 2005 79


программирование
ворота, однако, область его применения этим не ограничи- {
вается. sum += a[i];
sum += a[i+1];
Рассмотрим следующий код: sum += a[i+2];
sum += a[i+3];
}
Ëèñòèíã 4. Êàíäèäàò íà îïòèìèçàöèþ
for (i -= 4; i<XXL; i++)
for(i=0; i<n; i++) sum += a[i];
a[i] = b[i] + 1;

for(j=0; j<n+1; j++) Все три рассматриваемых компилятора поддерживают


c[j] = d[j] – 1; данную стратегию оптимизации.
Итого:
Чтобы объединить оба цикла в один (см. раздел «Объе- ! msvc – фальцует.
динение циклов»), необходимо «содрать» с цикла j одну ! gcc – фальцует.
«лишнюю» итерацию: ! icl – фальцует.
Ëèñòèíã 5. Îïòèìèçèðîâàííûé âàðèàíò Векторизация
for(i = 0; i < n; i++) Начиная с Pentium MMX, в x86-процессорах появилась под-
{ держка векторных команд (они же «мультимедийные коман-
a[i] = b[i] + 1;
c[i] = d[i] - 1; ды»). К сожалению, в ANSI C векторные операции отсут-
} ствуют, а нестандартные языковые расширения создают
c[i] = d[i] - 1;
проблему переносимости, поэтому вся забота по вектори-
Компилятор msvc шелушить циклы не умеет, icl и gcc – зации циклов ложится на компилятор. Он должен проана-
умеют, но особой радости от этого никто не испытывает, лизировать исходный код и определить, какие операции
поскольку они никогда не комбинируют шелушение с дру- могут выполняться параллельно, а какие нет.
гими приемами оптимизации, что практически полностью Допустим, исходный цикл выглядел так:
его обесценивает. А вот компиляторы от SUN или Hewlett-
Packard – комбинируют! Ëèñòèíã 8. Öèêë äî âåêòîðèçàöèè
Компилятор gcc содержит специальный ключ -fpeel- for(i=0; i<XXL; i++)
loops, полностью разворачивающий циклы с небольшим ко- a[i] += b[i];
личеством итераций. Пороговое значение назначается клю-
чами: max-peel-times (сколько итераций можно сдирать с Используя общепринятую векторную нотацию, его мож-
одного цикла), max-completely-peel-times (максимальное ко- но переписать следующим образом:
личество итераций цикла, который еще может быть раз-
вернут), max-completely-peeled-insns (максимальное коли- Ëèñòèíã 9. Òîò æå öèêë, çàïèñàííûé â âåêòîðíîé íîòàöèè
чество инструкций, при которых цикл еще может быть раз- a[0:N] = a[0:N] + b[0:N];
вернут) и max-peeled-insns (максимальное количество ин-
струкций развернутого цикла). Старшие представители процессоров Pentium могут об-
Итого: рабатывать до 8 порций данных параллельно, и если N пре-
! msvc – не шелушит. вышает это число, приходится поступать так:
! gcc – шелушит.
! icl – шелушит. Ëèñòèíã 10. Öèêë ïîñëå âåêòîðèçàöèè

// îáðàáàòûâàåì ïåðâûå (N-N%VF) ÿ÷ååê âåêòîðíûì ñïîñîáîì


Фальцевание циклов // VF –êîëè÷åñòâî ïîðöèé äàííûõ, êîòîðûå ïðîöåññîð áóäåò
// îáðàáàòûâàòü çà îäèí ðàç
Фальцевание циклов (fold loops) внешне очень похоже на for (i=0; i<XXL; i+=VF)
разворот, но преследует совсем другие цели, а именно: уве- a[i:i+VF] = a[i:i+VF] + b[i:i+VF];
личение количества потоков данных на одну итерацию. Чем // îáðàáàòûâàåì îñòàâøèéñÿ «õâîñò» îáû÷íûì ñïîñîáîì
выше плотность (strength) потоков, тем выше параллелизм for (i -= VF ; i < XXL; i++)
a[i] = a[i] + b[i];
обработки данных, а, значит и скорость выполнения цикла.
Рассмотрим следующий пример:
Однако эта методика срабатывает далеко не всегда. Вот
Ëèñòèíã 6. Íåîïòèìèçèðîâàííûé âàðèàíò – îäèí ïîòîê äàííûõ пример цикла, который нельзя векторизовать:
íà èòåðàöèþ
for(i=0; i<XXL; i++) Ëèñòèíã 11. Öèêë, êîòîðûé íåëüçÿ âåêòîðèçîâàòü
sum += a[i];
for (i=1; i<XXL; i++)
Чтобы сократить время выполнения цикла, необходимо a[i] = a[i-1] + b[i];
увеличить количество потоков, переписав наш код так:
Поскольку последующая ячейка (a[i]) вычисляется на ос-
Ëèñòèíã 7. Îïòèìèçèðîâàííûé âàðèàíò — ÷åòûðå ïîòîêà нове предыдущей (a[i-1]), данные не могут обрабатываться
äàííûõ íà èòåðàöèþ
параллельно.
for(i=0; i<XXL; i += 4) Компилятор msvc не поддерживает векторизацию, а icl

80
программирование
поддерживает, но задействует ее только в том случае, если Вернемся к листингу 3. Хотя загрузка обрабатываемых яче-
указан ключ -ax. Компилятор gcc поддерживает векториза- ек происходит параллельно (практически параллельно, они
цию только начиная с версии 3.4.3, да и то если присут- будут ползти по конвейеру, находясь на различных стадиях
ствует флаг -ftree-vectorize. готовности), следующая операция сложения не может быть
Итого: начата до тех пор, пока не будет завершена предыдущая.
! msvc – не векторизует. Для усиления параллелизма необходимо суммировать
! icl – векторизует. все ячейки в своих переменных, как показано ниже:
! gcc – векторизует начиная с версии 3.4.3.
Ëèñòèíã 14. Îïòèìèçèðîâàííûé âàðèàíò
Автопараллелизм // îáðàáàòûâàåì ïåðâûå XXL – (XXL % 4) èòåðàöèé
Многопроцессорные машины на рабочем столе – это не уто- for(i=0; i<XXL;i+=4)
{
пия, а объективная данность, и с каждым годом их количе-
ство будет только расти. В операционных системах семей- sum_1 += a[i+0];
sum_2 += a[i+2];
ства Linux многозначность заканчивается на уровне пото- sum_3 += a[i+3];
ков (в старых ядрах – процессов). Всякий поток в каждый sum_4 += a[i+4];
}
момент времени может выполняться только на одном про-
цессоре. Программы, состоящие целиком из одного пото- // îáðàáàòûâàåì îñòàâøèéñÿ «õâîñò»
for(i-=XXL; i<XXL;i++)
ка, на многопроцессорной машине исполняются с той же sum += a[i];
скоростью, что и на однопроцессорной.
// ñêëàäûâàåì âñå âîåäèíî
Некоторые компиляторы автоматически разбивают sum += sum_1 + sum_2 + sum_3 + sum_4;
большие (с их точки зрения) циклы на несколько циклов
меньшего размера, помещая каждый из них в свой поток. Такая техника оптимизации называется программной
Такая техника оптимизации называется автопараллелиз- конвейеризацией (software pipelining), и из трех рассматри-
мом (auto-parallelization). Продемонстрируем ее на следую- ваемых компиляторов ею не обладает ни один. Только gcc
щем примере: робко пытается ослабить зависимость по sum, используя
два регистра при развороте на четыре итерации. Осталь-
Ëèñòèíã 12. Íåîïòèìèçèðîâàííûé âàðèàíò ные же компиляторы грузят все ячейки в один и тот же ре-
for (i=0; i<XXL; i++) гистр, очевидно, руководствуясь принципом экономии. Ре-
a[i] = a[i] + b[i] * c[i]; гистров общего назначения всего семь, и их постоянно не
хватает. К сожалению, компилятор не отличает ситуацию
Поскольку зависимость по данным отсутствует, цикл действительно дефицита регистров от их избытка, вынуж-
можно разбить на два. Первый будет обрабатывать ячейки дая нас прибегать к ручной оптимизации.
от 0 до XXL/2, а второй – от XXL/2 до XXL. Тогда на двух- Итого:
процессорной машине скорость выполнения цикла практи- ! msvc – программная конвейеризация не поддерживает-
чески удвоится. А если еще учесть, что многопроцессор- ся.
ные машины, как правило, имеют MMX-команды, да исполь- ! icl – программная конвейеризация не поддерживается.
зовать векторизацию... ! gcc – программная конвейеризация частично поддер-
живается.
Ëèñòèíã 13. Îïòèìèçèðîâàííûé âàðèàíò

/* ïîòîê A */ Предвычисление индуктивных циклов


for (i=0; i<XXL/2; i++) Цикл называется индуктивным, если его тело целиком со-
a[i] = a[i] + b[i] * c[i];
стоит из выражения, последующее значение которого вы-
/* ïîòîê B */ числяется на основе предыдущего. Легко доказать, что зна-
for (i=XXL/2; i<XXL; i++)
a[i] = a[i] + b[i] * c[i]; чение индуктивного цикла зависит только от количества ите-
раций и начального значения аргументов выражения, бла-
Компилятор icl – единственный из всех трех, способный годаря чему оно может быть вычислено еще на стадии ком-
на «параллелизацию» циклов. Чтобы ее задействовать, ис- пиляции.
пользуйте ключ –parallel, только помните, что при выполне- Рассмотрим следующий пример:
нии кода на однопроцессорных машинах, оптимизация дает
обратный эффект (накладные расходы на организацию Ëèñòèíã 15. Èíäóêòèâíûé öèêë äî îïòèìèçàöèè
потоков дают о себе знать). for (i=0; i<XXL; i++)
Итого: sum++;
! msvc – автопараллелизм не поддерживается.
! icl – автопараллелизм поддерживается. Очевидно, что конечное значение sum равно:
! gcc – автопараллелизм не поддерживается.
Ëèñòèíã 16. Èíäóêòèâíûé öèêë ïîñëå îïòèìèçàöèè
Программная конвейеризация sum += XXL;
Разворот цикла традиционными методами (см. раздел «Раз-
матывание циклов») порождает зависимость по данным. Компилятор msvc всегда пытается предвычислить зна-

¹4, àïðåëü 2005 81


программирование
чение индуктивного цикла, однако далеко не всегда это ему return result;
удается, особенно если индуктивное выражение представ- }
else
ляет собой сложную математическую формулу. {
Два остальных компилятора оставляют индуктивные return fact(n - 1, result * n);
}
циклы такими, какие они есть, даже не пытаясь их оптими- }
зировать!
Итого: Вызов функции – достаточно «дорогостоящая» опера-
! msvc – предвычисляет некоторые индуктивные циклы. ция, и от него лучше избавиться. Это легко! Хвостовая ре-
! icl – не предвычисляет индуктивные циклы. курсия легко трансформируется в цикл. Смотрите:
! gcc – не предвычисляет индуктивные циклы.
Ëèñòèíã 20. Õâîñòîâàÿ ðåêóðñèÿ ïîñëå îïòèìèçàöèè
Разбивка длинных цепочек зависимостей for(i=0; i<n; i++)
Если индуктивный цикл предвычислить не удалось, необ- result *= n;
ходимо по крайней мере ослабить зависимость между ите-
рациями, чтобы они могли исполняться параллельно. Рас- Компиляторы msvc и gcc всегда разворачивают хвосто-
смотрим следующий код: вую рекурсию в цикл, а вот icl этого делать не умеет.
Итого:
Ëèñòèíã 17. Èíäóêòèâíûé öèêë äî îïòèìèçàöèè ! msvc – устраняет хвостовую рекурсию.
for(i=0;i<XXL;i++) ! icl – не устраняет хвостовую рекурсию.
{
x += 2;
! gcc – устраняет хвостовую рекурсию.
a[i] = x;
} Объединение циклов
Несколько циклов с одинаковым заголовком могут быть
Выражение (a[i]=x) не может быть выполнено до тех пор, объединены в один, что сокращает накладные расходы на
пока не будет вычислено (x+=2), а оно в свою очередь дол- его организацию. Эта методика имеет множество назва-
жно дожидаться завершения предыдущей итерации. Индук- ний – loops fusion, merge loops, jam loops, создающих боль-
ция однако! От нее можно избавится, вычисляя значение шую путаницу и вводящих программистов в заблуждение.
n-ой итерации на «лету»: В действительности же это не три различные стратегии оп-
тимизации, а всего одна, но какая! Продемонстрируем ее
Ëèñòèíã 18. Èíäóêòèâíûé öèêë ïîñëå îïòèìèçàöèè на следующем примере:
for(i=0;i<XXL;i++)
{ Ëèñòèíã 21. Öèêëû äî îáúåäèíåíèÿ (íåîïòèìèçèðîâàííûé
a[i] = i*2 + x; âàðèàíò)
}
for(i=0; i<XXL; i++)
a[i] = b[i] + 1;
Расплатой за отказ от индукции становится появление
«лишней» инструкции умножения, однако накладные рас- for(j=0; j<XXL; j++)
d[j] = ó[j] -1;
ходы на ее выполнение с лихвой окупаются конвейериза-
цией (а при желании и векторизацией!) цикла. Такая техни- Поскольку заголовки обоих циклов абсолютно идентич-
ка оптимизации называется «разбивка длинных цепочек ны, нам достаточно лишь «коллективизировать» их содер-
зависимостей» (breaks long dependency chains) и реализо- жимое:
вана только в gcc, начиная с версии 4.0 (за это отвечает
ключ -fsplit-ivs-in-unroller), а все остальные рассматривае- Ëèñòèíã 22. Öèêëû ïîñëå îáúåäèíåíèÿ (îïòèìèçèðîâàííûé
âàðèàíò)
мые компиляторы на это, увы, не способны.
Итого: for(i = 0; i < XXL; i++)
{
! msvc – не разбивает длинные цепочки зависимостей. a[i] = b[i] + 1;
! icl – не разбивает длинные цепочки зависимостей. }
d[j] = ó[j] -1;
! gcc – разбивает длинные цепочки зависимостей.
А вот более сложный пример:
Устранение хвостовой рекурсии
Хвостовой рекурсией (tail recursion) называется такой тип Ëèñòèíã 23. Êàíäèäàò íà îïòèìèçàöèþ ïóòåì îáúåäèíåíèÿ
рекурсии, при котором вызов рекурсивной функции следу- for(i=0; i<XXL; i++)
ет непосредственно за оператором return. a[i] = b[i] + 1;
for(j=0; j<XXL-1; j++)
Классическим примером может служить алгоритм вы- d[j] = ó[j] -1;
числения факториала:
Непосредственно объединить циклы невозможно, по-
Ëèñòèíã 19. Õâîñòîâàÿ ðåêóðñèÿ äî îïòèìèçàöèè скольку цикл j на одну итерацию короче. Чтобы уравнять
int fact(int n, int result) оба заголовка в правах, предварительно необходимо «со-
{ драть» (см. «loop peeling» фирменного руководства) с цик-
if(n == 0)
{ ла i одну итерацию:

82
программирование
Ëèñòèíã 24. Îïòèìèçèðîâàííûé âàðèàíò и если они к этому времени уже заняты ячейками осталь-
for(i = 0; i < XXL; i++)
ных потоков, происходит их неизбежное вытеснение из
{ кэша, многократно снижающее производительность.
a[i] = b[i] + 1; Рассмотрим следующий пример:
d[i] = ó[i] -1;
} a[i] = b[i] + 1; Ëèñòèíã 27. Íåîïòèìèçèðîâàííûé âàðèàíò
Документация на компилятор icl утверждает: объедине- for(j = 0; j < n; j++)
ние циклов как будто бы поддерживается (см. главу «loop {
c[j] = 0;
transformation» фирменного руководства), однако дизассем- for(i = 0; i<m; i++)
блирование показывает, что это не так. Остальные компи- a[j][i] = a[j][i] + b[j][i] * c[j];
}
ляторы объединение циклов также не выполняют.
Итого: Чтобы сократить количество потоков данных, следует
! msvc – не объединяет циклы. вынести выражение (c[j] = 0) в отдельный цикл, переписав
! icl – не объединяет циклы. код так:
! gcc – не объединяет циклы.
Ëèñòèíã 28. Îïòèìèçèðîâàííûé âàðèàíò
Разматывание циклов for(j = 0; j < n; j++)
Разматывание циклов (loop spreading) представляет собой c[j] = 0;
разновидность шелушения, при котором «содранные» ите- for(i=0; i<m; i++)
рации упаковываются в самостоятельный цикл, что бывает for(j = 0; j < n; j++)
a[j][i] = a[j][i] + b[j][i] * c[j];
полезным, например, при объединении двух циклов с «раз-
нополыми» заголовками. Компилятор icl именно так и поступает, снимая это бре-
Рассмотрим следующий код: мя с плеч программиста.
Остальные рассматриваемые компиляторы этой способ-
Ëèñòèíã 25. Äâà öèêëà ñ ðàçëè÷íûì êîëè÷åñòâîì èòåðàöèé ностью, увы, не обладают.
(íåîïòèìèçèðîâàííûé âàðèàíò)
Итого:
for(i=0; i<n; i++;)
a[i] = a[i] + c;
! msvc – не расщепляет циклы.
! icl – расщепляет циклы.
for(j=0; j<m; j++;)
s[j] = s[j] + s[j+1];
! gcc – не расщепляет циклы.

Если n не равно m, полное объединение циклов i и j уже Нормализация циклов


невозможно, но min(n,m) итераций мы все же можем объе- Нормализованным называется цикл, начинающийся с нуля,
динить: и в каждой итерации увеличивающий свое значение на еди-
ницу, а приведение произвольного цикла к указанной фор-
Ëèñòèíã 26. ×àñòè÷íîå îáúåäèíåíèå öèêëîâ ïóòåì ме называется его нормализацией (loop normalization). При-
«ðàçìàòûâàíèÿ» (îïòèìèçèðîâàííûé âàðèàíò)
нято считать, что на большинстве архитектур нормализо-
for(i=0; i<min(n,m); i++;) ванный цикл компилируется в более компактный и быстро-
{
a[i] = a[i] + c; действующий код, однако в отношении x86-процессоров это
s[i] = s[i] + s[i+1]; совсем не так, и более компактным оказывается цикл, стре-
}
мящийся к нулю (см. раздел «Стремление циклов к нулю»).
for(i = min(n,m); i<max(n,m); i++;) Тем не менее нормализация бывает полезной, например,
s[i] = s[i] + s[i+1];
при объединении двух циклов с различными заголовками.
Ни msvc, ни icl, ни gcc способностью к «разматыванию» Если эти циклы предварительно нормализовать, тогда они
циклов не обладают, однако это умеют делать, например, будут отличаться друг от друга всего лишь числом итера-
компиляторы от Hewlett-Packard. ций, а как объединять циклы с несовпадающим количеством
Итого: итераций, мы уже знаем (см. раздел «Разматывание цик-
! msvc – не разматывает циклы. лов»).
! icl – не разматывает циклы. Возьмем произвольный цикл:
! gcc – не разматывает циклы.
Ëèñòèíã 29. Íåíîðìàëèçîâàííûé öèêë
Расщепление циклов for (i = lower; i < upper; i+=(-incre))
Расщепление циклов (loop distribution, loop fission, loop {
// òåëî öèêëà
splitting…) прямо противоположно их объединению. К тако- }
му трюку прибегают в тех случаях, когда оптимизируемый
цикл содержит слишком много данных. Ассоциативность В общем случае стратегия нормализации выглядит так:
кэш-памяти первого уровня у большинства x86-процессо-
ров равна четырем, реже – восьми, а это значит, что каж- Ëèñòèíã 30. Íîðìàëèçîâàííûé öèêë
дая обрабатываемая ячейка данных может претендовать for (NCL = 0; i < (upper - lower + incre)/incre - 1; 1)
лишь на одну из четырех (восьми) возможных кэш-линеек {

¹4, àïðåëü 2005 83


программирование
i = incre*NLC + lower; оставляя цикл немасштабированным даже тогда, когда это
// òåëî öèêëà ему явно не помешало бы.
}
i = incre * _max((upper - lower + incre)/incre, 0) + lower; Итого:
! msvc – масштабирует некоторые циклы.
Легко показать, что нормализация дает выигрыш толь- ! icl – масштабирует некоторые циклы.
ко на циклах с заранее известным количеством итераций, ! gcс – масштабирует некоторые циклы.
позволяющих вычислить значение выражения (upper lower +
incre)/incre еще на стадии компиляции. Замена циклов с предусловием
Все три рассматриваемых компилятора поддерживают на циклы с постусловием
нормализацию циклов (см. раздел «loop normalization» в до- Циклы с предусловием (for, while) содержат по меньшей
кументации на icl и описание ключа -fivcanon компилятора мере на одно ветвление больше, чем аналогичные им цик-
gcc), но не всегда ею пользуются. лы с постусловием. Как нетрудно сообразить – в конце цик-
Рассмотрим следующий пример: ла с предусловием находится безусловный переход, воз-
вращающий управление в начало, а в цикле с постуслови-
Ëèñòèíã 31. Íåíîðìàëèçîâàííûé öèêë ем передача управления по «совместительству» еще вы-
int i, x[10]; полняет и проверку условия.
for(i=1; i<10; i++) Все три рассматриваемых компилятора всегда заменя-
x[i]=i-1;
ют циклы с предусловием на циклы с постусловием, когда
Очевидно, что его можно нормализовать, избавляясь от это выгодно.
операции вычитания в выражении (i-1): Итого:
! msvc – заменяет циклы с предусловием на циклы с по-
Ëèñòèíã 32. Íîðìàëèçîâàííûé öèêë стусловием.
int i, x[10]; int *p; p = &x[1]; ! icl – заменяет циклы с предусловием на циклы с постус-
for(i=0; i<9; i++) ловием.
p[i]=i;
! gcc – заменяет циклы с предусловием на циклы с по-
Поразительно, но ни один из трех рассматриваемых стусловием.
компиляторов этого не делает, поэтому все они получают
незачет. Стремление циклов к нулю
Итого: На большинстве процессорных архитектур инструкция дек-
! msvc – нормализует некоторые циклы. ремента (уменьшения регистра на единицу) автоматичес-
! icl – нормализует некоторые циклы. ки взводит специальный флаг при достижении нуля, поэто-
! gcc – нормализует некоторые циклы. му, цикл, стремящийся к нулю (incrementing by zero, хотя
правильнее было назвать его decrementing by zero), намно-
Масштабирование циклов го выгоден как с точки зрения компактности, так и с точки
Масштабированием (scaling) в общем случае называется зрения быстродействия. Операция инкремента при дости-
умножение индекса массива на некоторое, как правило, жении нужного нам значения (n) никаких флагов, конечно,
целочисленное значение, например, x = a[4*i]. Идея масш- не возводит, поэтому приходится тратить процессорное вре-
табирования циклов заключается в выносе множителя в ин- мя на операцию сравнения.
дуктивный инкремент счетчика цикла. Рассмотрим следующий код:
Допустим, исходный цикл выглядел так:
Ëèñòèíã 35. Íåîïòèìèçèðîâàííûé âàðèàíò
Ëèñòèíã 33. Èñõîäíûé öèêë (íåîïòèìèçèðîâàííûé âàðèàíò)
for(i=0; i<n; i++) printf("hello!\n");
for(i=0; i < XXL; i++)
a[4*i]= b[i]; Поскольку никаких обращений к счетчику цикла здесь
нет, его можно развернуть в обратном направлении. Это
После масштабирования он приобретает следующий легко. А вот пример посложнее:
вид:
Ëèñòèíã 36. Íåîïòèìèçèðîâàííûé âàðèàíò
Ëèñòèíã 34. Öèêë ïîñëå ìàñøòàáèðîâàíèÿ (îïòèìèçèðîâàííûé
âàðèàíò) for(i=0;i<n; i++) sum+=a[i];

for(i=0; i < 2*XXL; i+=2) В этом случае за трансформацию цикла приходится рас-
a[i]= *b++;
плачиваться усложнением его тела, однако несмотря на это
В времена XT/AT такая оптимизация еще имела смысл, скорость выполнения все равно возрастает:
но начиная с 80386, в процессорах появилась аппаратная
поддержка масштабирования на 2х, 4х, 8х и с некоторыми Ëèñòèíã 37. Îïòèìèçèðîâàííûé âàðèàíò
ограничениями на 3х, 5х и 9х, поэтому масштабировать та- i=n; do
кие циклы уже не нужно. {
sum+=*a;
Масштабирование поддерживают все три рассматрива- a++;
емых компилятора, но пользуются им довольно неумело, } while(--i);

84
программирование
Компилятор msvc всегда стремится генерировать цик- promotion, loop interchange или loop unswitching, но на PC
лы, стремящиеся к нулю, icl этого не делает вообще, а gcc она впервые появилась только в последней версии компи-
прибегает к трансформации циклов только в некоторых наи- лятора gcc. Этим заведует ключ -funswitch-loops (задейство-
более очевидных случаях. В частности, он избегает трогать вать вынос инвариантных ветвлений), max-unswitch-insns
циклы, содержащие ссылки на память. (максимальное количество инструкций, которое может
Итого: иметь «расщепляемый» цикл) и max-unswitch-level (макси-
! msvc – всегда устремляет циклы к нулю. мальное количество инвариантных ветвлений, которые мо-
! icl – никогда не устремляет циклы к нулю. жет иметь «расщепляемый цикл»).
! gcc – устремляет некоторые циклы к нулю. Приверженцы остальных компиляторов пока вынужде-
ны выносить инварианты самостоятельно.
Отказ от branch-count-reg Итого:
Многие микропроцессоры имеют специальную команду: ! msvc – не выносит инвариантные ветвления.
«уменьши-регистр-на-единицу-и-ветвись-если-нуль» (branch- ! icl – не выносит инвариантные ветвления.
count-reg). На x86-процессорах этим занимается LOOP, ча- ! gcc – выносит инвариантные ветвления, начиная с вер-
сто встречающаяся в ассемблерных вставках начинающих сии 3.4.3.
программистов, но практически никогда в коде, сгенериро-
ванном компилятором. И вовсе не потому, что компилятор Ротация ветвлений
«тупой», а потому, что эта инструкция медленная, хотя и Бесконечные циклы с выходом по break могут быть преоб-
компактная. разованы в конечные циклы с постусловием. При этом тело
Компиляторы msvc и icl никогда ее не используют, а gcc цикла как бы прокручивается, чтобы оператор break пере-
предоставляет специальный ключ -fbranch-count-reg, пред- местился на место while(1), а сам while(1) сомкнулся с опе-
писывающий выбирать LOOP вместо DEC reg/JNZ begin_loop, ратором do и «коллапсировал».
(см. раздел «Стремление циклов к нулю»), правда, до ма- Продемонстрируем это на следующем примере:
шинного она все равно не доживает и уничтожается опти-
мизатором. Ëèñòèíã 40. Íåîïòèìèçèðîâàííûé âàðèàíò
Итого: do
! msvc – не использует branch-count-reg. {
printf("1é îïåðàòîð öèêëà\n");
! icl – не использует branch-count-reg. if (--a<0) break;
! gcc – не использует branch-count-reg. printf("2é îïåðàòîð öèêëà\n");
} while(1);

Вынос инвариантных ветвлений После ротации ветвлений наш код будет выглядеть так:
Ветвления, инвариантные по отношению к циклу, могут
быть вынесены за его пределы путем расщепления одного Ëèñòèíã 41. Îïòèìèçèðîâàííûé âàðèàíò
цикла на два или более. Размеры кода при этом возраста- // äóáëèðóåì îïåðàòîðû öèêëà, ðàñïîëîæåííûå äî break
ют, но и производительность увеличивается (конечно, при printf("1-é îïåðàòîð öèêëà\n");
a--;
условии, что цикл влезает в кэш).
Покажем это на следующем примере: // à äîëæåí ëè âîîáùå âûïîëíÿòüñÿ îñòàòîê öèêëà?
if (a>=0)
{
Ëèñòèíã 38. Öèêë ñ èíâàðèàíòíûì âåòâëåíèåì a++;
(íåîïòèìèçèðîâàííûé âàðèàíò) do
{
for (i = 0; i < n; i++) // ïîñëå òðàíñôîðìàöèè âòîðîé îïåðàòîð
{ // ñòàë ïåðâûì
for (j = 0; j < n; j++) printf("2-é îïåðàòîð\n");
{
if (flag < 0x669) a[i][j]=i+j; else a[i][j]=0; // …à ïåðâûé îïåðàòîð — âòîðûì
} printf("1-é îïåðàòîð öèêëà\n");
} } while(–-a<0); // ñþäà ïîïàëî óñëîâèå èç if - break
}

Поскольку ветвление if (n < 0x669) инвариантно по от- Из всех трех рассматриваемых компиляторов удалять
ношению к циклу j, мы от него избавляемся: лишние ветвления умеет лишь один msvc.
Итого:
Ëèñòèíã 39. Îïòèìèçèðîâàííûé âàðèàíò ! msvc – выполняет ротацию ветвлений.
if (flag < 0x669) ! icl – не выполняет ротацию ветвлений.
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
! gcc – не выполняет ротацию ветвлений.
a[i][j]=i+j;
else
for (i = 0; i < n; i++)
Упорядочение обращений к памяти
for (j = 0; j < n; j++) При обращении к одной-единственной ячейке памяти в кэш
a[i][j]=0; первого уровня загружается целая строка, длина которой в
зависимости от типа процессора варьируется от 32 до 128
На суперкомпьютерных компиляторах такая техника оп- или даже 256 байт, поэтому большие массивы выгоднее
тимизации используется уже давно и называется loop всего обрабатывать по строкам, а не по столбцам. К сожа-

¹4, àïðåëü 2005 85


программирование
лению, многие программисты об этом забывают и отдувать- Ëèñòèíã 45. Îïòèìèçèðîâàííûé âàðèàíò ñ ðàçâîðîòîì íà 4
ся приходится компилятору: èòåðàöèè (îáðàòèòå âíèìàíèå, êàêîé öèêë áûë ðàçâåðíóò!)

for(i=0; i<n; i+=4)


Ëèñòèíã 42. Îáðàáîòêà ìàññèâîâ ïî ñòîëáöàì {
(íåîïòèìèçèðîâàííûé âàðèàíò) for (j=0; j<n; j++)
{
for(j=0;j<m;j++) for (k=0; k<n; k++)
for(i=0;i<n;i++) {
a[i][j] = b[i][j] + c[i][j]; a[j][i] = a[j][i] + b[k][i] * c[j][k];
a[j][i+1] = a[j][i+1] + b[k][i+1] * c[j][k];
a[j][i+2] = a[j][i+2] + b[k][i+2] * c[j][k];
Здесь три массива обрабатываются по столбцам, что a[j][i+3] = a[j][i+3] + b[k][i+3] * c[j][k];
крайне непроизводительно и для достижения наивысшей }
}
эффективности циклы i и j следует поменять местами. Ус- }
тоявшегося названия у данной методики оптимизации нет,
и в каждом источнике она называется по-разному: loop Оптимизатор скомбинировал сразу три методики: раз-
permutation/interchange/reversing, rearranging array dimensions ворот, объединение и переупорядочение циклов, благода-
и т. д. Как бы там ни было, результирующий код выглядит ря чему скорость выполнения значительно возросла. К со-
так: жалению, еще долгое время PC-программистам придется
оптимизировать свои программы самостоятельно, хотя
Ëèñòèíã 43. Îáðàáîòêà ìàññèâîâ ïî ñòîëáöàì стремительное совершенствование gcc дает робкую надеж-
(îïòèìèçèðîâàííûé âàðèàíò)
ду на изменение ситуации.
for(i=0;i<n;i++) Итого:
for(j=0;j<m;j++)
a[i][j] = b[i][j] + c[i][j]; ! msvc – частично упорядочивает обращения к памяти.
! icl – частично упорядочивает обращения к памяти.
Все три рассматриваемых компилятора поддерживают ! gcc – частично упорядочивает обращения к памяти.
данную стратегию оптимизации, однако их интеллектуаль-
ные способности очень ограничены и со следующим при- Заключение
мером не справился ни один. Прогресс не стоит на месте, и со времени появления msvc
компиляторы сделали большой шаг вперед. Особенно по-
Ëèñòèíã 44. Ñëîæíûé ñëó÷àé îáðàáîòêè äàííûõ ïî ñòîëáöàì радовал gcc 4.0.0 с его новым оптимизатором циклов, ко-
for (i=0; i<n; i++) торый намного превосходит icl и msvc вместе взятые. Тем
for (j=0; j<n; j++) не менее до совершенства ему еще далеко. Некоторые тех-
for (k=0; k<n; k++)
a[j][i] = a[j][i] + b[k][i] * c[j][k]; ники, присутствующие еще в msvc, в нем не реализованы
(например, ротация ветвлений), не говоря уже про «серь-
А вот компиляторы от Hewlett-Packard оптимизируют езные» компиляторы от Hewlett-Packard. Так что на компи-
этот цикл так (хвост цикла для простоты не показан): лятор надейся, а сам не плошай!
Òàáëèöà1. Ñâîáîäíàÿ òàáëèöà êà÷åñòâà îïòèìèçàöèè

86
bugtraq

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


в Oracle Reports Server в Kerio Personal Firewall
Программа: Oracle Reports Server 10g (9.0.4.3.3). Программа: Kerio Personal Firewall 4.1.2 и более ранние вер-
Опасность: Низкая. сии.
Описание: Уязвимость позволяет удаленному пользовате- Опасность: Низкая.
лю произвести XSS-нападение и получить доступ к потен- Описание: Уязвимость существует из-за ошибки, которая
циально важным данным других пользователей. позволяет злонамеренному процессу выдать себя за раз-
Уязвимость существует из-за некорректной фильтрации решенное приложение. Удачная эксплуатация уязвимости
входных данных в демонстрационном сценарии test.jsp. Уда- позволит злонамеренному процессу или локальному
ленный пользователь может с помощью специально сфор- пользователю обойти правила ограничения межсетевого
мированного URL выполнить произвольный HTML-сценарий экрана и получить доступ к Интернету.
в браузере жертвы. Пример: URL производителя: www.kerio.com.
Решение: Установите обновления от производителя.
http://[target]/reports/examples/Tools/test.jsp? ↵
repprod&desname='&lt;script&gt; ↵
alert(document.cookie);&lt;/script&gt;
http: //[target]/reports/examples/Tools/test.jsp? ↵
Переполнение буфера при обработке
repprod"&lt;script;&gt;alert(document.cookie); ↵ MIME-вложений в Sylpheed
&lt;/script&gt; Программа: Sylpheed 0.8.0 – 1.0.3.
URL производителя: http://www.oracle.com. Опасность: Высокая.
Решение: Способов устранения уязвимости не существу- Описание: Уязвимость существует при обработке вложе-
ет в настоящее время. ния с зашифрованным в MIME-формате именем файла в
e-mail-сообщении. Удаленный пользователь может создать
Отказ в обслуживании специальным образом e-mail-сообщение и выполнить про-
в продуктах Symantec извольный код на целевой системе с привилегиями пользо-
Программа: Symantec Norton System Works, Symantec вателя, запустившего Sylpheed.
Norton Internet Security, Symantec Norton AntiVirus версии URL производителя: sylpheed.good-day.net.
2004, 2005. Решение: Установите последнюю версию 1.0.4 от произ-
Опасность: Средняя. водителя.
Описание: Уязвимость существует в модуле AutoProtect.
Злоумышленник может специальным образом создать или Отказ в обслуживании при обработке
изменить файл и вызвать отказ в обслуживании системы. SACK-опций в OpenBSD
Злоумышленник может потребить все возможные ресур- Программа: OpenBSD 3.5, 3.6.
сы системы при включенной опции SmartScan. Программ- Опасность: Высокая.
ное обеспечение некорректно обрабатывает переименова- Описание: Уязвимость существует в файлах tcp_input.c и
ние файлов. tcp_usrreq.c. Удаленный пользователь может послать сис-
URL производителя: www.symantec.com. теме специально сформированные TCP-пакеты, содержа-
Решение: Установите обновления от производителя. щие некорректные SACK-опции, что приведет к ошибке в
TCP-стеке. Атакующий может вызвать отказ в обслужива-
Удаленное переполнение буфера нии системы.
в telnet-клиенте на различных URL производителя: www.openbsd.org.
платформах Решение: Установите патчи от производителя.
Программа: telnet-клиент на многих UNIX-системах.
Опасность: Средняя. Переполнение буфера
Описание: Уязвимость обнаружена в функции slc_add_ в Microsoft Jet database
reply(). Злонамеренный telnet-сервер может послать клиен- Программа: Microsoft Jet database msjet40.dll версия биб-
ту большое количество специально сформированных LINE- лиотеки 4.00.8618.0.
MODE Set Local Character (SLC)-команд и вызвать перепол- Опасность: Высокая.
нение буфера. Пример: Описание: Уязвимость существует из-за недостаточной об-
perl -e 'print "\377", "\372\42\3\377\377\3\3" x 43, ↵ работки входных данных при обработке имен файлов баз
"\377\360"' | nc -l 23 данных в компоненте msjet40.dll. Удаленный пользователь
Уязвимость в функции env_opt_add() при обработке может создать специальным образом .mdb-файл, который
escape-символов может позволить злонамеренному серве- при открытии его целевым пользователем выполнить про-
ру вызвать переполнение буфера. Удаленный злонамерен- извольный код на системе.
ный сервер может выполнить произвольный код на систе- URL производителя: www.microsoft.com.
ме клиента с привилегиями пользователя, запустившего Решение: Способов устранения уязвимости не существу-
telnet-приложение. Большинство клиентов на BSD-системах ет в настоящее время.
уязвимы.
Решение: Установите обновления от производителя. Составил Александр Антипов

¹4, àïðåëü 2005 87


образование

СЕРВЕР ДЛЯ ШКОЛ


СЕРГЕЙ ЯРЕМЧУК
Сегодня как никогда велик интерес к использованию сво- дням, но и по занятиям и конкретным темам. По резуль-
бодного ПО в учебных заведениях. Если к применению GNU/ татам можно вывести разнообразные отчеты, включа-
Linux, как признанного флагмана движения Open Source, ющие в том числе и информацию по различным груп-
на настольных системах предстоит еще пройти долгий путь, пам, получить сведения о студентах, хорошо посещаю-
то на серверах положение не так плачевно. Энтузиасты уже щих занятия, или наоборот, вывести список заядлых
давно используют преимущества свободного ПО, остается прогульщиков.
только подобрать необходимые приложения, чтобы решить ! Discipline – простой дисциплинарный модуль, поможет
возникшие задачи. контролировать дисциплину учащихся. Записи можно
OpenAdministrationforSchools – OpenAdmin (http://rich- вводить без ограничения объема, при потребности уда-
tech.ca/openadmin/index.html) представляет собой свободный лять, плюс для удобства учета можно создать до шести
Open Source-проект, предназначенный для решения задач категорий нарушений. Как результат можно вывести все
по автоматизации учета, сбора и вывода информации, адап- проделки, совершенные отдельными учащимися, в шко-
тированный для применения в школах и других, в том чис- ле в целом, статистику в течение определенного перио-
ле и высших учебных заведениях. Вся собранная инфор- да, что позволит выявить специфические виды проблем.
мация сохраняется в базе данных, доступ к которой осуще- ! Gradebook – функция, доступная только с сайта препо-
ствляется при помощи веб-сервера, поэтому OpenAdmin не давателей и позволяет выставлять оценки по предметам
диктует особых требований к клиентскому ПО. Во избежа- и тестам. Кроме ведения общей статистики, автомати-
ние проблем с безопасностью для выдачи информации раз- чески вычисляется средний бал успеваемости, который
личным группам пользователей используются раздельные затем может быть выведен на родительском сайте.
виртуальные веб-узлы. Так, каждая школа имеет по умолча- ! Report Card System – гибкая система генерации отчетов
нию три веб-узла. Все они защищены паролем. Кроме того, с выводом до 20 сообщений в теме при неограниченном
учителя используют индивидуальный пароль на препода- количестве тем, кроме web может выводиться в файл
вательском сайте, а устанавливаемые для удобства рабо- формата PDF, что очень удобно при распечатывании.
ты cookies имеют короткий период действия по умолчанию. ! Parent Viewing – скрипты, позволяющие родителям про-
Для доступа к данным на родительском и студенческом сматривать результаты успеваемости, посещаемости и
сайтах также используются индивидуальные логин и пароль. поведение своих чад.
Отдельный виртуальный сайт может использоваться для
вывода информации третьим лицам, что позволяет избежать Кроме того, имеются специальные модули экспорта/им-
делегирования прав. При этом если преподаватели ведут порта, позволяющие легко переносить данные учащихся, на-
отдельные курсы со своими программами, для их учета ис- пример при их переходе в другую школу. Вполне естествен-
пользуется отдельный сайт (iep). В дальнейшем планиру- но, что никто не запрещает добавить или, наоборот, удалить
ется полная поддержка https, но пока этим заниматься при- лишние компоненты и записи, изменить значение и положе-
дется самому. Распространяется OpenAdmin по лицензии ние полей, создать дополнительные отчеты и прочее.
GNU GPL.
Единственное обстоятельство,затрудняющее примене- Установка сервера OpenAdmin
ние OpenAdmin в наших условиях, состоит в том, что ин- Сервер OpenAdmin полностью построен на основе свобод-
терфейс системы сугубо английский, хотя с учетом того, ных компонентов. Все применяемые скрипты написаны на
что все данные хранятся в обычных текстовых файлах, пе- Perl, для хранения информации используется база данных
ревод можно проделать самостоятельно по мере ввода сер- MySQL. В качестве веб-сервера может быть использован
вера в эксплуатацию. По сравнению с трудоемкостью за- любой продукт, поддерживающий виртуальные узлы. Раз-
полнения самой базы и оптимизацией количества действи- работчиками рекомендуется Apache. Кроме этого, необхо-
тельно необходимых записей это будет не так уж тяжело. димо наличие LibXML2 (http://www.xmlsoft.org), OpenSSL
Итак, в настоящее время OpenAdmin позволяет хранить (http://www.openssl.org), TeX и нескольких модулей Perl. В
и выводить по запросу следующую информацию: большинстве дистрибутивов GNU/Linux все эти компонен-
! Student Demographics – все необходимые сведения об ты, как правило, уже имеются. Если же в качестве сервера
учащихся, причем можно занести не только стандарт- используется Windows, то придется позаботиться об их ин-
ные паспортные, контактные данные и сведения о ро- сталляции.
дителях, но и при необходимости этническую, религи- Перед тем как начать установку – общая информация о
озную, медицинскую и другую информацию, а также структуре веб-сервера. Каждая школа по умолчанию име-
организовать поиск, отбор, предварительный анализ и ет три отдельных веб-узла. Один предназначен для общего
вывод фактически по каждому пункту. управления содержанием, т.е. администрирования, второй
! Attendance System – сюда заносятся данные о посещае- предназначен для преподавателей и третий – для учащих-
мости, а точнее отсутствии учащихся на занятиях. По- ся и их родителей. Все эти сайты находятся в архиве ката-
зволяет отследить посещаемость ученика не только по лога school в соответствующих папках. Скрипты и сайт ад-

88
образование
министрирования – в admin и cgi, преподавательский сайт – ет, и устанавливаем его владельцем вновь созданных ка-
в tadmin и tcgi, родительский – в padmin и pcgi. При этом на талогов:
одном веб-сервере можно одновременно разместить сай-
ты нескольких школ, настройки этих серверов находятся в # chown -R apache:apache /schools
разных каталогах со структурой, описанной выше. Два сай-
та sis (Student Information System) и iep предназначены для А для каталогов cgi устанавливаем права доступа в 755:
специального (централизованного) доступа ко всем инфор-
мационным ресурсам. Так как все эти сайты находятся на # chmod 755 /schools/4school/cgi
одном сервере, то необходимо обеспечить разрешение
имен, прописав все узлы в файле /etc/hosts (что безопас- При необходимости можно установить логотип учебно-
нее) или в настройках DNS-сервера. го заведения, заменив файл logo.gif и logotn.gif в подката-
Чтобы меньше путаться в настройках, разработчики ре- логе admin/images. Теперь можно приступить к созданию
комендуют создать для школьных сайтов отдельный ката- необходимой базы данных.
лог, в котором и разместить всю вышеописанную иерархию.
# mysql -u root myschool -p
# mkdir /schools Enter password:
# cd /schools Welcome to the MySQL monitor. Commands end with ; or \g.
# cp /tmp/openadmin-1.70.tar.gz Your MySQL connection id is 11 to server version: 3.23.58
# tar xvzf openadmin-1.70.tar.gz
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

Для того чтобы в дальнейшем была возможность рас- Назначаем необходимые привилегии, чтобы не работать
ширять сервер, добавляя новые учебные заведения, созда- от имени администратора.
дим для школы отдельную папку, в которую скопируем шаб-
mysql> grant all on myschool.* to school@localhost identifiedby 'schoolpasswd';
лоны с сайтами. Query OK, 0 rows affected (0.01 sec)
mysql> quit
# mkdir 4school И при помощи файла blank.sql, содержащего необходи-
# cp -r /schools/school /schools/4schoo
мые команды, создаем таблицы в нашей базе данных.
Смотрим в файле веб-сервера Apache httpd.conf в стро-
ках User и Group, от имени какого пользователя он работа- # mysql -p -u school myschool < /schools/utility/blank.sql

¹4, àïðåëü 2005 89


образование
Если будет использована SIS, то в целях безопасности AuthUserFile /usr/local/apache/private/admin4school
необходимо создать отдельного пользователя, обладающе- Options +Includes
<Limit GET POST>
го правами только на выборку данных из таблиц школ require valid-user
(select). Специальный ресурс iep имеет свою структуру таб- </Limit>
</Directory>
лиц базы данных, для создания которых используются фай- <Directory ”/schools/4school/cgi”>
лы iepdata.sql и iepstruct.sql. Authtype Basic
Authname Admin
Теперь об Apache. В конце файла httpd.conf имеется сек- AuthUserFile /usr/local/apache/private/admin4school
ция «Virtual Hosts», в которой даны примеры и краткие ком- <Limit GET POST>
require valid-user
ментарии по настройке виртуальных веб-узлов. Фактически </Limit>
для минимальной настройки необходимо будет создать три </Directory>
</VirtualHost>
одинаковых секции, отличающиеся параметрами Document
Root, ServerName и ScriptAlias. Для учительского и админи- ### Ó÷èòåëüñêèé ñàéò
<VirtualHost schools>
страторского сайта, кроме того, создаются разделы, огра- ServerAdmin grinder@ua.fm
ничивающие доступ. DocumentRoot /schools/4school/tadmin
ServerName teacher.schools.com
ErrorLog logs/schools.error_log
### Ïðîâåðüòå íàëè÷èå ýòèõ ñòðîê CustomLog logs/schools.access_log common
AddTypetext/html .shtml ScriptAlias /cgi-bin "/schools/4school/tcgi"
AddHandler server-parsed .shtml </VirtualHost>

### Section 3: Virtual Hosts ### Îãðàíè÷èâàåì äîñòóï


<Directory ”/schools/4school/tadmin”>
NameVirtualHost schools Authtype Basic
### Àäìèíèñòðàòîðñêèé ñàéò Authname teacher
<VirtualHost schools> AuthUserFile /usr/local/apache/private/teacher4school
ServerAdmin grinder@ua.fm Options +Includes
DocumentRoot /schools/4school/admin <Limit GET POST>
ServerName admin.schools.com require valid-user
ErrorLog logs/schools.error_log </Limit>
CustomLog logs/schools.access_log common </Directory>
ScriptAlias /cgi-bin "/schools/4school/cgi" <Directory ”/schools/4school/tcgi”>
</VirtualHost> Authtype Basic
Authname Admin
### Îãðàíè÷èâàåì äîñòóï AuthUserFile /usr/local/apache/private/admin4school
<Directory ”/schools/4school/admin”> <Limit GET POST>
Authtype Basic require valid-user
Authname Admin </Limit>

90
образование
</Directory> тельном подходе к чтению на данном этапе все три серве-
</VirtualHost> ра должны работать. Единственная проблема, с которой вы
### Ðîäèòåëüñêî-ñòóäåí÷åñêèé ñàéò
<VirtualHost schools> можете столкнуться, – это занесение в базу данных боль-
ServerAdmin grinder@ua.fm ших объемов информации. Регистрация одного-двух десят-
DocumentRoot /schools/4school/padmin
ServerName parent.schools.com ков учеников – терпима, но если их число превышает не-
ErrorLog logs/schools.error_log сколько сотен, то этот процесс превратится в настоящий
CustomLog logs/schools.access_log common
ScriptAlias /cgi-bin "/schools/4school/pcgi" кошмар. Для удобства рекомендуется воспользоваться
</VirtualHost> скриптом studentupload.pl, который находится в подкатало-
Теперь проверяем правильность новых настроек. ге utility. Этот скрипт считывает файл в формате CSV
(Comma Separated Values) и заносит все сведения в базу
# apachectl configtest данных. По умолчанию сценарий считывает 40 параметров
Syntax OK и перед началом использования его необходимо подправить
Создаем пароли для каждого пользователя. под свои требования. При работе скрипт не обновляет файл
cgi/entry/studentnumber, в котором хранятся номера следую-
# htpasswd /usr/local/apache/private/teacher4school physicist щей записи, поэтому, чтобы не получились записи с одина-
ковыми порядковыми номерами, цифру в нем необходимо
Перезапускаем веб-сервер. подправить самому. Если все же это произошло, то в реше-
нии проблемы могут помочь скрипты dupcheck.pl и sentry2.pl.
# /etc/init.d/httpd restart Несмотря на то что OpenAdmin ориентирован в первую
Останавливается httpd: [ ОК ] очередь на применение в учебных заведениях, его нара-
Запускается httpd: [ ОК ]
ботки вполне можно использовать и в своих проектах, свя-
И наконец, последний этап. В подкаталогах cgi и tcgi име- занных с учетом большого количества персонала. Напри-
ются файлы admin.conf, в которых необходимо изменить па- мер, в библиотеках, дополнительно создав отдельную таб-
раметры для доступа к базе данных, расположение ката- лицу с книгами и используя поля оценок, контролировать
логов администраторского и учительского серверов, мес- для выданную литературу. Впрочем, вариантов много. По
тонахождение утилиты pdflatex и почтовый адрес админис- крайней мере, есть от чего оттолкнуться при возникнове-
тратора, который будет выводиться в случае ошибок. В нии такой задачи. Это довольно полезный инструмент, по-
дальнейшем для упрощения настроек планируется исполь- зволяющий избежать большого количества рутинной руч-
зовать один такой файл, расположенный в /etc. При внима- ной работы.

¹4, àïðåëü 2005 91


книжная полка
Профессиональное Антихакинг в сети.
руководство по SQL Трюки. 100
Server: хранимые профессиональных
процедуры, XML, примеров
HTML Эндрю Локхарт
Кен Хендерсон Издание является переводом
Книга рассчитана на програм- «Network security hacks» изда-
мистов и разработчиков, кото- тельства O'Reilly. В книге со-
рые имеют представление о держится описание 100 трю-
Transact-SQL и создании хра- ков, с помощью которых мож-
нимых процедур. Ни для кого но существенно повысить сте-
не секрет, что за счет грамот- пень защищенности вверен-
ного использования хранимых ной вам сети. Затронуты ос-
процедур происходит много- новные области безопасности:
кратное увеличение производительности приложения. Что защита узла UNIX, безопасность узла Windows, сетевая бе-
входит в число освещенных тем? Непосредственно храни- зопасность, протоколирование, наблюдение и выявление
мые процедуры, объекты (обработка ошибок, триггеры, пред- тенденций, защита каналов связи, обнаружение сетевого
ставления), технологии HTML, XML, .NET, которые, как пра- вторжения, восстановление и ответные действия. Достаточ-
вило, сопутствуют любой разработке, связанной с хранимы- но подробно рассказано про создание VPN-сети, рассмот-
ми процедурами. Особенно стоит отметить, что в книге рас- рены различные межсетевые экраны, система обнаружения
смотрены такие сложные темы, как отладка и профилирова- атак Snort, и множество других, не менее интересных тем.
ние, автоматизация. Отдельная глава посвящена недокумен- Книга, по сути, является сборником статей, выполненных в
тированным возможностям Transact-SQL. Достаточно инте- стиле mini-howto. Изложенный материал рассчитан на ши-
ресны размышления автора о производительности прило- рокий круг читателей, от новичков до системных админист-
жений. На прилагающемся диске вы найдете более 700 раз- раторов с солидным стажем. Издание прежде всего следует
личных SQL-сценариев, исходный код всех примеров из кни- порекомендовать всем без исключения администраторам
ги, а также различные утилиты для разработчиков. UNIX/Linux-систем.
Издательство «Питер», 2005 г. – 620 стр. ISBN 5-469-00046-X. Издательство «Питер», 2005 г. – 296 стр. ISBN 5-496-00385-x.

Информационная Основы построения


безопасность трансляторов.
предприятия Учебное пособие
Искандер Конеев Ю.Г. Карпов
Андрей Беляев Материал, изложенный в кни-
В наше время тема информа- ге, рассчитан прежде всего на
ционной безопасности акту- преподавателей технических
альна для всех, начиная с ма- вузов и студентов. Автор – ав-
леньких офисов, и заканчи- торитетнейший человек в
вая крупными компаниями с этой области – доктор техни-
множеством филиалов. Сре- ческих наук, профессор, член
ди рассмотренных тем: общие Американского Математичес-
понятия информационной бе- кого общества с 1975 г. В кни-
зопасности, классификация ге рассмотрены формальные
информационных систем, описаны типовые модели напа- модели грамматик и языков, методы синтаксического ана-
дения, методики оценки рисков. Отдельная часть книги по- лиза формальных языков. Подробно рассмотрен вопрос ге-
священа криптографии, в которой рассмотрена симметрич- нерации кода в современных компиляторах, сети Петри.
ная и асимметричная криптография, рассказано о различ- Особенно подробно рассмотрены такие темы, как поста-
ных криптографических протоколах. Подробно изложено о новка базовых проблем формальных языков, понимание ос-
методах защиты. В приложении вы можете найти примеры новных задач построения трансляторов. Отдельная глава
форматов различных административных документов. Пос- посвящена грамматике Хомского. После прочтения книги
ле прочтения читатель приобретет знания, необходимые для читатель получит знания, достаточные для проектирования
грамотного создания и обслуживания IT-инфраструктуры и разработки транслятора с собственного несложного язы-
предприятия. Книга хорошо систематизирована, излагае- ка. Нельзя не отметить большое количество примеров и
мый материал написан простым и доступным языком и бу- задач к каждой главе, которые помогают наилучшим обра-
дет полезным приобретением для системных и сетевых ад- зом усвоить прочитанный материал.
министраторов. Издательство «Питер», 2005 г. – 272 стр. ISBN 5-94157-285-9.
Издательство «Питер», 2005 г. – 752 стр. ISBN 5-94157-280-X.
Рубрику ведет
Александр Байрак

¹4, àïðåëü 2005 93


bugtraq

Отказ в обслуживании в PHP Раскрытие важной информации в Mozilla


в функции getimagesize() Программа: Mozilla 1.7.6 и более ранние версии, Mozilla
Программа: версии до 4.3.11 и 5.0.4. Firefox 1.0.2 и более ранние версии.
Опасность: Средняя. Опасность: Средняя.
Описание: Уязвимость обнаружена в функциях php_handle_ Описание: Уязвимость обнаружена при обработке Javascript
iff() и php_handle_jpeg(), доступных из функции getimage- «lambda-выражений» в функции find_replen() файла js/src/
size(). Функция getimagesize() используется для определе- jsstr.c. Удаленный пользователь может получить доступ к
ния размеров и разрешения изображений различных фор- потенциально важной информации на целевой системе.
матов: GIF, JPG, PNG, TIFF и т. д. Пример/Эксплоит: http://cubic.xfo.org.ru/firefox-bug/index.html.
Отказ в обслуживании возможен в функции php_handle_ URL производителя: www.mozilla.org.
iff() файла ext/standard/image.c из-за некорректной обработ- Решение: Установите обновление от производителя.
ки входного потока данных. Удаленный пользователь мо-
жет создать специальным образом файл, указать размер Удаленное переполнение буфера
равным -8, что заставит функцию зациклиться и приведет в MailEnable
к потреблению всех возможных ресурсов на системе. Программа: MailEnable Enterprise 1.04 и более ранние вер-
Уязвимость в функции php_handle_jpeg() существует из- сии, MailEnable Professional 1.54 и более ранние версии.
за недостаточной обработки входных данных в заголовках Опасность: Критическая.
файлов формата JPEG. Злоумышленник может создать Описание: Уязвимость существует при обработке Unicode-
специальным образом файл и заставить приложение по- символов в команде EHLO в SMTP-службе. MailEnable ин-
треблять все возможные ресурсы на системе. терпретирует Unicode-символ как адрес в памяти и при по-
URL производителя: www.php.net. пытке обратиться к нему аварийно завершает работу. По-
Решение: Установите исправление от производителя. добная уязвимость существует также IMAP-службе. Удален-
ный пользователь может выполнить произвольный код на це-
Отказ в обслуживании левой системе с привилегиями уязвимой службы. Пример:
в Computer Associates eTrust Intrusion EHLO x99
Detection System
Программа: Computer Associates eTrust Intrusion Detection URL производителя: www.mailenable.com.
System 3.0. Решение: Установите обновление от производителя.
Опасность: Высокая.
Описание: Уязвимость существует из-за недостаточной про- Отказ в обслуживании в Сisco
верки значений, передаваемых Microsoft Crypto API функции при использовании SSH+TACACS
CPImportKey. Большое количество данных приведет к гене- Программа: Сisco IOS 12.0S (SSH version 1), IOS 12.1T (SSH
рации исключения и память не будет освобождена. Удален- version 1), IOS 12.2 (SSH version 1), IOS 12.2T (SSH version 1),
ный пользователь может создать специально сформирован- IOS 12.3T (SSH version 2).
ный пакет и потребить все доступные ресурсы на системе. Опасность: Средняя.
URL производителя: http://www3.ca.com/Solutions/Pro- Описание: Уязвимость позволяет удаленному пользовате-
duct.asp?ID=163. лю перегрузить устройство, если используется SSH-сервер
Решение: Установите обновление от производителя. 2-й версии вместе с TACACS:
! Если устройство сконфигурировано для авторизации
Обход авторизации в реализации пользователей с помощью TACACS+ и имя учетной запи-
IKE Xauth в Cisco си содержит доменное имя, устройство будет перегру-
Программа: Cisco 12.2T, 12.3, и 12.3T. жено.
Опасность: Средняя. ! Если в процессе аутентификации пользователя, когда сер-
Описание: Удаленный пользователь может послать специ- вер ожидает от пользователя ответ с именем учетной за-
ально сформированный пакет на порт UDP 500 службы Cisco писи и паролем, авторизованный пользователь шлет ус-
Easy VPN Server Xauth version 6, удачно закончить Xauth- тройству команду send, устройство будет перегружено.
аутентификацию и получить доступ к ресурсам сети. Для ! Если логировние сообщений перенаправляется SSH-
удачной эксплуатации уязвимости атакующий должен знать сессией с помощью команды terminal monitor, устрой-
публичный ключ группы для удачного завершения первой ству будут посылаться данные этой сессии, даже если
IKE-фазы. сессия уже завершена.
Вторая уязвимость связана с некорректной обработкой
ISAKMP-профиля в Cisco 12.3(8)T, когда профиль присвоен Утечка памяти возможна в процессе авторизации при
пользователю, но атрибуты не обработаны. Удаленный не- использовании SSH версий 1 и 2. Удаленный пользователь
авторизованный пользователь может досрочно начать 2-ю может вызвать отказ в обслуживании.
фазу переговоров и удачно пройти аутентификацию. URL производителя: www.cisco.com.
URL производителя: www.cisco.com Решение: Установите обновление от производителя.
Решение: Установите обновления с сайта производителя.
Составил Александр Антипов

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

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

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

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

¹4, àïðåëü 2005 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№4(29), Апрель, 2005 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Редакторы Технологии IP-телефонии ко удачно пойдут дела у Sun Microsis-
Андрей Бешков Часть 1 – исторический tems, и удастся ли Solaris получить при-
Валентин Синицын экскурс ток «свежей крови» благодаря откры-
Алексей Барабанов Данная статья является первой из цик- тию исходных кодов, посмотреть, что же
Михаил Платов ла, посвященного изучению теорети- представляет из себя эта операционная
ческих и практических аспектов систем система, без сомнения, стоит.
РЕКЛАМНАЯ СЛУЖБА IP-телефонии. Как водится, начнем мы
тел./факс: (095) 928-8253 с теории, а именно – с изучения про- Базовая HTTP-авторизация –
Константин Меделян шлого и настоящего основных протоко- защита от честных людей
reсlama@samag.ru лов IP-телефонии. Затем мы рассмот- Базовая авторизация используется по-
рим основные продукты, эти протоко- всеместно для ограничения доступа к
Верстка и оформление лы реализующие. После чего плавно «личным кабинетам», «панелям управ-
imposer@samag.ru перейдем к практической части – на- ления», администраторским веб-интер-
maker_up@samag.ru стройке наиболее популярных общедо- фейсам, форумам и многим другим веб-
Дизайн обложки ступных решений. ресурсам. Думаю, рядовым пользовате-
Николай Петрочук лям сети будет любопытно узнать, как
Решение проблем работает это средство и насколько оно
107045, г. Москва, производительности надёжно? Начинающим веб-мастерам
Ананьевский переулок, дом 4/2 стр. 1 Microsoft SQL Server будет интересно, как его подключить?
тел./факс: (095) 928-8253 Microsoft SQL Server обладает большим А веб-программисты со стажем навер-
Internet: www.samag.ru набором инструментов для анализа его няка задавались вопросом, можно ли
состояния и устранения узких мест в усилить защиту?
РУКОВОДИТЕЛЬ ПРОЕКТА производительности. Однако часто бы-
Петр Положевец вает непонятно, как воспользоваться Файловая система USF/FFS
УЧРЕДИТЕЛИ этим богатством, когда сервер вдруг и ее восстановление
Владимир Положевец начал работать медленно. В статье рас- Файловая система USF (равно как и ее
Александр Михалев сматриваются типичные причины паде- наследница FFS) практически недоку-
ния скорости работы Microsoft SQL ментирована, и основным источником
ИЗДАТЕЛЬ Server 2000 и методы их диагностики и информации становятся исходные тек-
ЗАО «Издательский дом устранения. сты и заголовочные файлы, в которых
«Учительская газета» далеко не каждый с ходу сможет разоб-
Solaris 10 на рабочей раться. Готовых утилит для восстанов-
Отпечатано типографией станции ления тоже нет. А ведь USF/FFS – это
ГП «Московская Типография №13» К лету нынешнего года Sun Microsistems основная файловая система FreeBSD,
Тираж 8400 экз. обещает закончить открытие исходных под которой вращается множество сер-
кодов своей новой операционной сис- веров и рабочих станций. В масштабах
Журнал зарегистрирован темы Solaris 10. Исходники будут дос- сообщества FreeBSD разрушения дан-
в Министерстве РФ по делам печати, тупны по лицензии CDDL на специаль- ных случаются постоянно. Хотите уз-
телерадиовещания и средств мас- но созданном сайте. И хотя пока невоз- нать, как противостоять энтропии? Тог-
совых коммуникаций (свидетельство можно определенно сказать, насколь- да читайте эту статью.
ПИ № 77-12542 от 24 апреля 2002г.)
Уважаемые читатели!
За содержание статьи ответствен-
ность несет автор. За содержание рек- Спешите оформить подписку
ламного обьявления ответственность на второе полугодие 2005 года!
несет рекламодатель. Все права на
опубликованные материалы защище- Приобрести новые и старые номера журнала
ны. Редакция оставляет за собой пра- вы можете через интернет-магазины LinuxCenter.ru и Allsoft.ru.
во изменять содержание следующих
номеров. Доставка почтой в любую точку России.

96