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

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

ЛИ
С
ЛИ
ТЯ Е

Ж ПИ
ЗА ДНИ
НУ

РА КУ
ЛЫ ГО

ТИ РАС
К У ВО

РО
№11(72) ноябрь 2008
НИ НО

СТ
БЫ
подписной индекс 20780
КА

www.samag.ru
Телефония для эпохи Web 2.0

№11(72) ноябрь 2008


И
ЬГ
ЬД О
БО А
К

ИС НН
ЕН
РА СК
ТЕ
Службы доменов Active Directory
УС

ИЛ ДА
У
ТП

НА П
Л ОТ

НЧ ЖИ
ВО

в Windows Server 2008


РА ЛЕ

КО НЕО
Л

АВ ОС
ХА
УЕ

ЗА
Оптимизация сетевой печати

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


уровня предприятия

Создаем сервер сетевой установки


Fedora/RHEL

Технология борьбы со спамом DKIM

Почтовый шлюз для Exchange 2007


на базе FreeBSD и Postfix

XFS от SGI: структура и алгоритмы

Lustre FS: используем


ПОДПИШИТЕСЬ И ЧИТАЙТЕ! кластерную систему
в промышленных масштабах
Роспечать – 20780, 81655
Пресса России – 88099, 87836 Обзор CMS Skeletonz
Найди в журнале код.
Интер-почта – тел. (495) 500-00-60 Следуй инструкциям.
На кону настоящий
«АДМИНСКИЙ ПРИЗ»
Реклама
Реклама
в номере
3 ТЕНДЕНЦИИ 56 ITIL: необходимо и достаточно?
Ваше предприятие растет, а служба IT по-прежнему
РЕПОРТАЖ представляет собой «черный ящик»? Вы не понимае-
те, как и зачем расходуются выделенные на IT сред-
6 Октябрьская встреча российского ства? Вы считаете IT-бюджет необоснованно высоким
PostgreSQL-сообщества или просто необоснованным? Вы видите выход в уволь-
Обзор мероприятия. нении всех IT-специалистов и найме новых? Не спеши-
Кирилл Сухов те! Возможно, вам поможет внедрение ITIL.
Александр Башкиров
АДМИНИСТРИРОВАНИЕ
59 ЗАКОН ЕСТЬ ЗАКОН
8 Службы доменов Active Directory
в Windows Server 2008 IP-ТЕЛЕФОНИЯ
Посмотрим, чем может порадовать администраторов
новая Active Directory. 60 Телефония для эпохи Web 2.0
Александр Емельянов Рассмотрим инструментарий, который поможет донес-
ти наш голос до удаленного собеседника.
14 Оптимизация сетевой печати Антон Борисов
Любой сервер печати должен обеспечивать быструю
и надежную печать. Для достижения поставленной це- БЕЗОПАСНОСТЬ
ли займемся оптимизацией драйверов.
Иван Коробко 66 Установка цепочки серверов сертификации
как часть внедрения PKI в домене
22 Обзор CMS Skeletonz Часть 3
Skeletonz – одна из несложных систем управления со- Осталось произвести некоторые настройки в домене,
держимым сайтов, написанная на языке Python и ис- чтобы вся конструкция перестала быть бесполезным
пользующая для хранения информации СУБД MySQL. железом и наконец заработала.
Сергей Супрунов Станислав Шпак

27 Lustre FS. Настраиваем и используем ОБРАЗОВАНИЕ


кластерную систему в промышленных
масштабах. Часть 1 70 Немного о сертификации Cisco
Первые шаги по созданию хранилищ на основе клас- Что из себя представляет сертификация Cisco? Как луч-
терной системы Lustre. ше готовиться, чтобы получить статусы CCNA, CCSP,
Виталий Банковский CCNP?
Андрей Бирюков
30 VMware Esxi – виртуализация уровня
предприятия WEB-ПРОГРАММИРОВАНИЕ
В свете выхода Microsoft Hyper-V компания VMware идет
на беспрецедентный шаг, делая бесплатной систему 75 Каркасная разработка веб-приложений
виртуализации уровня предприятия – Esxi. Давайте на основе фреймворка Kohana
разберемся, что кроется за этим названием? Основные принципы работы фреймворка.
Виктор Карабедянц Александр Слесарев

34 Создаём сервер сетевой установки АДМИНИСТРИРОВАНИЕ «1С»


Fedora/RHEL
Дистрибутив Fedora использует для установки много- 82 Переносим данные с использованием
функциональную программу Anaconda, вместе с ря- технологии OLE
дом других технологий вы можете значительно облег- Рассмотрим типовой случай перехода с платформы
чить процессы развертывания и обслуживания вашей «1С:Предприятие» версии 7.7 на версию 8.1.
Linux-инфраструктуры. Андрей Луконькин
Андрей Маркелов
РЕТРОСПЕКТИВА
37 Технология борьбы со спамом DKIM
Разработчики DomainKeys Identified Mail предлагают 84 «Магические» технологии:
свой способ борьбы со спамом. история компании General Magic. Часть 2
Сергей Яремчук General Magic была очередной «сверхновой звёздоч-
кой на небосклоне», чья жизнь была невероятно яркой,
42 Почтовый шлюз для MS Exchange 2007 однако и столь же быстротекущей.
на базе FreeBSD 7.0 + Postfix 2.4 Дмитрий Мороз
Как защитить почтовый сервер от внешних атак и спа-
ма. 91 СИСАДМИН ТОЖЕ ЧЕЛОВЕК
Антон Сенько
92 КНИЖНАЯ ПОЛКА
46 XFS от SGI: структура и алгоритмы
Файловая система XFS считается многими пользовате- 13, 21 BUGTRAQ
лями ОС Linux и IRIX одной из самых стабильных и про-
изводительных ФС поколения 90-х. Посмотрим, за счет
Код для участия в розыгрыше призов.
каких архитектурных решений она добивается столь
Следуйте инструкциям на стр. 4.
высоких показателей.
Андрей Пешеходов

№11, ноябрь 2008 


колонка главного редактора

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

Традиционно в этом номере мы подготовили для Вас множество инте-


ресных статей. В продолжение рассказа о Windows 2008 Server читайте
материал о службе доменов Active Directory. Статья «Оптимизация сете-
вой печати» ответит на вопрос оптимизации драйвера принтера, исполь-
зующегося для сетевой печати. Тему кластерных технологий мы продол-
жим развивать в первой части цикла о Lusture FS. Извечная «почтовая» те-
ма затронута в статье о связке MS Exchange с Postfix, а также в материале
о технологии антиспама DKIM. Тем, кто собирается пройти обучение по про-
дукции Cisco, будет любопытно узнать подробности о сертификации это-
го производителя. Популярную тему виртуализации продолжит обзор бес-
платной системы виртуализации уровня предприятия VMware Esxi. Также
вниманию всех любителей истории мы представляем вторую часть статьи
о «магических» технологиях. Разумеется, я упомянул далеко не все инте-
ресные и полезные статьи, которые Вы найдете на страницах ноябрьско-
го номера журнала.

Наиболее внимательные читатели уже заметили, что в предыдущем ок-


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

И под конец (вопреки мрачной атмосфере, царящей последнее время


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

Приятного вам чтения.

Алексей Коршунов


тенденции
Азиатские гиганты поддержали Android в России: отечественной компании ALT Linux и французс-
Если в начале октября крупнейший японский оператор NTT кой Mandriva. Окончательное решение руководство фонда
DoCoMo сообщал о намерении выпустить Android-смартфон примет в конце этого или начале следующего года.
для своей страны, то теперь с подобными заявлениями вы-
ступили Lenovo и China Mobile, а чуть позже и ASUSTeK. На Linux-десктопах нельзя заработать?
Так, генеральный менеджер департамента комму- Марк Шаттлворт (Mark Shuttleworth), основатель проекта
никаций Lenovo Mobile на мероприятии P&T/Expo Comm Ubuntu и исполнительный директор компании Canonical,
China 2008, проходившем в Пекине с 21 по 25 октября, со- строящей свой бизнес вокруг этого популярного Linux-дист-
общил, что его компания собирается выпустить смарт- рибутива, сделал довольно неожиданное для многих заяв-
фон под управлением Android в феврале-марте 2009 года. ление. На вопрос о том, можно ли заработать с Linux на на-
Для этого Lenovo объединяет усилия с China Mobile, круп- стольных ПК, он ответил следующее: «Не думаю, что кто-
нейшим сотовым оператором в Китае и мире. либо может заработать на Linux-десктопах». Это заявление
Вскоре стало известно о том, что подобная инициа- вызвало немалое удивление у Open Source-энтузиастов хо-
тива зреет и в недрах тайваньской компании ASUSTeK тя бы потому, что Шаттлворт создал проект одного из на-
Computer, которая пообещала выпустить свой смартфон иболее популярных на сегодняшний день Linux-дистрибу-
с Android в первой половине 2009 года. Вероятно, снача- тивов, который хорошо известен своей изначальной на-
ла Asus будет продавать устройства с Android под своим правленностью на применение именно на десктопах. Шат-
брендом на родном для себя тайваньском рынке, а уже по- тлворт сказал даже больше: в Canonical всегда рассматри-
том представит «зарубежные» модели для всего мира. Ин- вали десктоп как продукт с «нулевым доходом». После это-
тересно, что Asus пока не удалось добиться мирового ус- го он пояснил свою мысль: «Я никогда не видел, чтобы ра-
пеха со своими смартфонами на базе Windows Mobile, за- ботала идея продажи упакованных и готовых к использо-
то дешевые мини-компьютеры Asus Eee PC стали настоя- ванию пакетов из свободного программного обеспечения.
щим хитом. Судя по всему, теперь, с платформой Android, Единственный способ создать бизнес вокруг программно-
в Asus намерены повторить этот успех и на рынке смарт- го обеспечения – услуги». Свои слова глава Canonical под-
фонов, выпустив портативные, дешевые и многофункцио- твердил и на примере Microsoft: ни для кого давно не секрет,
нальные Linux-устройства. что и этот гигант софтверной индустрии переходит к серви-
сам как основному источнику доходов.
МИД Германии: Open Source
использовать выгоднее Подготовил Дмитрий Шурупов
по материалам www.nixp.ru
Рольф Шустер (Rolf Schuster), немецкий дипломат и в прош-
лом глава ИТ-отдела Министерства иностранных дел Гер-
мании, заявил, что обслуживание десктопов с програм-
мным обеспечением с открытым кодом (Open Source) об-
ходится гораздо дешевле, чем в случае с проприетарным
ПО. Об этом он сообщил на конференции Open Source World
в Малаге (Испания).
МИД Германии переводит около 11 тысяч десктопов
на GNU/Linux и Open Source. По словам Шустера, этот шаг
позволяет добиться существенной экономии по сравнению
с другими министерствами: «В МИД десктопы функциони-
руют в очень удаленных и малодоступных местах. Но на об-
служивание каждого десктопа мы тратим всего 1000 евро
в год. Это гораздо дешевле, если сравнивать с другими
министерствами, где средние ежегодные расходы за деск-
топ составляют более 3000 евро». Завершение миграции
Министерства на GNU/Linux и другое ПО с открытым ко-
дом ожидается к лету 2009 года. На данный момент пере-
ход осуществлен более чем в половине посольств и пред-
ставительств (всего их – 230). Во время миграции возни-
кают и некоторые сложности: «Переход осуществляется
не без проблем. Например, наши разработчики не знают
японского языка, поэтому не понимают местных сложнос-
тей, и нам пришлось найти специалиста в Японии, чтобы он
помог разобраться с шрифтами в OpenOffice.org».
Почти одновременно с этим стало известно, что на GNU/
Linux и другое ПО с открытым кодом переходит и отечес-
твенная организация – Фонд социального страхования
Российской Федерации. В ФСС тестируют дистрибутивы
двух Linux-производителей, продвигающих свои решения

№11, ноябрь 2008 


г р а т ь
а в ы и
шанс очки!

Три
а л
а н н ые п
ь! Б араб
т дц а л ос ь
н н а с та
р ? ! Оди а ч и т, о
н
щ и й ша , а э то з
След
ую
у р н а ла
м ер ж
и 11 н о
од . о м е ра.
р е д в ам
о о д ин к э т о го н
Пе ь вс е г к о д из
ч и т ат ь в ам
полу с тр и р о в
зД В А »
а р е г и
и й п р и
0 8 год.
б у д ьте з д м и нс к 1 2 з а 20
Не за р ы ш е «А
№ 1 0 , 11, ша
з ы г л о в ы г р ы
т и я в ро з ж у р на п а х роз
час
Для у бятся код
ыи
р в ы х эта А»
о ву х пе и з ДВ э та п,
д д р й
по на а с т и ев н с к ий п т т р ети
м е т уч « А д м и
ж и д ае у м е ни е
к то пр и Р А З »и о д о в, о то л ько
, з к ится
Всех ский при е ш е с ть д о б
д м ин р у е т вс а м п о на
« А с тр и о мв
р е г и т о р
и за т и я в ко
ча с
д ля у гр ы ша н а с айте
д ат ь. ат ы розы к о в ан ы
ж
р е зульт т о п убли г од а.
то буд у 200 8
и н а ем, ч АЗ » бр я
Напо
м
й П риз Р ru 27 ноя
д м и нски .s a m ag.
«А а w ww
а л
ж ур н
Приз
нск ий
ми
Ад РАЗ»
П р из «
м и н с к ий атор
Ад н и к
К о мму к ур с ы

б н ы е р од ук ты с е р в ер ы
че еп е
 У граммны ыделенны
ро в
 П туальные
ир
 В В А»
« Д
й П р из
нс к и
А д м и
н и к атор
К о мму к ур с ы

б н ы е р од ук ты с е р в ер ы
че еп е
 У граммны ыделенны
ро в
 П туальные
ир
 В РИ»
з «Т
к и й При
нс
Адми тбук
оу ы
 Н бные курс родукты
У че м н ы еп
 г р ам
р о
 П

улся…
Лед трон

Более подробную информацию о сроках и правилах проведения розыгрышей призов смотрите на сайте журнала – www.samag.ru
репортаж

Октябрьская встреча российского


PostgreSQL-сообщества
Skype, myYearbook.com и все-все-все
Шестого октября в стенах Высшей школы экономики на Мясницкой состоялась ставшая уже
традиционной встреча российского PosrgreSQL-сообщества.

Н
а мероприятие были пригла- n OLPT (Skype Databases) таблицы можности для горизонтального масш-
шены разработчики компании с несколькими миллиардами запи- табирования системы. PL/Proxy име-
Skype (http://skype.com), про- сей в каждой. ет простой синтаксис и вообще досто-
филь деятельности которой пояснять ин отдельного рассмотрения, которое,
не надо (когда попросили поднять руки Основной упор был сделан на опи- я надесь, ещё появится на страницах
тех, кто не использует продукты Skype, сание применения инструментов для журнала.
из аудитории откликнулись всего два- работы с PostgreSQL, разработанных Следующий подарок PostgreSQL-
три человека). программистами компании и опубли- сообществу от Skype называется
Надо сказать, что хоть разработ- кованных под открытой лицензией. SkyTool. Это пакет утилит, предна-
чики были из близкой Эстонии и не- Прежде всего это pgBouncer – значенных для упорядочивания дос-
которые из них изучали русский язык простой и легковесный менеджер со- тупа, репликации и восстановления
в школе, «нелёгкие» годы в Евросо- единений (точнее, Connection pooler) данных.
юзе дали о себе знать. Полноценные для PostgreSQL. К его достоинствам Прежде всего это PgQ – инстру-
доклады и общение с ними были воз- относится несколько режимов работы мент для создания очередей запро-
можны только на английском. К счас- с соединениями, гибкое управление сов, Londiste – движок для master-slave
тью, Иван Золотухин (Postgresmen), вы- «самостоятельностью» соединения, репликации PostgreSQL, написанный
ступил в роли переводчика. низкое потребление памяти и возмож- на языке Python, DBScript framework –
С первым докладом, «Архитектура ность работы с разными хостами. среда для управления базой дан-
распределённой базы данных Skype», Далее был представлен PL/Proxy – ных и Walmgr – скрипт для «горяче-
выступил Аско Оя (Asko Oja), веду- язык для прозрачного удалённого вы- го» развёртывания сервера из бэкапа
щий эксперт по базам данных компа- зова процедур, позволяющий, напри- на основе трансфера логов или под-
нии Skype. мер, вызывать произвольную функцию ключения резервного сервера.
Представляя архитектуру Skype на любом узле кластера БД. Второй доклад представил техни-
Databases (см. рисунок), Оя подчерк- Тут следует заметить, что дос- ческий директор сети myYearbook.com
нул её масштабы: туп к управлению данными в Skype (социальная сеть, третья по величине
n более 100 СУБД-серверов; Databases осуществляется исключи- в США), Гевин Рой (Gavin Roy). Он пред-
n более 200 баз данных; тельно посредством вызова хранимых ставил интересный рассказ о развитии
n более 10 000 тысяч транзакций процедур, что при использовании дан- и поэтапном масштабировании своей
в секунду; ного инструмента даёт отличные воз- системы, использующей PostgreSQL
в качестве серверов баз данных.
Б ы л о и н т е р е с н ы м и к ул у а р -
ное общение. Достаточно сказать,
что на встрече присутствовали такие
известные персоналии PostgreSQL-
сообщества России, как Олег Барту-
нов, Федор Сигаев, Алексей Борзов
и другие. Skype, кроме Аско Оя пред-
ставлял также инженер Марко Креэн
(Marko Kreen), являющийся соавтором
таких проектов, как Skytools, plProxy,
pgBouncer.
Хочется поблагодарить Николая
Самохвалова и Ивана Золотухина
за организацию встречи.

Архитектура Skype Databases Кирилл Сухов


Реклама
администрирование

Службы доменов Active Directory


в Windows Server 2008

Александр Емельянов
Именно так теперь называется обновленная служба каталогов производства компании
Microsoft. Сама серверная операционная система, на которой базируется данная технология,
уже преподнесла немало приятных сюрпризов конечному потребителю. Посмотрим, чем может
порадовать администраторов новая Active Directory.

Э
то уже третья «редакция» служ- же повысить уровень безопасности. n специальный тип установки кон-
бы каталогов со времен ее пер- Претерпело изменения меню управле- троллера домена только для чте-
вого появления в Windows 2000. ния ролями сервера, что позволит ад- ния (RODC, Read-Only Domain
И, забегая вперед, нужно сказать, что министратору создать единый центр Controller);
основной упор специалисты Microsoft управления как самим сервером, так и n новые политики паролей и блоки-
сделали на то, чтобы упростить управ- сервисами, которые он будет предо- ровки учетных записей;
ление службами доменов AD (AD DS, ставлять. Из новшеств служб доменов n улучшения в групповых полити-
Active Directory Domain Services), а так- можно отметить: ках.


администрирование
Об этих и других нововведениях пойдет речь в статье n службы сертификации Active Directory (AD CS, Active
далее. Directory Certificate Services) – это служба сертифика-
тов, которая позволяет создавать и управлять сертифи-
Не просто служба… катами открытых ключей для приложений, поддержива-
С выходом новой серверной операционной системы назва- ющих технологию открытого ключа; AD CS поддержи-
ние Active Directory представляет некую общность служб вают криптографический интерфейс нового поколения
для управления доступом и проверки подлинности учетных CNG, который пришел на смену CryptoAPI, старые ал-
записей. Если смотреть шире, то совокупность этих техно- горитмы шифрования данных поддерживаются с помо-
логий занимает центральное место в концепции, которой щью поставщиков служб сертификации.
Microsoft уделяла основное внимание со времен выхода
Windows 2000. Речь идет об управлении идентификацией Все эти службы управляются при помощи новой консо-
и правами доступа (IDA, Identification and Access). Основные ли диспетчера серверов Windows Server 2008, которая яв-
постулаты – гибкость и удобство управления инфраструк- ляется единым центром управления как операционной сис-
турой предприятия и обеспечение максимального уровня темой, так и сетевыми сервисами.
безопасности. В основе обновленной службы каталогов ле- В дополнение нужно заметить, что при использовании
жат 5 основных компонентов, с которыми администраторы специального варианта установки Server Core администра-
знакомы со времен выхода Windows Server 2003 R2: тору будут доступны для развертывания только две из вы-
n службы доменов Active Directory – это старая служ- шеперечисленных служб: AD DS и AD LDS.
ба каталогов на новый лад, она позволяет обеспечи-
вать аутентификацию пользователей и компьютеров, Новый мастер установки служб доменов
используя единую базу данных, а также протоколы бе- Как театр начинается с вешалки, так и контроллер домена
зопасности; предоставляет гибкие механизмы управле- начинает жизнь с мастера DCPROMO. Инженеры Microsoft
ния как отдельными пользователями и группами, так и учли опыт обращений пользователей (читать «администра-
целыми подразделениями при помощи групповых по- торов») в службу технической поддержки, после чего пере-
литик; писали DCPROMO заново и представили свету новый мас-
n службы Active Directory облегченного доступа к ка- тер установки служб доменов. Все новшества в целом на-
талогам (AD LDS, Active Directory Lightweight Directory правлены на предотвращение ошибок, которые могут воз-
Services) – это бывший вариант установки службы ка- никнуть в процессе установки контроллера. Это и ошибки
талогов, называемый AD AM (Active Directory Application
Mode); его особенность состоит в том, что вы можете
развернуть службу каталогов без создания доменной
инфраструктуры, то есть фактически получаете LDAP-
сервер для работы с приложениями, которые ориенти-
рованы на работу с каталогами; также есть возможность
спокойно развернуть несколько экземпляров AD LDS
на одном сервере, и каждый будет иметь свою собст-
венную схему;
n службы управления правами Active Directory (AD
RMS, Active Directory Rights Management Services) –
бывший сервер управления правами; AD RMS позволя-
ют управлять правами доступа к данным приложений,
которые поддерживают эту технологию; используя AD
RMS, организации могут создавать шаблоны для обес-
печения конфиденциальности финансовых докумен-
тов, сообщений электронной почты и т. д.; в отличие от
Windows Server 2003 R2 управление AD RMS происхо-
дит при помощи консоли MMC, помимо этого, при уп-
равлении AD RMS снижается вероятность ошибок при
настройке из-за разбиения задач на 3 категории: обя-
зательные, рекомендованные и необязательные;
n службы федерации Active Directory (AD FS, Active
Directory Federation Services) – во многом за счет ин-
теграции служб федерации с AD RMS имеется возмож-
ность создавать безопасную среду работы для клиен-
тов, находящихся вне корпоративной сети, без созда-
ния дополнительных учетных данных, а использование
приложений с поддержкой RMS позволяет детально кон-
тролировать работу удаленных пользователей с внут-
рикорпоративными документами;

№11, ноябрь 2008 


администрирование
в распределении ролей FSMO, и недо- Плюс данного нововведения нали- лере RODC, все сделано для того, что-
статочное количество серверов гло- цо, хотя бы потому, что администрато- бы минимизировать возможность рас-
бального каталога, и неверная нас- ру не нужно выполнять перезагрузку ширения привилегий в домене. А имен-
тройка сервера DNS. сервера, который может предостав- но, существует два способа делегиро-
Запустив мастер, можно выбрать лять какие-то другие сервисы, тем са- вания прав администратора для опера-
два режима (без использования клю- мым обеспечив бесперебойную рабо- ции обслуживания контроллера RODC.
ча /ADV): основной и расширенный. Ад- ту организации. Администратор домена может, попрос-
министратор может быстро настроить ту говоря, при помощи оснастки «Active
контроллер домена, указав основной Контроллер домена Directory Users and Computers» создать
режим, либо внести дополнительные только для чтения заготовку контроллера домена только
настройки в расширенном режиме, на- Это еще один шаг, который Microsoft для чтения, назначить политику реп-
пример, указать сервер, с которого бу- сделала в сторону безопасности служб ликации паролей и пользователя либо
дет производиться репликация при по- доменов. Скорее даже можно гово- группу, которые завершат процесс пе-
вышении роли рядового сервера. Ес- рить о том, что инженеры учли опыт ревода на удаленном сервере. Второй
ли вы имеете широко развитую инфра- прошлых разработок и выпустили со- вариант предполагает создание ро-
структуру, это позволит снять нагрузку вокупное решение. Имеется в виду, лей администратора на самом RODC.
с основных контроллеров. Кроме этого, что в доменах NT 4 были понятия PDC В целом они не отличаются от локаль-
существует возможность расположить (контроллер домена для чтения и за- ных групп безопасности, хранятся в ре-
контроллер в конкретном сайте, исхо- писи учетных данных) и BDC (резер- естре и определяются только данным
дя из его IP-адреса (мастер сам выбе- вные контроллеры только для чтения), RODC, но управляются с помощью ути-
рет подходящий сайт). от которых с выходом Windows 2000 литы NTDSUTIL.
Наверняка многие администрато- Microsoft отказалась, сделав все кон- Если пользователь удаленного
ры возьмут на вооружение режим ра- троллеры в домене равноправными офиса впервые проходит аутентифи-
боты мастера с использованием фай- с точки зрения операций чтения и запи- кацию на RODC, его запрос переда-
ла ответов – режим unattend (знако- си в базу данных. С выходом Windows ется прямиком на основной контрол-
мый, например, по сборке дистрибу- Server 2008 администраторы могут лер. При удачной обработке запро-
тива Windows). Нет необходимости пи- строить комплексные решения. са RODC получает хешированный па-
сать его вручную, все параметры мо- Контроллер домена только для чте- роль при помощи репликации. Одна-
гут быть сохранены в файл после вне- ния (RODC, Read-Only Domain Controller) ко такое поведение можно изменить
сения всех настроек и прямо перед за- является специальным вариантом раз- для отдельно взятых учетных записей
пуском повышения роли сервера. ворачивания доменного контроллера при помощи политики репликации па-
для филиалов и удаленных подразде- ролей для каждого RODC. Например,
Стоп машина! лений компаний. При его использова- хэш пароля учетной записи админи-
В Windows Server 2008 появилась воз- нии службы доменов работают в режи- стратора хранить локально небезо-
можность останавливать сервис служ- ме «только для чтения». Это означает, пасно. Так нас уверяют специалисты
бы каталогов «на лету». Речь идет что никаких изменений в базу данных по безопасности компании Microsoft,
о том, что теперь нет необходимости такого контроллера локально внести сетуя на то, что в этом случае он мо-
загрузки сервера в режиме восста- нельзя. Изменения могут быть произ- жет быть взломан, но, с другой сторо-
новления службы каталогов (Directory ведены на основном контроллере и за- ны, все в этом разделе говорит о том,
Services Restore Mode) для проведения тем при помощи однонаправленной что с RODC невозможно нанести ка-
операций по обслуживанию контрол- репликации распространены на конт- кой-либо вред остальному домену, по-
лера домена, таких как дефрагмента- роллеры RODC. Понятно, что, посколь- этому данное предостережение мож-
ция или восстановление базы данных ку RODC не способны осуществлять но посчитать, по меньшей мере, сом-
каталога. Нужно всего лишь выполнить репликацию между собой, нет смыс- нительным.
одно из действий: остановить службу ла устанавливать несколько таких кон- Есть еще некоторые особенности,
«Контроллер домена» или выполнить троллеров в удаленном офисе. касающиеся безопасности, о которых
команду «net stop ntds». При этом вы Основное отличие RODC от BDC- стоит упомянуть. Контроллеры доме-
остаетесь аутентифицированным как доменов NT 4 в том, что администра- на только для чтения не являются до-
администратор домена. В предыду- тор может определять, какой набор веренными с позиции доверительных
щих же версиях Windows Server в ре- данных будет поставляться на опреде- отношений в домене, они трактуются
жиме восстановления AD нужно было ленный контроллер RODC. Это влечет как рядовые серверs. Более того, вы
регистрироваться и вспоминать па- за собой уменьшение трафика репли- не найдете таких контроллеров в груп-
роль, указанный при работе масте- кации, и, несомненно, это будет полез- пах «Контроллеры домена» и «Конт-
ра DCPROMO (согласитесь, была ве- ным для подразделений, не имеющих роллеры домена предприятия». RODC
роятность его забыть либо потерять). хорошей устойчивой связи с головным является центром распространения
По окончании всех необходимых опе- офисом. Одновременно с этим обеспе- ключей Kerberos только для своего фи-
раций нужно запустить вышеуказан- чивается сохранность основных дан- лиала. Это возможно из-за того, что он
ный сервис либо выполнить команду ных домена Active Directory. Что каса- использует собственную учетную за-
«net start ntds». ется прав администратора на контрол- пись KrbTGT и собственные ключи.

10
администрирование
Для системы DNS появилась возможность создания зоны отдельный домен, так как они могли быть применены толь-
только для чтения на контроллере RODC. Динамическая ре- ко к уровню домена.
гистрация записи компьютера в такой зоне невозможна, вза- В AD DS появились подробные политики паролей, кото-
мен этого на DNS-сервер с возможностью записи посылает- рые можно применять как к отдельным учетным записям,
ся запрос на регистрацию, и уже после репликации проис- так и к группам. Хотя специалисты рекомендуют пользо-
ходит обновление зоны в филиальном сервере DNS. ваться группами для распределения этих политик, чтобы
Для развертывания контроллера RODC необходимо упростить дальнейшее администрирование.
иметь в домене хотя бы один основной (то есть в режи- Рассмотрим процесс создания и привязки политик паро-
ме чтение/запись) контроллер домена под управлением лей, а также некоторые атрибуты, связанные с ними. Спе-
Windows Server 2008. Плюс к этому домен должен находить- циального графического средства для создания и управ-
ся на уровне не ниже Windows Server 2003 (смотри врезку ления такими политиками нет, вместо этого можно исполь-
«Функциональные уровни домена и леса»). Понятно, что и зовать программу ADSIEdit либо другие программы, кото-
сам RODC должен работать под управлением серверной ОС рые позволят управлять объектами схемы AD (об одной
последней версии. Использование RODC в варианте уста- из них будет сказано ниже). Итак, для создания полити-
новки Server Core дает возможность держать в удаленном ки нужно создать объект msDS-PasswordSettings или PSO
филиале безопасный сервер, имеющий небольшие требо- (Password Settings Object) в контейнере Password Settings
вания по производительности. Container в узле System Container вашего домена. Далее
вам будет предложено ввести значения обязательных ат-
Новые политики паролей рибутов данного объекта. Для понимания, какие политики
Очень часто на технических форумах можно было встре- паролей сможет применять администратор, рассмотрим
тить вопросы, касающиеся политик паролей и блокировки некоторые атрибуты:
учетной записи. Проблема состояла в том, что многие ад- n msDS-PasswordSettingsPrecedence – здесь содержит-
министраторы не могли понять, как при помощи групповых ся некоторый номер, определяющий приоритет дейст-
политик назначить ограничения параметров паролей для вия настроек, если для одного объекта применяется не-
отдельных групп или организационных единиц. Такая воз- сколько;
можность до выхода Windows Server 2008 отсутствовала, и, n msDS-PasswordComplexityEnabled – определяет, дол-
если было необходимо выделить группу со специфичными жен ли пароль отвечать требованиям сложности (значе-
настройками для политик паролей, нужно было создавать ние по умолчанию для домена True);

Реклама

№11, ноябрь 2008 11


администрирование
звать некоторый скепсис, учиты-
Функциональные уровни домена файловая система) для папки SYSVOL. Ис- вая требования последней к произ-
и леса пользование разностного метода дает при- водительности оборудования, а так-
Как и следовало ожидать, с выходом но- рост в скорости репликации. Во-вторых, же то, насколько удачной получилась
вой серверной операционной системы увеличение длины ключа шифрования AES Windows XP в качестве настольной
от компании Microsoft, которая расшири- (Advanced Encryption Standard) для прото- платформы. Это тема отдельного спо-
ла возможности службы каталогов, появи- кола Kerberos с 128 до 256 бит. Шаг в сто- ра, поэтому просто посмотрим, что но-
лись новые функциональные уровни лесов рону усиления безопасности. Ну и, в-треть- вого получили администраторы для уп-
и доменов. Что касается уровня Windows их, изменения, коснувшиеся политик па- равления групповыми политиками. Во-
Server 2008 для лесов, сам по себе ника- ролей для доменов, управление которы- обще, этот материал может без тру-
ких возможностей он не добавляет. Это ми стало более гибким за счет снятия ог- да потянуть на отдельную статью, по-
сделано для того, чтобы все домены в ле- раничения применения их исключительно этому рассмотрим лишь основные из-
су находились на одном уровне. Повыше- ко всему домену. менения.
ние домена до этого уровня позволит ис- Многие другие расширенные возмож- Начнем с того, что теперь механизм
пользовать следующие нововведения. Во- ности служб доменов AD требуют всего групповой политики – это отдельная
первых, новый движок репликации DFS лишь наличия контроллера домена под уп- служба Group Policy Client, не имеющая
(Distributed File System, распределенная равлением Windows Server 2008. возможности перезапуска. Новая вер-
сия провайдера NLA (Network Location
n msDS-MinimumPasswordLength – с наименьшим идентификатором Awareness) позволила улучшить про-
минимальная длина пароля в сим- objectGUID. цессы обнаружения медленных линий,
волах (семь по умолчанию); 4. В случае если есть несколько PSO, а также фонового обновления группо-
n msDS-LockoutThreshold – коли- привязанных к группам, в которых вых политик.
чество неудачных попыток ввода па- состоит пользователь, применяет- Важные улучшения получила кон-
роля, после которых пользователь ся политика с наименьшим значе- соль управлений GPMC (Group Policy
будет заблокирован (0 по умолча- нием атрибута очередности. Management Console, консоль управ-
нию, это означает запрет блокиров- ления групповой политикой) – теперь
ки при неудачном вводе пароля). Если же к объекту пользовате- есть возможность осуществлять по-
ля не привязано ни одного PSO, бу- иск параметров (которых, кстати, бо-
После создания объекта типа PSO дет применена политика паролей для лее 2000) объектов групповой поли-
нужно привязать его к пользовате- домена. Для определения применен- тики (GPO, Group Policy Object). По-
лю или группе, для этого нужно доба- ного к пользователю PSO админист- мимо этого, при необходимости мож-
вить их в атрибут msDS-PSOAppliesTo раторы могут использовать атрибут но добавлять комментарии в объекты,
данного объекта. Понятно, что дан- msDS‑ResultantPSO, который содер- а также их параметры.
ный атрибут может иметь не одно зна- жит DN имя PSO. Есть изменения в формате адми-
чение. Более того, в атрибутах поль- Возможно, администраторам бу- нистративных шаблонов, использу-
зователя или группы можно найти дет полезна также утилита командной емых в Windows Vista и Server 2008.
msDS‑PSOAppliedTo, который содер- строки, написанная Джо Ричардсом, О них можно найти материалы на сай-
жит все PSO, связанные с данным для создания и привязки PSO. Она на- те Microsoft TechNet.
пользователем или группой. Исходя из зывается PSOMgr.exe, найти ее можно
этого, следует, что для объекта поль- на сайте Джо – www.joeware.net. В заключение
зователя может применяться несколь- Безусловно, инженеры Microsoft сде-
ко политик, так как пользователи мо- Групповые политики лали огромный шаг в сторону безопас-
гут входить сразу в несколько групп. в Windows Server 2008 ности и усовершенствования механиз-
Но в какой очередности применяются Не секрет, что групповые политики мов управления сетевой средой пред-
политики в этом случае? в рамках домена дают возможность приятия. Многие новшества служб до-
Существуют некоторые правила, администратору централизованно соз- менов Windows Server 2008, такие, на-
согласно которым эта очередность оп- давать рабочее окружение для пользо- пример, как расширенный аудит, мо-
ределяется. вателей. Windows Vista – расширенный ментальные снимки Active Directory, ре-
1. При непосредственной привязке набор групповых политик. Несмотря на зервное копирование и восстановле-
PSO к объекту пользователя при- это, данное нововведение было беспо- ние служб доменов, не вошли в статью.
меняется данная политика. лезно для использования в домене, так С ними можно ознакомиться на сайте
2. При привязке к объекту пользова- как Windows Server 2003 не имел воз- компании Microsoft, а также в блогах
теля сразу нескольких политик бу- можности управления новыми полити- и статьях многих специалистов и MVP
дет применена политика с наимень- ками. Такой механизм появился с вы- по внедрению служб доменов.
шим значением атрибута очеред- ходом Server 2008.
ности (был рассмотрен выше). Однако использование связки но- 1. http://www.minasi.com.
3. Если несколько PSO имеют од- вой серверной ОС с Windows Vista 2. ht tp: // tec hnet.mic rosof t.c om /ru - ru /
но и то же значение атрибу та для применения максимума возмож- magazine/default.aspxRODC.
очередности, выбирается объект ностей групповых политик может вы- 3. http://windowsitpro.com.

12
bugtraq

Уязвимость в службе Server Уязвимость при обработке IPv6-пакетов


в Microsoft Windows в Cisco ASA и PIX
Программа: Microsoft Windows 2000; Microsoft Windows XP; Программа: Cisco PIX версии 7.2(4)9 и 7.2(4)10; Cisco
Microsoft Windows 2003; Microsoft Windows Vista; Microsoft Adaptive Security Appliance (ASA) версии 7.2(4)9 и 7.2(4)10.
Windows 2008. Опасность: Средняя.
Опасность: Критическая. Описание: Уязвимость существует из-за неизвестной
Описание: Уязвимость существует из-за ошибки в службе ошибки при обработке IPv6-пакетов. Удаленный пользо-
Server при обработке RPC-запросов. Удаленный пользова- ватель может с помощью специально сформированного
тель может с помощью специально сформированного RPC- IPv6‑пакета вызвать перезагрузку устройства.
запроса выполнить произвольный код на целевой системе. URL производителя: www.cisco.com.
Для удачной эксплуатации уязвимости на Windows Vista Решение: Установите последнюю версию 7.2(4)11 с сайта
и Windows Server 2008 атакующий должен успешно аутен- производителя.
тифицироваться на системе.
Примечание: уязвимость активно эксплуатируется на на- Утечка памяти в Cisco ASA
стоящее время. Программа: Cisco Adaptive Security Appliance (ASA) версии
URL производителя: www.microsoft.com. до 8.0(4) и 8.1(2).
Решение: Установите исправление с сайта производителя. Опасность: Средняя.
Описание: Уязвимость существует из-за утечки памяти
Множественные уязвимости в IBM DB2 в Crypto Accelerator. Удаленный пользователь может с по-
Программа: DB2 Enterprise Server Edition версии 8.1, 8.2, мощью специально сформированных пакетов вызвать от-
9.1 и 9.5; DB2 Workgroup Server (все версии); DB2 Express каз в обслуживании устройства.
Server (все версии); DB2 Personal Edition версии 8.1, 8.2, 9.1 URL производителя: www.cisco.com.
и 9.5; DB2 Connect Server (все версии). Решение: Установите последнюю версию 8.0(4) или 8.1(2)
Опасность: Средняя. с сайта производителя.
Описание: 1. Уязвимость существует из-за неизвестной
ошибки в функции SQLNLS_UNPADDEDCHARLEN(), кото- Уязвимость в реализации VLAN Trunking
рая позволяет вызвать ошибку сегментации в DB2-серве- протокола в Cisco IOS и CatOS
ре. Уязвимости подвержена версия 9.1. Программа: Cisco Catalyst 6500 Series 12.x; Cisco CATOS 5.x;
2. Уязвимость существует из-за того, что виды и триг- Cisco CATOS 6.x; Cisco CATOS 7.x; Cisco CATOS 8.x; Cisco
геры не сбрасываются или помечаются как недееспособ- IOS 10.x; Cisco IOS 11.x; Cisco IOS 12.x; Cisco IOS R11.x; Cisco
ные в Native Managed Provider for .NET, если определитель IOS R12.x; Cisco IOS XR 3.x.
не способен управлять объектами. Уязвимости подверже- Опасность: Низкая.
ны версии 8.1, 8.2, 9.1 и 9.5. Описание: Уязвимость существует из-за неизвестной
3. Уязвимость существует из-за неизвестной ошибки ошибки при обработке VLAN Trunking Protocol (VTP)-паке-
в Sort/List-службах, которая позволяет раскрыть пароли, тов. Удаленный пользователь может отправить специально
относящиеся к строкам подключения. Уязвимости подвер- сформированный пакет на интерфейс коммутатора в режи-
жены версии 9.1 и 9.5. ме транка и аварийно завершить работу устройства. Для ус-
URL производителя: www-306.ibm.com/software/data/ пешной эксплуатации уязвимости VTP Operating Mode дол-
db2/9. жен быть установлен в server или client.
Решение: Установите исправление 8.1FP17, 8.2FP10, 9.1 FP6 URL производителя: www.cisco.com.
или 9.5FP2 с сайта производителя. Решение: В настоящее время способов устранения уязви-
мости не существует.
Обход аутентификации в Cisco ASA и PIX
Программа: Cisco PIX версии до 7.0(8)3, 7.1(2)78 и 7.2(4)16; Переполнение буфера
Cisco Adaptive Security Appliance (ASA) версии до 7.0(8)3, в Trend Micro OfficeScan
7.1(2)78 и 7.2(4)16; Cisco PIX 8.x версии до 8.0(4)6 и 8.1(1)13; Программа: Trend Micro OfficeScan 7.3 Patch 4 build 1362,
Cisco Adaptive Security Appliance (ASA) версии до 8.0(4)6 возможно, более ранние версии; Trend Micro OfficeScan 8.0
и 8.1(1)13. SP1, возможно, более ранние версии.
Опасность: Средняя. Опасность: Средняя.
Описание: Уязвимость существует из-за неизвестной Описание: Уязвимость существует из-за ошибки провер-
ошибки в Cisco ASA and PIX, которая позволяет удаленному ки границ данных при обработке CGI-запросов. Удаленный
пользователю обойти VPN-аутентификацию. Для успешной пользователь может с помощью специально сформирован-
эксплуатации уязвимости устройства должны быть сконфи- ного HTTP POST-запроса вызвать переполнение стека и вы-
гурированы на VPN-доступ с использованием IPSec или SSL полнить произвольный код на целевой системе.
и аутентификацию в Microsoft Windows-домене. URL производителя: www.trendmicro.com.
URL производителя: www.cisco.com. Решение: Установите последнюю версию с сайта произ-
Решение: Установите последнюю версию с сайта произ- водителя.
водителя. Составил Александр Антипов

№11, ноябрь 2008 13


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

Оптимизация сетевой
печати

Иван Коробко

Любой сервер печати должен обеспечивать быструю и надежную печать. Для достижения
поставленной цели займемся оптимизацией драйверов.

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

В
крупных сетях используются PS или PCL Эмуляция PS – не самый лучший
так называемые серверы печа- В настоящее время активно использу- выход, поскольку значительно падает
ти (print server), которые пред- ется два типа драйверов: скорость печати. Однако большинс-
ставляют собой компьютеры под уп- n PCL (Printer Command Language) – тво лазерных принтеров, например
равлением операционной системы разработан компанией HP. HP1200, поддерживают PS.
семейства Windows Server 2K, на ко- n PS (Post Script) – создан Джоном
торых установлено до нескольких де- Уорноком и Чаком Гешке из Adobe PPD-файл
сятков принтеров. в начале 80-х годов. PPD-файл (см. рис. 1) представля-
Во время настройки таких серве- ет собой текстовый файл, который
ров системные администраторы ис- Принципиальная разница между можно открыть обычным блокнотом
пытывают проблемы, связанные с не- PCL и PS заключается в том, что по- (notepad.exe). Этот файл является, если
устойчивой работой драйверов. Боль- мимо растровых шрифтов (True Type так можно выразиться, переводчиком,
шинство администраторов решает эту и Open Type), PS также поддержива- который делает понятным для принте-
проблему подбором стабильно работа- ет векторные шрифты (Post Script), ра язык PostScript.
ющего драйвера с удовлетворитель- что позволяет успешно использовать Во время установки драйверов PPD-
ной производительностью. их в полиграфии, обеспечивая высо- файлы копируются в папку %WinDir%\
В большинстве случаев таким кое качество продукции. system32\spool\drivers\w32x86\3. Об-
драйвером оказывается PS-драйвер Кроме того, PS выгодно отличает- ратите внимание на последний подка-
или, как его еще называют, PostScript- ся от PCL следующим: талог. В зависимости от версии PS он
драйвер. Однако не все они отличают- n увеличение скорости и надежнос- может изменяться. Поскольку в насто-
ся надежной работой. ти печати; ящее время используется PS версии 3,
Многочисленные эксперименты n поддержка большого количества то название подкаталога соответству-
показали, что на стабильность рабо- шрифтов разных типов; ющее – 3 (см. рис. 1).
ты драйвера сильно влияет его графи- n кэширование шрифтов и изобра-
ческое оформление: в inf-файле, отве- жения; Структура
чающем за установку драйвера, осу- n поддержка цветоделения в самом PostScript‑драйвера
ществляется установка дополнитель- контроллере; Большая ошибка считать, что PostScript-
ных компонентов. Удалив из INF-фай- n получение высокого качества драйвер для каждого принтера свой.
ла все лишнее, можно получить ста- печати при использовании вектор- Он один – стандартный, универсаль-
бильно работающий драйвер, причем ной графики и векторных шриф- ный. Его достаточно один раз устано-
без потери функционала, например, тов. вить в операционной системе и исполь-
возможности двухсторонней печати зовать для всех принтеров, назначая
при ее аппаратной поддержке. Основным недостатком PS-драй- только PPD-файл.
Объединение множества inf-фай- веров является необходимость их ап- У читателя возникнет закономер-
лов в один дает возможность объеди- паратной поддержки печатающим ус- ный вопрос: в чем же разница в прин-
нить несколько драйверов в один – уни- тройством, что сказывается на цене терах? Ответ очень прост: в PPD-фай-
версальный. принтера. лах.

Рисунок 1. PPD-файлы

№11, ноябрь 2008 15


администрирование
Рассмотрим кратко структуру драйвера: К ним относятся следующие стандартные разделы:
n INF-файл. Ядро инсталлятора, в котором описано, ка- n [Version] – идентифицирует INF и класс устанавливае-
кие драйверы присутствуют в нем, для каких операци- мого устройства;
онных систем он подходит, какие изменения необходи- n [Manufacturer] – идентифицирует производителя уст-
мо сделать в реестре, какие библиотеки зарегистриро- ройства. Каждый INF-файл должен иметь по крайней
вать и, наконец, список файлов, участвующий в уста- мере один такой раздел;
новке драйвера; n [Strings] – определяются значения констант, использу-
n САВ-файл, в котором находится PS (включая PPD) емых в пределах файла.
или PCL-драйвер; n [DestinationDirs] – описывается местоположение драй-
n Различные библиотеки графического оформления драй- вера на локальном компьютере.
вера. n [SourceDisksNames] – описание установочного диска
с драйверами;
Для создания инсталлятора можно пойти по одному n [SourceDisksFiles] – список файлов драйвера.
из путей: взять какой-либо PS-драйвер и «урезать» его, ли-
бо, изучив структуру INF-файла создать новый файл, за- Рассмотрим каждый из них подробнее.
имствовав необходимые библиотеки из имеющегося драй-
вера. Раздел [Version]
Раздел [Version] состоит из ряда ключей. Полный их список
Структура INF-файла можно найти на сайте Microsoft [1].
Любой INF-файл представляет собой тестовый файл в фор- В данном случае рассмотрим лишь минимум необходи-
мате ASCII, состоящий из нескольких разделов. Каждый мых (см. листинг 2).
из них предназначен для выполнения определенной за-
дачи. Имена разделов обычно заключены в квадратные Листинг 2. Структура раздела [VERSION]
скобки. Элементы раздела – ключи и значения, соединен- [Version]
ные знаком равенства. В разделе может присутствовать Signature="signature-name"
Class=class-name
несколько значений. ClassGuid={nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}
Кроме того, в состав элемента может входить коммен- CatalogFile=filename.cat
DriverVer=mm/dd/yyyy[,w.x.y.z]
тарий, который отделяется от ключей и значений точкой
с запятой (см. листинг 1). В приведенном листинге с помощью параметра Signature
описывается операционная система, для которой создан
Листинг. 1. Структура INF-файла INF-файл. Значение параметра указывается в знаках дол-
[section] лара ($) с двух сторон и может быть следующим:
key1 = value1 ; comment n $Windows 95$ – для Windows 9x;
key2 = value2
n $WINDOWS NT$ – для Windows 2k;
n $CHICAGO$ – для всех видов операционных систем.
Разделы INF-файла
Любой INF-файл имеет ряд обязательных разделов, кото- Поскольку в настоящее время Windows 9x снята с под-
рые считываются в первую очередь. По их содержимому оп- держки, то обычно указывается значение $CHICAGO$.
ределяется тип INF-файла, определяются константы и т. д. Второй и третий параметр указывают на класс устанав-
Поскольку рассматривается INF-файл драйвера, то разде- ливаемого устройства. В таблице приведен список широко
лы зарезервированы для этого типа драйверов. используемых устройств и соответствующие им значения
параметров Class и ClassGuid (полный
Классы часто используемых типов устройств список классов и соответствующих им
Тип устройства Класс устройства (Class) Идентификатор безопасности (ClassGuid) идентификаторов безопасности при-
CD/DVD CDROM {4d36e965-e325-11ce-bfc1-08002be10318} веден в [2]).
Видеоадаптер Display {4d36e968-e325-11ce-bfc1-08002be10318} Значение четвертого параметра –
файл с расширением CAT, который
IEEE 1394-контроллер 1394 {6bdd1fc1-810f-11d0-bec7-08002be2092f}
содержит в себе сам драйвер, вклю-
Сканеры и камеры Image {6bdd1fc6-810f-11d0-bec7-08002be2092f}
чая PPD-файл.
Клавиатура Keyboard {4d36e96b-e325-11ce-bfc1-08002be10318} Забегая вперед заметим, что САT-
Монитор Monitor {4d36e96e-e325-11ce-bfc1-08002be10318} файл не указывается в списке ус-
Мышь Mouse {4d36e96f-e325-11ce-bfc1-08002be10318} танавливаемых файлов в разделах
Сетевая карта Net {4d36e972-e325-11ce-bfc1-08002be10318} [SourceDisksFiles] or [CopyFiles]. Пос-
COM и LPT-порты Ports {4d36e979-e325-11ce-bfc1-08002be10318}
ледний параметр – DriverVer, значение
которого дата создания INF-файла.
Звуковая карта Sound {4d36e97c-e325-11ce-bfc1-08002be10318}
Замечание. GUID – уникальный
SCSI и RAID-контроллеры SCSIAdapter {50dd5230-ba8a-11d1-bf5d-0000f805f530}
128-битный идентификатор безопас-
USB USB {36fc9e60-c465-11cf-8056-444553540000} ности. Все жизненно важные объек-
Принтер Printer {4d36e979-e325-11ce-bfc1-08002be10318} ты домена или операционной сис-

16
администрирование
темы имеют фиксированные идентификаторы безопас-
ности. Например, папка «Мой компьютер» на любом ком-
пьютере имеет идентификатор {20D04FE0-3AEA-1069-
A2D8‑08002B30309D}. Существует также GUID, которые
генерируются случайным образом на основе текущего
времени.
Таким образом, суммируя полученную информацию
и учитывая, что необходимо создать INF-файл для уста-
новки принтера, получаем следующий раздел [Version]
(см. листинг 3). Поскольку создается универсальный драй-
вер, то все файлы будут располагаться в одном каталоге
с INF-файлом, а из CAT-файла будут заимствованы лишь
некоторые файлы. Поэтому параметр CatalogFile не исполь-
зуется в листинге 3.

Листинг 3. Раздел [Verison] для установки принтера

[Version] Рисунок 2. Присвоение значений без подстановки


Signature="$CHICAGO$"
Class=Printer
ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
DriverVer=09/31/2008

Раздел [Manufacturer]
В разделе [Manufacturer] назначается производитель уст-
ройства, отображаемый при установке драйвера (см. рис. 2).
Название производителя может быть произвольным: рус-
ским или английским. Для того чтобы устанавливаемый
драйвер было легко найти, рекомендуется его поместить
в начало списка, использовав в качестве первого символа
спецзнак – звездочку или восклицательный знак. При сор-
тировке все русские названия идут после английских.
Существует два способа присвоения значений: с помо-
щью подстановки и без нее. На рис. 2 проиллюстрирован
второй способ. Способ с подстановкой рассмотрен далее.
Определив название производителей, необходимо оп- Рисунок 3. Присвоение значений методом подстановки
ределить список оборудования. Для этого необходимо соз-
дать одноименный раздел [infotec], в котором будут созда- где file-list-section название секции. По умолчанию –
ны ключи и соответствующие им значения. DefaultDestDir; dir и subdir папки, в которые необходимо ско-
Имя ключа совпадает с названием оборудования, а зна- пировать данные.
чение состоит из нескольких частей, которые между со- В случае с принтером, PostScript драйвер копирует-
бой разделены запятыми. Первая часть – название разде- ся в папку %WinDIR%\System32\spool\drivers\w32x86\3\
ла, в котором будут указаны инсталлируемые файлы. Вто- для 32‑биной оперционной системы и PostScript 3, которой
рой – уникальный идентификатор устройства, который на- соответствует 66000 (см. листинг 4).
значается производителем.
Листинг 4. Раздел [DestinationDirs]
Раздел [Strings] [DestinationDirs]
В этом разделе, который обычно расположен в конце фай- DefaultDestDir=66000
ла, назначаются константы. Название ключа – перемен-
ная, которая будет фигурировать в файле. Значение клю-
ча – соответственно, – подставляемое значение (см. рис. 3). Раздел [SourceDisksNames]
В приведенном примере параметра BrandName присваива- Название раздела [SourceDisksNames] является общим
ется значение Lexmark. для всех типов операционных систем. В случае создания
одного INF-файла для разных операционных систем, в за-
Раздел [DestinationDirs] висимости от ее типа, название раздела может меняться:
В этом разделе присутствуют ключи, в которых описыва- n [SourceDisksNames.x86] – платформа Intel 80x86,
ется местоположение драйвера на локальном компьютере. 32‑bit;
Шаблон ключа следующий: n [SourceDisksNames.ia64] – платформа x86, 64-bit;
n [SourceDisksNames.amd64] – архитектура процессора,
file-list-section = dir[,subdir] разработаная AMD, 64-bit.

№11, ноябрь 2008 17


администрирование
Приведем раздел [SourceDisks
Files] для установки PS‑драйвера
для HP1200 в листинге 6.

Листинг 6. Раздел [SourceDisksFiles]

[SourceDisksFiles]
HP1200.ppd = 1

В данном случае – это PPD-файл


HP1200.PPD. Остальная часть драй-
веры входит в состав операционной
системы.
Если до этого драйвера не были
установлены, то инсталлятор будет
их искать в каталоге с INF-файлом.
Стандартный PostScript-драйвер
состоит из следующих файлов:
n PS5UI.DLL;
n PSCRIPT5.DLL;
n PSCRIPT.HLP;
Рисунок 4. Вызов свойств сервера n PSCRIPT.NTF.

В этом разделе располагаются ключи, построенные Все эти файлы можно найти в любом PS-драйвере. Они
по следующему шаблону: находятся в CAT-файле, описанном в параметре CatalogFile
Для Windows 2000: раздела [Version].

diskid = disk-description[,[tag-or-cab-file], ↵
[unused,path][,flags]]
INF-файл для HP1200 PS
Теперь, когда описаны все необходимые ингредиенты
Для Windows XP и старше: INF‑файла, рассмотрим файл инсталлятора Post Script драй-
веров для принтера HP-1200.
diskid = disk-description[,[tag-or-cab-file], ↵
[unused,path],[flags][,tag-file]]
Создание TCP/IP-порта
где disk-description (обязательный параметр) – описание Для установки сетевого принтера необходимо создать TCP/
диска. Описание остальных параметров выходит за рам- IP-порт и подключить к нему сетевой принтер. Все дейст-
ки этой статьи. вия осуществляются на выделенном сервере. Кроме того,
Полное описание всех параметров приведено на офи- к USB-принтеру должен быть подключен Jet Direct, позво-
циальном сайте компании Microsoft [3]. ляющий его подключить к сети с настроенным интерфей-
Для обеспечения работоспособности драйвера в раз- сом и известным IP-адресом, который необходим для соз-
деле [SourceDisksNames] необходимо создать всего один дания TCP/IP-порта.
ключ (см. листинг. 5). Для создания сетевого порта на сервере, к которому
будет подключен принтер, существует два способа. Если
Листинг 5. Раздел [SourceDisksNames]

[SourceDisksNames]
1 = "HP",,,""

Раздел [SourceDisksFiles]
В этом разделе перечисляются все файлы дистрибутива,
за исключением CAT-файла.
Шаблон ключа в разделе [SourceDisksFiles]:

filename = diskid[,[ subdir][, size]]

где:
n filename – имя файла (обязательный параметр);
n diskid – идентификатор диска (любое число);
n subdir – подкаталог, в котором находится файл в дист-
рибутиве;
n size – его размер. Рисунок 5. Создание TCP/IP-порта

18
администрирование
необходимо создать несколько пор-
тов одновременно, то рекомендует-
ся войти в свойства сервера печати
и создать пул портов. Для этого не-
обходимо войти в папку «Принтеры»,
расположенную в панели управления
выбрать «Файл → Свойства сервера».
В появившемся диалоговом окне не-
обходимо перейти во вкладку порты
и нажмите кнопку «Добавить порт…»
(см. рис. 4), в выведенном окне требу-
ется выбрать тип порта: в данном слу-
чае – «Standard TCP/IP port».
Для создания порта необходи-
мо нажать на кнопку «Новый порт…».
В появившемся диалоговом окне, не-
обходимо указать IP-адрес нового пор-
та. Имя порта назначается автомати-
чески. Им является IP-адрес с префик-
сом «IP_». Назначаемое имя админист-
ратор может изменить по своему ус- Рисунок 6. Запуск мастера установки принтеров
мотрению (см. рис. 5).
ров мастеру необходимо указать местоположение INF-фай-
Установка принтера на сервере ла. По идентификаторам Class и ClassGuid (см. таблицу)
Для создания принтера на сервере необходимо запустить в разделе [Version], система определяет, что этот файл – ин-
«Мастер установки принтеров». Для этого необходимо в пап- сталлятор драйвера принтера. Если INF-файл создан кор-
ке «Принтеры и факсы», расположенные в «Пуск → Нас- ректно, то на экране появляется диалоговое окно, содер-
тройка → Панель Управления», нажать на кнопку установ- жащее список оборудования.
ка принтера (см. рис. 6). Замечание:
Работа мастера состоит из нескольких шагов. На пер- n Во время работы мастера администратор не увидит раз-
вом шаге необходимо указать порт, к которому будет при- дел, созданный в разделе [Manufacture]. Она будет вид-
соединен принтер. Как уже отмечалось, для реализации на только при повторной установке драйверов (рис. 2
сетевой печати требуется выбрать TCP/IP-порт. Создание и рис. 3).
порта описано в разделе «Создание TCP/IP-порта». n Необходимо наличие ключа Provider с произвольным
На втором шаге мастера начинается процесс установки значением в разделе [Version]. При отсутствии это-
драйвера. Для удобства восприятия приведем блок-схему го параметра во время установки возникает ошибка
работы этого мастера (см. рис. 7). Для установки драйве- (см. рис. 8); драйверы не устанавливаются.

Рисунок 7. Структура INF-файла

№11, ноябрь 2008 19


администрирование
Далее, необходимо Include=NTPRINT.INF
Needs=PSCRIPT.OEM
задать имя создаваемо-
го принтера. По умолча- [DestinationDirs]
DefaultDestDir=66000
нию предлагается имя,
заданное в INF-файле [SourceDisksNames.x86]
Рисунок 8. Ошибка при 1 = "HP",,,""
(строка 11). Затем дает-
отсутствии ключа Provider
в разделе [Version] ся возможность предо- [SourceDisksFiles.x86]
HP1200.ppd = 1,,,,,,,11,3
ставить к нему сетевой HP4100.ppd = 1,,,,,,,11,3
доступ. Поскольку создаваемый принтер сетевой, то необ- HP2727.ppd = 1,,,,,,,11,3
ходимо указать сетевое имя, например, HP1200. На следу- [Strings]
ющем шаге (см. рис. 9) можно указать размещение и ком- Company = "*Island Printers"
ментарий. В качестве комментария рекомендуется указы-
вать название подразделения, в котором физически нахо- Таким образом, в состав дистрибутива входят:
дится сетевой принтер. n PS5UI.DLL;
Затем выводится суммарная информация по устанав- n PSCRIPT5.DLL;
ливаемому принтеру. На следующем шаге осуществляет- n PSCRIPT.HLP;
ся копирование необходимых файлов (cм. рис. 7) и созда- n PSCRIPT.NTF;
ние принтера в папке «Принтеры и факсы». На этом уста- n HP1200.PPD;
новка принтера закончена. n HP2727.PPD;
n HP4100.PPD.
Создание INF-файла с несколькими
принтерами Заключение
Для создания INF-файла для нескольких принтеров, не- Итак, в результате всех манипуляций получим универсаль-
обходимо в разделе [FIRM] (см. рис. 7) создать несколь- ный PS-драйвер для 3 принтеров, количество которых мо-
ко строк по образцу строки 11. Шаблон строки следующий: жет меняться в зависимости от нужд системного админи-
название ключа – отображаемое имя принтера. Его значе- стратора. Созданный драйвер не содержит в себе никаких
ние – имя инсталляционного раздела, в котором указан PPD графических надстроек и характеризуется стабильной ра-
(до запятой) и уникальный идентификатор, который можно ботой. В завершение – совет: при создании своего драйве-
взять из дистрибутива. ра не пишите INF-файл с нуля, а возьмите готовые. Это поз-
Разделы, соответствующие указанному принтеру, так- волит сэкономить массу времени.
же создаются копированием с последующим переименова-
нием имен PPD-файлов. В разделе SourceDisksFiles добав- 1. INF Version Section – http://msdn.microsoft.com/en-us/library/
ляются в существующий список PPD-файлы. В листинге 7 ms794526.aspx.
приведен INF-файл, с помощью которого можно установить 2. System-Supplied Device Setup Classes – http://msdn.microsoft.
три PS-драйвера для HP1200, HP4100 и HP2727. com/en-us/library/ms791134.aspx.
3. INF SourceDisksNames Section – http://msdn.microsoft.com/en‑us/
Листинг 7. Мультидрайверный INF-файл library/ms794354.aspx.
[Version]
Signature="$Windows NT$"
ClassGUID={4D36E979-E325-11CE-BFC1-08002BE10318}
Class=Printer
Provider="temp"

[Manufacturer]
%Company%=firm

[firm]
"Hewlett-Packard 1200" = HP1200.PPD,HP1200_PS_PPD
"Hewlett-Packard 4100" = HP4100.PPD,HP4100_PS_PPD
"Hewlett-Packard 2727" = HP2727.PPD,HP2727_PS_PPD

[HP1200.PPD]
CopyFiles=@HP1200.PPD,PSCRIPT_NT ; PPD-файл.
DataSection=PSCRIPT_DATA ; раздел PSCRIPT
DataFile=HP1200.PPD
Include=NTPRINT.INF ; инсталляция NTPRINT.INF.
Needs=PSCRIPT.OEM ; инсталляция PSCRIPT.

[HP4100.PPD]
CopyFiles=@HP4100.PPD,PSCRIPT_NT
DataSection=PSCRIPT_DATA
DataFile=HP4100.PPD
Include=NTPRINT.INF
Needs=PSCRIPT.OEM

[HP2727.PPD]
CopyFiles=@HP2727.PPD,PSCRIPT_NT
DataSection=PSCRIPT_DATA
DataFile=HP2727.PPD Рисунок 9. Предоставление сетевого доступа к сетевому
принтеру

20
bugtraq

Целочисленное переполнение Множественные уязвимости в Wireshark


в продуктах F-Secure Программа: Wireshark версии до 1.0.4.
Программа: F-Secure Internet Security 2008; F-Secure Опасность: Средняя.
Internet Security 2007 Second Edition; F-Secure Internet Описание: 1. Уязвимость существует из-за ошибки
Security 2007; F-Secure Internet Security 2006; F-Secure Anti- в Bluetooth ACL-диссекторе. Удаленный пользователь мо-
Virus 2008; F‑Secure Anti-Virus 2007 Second Edition; F-Secure жет с помощью специально сформированного пакета вы-
Anti-Virus 2007; F-Secure Anti-Virus 2006; F-Secure Client звать отказ в обслуживании приложения. Уязвимости под-
Security 7.12 и более ранние версии; F-Secure Anti-Virus for вержены версии с 0.99.2 по 1.0.3.
Workstations 7.11 и более ранние версии; F-Secure Linux 2. Уязвимость существует из-за ошибки в Q.931-дис-
Security 7.01 и более ранние версии; F-Secure Anti-Virus Linux секторе. Удаленный пользователь может с помощью спе-
Client Security 5.54 и более ранние версии; Solutions based on циально сформированного пакета вызвать отказ в обслу-
F-Secure Protection Service for Consumers version 8.00 и бо- живании приложения. Уязвимости подвержены версии
лее ранние версии; Solutions based on F‑Secure Protection с 0.10.3 по 1.0.3.
Service for Business version 3.10 и более ранние версии; 3. Уязвимость существует из-за наличия неинициализи-
F‑Secure Home Server Security 2009; F-Secure Anti-Virus for рованных структур данных в Bluetooth RFCOMM и USB‑дис-
Windows Servers 8.00 и более ранние версии; F-Secure Anti- секторах. Удаленный пользователь может с помощью спе-
Virus for Citrix Servers 7.00 и более ранние версии; F‑Secure циально сформированного пакета вызвать отказ в обслу-
Linux Security 7.01 и более ранние версии; F-Secure Anti- живании приложения. Уязвимости подвержены версии
Virus Linux Server Security 5.54 и более ранние версии; с 0.99.7 по 1.0.3.
F‑Secure Anti-Virus for Linux Servers 4.65; F-Secure Anti-Virus 4. Уязвимость существует из-за ошибки при обработке
for Microsoft Exchange 7.10 и более ранние версии; F-Secure Tamos CommView-файлов. Удаленный пользователь может
Internet Gatekeeper for Windows 6.61 и более ранние версии; с помощью специально сформированного файла вызвать
F-Secure Internet Gatekeeper for Linux 2.16 и более ранние вер- отказ в обслуживании приложения. Уязвимости подверже-
сии; F-Secure Anti-Virus for Linux Gateways 4.65; F-Secure Anti- ны версии с 0.99.7 по 1.0.3.
Virus for MIMEsweeper 5.61 и более ранние версии; F-Secure 5. Уязвимость существует из-за ошибки в диссекторах
Messaging Security Gateway 5.0.4 и более ранние версии. PRP и MATE. Удаленный пользователь может вызвать от-
Опасность: Средняя. каз в обслуживании приложения. Уязвимости подвержены
Описание: Целочисленное переполнение обнаружено версии с 0.99.2 по 1.0.3.
при обработке RPM-файлов. Удаленный пользователь мо- URL производителя: www.wireshark.org.
жет с помощью специально сформированного RPM-файла Решение: Установите последнюю версию 1.0.4 с сайта про-
вызвать переполнение буфера и выполнить произвольный изводителя.
код на целевой системе. Для успешной эксплуатации уязви-
мости приложение должно быть сконфигурировано на ска-
нирование файлов внутри сжатых архивов. Множественные уязвимости в Opera
URL производителя: www.f-secure.com. Программа: Opera версии до 9.61.
Решение: Установите исправление с сайта производителя. Опасность: Средняя.
Описание: 1. Уязвимость существует из-за того, что неко-
Множественные уязвимости торые части посещенных страниц недостаточно проверя-
в IBM WebSphere Application Server ются функционалом History Search перед использованием.
Программа: IBM WebSphere Application Server версии Удаленный пользователь может с помощью специально
до 6.0.2.31. сформированного веб-сайта внедрить и выполнить произ-
Опасность: Средняя. вольный код сценария в браузере жертвы и получить дос-
Описание: 1. Уязвимость существует из-за неизвестной туп к ранее посещенным страницам пользователя.
ошибки при включенном функционале fileServing. 2. Уязвимость существует из-за ошибки в реализации
2. Уязвимость существует из-за ошибки при обработке функционала Fast Forward. Удаленный пользователь мо-
HTTP-запросов. Удаленный пользователь может с помощью жет с помощью специально сформированного JavaScript
специально сформированного HTTP-запроса, содержаще- URL выполнить произвольный код сценария в контексте
го слишком длинный заголовок HOST (более 256 байт), вы- запрещенного фрейма.
звать зависание сервера. 3. Уязвимость существует из-за ошибки при блокиро-
3. Уязвимость существует из-за того, что приложение вании сценариев во время предварительного просмотра
некорректно обрабатывает Certificate Revocation Lists (CRL), новостных лент. Удаленный пользователь может получить
что может привести к тому, что отозванные X509-сертифи- доступ к данным в новостных лентах или подписать поль-
каты не буду отвергнуты системой. зователя на произвольные новостные ленты.
URL производителя: www-306.ibm.com/software/webservers/ URL производителя: www.opera.com.
appserv/was. Решение: Установите последнюю версию 9.61 с сайта про-
Решение: Установите исправление Fix Pack 31 (6.0.2.31) изводителя.
с сайта производителя.
Составил Александр Антипов

№11, ноябрь 2008 21


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

Обзор CMS Skeletonz

Сергей Супрунов
Системы управления содержимым (content management system, CMS) с каждым днём
приобретают всё большую популярность. Оно и понятно – интернет-сайты из категории
«творчества» постепенно переходят в «бизнес», и поэтому значительное место начинают
занимать не только вопросы эффективности их разработки, но и последующего
сопровождения.

Н
а рынке уже присутствует до- шей стране, пожалуй, наиболее из- кации веб-разработчика или време-
вольно большое число CMS вестны продукты «1С-Битрикс» (http:// ни на изучение всех их возможностей.
с богатым набором возмож- www.1c‑bitrix.ru). Да и вопросы сопровождения могут
ностей. Среди открытых решений Однако всё это могучие системы, требовать не меньшего внимания.
с разу же вс поминаютс я Joomla! позволяющие создавать сайты поч- Однако иногда такие возможности
(http://www.joomla.org) и Drupal (http:// ти любой сложности и, как следствие, оказываются избыточными, и для за-
drupal.org), из коммерческих в на- требующие определённой квалифи- дачи создания простейшего сайта (па-

22
администрирование
ра новостей в неделю, контактная информация, несколько поставив x11-fonts/freefont-ttf, или просто «натаскать» шриф-
статей-инструкций) хочется найти что-нибудь «поскромнее». ты в систему вручную из «открытых источников»). Путь к ка-
Одну из таких CMS – Skeletonz – мы и рассмотрим. талогу со шрифтами, а также шрифт по умолчанию нужно
будет затем указать в настройках плагина.
Первое знакомство Теперь дело, собственно, за Skeletonz. Поскольку данная
Skeletonz – это одна из несложных и не особо известных CMS написана на языке Python, установка заметно упро-
систем управления содержимым сайтов (CMS), написанная щается (а заодно снижается и число возможных проблем),
на языке Python и использующая для хранения информа- поскольку этапы компиляции и инсталляции будут отсутс-
ции СУБД MySQL. Первоначально основанная на веб-фрей- твовать: скачиваем архив с исходным кодом, распаковыва-
мворке CherryPy (http://www.cherrypy.org) и ORM-библио- ем в рабочий каталог, выполняем правку конфигурацион-
теке SQLObject (http://www.sqlobject.org), в настоящее вре- ного файла general_config.py, и можно запускать:
мя Skeletonz развивается с акцентом на простоту и быст-
родействие. $ fetch http://orangoo.com/skeletonz/uploads/ ↵
skeletonz_beta.zip
В основе последней версии Skeletonz (которая всё ни-
как не выйдет в релиз, оставаясь в beta-статусе) лежит на- skeletonz_beta.zip 100% of 753 kB 96 kBps

бор модулей, разработанных Амиром Салихефендиком


$ tar xzf skeletonz_beta.zip
(Amir Salihefendic, http://amix.dk). Так, веб-фреймворк был $ cd skeletonz_beta
заменён модулями AmiWeb, функцию взаимодействия с ба- $ vi general_config.py
зой данных взял на себя AmiDB (основанный на SQLAlchemy,
http://www.sqlalchemy.org). Неизменной осталась, пожа- Конфигурационный файл хорошо прокомментирован
луй, лишь система разработки шаблонов Cheetah (http:// и содержит лишь необходимый минимум опций. Многие
www.cheetahtemplate.org). из параметров вам нужно будет изменить (или проверить,
Поставляется Skeletonz с собственным веб-сервером, что значения, выставленные по умолчанию, соответству-
что весьма удобно для разработки, но привносит ряд осо- ют вашим желаниям):
бенностей в процесс развёртывания для «промышленной n PORT – задаёт номер порта, на котором будет работать
эксплуатации» (о них мы поговорим ниже). собственный веб-сервер Skeletonz (по умолчанию ис-
Официальный сайт проекта – http://orangoo.com/ пользуется значение 14002; номер порта меньше 1024
skeletonz. потребует прав суперпользователя, поэтому не реко-
мендуется; как обеспечить доступ через стандартный
Инсталляция 80-й порт, мы поговорим отдельно).
Устанавливать будем на FreeBSD (хотя подойдёт любая сис- n TITLE_PREFIX – префикс заголовка, который будет при-
тема, где работает Python). В коллекции портов Skeletonz сутствовать на каждой странице сайта (т.е. тег <title>
не представлена, так что исходные коды – единственный каждой страницы будет формироваться как TITLE_
путь обзавестись этой CMS. Впрочем, ничего сложного PREFIX + имя страницы). Здесь есть одна особенность,
здесь нет. связанная с поддержкой национальных кодировок, о ко-
Для начала нужно установить язык программирова- торой будет сказано чуть позже.
ния Python и СУБД MySQL (или убедиться, что эти пакеты n BASE_URL – базовый адрес сайта (на каждую страни-
уже присутствуют в системе). Жёстких требований к вер- цу сайта будет добавлен тег <base ...> с данным значе-
сиям с точки зрения совместимости нет – интерпретатор нием, что наверняка создаст проблемы, если сайт дол-
Python должен быть не ниже версии 2.4, MySQL – 4.1 и вы- жен быть доступен на разных интерфейсах, имеющих
ше (версии 5.х тоже будут работать нормально). Установка разные DNS-имена).
из портов отлично решит задачу. Также понадобится python- n C H E C K _ LO G I N , A D M I N _ U S E R N A M E , A D M I N _
модуль MySQLdb (http://sourceforge.net/projects/mysql-python), PASSWORD – параметры доступа к административ-
установить его можно также из коллекции портов: /usr/ports/ ным функциям CMS. Понятно, что права доступа к кон-
databases/py-MySQLdb. фигурационному файлу, поскольку он содержит пароль
Дополнительно можно установить графическую библи- в открытом виде, должны быть максимально жёсткими
отеку PIL (Python Image Library, http://www.pythonware.com/ (но достаточными для того, чтобы его могла «прочитать»
products/pil) – без неё Skeletonz работать будет, но не под- сама Skeletonz).
ключится плагин «ImgTitle», позволяющий «на лету» генери- n START_PAGE – имя страницы, которая будет открывать-
ровать графические изображения из заданного текста: ся при первоначальном входе на сайт.
n TABLE_PREFIX, DB_USER, DB_PASSWORD, DB_HOST,
$ fetch http://effbot.org/downloads/Imaging-1.1.6.tar.gz DB_DATABASE – параметры доступа к СУБД. Возмож-
Imaging-1.1.6.tar.gz 100% of 425 kB 102 kBps ность указывать префикс имён таблиц позволяет за-
действовать для Skeletonz одну из существующих баз
$ tar xf Imaging-1.1.6.tar.gz
$ cd Imaging-1.1.6 данных MySQL. Однако, если такая возможность име-
$ sudo python setup.py install ется, лучше всё-таки создать отдельную БД специально
для нужд CMS. Возможности работать с другой СУБД нет
Для полного счастья понадобятся также TTF-шрифты (не считая правки исходников), хотя ходят слухи о гря-
(можно поискать что-нибудь в коллекции портов, например, дущей поддержке SQLite.

№11, ноябрь 2008 23


администрирование
Нужно обратить внимание на следующую особенность – ся следующей командой из каталога, куда распакована
файл general_config.py является обычным сценарием Skeletonz:
Python, поэтому он должен соответствовать синтаксису
этого языка. Не забывайте заключать в кавычки тексто- $ python launch_server.py
вые строки, ставить знаки равенства между именем па-
раметра и значением, соблюдайте правильный регистр При таком запуске сервер останется активным, и вы смо-
имён параметров и внимательно следите за отступами жете в терминале отслеживать все его сообщения. Запус-
(точнее, за их отсутствием – все строки должны начинать- кать сервер в фоновом режиме придётся, например, сле-
ся строго с первой позиции). Кроме того, интерпретатор дующим образом:
Python по умолчанию ожидает увидеть в своём коде ис-
ключительно ASCII-символы, так что если хочется задать $ nohup python launch_server.py &>skeletonz.log &
какую-то строку на русском языке (пожалуй, кроме пара-
метра TITLE_PREFIX такая необходимость нигде возник- Ожидать запросы веб-сервер будет на указанном в кон-
нуть не должна), нужно первой строкой конфигурационно- фигурации порту на всех сетевых интерфейсах. Способа
го файла добавить следующую: запустить его на конкретном интерфейсе я не нашёл, так
что если на всех интерфейсах он вам не нужен, придётся
# -*-coding: utf8 -*- использовать пакетный фильтр для запрета доступа на со-
ответствующие порты. Впрочем, в любом случае для «про-
Причём именно UFT-8, независимо от вашей систем- мышленной» эксплуатации лучше использовать доступ че-
ной локали, – эта кодировка используется по умолчанию рез проски-сервер, о чём мы поговорим в разделе, посвя-
во всех подсистемах CMS, и способа её изменить без глу- щённом вопросам развёртывания сайта на Skeletonz.
бокого погружения в исходный код я не нашёл. Очевидно, Если сообщение о том, что модуль sre устарел, кото-
что и значение параметра в конфигурационном файле при- рое будет появляться при каждом старте сервера, будет
дётся задавать в этой кодировке. Если ваш редактор не под- вас сильно раздражать, можно подправить файл amilib/
держивает UTF-8, можно воспользоваться утилитой iconv simplejson/scanner.py, изменив в шестой строке имя моду-
для последующего преобразования в Юникод: ля sre на re.
Ну всё, теперь можете подключаться на соответствую-
$ iconv -f koi8-r -t utf-8 general_config.koi.py > ↵ щий порт и приступать к знакомству с этой CMS.
general_config.py

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


кать сервер. На стартовой странице вас встретит приятный глазу лого-
тип, уведомление, что this page has no content, и две ссыл-
Первый запуск ки – на официальный сайт Skeletonz и административный
Как я уже упоминал, Skeletonz поставляется со встроен- вход. Последней и воспользуемся, введя логин и пароль,
ным веб-сервером. Запуск этого сервера осуществляет- заданные в конфигурационном файле.
Здесь, щёлкнув по кнопке Admin,
вы сможете выполнять следующие
действия:
n Создавать/удалять пользовате-
лей и группы (User manager и Group
manager соответственно). Пользо-
ватель может принадлежать к одно-
му из двух типов: user (по умолча-
нию бесправный) и admin (по умол-
чанию обладающий всей полнотой
власти).
n Раздавать созданным пользовате-
лям и группам права на редакти-
рование отдельных страниц сайта
(Site manager).
n Смотреть, кто какие файлы загру-
жал (Upload manager), и при жела-
нии удалять загруженное. Однако
выполнить новую загрузку отсюда
нельзя.
n Создавать резервные копии сайта
(Backup manager). Для этого от вас
потребуется лишь указать имя
Пример страницы, тема «Dragon» «снапшота», и после создания вы

24
администрирование
сможете скачать себе архивную копию и сохранить дет просто скопировать в site_plugins (вручную; интерфейс
в надёжном месте. для добавления плагинов не предусмотрен).
n Просмотреть информацию о системных настройках Есть и один довольно неприятный момент – Skeletonz
(Site manager). Здесь же размещена полезная кнопка – выставляет адресом страницы её наименование, то есть
Terminate server, которая позволяет «культурно» оста- если создать страницу «Вопросы и ответы», то URL будет
новить сервер, а не «грохать» его командой kill (правда, выглядеть как «http://mysite.ru/Вопросы и ответы». Вроде бы
при запуске через nohup она не работает, так что в этом даже хорошо, но в некоторых браузерах в строке адреса
случае придётся-таки использовать kill). будет красоваться «http://mysite.ru/%D0%92%D0%BE%D0%
n Просмотреть синтаксис использования различных BF%D1%80%D0%BE%D1%81%D1%8B_%D0%B8_%D0%
плагинов, а некоторые из них и понастраивать (Plugin BE%D1%82%D0%B2% D0%B5%D1%82%D1%8B/».Так что
manager). хоть победа Юникода и неизбежна, но борьба будет дол-
n Наконец, выбрать одну из тем для сайта (Template гой и кровопролитной. Пока же в качестве обходного ма-
manager). К всеобщему сожалению, только выбрать – невра «прокатывает» следующий приём (правда, нет ни-
создавать и устанавливать придётся вручную. каких гарантий, что данная «фича» сохранится в будущих
версиях): всем вновь создаваемым страницам задавайте
Профессионалу «развернуться», конечно, негде, зато имена в латинице и без пробелов (так, как вам хотелось бы
новичок точно не заблудится.
Реклама
Наполнение сайта
Здесь в принципе всё просто – в режиме администрато-
ра (или под именем пользователя, которому делегирова-
ны права на редактирование данной страницы) заходим
на сайт и пользуемся доступными здесь «органами уп-
равления».
«Типовая» иерархия Skeletonz предусматривает нали-
чие двух уровней навигации: главное меню и (опциональ-
но) локальное меню страницы (Page tabs). Каждая ссылка
меню ведёт на определённую страницу. Содержимое стра-
ницы создаётся вручную, используя несложный синтаксис:
скажем, «%(b)text%» означает выделение текста text полу-
жирным шрифтом, «h1.» с последующим текстом – заго-
ловок первого уровня, и т. п. Чтобы посмотреть все воз-
можности, щёлкните кнопку Syntax help. При необходи-
мости никто не запрещает прибегать к HTML-синтаксису
(например, именно так придётся делать таблицы). Некото-
рые сложные элементы (скажем, те же меню) вставляются
как «плагины» (выглядят такие вставки следующим обра-
зом – [pagetabs=news]). Если что-то забыли, можно щёлк-
нуть на значке Add plugin syntax и выбрать нужный плагин
из списка (там же будет подсказка по параметрам).
Немного странно работает вставка изображений. Вам
нужно будет в режиме редактирования контента добавить
вызов плагина: [image=img2], где img2 – некоторое условное
наименование рисунка. Теперь, сохранив страницу, вы по-
лучите на месте изображения иконку-ссылку, позволяю-
щую загрузить файл. После загрузки изображение займёт
своё законное место, а управлять файлом можно будет че-
рез панель управления, раздел Upload manager.
Среди остальных плагинов: блоги, лента новостей (прав-
да, RSS-возможности оказываются практически неработос-
пособны из-за жёсткой привязки к iso-8859-1; править это
придётся в исходниках – amilib/PyRSS2Gen.py, dynamic_dirs/
rss/news_section_news.xml и ряде других файлов), некая па-
родия на wiki, подсветка текста и прочая «мелочёвка». Нель-
зя сказать, что все они близки к совершенству, но обеспе-
чить основную функциональность могут. Подгонка дизайна
обычно сводится к правке соответствующих классов в CSS-
файле шаблона. Для добавления нового плагина (если та-
кой посчастливится найти) каталог с его кодом нужно бу-

№11, ноябрь 2008 25


администрирование
Развёртывание сайта
Встроенный веб-сервер Skeletonz удобен для разработки
сайта, но не слишком хорош для «промышленной эксплуа-
тации». Одна из причин – необходимость в правах root для
запуска на 80-м порту.
Разработчики Skeletonz предлагают два варианта ре-
шения этой задачи – связка с Apache (потребуются моду-
ли mod_rewrite и mod_proxy) и при помощи прокси-серве-
ра Delegate. Смысл обоих сводится к тому, чтобы 80-й порт
прослушивался «сторонним» сервером, работающим в ре-
жиме прокси и пересылающим запросы серверу Skeletonz.
Подробности можно найти на сайте проекта, здесь для при-
мера остановимся на связке с Delegate.
Для начала в general_config.py рекомендуется вклю-
чить кэширование (USE_CACHING и BUILD_CACHE_ON_
START), а также установить переменную MODE в значение
deployment. Также придётся изменить параметр BASE_URL,
Эта же страница в режиме редактирования (тема «Default») чтобы он указывал на адрес сайта с точки зрения клиен-
та.
видеть их URL). А позже можно будет изменить наименова- Теперь следует решить проблему автоматического за-
ние страницы – в заголовках и меню оно изменится, а URL пуска самой Skeletonz. В составе дистрибутива нет и на-
останется прежним. Дело в том, что он сохраняется в дру- мёка на стартовый сценарий (учитывая, что сервер даже
гой SQL-таблице, которая не перезаписывается при изме- не предусматривает работу в режиме демона, это неуди-
нениях страницы – что бы вы ни делали со страницей, её вительно), его придётся писать самому, используя для за-
адрес останется таким, какой она получила при создании. пуска всё тот же «некрасивый» приём с nohup, а для оста-
Сама по себе «фича» очень неприятная, поскольку, если нова – утилиту kill.
возникнет необходимость изменить URL страницы, при- Ну и теперь запускаем Delegate (подробно этот сервер
дётся создавать новую, а старую удалять. Ну или лезть ру- рассматривался в журнале за октябрь 2008 года):
ками в базу MySQL. Так что будьте внимательны и проду-
мывайте структуру сайта заранее. # delegated -P80 MOUNT="/* http://localhost:14002/* ↵
PERMIT="http:localhost:*"

Контроль версий Очевидно, что все эти сложности практически ставят


Несмотря на свою простоту, Skeletonz предоставляет и не- «крест» на использовании данной CMS в условиях вирту-
которые функции контроля версий – изменения каждой ального хостинга, поэтому область её применения сужается
страницы отслеживаются, и вы имеете возможность про- до подконтрольных вам серверов (веб-сайт компании, внут-
смотреть внесённые изменения и при необходимости «от- рисетевой сайт, страничка «кампусной» сети и т. п.).
катиться» на любую версию.
Для использования этих возможностей щёлкните, нахо- Резюме
дясь в режиме администрирования страницы, кнопку «Page Итак, из плюсов: простота и понятность, неплохое быстро-
log». А дальше вопросов возникать не должно. действие, низкое ресурсопотребление. Для себя я отме-
чаю ещё язык Python, хотя это уже довольно субъектив-
Темы но. Недостатки: «сырость» проекта, невысокие темпы раз-
В дистрибутиве Skeletonz присутствуют три темы – Default работки, отсутствие нормального механизма развёртыва-
(на её базе создан официальный сайт CMS – http:// ния, проблемы с «не-Юникодом», не слишком богатый вы-
orangoo.com/skeletonz), сверхупрощённая Dummy и ориги- бор плагинов.
нальная, но слишком неэкономно использующая рабочее Как видите, Skeletonz ещё очень далека от совершенс-
пространство Dragon. Если вас в них что-то не устраива- тва. Если вы планируете (не обязательно прямо сейчас) раз-
ет или же хочется чего-то совсем иного, выход один – соз- вивать свой сайт в направлении интерактивности, если вам
дание своей темы (возможно, на основе одной из сущес- в будущем может понадобиться большая гибкость дизайна,
твующих). если хочется вместо ручной вёрстки шаблонов просто под-
Рассматривать здесь данный процесс не будем. Ска- ключать готовые компоненты – изучайте Joomla! или что-
жу лишь, что «верстать» тему придётся вручную. Помимо то не менее мощное. Если же ваши амбиции в ближайшие
знаний HTML и CSS, вам понадобится умение использо- годы не выходят за рамки небольшого информационного
вать шаблоны Cheetah, а также нужно будет иметь пред- сайта на сервере компании и не пугает вывод «обратной
ставление о «стандартных объектах», предоставляемых трассировки» интерпретатора Python при ошибках плаги-
системой Skeletonz. Если интересно, на официальном сай- нов, то Skeletonz вполне способна взять на себя большую
те есть пример разработки собственной темы. Добавле- часть рутины, оставив вам лишь задачу наполнения сайта.
ние темы сводится к копированию соответствующего ка- А там – кто знает? – может, и появится пара-тройка по-на-
талога в templates. стоящему шикарных тем и мощных дополнений.

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

Lustre FS.
Настраиваем и используем
кластерную систему
в промышленных масштабах
Часть 1

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

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

№11, ноябрь 2008 27


администрирование
Обзор современных Основные современные кластерные системы
кластерных систем Название Производитель/владелец Лицензия Примечания
В этом разделе приведен список ак- GFS RedHat Inc GPL Используется распределенная система
тивно развиваемых кластерных фай- блокировки
ловых систем, включая коммерчес- Lustre Sun Microsystems, Inc GPL Используется центральный сервер метаданных
кие решения. GlusterFS http://www.gluster.org GPL Запускается на уровне пользователя. Все еще
n GFS. Высоконадежная файловая находится в состоянии разработки

система для совместного исполь- Google FS Google, Inc Доступна как часть –
Google API
зования хранилищ Storage Area
Network (SAN). Элементом хране-
ния является блок файловой сис- Этот комплекс предполагался для Когда клиент пытается получить
темы. Для исключения конфликтов построения отказоустойчивого храни- доступ к файлу, он обращается к серве-
при доступе к файлам использует- лища статистического контента для ру MDS за получением ссылки на OSS,
ся распределенный блокировщик веб-сайта. Максимальная скорость где хранится сам файл, и в дальней-
доступа Distributed Lock Manager отдачи такого комплекса достига- шем взаимодействует уже с конкрет-
(DLM). Из-за этого у GFS очень низ- ла 1 gbps, но при при повышении на- ным сервером OSS.
кая масштабируемость и низкая грузки начали сказываться недостат- Когда клиент пытается изменить
производительность при большом ки Distributed Lock Manager, так как пе- файловую систему (например, запись
количестве обращений серверов- ред открытием файла сервер должен файла), то он делегирует эту операцию
клиентов. опросить все серверы для блокиров- серверу MDS. Таким образом мы по-
n LustreFS. Высоконадежная файло- ки какого-то блока файловой системы лучаем практически линейное масш-
вая система с двумя подсистема- и получить подтверждение, что блок табирование (особенно в режиме чте-
ми – сервер метаданных для хра- свободен. В связи с низкой произво- ния), в отличие от блочных кластерных
нения информации о файлах и сер- дительностью я продолжил иссле- систем, таких как GFS, где клиент дол-
вер для хранения самих данных. дование кластерных файловых сис- жен получить разрешение от всех сер-
Используется в больших вычисли- тем и остановился на файловой сис- веров на модификацию блоков, прина-
тельных центрах. Пятнадцать су- теме Lustre. длежащих какому-то файлу.
перкомпьютеров из мирового top30, Это также обеспечивает целост-
включая Blue Gene/L, использу- Обзор структуры ность данных, так как модификацию
ют именно эту файловую систе- файловой системы Lustre данных производит только сервер
му. Элементом хранения является Файловая система Lustre (далее – MDS, а не несколько клиентов, кото-
файл, в отличие от файловой сис- Lustre) состоит из следующих под- рые потенциально могут неправильно
темы GFS. систем: работать с файловой системой.
n GlusterFS. На данный момент на- n Сервер метаданных (MetaData
ходится в активной разработке Server (MDS)), который хранит Установка
и не рассматривается как пригод- имена файлов и каталогов и их В свой работе я использую CentOS, по-
ная для использования в промыш- права. этому описание процедуры установки
ленных масштабах. n Серверы для хранения самих и настройки будет ориентировано на
n Google FS. Высоконадежная фай- данных (Object Storage Servers этот дистрибутив.
ловая система, устойчивая к сбо- (OSSes)). Общий объем доступно- Сначала нужно получить по адре-
ям. Но доступна только для исполь- го пространства Lustre вычисляет- су http://www.sun.com/software/products/
зования в приложениях, написан- ся как сумма пространств на этих lustre/get.jsp следующие компоненты:
ных с помощью инструментария серверах. n ядро Linux с специальными патча-
Google API. n Клиенты. Серверы, которые име- ми для Lustre;
ют доступ к файловой системе n сами исходники Lustre.
Немного истории из личного опы- Lustre.
та по использованию кластерных фай- Я использовал ядро версии
ловых систем. MDS, OSSes и клиенты могут распо- 2.6.16.54 и версию 1.6.5 Lustre, кото-
Автор этих строк успешно устано- лагаться как и на одном сервере, так и рые были доступны по вышеуказанно-
вил и запустил в работу комплекс с ис- на разных серверах. Для взаимодейс- му адресу на момент установки.
пользованием GFS, который включал твия Lustre поддерживает различные
в себя: протоколы, включая Infiniband, TCP/IP Настройка и установка ядра
n HP StorageWorks 1000 как Storage поверх Ethernet, Myrinet и Quadrics. Linux
Attached Network (SAN); OSS поддерживает файловую сис- Здесь процедура настройки, компи-
n пять серверов с операционной сис- тему (на данный момент – ext3, в бу- ляции и установки ядра не отличается
темой Linux; дущем – ZFS) для хранения локаль- от типичных, за исключением следую-
n коммутатор FiberChannel для под- ных данных, которая экспортирует- щих параметров настроек ядра:
ключения серверов и вышеуказан- ся в кластер для операций чтения/за- n должна быть включена поддержка
ного SAN. писи. Quote, ext3;

28
администрирование
На OSS1 выполняем следующие шаги:

mkfs.lustre --ost --fsname=webstorage ↵


—mgsnode=mds.domain.com@tcp0 /dev/sdb

mount -t lustre /dev/sdb /mnt/ost1

где:
n параметр webstorage – имя файловой системы;
n параметр mds.domain.com – адрес сервера MDS (обя-
зательно, чтобы все серверы кластера могли получить
IP по этому имени через DNS или путем прописывания
записей в /etc/hosts) или можно использовать IP-адрес
сервера MDS;
n устройство /dev/sdb – место для хранения самих дан-
ных.

Аналогично выполняем эти же шаги на серверах


oss2.domain и oss3.domain.com, причем разделы для хране-
ния данных могут быть отличными от разделов, используе-
мых на других OSS. И теперь самое главное – подключение
Топология сети и файловой системы Lustre клиентов к нашей кластерной файловой системе:

n должна быть выключена поддержка preemt; mount -t lustre mds.domain.com:/webstorage /mnt/lustre


n также обязательна поддержка модулей.
где:
Настраиваем, компилируем, устанавливаем новое ядро n mds.domain.com – адрес нашего MDS (mds.domain.com);
и перезагружаем. Эта процедура должна быть повторена n webstorage – имя файловой системы;
на всех серверах MDS, OSS и серверах-клиентах. n /mnt/lustre – точка монтирования, где клиенты могут за-
Как вариант компания Sun Microsystems предоставляет писывать и читать файлы.
предкомпилированные компоненты в формате .rpm и .deb.
Конечно, процесс запуска MDS, OSS и клиентов нужно
Настройка и установка программы Lustre прописать в файле /etc/fstab, чтобы при загрузке серверов
Процесс установки программных компонентов Lustre то- активировались соответствующие сервисы (MDS и OSS)
же не отличается особой оригинальностью и выполняется и подключались клиенты к файловой системе.
следующими шагами: Строка для сервера MDS для файла /etc/fstab:

tar -xzvf lustre-1.6.5.tar.gz /dev/sdb /mnt/mdt lustre defaults 0 0


cd lustre-1.6.5
./configure
make Строка для серверов OSS для файла /etc/fstab:
make install

/dev/sdb /mnt/ost lustre defaults 0 0


Настройка и запуск системы
Первым шагом необходимо подготовить сервер MDS, кото- Строка для клиентов для файла /etc/fstab:
рый будет хранить метаданные. Для этого следует выделить
отдельный раздел для этих данных и отформатировать: mds.domain.com:/webstorage /mnt/lustre lustre defaults 0 0

mkfs.lustre --mdt --mgs --fsname=webstorage /dev/sdb


mount -t lustre /dev/sdb /mnt/mdt
Заключение
где: В первой части статьи я рассмотрел первые шаги по со-
n параметр webstorage – имя файловой системы, использу- зданию хранилищ на основе кластерной системе Lustre.
емое для идентификации хранилища внутри кластера; Во второй части я планирую описать такие необходимые
n устройство /dev/sdb – раздел для хранения метаданных. операции, как увеличение надежности хранилища, проце-
дуру создания архивных копий.
Примечание. Lustre FS поддерживает хранение и в фай-
ле, но с небольшой потерей производительности и надеж- 1. http://en.wikipedia.org/wiki/GPFS.
ности из-за дополнительного слоя (файловой системы, 2. http://en.wikipedia.org/wiki/Google_File_System.
где хранится файл данных). 3. http://en.wikipedia.org/wiki/Global_File_System.
Следующий наш шаг – форматирование и подключение 4. http://en.wikipedia.org/wiki/Lustre_(file_system).
серверов OSS, где будут храниться данные. 5. http://en.wikipedia.org/wiki/List_of_file_systems.

№11, ноябрь 2008 29


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

VMware Esxi – виртуализация


уровня предприятия

Виктор Карабедянц
В свете выхода Microsoft Hyper-V компания VMware идет на беспрецедентный шаг, делая
бесплатной систему виртуализации уровня предприятия – Esxi. Давайте разберемся,
что скрывается под этим названием.

Версии Esxi Какая разница между Esx и Esxi?


Сколько же версий у такого продукта как Esxi? Существует Главное отличие Esx от Esxi – это наличие сервисной кон-
две версии Esxi: соли, которая имеет размер около 2 Гб, сам же гиперви-
n Esxi embedded – поставляется на CompactFlash зор VMkernel очень маленький. Сервисная консоль для Esx
с серверами HP, IBM, DELL. строится на базе RedHat, видимо, поэтому многие думают,
n Esxi installable – тот же Esxi, единственное отли- что Esx это разновидность Linux. Esxi cостоит из очень ма-
чие, как видно из названия, – его можно установить ленького по размеру Linux и гипервизора. Для простоты ус-
самому. тановки и администрирования из него было вырезано все

30
администрирование
от «старшего брата». Без большой со-
ставляющей Linux-консоли он занима- Что не вошло в Free License Esxi?  VMware Distributed Resource Scheduler
ет 32 Мб. Подробнее обо всех отличи- Технологии VMware Infrastructure (DRS) позволяет динамически распре-
ях Esx и Esxi можно узнать из офици-  VMotion – технология, которая позво- делять ресурсы между виртуальны-
альной документации [1]. ляет в реальном времени перемещать ми машинами по заданным правилам.
виртуальные машины с одного Esx-сер- Можно организовать дополнительную
Функционал вера на другой, при этом виртуальная мощность путем переноса работаю-
бесплатной версии машина всегда находится в состоянии щих и критически загруженных вирту-
Опишу, какие технологии все-таки онлайн. Виртуальные машины должны альных машин на другой физический
поддерживает Free License Esxi: храниться на дисковом массиве, кото- сервер, используя VMware VMotion.
n VMFS – файловая система, разра- рый видят оба Esx-сервера. Vmotion ле-  Средство централизованного обновле-
ботанная компанией VMware спе- жит в основе таких технологий как DPM, ния Update Manager позволяет упрос-
циально для работы виртуальных DRS, Storage Vmotion, High Availability. тить и автоматизировать обновление
машин. Подробнее об этой фай-  Storage Vmotion позволяет обойти огра- Esx-серверов.
ловой системе можно прочитать ничения с единым хранилищем для вир-  High Availability отслеживает состояние
в официальной документации [2]. туальных машин. Машины могут быть виртуальных машин и в случае сбоя ап-
n Virtual SMP – обеспечивает под- перемещены между хранилищами дан- паратного обеспечения включает их
держку многопроцессорности ных без выключения. на других серверах по заданным пра-
в виртуальных машинах.  У хостов Esx Server появилась воз- вилам.
n Core hypervisor functionality – можность экономии электроэнергии  Consolidated Backup – встроенное сред-
собственно сам гипервизор. при падении загрузки виртуального ство бэкапа виртуальных машин.
центра обработки данных для серверов  Агент Virtual Center. Virtual Center – не-
Устанавливаем Esxi VMware Esx. Это достигается за счет отъемлемая часть Virtual Infrastructure
Перейдем к установке Esxi. Для этого использования функций распреде- от VMware. С помощью Virtual Center
нам понадобится установочный дис- ленного управления питанием VMware можно управлять всеми хостами из од-
трибутив, его можно найти по ссыл- Distributed Power Management, которые ной консоли. Без Virtual Center невоз-
ке [3]. Регистрация на сайте бесплат- позволяют автоматически включать можна ни одна из перечисленных тех-
ная. После регистрации и загрузки серверы Esx при возрастании нагрузки нологий. Продукт требует установки
Esxi на регистрационный адрес будет и при падении переводить хосты в ре- на отдельный сервер, при этом исполь-
автоматически доставлена ссылка жим Standby. зует базу MS SQL.
на ключ, который в дальнейшем пона-
добится. Записываем образ на диск, вставляем в CD/DVD- После установки клиента запускаем приложение и вхо-
привод и загружаем сервер. Полный список поддерживае- дим под учетной записью root, используя пароль, который
мого оборудования можно найти по ссылке [4]. мы вводили на этапе конфигурирования (см. рис. 2).
После загрузки и инициализации оборудования получа- Мы попадаем в консоль управления Esxi. Первое, что мы
ем простенькое меню – понятно, что о красивой графике сделаем, это введем наш лицензионный ключ: как вы ви-
речь не идет. Начнем установку, нажав клавишу <Enter>. дите, без ключа у нас есть всего 60 дней на использова-
Читаем условия лицензии и подтверждаем, нажав кла- ние продукта.
вишу <F11>. Далее нам предлагают выбрать жесткий диск, Переходим на вкладку Configuration, выбираем «License
на который мы можем установить Esxi. Source → Edit…» Переходим по ссылке, которую мы полу-
Выбираем диск, нажимаем <F11> для установки. Вся чили на этапе загрузки инсталляционного дистрибутива,
инсталляция по времени не занимает и 5 минут; после ус- и вводим полученный ключ (см. рис. 3).
тановки необходимо перезагрузить сервер.
Сервер загрузился, необходимо произвести минималь-
ные настройки (см. рис. 1). Установим пароль суперполь-
зователя root и настроим сеть управления: configure root
password и configure management network соответственно.
Производим настройки IP, шлюз, имя хоста и DNS.
После настройки сервер предложит перезапустить
management network для применения настроек. После пе-
резапуска мы с помощью браузера можем перейти по ссыл-
ке http://имя_или_адрес_нашего_Esxi.

Устанавливаем клиент,
настраиваем сервер
В отличие от старшего брата, у Esxi нет консоли управле-
ния через web. Для управления сервером нам необходимо
установить клиент VMware Infrastructure Client, ссылка на ко-
торый находится на странице приглашения. Рисунок 1. Меню настроек

№11, ноябрь 2008 31


администрирование
Сохраняем настройки. Теперь не- ку Console и начинаем устанавливать
обходимо удалить существующую VM операционную систему (см. рис. 6).
Network. Для этого в Properties пер- После установки виртуальной ма-
вой сетевой карты выполним Remove шины нам необходимо установить
VM Network. VMware tools. Все работает и без них,
После всех настроек должна по- но VMware tools содержат дополни-
лучиться конфигурация, показанная тельные драйверы и компоненты, по-
на рис. 5. этому хуже не будет. Для установки на-
жимаем правой клавишей мыши на на-
Создаем виртуальные шу виртуальную машину второй кноп-
Рисунок 2. VMware Infrastructure
машины кой и выбираем меню Install/Upgrade
Client Esxi, как и Esx, обеспечивает виртуа- VMware tools, на гостевой операци-
лизацию всех массовых операционных онной системе запустится инсталля-
систем, таких как: Windows 2008, 2003, ция. Если у вас на гостевой операци-
Vista, XP, 2000, NT 4.0, Linux, Solaris,онной системе по умолчанию выклю-
Netware. Полный список поддержива- чен автозапуск, необходимо перей-
емых операционных систем можно уз- ти на CD/DVD-ROM и вручную запус-
нать по ссылке [5]. тить Setup.exe. Если в качестве гос-
Приступим к установке гостевой тевой операционной системы высту-
операционной системы. Для этого не- пает Linux, монтируем CD/DVD-ROM
обходимо создать виртуальную ма- и запускаем RPM или распаковыва-
шину. На закладке Getting Started на- ем и компилируем tar.gz. Запускаем
жимаем на ссылку Create a new virtual скрипт конфигурирования vmware-
machine, запустится мастер, который config-tools. Для конфигурации могут
поможет нам создать первую вирту- понадобиться gcc и исходники ядра.
альную машину. Мы будем использо- Теперь машина полностью гото-
вать стандартные настройки, введем ва к работе.
имя виртуальной машины, укажем,
где будут храниться ее диски и на- Полный контроль?
Рисунок 3. Настройка лицензий стройки: какая гостевая операцион- Unsupported
ная система у нас будет установлена Данный режим не поддерживается
После этой операции мы получаем (в моем случае Windows 2003 Server), официально, но все же бывают слу-
лицензионный Free License Esxi, не ог- количество процессоров и памяти; се- чаи, когда необходимо получить дос-
раниченный по времени использова- тевая карта VM Network, объем жест- туп на сервер по SSH и исправить на-
ния. На закладке Configuration раз- кого диска виртуальной машины. Все стройки, например для драйверов.
мещаются настройки сети, хранилищ, настройки зависят только от аппарат- Также только из консоли можно соз-
SAN-адаптеров, времени и лицензи- ного обеспечения сервера. давать thin-диски для виртуальных
рования. На закладке Virtual Machines В настройках виртуальной машины машин с помощью vmkfstools (такие
мы можем посмотреть статус вирту- мы можем указать, с какого CD/DVD- диски увеличиваются в объеме толь-
альных машин, количество оператив- привода источника начать инсталля- ко с наполнением данных, по умолча-
ной памяти, которые они потребляют, цию. Это может быть CD/DVD-ROM нию диск занимает все место, отведен-
а также загрузку процессора. Загруз- клиента VMware Infrastructure, серве- ное под него). Возможно, в следующей
ку Esxi-сервера по памяти, процессо- ра, хранилище ISO-образов. версии это будет реализовано в клиен-
ру, диску, сети можно посмотреть на Включаем виртуальную машину те VMware Infrastructure.
закладке Performance. и монтируем нужный нам CD/DVD‑ROM После загрузки Esxi нажимаем
У меня на сервере, как и на боль- либо образ ISO. Переходим на заклад- <ALT> + <F1> и набираем в консоли
шинстве серверов, имеются две сете-
вые карты. Настроим их, как показа-
но на рис. 4. Одна сетевая карта необ-
ходима только для конфигурирования
Esxi (Management Network), вторая бу-
дет использоваться виртуальными ма-
шинами (VM Network).
Переходим на следующую заклад-
ку: Configuration, раздел Network, до-
бавляем сеть – Add Network. В масте-
ре выбираем Virtual Machine, указыва-
ем сетевую карту, которая будет отве-
чать за VM Network. Рисунок 4. Схема сети

32
администрирование
unsupported (символов не видно), вводим пароль root и по-
падаем в консоль. Теперь нам необходимо сделать доступ
через ssh, для этого редактируем файл /etc/inetd.conf:

#vi /etc/inetd.conf

Раскомментируем строку c SSH, сохраняем файл и вы-


ходим. Перезапускаем inetd:

#ps –aux | grep inetd


#kill "имя полученного процесса"
#inetd
Рисунок 5. VM Network и Mananagement Network
Теперь мы можем заходить на наш сервер любым кли-
ентом SSH, но нас будут предупреждать, что данный ре- После восстановления необходимо перезагрузить
жим не поддерживается. сервер.

Бэкап? Заключение
Бэкап Esxi – это сомнительное мероприятие: установка Мы рассмотрели основные настройки Esxi, использова-
5 минут и настройка 10, все машины лежат на диске. Де- ние которого даст вам возможность виртуализации уровня
лать или не делать бэкап? Выбор за вами. Если не хотите предприятия. В следующей статье рассмотрим, как на ос-
в критический момент заниматься настройкой сети и уста- нове Esxi построить отказоустойчивый кластер.
навливать пароли, то создаем бэкап. Для этого нам пона-
добится VMware Infrastructure Remote CLI, найти его мож- 1. ht tp: // kb.vmware.com /selfser vice/microsites /search.do?
но по ссылке [6]. Качаем и устанавливаем. Далее запус- language=en_US&cmd=displayKC&externalId=1006543.
каем скрипт, который по умолчанию находится по адресу 2. http://www.vmware.com/ru/products/vi/esx/vmfs_features.html.
C:\Program Files\VMware\VMware VI Remote CLI\bin: 3. https://www.vmware.com/tryvmware/login.php?eval=esxi&t=1.
4. http://www.vmware.com/resources/techresources/1032.
vicfg-cfgbackup.pl --server <server_name> ↵ 5. http://www.vmware.com/pdf/GuestOS_guide.pdf.
-s <backup_file_name> для создания бэкапа
vicfg-cfgbackup.pl --server <server_name> ↵ 6. http://www.vmware.com/download/vi/drivers_tools.html.
-l <backup_file_name> для восстановления

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

№11, ноябрь 2008 33


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

Создаём сервер сетевой


установки Fedora/RHEL

Андрей Маркелов
Дистрибутив Fedora использует для установки весьма мощную и многофункциональную
программу Anaconda, поддерживающую различные режимы работы и сценарии инсталляции.
Вместе с рядом других технологий, в частности Spacewalk-сервером, вы можете значительно
облегчить процесс развертывания и обслуживания вашей Linux-инфраструктуры.

О
днако сегодня мы оставим шательство человека подразуме- n DHCP-сервер. Предоставляет кли-
Spacewalk-сервер в стороне вает загрузку первой стадии инс- ентам сетевые настройки и указы-
и рассмотрим, как можно авто- таллятора по сети. Большинство вает место, где будут располагать-
матизировать самую начальную ста- выпущенных за последние два-три ся файлы, необходимые для за-
дию жизненного цикла серверов/ра- года сетевых карт и BIOS материн- грузки с использованием Pre-Boot
бочих станций – их развертывание. ских плат поддерживают эту функ- Execution Environment.
При этом в процессе установки мы пос- цию. Как правило, загрузка по сети n TFTP-сервер. Там мы и располо-
тараемся обойтись без вмешательства начинается, если на жестком диске жим все необходимые для нача-
оператора при помощи так называемо- отсутствует загрузчик, при старте ла инсталляции файлы. Нужно за-
го сервера сетевой установки. Для ор- нажата клавиша <F12> или в BIOS метить, что мы можем одновре-
ганизации такого сервера мы исполь- выбран соответствующий пункт менно поддерживать несколько
зуем следующие технологии: меню. Первый вариант – отсутс- вариантов дистрибутива, напри-
n P X E ( P r e - B o o t E x e c u t i o n твие загрузчика на жестком дис- мер, Fedora 9 и Red Hat Enterprise
Environment). Минимальное вме- ке – нас вполне устраивает. Linux 5.

34
администрирование
n Kickstart-файлы. Для каждого из дистрибутивов мож-
но предусмотреть несколько вариантов установки, ко-
торые и будут задаваться при помощи kickstart-файлов.
Kickstart-файл должен быть доступен по сети при помо-
щи одного из протоколов: http/https, NFS, FTP. Необходи-
мый kickstart-файл можно указывать и вручную, но, пос-
кольку мы хотим максимально автоматизировать раз-
вертывание операционной системы, то нужно предус-
мотреть возможность автоматического выбора. Реали-
зовать это можно следующими способами:
 При помощи DHCP-сервера в зависимости от MAC-
адреса клиента.
 При помощи настроек PXE (конфигурационных фай- Рисунок 1. Утилита system-config-netboot
лов первой стадии загрузчика – pxelinux.0) в зависи-
мости от MAC- или IP-адреса, полученного с DHCP- Далее копируем загрузчик в корневую директорию tftp-
сервера. В последнем случае может понадобиться сервера:
резервирование IP-адресов на DHCP-сервере.
 При помощи Spacewalk-сервера. Мы не будем рас- # cp $(rpm -ql syslinux | grep pxelinux.0) ↵
/var/lib/tftpboot/
сматривать данный вариант, но заметьте, что в за-
висимости от того, в какой из диапазонов IP-адресов Создадим сервер инсталляции для двух дистрибутивов.
попадает клиент, Spacewalk-сервер может выдавать В качестве примера возьмем Fedora 9 и Red Hat Enterprise
свой kickstart-файл. При этом его содержимое будет Linux 5.1, но пойдет и любой другой дистрибутив, использу-
создаваться «на лету» из базы данных, а на DHCP- ющий Anaconda. Скопируем в /tftpboot ядро и initrd-образы
сервере или при помощи настроек pxelinux.0 можно обоих дистрибутивов, которые расположены в директории
будет всегда задавать одно и то же месторасполо- /images/pxeboot/ установочного диска. Предположим, оба
жение этого «динамического» kickstart-файла. ISO-образа дистрибутивов смонтированы в /mnt/loop/:
n Сетевой репозиторий. Файлы дистрибутива, доступ-
ные по http, NFS, FTP или по всем трем протоколам. Быс- # mkdir /var/lib/tftpboot/{fedora9,rhel51}
# cp /mnt/loop/RHEL_5.1/images/pxeboot/* ↵
трее всего установка будет производиться при выборе /var/lib/tftpboot/rhel51/
метода установки по NFS. Медленнее всего – по http. # cp /mnt/loop/Fedora9/images/pxeboot/* ↵
/var/lib/tftpboot/fedora9/

Теперь попробуем собрать все компоненты вмес- Поскольку у нас два варианта дистрибутивов, предоста-
те. Не буду подробно объяснять ключи командной строки вим оператору возможность выбора. Пусть в качестве ин-
или подробности работы протоколов – ответы на эти вопро- формации наш загрузчик выводит на экран возможные ва-
сы можно найти в обширной документации, включая офи- рианты. Создадим текстовый файл /var/lib/tftpboot/boot.msg
циальную от Red Hat. Приведу рецепт решения конкретной примерно следующего содержания:
задачи. Также обратите внимание на утилиту system-config- --------------------------
netboot, которая может упростить некоторые шаги. Однако MY SETUP MENU FOR PXE BOOT
в учебных целях не будем пользоваться GUI. Подробно ис- --------------------------

пользование system-config-netboot описано в руководстве f - install Fedora 9


системного администратора из комплекта официальной до- r - install RHEL 5.1
q - boot normally
кументации Red Hat Enterprise Linux (см. рис. 1).
Для начала установим и настроим автоматический за- Кстати, в файле /usr/share/doc/syslinux-*/syslinux.doc (по-
пуск tftp-сервера: мимо опций, использующихся в конфигурационном файле
загрузчика) описано, как сделать информационное сообще-
# yum -y install tftp-server ние более «веселым», добавив цвета, страницы, переклю-
# chkconfig tftp on
# service xinetd start чаемые при помощи функциональных клавиш, и различные
управляющие символы. Теперь пришло время создать кон-
По умолчанию корневой директорией tftp-сервера фигурационный файл загрузчика, пользуясь все тем же ру-
в RHEL5 выступает /tftpboot, а в Fedora 9 – /var/lib/tftpboot. ководством /usr/share/doc/syslinux-*/syslinux.doc:
Если вы решите использовать директорию, отличную от ус-
тановленной по умолчанию, не забудьте прописать соответ- # mkdir /var/lib/tftpboot/pxelinux.cfg
# vi /var/lib/tftpboot/pxelinux.cfg/default
ствующие правила в своем модуле SELinux.
Скопируйте в избранный каталог необходимые файлы. Наш конфигурационный файл, используемый PXE
Для начала нам необходима первая стадия загрузчика – по умолчанию, будет содержать следующие строки:
файл pxelinux.0. Документация на загрузчик и сам файл
привносятся в систему пакетом syslinux: default q
display boot.msg
prompt 1
# yum -y install syslinux timeout 100

№11, ноябрь 2008 35


администрирование
Остальные настройки используют-
ся в соответствии с вашими пожела-
ниями. Конфигурирование DHCP-сер-
вера, как и написание kickstart-файла,
выходит за рамки этой статьи. Предпо-
лагается, что читатель может самосто-
ятельно скопировать содержимое дис-
трибутива на сервер и сделать его до-
ступным по NFS, FTP или http. В слу-
чае необходимости смотрите соответс-
твующую документацию по настройке
этих служб.
Создание kickstart-файла также
не должно представлять сложностей.
Его формат подробно описан в доку-
ментации Red Hat. Проще всего соз-
дать его при помощи GUI-утилиты
system-config-kickstart или взяв за ос-
нову /root/anaconda-ks.cfg (cм. рис. 2).
Рисунок 2. Утилита system-config-kickstart Итак, все готово для начала сете-
вой установки. Включаем тестовую ра-
label q бочую станцию или запускаем виртуальную машину и на-
localboot 0
блюдаем следующую картину (см. рис. 3).
label f Вводом имени соответствующего пункта меню запус-
kernel fedora9/vmlinuz
append initrd=fedora9/initrd.img ↵ каем инсталляцию соответствующего варианта дистри-
ks=http://192.168.0.100/f9.cfg бутива.
label r Как вы видите на рис. 3, до использования конфигу-
kernel rhel51/vmlinuz рационного файла default загрузчик ищет конфигурацион-
append initrd=rhel51/initrd.img ↵
ks=http://192.168.0.100/rhel51.cfg ные файлы, соответствующие вашему MAC-адресу, IP-ад-
ресу и подсетям. Этим можно воспользоваться для созда-
Вариант загрузки с меткой q описывает загрузку с ло- ния конкретных комбинаций «дистрибутив/kickstart-файл»
кального диска. Данный вариант используется по умол- для определенных серверов или рабочих станций. Управ-
чанию. Для загрузки ядра Fedora или RHEL необходи- лять привязкой IP-адресов к конкретным машинам можно
мо выбрать f или r. Заметьте, мы воспользовались са- в конфигурационном файле DHCP-сервера, используя ре-
мым простым способом предоставления информации зервирование IP-адресов и классы вендоров.
о kikstart-файле через параметры ядра, передаваемые Приведенное решение является лишь «заготовкой»,
опцией append. В случае использования Spacewalk-сер- на основе которой вы можете самостоятельно собрать нуж-
вера можно было бы обойтись одним «динамическим» ную вам конфигурациию сервера инсталляции. Следую-
путем к kikstart-файлу. Без него, если необходимо, мож- щим шагом я бы порекомендовал попробовать посмотреть
но добавить еще несколько меток, указывающих на дру- в сторону Spacewalk-сервера, являющегося Open Source-ре-
гие файлы, например: шением для управления Linux-инфраструктурой и помимо
прочих задач также служащего для развертывания серве-
label f2 ров и рабочих станций.
kernel fedora9/vmlinuz
append initrd=fedora9/initrd.img ↵
ks=http://192.168.0.100/f9_2.cfg

Следующий компонент нашего сервера – служба DHCP.


Устанавливаем его:

# yum -y install dhcp


# cp /usr/share/doc/dhcp-*/dhcpd.conf.sample ↵
/etc/dhcpd.conf

С учетом того, что имя kikstart-файла передается без по-


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

filename "pxelinux.0";
next-server 192.168.0.100;
Рисунок 3. Процесс загрузки PXE

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

Технология борьбы со спамом DKIM

Сергей Яремчук
Несмотря на обилие различных технологий борьбы со спамом, последний до сих пор
составляет львиную долю почтового трафика. В 2005 году на рассмотрение IETF в качестве
стандарта аутентификации отправителя был предложен еще один стандарт DomainKeys
Identified Mail (DKIM), разработчики которого предлагают свой способ решения этой задачи.

С
егодняшние антиспам-решения ленные ресурсы. Именно поэтому на- в Kaspersky Security Bulletin 2007, доля
проверяют сообщение на всем ибольший интерес всегда представ- спама в почтовом трафике в среднем
пути его следования, начиная ляли технологии, позволяющие отсе- составила 79% [5]. Отслеживать «бе-
с проверки легитимности пользова- ивать нежелательные сообщения в са- лые» и «черные» адреса и домены не-
теля на этапе отправки, заканчивая мом начале пути. Предложено несколь- просто, к тому же нередки случаи за-
фильтрами, встроенными в почтовый ко методов – аутентификация пользо- несения в balcklist нормальных адре-
клиент. Кроме достоинств каждый ме- вателя перед отправкой сообщения, сов. Количество серверов, использу-
тод имеет и свои недостатки, часто ме- рекомендованная в RFC 2505, цвет- ющих технологии SPF и SenderID, со-
шающие его полноценному исполь- ные списки [1, 2], а также подтверж- ставляет лишь каплю в море, поэтому
зованию. О различных решениях уже дение прав отправителя – SenderID они часто используются только с од-
не раз говорилось на страницах жур- (RFC 4407, поддерживается Microsoft) ной целью – «обелить» отправителя.
нала, потому заострять внимание на и SPF (RFC 4408, OpenSource) [3]. Ка- Вместо блокировки адреса, не про-
них не буду. залось бы, каждая в отдельности мог- шедшего проверку, ему просто начис-
На дальнейшую обработку приня- ла бы решить проблему спама, но, как ляют штрафные балы.
того к доставке SMTP-сервером спам- видно, в реальности это далеко не так. Но если посмотреть на путь со-
сообщения будут затрачены опреде- По информации, опубликованной общения со стороны пользователей,

№11, ноябрь 2008 37


администрирование
то можно сделать вывод, что единый гарантированный ме- торые определяются полем selector в записи DKIM-Signature.
тод определения отправителя – PGP-подпись, все осталь- Возможность записи нескольких ключей позволяет: исполь-
ное можно легко подделать. Это и явилось основой тех- зовать разные ключи для подписи сообщений с субдоме-
нологии DKIM, предложенной Yahoo, Cisco Systems, при нов, локальной доставки, а также безболезненно произво-
партнерстве Sendmail и PGP, описанной в трех RFC4871 дить смену ключей.
(DomainKeys Identified Mail (DKIM) Signatures), RFC4686 Открытый ключ добавляется в txt-поле DNS-записи
(Analysis of Threats Motivating DomainKeys Identified Mail и при поступлении письма запрашивается получателем,
(DKIM)), RFC5016 (Requirements for a DomainKeys Identified который проверяет, действительно ли подпись была сгене-
Mail (DKIM) Signing Practices Protocol). рирована для этого домена, указанного в адресе отправи-
теля. В зависимости от результата сообщение может быть
Суть DKIM принято, отвергнуто или добавлены штрафные балы в ан-
В основу DKIM легли две разработки – технология тиспам-фильтр. Таким образом DKIM существенно отлича-
DomainKeys от Yahoo и система Internet Identified Mail от ется от PGP и S/MIME, которые являются средствами за-
Cisco. Принцип ее в двух словах очень прост. Каждое сооб- щиты, ориентированными больше на индивидуальное ис-
щение, циркулирующее в такой системе, снабжается циф- пользование.
ровой подписью, которая не только удостоверяет отправи- В DKIM используются только проверенные временем
теля, но и гарантирует, что подписанная часть не была из- криптографические инструменты. В настоящее время для
менена. Сам процесс обмена выглядит стандартно и напо- цифровой подписи спецификация определяет два алгорит-
минает работу с PGP. Владелец домена создает пару клю- ма: RSA-SHA1 и RSA-SHA256, хотя в будущем возможна
чей – открытый и приватный. Приватный используется на поддержка и других алгоритмов. Длину ключа рекоменду-
SMTP-сервере для подписи сообщения, которая передает- ется выбирать в диапазоне 1024 до 2048 бит. Ключ длиной
ся в заголовке DKIM-Signature и связана с доменом отпра- 512 байт не рекомендуется из-за меньшей устойчивости,
вителя. Запись выглядит примерно так: а 4096-битовый не поместится в максимальный 512-байто-
вый DNS UDP-пакет. При выборе следует также учитывать,
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
d=example.com; s=gamma; что большее значение ключа потребует большей вычисли-
h=domainkey-signature:received:received:message-id:date:from:to тельной мощности на обработку каждого сообщения.
:subject:mime-version:content-type:content-transfer-encoding
:content-disposition; Новая технология совместима с существующей инфра-
bh=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=; структурой и не требует коренной перестройки сервисов
b=rgAlZu……20bvEc=
(кроме адаптации SMTP) и изменения протоколов, может
Всего RFC4871 определяет 11 возможных ключей. быть введена постепенно. Подписанное сообщение полно-
Также один домен может иметь несколько сигнатур, ко- стью «автономно», работа DKIM не зависит от PKI или ка-

Рисунок 1. Мастер создания ADSP-записи

38
администрирование
ких-либо служб, ключ берется напря-
мую из DNS-записи и не должен под-
тверждаться третьей стороной. Орга-
низация, использующая DKIM, полно-
стью несет ответственность за работу
своего сервера, подпись лишь означа-
ет то, что кто-то отвечает за конкрет-
ное сообщение.
Разработчики утверждают, что тех-
нология на данном этапе относит-
ся скорее к дополнительным. Нали-
чие подписи в сообщении ни к чему
не обязывает принимающую сторону,
не обеспечивает защиту после про-
верки подписи и не может никак пов-
лиять при повторной передаче сооб-
щения, если отправитель и получатель
изменились.
Поэтому RFC рекомендует сообще-
ния с серверов, не поддерживающих
DKIM, обрабатывать обычным обра-
зом. Учитывая малый процент внедре-
ния, это вполне логично, а значит пись-
ма со спамом также смогут проходить Рисунок 2. Ответ на тестовое сообщение
эту проверку и без других технологий
борьбы со спамом не обойтись. Ни- ко часть сообщения, доступную на мо- сей – это дополнительная нагрузка на
кто не мешает спамеру создать свои мент подписания. Идеальный случай – сервер, как передающей, так и прием-
DKIM-совместимые SMTP и DNS-сер- письмо, отправляемое пользователем, ной сторонам. Поэтому наиболее опти-
веры, которые можно будет использо- подписанное полностью и отправлен- мальным вариантом считается все-та-
вать в рассылках или рассылать спам ное по назначению. Но разные компо- ки заверение всего письма на самом
со взломаных компьютеров, являю- ненты почтового сервера могут добав- последнем этапе передачи.
щихся с точки зрения DKIM легальны- лять новые поля, например списки рас- Теперь рассмотрим прием подпи-
ми. Но такие ресурсы обычно быстро сылки. Таким образом, «новое» пись- санного сообщения. Так как ключи
выявляются и блокируются при помо- мо уже не может быть рассмотрено как могут быть заменены, рекомендуется
щи других технологий, а использова- правильное. Поэтому подпись следует проверку производить как можно рань-
ние своего DKIM потребует некоторой добавлять на самом последнем этапе ше. Оптимальным вариантом является
легализации и затрат, что очень невы- отправки сообщения, чем ближе вы- проверка «на лету» в ходе SMTP-сес-
годно спамерам, желающим остаться ход, тем меньше вероятность появле- сии после получения всего письма. Это
незаметными. Таким образом, в насто- ния неподписанных записей. позволяет не занимать локальную оче-
ящее время технологию DKIM можно Еще один метод подписи, пред- редь сообщениями, не прошедшими
отнести к вспомогательным и ее зада- ложенный разработчиками, – ука- проверку, упростив дальнейшую рабо-
ча аналогична SPF и SenderID – «обе- зать длину действительного сообще- ту антиспам-фильтров. А передающая
лить» адрес отправителя. Хотя с увели- ния в заголовке. Все, что будет добав- сторона будет знать результат при-
чением поддерживающих эту техноло- лено в пределах подписанной длины, ема уже в ходе сеанса. Но очень часто
гию систем она может измениться будет вполне легальным. Это решает SMTP-серверы перегружены. Теперь
проблему с теми же списками рассыл- если добавить к этому еще и проверку
Когда подписывать ки, но у злоумышленника появляется DKIM-подписи (запрос ключа на DNS,
и проверять? возможность изменить тело сообще- вычисление и сравнение результата),
Несмотря на внешнюю простоту DKIM, ния. Поэтому разработчики стандарта то время на всю операцию может уве-
при развертывании реальной системы не рекомендуют указывать длину за- личиться ровно настолько, что переда-
следует ответить на несколько вопро- веренного сообщения. Хотя выходом ющая сторона, не дождавшись ответа,
сов, ответы на которые могут повли- из такой ситуации может быть наличие закроет SMTP-сессию.
ять на работу всей системы. Напри- двух подписей. Первая заверяет огра- Повторная попытка может привес-
мер, на каком этапе и что подписы- ниченную часть письма, вторая добав- ти к аналогичному результату. Кроме
вать в сообщении. Во избежание зло- ляется уже на самом последнем ша- этого проверка DKIM на этапе SMTP-
употреблений DKIM-подпись должна ге и распространяется на все сообще- сессии упрощает DDOS-атаку на сер-
обязательно включать данные из по- ние. Каждая такая подпись сама по се- вер, ведь, чтобы загрузить систему,
лей From, Sender, Subject, Date, To. бе автономна и обрабатывается после- потребуется меньшее количество за-
При этом подпись удостоверяет толь- довательно. Но наличие двух подпи- просов.

№11, ноябрь 2008 39


администрирование
Поэтому оптимальным выходом из ситуации является Параметр -d позволяет указать домен, сообщения с ко-
проверка в одной из очередей сервера или обработка пись- торого будем подписывать, а -s – название файла ключа.
ма антиспам-фильтрами. В результате работы в текущем каталоге появятся два
файла: example.com.txt и example.com.private, в которых со-
Установка DKIM с Postfix держатся открытый и закрытый ключи. В качестве имени
В настоящее время существуют два проекта, позволяю- ключа лучше всего использовать название домена. Так бу-
щие реализовать DKIM. Первый [6] предлагает Perl-мо- дет меньше путаницы при работе с несколькими доменами,
дуль Mail-DKIM, реализующий поддержку протокола DKIM кроме прочего этого требуют и настройки dkim-filter.
и SMTP-прокси DKIMproxy. Последний состоит из двух час- Содержимое key.txt следует поместить в файл настрой-
тей, обеспечивающих подпись исходящих и проверку входя- ки зон DNS-сервера. После создания он выглядит так:
щих (Before-Queue или After-Queue) сообщений (при помо-
щи Mail-DKIM). Изначально DKIMproxy написан под Postfix, $ cat example.com.txt
но должен работать с любым другим почтовым сервером. example.com._domainkey IN TXT "v=DKIM1; g=*; k=rsa;
Второй проект – dkim-milter [7] предлагает milter-интер- p=MIGf......pQSA/wIDAQAB" ; ----- DKIM example.com for example.com

фейс, используемый в Sendmail и Postfix. Cостоит из моду-


ля dkim‑filter и библиотеки libdkim, реализующей поддерж- Запись DKIM является поддоменом _domainkey, по-
ку DKIM и DomainKeys. этому перед добавлением в TXT-поле результат работы
Для примера, настроим DKIM, использовав связку dkim‑genkey следует преобразовать к виду:
Posfix + dkim-filter на примере Ubuntu server 8.04. Установка
указанных приложений из исходных текстов довольно про- _domainkey.example.com IN TXT "v=DKIM1; g=*; k=rsa; ↵
p=MIGf......pQSA/wIDAQAB";
ста, поэтому заострять внимание на этом не буду, тем бо-
лее что поиск в репозитарии приводит к удаче. Кроме этой записи рекомендуется добавить DKIM
Author Domain Signing Practices (ADSP). Это поле не опи-
$ sudo apt-cache search dkim сано в RFC4871, обсуждается в документе [9] и призва-
dkimproxy – an SMTP-proxy that signs and/or verifies emails, но уменьшить неразбериху на первых порах продвижения
using the Mail::DKIM module
libmail-dkim-perl – cryptographically identify the sender
DKIM. Администратор домена публикует политику исполь-
of email – perl library зования DKIM в DNS-записи. Примерно так:
libdkim0 – cryptographically identify the sender of email
dkim-filter – DomainKeys Identified Mail (DKIM) Milter implementation
libsmdkim-dev – DomainKeys Identified Mail (DKIM) library implementation _asp._domainkey.example.com IN TXT ↵
libsmdkim2 – DomainKeys Identified Mail (DKIM) library implementation "dkim=OPEN"

Кстати, команда: Поле «dkim=OPEN/CLOSED/LOCKED» и определяет


политику, то есть разрешена (по умолчанию) или запре-
$ sudo apt-cache search milter щена отправка неподписанных сообщений в этом доме-
не. Поле LOCKED указывает, что в этом домене сообще-
показывает наличие и пакета dk-filter, реализующего под- ния всегда подписываются и в случае обнаружения непод-
держку DomainKeys. Учитывая, что технологию DomainKeys писанного сообщения его нужно блокировать. Для удобс-
уже используют Google и Yahoo, к ней также стоит при- тва создания записи можно использовать веб-страни-
смотреться. цу ADSP Wizard (см. рис. 1) на Sendmail tools [8]. Правда,
Для упрощения будем считать, что Postfix уже установ- там указываются отличные от документа [9] значения по-
лен и настроен. Устанавливаем компоненты: ля dkim=unknown|all|strict, фигурировавшие в документах
на первых порах.
$ sudo apt-get install dkim-filter Копируем закрытый ключ на свое место.

При настройке dkim-filter получаем сообщение: $ sudo mv -f key.private /etc/postfix

Starting DKIM Filter: dkim-filter: /etc/dkim-filter.conf:


at least one selector and key required for signing mode Конфигурационный файл демона DKIM называется /etc/
See /usr/share/doc/dkim-filter/README.Debian for help dkim-filter.conf, по умолчанию в нем раскомментирован толь-
Starting for DKIM verification only
ко один параметр. Поэтому перед запуском его необходи-
показывающее, что демон пока настроен только на про- мо отредактировать.
верку подписи.
Следующим шагом необходимо сгеренировать пару # Запись сообщений в syslog
Syslog yes
ключей. Это можно сделать средствами OpenSSL:
# Маска доступа для создаваемого сокета
$ openssl genrsa -out private.key 1024 # UMask 002
$ openssl rsa -in private.key -pubout -out public.key
# Путь к UNIX-сокету или адрес TCP-сокета inet:port[@host]
# по умолчанию 127.0.0.1:8891
Но удобнее для этих целей использовать утилиту # Socket /var/run/dkim-milter/dkim.sock
dkim‑genkey, поставляемую вместе с dkim-filter:
# В случае проблем с доступом можно запускать dkim-milter
# от имени определенного пользователя
$ dkim-genkey -d example.com -s example.com # UserID userid[:group]

40
администрирование
Background yes milter_default_action = accept
milter_protocol = 2
# Список доменов, перечисленный через запятую, возможно smtpd_milters = inet:localhost:8891
# использование шаблона "*" non_smtpd_milters = inet:localhost:8891

Domain example.com
Если используется UNIX-сокет, то последние две стро-
# Как вариант указывается файл, в котором содержится
# список доменов по одному в строке ки заменяем на:
# Domain /etc/postfix/dkim-domain.conf
smtpd_milters = unix:/var/run/dkim-milter/dkim.sock
# Файл, содержащий закрытый ключ non_smtpd_milters = unix:/var/run/dkim-milter/dkim.sock
KeyFile /etc/postfix/key.private

# Если есть, указываем и селектор Перезапускаем Postfix:


# Selector 01.01.2008
$ sudo /etc/init.d/postfix restart
# Если ключей несколько, заносим их перечень в файл,
# при его установке параметр KeyFile игнорируется
# запись выглядит как отправитель:домен:полный путь
# к файлу закрытого ключа Для проверки работоспособности системы разработчики
# *example.com:example.com:/etc/postfix/key.private создали специальный адрес autorespond+dkim@dk.elandsys.
# Если файл ключа не будет найден, проверяются файлы
# с окончанием ".pem" и ".private" com, отсылаем на него пустое сообщение и в ответ получа-
# KeyList /etc/postfix/dkim-keys.conf ем информацию, работает или нет DKIM (см. рис. 2).
# Перезапускать ли при ошибках В настоящее время найти запись, свидетельствую-
AutoRestart no щую о поддержке SPF и даже DomainKeys, гораздо проще,
# Режим работы - s (signer, подпись) чем DKIM.
# и v (verifier, проверка, по умолчанию)
Mode sv $ host -t txt _domainkey.dk.elandsys.com
# Подписывать ли сообщения, отправляемые из поддоменов, _domainkey.dk.elandsys.com descriptive text "t=y\; o=~\;
# описанных в Domain r=info+dk@elandsys.com"
SubDomains yes

# Тайм-аут DNS
DNSTimeout 5 И подобный ответ можно считать удачей.

# По умолчанию для подписи используется алгоритм rsa-sha256 $ host -t txt mail._domainkey.markley.org


# SignatureAlgorithm rsa-sha256
mail._domainkey.markley.org descriptive text "v=DKIM1\; k=rsa\;
# Отключаем ASPD t=y\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDY8qM22+BZVHexjzQ
#UseASPDiscard no UufK/E1TIZbJgRt98MeMiK8CI0W01mJ/C71Ysh2EyK8CHw2wWKqij9ewHIj/Oj/
+diW0SIc0B4rfBPw1rAYaXvqX725/NSVVbKOhjujLk4cDec5NclR0D8t0dwwrk9rb-
# Всегда добавлять заголовок Authentication-Results fIIjPrlpfXGPgTbfaDP0tvR9XPwIDAQAB
AlwaysAddARHeader yes

# Статистика
Statistics /var/log/dkim-filter/dkim-stats Учитывая, что технология еще окончательно не утверж-
дена и находится в постоянном развитии, до массового
# Проверка необходимых заголовков сообщения
RequiredHeaders yes внедрения еще, наверное, очень далеко. Также стоит от-
метить, что, по сути, они не могут решить проблему спама.
# Что делать с письмами с неверной подписью:
# accept (по умолчанию), discard, tempfail, reject. Их внедрение лишь позволяет защититься от подделки ад-
# On-BadSignature reject реса, предоставляя дополнительную информацию для при-
нятия решения антиспам-фильтрами.
Это только основные параметры, некоторые другие
позволяют указать специфические для MTA настрой- 1. Супрунов С. Greylisting: панацея от спама или «мыльный пу-
ки, пользователей, чьи сообщения должны подписывать- зырь»? //Системный администратор, №7, 2006 г., – С. 12-15.
ся/проверяться, и так далее. Подробно они расписаны 2. Барабанов А. Борьба со спамом как фактор, снижающий на-
в «man dkim‑filter.conf». дежность почтовой доставки. //Системный администратор, №8,
После настройки запускаем dkim-filter: 2007 г., – С. 6-13.
3. Яремчук С. Sender Policy Framework как средство борьбы со спа-
$ sudo /etc/init.d/dkim-filter start мом. //Системный администратор, №4, 2007 г., – С. 34‑39.
Starting DKIM Filter 4. Сайты с информацией о DKIM – http://www.dkim.org, http://tools.
ietf.org/wg/dkim.
По умолчанию он будет прослушивать порт 8891 5. Kaspersky Security Bulletin 2007. Спам в 2007 году – http://www.
на localhost: viruslist.com/ru/analysis?pubid=204007593.
5. RFC4871 – http://www.ietf.org/rfc/rfc4871.txt.
$ netstat -an | grep 8891 6. Сайт проекта DKIMproxy – http://dkimproxy.sourceforge.net.
tcp 0 0 127.0.0.1:8891 0.0.0.0:* LISTEN 7. Сайт проекта dkim-milter – http://sourceforge.net/projects/dkim‑milter.
8. Инструменты DKIM на сайте Sendmail – http://www.sendmail.org/
Теперь необходимо настроить Postfix (поддерживает dkim/tools.
milter с версии 2.3.0), добавляем в /etc/postfix/main.cf сле- 9. DKIM Author Domain Signing Practices (ADSP) – http://tools.ietf.
дующие строки: org/html/draft-otis-dkim-adsp-04.

№11, ноябрь 2008 41


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

Почтовый шлюз
для MS Exchange 2007
на базе FreeBSD 7.0 + Postfix 2.4

Антон Сенько

Недавно фирма, в которой я работаю, перешла на корпоративную почту на базе MS Exchange 2007.


Тут же возник вопрос: как защитить почтовый сервер от внешних атак и спама. Об этом и пойдет
речь в статье.

42
администрирование
Почему так?
Не секрет, что MS Exchange – мощное средство для постро-
ения корпоративной почты уровня предприятия, и все боль-
ше фирм переходят на это решение от компании Microsoft.
Но вместе с этим множественные проблемы с безопаснос-
тью продуктов Microsoft могут порядком осложнить жизнь
системному администратору, поэтому обычно почтовый
сервер прячется за какой-либо пограничный сервер, кото-
рый работает в качестве SMTP-шлюза – то есть, пересы-
лает письма изнутри периметра безопасности в Глобаль- Рисунок 1. Опции сборки Postfix
ную сеть и наоборот.
В MS Exchange 2007 появилась новая роль сервера – Поскольку мы хотим проверять существование поль-
Edge Transport Server, призванная выполнять функции пог- зователя в Active Directory, собираем Postfix с поддержкой
раничного сервера, но для ее использования необходим вы- OpenLDAP, для этого нужно отметить соответствующую оп-
деленный сервер, работающий под управлением Windows цию в открывшемся диалоге (см. рис. 1):
2003 Server SP1 либо выше. Поэтому для небольших фирм
использование Edge может оказаться неприемлемым, так gw# make install clean
gw# rehash
как это связано с еще большими финансовыми вливани-
ями: сервер, лицензия для серверной Windows, антивирус. После установки в директории /usr/local/etc/postfix по-
Кроме прочего, все это не плохо бы спрятать за ISA. Отлич- явятся конфигурационные файлы, находим main.cf и пра-
ной альтернативой может стать любая Linux/UNIX-система вим параметры:
с установленным MTA Postfix.
# /usr/local/etc/postfix/main.cf
Постановка задачи myhostname = server.company.ru
Итак, что хотим: mydomain = company.ru
myorigin = $mydomain
n каждый пользователь в фирме должен иметь корпора- mydestination = $myhostname
тивную почту; mynetworks_style = host
mynetworks = 192.168.1.1/32, 127.0.0.0/8
n переписку с внешним миром могут вести только поль-
зователи с внешним почтовым адресом; Теперь нужно настроить антивирусную проверку и филь-
n MS Exchange-сервер спрятан в локальной сети за поч- трацию нежелательной почты. Описание этих мероприя-
товым шлюзом; тий выходит за рамки статьи. Как это сделать, можно про-
n письма принимаются только для существующих ад- читать на сайтах [1, 2]. Кроме всего прочего очень реко-
ресов, проверка адресов производится на почтовом мендуется включить грейлистинг. Я использую для этих
шлюзе; целей пакет gld-1.7, который присутствует в портах, в связ-
n единое хранилище пользовательских аккаунтов – Active ке с MySQL [3].
Directory; Для того чтобы Postfix мог пересылать почту внутрь се-
n антивирусная проверка и фильтрация спама происхо- ти, нужно добавить в main.cf следующие параметры:
дит так же на почтовом шлюзе.
# /usr/local/etc/postfix/main.cf
Что имеем: # Описываем виртуальный домен
n server.company.ru – FQDN-сервер, на котором установ- virtual_mailbox_domains = company.ru
# Информацию о почтовых ящиках искать в LDAP
лен Postfix; # (в нашем случае - AD)
n company.ru – имя внешнего почтового домена; virtual_mailbox_maps = ldap:/usr/local/etc/postfix/ldap.cf
# Описываем куда пересылать приходящую почту
n mx.company.local – имя сервера Exchange, работающе- transport_maps = hash:/usr/local/etc/postfix/ ↵
го под управлением Win2k3, IP-адрес – 192.168.1.1; virtual_transport
n company.local – имя локального домена Active Directory;
n gw – имя хоста FreeBSD-сервера, внутренний IP-адрес – После этого создаем файл ldap.cf и описываем, где ис-
192.168.1.10. кать данные о почтовых ящиках:

Настройка Postfix # /usr/local/etc/postfix/ldap.cf


Последней стабильной версией MTA Postfix на момент на- server_host = ldap://company.local
писания статьи являлась postfix-2.4.7, ее и будем исполь- server_port = 389
timeout = 60
зовать для реализации, а в качестве платформы шлюза search_base = DC=company,DC=local
отлично подойдет любая *BSD-система, в данном случае query_filter = (&(proxyAddresses=smtp:%s) ↵
(!(userAccountControl:1.2.840.113556.1.4.803:=2)) ↵
FreeBSD 7.0. (|(objectClass=user)(objectClass=group) ↵
Устанавливать Postfix лучше из портов: (objectClass=contact)(objectClass=publicFolder)))
result_format = %s
result_attribute = cn
gw# cd /usr/ports/mail/postfix24 special_result_attribute =
gw# make config scope = sub
bind = yes

№11, ноябрь 2008 43


администрирование
Для автоматического запуска Postfix, в /etc/rc.conf до-
бавляем:

# /etc/rc.conf

postfix_enable="YES"

Последним штрихом запрещаем пересылку писем в Ин-


тернет от локальных почтовых адресов, например, таким
образом:

# /usr/local/etc/postfix/sender_access

/.*company\.local/i REJECT Sending to internet is forbidden

И подключаем sender_access в main.cf:

# /usr/local/etc/postfix/main.cf

smtpd_sender_restrictions = check_sender_access ↵
regexp:/usr/local/etc/postfix/sender_access

Рисунок 2. Добавление глобального домена


Теперь почта с локальных адресов не будет перенаправ-
bind_dn = ldaplookup@company.local ляться в Интернет, и пользователь получит соответствую-
bind_pw = secret_password
dereference = 0 щее сообщение об ошибке, внутренняя же корреспонден-
domain = company.ru ция, о которой Postfix даже «не подозревает», будет достав-
version=3
debuglevel = 0 ляться без проблем.
Несанкционированно отправить письмо от другого име-
Здесь, в параметре server_host, указан не сервер, у ко- ни пользователь также не сможет, если это не разрешено
торого запрашиваются данные о существовании пользо- ему явно в настройках учетной записи в «Консоли управ-
вателя, а имя домена Active Directory, при этом необходи- ления Exchange».
мо позаботиться о том, чтобы на FreeBSD корректно раз- Осталось только запустить Postfix:
решались имена из DNS-зоны company.local. Это сделано
для того, чтобы Postfix при получении новой корреспонден- gw# postfix start
ции не был привязан к конкретному серверу и связка оста-
валась работоспособной, пока доступен хотя бы один кон- и убедиться, что в логах нет ошибок:
троллер домена.
Особое внимание нужно обратить на параметр query_ gw# cat /var/log/maillog
filter. По сути, это запрос, который осуществляет выбор-
ку из базы LDAP. Используя такой фильтр, запрос будет Переходим к MS Exchange.
возвращать почтовые адреса для не заблокированных
(!(userAccountControl:1.2.840.113556.1.4.803:=2) [4]) объектов, Настройка MS Exchange
принадлежащих классам user, group, contact и publicFolder. Как установить и сделать начальное конфигурирование
Синтаксис ldap.cf зависит от версии Postfix, так что будьте сервера MS Exchange, можно прочитать в [5, 6], мы же ос-
внимательны: без правки, со старыми версиями MTA по- тановимся подробней на том, как «научить» его работать
добная схема работать не будет! по задуманной схеме.
Параметры bind_dn и bind_pw содержат имя и пароль На Exchange-сервере понадобится создать SMTP-со-
учетной записи в AD (ее нужно предварительно создать), единитель для отправки почты в Интернет через почтовый
от имени которой будет происходить поиск. шлюз и разрешить получать почту от Postfix без авториза-
После этого следует создать файл /usr.local/etc/postfix/ ции, а также указать обслуживаемый домен.
virtual_transport и указать в нем, куда пересылать приходя- Открываем консоль управления MS Exchange и пере-
щую в домен company.ru почту: ходим: «Конфигурация организации → Транспортный сер-
вер-концентратор» и выбираем в панели задач (Action Panel,
# /usr/local/etc/postfix/virtual_transport не путать с системной панелью задач) «Создать обслужи-
company.ru smtp:[192.168.1.1] ваемый домен».
В открывшемся диалоге нужно ввести имя почтового до-
Адрес сервера взят в квадратные скобки для того, что- мена company.ru, и выбирать «Домен внутренней ретранс-
бы система не пыталась разрешать его имя. После этих ляции», затем нажать кнопку «Создать».
манипуляций необходимо создать индексированный файл Соединитель отправки и разрешение на получение поч-
командой: ты от Postfix без авторизации проще создать из команд-
ной строки, для этого нужно открыть командную консоль
gw# postmap /usr/local/etc/postfix/virtual_transport Exchange и ввести:

44
администрирование
[PS] C:\> New-SendConnector -Name 'Outbound' ↵
-Usage 'Internet' -AddressSpaces 'smtp:*;1' ↵
-DNSRoutingEnabled $false ↵
-SmartHosts '[192.168.1.10]' ↵
-SmartHostAuthMechanism 'None' ↵
-SourceTransportServers 'MX'

здесь: Outbound – имя коннектора, MX – NetBios имя


Exchange-сервера.

[PS] C:\> Set-ReceiveConnector "Default MX" ↵


-permissiongroups: "ExchangeUsers, ↵
ExchangeServers, ↵
ExchangeLegacyServers, AnonymousUsers"

Эти настройки можно также сделать в графической кон-


соли управления: «Конфигурация организации → Транспор-
тный сервер-концентратор → Соединители отправки и На-
стройка серверов → Транспортный сервер-концентратор →
Получающие соединители».
Следует отметить, что если Exchange разворачивал-
ся в локальном домене, то политикой по умолчанию каж-
дому почтовому ящику будет присваиваться адрес вида
login@company.local, где login – имя пользователя для вхо-
да в домен AD. Пользователь с таким адресом не сможет
получить почту от других серверов в Интернете, так как
company.local – это локальный домен, известный только
DNS-серверу компании. Поэтому пользователю, которо-
му необходима возможность обмена электронной поч- Рисунок 3. Добавление пользователю внешнего адреса
той с внешними серверами, нужно добавить адрес ви-
да anyname@company.ru и сделать его адресом по умол- ны и прописаны в исключениях несколько «честных» сер-
чанию. веров, письма с которых расценивались как спам.
Для этого в консоли управления Exchange нужно пе- Все управление учетными записями сводится к мани-
рейти: «Настройка получателей → Почтовые ящики», и от- пулированию ими в Консоли управления Exchange, ника-
крыть свойства почтового ящика на вкладке «Адреса элек- ких дополнительных настроек на postfix для пользовате-
тронной почты». лей делать не нужно. Кроме того, подобный подход позво-
В открывшемся диалоге нужно добавить желаемый ад- ляет снять нагрузку с сервера Exchange в плане фильтра-
рес, убрать галку «Автоматически обновлять адреса элект- ции нежелательной корреспонденции и исключить изде-
ронной почты на основе политики адресов электронной поч- ржки на приобретение антиспам-фильтров и антивирусов,
ты», встать курсором на созданный адрес и нажать кнопку умеющих работать с хранилищем Exchange.
«Сделать обратным адресом» (см. рис. 3). Также, будучи скрытым в локальной сети, сервер
Адрес по умолчанию в этом диалоге выделяется жир- Exchange надежно защищен от сетевых атак извне, что де-
ным шрифтом. В случае если нужно обеспечить каждого лает почтовую систему более устойчивой, а сон системно-
пользователя внешней почтой, проще будет создать новую го администратора – глубже и спокойней.
политику адресов электронной почты, либо отредактиро- P.S.: Хочется поблагодарить Агапова Владимира за его
вать политику по умолчанию. статью [8], именно в ней была почерпнута основная идея
Кроме этого, следует четко понимать, что при та- такой связки.
кой связке на почтовом шлюзе нет локальных почто-
вых ящиков, поэтому адреса «по умолчанию», такие как 1. http://demon.yekt.com/postfix_antyspam.html.
postmaster@company.ru, root@company.ru, нужно дополни- 2. http://demon.yekt.com/clamav_antivirus_postfix.html.
тельно прописать в почтовом ящике системного админи- 3. http://www.reid.ru/freebsd/?p=269.
стратора описанным выше способом, но не делать их «об- 4. http://blogs.msdn.com/muaddib/archive/2008/10/08/query-
ратным адресом». Если этого не сделать, то отчеты, кото- individual-properties-of-the-useraccountcontrol-active-directory-
рые шлет и сама FreeBSD, и отчеты о неудачной доставке user-property.aspx.
от MAILER-DAEMON будут теряться. 5. Лопутнев С., Ильин Д. Microsoft Exchange Server 2007. Первые
шаги по развёртыванию и настройке. //Системный админист-
Заключение ратор, №2, 2008 г. – С. 40-47.
Хочется отметить, что подобная схема показала себя с на- 6. http://www.msexchange.ru.
илучшей стороны. Postfix, настроенный в соответствии с ре- 7. http://antonborisov.ru/2008/06/02/postfix-kak-frontend-dlya-
комендациями [1, 3], пропускает максимум 5-7 нежелатель- exchange-2007.
ных писем в месяц, при нагрузке около 100 пользователей. 8. Агапов В. Устанавливаем связку Postfix + Exchange. //Систем-
В начале внедрения, в течение двух недель, были выявле- ный администратор, №7, 2005 г. – С. 42-44.

№11, ноябрь 2008 45


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

XFS от SGI:
структура и алгоритмы

Андрей Пешеходов

Файловая система XFS разработки компании Silicon Graphics считается многими пользователями
операционных систем Linux и IRIX одной из самых стабильных и производительных ФС
поколения 90-х. Посмотрим, за счет каких архитектурных решений она добивается столь высоких
показателей.

46
администрирование
Историческая справка Область данных делится на некоторое количество групп
Исследования концепций файловых систем, проводимые размещения (allocation grup, AG), размер которых выбира-
в начале 90-х годов прошлого века, предрекали скорое ется при создании ФС. AG's чем-то подобны группам бло-
прекращение роста производительности подсистем вво- ков в ext2 или группам цилиндров в FFS, однако задуманы
да-вывода. Инженеры SGI также столкнулись с этим явле- были не для удобства управления дисковым пространс-
нием. Проблемой стала не производительность аппарату- твом, а для распараллеливания запросов к аллокаторам
ры, а ограничения, наложенные старой файловой систе- блоков и inodes.
мой ОС IRIX – EFS.
EFS архитектурно подобна Berkley FFS, однако она ис- B+ деревья
пользует экстенты вместо отдельных блоков для распре- XFS использует B+ деревья повсюду. С их помощью индек-
деления дискового пространства и ввода-вывода. EFS бы- сируются пакеты inodes, списки свободных экстентов, эле-
ла не в состоянии поддерживать файловые системы раз- менты каталогов и записи файловых карт.
мером более восьми гигабайт, файлы длиннее двух гига- B+ деревья XFS имеют вполне традиционную структу-
байт или предоставлять приложению канал ввода-вывода ру: во внутренних узлах хранятся только ключи и указате-
с производительностью на уровне пропускной способнос- ли на потомков, а в листьях – ключи и данные.
ти аппаратуры. Так как типов деревьев в XFS существует несколько, об-
EFS не была спроектирована для работы на больших щий код обрабатывает лишь стандартные заголовки бло-
вычислительных системах, и ее возможностей уже в то вре- ков (xfs_btree.h):
мя не хватало для того, чтобы предоставить приложениям
все возможности нового оборудования. Пока инженеры /*
* Комбинированный заголовок и структура, используемая
рассматривали направления возможного усовершенство- * общим кодом
вания EFS, требования пользователей возросли настоль- */
typedef struct xfs_btree_hdr {
ко, что было решено заменить ее полностью новой файло- __be32 bb_magic; /* magic-номер, зависит
вой системой. * от типа дерева и блока */
__be16 bb_level; /* уровень блока в дереве,
К XFS были предъявлены следующие требования: * 0 если лист */
n быстрое восстановление после сбоя; __be16 bb_numrecs; /* текущее количество записей */
} xfs_btree_hdr_t;
n поддержка больших разделов и файлов;
n эффективная работа с большими каталогами; /* Внутренний узел дерева */
typedef struct xfs_btree_block {
n хорошая масштабируемость как по производительнос- xfs_btree_hdr_t bb_h; /* заголовок */
ти, так и по объемам хранилищ; union {
n эффективное противодействие фрагментации; /* указатели короткой формы */
n высокая степень параллельности обработки запросов. struct {
__be32 bb_leftsib; /* сосед слева */
__be32 bb_rightsib; /* сосед справа */
Практически сразу стало очевидно, что создать ФС, } s;
удовлетворяющую всем этим требованиям, можно только /* указатели длинной формы */
с повсеместным применением B+ деревьев и учетом сво- struct {
__be64 bb_leftsib; /* сосед слева */
бодного пространства с помощь экстентов. __be64 bb_rightsib; /* сосед справа */
Проработка концепции XFS в целом завершилась } l;
} bb_u;
к 1991 году, первые рабочие версии появились в SGI } xfs_btree_block_t;
в 1992 году. В 1994 году XFS вошла в релиз операционной
системы IRIX 5.3. После заголовка располагаются массивы данных. Для
В 2001 году, глядя на IBM, открывшую свою JFS, или же внутренних узлов это два списка – ключей и указателей
руководствуясь какими-то иными соображениями, SGI от- на потомков, растущие к середине. Для листьев – массив
крывает исходный код XFS под лицензией GPL v2 и начи- записей, отсортированный по возрастанию. Формат ключей
нает работы по формированию сообщества программис- и записей соответственно определяется типом дерева.
тов и портированию ее в Linux.
В мае 2001 года выходит релиз 1.0 этой ФС для Linux, Группы размещения
через год код XFS принимается в экспериментальную вет- XFS позиционируется как 64-битная файловая система.
ку 2.5, а в декабре 2003 выходит ядро 2.6.0  стабильной Однако в коде драйвера разработчики старались избегать
XFS на борту. использования 64-битных указателей, пока в этом дейс-
твительно нет нужды. Удержание указателей в рамках
Архитектура 32‑битных значений является одним из мотивов примене-
Файловая система XFS может включать в себя до трех сек- ния allocation groups.
ций: данных, журнала и реального времени. Область дан- В среднем каждая AG имеет 0,5-4 Гб в размере и рас-
ных содержит пользовательские данные и метаданные ФС, полагает собственными структурами данных для управле-
а также (опционально) зону журнала. Секцией реального ния размещением inodes и блоков в своих пределах. Ог-
времени называется некая обособленная часть дискового раниченный размер AG's позволяет использовать внутри
раздела, к которой применяются упрощенные механизмы них относительные 32-битные номера inodes, что удержи-
доступа и выделения блоков и inodes. вает размеры структур данных в рамках оптимальных зна-

№11, ноябрь 2008 47


администрирование
чений. Пока структуры обслуживают данные внутри сво- xfs_extlen_t sb_rbmblocks;
/* количество блоков в журнале */
ей AG, в них применяются относительные 32-битные но- xfs_extlen_t sb_logblocks;
мера, а глобальные структуры данных могут ссылаться /* битовая маска флагов ФС:
* 0x0010 – используются атрибуты
на блоки и inodes в любом месте ФС с помощью 64-бит- * 0x0020 – используются inodes версии 2
ных указателей. * 0x0040 – используются квоты
* 0x0080 – используется выравнивание пакетов inodes
AG лишь изредка применяются для группировки дан- * 0x0100 – задействовано выравнивание области данных
ных, вообще же они слишком велики для этого, а центра- * 0x0200 – поле shared_vn имеет смысл
* 0x1000 – включено отслеживание незаписываемых
ми сосредоточения данных в XFS (для уменьшения фраг- * экстентов
ментации и улучшения производительности чтения) служат * 0x2000 – используются каталоги версии 2 */
__uint16_t sb_versionnum;
файлы или каталоги. /* размер сектора раздела в байтах */
Однако главная задача групп размещения – достиже- __uint16_t sb_sectsize;
/* размер inode в байтах */
ния явного параллелизма в управлении размещением бло- __uint16_t sb_inodesize;
ков и inodes. Файловые системы предыдущего поколения /* количество inodes на блок */
__uint16_t sb_inopblock;
имеют однопоточный механизм выделения и освобождения /* имя ФС */
дискового пространства. На больших файловых системах char sb_fname[12];
/* log2 от sb_blocksize */
с множеством использующих их процессов такой алгоритм __uint8_t sb_blocklog;
может создать серьезные проблемы. /* log2 от sb_sectsize */
__uint8_t sb_sectlog;
Сделав структуры в каждой AG независимыми, раз- /* log2 от sb_inodesize */
работчики XFS добились, что операции с дисковым про- __uint8_t sb_inodelog;
/* log2 от sb_inopblock */
странством и inodes могут выполняться параллельно __uint8_t sb_inopblog;
по всей ФС. Таким образом, несколько пользовательских /* log2 от sb_agblocks */
__uint8_t sb_agblklog;
процессов могут одновременно запросить свободное мес- /* log2 от sb_rextents */
то или новый inode, и ни один из них не будет заблокиро- __uint8_t sb_rextslog;
/* работает mkfs, не монтировать */
ван (т.е. не будет ждать, пока с метаданными поработает __uint8_t sb_inprogress;
другой процесс). /* максимальный процент пространства ФС для inodes */
__uint8_t sb_imax_pct;
Первые 2 Кб любой группы размещения являются зоной
метаданных. Она разбита на 4 функционально обособлен- /* количество выделенных inodes */
__uint64_t sb_icount;
ных 512-байтных сектора. Первый сектор хранит копию су- /* количество свободных inodes */
перблока, за ним следует AGF-блок (от Allocation Group Free __uint64_t sb_ifree;
/* количество свободных блоков данных */
Space Block), далее AGI- (от Allocation Group Inodes Block) __uint64_t sb_fdblocks;
и AGFL-блоки (от Allocation Group Free List Block). /* количество свободных realtime-экстентов */
__uint64_t sb_frextents;
/* inode квот-файла для пользователей */
Суперблок xfs_ino_t sb_uquotino;
/* inodes квот-файла для групп */
Каждая AG хранит копию суперблока, однако только су- xfs_ino_t sb_gquotino;
перблок самой первой группы размещения (нулевой сек- /* флаги квот */
__uint16_t sb_qflags;
тор дискового раздела) используется реально – остальные /* флаги */
служат избыточной информацией для xfs_repair и необхо- __uint8_t sb_flags;
/* индикатор разделяемого номера версии */
димы в случае разрушения основного суперблока. __uint8_t sb_shared_vn;
Структура суперблока такова (xfs_sb.h): /* величина выравнивание пакета inodes в блоках */
xfs_extlen_t sb_inoalignmt;
__uint32_t sb_unit;
typedef struct xfs_sb { __uint32_t sb_width;
/* magic-номер == XFS_SB_MAGIC ("XFSB") */ __uint8_t sb_dirblklog;
__uint32_t sb_magicnum; /* log2 от размера сектора журнала */
/* размер блока в байтах */ __uint8_t sb_logsectlog;
__uint32_t sb_blocksize; /* размер сектора для журнала в байтах
/* количество блоков данных */ * (если он вынесен на отделный раздел */
xfs_drfsbno_t sb_dblocks; __uint16_t sb_logsectsize;
/* количество realtime-блоков */ __uint32_t sb_logsunit;
xfs_drfsbno_t sb_rblocks; __uint32_t sb_features2;
/* количество realtime-экстентов */ } xfs_sb_t;
xfs_drtbno_t sb_rextents;
/* идентификатор ФС */
uuid_t sb_uuid;
/* стартовый блок журнала (если он встроенный) */
xfs_dfsbno_t sb_logstart; AGF-блок
/* номер корневого inode */ AGF-блок содержит служебную информацию, необходимую
xfs_ino_t sb_rootino;
/* inode, описывающий realtime-bitmap */ подсистеме выделения блоков (block allocator). Его струк-
xfs_ino_t sb_rbmino; тура такова (xfs_ag.h):
/* inode, описывающий realtime-summary */
xfs_ino_t sb_rsumino;
/* размер realtime-экстента в блоках */ typedef struct xfs_agf {
xfs_agblock_t sb_rextsize; /* magic-номер = XFS_AGF_MAGIC ("XAGF") */
/* размер AG */ __be32 agf_magicnum;
xfs_agblock_t sb_agblocks; /* версия заголовка == XFS_AGF_VERSION (1) */
/* количество AG's */ __be32 agf_versionnum;
xfs_agnumber_t sb_agcount; /* sequence number starting from 0 */
/* количество блоков в realtime-bitmap */ __be32 agf_seqno;

48
администрирование
/* размер AG в блоках. Все AG, кроме последней, Другой плюс отложенного размещения состоит в том,
* имеют одинаковый размер, определенный в поле
* agblocks суперблока */ что файлы, записанные беспорядочно, но не имеющие
__be32 agf_length; «дыр», чаще всего будут размещаться на диске рядом. Ес-
/* Номера корневых блоков для двух деревьев ли все «грязные» данные могут быть буферизованы в па-
* свободных экстентов - с сортировкой по номеру мяти, то пространство для этих данных скорее всего будет
* стартового блока и по длине */
__be32 agf_roots[XFS_BTNUM_AGF]; размещено непрерывно в тот момент, когда они сбрасыва-
/* зарезервировано */ ются (flushed) на диск. Это особенно важно для приложений,
__be32 agf_spare0;
пишущих данные в отображенные (mmapped) файлы, когда
/* Количества уровней для двух деревьев свободных случайный доступ – правило, а не исключение.
* экстентов – с сортировкой по номеру стартового
* блока и по длине */
__be32 agf_levels[XFS_BTNUM_AGF]; AGI-блок
/* зарезервировано */
__be32 agf_spare1; AGI-блок хранит служебные данные для аллокатора inodes.
Его структура такова (xfs_ag.h):
/* индекс первого активного элемента в AGFL-блоке */
__be32 agf_flfirst;
/* индекс последнего активного элемента в AGFL-блоке */ typedef struct xfs_agi {
__be32 agf_fllast; /* magic-номер == XFS_AGI_MAGIC ("XAGI") */
/* количество активных элементов AGFL-блока */ __be32 agf_magicnum;
__be32 agf_flcount; /* версия заголовка XFS_AGI_VERSION (1) */
/* всего свободных блоков */ __be32 agf_versionnum;
__be32 agf_freeblks; /* sequence number starting from 0 */
/* размер самого большого свободного экстента */ __be32 agf_seqno;
__be32 agf_longest; /* размер AG в блоках */
} xfs_agf_t; __be32 agf_length;

/* количество выделенных inodes */


Для учета свободных блоков XFS использует не тради- __be32 agi_count;
ционные для многих ФС (например, ext2/3/4, reiserfs, reiser4) /* корень дерева inodes */
__be32 agi_root;
битовые карты, а списки свободных экстентов. Эти масси- /* высота дерева inodes */
вы проиндексированы в двух B+ деревьях, одно из кото- __be32 agi_level;
/* количество свободных inodes */
рых отсортировано по стартовому блоку экстента, другое – __be32 agi_freecount;
по его длине. Двойное индексирование позволяет не толь- /* номер последнего выделенного inode */
__be32 agi_newino;
ко гибко и быстро находить необходимое количество сво- /* не используется */
бодного пространства, но и использовать перспективные __be32 agi_dirino;
политики выделения блоков, такие как отложенное разме- /*
щение (delayed allocation). * Хэш-таблица inodes, которые были разлинкованы,
* но все еще достижимы через ссылки в различных
Алгоритм delayed allocation использует «ленивые» техни- * списках
ки назначения физических блоков файлу. Вместо того что- */
__be32 agi_unlinked[XFS_AGI_UNLINKED_BUCKETS];
бы выделять блоки файлу в момент его записи в кэш, XFS } xfs_agi_t;
просто резервирует место в файловой системе, размещая
данные в специальных виртуальных экстентах. Только ког- XFS выделяет inodes динамически и располагает их
да буферизованные данные сбрасываются на диск, вирту- на диске в пакетах по 64 штуки. В каждой AG существует
альным экстентам назначаются конкретные блоки. Реше- B+ дерево (на его корень указывает поле agi_root структу-
ние о размещении файла на диске откладывается до мо- ры xfs_agi), в листьях которого хранятся структуры такого
мента, когда ФС будет располагать более точной информа- вида (xfs_ialloc_btree.h):
цией о конечном размере файла. Когда весь файл содер-
жится в памяти, то он обычно может быть размещен в од- typedef struct xfs_inobt_rec {
/* номер первого inode в пакете */
ном куске непрерывного дискового пространства. Файлам, __be32 ir_startino;
не умещающимся в памяти, алгоритм delayed allocation поз- /* количество свободных inodes в пакете */
__be32 ir_freecount;
воляет быть размещенными гораздо более непрерывно, /* битовая карта занятости inodes */
чем это было бы возможно без его применения. __be64 ir_free;
} xfs_inobt_rec_t;
Механизм отложенного размещения хорошо соответ-
ствует концепции современной файловой системы, так как Ключом в дереве является номер первого inode в па-
его эффективность возрастает с увеличением объема сис- кете, magic-номер для всех блоков – «IABT». В XFS номер
темной RAM – чем больше данных будет буферизовано в па- inode вычисляется на основе адреса блока, в котором он
мяти, тем более оптимальные решения по их размещению хранится. Соответственно, для каждого блока однозначно
будет принимать XFS. Кроме того, файлы с малым време- определен диапазон возможных номеров inodes, следова-
нем жизни могут вовсе не получить физического воплоще- тельно, информацию о физическом местоположении паке-
ния на диске – XFS не успеет принять решение о размеще- тов inodes хранить не требуется – достаточно номера пер-
нии до их удаления. Такие короткоживущие файлы – обыч- вого inode в пакете.
ное дело в UNIX-системах, и механизм delayed allocation поз-
воляет существенно уменьшить количество модификаций AGFL-блок
метаданных, вызванных созданием и удалением таких фай- AGFL-блок содержит линейный массив номеров блоков, за-
лов, а также устранить их влияние на фрагментацию ФС. резервированных для использования аллокатором в усло-

№11, ноябрь 2008 49


администрирование
/* формат потока данных */
__int8_t di_format;
/* количество ссылок на inodes версии 1 */
__uint16_t di_onlink;
/* user id владельца */
__uint32_t di_uid;
/* group id владельца */
__uint32_t di_gid;
/* количество ссылок на inode версии 2 */
__uint32_t di_nlink;
/* project id владельца, только для IRIX */
__uint16_t di_projid;
/* не используется */
__uint8_t di_pad[8];
/* инкрементируется при flusf */
__uint16_t di_flushiter;
/* время последнего доступа */
xfs_timestamp_t di_atime;
/* время последнего изменения */
xfs_timestamp_t di_mtime;
/* время создания/модификации inode */
xfs_timestamp_t di_ctime;
/* количество байт в файле */
xfs_fsize_t di_size;
/* количество использованных direct-
* и btree-блоков */
Рисунок 1. Структура первой AG сразу после создания xfs_drfsbno_t di_nblocks;
/* basic/minimum размер экстента файла */
xfs_extlen_t di_extsize;
/* количество экстентов в потоке данных */
xfs_extnum_t di_nextents;
/* количество экстентов в потоке атрибутов */
xfs_aextnum_t di_anextents;
/* смещение потока данных в inode, в 64-битных
* словах от начала u */
__uint8_t di_forkoff;
/* формат потока атрибутов:
* 1 – локальные атрибуты,
* 2 – список экстентов,
* 3 – корень дерева */
__int8_t di_aformat;
/* DMIG event mask */
__uint32_t di_dmevmask;
/* DMIG state info */
__uint16_t di_dmstate;
/* флаги */
__uint16_t di_flags;
/* номер поколения */
__uint32_t di_gen;
} xfs_dinode_core_t;

Вот формат inode целиком:


Рисунок 2. Список разлинкованных inodes
typedef struct xfs_dinode {
/* ядро inode */
виях нехватки свободного места в данной AG. Эти блоки мо- xfs_dinode_core_t di_core;
гут быть использованы только для расширения B+ деревь-
xfs_agino_t di_next_unlinked;
ев свободных блоков, и ни для каких других данных.
В только что созданной файловой системе этот список /* Это объединение описывает поток данных
* (data-fork) */
содержит 4 блока – с 4 по 7. По мере фрагментации сво- union {
бодного и заполнения этих блоков XFS заносит в AGFL дру- /* корень дерева */
xfs_bmdr_block_t di_bmbt;
гие (см. рис. 1). /* список экстентов */
xfs_bmbt_rec_32_t di_bmx[1];
/* короткая форма каталога v2 */
Inodes xfs_dir2_sf_t di_dir2sf;
Каждый inode состоит из четырех частей – ядра, next_unlinked, /* локальное содержимое */
char di_c[1];
u и a. Ядро содержит постоянную информацию, характер- /* устройство */
ную для всех типов inodes. Поле di_next_unlinked, отделен- xfs_dev_t di_dev;
/* точка монтирования */
ное от ядра из-за принятой политики журналирования, по uuid_t di_muuid;
функциям связано с agi_unlinked (см. рис. 2). Вот структу- /* символическая ссылка */
char di_symlink[1];
ра ядра inode (см. xfs_dinode.h): } di_u;

/* Это объединение описывает поток атрибутов


typedef struct xfs_dinode_core { * (attribite-fork) */
/* inode magic # = XFS_DINODE_MAGIC ("IN") */ union {
__uint16_t di_magic; /* корень дерева */
/* mode и тип файла */ xfs_bmdr_block_t di_abmbt;
__uint16_t di_mode; /* список экстентов */
/* версия inode, 1 или 2 */ xfs_bmbt_rec_32_t di_abmx[1];
__int8_t di_version; /* локальные атрибуты */

50
администрирование
xfs_attr_shortform_t di_attrsf; блок этого дерева состоит из трех частей: общего заголов-
} di_a;
} xfs_dinode_t; ка (см. раздел «B+ деревья» в начале статьи), массива клю-
чей (в этом дереве ключом считается смещение экстента
Формат di_u определяется типом файла, идентификатор от начала файла) и массива указателей на потомки. Лис-
которого хранится в поле di_format ядра inode. Возможные товые узлы, вместо массива указателей, содержат массив
варианты описаны в этом перечислении (xfs_dinode.h): дескрипторов экстентов. Magic-номер для всех блоков та-
кого дерева – «BMAP».
/* Значения для di_format */
typedef enum xfs_dinode_fmt {
/* специальный файл - di_dev */ Атрибуты
XFS_DINODE_FMT_DEV, Каждый файл в XFS может располагать дополнитель-
/* локальное содержимое (файл - di_c,
* короткий каталог - di_dir2sf, ным потоком данных – attribute fork, описываемым объ-
* или symlink - di_symlink) */ единением «a» структуры inode. Как и в случае с данными,
XFS_DINODE_FMT_LOCAL,
/* список экстентов - di_bmx */ inode может содержать поток атрибутов в короткой форме
XFS_DINODE_FMT_EXTENTS, (di_abmbt). Структура di_abmbt имеет следующий формат
/* корень дерева - di_bmbt */
XFS_DINODE_FMT_BTREE, (см. xfs_attr_sf.h):
/* не используется */
XFS_DINODE_FMT_UUID
} xfs_dinode_fmt_t; typedef struct xfs_attr_shortform {
/* заголовок */
struct xfs_attr_sf_hdr {
Если di_format == XFS_DINODE_FMT_LOCAL, значит по- /* размер списка */
__be16 totsize;
ле «u» хранит внутри себя все содержимое файла. Это мо- /* количество активных элементов */
гут быть сырые данные файла (di_c), текстовая строка __u8 count;
} hdr;
с именем цели для символической ссылки (di_symlink), или struct xfs_attr_sf_entry {
небольшой массив элементов каталога, описывающий ко- /* длина имени атрибута */
__uint8_t namelen;
роткий каталог (di_dir2sf, см. далее). /* длина значения атрибута */
В случае di_format == XFS_DINODE_FMT_DEV, «u» ин- __uint8_t valuelen;
/* биты флагов (см. xfs_attr_leaf.h) */
терпретируется как 32-битный дескриптор устройства, со- __uint8_t flags;
держащий его minor и major номера – структура di_dev. /* объединенные строки имени и значения
* атрибута */
При di_format == XFS_DINODE_FMT_EXTENTS, «u» __uint8_t nameval[1];
интерпретируется как массив дескрипторов экстентов /* список переменной длины */
} list[1];
(di_bmx), содержащих данные файла. Структура дескрип- } xfs_attr_shortform_t;
тора экстента такова (xfs_bmap_btree.h):
Если все атрибуты в inode не умещаются, «a» интер-
typedef struct xfs_bmbt_rec_32 претируется в качестве массива дескрипторов экстентов
{
__uint32_t l0, l1, l2, l3; (di_abmx). В случае нехватки места и для списка экстен-
} xfs_bmbt_rec_32_t; тов, в di_a помещается корневой узел дерева атрибутов
typedef struct xfs_bmbt_rec_64 (di_abmbt). Внутренние узлы этого дерева имеют традици-
{ онный формат (magic 0xfbee), листовые же устроены не-
__uint64_t l0, l1;
} xfs_bmbt_rec_64_t; сколько иначе (см. рис. 3).
Структура заголовка листового узла
В 32-битных ядрах поля структуры интерпретируются (см. xfs_attr_leaf.h):
следующим образом:
n l0:31 – флаг экстента (1 если non-normal); #define XFS_ATTR_LEAF_MAPSIZE 3
/* доступное количество free-слотов */
n l0:0-30 и l1:9-31 – это смещение экстента от начала фай-
ла (в блоках), служит ключом в дереве выделенных эк- /* Формат free-карты */
typedef struct xfs_attr_leaf_map {
стентов; /* база свободного региона */
n l1:0-8, l2:0-31 и l3:21-31 – это номер стартового блока __be16 base;
/* длина свободного региона */
от начала AG, используется в свободных экстентах; __be16 size;
n l3:0-20 – это количество блоков в экстенте. } xfs_attr_leaf_map_t;

/* Заголовок листового блока */


Для 64-битных ядер: typedef struct xfs_attr_leaf_hdr {
/* этот заголовок используется для построения
n l0:63 – флаг экстента (1 если non-normal); * двусвязных списков блоков одного уровня
n l0:9-62 – это смещение экстента от начала файла (в бло- * (см. xfs_da_btree.h) */
xfs_da_blkinfo_t info;
ках); /* количество активных leaf_entry */
n l0:0-8 и l1:21-63 – номер стартового блока; __be16 count;
/* количество байт в буфере */
n l1:0-20 – количество блоков. __be16 usedbytes;

При di_format == XFS_DINODE_FMT_BTREE, «u» заголовок массив индексов буфер актуальных данных
и хэшей
считается содержащим корневой узел дерева вы- header info массив freemap локальные атрибуты удаленные атрибуты
деленных экстентов (di_bmbt). Каждый внутренний Рисунок 3. Структура листовых узлов

№11, ноябрь 2008 51


администрирование
/* первый используемый байт в массиве имен */ /* имя */
__be16 firstused; __u8 name[1];
/* != 0 если блок нуждается в упаковке */ } xfs_attr_leaf_name_remote_t;
__u8 holes;
__u8 pad1;
xfs_attr_leaf_map_t freemap[XFS_ATTR_LEAF_MAPSIZE]; Вот структура листового узла дерева атрибутов
} xfs_attr_leaf_hdr_t; в сборе:

Массив freemap хранит описатели для N (XFS_ATTR_ typedef struct xfs_attr_leafblock {


/* заголовок */
LEAF_MAPSIZE=3 в текущей реализации) наибольших сво- xfs_attr_leaf_hdr_t hdr;
бодных регионов. Если места в узле недостаточно, вызы- /* индексы */
xfs_attr_leaf_entry_t entries[1];
ваются процедуры упаковки узла и, если не помогло, – его /* локальные атрибуты */
разбиения. xfs_attr_leaf_name_local_t namelist;
/* удаленные атрибуты */
Структура xfs_da_blkinfo_t определена в xfs_da_btree.h xfs_attr_leaf_name_remote_t valuelist;
и используется для построения двусвязных списков блоков } xfs_attr_leafblock_t;
одного уровня в деревьях именованных объектов – атрибу-
тов и каталогов (xfs_da_btree.h):
Директории
typedef struct xfs_da_blkinfo { Содержимое директории в XFS хранится либо прямо в inode
/* предыдущий блок в списке */
__be32 forw; (каталог короткой формы), либо адресуется через дерево
/* следующий блок в списке */ блочной карты файла. Все смещения в структурах катало-
__be32 back;
/* тип блока */ га логические, т.е. для поиска физического положения тех
__be16 magic; или иных элементов файловая система обращается к кар-
/* unused */
__be16 pad; те блоков файла и выполняет соответствующие преобра-
} xfs_da_blkinfo_t; зования.
/* внутренний узел */ В пределах файла выделены три диапазона:
#define XFS_DA_NODE_MAGIC 0xfebe n 0-0x7ffffffff – область блоков данных;
/* лист дерева атрибутов */
#define XFS_ATTR_LEAF_MAGIC 0xfbee n 0x800000000-0xfffffffff – область хэш-блоков;
/* лист дерева одноблочной директории */ n 0x1000000000-0x17ffffffff область freeindex-данных.
#define XFS_DIR2_LEAF1_MAGIC 0xd2f1
/* лист дерева многоблочной директории */
#define XFS_DIR2_LEAFN_MAGIC 0xd2ff Каталог в XFS может храниться в четырех форматах:
n короткая форма;
Далее следует массив хэшей/индексов: n одноблочный каталог;
n несколько data-блоков, единственный freeindex-блок;
typedef struct xfs_attr_leaf_entry { n блоки данных с B+ деревом, несколько freeindex-бло-
/* хэш имени атрибута */
__be32 hashval; ков.
/* индекс атрибута в буфере данных */
__be16 nameidx;
/* LOCAL/ROOT/SECURE/INCOMPLETE флаги */ Каталог короткой формы
__u8 flags; Рассмотрим в каком виде XFS хранит директории. Прямо
/* unused pad byte */
__u8 pad2; в inode может содержатся каталог короткой формы, опи-
} xfs_attr_leaf_entry_t; санный в xfs_dir2_sf.h:

Листовой блок заканчивается буфером актуальных /* Формат номера inode */


typedef union {
данных, содержащим имена и значения атрибутов. Зна- xfs_dir2_ino8_t i8;
чения могут быть локальными (хранятся прямо в буфе- xfs_dir2_ino4_t i4;
} xfs_dir2_inou_t;
ре) и удаленными (в буфере только указатель на выделен-
ный блок). /* Заголовок каталога короткой формы */
typedef struct xfs_dir2_sf_hdr {
/* количество элементов */
/* Локальный атрибут */ __uint8_t count;
typedef struct xfs_attr_leaf_name_local { /* количество 64-битных номеров inodes */
/* дллина значения */ __uint8_t i8count;
__be16 valuelen; /* номер inode родительского каталога */
/* длина имени */ xfs_dir2_inou_t parent;
__u8 namelen; } xfs_dir2_sf_hdr_t;
/* объединенные строки имени и значения атрибута */
__u8 nameval[1]; /* Элемент каталога короткой формы */
} xfs_attr_leaf_name_local_t; typedef struct xfs_dir2_sf_entry {
/* длина имени */
__uint8_t namelen;
/* Удаленный атрибут */ /* saved offset */
typedef struct xfs_attr_leaf_name_remote { xfs_dir2_sf_off_t offset;
/* номер блока, хранящего значение */ /* имя */
__be32 valueblk; __uint8_t name[1];
/* длина значения */ /* номер inode для данного имени */
__be32 valuelen; xfs_dir2_inou_t inumber;
/* длина имени */ } xfs_dir2_sf_entry_t;
__u8 namelen;

52
администрирование
/* Каталог короткой формы */ Наконец, так устроен хвост блока (xfs_dir2_block.h):
typedef struct xfs_dir2_sf {
/* заголовок */
xfs_dir2_sf_hdr_t hdr; typedef struct xfs_dir2_block_tail {
/* массив элементов */ /* количество листовых элементов */
xfs_dir2_sf_entry_t list[1]; __be32 count;
} xfs_dir2_sf_t; /* количество устаревших листовых элементов */
__be32 stale;
} xfs_dir2_block_tail_t;

Одноблочный каталог
Если каталог не помещается в inode, XFS выделяет под не- Многоблочный каталог
го отдельный блок, размещая там структуры так называе- Когда каталог перестает умещаться в одном блоке, XFS
мой одноблочной директории (xfs_dir2_block.h): разворачивает под его хранение древовидную структуру,
состоящую из data-блоков, хранящих элементы катало-
/* Одноблочный каталог */ га – то есть имена файлов и номера их inodes, и так назы-
typedef struct xfs_dir2_block {
/* заголовок */ ваемых leaf-блоков, содержащих индексную информацию
xfs_dir2_data_hdr_t hdr; по data-блокам – хэши имен и смещения соответствующих
/* массив элементов каталога */
xfs_dir2_data_union_t u[1]; элементов в пределах каталога. К этим структурам привя-
/* массив индексов */ зываются так называемые freeindex-блоки, с помощью ко-
xfs_dir2_leaf_entry_t leaf[1];
/* хвост блока */ торых отслеживаются свободные участки в файле, содер-
xfs_dir2_block_tail_t tail; жащем каталог, в больших каталогах над этой информа-
} xfs_dir2_block_t;
цией также может надстраиваться древовидная структура.
Заголовок этого блока имеет следующий формат Логическое пространство в пределах файла каталога счи-
(xfs_dir2_data.h): тается 8-байтными словами – на это рассчитаны все струк-
туры учета свободных участков.
/* XFS_DIR2_DATA_FD_COUNT равно 3 */ Итак, блоки данных (xfs_dir2_data.h):
typedef struct xfs_dir2_data_hdr {
__be32 magic; /* Активный элемент каталога */
xfs_dir2_data_free_t ↵ typedef struct xfs_dir2_data_entry {
bestfree[XFS_DIR2_DATA_FD_COUNT]; /* номер inode */
} xfs_dir2_data_hdr_t; __be64 inumber;
/* длина имени */
__u8 namelen;
Элемент каталога устроен так (xfs_dir2_data.h): /* имя */
__u8 name[1];
/* смещение этого элемента в блоке */
/* Активный элемент каталога */ __be16 tag;
typedef struct xfs_dir2_data_entry { } xfs_dir2_data_entry_t;
/* номер inode */
__be64 inumber; /* Свободный элемент каталога */
/* длина имени */ typedef struct xfs_dir2_data_unused {
__u8 namelen; /* XFS_DIR2_DATA_FREE_TAG */
/* имя */ __be16 freetag;
__u8 name[1]; /* длина свободного участка */
/* смещение этого элемента в блоке */ __be16 length;
__be16 tag; /* смещение этого элемента в блоке */
} xfs_dir2_data_entry_t; __be16 tag;
} xfs_dir2_data_unused_t;
/* Свободный элемент каталога */ /* Обощенный элемент каталога */
typedef struct xfs_dir2_data_unused { typedef union {
/* XFS_DIR2_DATA_FREE_TAG */ xfs_dir2_data_entry_t entry;
__be16 freetag; xfs_dir2_data_unused_t unused;
/* длина свободного участка */ } xfs_dir2_data_union_t;
__be16 length;
/* смещение этого элемента в блоке */
__be16 tag; Структура хэш-блоков (так называемые листовые бло-
} xfs_dir2_data_unused_t; ки, xfs_dir2_leaf.h):

/* Обобщенный элемент каталога */ /* Заголовок листового блока */


typedef union { typedef struct xfs_dir2_leaf_hdr {
xfs_dir2_data_entry_t entry; /* DA-заголовок, см. xfs_da_btree.h */
xfs_dir2_data_unused_t unused; xfs_da_blkinfo_t info;
} xfs_dir2_data_union_t; /* количество элементов */
__be16 count;
Индексная информация к массиву элементов ка- __be16 stale;
} xfs_dir2_leaf_hdr_t;
талога хранится в списке структур такого формата
(xfs_dir2_leaf.h):
/* Элемент листового узла */
typedef struct xfs_dir2_leaf_entry {
typedef struct xfs_dir2_leaf_entry { /* хэш имени */
/* хэш имени */ __be32 hashval;
__be32 hashval; /* смещение в пределах файла каталога */
/* адрес элемента */ __be32 address;
__be32 address; } xfs_dir2_leaf_entry_t;
} xfs_dir2_leaf_entry_t;

№11, ноябрь 2008 53


администрирование
/* Хвост */ n rtb_hardlimit – абсолютное ограничение на количество
typedef struct xfs_dir2_leaf_tail {
__be32 bestcount; RT-блоков;
} xfs_dir2_leaf_tail_t; n rtb_softlimit – предпочитаемое ограничение на количест-
во RT-блоков;
/* Листовой блок в сборе */ n rtbtimer – время, когда обслуживание пользователя бу-
typedef struct xfs_dir2_leaf {
/* заголовок */ дет прекращено, если предпочитаемое ограничение
xfs_dir2_leaf_hdr_t hdr; по RT-блокам уже достигнуто;
/* элементы */
xfs_dir2_leaf_entry_t ents[1]; n rtbwarns – количество предупреждений, выдавае-
/* список свободных участков в диапазоне мых при достижении предпочитаемого ограничения
* листовых блоков */
xfs_dir2_data_off_t bests[1]; по RT‑блокам.
/* хвост */
xfs_dir2_leaf_tail_t tail;
} xfs_dir2_leaf_t; Подсистема real-time ввода-вывода
XFS может выделять на диске специальную секцию реаль-
Нетрудно понять, что древовидными эти структуры ного времени, к которой применяются упрощенные меха-
можно назвать лишь с натяжкой – в сущности, каталоги низмы доступа и выделения блоков и inodes (в том числе
XFS индексируются с помощью хэширования, причем да- битовые карты), позволяющие стабилизировать время вы-
же не расширенного. полнения дисковых операций. Ядро IRIX содержит особые
Управление свободным пространством в каталоге также методы в менеджерах томов и памяти, которые обеспечи-
не на высоте. Все это приводит к отставанию XFS при ра- вают поддержку более производительного realtimе-досту-
боте с большими каталогами от таких продвинутых в этом па, в Linux же таких возможностей нет, поэтому секция ре-
отношении файловых систем, как reiserfs и, в особеннос- ального времени обрабатывается здесь не быстрее сек-
ти reiser4. ции данных. Основная идея – постоянство времени выпол-
нения операций.
Квоты Если файловая система имеет realtime-подраздел, поле
Информация о квотах хранится в файлах, адресуемых по- rbmino суперблока ссылается на файл, содержащий бито-
лями uquotino (квоты для пользователей) и gquotino (квоты вую карту области реального времени. Каждый бит карты
для групп) суперблока. Каждый блок квот-файла содержит контролирует выделение простого realtime-экстента. Кар-
постоянное количество квот-записей. Квот-запись в насто- та обрабатывается 32-битными словами.
ящее время имеет размер 136 байт, поэтому ФС с блоком Поле atime inode, описывающего эту карту, содержит
в 4 Кб хранит 30 записей на блок. В файле квот-записи ин- счетчик, используемый для хранения указателя на пер-
дексируются по идентификатору. вый свободный блок.
Формат квот-записи (xfs_disk_dquot_t) определен Поле rbsumino суперблока ссылается на файл, содер-
в xfs_quota.h: жащий двухмерный массив 16-битных значений, с помо-
n magic («DQ»); щью которого несколько ускоряется поиск необходимого
n version; экстента по битовой карте realtime-блоков.
n флаг; В первом измерении массив упорядочен по размеру
n id – идентификатор (пользователя/группы); (представлены 16 диапазонов возможного размера realtime-
n blk_hardlimit – абсолютное ограничение на количество экстентов), во втором – по смещению экстентов с данным
блоков; размером в битовой карте. Это позволяет быстро отыскать
n blk_softlimit – предпочитаемое ограничение на количест-
свободный realtime-экстент нужного размера.
во блоков;
n ino_hardlimit – абсолютное ограничение на количество Журналирование
inodes; Задачей менеджера журнала является обеспечение сер-
n ino_softlimit – предпочитаемое ограничение на количест- виса, позволяющего быстро и надежно восстанавливать
во inodes; файловую систему после сбоя. Это также увеличивает
n bcount – количество уже использованных блоков; производительность для некоторых операций типа обнов-
n icount – количество уже использованных inodes; ления метаданных. Благодаря использованию этого меха-
n btimer – время, когда обслуживание пользователя будет низма другие сервисы журналируют изменения в метадан-
прекращено, если предпочитаемое ограничение по бло- ных ФС (в inodes, каталогах, пуле свободного пространст-
кам уже достигнуто; ва), а менеджер журнала группирует множество запросов
n itimer – время, когда обслуживание пользователя бу- к диску в один большой синхронный запрос, выполняемый
дет прекращено, если предпочитаемое ограничение аппаратурой гораздо быстрее. Однажды зарегистрирован-
по inodes уже достигнуто; ные клиенты log-менеджера больше не нуждаются в не-
n bwarns – количество предупреждений, выдаваемых медленном сбросе своих грязных данных, эту работу вы-
при достижении предпочитаемого ограничения по бло- полняет log-менеджер, попутно группируя запросы на за-
кам; пись и обеспечивая целостность файловой системы в слу-
n iwarns – количество предупреж дений, выдавае - чае сбоя. Изменения в пользовательских данных не жур-
мых при достижении предпочитаемого ограничения налируются, т.к. их сохранность инвариантна к целостнос-
по inodes; ти структуры ФС.

54
администрирование
Журнал XFS разбит на 2 части – дисковую и рабочую typedef struct xlog_rec_header {
/* ID log-записи */
(in-core). Назначенные на журналирование операции сна- uint h_magicno;
чала попадают в рабочий лог, который представляет из се- /* номер цикла записи */
uint h_cycle;
бя FIFO-очередь, удерживающую транзакции в памяти /* версия log-записи */
до тех пор, пока некоторое событие не вызовет их принуди- int h_version;
/* длина записи в байтах */
тельный сброс в дисковый лог. Операции, хранимые в ра- int h_len;
бочем журнале, называются активными. /* номер сектора для данной записи */
xfs_lsn_t h_lsn;
Дисковый журнал представляет собой непрерывную /* номер сектора первой несброшенной записи */
последовательность дисковых блоков, обрабатываемых от- xfs_lsn_t h_tail_lsn;
/* контрольная сумма тела записи,
дельно от блоков данных XFS, и является, по сути, замкну- * если не используется - 0 */
той очередью. Операции, хранящиеся в дисковом логе, на- uint h_chksum;
/* номер блока предыдущей LR */
зываются зафиксированными. int h_prev_block;
Набор связанных операций, которые должны быть ато- /* количество log-операций в этой LR */
int h_num_logops;
марно применены к диску, называется транзакцией.
uint h_cycle_data[XLOG_HEADER_CYCLE_SIZE / ↵
BBSIZE];
Журнальные записи
Для оптимизации ввода/вывода активные операции груп- /* формат log-записи */
int h_fmt;
пируются вместе в log-записи и только потом направляют- /* UUID файловой системы */
ся на диск. uuid_t h_fs_uuid;
/* размер */
Существуют 3 события, которые могут вызвать фикса- int h_size;
цию рабочей очереди: } xlog_rec_header_t;
n переполнение рабочего журнала;
n поступление в log-менеджер запроса на немедленный Так как восстановление после сбоя должно быть очень
сброс операции на диск; быстрым, оперативный поиск начала дискового журнала
n окончание некоторого таймаута. является приоритетной задачей log-менеджера.
Последняя актуальная log-запись будет удовлетворять
Сами Log-записи состоят из двух частей – заголов- следующим условиям:
ка и тела. Заголовок содержит некую общую информа- n после нее нет действительных log-записей;
цию обо всей log-записи, тогда как тело хранит связан- n контрольная сумма ее тела будет соответствовать той,
ные log‑операции. что хранится в заголовке.
Заголовок log-записи состоит из:
n номер записи; Log-менеджер XFS ищет начало журнала, выполняя слу-
n номер последней сброшенной записи; чайные выборки по всему журналу и методом последова-
n длина тела записи в 64-битных словах; тельных приближений отыскивая log-запись с наибольшим
n magic-номер; номером. Затем около нее ищется последняя запись с вер-
n количество log-операций в записи. ной контрольной суммой, из заголовка которой извлекается
номер первой не сброшенной записи (h_tail_lsn) – она и счи-
Log-операции содержатся в теле записи также разби- тается началом журнала.
тыми на 2 части – заголовок и тело операции.
Тело операции – это поток выровненных по 4-байтной Мнение
границе снапшотов, отражающих состояние метаданных XFS довольно сложная – как по идеям, так и по реализа-
после внесения изменений. Заметим, что это подразуме- ции – файловая система. За счет эффективных, хорошо
вает временное упорядочивание записей. Метаданные мо- продуманных алгоритмов распределения дискового про-
гут быть сброшены на диск только после того, как соответ- странства, отложенного размещения и хорошо распарал-
ствующие log-записи внесены в дисковый лог. леленной обработки пользовательских запросов показы-
Заголовок log-записи содержит: вает хорошие результаты на обработке больших и сред-
n идентификатор инициатора операции; них файлов. Излишне сложная и недостаточно оптимизи-
n длина тела в байтах; рованная схема обработки каталогов не позволяет ей опе-
n ID транзакции; режать такие ФС, как reiserfs, reiser4 и btrfs на больших ди-
n тип операции. ректориях (ext2/3/4 здесь отстают от нее довольно сущес-
твенно, JFS – примерно на одном уровне) – и это, пожалуй,
Номер записи представляет собой 64-битное число; ее единственная слабость.
младшие 32 бита содержат номер соответствующего бло-
ка в журнале, старшие – инкрементальный счетчик. 1. Исходники XFS ядра Linux-2.6.26.
2. man 5 xfs, man 8 xfs_db.
Дисковая структура 3. XFS design documents – oss.sgi.com/projects/xfs/design_docs.
Каждая log-запись предваряется информационным заго- 4. Масштабируемость в XFS – filesystems.nm.ru/my/xfs_arch.pdf.
ловком (размер которой не более сектора), который со- 5. XFS filesystem structure – oss.sgi.com/projects/xfs/papers/
держит: xfs_filesystem_structure.pdf.

№11, ноябрь 2008 55


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

ITIL: необходимо
и достаточно?

Александр Башкиров

Ваше предприятие растет, а служба IT по-прежнему представляет собой «черный ящик»?


Вы не понимаете, как и зачем расходуются выделенные на IT средства? Вы считаете
IT‑бюджет необоснованно высоким или просто необоснованным? Вы видите выход
в увольнении всех IT-специалистов и найме новых? Не спешите! Возможно, вам поможет
внедрение ITIL.

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

Е
сли проследить за развитием
информационных технологий, Версии ITIL чень процессов приводится по ITIL вер-
то нетрудно заметить, что начи- В настоящее время официально опуб- сии 2. Подробнее об ITIL можно прочитать
ная с 90-х годов прошлого века IT ста- ликована библиотека ITIL версии 3, од- на официальном сайте ITIL: http://www.itil-
ло играть всё более значительную роль нако до сих пор не выполнено ее пере- officialsite.com, сайтах http://www.itil.org.uk
в бизнесе. Если в 90-е годы компьютер вода на русский язык, поэтому пере- и http://en.wikipedia.org/wiki/ITIL.
на производстве, в офисе и магазине
воспринимался как экзотика, то в на- свод лучших практик в отрасли и на- да и перерывов), бесперебойный ре-
стоящее время без компьютера не об- зывался библиотекой ITIL (Information жим работы компьютеров (аналогично)
ходится ни одна организация. Но ком- Technology Infrastructure Library). Биб- и бесперебойный доступ к местной те-
пьютер сам по себе не способен дать лиотека ITIL называется библиотекой лефонной связи. Для упрощения так-
организации ничего, кроме возмож- потому, что состоит из ряда книг, со- же предположим, что менеджер не при-
ности локально создавать и хранить держащих обобщение практического ступает к поиску следующего кандида-
электронные документы (при наличии опыта, так называемые best practiks – та, пока не «отработал» текущего.
соответствующего ПО). Причиной тако- лучшие практики отрасли. В 2001 го- Таким образом, для менеджера
го широкого распространения исполь- ду CCTA вошло в состав OGC (Office по подбору можно выделить, как ми-
зования компьютеров является соз- of Government Commerce), и с тех пор нимум, следующие сервисы со следу-
дание сетей и специализированного развитие ITIL осуществляется OCG. ющим SLA:
программного обеспечения, предна- В том же году вышла вторая версия n доступ в Интернет – с 9 до 18,
значенных для автоматизации бизнес- библиотеки ITIL. с временем простоя не более 10 ми-
операций, таких как, например, при- нут (в это время он может разгова-
ем заказа, передача его на исполне- Основы ITIL ривать по телефону с потенциаль-
ние менеджеру, отгрузка товара и т. д. По замыслу разработчиков, ITIL пред- ным соискателем);
Как следствие, увеличиваются требо- ставляет собой практическое рас- n работоспособность ПК – с 9 до 18,
вания со стороны топ-менеджмента ширение сервисного подхода на об- с временем простоя не более 30 ми-
и владельцев компаний как к качеству ласть информационных технологий нут (в случае наступления времени
самих программ, так и к качеству об- (ITSM – information technology service простоя менеджер может сделать
служивания компьютерного парка. management), основная идея которо- перерыв или пойти на обед).
И если раньше системный адми- го состоит в том, что IT-подразделе- n доступ к внешней телефонной
нистратор и программист в большинст- ние предоставляет основному бизне- связи – с 9 до 18, с временем про-
ве случаев сами устанавливали прави- су не нечто абстрактное, а конкрет- стоя не более 20 минут (в это вре-
ла игры, то есть формировали требо- ные сервисы конкретному внутренне- мя менеджер может производить
вания к инфраструктуре, окружению, му заказчику, для которых определе- поиск кандидата);
определяли характер и объем необхо- ны метрики качества и с потребите- n доступ к внутренней телефон-
димых работ, то с повышением степе- лями которых заключено соглашение ной связи – с 9 до 18 с временем
ни интеграции IT в основные процес- об уровне сервиса (SLA – Service Level простоя не более 4 часов (внутрен-
сы бизнеса с их стороны прозвучало Agreement). няя связь при описанной системе
вполне естественное желание – понять, Для того чтобы понять эту идею, для менеджера нужна как вспомо-
как работает IT, перевести его на бюд- приведу конкретные примеры. Пред- гательная функция, следовательно,
жетное управление, определить крите- положим, есть организация, зани- ей назначено самое высокое время
рии оценки и нормы качества… То есть мающаяся подбором персонала че- простоя).
управлять IT так, как будто оно – одно рез Интернет. Для менеджеров, кото-
из бизнес-подразделений. рые осуществляют подбор, установ- В то же время для координатора
лены следующие нормы: поиск кан- менеджеров (работает с 9 до 18, пере-
История возникновения дидата – 20 минут (включая перенос рывы те же, что и у менеджеров, зада-
Сама идея управления IT как бизне- его резюме во внутреннюю базу дан- ча – определение компетенций менед-
сом не нова. Уже в 80-х годах про- ных); 10 минут – на прозвонку и при- жеров, размещение заказов на канди-
шлого века по заказу британского глашение на собеседование (для уп- датов и категоризация кандидатов, ре-
правительства Центральное агентс- рощения будем считать, что прово- шение текущих вопросов с менедже-
тво по вычислительной технике и те- дят собеседование другие менедже- рами), который не занимается напря-
лекоммуникациям (Central Computer ры). Менеджер имеет право на обед мую работой с клиентами, а работает
and Telecommunications Agency, CCTA) продолжительностью в час и два пе- с внутренней базой, могут быть, напри-
разработа ло принципы управле - рерыва по 30 минут. Итого менеджер мер, выделены следующие сервисы со
ния IT, позволяющие, с одной сторо- за день должен найти минимум 14 кан- следующими SLA:
ны, использовать имеющиеся IT-ре- дидатов. Соответственно у данной ка- n доступ в Интернет – с 9 до 18,
сурсы максимально эффективно, а с тегории менеджеров в рабочее время с временем простоя не более 2 ча-
другой – эксплуатировать IT с мини- (с 9 до 18 часов) должен быть обеспе- сов (Интернет ему не нужен для ре-
мальными затратами. Результат вы- чен бесперебойный доступ в Интер- шения производственных задач,
полнения заказа представлял собой нет (исключая плавающее время обе- но поскольку он занимает руково-

№11, ноябрь 2008 57


администрирование
дящий пост, то время восстанов- 7. Управление финансами (обеспече- иногда – для организации системы мо-
ления работоспособности вспомо- ние финансирования и бюджетиро- тивации и т. д. Также стоит упомянуть,
гательного сервиса у него больше, вания IT). что библиотека ITIL, будучи собрани-
чем у рядового менеджера); 8. Управление мощностью (обеспече- ем передового практического опыта,
n работоспособность ПК – с 9 до 18, ние необходимых вычислительных не требует безусловного следования
с временем простоя не более 30 ми- мощностей для поддержки серви- всем положениям, описанным в ней,
нут (во время простоя координатор сов). и декларирует возможность гибкого
может сделать перерыв или пойти 9. Управление непрерывностью (обес- встраивания своей философии в ре-
на обед); печение непрерывности предостав- алии конкретной организации прак-
n доступ к внешней телефонной ления IT-услуг). тически любого размера. Например,
связи – с 9 до 18, с временем про- 10. Управление доступностью (обес- большая организация может полу-
стоя не более 1 часа (работоспо- печение доступности сервисов, ка- чить от внедрения рекомендаций ITIL
собность вспомогательного серви- тастрофоустойчивость). предсказуемость и управляемость IT,
са у него должна быть восстановле- средняя – возможность контролиро-
на быстрее, чем у рядового сотруд- Принцип «одного окна» подразу- вать IT-бюджет и понимание принци-
ника); мевает организацию службы Service пов работы IT, небольшая – предвос-
n доступ к внутренней телефон- Desk, то есть подразделения в рам- хищение возможных проблем в IT-ин-
ной связи – с 9 до 18, с временем ках IT, ответственного за прием, ре- фраструктуре и т. д. Естественно, что
простоя не более 10 минут (этот гистрацию и, возможно, разрешение эти преимущества могут мигрировать,
сервис для этого сотрудника явля- части поступающих инцидентов. Инци- то есть в рамках большой организации
ется важным). денты могут поступать в Service Desk также будет заметен эффект предвос-
по телефону, по электронной почте, хищения проблем и т. д.
Таким образом, для IT-подразделе- через корпоративные сайты, систему
ния, осуществляющего поддержку, по- документооборота и т. д. ITIL говорит Что дальше?
являются вполне определенные серви- о том, что все обращения клиентов При всей красоте нарисованной вы-
сы, которые они должны предоставить, (а под клиентом понимается в первую ше картины с внедрением ITIL при-
и характеристики этих сервисов, кото- очередь внутренний заказчик, так как ходят и сложности: с одной стороны,
рые должны быть выдержаны. ITIL смотрит на мир глазами IT-подраз- от IT‑персонала требуется большая
Вторая парадигма ITIL – процес- деления) должны быть зафиксирова- формализация производимых работ
сный подход и принцип «одного окна». ны и обработаны так, чтобы как мож- (например, формализуются процеду-
C точки зрения ITIL, все, что происхо- но быстрее решить возникшую проб- ры приёма инцидента, работы над раз-
дит внутри отдела информационных лему. Если сотрудники подразделения решением инцидента, контроля за ра-
технологий (вне зависимости от его Service Desk не смогли решить возник- ботой, в частности, времени выполне-
размера), можно описать в рамках тех ший инцидент, он передается далее – ния, документирования результатов
или иных процессов. на вторую линию поддержки (напри- работ и т. д.), что на первых порах мо-
В частности, ITIL (второй версии) мер, группе системных администра- жет мешать основной работе (впос-
выделяет следующие основные про- торов) и т. д. ледствии этот эффект нивелируется
цессы: Если с большими организация- за счет адаптации сотрудников к но-
1. Управление инцидентами (скорей- ми, как правило, не возникает вопро- вым условиям работы и понимания ими
шее разрешение сбойных ситуа- са, для чего нужны ITIL и Service Desk, преимуществ подхода ITIL), с другой –
ций, или инцидентов, представля- то в случае небольшой организации выстраивание отношений «по ITIL» мо-
ющих собой отклонения от режи- с маленьким IT-отделом часто мож- жет негативно сказаться и на сотруд-
ма нормального функционирова- но услышать мнение, что такого рода никах бизнес-подразделений, в част-
ния сервиса). служба может оказаться излишней, ности, возможны случаи, когда они на-
2. Управление проблемами (предо- а философия ITIL – бесполезной и не- чнут требовать «всего, здесь и сейчас»,
твращение возникновения инци- применимой. или выступить в оппозиции к новшес-
дентов). Практика показывает, что в этом твам, поскольку формальный подход
3. Управление конфигурациями (хра- случае функцию регистрации инциден- к IT может каким-либо образом заде-
нение описания инфраструктуры тов могут проводить непосредствен- вать их личные интересы (сложно сва-
и связи между ее элементами). но сотрудники группы, которая зани- лить вину «на этого системного адми-
4. Управление изменениями (реали- мается обслуживанием пользовате- нистратора»).
зация изменений максимально бе- лей. Собственно говоря, регистрация Таким образом, при внедрении ре-
зопасным образом). всех инцидентов не является самоце- комендаций ITIL каждая организация
5. Управление релизами (сохранение лью: с её помощью собирается ста- должна найти в ней свой необходимый
работоспособности инфраструкту- тистическая информация, на основа- и достаточный предел, набор ITIL-про-
ры при проведении изменений). нии анализа которой могут быть сде- цессов, подходов и методов работы,
6. Управление уровнем сервиса (оп- ланы те или иные выводы относитель- направленных на улучшение и гармо-
ределение параметров сервиса но того, где есть потенциальные «узкие низацию совместной работы IT-отдела
для конечного потребителя). места», где необходима модернизация, и основного бизнеса.

58
закон есть закон
Как наше законодательство регули- вере, которое закончилось взыскани-
рует интернет-сайты? Скажем, дол- ем с хостера компенсации за наруше-
жен ли сайт соответствовать требо- ние исключительных имущественных
ваниям закона о СМИ? Кто несёт от- прав). В случае, если сайт зарегистри-
ветственность за нарушающее зако- рован как СМИ, то гражданин или ор-
ны РФ сообщение, опубликованное ганизация вправе потребовать от ре-
на общедоступном постмодерируе- дакции опровержения не соответствую-
мом форуме – анонимный автор со- щих действительности и порочащих их
общения, владелец форума или же честь и достоинство сведений, которые
хостер (на дисках которого незакон- были распространены в данном средс-
ный контент находится физически тве массовой информации (ст. 43‑45
и может быть в ходе соответствую- Закона «О СМИ»). В остальных случа-
щей проверки обнаружен)? ях законодательством не предусмотре-
Рубрику ведет юрист
На сегодняшний день российское зако- но направление уведомления об устра- Юлия Штокало
нодательство не дает легального опре- нении нарушений, но это не исключает
деления понятия «сайт». В общем виде возможность его направления. 2. Когда размещение информа-
под сайтом понимается результат ин- Если без ведома правообладателя ции, которая нарушает права и инте-
теллектуальной деятельности, кото- происходит использование объекта ав- ресы других лиц, происходит на бло-
рый следует рассматривать как произ- торских прав, то правообладатель (ав- гах, страницах сайта, ответственность
ведение, состоящее из комплекса про- тор или тот, кому автор передал свои несут владельцы сайта, блога. Под-
грамм для ЭВМ, баз данных и элемен- права) может требовать по своему вы- тверждением этой позиции могут слу-
тов контента (текстов, фотографий, ди- бору от нарушителя вместо возмеще- жить недавние судебные процессы над
зайна сайта), представленных в фор- ния убытков выплаты компенсации: блоггерами (Дмитрием Соловьевым,
ме, позволяющей обеспечить доступ n в размере от десяти тысяч рублей Саввой Терентьевым).
к ним посредством информационной до пяти миллионов рублей, опреде- 3. Когда информация, нарушаю-
телекоммуникационной сети общего ляемом по усмотрению суда (раз- щая права и интересы других лиц бы-
пользования. мер компенсации в этих пределах ла размещена на форуме, ответствен-
Интернет-сайт не подпадает под определяется по усмотрению суда ность будет в первую очередь нести
понятие «средства массовой инфор- в зависимости от характера нару- автор этой информации. Если устано-
мации» (СМИ). Данный вывод осно- шения и иных обстоятельств дела вить авторство не удастся, ответствен-
вывается на анализе Закона «О СМИ», с учетом требований разумности ность будет нести владелец форума.
а также на существующей судебной и справедливости); Как средство защиты от недобросо-
практике. Следовательно, и обяза- n в двукратном размере стоимос- вестных посетителей форума мож-
тельной регистрации сайта в качест- ти экземпляров произведения или но порекомендовать сформулировать
ве СМИ не предусмотрено, что не ис- в двукратном размере стоимости правила форума, в которых обозначить
ключает возможность добровольной права использования произведе- цели и тематику форума с указанием
регистрации интернет-сайта как сред- ния, определяемой исходя из це- на недопустимость выхода за пределы
ства массовой информации по заявле- ны, которая при сравнимых обсто- тематики, недопустимость написания
нию его владельца. ятельствах обычно взимается за сообщений, нарушающих нормы права,
Теперь рассмотрим вопрос ответс- правомерное использование про- установить правила регистрации, кото-
твенности владельца сайта за разме- изведения. рые бы позволяли идентифицировать
щение с нарушением законодательс- пользователя, размещающего инфор-
тва объектов авторских прав. Выделю Чтобы взыскать компенсацию, до- мацию, вести модерирование форума.
следующие моменты: статочно доказать факт правонаруше- В данном случае речь идет о модери-
1. Когда происходит размещение ния. Правообладатель, обративший- ровании форума как о возможности
на сайте охраняемого объекта автор- ся за защитой нарушенного права, не удалить сообщения, содержащие, на-
ских прав (статьи, аудио-, видеофай- обязан доказывать размер причинен- пример, призывы к расовой дискрими-
лы и т. п.), ответственность несет вла- ных ему убытков. Автор или иной пра- нации, негативные высказывания в от-
делец сайта, на котором были разме- вообладатель (автор может передать ношении правоохранительных органов,
щены контрафактные произведения свои права, тогда это будут разные лю- других юридических лиц, людей, не ос-
или объекты смежных прав. В послед- ди) может по своему выбору требовать нованные на фактах. Именно за такие
нее время появилась тенденция по при- от нарушителя выплаты компенсации высказывания судили блоггеров и был
влечению к ответственности, кроме за каждый случай неправомерного ис- предъявлен иск к ООО «Мегасофт».
владельцев сайта, хостеров, предо- пользования произведения либо за до- Конечно, если пользователь размес-
ставляющих услуги по размещению пущенное правонарушение в целом. тил определенный материал, то нуж-
на своих серверах контент-сайтов (на- Если говорить об уголовном пре- но исходить из его добросовестности
пример, дело о привлечении к ответс- следовании, то возможно возбужде- и удалять такой материал только в слу-
твенности ЗАО «Мастерхост» за разме- ние и уголовного дела по заявлению чае возникновения спора об авторстве
щении сайта www.zaycev.net на его сер- правообладателя. материала.

№11, ноябрь 2008 59


IP-телефония

Телефония для эпохи


Web 2.0

Антон Борисов
Как часто вы находились в ситуации, когда было проще один раз сказать словами, нежели
несколько раз объяснять, например, в окне ICQ-мессенджера? Давайте попробуем разобраться,
как создать комфортные для работы условия, а именно – рассмотрим тот инструментарий,
что поможет донести наш голос до удаленного собеседника.

С
ейчас, наверное, уже трудно ко- ние на такой вид коммуникаций. В об- дится устанавливать и настраивать
го-то удивить такими термина- щем-то, это должно означать, что лю- SIP-телефонию каждый раз, когда че-
ми, как: VoIP-соединение, SIP- ди представляют себе механизм об- ловек меняет свое местоположение.
телефония, сервер телефонии Asterisk щения посредством софтовых теле- Что не всегда кажется удобным и пра-
и т. п. И это отрадно, так как означа- фонов и более того – немалую часть вильным решением, ибо для того, что-
ет, что, во-первых, создана и исполь- времени проводят в разговорах че- бы звонить, достаточно будет перенес-
зуется транспортная инфраструктура рез IP‑среду. ти только гарнитуры.
для цифрового обмена информацией Единственное, что может огорчать, Предполагается, что Asterisk у вас
(интернет-каналы) и, во-вторых, со- так это привязка звонящего челове- уже настроен (подробно рассмотрено
здано позитивное общественное мне- ка к своему рабочему месту – прихо- в более ранних номерах журнала [1-4]),

60
IP-телефония
учетные записи пользователей созданы и вы можете поз- allow=gsm
allow=ulaw
вонить своему коллеге с помощью SIP-телефона. Отлично, allow=alaw
следующий шаг – сделать так, чтобы вы могли осуществить
звонок и с любого другого места. И заведем теперь планы дозвона указанным пользовате-
Предварительно убедимся, что Asterisk у нас работоспо- лям – указанные строки вносятся в файл extensions.conf:
собен хотя бы в минимальной конфигурации. Если он в ва-
шей сетевой инфраструктуре никогда не разворачивался exten => 1200,1, Macro(stdexten,1200,SIP/1200)
exten => user1, 1, Goto(1200|1)
ранее, то ничего страшного. Установка тривиальна (приво-
дится пример для FreeBSD 6.2 и Аsterisk версии 1.4.21): exten => 200,1, Macro(stdexten,200,SIP/200)
exten => user3, 1, Goto(200|1)

# cd /usr/ports/net/asterisk/ Делаем рестарт Asterisk:


# make config

В появившемся диалоге выбираете нужные опции. /usr/local/etc/rc.d/asterisk restart


По умолчанию можете выбрать все.
+--------------------------------------------------------------------+
Дело остается за малым. Установить SIP-клиента и про-
| Options for asterisk 1.4.21.2_3 | верить, что базовые настройки правильные и звонок с або-
| +----------------------------------------------------------------+ |
| | [X] OGGVORBIS Enable Ogg Vorbis support | |
нента 200 проходит на абонента 1200.
| | [X] ODBC Enable ODBC support | | При выборе софтового телефона ставка делалась
| | [X] POSTGRES Enable PostgreSQL support | |
| | [X] RADIUS Enable RADIUS accounting support | |
на следующие критерии:
| | [X] SNMP Enable SNMP support | | n мультиплатформенность;
| | [X] H323 Enable H.323 support | |
| | [X] FREETDS Enable FreeTDS support | |
n эстетичность.
| | [X] JABBER Enable Jabber and Gtalk support | |
| | [X] SQLITE Enable SQLITE support | |
| | [X] CODEC_PATCH Apply codec negotiation patch | |
Поэтому при всем богатстве выбора, а выбиралось
| | [X] ILBC Enable iLBC codec | | между Ekiga, Twingle, SJPhone, Linphone, внимание при-
| | [X] MISC_PATCHES Apply additional patches | |
| | [X] ZAPTEL Enable Zaptel support | |
влек X‑Lite от компании CounterPath [6]. Несмотря на за-
| | | | крытость – телефон распространяется только в бинар-
| | | |
+-+----------------------------------------------------------------+-+
ной форме – поддержка Windows/Mac/Linux свидетельс-
| [ OK ] Cancel | твует о том, что больше 95% пользователей смогут сво-
+--------------------------------------------------------------------+
бодно пообщаться.
Далее: Итак, пользовательские настройки сделаны. Абонент
200 звонит своему коллеге – абоненту 1200. Связь иде-
# make && make install && make clean альная.
Теперь приступаем к той идее, название которой бы-
Сервер телефонии теперь установлен. Организуем за- ло озвучено в самом начале. А именно, сделать место зво-
пуск Asterisk при старте системы, для этого в файл /etc/ нящего по-настоящему мобильным. Конечно, полностью
rc.conf добавим строку: мобильным сделать не получится, так как вряд ли у вас
для каждого сотрудника выделен ноутбук.
asterisk_enable="YES" Будем ориентироваться на обычного пользователя, ко-
торый периодически бороздит просторы Сети, т.е. на ра-
Файлы конфигурации могут быть иными, в зависимости бочем столе присутсутвует браузер и для этого браузе-
от выбранной вами платформы или дистрибутива. ра установлены
Добавим учетные записи первых пользователей, от име- дополнительные
ни которых будут произведены звонки. Вносим следующие плагины.
строки в файл sip.conf:
Звонок
[200]
type=friend
с помощью
host=dynamic средств
username=200
secret=mypasswd
Java
nat=y Первое решение
context=default полагается в сво-
callerid="Anton" <200>
allow=gsm ей работе на те
allow=ulaw средства, что раз-
allow=alaw
виты в современ-
[1200] ной Java и разра-
type=friend
host=dynamic ботаны в рамках
username=1200 к лиента IAX [8].
secret=mypasswd
nat=no А именно, обра-
context=default ботка звуковых
callerid="Anton" <1200> Рисунок 1. Звонок абоненту 1200
потоков в форма- через JIAXClient

№11, ноябрь 2008 61


IP-телефония
Открытость кодов JIAX Client подразумевает, что соб-
рать апплет можно под любую платформу, где может ра-
ботать JVM.
Как происходит установка клиента JIAX на практике?
У меня установлен nginx в качестве веб-сервера, что од-
нако не означает, что любой другой не подойдет. Вовсе нет.
Просто так получилось, что требовался быстрый и легко-
весный веб-сервер.
Итак, настройки nginx не отличаются от стандарт-
ных, произведем изменения только в секции server фай-
ла nginx.conf:

1 server {
2 listen 8811;
3 server_name localhost;
4 location / {
5 root /usr/local/www/nginx;
6 index index.html index.htm;
7 auth_basic "Ask yourself!";
8 auth_basic_user_file /usr/local/etc/nginx/htpasswd;
9 }
Рисунок 2. Авторизация на доступ к ресурам веб-сервера
В строке 2 указываем, чтобы nginx работал на высоком
порту 8811. В строке 5 указываем, где хранятся документы
для веб-сервера. И на время тестового периода я решил
ограничить доступ лиц, которые могут пользоваться услу-
гами телефонии – строки 7 и 8. Для вашего случая, их мож-
но закомментировать.
Копируем содержимое jiaxclient-0.0.6 в директорию /usr/
local/www/nginx/sip/ и с рабочей машины пользователя захо-
дим браузером по адресу – http://mgwe:8811/sip/jiaxtest.html,
где mgwe – адрес вашего Asterisk или nginx-сервера в инт-
ранет, либо в интернет-сети (см. рис. 2).
Вводим пароль для доступа к HTML-страницам серве-
ра nginx (вспомните про строки 7 и 8 файла конфигурации
nginx). И утвердительно отвечаем, что мы доверяем JVM
исполнить апплет jiaxclient (см. рис. 3).
Затем делаем звонок другу (см. рис. 1) и общаемся, по-
ка не закончится последний IP-пакет.
Звонок вызова на стороне вашего коллеги будет проис-
ходить от имени пользователя Guest IAX User (см. рис. 4).
Рисунок 3. Доверить запуск апплета на выполнение На что стоит обратить внимание при использовании
клиента JIAX? На принадлежность пользователей одному
те WAV, GSM (и некоторых других) самой JVM и плюс к это- контексту, а именно default. Специально прописывать на-
му – обработка сигнализации IAX (Inter Asterisk eXchange). стройки для пользовате-
В итоге получился апплет, который физически размеща- ля Guest IAX User не надо.
ется на том же сервере, что и сам Asterisk, а пользователь Asterisk сам подставля-
просто-напросто вводит номер абонента, которому нужно ет название этого поль-
позвонить (см. рис. 1). зователя при установке
И при успешном соединении можно начинать говорить соединения. Если хоти-
через гарнитуру. те особо выделить, что
Плюсы у данного решения: звонок происходит с веб-
n не требуется установка SIP-телефона; сайта, например, как со-
n звонок (кодек и сигнализация) обрабатывается через единение от пользовате-
Java-плагин браузера; ля WebSite Client, то луч-
n мультиплатформенность. ший способ – это обра-
титься к документации
Минусами являются: на Asterisk. В том случае,
n необходимость использовать JVM; когда вы заводите поль-
n получение данных с микрофона происходит через JNI- зователей в соответс-
интерфейс, что требует установки библиотеки libjiaxc.so твии с названием под- Рисунок 4. Входящий звонок
от «фантомного» пользователя
(UNIX) или jiaxc.dll (Windows) на клиентскую машину. разделения или функци- Guest IAX User

62
IP-телефония
ональной принадлежности, например, office, то следует пом-
нить, что звонок от пользователя SIP1@default будет невоз-
можен своему коллеге SIP2@Office2. Из-за разных контек-
стов – default и Office2. Придется всех заносить в контекст
default, либо дорабатывать сам JIAX-клиент.
Да, и не забудьте поставить драйверы к аудио-систе-
ме на клиентской машине, иначе получите ошибку прило-
жения (cм. рис. 5).

Позвоним с помощью add-on


для браузера
Столь замечательный подход использовать взаимодейс-
твие с помощью IAX-сигнализации не мог оставить в сто-
роне идею позвонить не через Java-плагин, а напрямую,
из браузера. Правда объективности ради, следует уточ-
нить, что из семейства Mozilla [10].
Устанавливаем add-on с названием MozIAX. Выставля-
ем нужные параметры в разделах Network и Codecs. Обра-
Рисунок 5. Типичная ошибка, когда не удается
щаю ваше внимание, что необходимо будет добавить новых, инициализировать аудио-подсистему
IAX-пользователей. Указанные для примера пользователи
200 и 1200 были, если можно так выразиться, немного дру-
гого формата, а именно SIP (см. рис. 6).
Добавим пользователя marko2 в файл iax.conf.

[marko2]
type=friend
host=dynamic
regexten=1234
secret=moofoo
context=default
permit=0.0.0.0/0.0.0.0

Не забудем добавить также нужный номер extension это-


го пользователя. И самое главное, нам потребуется еще вне-
сти изменения в Manager Interface – файл manager.conf:

[tony]
secret = mypass
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user

Теперь ждите разгоряченных признаний от поклонниц,


звонящих вам из браузера Mozilla Firefox (см. рис. 7). Но вы Рисунок 6. MozPhone плагин установлен и правильно настроен
в безопасности, так как VoIP-пакеты безопасны для орга-
низма.
Какие могут быть «подводные грабли»? Необходимость
открывать наружу порт 5038 от Asterisk Manager Interface –
изменения в секции [general] опции bindaddr. Неспособ-
ность принять звонок, если звонящий пользователь нахо-
дится за NAT.
Текущая версия MozIAX поддерживает версии Mozilla
только на платформах Windows и Linux. «Яблочные» поль-
зователи, по всей видимости, остаются все еще не у дел.

«Встречный звонок»
Использование Asterisk Manager Interface на самом деле
не такая уж и плохая идея. В свете того, что сам Asterisk
и веб-сервер запущены и работают на одной машине –
не придется открывать лишние порты, да и само взаимо-
действие происходит в рамках localhost. Мы можем подго-
товить скрипт, параметрами к которому являются номера
соединяемых абонентов. Рисунок 7. Звонок «приходит» с идентификатором MozPhone

№11, ноябрь 2008 63


IP-телефония
Как это выглядит на практике? Представим себе следу- В качестве скрипта, который делает всю закулисную ра-
ющую ситуацию (см. рис. 8). Абонент A находится в своем боту, выступает TACI-скрипт [11], написанный на Perl. Раз-
кабинете, при этом у него на рабочем столе запущен и ав- местим его на веб-сервере, организуем обработку вызо-
торизован SIP-телефон. Абонент B, находящийся в другом вов скриптов на Perl и попробуем позвонить. Но предва-
филиале, но фактически в той же локальной сети, решил рительно не забудьте добавить параметр priority в вызо-
позвонить. Благо перед глазами у него аппаратный SIP-те- ве через Manager Interface – строка 177. Новая должна вы-
лефон, который подключен к Asterisk-серверу. Абонент B за- глядеть как:
ходит на корпоративный сайт, вводит в форму номер своего
телефона и нажимает на кнопку «Соединить с самым глав- $tn->print("Action: originate\nExten: ↵
$exten\nContext: $context\nPriority: ↵
ным». В итоге скрипт производит соединение с самим вы- $priority\nChannel: ↵
зывающим абонентом (B), а затем дозванивается до «са- $phonetype/$account\nPriority:1\nCallerid: ↵
$callerid\n\n");
мого главного» (абонент A).
Во что выльется практическое примение данного ре- Подсоединяем гарнитуру, заносим нужные телефоны
шения на том или ином предприятии, сказать заранее до- в поля: Number to call, Your Extension, контекст – default, и на-
статочно сложно. Следует, однако, помнить, что как только жимаем на кнопку «Make call!». Прозвонит сначала телефон
у вас разрастается телефонная инфраструктура и между- с номером 1200, а затем зазвонит у нужного нам абонента,
городние звонки через SIP-оператора становятся обыден- в данном случае с номером 200. Соединение состоялось.
ностью, то возникает желание быть на связи с конкретным
человеком вне зависимости от того, где географически он Звонок в стиле Flash!
в данный момент расположен. И звонить ему со служебно- Сегодняшнее повествование было бы неполным, оставь
го портала всегда по одному номеру, например 1200. мы без внимания набирающие всё большую популярность
и распространенность Flash-техно-
логии. Тем более учитывая тот факт,
что сама компания Adobe очень ответс-
твенно подошла к теме P2P- и SIP-ком-
муникаций и на текущий момент дан-
ные технологии представлены в про-
ектах Pacifica и в самом FlashPlayer.
То есть фактически на столе у каж-
дого пользователя находится движок,
с помощью которого можно произвес-
ти звонок. Давайте рассмотрим схему,
по которой работает данное решение
(см. рис. 10).
На стороне веб-сервера дополни-
тельно запущен Red5-сервер. Он пред-
ставляет собой сервер коммуника-
ций, написанный на Java. В свое вре-
мя Adobe Systems придумала про-
Рисунок 8. Схема взаимодействия абонентов с 2 разными типами телефонов токол RTMP (Real Time Messaging
Protocol [12]) для обмена потоковы-
ми сообщениями между flash-плее-
ром (веб-браузер на стороне клиен-
та) и Adobe Flash Media Server. Прото-
кол проприетарный, но благодаря ре-
верс-инжинирингу он был переписан
на Java, и получился Red5. Фактичес-
ки он может работать там же, где ра-
ботает и Java 5/Java 6.
Красным цветом показана сигна-
лизация – передача контрольных со-
общений, индикация звонка и т. п. Си-
ним отмечено прохождение сигнала от
удаленного абонента через SIP-сервер,
а затем через Red5-сервер. Зеленый
цвет – передача голоса с микрофона,
через приложение на стороне браузе-
ра и далее аналогичным путем, что и
Рисунок 9. Perl-скрипт выполняет всю закулисную работу сигнал от удаленного абонента.

64
IP-телефония
Что у нас получается? Пользователь заходит на стра-
ницу сервера и запускает на ней Flex-приложение (по сути
flash-приложение) (см. рис. 11). Указывает свои параметры
для Asterisk-сервера и, авторизовавшись, получает окошко
с SIP-телефоном (см. рис. 12).
Теперь, набрав заветный номер, он может провести клас-
сическую английскую беседу о чае и погоде со своим да-
леким визави (см. рис. 13).
Как это будет выглядеть на стороне сервера? Во-пер-
вых, потребуется Java версии 6. Хотя может использо-
ваться и предыдущая, 5-я, версия, но разработчики реко-
мендуют все-таки переходить на более новую. На страни-
це [13] забираете tarball версии 0.7.0final сервера Red5, за-
тем ja‑файл red5.jar (детальная инструкция расположена
на сайте [14]) и сам архив SIP-телефона. Его следует раз-
местить в директории webapps, на стороне сервера. Затем,
запустив скрипт red5.sh, вы получите работающий Red5-
сервер, готовый принимать звонки. В целях разграниче-
ния функций вы можете разместить Red5 на другой маши-
не, нежели сам Asterisk.

В качестве эпилога
У каждого рассмотренного решения есть свои сильные
и слабые стороны. Но ясно одно, что телефония, а по боль-
шому счету видео- и аудиоконференции, находит все боль-
шее применение в повседней жизни, будь то совещание ра-
бочей группы в транснациональной компании либо уточне-
Рисунок 10. Сигнализация и передача данных при использовании
ние требований технического задания в маленькой фир- Flash-технологий
ме. Как говорил один политический деятель в прошлом
веке: «В решении какой-либо важной задачи непременно 4. Платов М. Asterisk и Linux: миссия IP-телефония. Действие 3.
должны быть взяты телефон, телеграф, станции». И если //«Системный администратор», №8, 2005 г. – С. 10-19.
под станциями рассматривать шлюзы для выхода в Интер- 5. http://www.asteriskguru.com/tutorials/sip_nat_oneway_or_no_
нет, а под телеграфом подразумевать сервер электронной audio_asterisk.html.
почты, то как «взять» телефон для нужд конечного пользо- 6. http://www.counterpath.com.
вателя, мы рассмотрели сегодня. 7. http://www.hem.za.org/jiaxclient.
8. http://iaxclient.wiki.sourceforge.net.
1. Платов М. Что важно знать об IP-телефонии? //«Системный 9. http://www.voip-info.org/wiki-IAXClient.
администратор», №5, 2005 г. – С. 20-25. 10. http://moziax.mozdev.org.
2. Платов М. Asterisk и Linux: миссия IP-телефония. //«Системный 11. http://www.azxws.com/asterisk.
администратор», №6, 2005 г. – С. 12-19. 12. http://en.wikipedia.org/wiki/Real_Time_Messaging_Protocol.
3. Платов М. Asterisk и Linux: миссия IP-телефония. Действие 2. 13. http://osflash.org/red5/070final.
//«Системный администратор», №7, 2005 г. – С. 32-38. 14. http://code.google.com/p/red5phone.

Рисунок 11. Пользовательские данные Рисунок 12. Абонент авторизован, Рисунок 13. Трубка на удаленном конце
введены и можно произвести звонок поднята – соединение осуществлено

№11, ноябрь 2008 65


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

Установка цепочки серверов сертификации


как часть внедрения PKI в домене
Часть 3

Станислав Шпак
В первых двух частях статьи [1, 2] мы рассматривали процесс установки и настройки цепочки
из трех серверов, которые будут составлять ядро структуры PKI в вашем домене. Осталось
только произвести некоторые настройки в домене, чтобы вся конструкция перестала быть
бесполезным железом и наконец заработала.

В
отличие от изолированных СА СА использует шаблоны серти- будут применены к сертификату в про-
(Certificate Authority) СА уровня фикатов для автоматизации форми- цессе его выпуска.
предприятия обычно настраи- рования сертификатов из запросов. Шаблоны сертификатов хранятся
ваются на автоматический выпуск сер- Windows Server 2003 Enterprise Edition в Active Directory, поэтому, сконфигу-
тификатов. При этом для заполнения (и Datacenter Edition) поддерживают рировав шаблон на одном СА, вы бу-
нужных полей сертификата информа- шаблоны второй версии (V2), в то вре- дете иметь доступ к этому шаблону
ция берется из Active Directory. Разуме- мя как более ранние ОС – только пер- на любом другом СА в лесу. Это озна-
ется, сертификаты для более важных вой (V1). Основное различие между чает также и то, что, удалив шаблон,
целей (например, смарт-карты) можно версиями в том, что шаблоны V1 пре- вы удалите его из Active Directory, и он
выпускать вручную – такой метод дает допределены и неизменяемы, в то вре- не будет больше доступен нигде.
возможность более строго контроли- мя как шаблоны V2 позволяют сконфи- Для использования шаблонов V2
ровать процесс сертификации. гурировать множество опций, которые в смешанной доменной среде требу-

66
безопасность
ются расширение схемы AD до уровня
2003 Server и установка, как минимум,
SP3 на контроллеры домена под уп-
равлением Windows 2000. Кроме того,
использовать шаблоны V2 для запро-
са сертификатов могут не все клиен-
ты – тут существуют разные ограниче-
ния в зависимости от метода запроса
сертификата.
Таких методов несколько – серти-
фикат может быть запрошен автома-
тически, через соответствующую ос-
настку MMC, посредством Web или че- Рисунок 1. Оснастка Certifacate Templates
рез скрипт из командной строки. Поз-
же рассмотрим некоторые из них. Имейте также в виду, n Чтобы добавить шаблон в список шаблонов, обрабаты-
что если в домене существуют несколько выпускающих ваемых СА, надо в оснастке Certification Autority в раз-
СА, то запрос сертификата от клиента может быть на- деле Certification Templates нажать правую кнопку мыши
правлен на любой доступный СА, причем этот СА необя- и выбрать «New → Certificate Template to Issue» («Соз-
зательно будет ближайшим. Это стоит учесть, распола- дать → Выдаваемый шаблон сертификата»), после че-
гая СА в домене. го выбрать из списка шаблона нужный.
Автоматический выпуск сертификатов настраивает- n Если вы создали копию шаблона, настроили его свойст-
ся как комбинация доменных политик и шаблонов серти- ва, не забыли отметить опцию Publish in Active Directory,
фикатов. В результате выпуск сертификатов может стать а этот шаблон не появился в списке доступных для СА
для пользователя абсолютно прозрачным. Кроме того, шаблонов, подождите немного.
это снижает стоимость администрирования всей струк- n В тех шаблонах, которые предназначены для выпус-
туры PKI. ка сертификатов с целью шифрования данных, иногда
Те шаблоны сертификатов, по которым СА может выда- имеет смысл включить опцию Archive subject’s encryption
вать сертификаты после установки, можно посмотреть в ос- private key (архивировать закрытый ключ субъекта)
настке Certification Authority (центр сертификации) в разде- на вкладке Request Handling (обработка запроса) –
ле Certificate Templates (шаблоны сертификатов). Если на- это может помочь в будущем в случае необходимости
жать в этом разделе правую кнопку мыши и выбрать пункт восстановления данных, зашифрованных этим серти-
Manage (управление), то запустится оснастка Certificate фикатом.
Templates (шаблоны сертификатов), с помощью которой n Если надо включить в шаблоне какую-то опцию, а это
можно управлять шаблонами сертификатов (см. рис. 1). сделать нельзя ввиду того, что шаблон относится
Эти две оснастки тесно связаны, поэтому уделим им чуть к версии 1, создайте дубликат шаблона (но помните,
больше внимания. что не все клиенты умеют работать с шаблонами V2).
Итак, что нужно знать:
n Шаблоны V2 помечены в списке цветной иконкой, Итак, теперь проведем первичную настройку шабло-
в то время как шаблоны V1 – черно-белой. нов. Нам потребуются, как минимум, шаблоны типа Domain
n Повторюсь: параметры шаблонов V2 менять можно, Controller (контроллер домена), Computer (компьютер) и User
V1 – нет. (пользователь). Все эти шаблоны уже перечислены в раз-
n Очень не рекомендуется удалять шаблоны.
n Если нужно исправить шаблон, лучше создать его ко-
пию (щелкнув правой кнопкой мыши на имени шабло-
на и выбрав из меню Dublicate Template (скопировать
шаблон).
n Для использования в СА становятся доступны те шаб-
лоны, в свойствах которых на вкладке General (общие)
отмечена опция Publish in Active Directory (опубликовать
сертификат в Active Directory).
n Даже если шаблон доступен для СА, чтобы пользовате-
ли могли с ним работать, надо настроить права на вклад-
ке Security (безопасность).
n Если вы используете доменную структуру с корневым
доменом, обратите внимание, что по умолчанию пра-
ва для использования шаблона обычно даются учет-
ным записям из корневого домена. Для учетных запи-
сей из нижележащих доменов эти права надо дать яв-
ным образом. Рисунок 2. Выбор шаблона сертификата

№11, ноябрь 2008 67


безопасность
деле Certificate Templates оснастки Certificate Authority, Event Type: Error
так что нам остается только проверить, есть ли у пользо- Event Source: AutoEnrollment
Event Category: None
вателей необходимые права на использование этих шаб- Event ID: 13
лонов. Для этого в оснастке Certificate Templates нужно най- Date: 21.10.2008
Time: 20:36:50
ти каждый из этих шаблонов и, заглянув в свойства, про- User: N/A
верить установки на вкладке Security. Поскольку в нашей Computer: RES-DC
тестовой среде мы использовали двухуровневую доменную Description:
Automatic certificate enrollment for local system failed to enroll
структуру с корневым доменом [1], то разрешения для шаб- for one Domain Controller certificate (0x80070005). Access is
лонов установлены только для учетных записей из домена denied.
Dedicated.Root. Нам необходимо в соответствующие шаб-
лоны добавить право Enroll (Заявка) для учетных записей Аналогичным образом можно произвести настройку до-
домена Res.Dom. Если у вас учетные записи пользовате- менной политики для автоматической выдачи сертификатов
лей и компьютеров будут располагаться в том же домене, компьютерам домена и, если необходимо, пользователям.
что и выпускающий СА, то никаких дополнительных настро- Обратите внимание на настройку Autoenrollment setting (па-
ек безопасности не потребуется. раметры автоматической подачи заявок) в ветке «Computer
Как уже говорилось в предыдущей части статьи, в доме- Configuration → Windows Settings → Security Settings → Public
не Windows 2000 происходил автоматический запрос сер- Key Policies». Она позволяет указывать, нужен ли автомати-
тификатов контроллерами домена, как только появлялся ческий выпуск сертификатов и если да, то каким образом
СА уровня предприятия. В домене Windows 2003 этого нет, проводить обновление сертификатов по истечении срока
поэтому начнем с настройки автоматического запроса сер- их действия (см. рис. 3).
тификатов контроллерами домена. Если по каким-то причинам автоматический выпуск сер-
Для этого надо открыть групповую политику контролле- тификатов недоступен (например, нужно выпустить серти-
ров домена (обычно это Default Domain Controller Policy) и пе- фикат для компьютера, который не является членом доме-
рейти в ветку «Computer Configuration → Windows Settings → на), то можно воспользоваться одним из способов, из пе-
Security Settings → Public Key Policies → Automatic Certificate речисленных ранее. Например, через браузер (рекомен-
Request» («Конфигурация компьютера → Конфигурация дуется Internet Explorer версии 5.01, но вообще чем новее,
Windows → Параметры безопасности → Политики откры- тем лучше).
того ключа → Параметры автоматического запроса серти- Примечание: для того чтобы воспользоваться воз-
фикатов»). Здесь надо нажать правую кнопку мыши и вы- можностью веб-запроса сертификата через браузер
брать «New → Automatic Certificate Request» («Создать → из ОС Windows Vista, потребуется применить дополнитель-
Автоматический запрос сертификата»), в результате че- ный патч для выпускающего СА [3].
го запустится несложный мастер, в котором нужно ука- Итак, запускаем браузер и открываем страницу
зать, автоматический выпуск каких типов сертификатов http://EntCA/certsrv (где EntCA – имя нашего СА). Мы попа-
мы хотим настроить. Поскольку эта политика применяется даем на стартовую страницу сервера сертификатов, с ко-
только к контроллерам домена, то и выбираем из предло- торой можно пойти по трем ссылкам:
женного списка Domain Controller (см. рис. 2). После этого n Request a certificate – запросить сертификат;
из командной строки запускаем команду «gpupdate /force» n View the status of a pending certificate request – пос-
для применения групповой политики и проверяем, что кон- мотреть статус запрошенного сертификата;
троллер домена получил сертификат. Для этого открыва- n Download a CA certificate, certificate chain, or CRL –
ем системный журнал событий в разделе Applications (про- скачать сертификат СА, цепочку из сертификатов вы-
граммы), где мы должны увидеть информационное собы- шестоящих СА или CRL.
тие от источника AutoEnrollment с ID 19 примерно следую-
щего содержания: В нашем случае нажимаем Request a certificate и по-
падаем на следующую страницу, где нужно либо выбрать
Event Type: Information
Event Source: AutoEnrollment
тип сертификата, либо перейти к подробному формирова-
Event Category: None нию запроса по ссылке Аdvanced certificate request. Нажав
Event ID: 19 на нее, мы переходим к трем опциям, из которых нас инте-
Date: 21.10.2008
Time: 22:18:29 ресует первая – Create and submit a request to this CA. На-
User: N/A жав на ссылку, можно выбрать нужный тип сертификата
Computer: DC1
Description:
(в списке представлены только те шаблоны, для использо-
Automatic certificate enrollment for local system successfully re- вания которых у пользователя достаточно прав) и ряд до-
ceived one Domain Controller certificate from certificate authority полнительных параметров (которые меняются в зависи-
EntCA on EntCA.Dedicated.Root.
мости от выбранного шаблона) (см. рис. 4). Нажав на кноп-
Это говорит о том, что сертификат успешно получен. ку Submit внизу страницы, мы отправляем запрос на выда-
Если же в групповых политиках будет включено автома- чу сертификата на СА. Если на СА для данного шаблона
тическое получение сертификата, а в шаблоне на вклад- настроен автоматический выпуск сертификата, то ссыл-
ке Security не будут даны права на использование этого ку на скачивание и установку сертификата вы увидите
шаблона, то в журнале событий можно будет увидеть сле- уже на следующем шаге. Иначе вам нужно будет вручную
дующее: выпустить сертификат посредством оснастки Certification

68
безопасность
Authority и затем либо экспортировать
его из оснастки, либо воспользовать-
ся браузером.
Когда вы устанавливаете серти-
фикат на компьютер, который не явля-
ется членом домена, то нужно не за-
быть, что вам еще потребуется уста-
новить сертификат СА в хранилище
доверенных корневых сертификатов.
Получить сертификат СА можно или
через веб-запрос (по ссылке Download
a CA certificate, certificate chain, or CRL),
или взять из точки распространения
сертификатов, доступной клиентам
(обычно это то же самое место, куда
публикуются CRL из СА предприятия).
Очень важно, чтобы внешние кли-
енты могли получить доступ к серти-
фикату вашего корневого СА, поэтому
не пренебрегайте возможностью раз-
мещения файлов CRL и файла серти- Рисунок 3. Параметры автоматической подачи заявок
фиката корневого СА в местах, доступ-
ных извне (например, на веб-сайте). Имея сертификат кор- воляет создать резервную копию всей связанной с СА ин-
невого СА (в нашем случае это файл RootCA_RootCA.crt), формации.
нужно открыть оснастку Certificates (не важно, для пользова-
теля или компьютера) и открыть ветку «Certificates → Trusted 1. Шпак С. Установка цепочки серверов сертификации как часть
Root Certification Authorities → Certificates» («Сертификаты → внедрения PKI в домене. Часть 1. //Системный администратор,
Доверенные корневые центры сертификации → Сертифи- №8, 2008 г. – С. 54-58.
каты»). Нажать правую кнопку мыши, выбрать All Tasks v 2. Шпак С. Установка цепочки серверов сертификации как часть
Import («Все задачи → Импорт») и далее, следуя указаниям внедрения PKI в домене. Часть 2. //Системный администратор,
мастера, импортировать сертификат в хранилище (на вто- №10, 2008 г. – С. 60-64.
ром шаге лучше указать хранилище в явном виде, не поз- 3. http://support.microsoft.com/kb/922706.
воляя мастеру выбрать его автоматически). 4. Windows Server 2003 PKI Operations Guide – http://technet.
microsoft.com/en-us/library/cc787594.aspx.
Заключение
Теперь, когда мы получили работающую цепочку серве-
ров сертификации, кратко перечислю основные момен-
ты процесса:
n Для установки корневого СА используйте файл
capolicy.inf, в котором разделы указания CDP и AIA надо
оставить пустыми.
n Изолированные СА держите физически выключенны-
ми до тех пор, пока не потребуется обновить файл CRL
или сертификат СА.
n Тщательно выбирайте интервалы публикации списков
отзыва сертификатов.
n При обновлении CRL или сертификата изолированно-
го СА не забывайте импортировать измененные данные
в AD. Только СА уровня предприятия делают это авто-
матически.
n Следите за тем, чтобы в точках CDP всегда лежали
актуальные CRL-файлы, а сами точки CDP были до-
ступны.
n Поместите сертификат корневого СА в такое место, где
он будет легко доступен как для внешних, так и для внут-
ренних клиентов.
n Делайте резервное копирование СА. Для этого можно
использовать команду certutil.exe, но только использо-
вание программы ntbackup с опцией System state поз- Рисунок 4. Запрос сертификата через браузер

№11, ноябрь 2008 69


образование

Немного
о сертификации
Cisco

Андрей Бирюков
Многие специалисты по сетевым технологиям наверняка сталкивались с упоминанием
сертификатов CCNA, CCSP, CCNP и других статусов от компании Cisco Systems. В этой статье
я расскажу о том, что собой представляет сертификация этого производителя, а также
расскажу о том, как лучше готовиться, чтобы получить эти статусы.

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

70
образование
поминать, что сертификация являет- Сертификации Cisco
ся важным критерием при начальном Certification Paths Associate Professional Expert
рассмотрении кандидатуры при тру- Routing & Switching CCNA CCNP CCIE Routing & Switching
доустройстве. Design CCNA & CCDA CCDP CCDE

Какие сертификации Network Security CCNA CCSP CCIE Security

бывают Service Provider CCNA CCIP CCIE Service Provider

Фактически каждый более-менее се- Storage Networking CCNA CCNP CCIE Storage Networking

рьезный разработчик программных Voice CCNA Voice CCVP CCIE Voice


продуктов и оборудования произво-
дит обучение и сертификацию по сво- В России, на мой взгляд, эта сертифи- ям по причине большой распростра-
им продуктам. Наиболее известны кация мало распространена по причи- ненности оборудования данного про-
сертификации от Microsoft (знамени- не того, что компаниям нужны партнер- изводителя.
тые MCSE), Cisco, Sun и других. В за- ские статусы от конкретных произво- Прежде всего определимся с тем,
висимости от условий получения сер- дителей, и они заинтересованы в нали- какие именно сертификации предла-
тификата, принятых тем или иным вен- чии специалистов именно с сертифи- гает Cisco Systems. Для этого обратим-
дором, вы должны сдать один или не- катами от данного производителя. За- ся к содержимому таблицы.
сколько экзаменов. Также произво- тронув тему сертификаций по инфор- Данная таблица нуждается в неко-
дитель определяет, сколько времени мационной безопасности, стоит также торых комментариях. По горизонтали
действителен ваш сертификат. Как упомянуть сертификат для разработ- указываются степени профессиональ-
правило, сертификаты по програм- чиков систем информационной безо- ного владения (мастерства):
мным продуктам действительны до тех пасности CISSP и сертификацию ауди- n Associate – это начальный уровень
пор, пока поддерживается соответс- торов CISA, которые также не зависят владения сетевыми технологиями.
твующий программный продукт, хотя от конкретных производителей. Как видно из таблицы, этот экза-
если у вас есть статус MCSE по NT 4.0, Что же представляет из себя ти- мен присутствует во всех техноло-
то никто его вас не лишит, однако для пичный экзамен? Это набор вопросов, гиях на уровне Associate. В состав
того чтобы обновиться, скажем, до вер- представленных в виде теста, то есть экзамена входят основы, такие как
сии 2003, вам придется сдавать весь у вас есть вопрос и есть варианты от- модель OSI, взаимодействие про-
трек заново. ветов, из которых вам нужно выбрать токолов, стек TCP/IP, основные ти-
Кроме технических сертифика- один или несколько. Также еще быва- пы оборудования (концентрато-
ций, существуют также сертифика- ют вопросы, где нужно указать ответ ры, коммутаторы, маршрутизато-
ции для проектных менеджеров (PMP), самостоятельно, например, посчитать ры и т. п.) Вопросов, привязанных
различные сертификации по продук- маску подсети и указать ее побитно. к настройке конкретной модели
там и решениям для менеджеров по Бывают вопросы, требующие указать того или иного устройства, немно-
продажам. последовательность выполнения оп- го, и они достаточно простые. Под-
Еще, кроме технических сертифи- ределенных действий, например, миг- робнее о том, что входит в каждый
каций, привязанных к решениям кон- рация базы данных с одного жестко- из экзаменов, я расскажу чуть поз-
кретных производителей, существуют го диска на другой. И наконец, быва- же, а сейчас вернемся к таблице.
также сертификации по технологиям. ют симуляции, требующие выполнения n Professional – это профессиональ-
Примером таких сертификаций явля- определенного задания, например, на- ный уровень владения технология-
ются сертификаты от CompTIA. В этих строить соединение между двумя мар- ми, он включает в себя знание конк-
экзаменах не спрашивается о конкрет- шрутизаторами. ретных моделей оборудования, на-
ных командах в конкретных операци- За все правильные ответы вы по- стройку определенных специфи-
онных системах, там спрашивается лучаете баллы. Результат сдачи эк- ческих сервисов, разрешение воз-
о технологиях. К примеру, в Network+ замена, как правило, бинарен: PASS никающих проблем.
вас могут спрашивать об определен- или FAIL. Для того чтобы получить n Expert – является вершиной сер-
ных протоколах, но не о их реализации PASS, необходимо набрать заданное тификации Cisco. Эксперт должен
в конкретных программных и аппарат- количество баллов. Сколько конкрет- уметь не только проектировать,
ных продуктах. А в экзамене Security+ но, вы можете узнать на сайте произ- но и самостоятельно настраивать
вас спросят о том, чем опасны в боль- водителя. Данная информация не яв- и решать возникающие пробле-
шом количестве пакеты с флагом SYN, ляется конфиденциальной. мы. Сдача экзамена на этот статус
но не будут спрашивать, как от них за- также сопряжена с определенными
щититься с использованием опреде- Статусы Cisco трудностями, о которых поговорим
ленной модели межсетевого экрана. Итак, описав основные аспекты IT-сер- позже.
Среди иностранных специалистов тификаций, перейдем к непосредс-
сертификаты серии CompTIA счита- твенной теме статьи – сертификации По вертикали – технологии, по ко-
ются началом карьеры IT-специалис- Cisco. Данная сертификация явля- торым можно сертифицироваться:
та, так как позволяют подтвердить на- ется самой распространенной среди n Routing & Switching (маршрутизация
личие базовых знаний по технологиям. специалистов по сетевым технологи- и коммутация);

№11, ноябрь 2008 71


образование
n Design (проектирование и дизайн сдать письменный экзамен, а затем на результат самым негативным об-
сетей); выполнить 8-часовую лабораторную разом. Поэтому одну-две недели пос-
n Network Security (сетевая безопас- работу. Причем лабораторную работу ле курсов все равно необходимо пот-
ность); необходимо выполнять только в спе- ратить на самостоятельную подготов-
n Service Provider (провайдеры ус- циальных центрах, которые находят- ку. О том, как это сделать, речь пой-
луг), Storage Networking (обслужи- ся за пределами России. Ближайший дет далее.
вающие устройства); находится в Брюсселе. В этой статье я
n Voice (голосовая связь). коснусь только сдачи письменного эк- Путь самурая
замена CCIE Written. Итак, для всех тех, кто не может прой-
Также существуют сертификации ти обучение на курсах или уже про-
для специалистов, но в данной ста- Способы обучения шел, но не все понял, остается само-
тье они не рассматриваются. Подроб- Определившись с тем, что нам нужно, стоятельная подготовка. Тут стоит сра-
нее о сертификациях Cisco можно про- приступим непосредственно к подго- зу отметить, что все вопросы в экза-
честь на странице [1]. товке. Подготовиться к сдаче серти- менах на английском языке. Исклю-
фикационных экзаменов можно дву- чением является CCNA 640-802, ко-
Выбираем мя способами: пойти на курсы или го- торый не так давно стал русскоязыч-
Routing & Switching товиться самостоятельно. ным, поэтому вам необходимо владеть
Теперь рассмотрим сертификацион- Обучение на курсах, конечно, яв- английским языком на уровне чтения
ный трек – Routing & Switching и соот- ляется хорошим способом подготов- технической документации. Проверить
ветствующие сертификации: ки, но за свой счет это делать край- свой уровень можно очень просто, до-
n CCNA; не проблематично, потому что, к при- статочно лишь почитать англоязыч-
n CCNP; меру, двухнедельный авторизован- ную документацию на сайте произво-
n CCIE Routing & Switching. ный курс для подготовки к CCNA стоит дителя, если все понятно, то и на эк-
в Москве более 50 тысяч рублей. И это замене проблем не возникнет. Пого-
Эти сертификации предназначе- не предел. Так что учиться на курсах ворим о том, что необходимо для того,
ны по большей части для инженеров, лучше за счет работодателя. Но пом- чтобы самостоятельно подготовиться
работающих непосредственно с обо- ните, от вас могут потребовать под- и сдать экзамен.
рудованием (различными моделями писать договор, по которому в случае
маршрутизаторов и коммутаторов), увольнения вы должны будете воз- Литература
в отличие, например, от сертифика- местить затраченные на ваше обуче- Прежде всего нужно хорошо владеть
ций Design, которые предназначены ние средства. Так что подумайте, на- теорией, то есть читать книги. Поку-
для проектировщиков. По этой причи- до ли вам это? пать бумажные русскоязычные книги,
не сертификации Routing & Switching Кстати, поговорим немного о том, которые продаются в книжных мага-
являются наиболее распространенны- какие курсы бывают. В предыдущем зинах и позиционируются как офици-
ми треками от Cisco. абзаце я упомянул слово «авторизо- альное руководство для подготовки
На момент написания этой статьи ванные». Это означает, что данный к экзамену, я большого смысла не ви-
для получения сертификата CCNA тре- курс является официальным курсом, жу. Как правило, информация, изло-
бовалось сдать один экзамен 640-802. утвержденным Cisco, только русско- женная в этих книгах, сильно устаре-
Как вариант можно сдать два упро- язычным. Помимо авторизованных ла. Причин этому много, прежде всего,
щенных экзамена – 640-822, 640‑816, курсов бывают еще и авторские кур- для того чтобы написать и издать кни-
но я думаю, что 802-й экзамен не на- сы, которые разрабатываются сами- гу, нужно время, англоязычную кни-
столько сложен и его можно сдать сра- ми учебными центрами. Как прави- гу необходимо перевести на русский
зу, не теряя времени на сдачу двух эк- ло, авторские курсы дешевле авто- и отредактировать, затем отпечатать
заменов. ризованных. Однако тут следует пом- уже русскозычный вариант. На все это
С сертификатом CCNP дело обсто- нить, что авторские курсы по Cisco мо- тоже нужно время, как правило, мини-
ит немного сложнее. Здесь необходи- гут читать только неавторизованные мум два-три года, за это время техно-
мо сдать четыре экзамена: учебные центры и программа данных логии успевают уйти вперед, и вопро-
n 642‑901 Building Scalable Cisco курсов может не соответствовать тем сы по этим устаревшим технологиям
Internetworks (BSCI); требованиям, которые предъявляются уже удаляются из экзаменов.
n 642-812 Building Cisco Multilayer на экзамене. В случае с курсами Cisco Например, когда я готовился к од-
Switched Networks (BCMSN); более дешевым вариантом подготовки ному из экзаменов трека CCNP, в офи-
n 6 42- 8 25 I mp l ementing S e c ure к базовым экзаменам могут быть кур- циальном русскоязычном руководс-
Converged Wide Area Networks сы по программе Cisco Academy. тве для подготовки к экзамену бы-
(ISCW); Возвращаясь к вопросу о полез- ло несколько глав, посвященным та-
n 642-845 Optimizing Converged Cisco ности курсов, хотелось бы заметить, ким технологиям, как X.25 и Frame
Networks (ONT). что сдавать экзамен сразу после кур- Relay. Но на экзамене ни одного воп-
сов, как правило, очень рискованно, роса по этим технологиям не было. За-
Сертификат CCIE получить еще так как не все моменты уже усвоены, то по технологии ATM, которая в книге
сложнее. Для этого нужно сначала и пробелы в знаниях могут повлиять вообще не упоминалась, вопросы бы-

72
образование
ли. Так что тратиться на русскоязыч- ляется использование программных
ные книги я не советую. симуляторов.
Многие для подготовки к экзаме- Существуют симуляторы от Boson,
нам заказывают англоязычные книги но, по моему мнению, они пригодны
через Amazon. В этих книгах, как пра- к подготовке только к CCNA. Для эк-
вило, информация поновее, но все же заменов CCNP их функционала явно
гораздо легче и быстрее найти элект- недостаточно.
ронный вариант на просторах Интер- Так что лучше воспользоваться
нета. Мне, например, больше всего бесплатным симулятором Dynamips [2].
нравятся книги для подготовки к экза- С помощью этого симулятора мож-
менам от Syngress, в них всегда дается но построить сеть практически лю-
больше материала, чем нужно для эк- бой сложности, все будет определять-
замена. Думаю, в Сети вы без труда ся мощностью компьютера, на кото-
найдете электронный вариант книги ром запущен симулятор. Описание
по сдаваемому экзамену. настройки и технические особеннос-
Теоретические знания лучше все- ти Dynamips выходят за рамки дан-
го проверять с помощью симулято- ной статьи (возможно, следует напи-
ров тестов, например от Transcender сать отдельную статью, посвящен-
или Boson. В этих симуляторах вы, ную этому симулятору), но на некото-
как на настоящем экзамене, отвечае- рых моментах я все же хотел бы ос-
те на аналогичные по сложности воп- тановиться.
росы и получаете баллы за каждый Сейчас симулятор поддерживает
правильный ответ. Если ваш результат следующие платформы:
стабильно больше 900 балов, то вы ус- n Cisco 7200 (NPE-100 to NPE-400);
воили материал. n Cisco 3600 (3620, 3640 and 3660);
Помимо теоретических вопросов n Cisco 2691;
во всех экзаменах встречаются симу- n Cisco 3725;
ляции. Симуляции на экзамене CCNA n Cisco 3745.
не являются сложными. Например, не-
обходимо настроить на сетевом интер- При этом IOS не входит в состав си-
фейсе IP-адрес, маску, указать ско- мулятора, и вам необходимо самостоя-
рость и прописать инкапсуляцию, за- тельно найти файл образа. Существу-
тем проверить соединение с другим ют версии симулятора как для Windows,
узлом с помощью пинга. С таким прос- так и для Linux, и даже для Mac OS X.
тым заданием справится любой специ- На машине с 1,5 Гб и под Windows XP
алист, хоть немного знакомый с обо- мне удавалось развернуть до 4 одно-
рудованием Cisco. Но к более серьез- временно работающих маршрутизато-
ным заданиям нужно готовиться пред- ров. Думаю, под Linux производитель-
варительно. ность будет еще больше.
О том, какие именно симуляции
Виртуальное сейчас присутствуют на экзаменах,
оборудование лучше всего узнать на тематических
На курсах вам, как правило, проде- форумах [3, 4].
монстрируют «живое» оборудование.
Иногда и даже проведут на нем лабо- Что такое «брейндамп»
раторные работы, а вот при самостоя- и кто такие «дамперы»
тельной подготовке необходимо само- Путешествуя по различным интернет-
му искать нужное оборудование. Хоро- ресурсам, посвященным сертифика-
шо, если у вас на работе имеется пара ции, вы рано или поздно обнаружи-
лишних маршрутизаторов, на которых те упоминание о braindump, testking,
можно тренироваться. Можно, конечно, pass4sure и других «учебных матери-
для подготовки дома приобрести по- алах». Поговорим о том, что это такое.
держанное оборудование, но я не ду- Брейндампы фактически представля-
маю, что ваши домашние сильно обра- ют собой вопросы с экзамена, укра-
дуются появлению «больших шумных денные несознательными сотрудника-
железок», таких, к примеру, как знаме- ми центров тестирования. Эти вопро-
нитый «шеститонник». сы представлены с ответами, и вот тут
Таким образом, лучшим выходом начинается самое интересное, так как
для самостоятельной подготовки яв- эти ответы, как минимум, в 20% случа- Реклама

№11, ноябрь 2008 73


образование
ев содержат ошибки. К тому же даже Идем на экзамен Заказ сертификата
если ответ правильный, к нему нет по- Вот вы подготовились и пришли на эк- После успешной сдачи последнего эк-
яснения, что тоже не способствует по- замен. Хочу вас сразу предостеречь замена, необходимого для получения
ниманию материала. Соответствен- от различных мошенничеств на экза- статуса, вы получите письмо, в кото-
но те «сертифицированные специа- мене. Советую не вспоминать студен- ром будет содержаться инструкция,
листы», которые бездумно заучивают ческую пору и не пытаться откуда-либо следуя которой вы сможете заказать
брейндампы, сдавая по одному экза- списывать. В каждом классе, где про- сертификат. Заказать можно как бу-
мену за неделю и получая CCNP за ме- ходит тестирование, находится видео- мажную копию, которая затем при-
сяц, зовутся дамперами. камера, и сотрудник центра тестирова- дет по почте, так и электронный вари-
Заучивать ответы из дампа бес- ния должен следить за тем, что проис- ант, который можно распечатать. Если
полезно, ни к чему хорошему это не ходит в классе. В случае если вы попа- вы не уверены в работе почты (обыч-
приведет, особенно молодого специ- детесь на списывании, сотрудник впра- ной, не электронной), то можете зака-
алиста, получившего таким образом ве сообщить об этом в Cisco, и вас мо- зать электронный вариант. Все рав-
свой первый CCNA, так как на пер- гут лишить права сдавать экзамены но, если потребуется подтверждение,
вом же собеседовании всплывут все этого производителя. По-моему, лучше то вы сможете предоставить ссылку
его пробелы в знаниях, и работода- не сдать один экзамен, чем лишиться на сайт Cisco, где будет указан ваш те-
тель скорее предпочтет несертифи- возможности сдавать их в принципе. кущий статус.
цированного знающего специалис- Но списывание – это еще не пре-
та, нежели сертифицированного «бу- дел. Наши коллеги из азиатского ре- Продление статуса
мажного». Но от дампов будет поль- гиона пошли в этом деле еще дальше, Как я уже упоминал в начале статьи,
за, если вы не будете смотреть в ответ, они предлагают за определенную сум- срок действия сертификата ограни-
а попробуете самостоятельно ответить му сдать экзамен за вас. То есть вы ре- чен. Для статусов уровня Associate
на каждый из вопросов и в случае не- гистрируетесь на экзамен где-нибудь и Professional это три года. Как его
ясности уточните на соответствую- в Китае или Индии, а сдает его за вас можно продлить? Для Associate доста-
щем тематическом форуме, а не при- другой человек, но сертификат все- точно либо сдать CCNA заново, либо
мите на веру ответ из дампа. По мое- равно приходит вам. Много раз при- сдать CCNP. Для продления CCNP са-
му мнению, материал нужно понимать, ходилось видеть подобные предложе- мым простым будет сдача письменного
а не заучивать. ния в Сети, в том числе и на русско- экзамена CCIE Written либо повторная
язычных сайтах. сдача всех четырех экзаменов. Если
Заказываем экзамен И вот не так давно в Cisco решили вы собираетесь получать статус CCIE,
Как только вы начинаете чувствовать, бороться с подобными мошенничест- то после сдачи письменного экзамена
что готовы к экзамену, можно заказы- вами. Теперь в процессе экзамена вас CCIE Written вы должны сдать лабора-
вать экзамен. Сделать это можно не- будут снимать на камеру и затем све- торную работу в течение 180 дней.
сколькими способами. Экзамены при- рять с фотографией кандидата. Ре-
нимают в авторизованных центрах тес- зультаты экзамена вы сможете узнать Заключение
тирования, которые имеются при всех только через 72 часа. В течение этого Вот мы и закончили рассмотрение сер-
крупных учебных центрах. В свою оче- времени ваш результат, а точнее, даже тификации Cisco. Основной вывод,
редь экзамены предоставляет провай- поведение на экзамене, будет исследо- который я хотел бы сделать, – это то,
дер тестов: сейчас это Pearson VUE. ваться специальным ПО. То есть если что не стоит полагаться на дампы
Для заказа экзамена вы можете приоб- вы, к примеру, ответили на все вопро- при подготовке к экзамену, главное –
рести по безналичному расчету (VISA, сы экзамена за десять минут, то такое это знания, а не бумажки.
Mastercard) на сайте специальный вау- поведение может показаться подоз- А вообще все это не так сложно,
чер, с которым затем можно обратить- рительным, и результат вполне может как может показаться после прочте-
ся в любой авторизованный учебный быть аннулирован. ния этой статьи. Так что удачи на эк-
центр, и они обязаны будут предоста- В завершение темы сдачи экза- заменах!
вить вам возможность сдать экзамен. мена хочу отметить, что возвращать-
Этот способ является самым деше- ся нельзя, то есть если вы ответили 1. Все сертификации Cisco – ht tp://
вым, так как вы оплачиваете экзамен на вопрос и нажали Next, то вернуть- cisco.com/web/learning/le3/learning_
в долларах и безо всяких дополнитель- ся к предыдущему вопросу вы уже career_certifications_and_learning_
ных процентов. Сейчас 640-802 стоит не сможете. paths_home.html.
$250, экзамены из трека CCNP – $150, Что касается симуляций, то запом- 2. Страничка, посвященная Dynamips –
а письменный экзамен CCIE written ните, что правильно выполненная си- http://www.ipflow.utc.fr/index.php/Cisco_
350-001 – $350. муляция будет зачтена только в случае, 7200_Simulator.
Если этот путь для вас сложен если после ее выполнения вы сохрани- 3. Международный форум, посвящен-
по каким-либо причинам, то вы може- те конфигурацию. Еще на этапе подго- ный различным сертификациям (анг-
те просто заказать экзамен непосред- товки на симуляторах запомните, что лоязычный) – http://www.sadikhov.com/
ственно в центре тестирования, прав- после выполнения каждого практичес- forum.
да, тогда экзамен будет стоить немно- кого задания необходимо на всех уст- 4. Русскоязычный форум, посвященный
го дороже. ройствах делать «copy ru st». сертификации – http://certification.ru.

74
web-программирование

Каркасная разработка веб-приложений


на основе фреймворка Kohana

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

Преимущества JavaScript, PHP, Python и др. Опреде- зации приложения. Но, на мой взгляд,
использования лить значение его проще всего как это, скорее, можно отнести к преиму-
фреймворков набор инструментов, библиотек, со- ществам использования каркасной
В настоящее время существует огром- глашений, предназначенных для вы- среды, так как данный подход обуча-
ное количество инструментов, значи- несения повторяющихся операций ет разработчика дисциплине написа-
тельно облегчающих жизнь веб-разра- в отдельные модули, которые можно ния кода.
ботчикам, одним из которых являются использовать многократно. Главная В этой статье я хотел бы расска-
так называемые каркасные среды раз- цель – позволить разработчику со- зать вам об одном из популярных сре-
работки. К ним относятся всевозмож- средоточиться на решении уникаль- ди разработчиков PHP-фреймворке –
ные фреймворки, которые позволяют ных для каждого проекта задач, ос- Kohana, разработанном командой
увеличить производительность созда- тавив все рутинные операции фрейм- Kohana Software Foundation. Он бази-
ния приложений, значительно умень- ворку. Проанализировав свою работу, руется на паттерне MVC (модель-отоб-
шая количество написанного кода, со- вы наверняка замечали, что есть вещи, ражение-контроллер) и имеет каскад-
ответственно сокращая время, затра- которые приходится повторять много- но-модульную структуру. Он создан
ченное на разработку. Так что же это кратно в каждом проекте. Его цель – на базе не менее популярного и быст-
такое – фреймворк? Попросту говоря, объединить эти действия в отдельную рого фреймворка Code Igniter и вклю-
это готовый каркас будущих приложе- структуру, следуя принципу «Не повто- чает все положительные стороны пос-
ний, которые будут создаваться на его ряй себя». Это может значительно со- леднего. Однако в отличие от него
основе. Можно писать каждое новое кратить время разработки приложения в Kohana отсутствует поддержка PHP
приложение «с нуля», формируя каж- и, соответственно, снизить стоимость версии 4 и изменен механизм модуль-
дый раз его структуру, распределяя конечного продукта. ного расширения (на мой взгляд, бо-
модули, директории, библиотеки клас- Для обеспечения каркаса обычно лее удобный). Но главное его досто-
сов, обрабатывающие основные ком- используется техника объектно-ориен- инство – простота. В отличие, напри-
поненты приложения, а можно не изоб- тированного программирования (ООП), мер, от такого мощного фреймворка,
ретать велосипед и воспользоваться например, части приложения могут на- как Zend Framework, для работы с ко-
готовым универсальным решением, следоваться от базовых классов кар- торым не обойтись поверхностны-
которое, собственно, и предоставляет касной среды. Такой подход в соче- ми знаниями в PHP-программирова-
каркасная среда разработки. тании с паттернами проектирования нии, а именно в ООП, Kohana доступ-
Сегодня слово «фреймворк» – од- весьма эффективен, хотя и налагает на, на мой взгляд, даже начинающим
но из самых популярных у програм- на разработчика некоторые обязан- PHP-программистам, знакомым только
мистов. Для веб-разработки создана ности, заставляя его следовать согла- с основами объектно-ориентированно-
масса различных каркасных сред для шениям в написании кода и структури- го программирования.

№11, ноябрь 2008 75


web-программирование
Архитектура ражению. Все контроллеры в Kohana – классы, которые на-
приложения следуются от базового класса Controller. Следует отметить,
Очень часто при разработке не- что имя файла контроллера должно совпадать с именем его
больших и средних проектов ис- класса, причем имя файла должно состоять только из строч-
пользование мощных средств ных букв и иметь расширение .php, а имя класса начинать-
напоминает стрельбу из пушки ся с прописной буквы. Например, если у нас есть файл кон-
по воробьям, когда можно значи- троллера welcome.php, значит, класс, который он содержит,
тельно упростить задачу. В этом будет называться Welcome_Controller.
случае может помочь исполь- Модель получает и обрабатывает данные, например,
зование именно такого фрейм- из БД, реагирует на запросы контроллера и предоставля-
ворка, как Kohana, предостав- ет ему обработанную информацию для отображения. Ана-
ляющего разработчику удобный, логично механизму наследования в контроллерах модели
гибкий интерфейс и богатый также наследуются от базового класса Model и имеют те же
инструментарий. Как уже гово- правила именования файлов. Например, если файл модели
рилось выше, архитектура при- называется user.php, то, соответственно, класс, содержа-
ложения базируется на паттер- щийся в этом файле, будет называться User_Model.
не MVC, прекрасно зарекомендо- Отображение осуществляет вывод информации, полу-
вавшем себя в разработке и поз- ченной от контроллера, пользователю. По сути, отображе-
воляющем максимально инкап- ние – это HTML-шаблон приложения, реализующий пользо-
сулировать задачи, выполняе- вательский интерфейс. По правилам Kohana файлы отоб-
мые различными блоками систе- ражений должны иметь расширение .php и именоваться
мы. Файловая структура Kohana строчными буквами.
представлена на рис. 1. Вызов контроллера осуществляется GET-запросом.
Рассмотрим более подробно Это должен быть URL-адрес, состоящий из сегментов, раз-
содержимое структуры фрейм- деленных слэшами. По умолчанию адреса в Kohana явля-
ворка. В корне располагаются ются дружественными для поисковых систем и понятны для
директории application, modules человека. Подход данного фреймворка, основанный на сег-
и system. В директории application ментах URL, выглядит следующим образом:
находится каркас будущего при-
ложения. При разработке в ней www.domain.ru/index.php?/controller/method/params
происходит основная работа про-
Рисунок 1. Файловая
структура фреймворка граммиста. Директория modules Как видно из приведенного примера, после index.php
предназначена для дополнитель- идут следующие сегменты:
ных модулей, расширяющих функциональность приложения. n controller – имя вызываемого контроллера;
Директория system – системная директория Kohana. n method – имя метода контроллера;
Теперь рассмотрим подробнее «сердце» нашего прило- n params – параметры, передаваемые в контроллер.
жения, а именно директории controllers, models и views, рас-
положенные в директории application. Именно в них мы про- В данном случае будет вызван контроллер controller.php,
ведем большую часть работы над приложением. Как видно расположенный в директории application/controllers. Затем
из названий, в директории controllers располагаются конт- будет вызван метод method из этого контроллера, в кото-
роллеры приложения, в директории models – модели и, со- рый передадутся параметры, указанные в сегменте params.
ответственно, в директории views – отображения. Взаи- Как видно, все очень просто. Однако есть один недостаток.
модействие между этими компонентами осуществляется, Дело в том, что по умолчанию имя файла index.php всег-
как показано на рис. 2. да будет отображаться в строке URL, согласитесь, что это
Контроллер – это управляющий элемент приложения, не совсем красиво. К счастью, эта проблема в Kohana лег-
который получает информацию из внешнего запроса и ре- ко решается простым правилом в файле .htaccess:
агирует на нее, заставляя модель предоставить ему необхо-
димые данные, которые в свою очередь он отправляет отоб- RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

В приведенном выше примере любой запрос HTTP, по-


мимо запросов к index.php, изображениям и robots.txt, трак-
туется как запрос для нашего файла index.php. Теперь наш
запрос будет иметь следующий вид:

www.domain.ru/controller/method/params

Такой подход к созданию URL оправдан с точки зрения


Рисунок 2. Взаимодействие частей фреймворка безопасности, так как обращение осуществляется не к ре-

76
web-программирование
альному файлу, указанному в запросе, а формируется внут- 'connection' => array
(
ренними методами системы. Любой запрос, отличающийся 'type' => 'mysql', //Тип БД
от данной схемы, вызовет ошибку. Это повышает «иммуни- 'user' => 'root', //Имя пользователя БД
'pass' => 'pass', //Пароль БД
тет» приложения к некоторым видам уязвимостей, напри- 'host' => 'localhost', //Хост БД
мер, таких, как XSS (межсайтовый скриптинг). 'port' => FALSE,
'socket' => FALSE,
Также необходимо отметить, что в каждом файле 'database' => 'kohana' //Имя БД
фреймворка вставлена строка: ),
'character_set' => 'utf8',
'table_prefix' => '',
defined('SYSPATH') or die('No direct script access.'); 'object' => TRUE,
'cache' => FALSE,
'escape' => TRUE
Она запрещает прямой доступ к файлу GET-запросом, );
поэтому попытка обратиться через строку браузера к лю-
бому файлу не приведет к успеху. Для корректной работы приложения следует обратить
Следует также сказать, что вы можете изменить свой внимание на настройки PHP интерпретатора, а именно
URL, добавив к нему произвольный суффикс, например, на подключенные расширения. К необходимым из них от-
html. Для этого в конфигурационном файле application/ носятся следующие:
config/config.php добавить его значение в параметр n PCRE – функции для работы с регулярными выражени-
$config['url_suffix'] = ‘html’ (по умолчанию суффикс отсутс- ями (Perl-совместимые);
твует). В этом случае URL может иметь такой вид: n iconv – интерфейс к библиотеке преобразования коди-
ровок iconv;
www.domain.ru/controller/method/params.html n mcrypt – требуется для шифрования;
n SPL – требуется для некоторых библиотек ядра.

Пример каркасной разработки Для ускорения функций фреймворка, работающих


Теперь пришло время перейти от теории к практике. Да- со строками UTF-8, рекомендуется подключить расшире-
вайте соберем все воедино и попробуем создать простое ние mbstring. Однако нужно заметить, что это расширение
приложение на основе Kohana. Для этого нам потребуется может перегружать встроенные функции PHP для работы
дистрибутив фреймворка. со строками.
Следует отметить, что Kohana – свободно распростра- Теперь можно приступить, собственно, к инсталляции
няемый программный продукт, основывающийся на ли- фреймворка, которая сводится к загрузке дистрибутива
цензии BSD, поэтому для его использования достаточно в директорию DOCUMENT_ROOT сервера и установке ос-
скачать дистрибутив на официальном сайте разработчика новных конфигурационных настроек. К ним относятся нас-
http://kohanaphp.com/download. тройка файла system/config/database.php, как говорилось
Надо сказать, что Kohana запускается с минимально воз- выше, и установка некоторых параметров конфигураци-
можными требованиями к серверу, однако следует учесть онного файла application/config/config.php:
необходимые:
n поддержка Unicode; $config['site_domain'] = '/kohana/'; //Имя домена
$config['index_page'] = 'index.php'; //Индексный контроллер
n интерпретатор PHP версии не ниже 5.2.0;
n наличие сервера баз данных. Установите значение параметра ‘site_domain’, значению
доменного имени сервера, а $config[‘index_page’] = ‘index.php’.
Следует отметить, что Kohana непритязательна к HTTP Этот параметр указывает на то, какой контроллер будет вы-
серверу и прекрасно работает на Apache 1.3+, Apache 2.0+, зван по умолчанию, без явного указания в URL. Обратите
lighttpd и MS IIS. Что касается сервера БД, то в Kohana ис- внимание на то, что в значении данного параметра обяза-
пользуются драйверы для работы со следующими СУБД: тельно указывать расширение файла. Остальные настрой-
n MySQL; ки можно пока оставить без изменений. Далее нужно соз-
n MySQLi; дать в корне сервера файл .htaccess (для удаления сегмен-
n PostgreSQL; та index.php), как рассказывалось выше.
n PDOSqlite. Теперь можно приступить к созданию самого приложе-
ния. Первым шагом в этой процедуре будет создание конт-
Интерфейс для работы с БД, который предоставляет роллера. Создайте файл index.php в директории application/
фреймворк разработчику, имеет высокий уровень абстрак- controllers и впишите в него следующее:
ции, поэтому для выбора и подключения соответствующе-
го драйвера нужно лишь выполнить соответствующие на- <?php defined('SYSPATH') or die('No direct script access.');
стройки в файле system/config/database.php: class Index_Controller extends Controller {

//Конструктор
<?php defined('SYSPATH') or die('No direct script access.'); public function __construct()
{
$config['default'] = array parent::__construct();
( }
'benchmark' => TRUE,
'persistent' => FALSE,

№11, ноябрь 2008 77


web-программирование
//Метод, вызываемый по умолчанию //Конструктор
public function index() public function __construct()
{ {
echo "Hello, World!"; parent::__construct();
} // Инициализация объекта модели.
} // Теперь он доступен во всех методах контроллера
?> $this->model = new Index_Model;
}

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


public function index()
kohana/ (доменное имя вашего сервера, указанное в кон- {
фигурационном файле), и вы увидите результат работы кон- // Получение данных из модели
$data = $this->model->GetData();
троллера. Как видите, все довольно просто. Однако в на- // Создание нового объекта отображения и передача
шем случае вывод в окно браузера происходит непосред- // параметров
$view = new View('index',$data);
ственно из контроллера, что не соответствует идеологии // Вывод отображения в браузер
MVC. Чтобы отделить логику от представления, нам необ- $view->render(TRUE);
}
ходимо создать файл отображения index.php в директории }
application/view: ?>

<html> Теперь наше приложение отвечает всем требовани-


<head>
<title><?=$title;?></title> ям паттерна MVC. Это всего лишь упрощенный пример,
</head> но он наглядно иллюстрирует принцип работы фреймвор-
<body> ка. По аналогичной схеме происходит и расширение фун-
<p> кциональности при помощи модулей, поэтому нет необхо-
<?=$content;?>
</p> димости заострять на этом внимание. Следует лишь отме-
</body> тить, что каркас каждого модуля должен располагаться в ди-
</html>
ректории modules/имя_модуля, а в файле application/config/
И переписать метод index() нашего контроллера config.php, в параметре $config['modules'] необходимо ука-
index.php: зать путь к директории этого модуля.

//Метод, вызываемый по умолчанию


public function index()
Архитектура ядра
{ Давайте теперь подробнее рассмотрим схему прохожде-
//Создание нового объекта отображения ния запроса и ответа в работающем приложении на осно-
$view = new View('index');
//Передача параметров в отображение ве Kohana (см. рис. 3). Как уже говорилось выше, вся сис-
$view->title = "Фреймворк Kohana "; тема построена на каскадно-модульном принципе. Каскад-
$view->content = "Приложение, созданное на ↵
базе Kohana "; ность заключается в следующем: система загружает конт-
//Вывод отображения в браузер роллеры из директории application, если там они не найдены,
$view->render(TRUE);
} то из modules (требуется изменение конфигурации), в том же
случае, если и там они не найдены, управление передается
Результатом работы нашего приложения будет строка директории system, где в конечном счете может быть вызван
«Приложение, созданное на базе Kohana». Однако и это контроллер ошибок, например, для генерации 404 ошибки.
еще не все. В данном случае механизм MVC используется В идеальном случае контроллеры из директории system
не полностью. Мы определили переменные title и content не должны вызываться. Если это произошло, значит, в ва-
в контроллере, а должны были получить данные из моде- шем приложении что-то пошло «наперекосяк».
ли. Для чистоты эксперимента давайте создадим файл мо- Все запросы к приложению адресуются файлу index.php,
дели index.php в директории application/models: расположенному в директории DOCUMENT_ROOT. Он вы-
ступает в роли фронт-контроллера и инициализирует под-
<?php defined('SYSPATH') or die('No direct script access.'); ключение остальных частей кода системы. Роутер анали-
class Index_Model extends Model { зирует HTTP-запрос, чтобы определить, что делать с этим
адресом. Если существует кэш этой страницы, то он на-
public function GetData()
{ прямую выдается в браузер, минуя логику приложения. Пе-
$data['title'] = "Фреймворк Kohana"; ред загрузкой контроллера приложения HTTP-запрос и лю-
$data['content'] = "Приложение, созданное ↵
на базе Kohana"; бая информация, отправленная пользователем, фильтру-
return $data; ется на предмет безопасности. Далее запрос передается
}
} контроллеру приложения, который загружает модель, яд-
?> ро библиотек, хелперы и прочие ресурсы, необходимые
для его выполнения. После этого подключается отображе-
Далее следует несколько изменить наш контроллер: ние, и данные отдаются в браузер. Если включено кэширо-
вание, то отображение записывается на диск, чтобы в сле-
<?php defined('SYSPATH') or die('No direct script access.'); дующий раз быть считанным с него.
class Index_Controller extends Controller { Фронт-контроллер загружает и инициализирует базовые
классы ядра, вспомогательные библиотеки, хелперы и дру-

78
web-программирование
...

// Код программы

...

// Остановка измерения
Benchmark::stop('benchmark1');

...

// Вывод значения
Рисунок 3. Схема прохождения запроса print_r(Benchmark::get('benchmark1'));

В данном примере метод get воз-


вратит ассоциативный массив, состоя-
щий из двух элементов: time и memory,
которые содержат время выполнения
кода в секундах и объем, занимае-
мый в памяти в байтах соответствен-
но. Причем будет измерено время вы-
полнения кода, находящегося между
методами start и stop.

Рисунок 4. Пример работы класса Benchmark Event Class


Класс для управления событиями.
гие ресурсы, необходимые для работы полнения установлены на следующие Следует отметить, что Kohana сохра-
приложения. процессы: няет события в очередях, в отличие
К основным классам ядра, которые n Kohana Loading – загрузка ядра; от стеков. Это означает, что каждое
загружаются по умолчанию и доступ- n Environment Setup – загрузка вспо- новое событие будет обработано пос-
ны в процессе работы программы, от- могательных библиотек; ле существующего. События в Kohana
носятся следующие: n System Initialization – инициализа- обозначаются уникальным именем,
n Kohana; ция системных классов; причем имя состоит из префикса
n Benchmark; n Controller Setup – загрузка конт- и собственно имени. Это делает их еще
n Event; роллера; более уникальными. Все предопреде-
n Unicode; n Controller Execution – время вы- ленные события ядра имеют префикс
n View. полнения кода контроллера; system. По умолчанию в ядре фрейм-
n Total Execution – общее время вы- ворка определены несколько систем-
Kohana Class полнения. ных событий:
Основной класс ядра фреймворка. Он n system.ready – это самое ран-
загружает роутер и пересылает дан- Результаты работы данного класса нее событие. Оно выполняется
ные контроллеру приложения. Он ини- можно вывести с помощью библиоте- при старте системы, немедленно
циализируется вместе с загрузкой при- ки Profiler. В этом случае будет выведе- после загрузки хуков. Хуки загру-
ложения, поэтому нет необходимости на детальная статистика времени вы- жаются непосредственно перед
определять его в коде. Он доступен полнения и объема памяти занимаемо- этим событием.
в виде статических методов, для об- го вышеперечисленными процессами. n system.routing – обрабатывает
ращения нужно вызвать нужный ме- Достаточно объявить в конструкторе URL и маршрутизацию. По умол-
тод следующим образом: контроллера объект класса Profiler: чанию вызывается: Router::find_uri
и Router::setup.
Kohana::config('session.driver'); new Profiler; n system.execute – контроллер, оп-
ределяющий местонахождение
В данном примере вызван метод В этом случае внизу страницы бу- и инициа лизацию. Объек т со -
config, который возвращает значение дет выведена статистика времени ге- здается как экземпляр к ласса
параметра driver из конфигурационно- нерации страницы и объема занимае- Kohana. По умолчанию вызывает-
го файла session.php. мой памяти (см. рис. 4). ся: Kohana::instance.
Разумеется, можно ставить в коде n system.post_routing – вызывает-
Benchmark Class приложения и собственные метки. Это ся после того, как вся маршрути-
Этот класс позволяет измерить время достаточно просто сделать, воспользо- зация выполнена. Вмешательс-
выполнения кода программы. Так же, вавшись методами, предоставляемы- тва в маршрутизацию могут быть
как и Kohana Class, он инициализи- ми классом Benchmark: сделаны в этом событии. Если
руется в процессе загрузки и предо- Router::$controller пуст после это-
ставляет для доступа свои статичес- // Начало измерения го события, будет вызвана ошибка
Benchmark::start('benchmark1');
кие методы. По умолчанию метки вы- 404.

№11, ноябрь 2008 79


web-программирование
n system.404 – вызывается, когда страница не мо- // Создание нового объекта отображения
$view = new View('yourview');
жет быть найдена. По умолчанию вызывается так:
Kohana::show_404. // Передача параметра в отображение
$view->title = "Hello world!";
n system.pre_controller – вызывается в пределах system. // Вывод отображения в браузер
execute, после того, как файл контроллера загружен, $view->render(TRUE);
но прежде, чем создан его объект.
n system.post_controller_constructor – вызывается Как видно из примера, мы создали новое отображение
в пределах system.execute после того, как вызван конс- yourview.php (обратите внимание на то, что в параметре
труктор контроллера, но до вызова каких-либо мето- объекта View расширение не указывается), передали в не-
дов внутри него. го переменную title и вывели его в браузер.
n system.post_controller – вызывается в пределах Еще один момент, на который следует обратить вни-
system.execute, после полного выполнения контрол- мание в данном фреймворке, – это хуки, или обработчи-
лера. ки прерываний, о которых уже упоминалось выше. С по-
n system.send_headers – вызывается непосредствен- мощью хуков можно изменять ход работы системы, не за-
но перед тем, как глобальный буфер вывода закрыт, трагивая ядро фреймворка. По сути, это файлы, включен-
но прежде, чем любой контент отображен. После этого ные в старт системы. К ним относятся:
события запись в куки уже не возможна и данные сес- n index.php;
сии не будут сохранены. n core/Bootstrap.php;
n system.display – вызывается в финальном выводе. n core/Benchmark.php;
В этот момент заголовки уже отправлены пользовате- n core/utf8.php;
лю и отображения загружены. n core/Event.php;
n system.shutdown – последнее событие, которое про- n core/Kohana.php.
исходит непосредственно перед тем, как PHP начи-
нает закрываться. По умолчанию вызывается так Методы хуков могут использоваться, когда эти фай-
Kohana::shutdown. лы загружены. Это происходит до первого системного со-
бытия, а именно system.ready, поэтому прерывания мож-
Все методы класса Event – статические, поэтому нет не- но использовать в любом событии. Система хуков может
обходимости инициализировать объект, реализация мето- быть включена или выключена глобально (по умолчанию
да происходит в момент его вызова. она отключена). В файле application/config/config.php нуж-
После того, как выполнены все возвратные вызовы но найти строку:
класса, память немедленно освобождается, поэтому дан-
ные могут быть использованы только во время выполне- $config['enable_hooks'] = FALSE;
ния возвратного вызова.
И установить ее значение TRUE. Файлы хуков необходи-
Unicode мо располагать в директории application/hooks. Каждый
Предоставляет класс utf8 для работы со строками UTF-8, файл должен именоваться строчными буквами и содер-
так как методы PHP не слишком нативны для выполнения жать класс, причем его имя должно совпадать с именем
этих задач. Для этих целей предоставляются статические файла, начальная буква которого прописная. Простой при-
методы класса. Например: мер. Создадим файл power.php, расположенный в директо-
рии application/hooks:
utf8::strip_ascii_ctrl($str)
<?php defined('SYSPATH') or die('No direct script access.');
В данном примере из строки $str будут удалены все уп- class Power {
равляющие ASCII-символы. public function Kohana(){
Event::$data = Event::$data.'<!-- Powered by Kohana-->';
}
View Class }
Event::add('system.display', array('Power', 'Kohana'));
Класс для работы с отображениями. Главная цель отобра-
жений, а в том числе и класса – хранение прикладной ло- В приведенном примере к событию 'system.display'
гики приложения отдельно от кода представления. Обыч- в каждой сгенерированной странице будет добавляться
но код представления в Kohana – это HTML, который отве- комментарий <!-- Powered by Kohana-->.
чает за непосредственный вывод интерфейса пользова- Следует также отметить, что после загрузки хуков до-
телю. В него могут быть включены файлы CSS, JavaScript, ступны следующие системные константы, которые можно
поэтому в нем можно использовать AJAX и другие техно- использовать при обработке прерываний:
логии. Файлы отображений имеют расширение .php, по- n EXT – содержит расширение файлов фреймворка,
этому в них можно включать PHP-код, например, для ор- по умолчанию .php;
ганизации циклов. n KOHANA – базовое имя файла;
Как уже было показано в примере выше, создание но- n DOCROOT – корневая дирек тория приложения
вого отображения осуществляется с помощью объекта (DOCUMENT_ROOT);
класса View: n APPPATH – путь к директории application;

80
web-программирование
n SYSPATH – путь к директории system; Существует еще один способ изменения функциональ-
n MODPATH – путь к директории modules. ности ядра с помощью библиотек – переопределение су-
ществующего класса. Для этого нужно всего лишь создать
Еще одним способом внесения изменений в функцио- класс и содержащий его файл, имена которых идентичны
нальность ядра является использование библиотек. Авто- существующей библиотеке, и поместить его в директорию
матически загружаются системой и доступны в любом мес- application/libraries. Вот простой пример, иллюстрирующий
те следующие библиотеки: переопределение существующей библиотеки Profiler.
n URI; Файл application/libraries/Profiler.php:
n Input.
<?php defined('SYSPATH') or die('No direct script access.');
Остальные библиотеки могут быть загружены по мере class Profiler_Core {
необходимости. Для этого достаточно инициализировать
//Код новой библиотеки Profiler
новый объект класса библиотеки: }

?>
$this->profiler = new Profiler;
Еще одним приятным моментом для разработчика яв-
В приведенном выше примере методы библиотеки ляется использование так называемых хелперов – вспо-
Profiler будут доступны в объекте profiler. При необходимос- могательных функций. Наряду с библиотеками Kohana
ти, для изменения функциональности, можно легко расши- предоставляет богатый набор этих функций, но в отличие
рять и переопределять существующие библиотеки Kohana от библиотек, для доступа к методам которых нужно бы-
и создавать собственные. Располагать библиотеки следу- ло инициализировать объект, все методы хелперов явля-
ет в директории application/libraries. Требования к файлам ются статическими и доступны в момент обращения к ним.
при создании новой библиотеки следующие: Так же, как и библиотеки, хелперы автоматически загру-
n первая буква имени файла прописная, остальные строч- жаются системой, и потому нет необходимости беспоко-
ные; иться об их загрузке.
n имя класса должно совпадать с именем файла и иметь Для доступа к методу любого хелпера достаточно обра-
суффикс _Core. титься к нему в нужном месте кода:

Например, файл библиотеки application/libraries/Book.php $url = url::base();


должен содержать класс Book_Core:
Механизм добавления, расширения и переопределе-
<?php defined('SYSPATH') or die('No direct script access.'); ния классов хелперов полностью аналогичен такому же
class Book_Core { механизму у библиотек. Это же относится и к соглашени-
ям в отношении именования файлов и классов хелперов.
//Код библиотеки Book
} Следует лишь отметить, что нужно помнить о том, что все
методы хелперов статические и должны объявляться клю-
?>
чевым словом static.
Для расширения существующих библиотек фреймвор-
ка требования следующие: Вместо заключения
n имя файла должно совпадать с именем расширяемого Разумеется, в рамках данной статьи невозможно опи-
файла и иметь префикс MY_; сать весь инструментарий, который Kohana предоставля-
n класс библиотеки наследуется от расширяемого клас- ет разработчику. Цель статьи лишь познакомить вас с ос-
са и имеет такое же имя, но без суффикса _Core. новными принципами работы фреймворка и дать понять,
насколько может быть оправданно и полезно применение
Например, чтобы расширить класс библиотеки каркасной среды разработки, а именно Kohana. При созда-
Controller, необходимо создать файл application/libraries/ нии реальных проектов вы можете легко воспользовать-
MY_Controller.php: ся огромным набором методов и инструментов, которые
предоставляет фреймворк, и понять, насколько это прос-
<?php defined('SYSPATH') or die('No direct script access.'); то, удобно. Подробное описание можно найти в докумен-
class Controller extends Controller_Core { тации на официальном сайте разработчика [3]. Я наде-
юсь, что вы не напрасно потратите время, посвятив его
public function __construct()
{ изучению Kohana.
parent::__construct();
}
} 1. http://kohanaphp.com – официальный сайт разработчиков
фреймворка Kohana.
?>
2. http://kohanaphp.com/license – лицензионное соглашение.
Обратите внимание на то, что в классе обязательно дол- 3. http://docs.kohanaphp.com – техническая документация.
жен присутствовать метод конструктора со ссылкой на ро- 4. http://kohanaphp.com/download – дистрибутив фреймворка.
дительский конструктор. 5. http://code-igniter.ru – PHP-фреймворк CodeIgniter.

№11, ноябрь 2008 81


администрирование «1С»

Перенос данных с использованием


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

С
разу хочу сказать, что полный программный код всех Рег = РегистрыСведений.СтруктураПерегрузки. ↵
обработок печатать бессмысленно из-за достаточ- СоздатьМенеджерЗаписи();
Рег.Ид = Семерка.ЗначениеВСтрокуВнутр ↵
но большого объема. На примере одной обработки (Спр77.текущийэлемент());
я покажу основные принципы работы и расскажу свой ход Рег.Орг = Орг.Ссылка;
Рег.Элемент = Спр8.Ссылка;
мысли. Готовые обработки можно найти на сайте журнала Рег.Записать();
www.samag.ru в разделе «Исходный код».
Рассмотрим типовой случай перехода с платформы Будем считать этап загрузки справочников подготови-
«1С:Предприятие» версии 7.7 на версию 8.1 с нового года. тельным, перейдем к более подробному рассмотрению пе-
Задача: перенести справочники «Контрагенты» и «До- реноса данных о задолженности контрагентов.
говора», а также остатки взаиморасчетов по счету 60 Создадим внешнюю обработку, разместим на форме пе-
из «старой» базы в «новую». До перехода предприятие ра- реключатель для выбора субсчета 60-го счета, а также дату
ботало с конфигурацией «Производство + Услуги + Бух- итогов и дату создаваемой операции (см. рисунок).
галтерия» (платформа 7.7), после перехода собирается ра- В процедуре «КнопкаСформироватьНажатие» размес-
ботать с конфигурацией «Управление производственным тим весь необходимый текст программы.
предприятием» (платформа 8.1). Сначала подключимся через OLE к той базе данных,
Разделим за- из которой будем брать данные:
дачу на две. Пер-
вая – перенос КаталогПрограммы77 = "C:\Program Files\1Cv77\BIN\";
КаталогБазы77 = "C:\1c_base\ПУБ\";
справочников, СтрокаПодключения = """" + КаталогПрограммы77 + """" + ↵
вторая – перенос "enterprise /d""" + КаталогБазы77 + """" + ↵
" /nЮзер /p123";
остатков по сче- Семерка = Новый COMОбъект("V77S.Application");
там. Если Семерка.Initialize(Семерка.RMTrade, ↵
СтрокаПодключения,"NO_SPLASH_SHOW") Тогда
При перено - Сообщить("Открыта база 7.7");
се справочников Соединение=Истина;
КонецЕсли;
создадим допол-
нительную струк- Каталоги программы и базы данных можно прописать
туру (регистр све- в самом модуле, а можно и сделать интерактивный выбор
Форма обработки загрузки данных
во взаиморасчетах дений), который на форме. Строка подключения собирается из каталога за-
будет использо- пуска программы, режима запуска, каталога базы данных,
ваться для поиска и точной идентификации перенесенных имени пользователя и пароля. В данном случае имя поль-
объектов в базе данных. Назовем этот регистр «Структура- зователя «Юзер», пароль «123».
Перегрузки», первое измерение будет «ИД» (строка, дли- Далее производим подключение, причем с параметром
на 150), второе – «Орг» (для случая многофирменного уче- NO_SPLASH_SHOW, это означает, что запуск базы будет
та), ресурс «Элемент» составного типа данных, включаю- происходить без демонстрации заставки, т.е. практически
щий в себя все справочники, которые мы собираемся за- незаметно для пользователя.
полнять переносом данных.
При загрузке справочников, кроме записи самих эле- ИНН = Лев(Семерка.Константа.ИННОрганизации,10);
Орг = Справочники.Организации.НайтиПоРеквизиту("ИНН",ИНН);
ментов, будет заполняться и этот регистр сведений при- Опер = Документы.ОперацияБух.СоздатьДокумент();
мерно следующим образом: Опер.Организация = Орг.Ссылка;
Опер.Дата = ДатаОперации;

Спр8 = Справочники.Контрагенты.СоздатьЭлемент(); Определяем по ИНН организацию, по которой хотим вы-


Спр8.Наименование = Спр77.Наименование;
Спр8.Записать(); полнить загрузку, и создаем новый документ «Операция».

82
администрирование «1С»
БИ77 = Семерка.CreateObject("БухгалтерскиеИтоги"); Движ.СубконтоДт.Вставить ↵
ОлеВидСубконто1=Семерка.EvalExpr ↵ (ПланыВидовХарактеристик. ↵
("ВидыСубконто.Контрагенты"); ВидыСубконтоХозрасчетные. ↵
ОлеВидСубконто2=Семерка.EvalExpr("ВидыСубконто.Договоры"); Договоры,Элемент8);
Движ.СчетКт = ПланыСчетов.Хозрасчетный. ↵
Вспомогательный;
Замечу, что создание объектов в подключаемой по OLE- Движ.Сумма = ДебетовоеСальдо;
Движ.Активность=Истина;
базе происходит с помощью англоязычного синонима Движ.Период = ДатаОперации;
CreateObject, а не «СоздатьОбъект». Метод EvalExpr также Опер.Движения.Хозрасчетный.Записать();
ИначеЕсли КредитовоеСальдо<>0 тогда
часто используется при работе с технологией OLE, означа- ИД = Семерка.ЗначениеВСтрокуВнутр ↵
ет вычисление выражения системы. (БИ77.Субконто(2));
Рег = РегистрыСведений.СтруктураПерегрузки;
ОтборПоИД = Новый Структура("ИД, Орг");
Если Счет60=1 Тогда ОтборПоИД.ИД = ИД;
Счет = ПланыСчетов.Хозрасчетный. ↵ ОтборПоИД.Орг = Орг.Ссылка;
РасчетыСПоставщиками; ВыборкаИД = рег.Получить(ОтборПоИД);
СчетСтр = "60.1"; Элемент8 = ВыборкаИД.Элемент.Ссылка;
ИначеЕсли Счет60=2 Тогда Движ = Опер.Движения.Хозрасчетный.Добавить();
Счет = ПланыСчетов.Хозрасчетный. ↵ Движ.СчетКт = Счет.Ссылка;
РасчетыПоАвансамВыданным; Движ.СубконтоКт.Вставить ↵
СчетСтр = "60.2"; (ПланыВидовХарактеристик. ↵
ИначеЕсли Счет60=3 Тогда ВидыСубконтоХозрасчетные. ↵
Счет = ПланыСчетов.Хозрасчетный. ↵ Контрагенты,Элемент8.Владелец);
РасчетыСПоставщикамиВал; Движ.СубконтоКт.Вставить ↵
СчетСтр = "60.11"; (ПланыВидовХарактеристик. ↵
ИначеЕсли Счет60=4 Тогда ВидыСубконтоХозрасчетные. ↵
Счет = ПланыСчетов.Хозрасчетный. ↵ Договоры,Элемент8);
РасчетыПоАвансамВыданнымВал; Движ.СчетДт = ПланыСчетов.Хозрасчетный. ↵
СчетСтр = "60.22"; Вспомогательный;
КонецЕсли; Движ.Сумма = КредитовоеСальдо;
Движ.Активность=Истина;
Здесь всё достаточно ясно, происходит определение Движ.Период = ДатаОперации;
Опер.Движения.Хозрасчетный.Записать();
счета взаиморасчетов в зависимости от установленного КонецЕсли;
переключателя на форме. КонецЦикла;
КонецЦикла;
БИ77.ИспользоватьСубконто("Контрагенты"); По каждому договору определяем задолженность,
БИ77.ИспользоватьСубконто("Договоры");
БИ77.ВыполнитьЗапрос(ДатаИтогов,ДатаИтогов,СчетСтр); и в зависимости от знака («+» или «-») формируем движе-
БИ77.ВыбратьСубконто(1); ния документа «Операция».

В подключенной базе выполняем запрос по бухгалтерс- Опер.Записать();


Семерка="";
ким итогам на дату, выбранную на форме обработки. Соединение=Ложь;
Сообщить("Закрыта база 7.7");
Пока БИ77.ПолучитьСубконто(1)=1 цикл
БИ77.ВыбратьСубконто(2);
ИД = Семерка.ЗначениеВСтрокуВнутр(БИ77.Субконто(1)); Записываем созданный документ, закрываем соедине-
Рег = РегистрыСведений.СтруктураПерегрузки; ние программно. На этом работа программиста заканчива-
ОтборПоИД = Новый Структура("ИД, Орг");
ОтборПоИД.ИД = ИД; ется, остается только бухгалтеру сверить суммы в «старой»
ОтборПоИД.Орг = Орг.Ссылка; и «новой» программе.
ВыборкаИД = рег.Получить(ОтборПоИД);
Суб1 = ВыборкаИД.Элемент.Ссылка; В случае с другими счетами, возможно, понадобится соз-
дание и других документов. Например, по основным сред-
Начинаем цикл по первому субконто (Контрагенты). ствам организации необходим документ «ВводНачальных
Из регистра сведений получаем ссылку на нужный эле- ОстатковОС». Но, используя уже имеющиеся наработки,
мент справочника. Вот тут и начинает работать создан- создать что-то своё, индивидуальное, гораздо проще.
ный нами механизм. Идентификация происходит не по коду, В заключение хочется сказать о некоторых распростра-
не по наименованию, не по какому-либо другому реквизиту, ненных трудностях, возникающих при работе с OLE.
а по уникальному внутреннему идентификатору объекта. Для обращения к перечислениям используется конс-
трукция типа:
Пока БИ77.ПолучитьСубконто(2)=1 цикл
ДебетовоеСальдо = БИ77.скд(1); ЗначПеречисленияOLE = Объект77.Реквизит.Идентификатор();
КредитовоеСальдо = БИ77.скк(1);
Если ДебетовоеСальдо<>0 Тогда
ИД = Семерка.ЗначениеВСтрокуВнутр ↵
(БИ77.Субконто(2)); «ЗначПеречисленияOLE» будет содержать строку
Рег = РегистрыСведений.СтруктураПерегрузки; со значением перечисления. Обращаться к процедурам
ОтборПоИД = Новый Структура("ИД, Орг");
ОтборПоИД.ИД = ИД; глобального модуля можно следующим образом:
ОтборПоИД.Орг = Орг.Ссылка;
ВыборкаИД = рег.Получить(ОтборПоИД); ТЗ = Семерка.глРасчетАмортизацииОС ↵
Элемент8 = ВыборкаИД.Элемент.Ссылка; (Спр77.ТекущийЭлемент(), ДатаФормирования);
Движ = Опер.Движения.Хозрасчетный.Добавить();
Движ.СчетДт = Счет.Ссылка;
Движ.СубконтоДт.Вставить ↵ Остается только пожелать удачи в решении проблем
(ПланыВидовХарактеристик. ↵ и в освоении новых методов выполнения поставленных
ВидыСубконтоХозрасчетные. ↵
Контрагенты,Элемент8.Владелец); задач!

№11, ноябрь 2008 83


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

«Магические» технологии:
история компании General Magic
Часть 2
Как и смерть многих великих компаний, General Magic была погублена
не голодом, а, наоборот, переизбытком пищи. Переизбытком денег,
всезнающих мозгов и эгоизма, который вызвал расстройство
желудка и удивительно медленную смерть.

Бывший сотрудник General Magic

Дмитрий Мороз

По признанию многих аналитиков, General Magic имела все шансы стать во главе рынка
переносных компьютеров, не поставь она на закрытые коммуникационные сети. Однако могла
ли компания предугадать возникшие на пути трудности, стремительное развитие Интернета,
свою неспособность реагировать на нужды потребителей и действовать в условиях быстро
меняющегося рынка?

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

К
огда у игрока в руке припасе-
на пара козырей, он начинает Первый среди первых мы были ещё месяцы доработки, а практи-
действовать более уверенно. Несмотря на то что портативные компью- чески законченный продукт, готовый к вы-
Однако настолько ли оправданным бу- теры под управлением Magic Cap, кото- пуску. Однако подвели Sony не её собс-
дет риск, если карты противника аб- рые всё-таки добрались до рынка, можно твенные инженеры, а партнёр «по цеху» –
солютно нивелируют призрачное пре- пересчитать по пальцам одной руки, раз- General Magic.
имущество? личных прототипов на базе этой операци- К тому времени, когда «Бамбук» был
К 1993 году General Magic имела онной системы, разработанных в недрах на стадии подготовки к серийному произ-
в своём активе две передовые техно- General Magic, Sony и Motorola, было выпу- водству, стало понятно, что компании не-
логии, которые уже были готовы к вы- щено, как минимум, столько же. обходим, как минимум, год, дабы предо-
ходу на рынок. Первой из них являлась Пожалуй, наиболее примечательным ставить рабочую версию Magic Cap. Опе-
операционная система Magic Cap, в ка- из них является Sony HIX-300 под кодо- рационной системе требовалось в два ра-
честве второй же выступал язык про- вым названием «Bamboo» (Бамбук). Дан- за больше оперативной памяти, а также
граммирования Telescript. Обе техно- ный компьютер примечателен своим ди- более ёмкий аккумулятор. Процессор ком-
логии планировалось использовать зайном, который позволял говорить о нём пьютера был слишком медленным для ра-
в тандеме, однако ничто не мешало как о самом тонком из всех устройств под боты ОС. Кроме того, реализация управ-
коммуникационным компаниям приме- управлением Magic Cap. Впрочем, наибо- ления питанием, резервной батарейкой и
нить мультиплатформенный Telescript лее интересной всё же является история памятью в ней повергла инженеров Sony
в собственных проектах, используя его появления на свет, поскольку обычно в ступор. В результате компания отмени-
персональные компьютеры с их «на- прототипы собственного модельного но- ла подготовку к запуску HIX‑300 и заня-
стольными» ОС и устройства типа мера не имеют. лась разработкой Magic Link, который имел
Apple Newton. В 1993 году, во время бурной рабо- больший объём оперативной памяти, более
За сетевые коммуникации между ты по подготовке операционной систе- быстрый процессор, новый дизайн корпу-
устройствами электронных гигантов мы к релизу, лицензии на её использова- са, на котором расположились две клави-
отвечал оператор AT&T. В недрах дан- ние получили три компании: Sony, Motorola ши <Shift> для возможности управления
ной компании специально для рабо- и Matsushita Electric (ныне Panasonic). обеими руками, а также более ёмкий ак-
ты с Telescript было организовано но- По словам Зарко Драганича (Zarko Draganic), кумулятор.
вое подразделение под названием ранее работавшего в General Magic, Sony В итоге можно констатировать факт:
PersonaLink Services, которое она опи- была впереди планеты всей и разработа- если бы Magic Cap 1.0 была готова к мо-
сывала как «фонд или основу для элек- ла свой вариант портативного компьютера менту окончания работ над устройством,
тронного сообщества – такого себе намного раньше остальных игроков. При- HIX-300 уже в 1993 году стал бы первым
центра для пользователей: предпри- чём это был не просто прототип, для под- портативным компьютером под управле-
нимателей, предлагающих свою про- готовки к производству которого необходи- нием этой ОС на рынке.
дукцию и услуги, а также людей встре-
чающихся, покупающих, работающих Envoy 100 отличался лишь нали- нако, к всеобщему удивлению, в те-
и развлекающихся». чием двух разъёмов для карт PC Card чение дня цена поднялась до 32 дол-
Впрочем, выход Magic Cap постоян- вместо одного у PIC‑1000, а также ларов. Однако General Magic рано ра-
но откладывался, и появление на рын- встроенным радиомодемом на осно- довалась, ведь это было лишь началом
ке первого компьютера под её управ- ве технологии DataTAC и поддержкой долгой борьбы за рынок. По мнению
лением, Magic Link PIC-1000 произ- соответствующего сервиса под назва- экспертов, компания заинтриговала
водства Sony, состоялось лишь 28 сен- нием Radiomail, который позволял по- всех своими перспективными разра-
тября 1994 года. Motorola выпустила лучать и отправлять электронную поч- ботками и обещаниями о лучшем ми-
свой вариант под названием Envoy 100 ту без необходимости проводного дос- ре, однако сможет ли она выполнить их
спустя ещё три месяца. тупа к Сети. Что же касается габари- и доказать, что и Magic Cap, и Telescript
Оба устройства были разработа- тов, устройства были гораздо больше имеют право на жизнь – это уже дру-
ны на базе единой платформы раз- своих конкурентов. Так, PIC-1000 имел гой вопрос.
работчика, «сердцем которой» яв- размеры 19х13х2,5 см и вес 545 грамм, В отличие от финансовых показа-
лялся 16 МГц микроконтроллер 68300 а Envoy 100, обладая схожими габа- телей количество реализованных кар-
производства Motorola. В результа- ритами, из-за встроенного радиомо- манных компьютеров Sony и Motorola
те большинство характеристик в ви- дема отягощал своего владельца уже было, мягко говоря, невпечатляю-
де 1 Мб оперативной памяти, чёрно- на 817 грамм. щим: в течение нескольких месяцев
белого экрана с диагональю 5,4 дюй- Когда первые устройства поя- с начала продаж лишь несколько ты-
ма и разрешением 480х320 пикселей вились на рынке, а AT&T запустила сяч устройств нашло новых владель-
и отображением 4 градаций серого, ин- PersonaLink, для General Magic наста- цев. Впрочем, по словам руководства
фракрасного порта, факс-модема со ло время входить в «открытое плава- General Magic, они были готовы к столь
скоростью передачи данных 9,6 Кбит/ ние». Случилось это событие 11 фев- неспешному набору скорости.
с и аккумулятора, обеспечивавшего раля 1995 года. Изначально компания Ещё в преддверии первой публич-
8-12 часов автономной работы, были планировала продать 4 миллиона ак- ной демонстрации технологий сво-
идентичными. ций по цене 14 долларов за штуку, од- ей компании Энди Хертцфилд (Andy

№11, ноябрь 2008 85


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

Sony PIC-1000 Motorola Envoy 100

Hertzfeld) не отрицал, что кампания и Matsushita, эти компании не спеши- даже его назвать уверенным никак
по продвижению устройств на основе ли предлагать рынку свои устройства. нельзя: стоимость одного устройства
Magic Cap рассчитана на долгосроч- Нет, демонстрация публике собствен- в 1000‑1500 долларов, которая при по-
ные перспективы. ных разработок на базе Magic Cap, ко- купке нескольких аксессуаров в виде
«Мы готовились к сравнительно нечно же, была. карты памяти, кабеля для соединения
медленному старту, особенно памя- Та же Matsushita продемонстри- с персональным компьютером и внеш-
туя наш прошлый опыт с Macintosh, ровала прототип своего коммуни- ней клавиатуры вырастала в полтора
которому понадобилось два года, кационного устройства под назва- раза, отпугивала от компьютеров мно-
чтобы «встать на ноги». То же самое нием Panasonic NeoNet на выстав- гих потенциальных покупателей.
и здесь. Экраны недостаточно хоро- ке Consumer Electronics Show (CES) Цена в пару сотен долларов за ус-
ши для удовлетворения запросов на- в 1996 году. Благодаря своим неболь- тройство на базе Magic Cap, о кото-
ших клиентов. Время автономной ра- шим габаритам (подумать только!), за- рой говорили в интервью Билл Эткин-
боты устройств от встроенных аккуму- щитной крышке для экрана и исполь- сон (Bill Atkinson) и Энди Хертцфилд
ляторов очень мало. И также абсолют- зованию более совершенной версии на заре появления своей компании,
но не развита инфраструктура беспро- ОС под номером 1.5 этот портатив- продолжала оставаться недостижи-
водных коммуникаций». ный компьютер смог вызвать интерес мой мечтой.
«Всё это являлось довольно нетри- у покупателей и вынудить их ждать Не стоит забывать, что кроме круг-
виальной проблемой, – честно призна- своё появление на рынке с большим ленькой суммы, которую необходимо
вался Энди. – Однако нам приходи- нетерпением. было выложить за Magic Link или же
лось с чего-нибудь начинать, собст- К сожалению, чуда не случилось: Envoy, покупатель был вынужден еже-
венноручно создавая необходимые постоянное откладывание даты выпус- месячно отдавать ещё несколько де-
условия для появления сетей беспро- ка устройства, а также неготовая сете- сятков долларов в качестве абонент-
водной передачи информации, влияя вая инфраструктура для его функцио- ской платы за использование службы
на улучшение характеристик экранов нирования, за которую отвечал япон- PersonaLink, без которой ориентиро-
мобильных устройств. То есть согласно ский оператор Nippon Telegraph and ванный на сетевые коммуникации ком-
нашему плану мы просто делали свою Telephone (NTT), сделали своё «чёр- пьютер на базе Magic Cap был, в об-
работу, надеясь на то, что остальные ное дело». щем-то, ничем не лучше давно пре-
подтянутся». Та же история постигла и европей- бывавшего на рынке Apple Newton
Оптимистично настроенному руко- ского гиганта потребительской элект- или же карманных компьютеров ком-
водству General Magic приходилось вы- роники – компанию Philips. Изначально пании Psion, которые стоили в два ра-
ступать в неравной игре против целой планировавшийся совместно с фран- за дешевле.
индустрии, и вот здесь вставал вопрос: цузским оператором France Telecom Что же касается возможностей,
у кого окажется более сильная рука – проект по выпуску устройства на базе предоставляемых PersonaLink, они
у компании или же у рынка? По иронии Magic Cap и организация сети для его по большей части ограничивались
судьбы, второй вариант вышел из иг- работы, аналогичной PersonaLink ком- работой с электронной почтой, воз-
ры победителем. пании AT&T, так и не состоялся. можностью получения программного
Как итог – карманные компью- обеспечения, электронных «визитных
Факир был пьян, теры под управлением операцион- карточек» других абонентов службы
и фокус не удался ной системы General Magic продол- и всё. «Умные агенты» Telescript, о ко-
Несмотря на партнёрские соглаше- жали своё скромное шествие лишь торых Билл и Энди так радужно рас-
ния между General Magic и Philips на внутреннем рынке США. Однако сказывали несколько лет назад, на-

86
ретроспектива
шли в сервисе лишь ограниченное ний CodeWarrior Magic, работавшего Впрочем, как и компьютеры на ба-
применение. на компьютерах Macintosh. зе «полновесной» Magic Cap, оболоч-
Более того, на раннем этапе Однако все вышеперечислен- ка для Windows не пользовалась осо-
PersonaLink даже не поддерживала ные проблемы меркли по сравнению бым успехом у ппользователей и даль-
графические и аудиофункции компью- с главной катастрофой, которую про- ше статуса диковинки на пару часов
теров под управлением Magic Cap, ог- игнорировала компания – сеть Ин- не продвинулась.
раничиваясь обменом сообщений, со- тернет. Суммируя всё вышесказанное, си-
державших лишь простой текст. И это Появление в 1994 году браузе- туация на рынке для General Magic вы-
при том, что операционная система ра Mosaic, а чуть позже и Netscape глядела не лучшим образом.
изначально поддерживала «обогаще- Navigator произвело эффект взорвав-
ние» писем рисунками, музыкальным шейся бомбы: количество пользовате- Попытка перезапуска
сопровождением и прочей мультиме- лей, стремящихся приобщиться к Все- В середине 1996 года Sony и Motorola
дийной информацией. мирной компьютерной Сети, росло представили свои новые модели ком-
Ещё один недостаток, на кото- в геометрической прогрессии. пьютеров под управлением Magic
рый жаловались первые покупате- И в то время, когда новички на рын- Cap, получившие названия Magic Link
ли, – отсутствие программ сторонних ке взялись за перспективный рынок, PIC‑2000 и Envoy 150 соответственно.
разработчиков. General Magic обеща- General Magic продолжала поддержи- По сравнению со своей предшес-
ла, что спустя короткое время после вать закрытую сеть PersonaLink. Её по- твенницей PIC-2000 обладала увели-
появления первых устройств на базе пулярность напрямую зависела от ко- ченным до 2 Мб объёмом оператив-
Magic Cap выпустит пакет разработ- личества пользователей устройств ной памяти, двумя слотами PC Card,
ки приложений для своей ОС, а так- на базе Magic Cap, которое в свою оче- более быстрым 14,4 Кбит/с модемом,
же всю необходимую документацию. редь было ограничено высокой стои- встроенным динамиком, а также, и это
В реальности же к середине 1995 го- мостью компьютеров на базе этой ОС. главное, экраном с подсветкой, на от-
да доступное описание внутренней В результате, не имея хорошего дохо- сутствие которой жаловалось подав-
архитектуры операционной системы да от нового сервиса, у AT&T не бы- ляющее большинство пользователей
было поверхностным, к тому же напи- ло интереса в дальнейшем его совер- оригинального устройства. В качест-
санное излишне усложнённым языком, шенствовании. ве операционной системы исполь-
а средства разработки существовали В стремлении популяризировать зовалась Magic Cap 1.5, являвшаяся
лишь для рабочих станций производс- свои разработки General Magic выпус- результатом основательной работы
тва Sun Microsystems. «General Magic тила в октябре 1996 года программное над ошибками предшественницы.
давно надо было дать в руки разработ- обеспечение Magic Cap for Windows. Что же касается Envoy 150, то он,
чиков инструменты, которые им хоро- Данное ПО представляло собой гра- как и продукт Sony, обзавёлся допол-
шо известны и понятны, если она хо- фическую оболочку Magic Cap, рабо- нительным мегабайтом ОЗУ и пассив-
чет продвинуть эту платформу на ры- тавшую поверх операционной систе- ной подсветкой экрана, разработанной
нок», – отмечал в июне 1995 года веду- мы от Microsoft и предназначавшуюся совместно с компанией Kodak.
щий аналитик фирмы Dataquest Майк для пользователей, которым было не- Впрочем, даже новые устройства
МакГир (Mike McGuire). обходимо средство для работы с Ин- от Motorola и Sony всё равно не смог-
Ситуация изменилась в лучшую тернетом (в комплекте с программой ли исправить сложившуюся ситуацию
сторону лишь к концу 1996 года, ког- поставлялся браузер Microsoft Internet на рынке. Остальные же производите-
да компания Metrowerks выпустила Explorer 3.0), электронной почтой, фак- ли и операторы, ранее «бившие себя
для Magic Cap версию своего попу- симильными сообщениями с интуитив- в грудь» по поводу всесторонней под-
лярного пакета разработки приложе- но понятным интерфейсом. держки Magic Cap и Telescript, по-тихо-

Sony HIX-300 Magic Cap for Windows

№11, ноябрь 2008 87


ретроспектива
щи центрального процессора без не-
Ещё один Data Rover делать снимки в плохо освещённых поме- обходимости использования дополни-
Data Rover 840 не был последним порта- щениях или же ночью. Благодаря обнов- тельного цифрового сигнального чипа.
тивным компьютером, работавшим под лённому программному обеспечению стра- Впоследствии технология SoftModem
управлением Magic Cap. Весной 1999 года ховой агент, например, мог сфотографи- была лицензирована и использова-
в недрах DataRover Mobile Systems старто- ровать необходимый объект, послать фо- на в Philips Nino, Compaq С-серии,
вала разработка нового устройства. Со- тографию в офис, а после исследования Samsung InfoMobile и других карман-
гласно имевшимся на тот момент дан- изображения экспертами получить оцен- ных компьютерах.
ным новинка, над которой также работа- ку соответствия свершившегося события Что же касается новых продуктов
ла Oki, должна была иметь абсолютно но- критериям страхового случая. собственного производства, в апре-
вый форм-фактор корпуса (возможно, «ра- К сожалению, к декабрю 1999 года, ког- ле 1997 года General Magic объявила
кушка» с QWERTY-клавиатурой). да разработка нового компьютера подхо- о работе над новым проектом под ко-
Что же касается функционального на- дила к концу, компания полностью разоча- довым названием Serengeti, которое
полнения, новый Data Rover был осна- ровалась в собственной платформе, и при- на момент его выхода в свет было из-
щён встроенной цветной фотокамерой емник Data Rover 840 «так и не достиг крас- менено на Portico.
со вспышкой, которая позволяла бы ему ной ленточки финишной прямой». Он был построен на базе платфор-
мы голосового интерфейса компании
му ретировались с тонущего корабля, Руководство General Magic осозна- под названием MagicTalk и позволял
оставив General Magic со своими про- вало, что с подобными успехами оста- клиенту получать доступ к электрон-
блемами наедине. ваться на плаву компания сможет не- ной почте, персональному календа-
А они у компании, надо признать- долго. Основатель фирмы Марк Порат рю, адресной книге, котировкам ак-
ся, были немалыми. (Marc Porat) понял, что не может более ций, новостям и прочей информации,
Начать стоит с того, что, согласно контролировать ситуацию, и в апреле используя голосовые команды по те-
данным исследовательской организа- 1996 года покинул пост исполнительно- лефону.
ции International Data Corp., за всё вре- го директора General Magic. Его место Всё, что требовалось от пользо-
мя присутствия на рынке портативных занял Стив Маркман (Steve Markman), вателя, – настроить свою учётную за-
компьютеров на базе Magic Cap их бы- ранее пребывавший на должнос- пись на сайте, введя номера теле-
ло продано всего 30 тысяч штук. Коли- ти исполнительного вице-президен- фонов, факса, адрес электронной
чество подписчиков PersonaLink было та в Novell. почты. После этого он получал собст-
ещё меньше. «Мы пытались продавать устройст- венный Portico-номер, позвонив на ко-
Не удовлетворённая низкими про- ва, стоившие слишком дорого», – гово- торый начинал в прямом смысле об-
дажами своих портативных компью- рил Маркман. – Мы пали так низко, на- щаться со своим виртуальным по-
теров Envoy, компания Motorola в се- сколько только можно упасть, однако мощником.
редине 1996 года объявила о прекра- уже движемся по пути назад». Portico распознавал несколько
щении их производства. Спустя ко- Первым его шагом к «улучшению» миллионов произносимых человеком
роткое время её примеру последова- финансового положения компании фраз, а также обладал собственным
ла и Sony. Финальным аккордом стало стало увольнение в сентябре 1996 го- «словарём», состоявшим из пяти тысяч
объявление AT&T о прекращении под- да почти 140 сотрудников компании, ответов и различных подсказок. Более
держки и дальнейшего развития сер- что составило половину всего штата того, один и тот же ответ виртуально-
виса PersonaLink и концентрации на се- людей, работавших в General Magic. го помощника на вопрос пользовате-
ти Интернет. Кроме того, новый исполнитель- ля мог звучать по-разному, недаром
Как итог – финансовые результа- ный директор определил и новое на- за свои исследования в области рас-
ты были катастрофическими: с 1990-го правление в развитии компании, кото- познавания голоса General Magic по-
по середину 1996 года суммарный убы- рое заключалось в попытке догнать на- лучила несколько патентов.
ток компании составил 74 млн. долла- чавшийся несколькими годами ранее Специально для работы Portico
ров. Стоимость акций компании, ещё интернет-бум. Отныне она переква- General Magic построила большой ком-
год назад находившиеся на отметке лифицировалась в поставщика при- муникационный центр, способный об-
в полтора десятка долларов за шту- ложений для передачи данных и го- служивать одновременно 100 тысяч
ку, рухнула в пятнадцать раз! К кон- лоса через всемирную коммуникаци- абонентов. Доступ к сервису, по пла-
цу года на банковских счетах General онную сеть. нам компании, должен был обеспечи-
Magic осталось всего 67 млн. долла- В марте 1997 года из General Magic ваться операторами мобильной и на-
ров, что для фирмы, тратящей боль- была выделена отдельная компания, земной связи по абонентской под-
шие средства на исследовательские получившая название AltoCom. В на- писке. Кроме того, будущие партнё-
разработки – сущие копейки. Неуди- чале года General Magic разработа- ры General Magic, благодаря гибкос-
вительно, что в подобной ситуации ла технологию программных модемов ти MagicTalk могли оптимизировать
финансовый директор компании Де- под названием SoftModem. Она пред- Portico для собственных нужд.
нис Рейни (Dennis Raney) принял ре- ставляла собой программное обеспе- Проект был многообещающим,
шение сложить полномочия и уйти чение, выполнявшее функции переда- но и столь же дорогим. Собствен-
в отставку. чи данных и факс-модема при помо- ных средств на его завершение уже

88
ретроспектива
не хватало, и потому компания пре- на RISC‑процессор MIPS R3000. Же- лявшим при помощи нескольких щелч-
бывала в постоянном поиске новых лание «освежить» ОС и избавить её ков мышью настроить подключение
инвесторов. от наследия предшественниц выли- к провайдеру. Также стоит отметить
Одним из них стала Microsoft, в на- лось в несовместимость програм- поставлявшийся с Magic Cap 3.0 бра-
чале марта 1998 года объявившая много обеспечения, написанного для узер Presto!Links, поддержку програм-
о подписании соглашения с General Magic Cap 1.х-2.х, с новой операцион- мных модемов SoftModem, возмож-
Magic, согласно которому она вклады- ной системой, а также невозможность ность работы с несколькими почтовы-
вала в компанию 6 млн. долларов в об- обновления системного ПО в уже вы- ми ящиками, а также факсимильными
мен на лицензирование определённых пущенных компьютерах, что вызва- сообщениями.
технологий. Что конкретно они собой ло бурю негодования у горстки всё Вместе с Data Rover 840 General
представляли, Microsoft не рассказала, ещё лояльных General Magic пользо- Magic вышла на рынок, который был
лишь заверила, что полученные дан- вателей. уже давно «поделён» другими игро-
ные будут использованы только в ис- Впрочем, согласно политике Марк- ками в лице компаний Telxon, Symbol
следовательских разработках и не по- мана отныне компьютеры на ба- и Norand. И теперь Data Rover 840 не-
явятся в коммерческих продуктах ещё зе Magic Cap не предназначались обходимо было доказать свою «проф-
в течение нескольких лет. для простых смертных. По его мне- пригодность» перед своими конку-
Впрочем, как окажется позднее, нию, главными потребителями Data рентами.
Microsoft был необходим лишь доступ Rover 840, а именно так впослед- И здесь компьютер спасовал. Ус-
к патентам General Magic, чтобы в бу- ствии было названо устройство, про- тройство, даже несмотря на свою це-
дущем прибрать их к своим рукам. Од- изведённое совместными усилиями ну в 1000 долларов, было очень при-
нако в 1998 году отчаявшаяся компа- General Magic и компании Oki Electric влекательным вариантом. Загвоздка
ния цеплялась за любой шанс, спо- Industry, должны были стать работаю- в данном случае крылась в необходи-
собный помочь ей просуществовать щие вне офиса сотрудники здравоох- мом программном обеспечении, вер-
ещё какое-то время, и посему ковар- ранения, транспортных служб и про- нее, в его отсутствии.
ные планы разработчика Windows бы- чие, нуждающиеся в средствах пос- Дело в том, что узкоспециали-
ли наименьшим, на что она обраща- тоянного подключения к информаци- зированный рынок, на который бы-
ла внимание. онной среде пользователи. ло ориентировано устройство, требо-
Несмотря на то что Portico являлся Кстати, как отмечали впоследствии вал не просто портативный компью-
приоритетным проектом для General обозреватели различных информаци- тер, но и ПО, которое позволяло бы
Magic, компания всё же не забыва- онных ресурсов, Data Rover 840 стал ему функционировать в заданной ин-
ла и про Magic Cap. Однако, посколь- лучшим портативным компьютером формационной среде. Ведь крупные
ку партнёров по выпуску портативных на базе Magic Cap: использование про- компании и организации, покупающие
компьютеров на базе данной ОС у неё цессора MIPS R3000 позволило значи- портативные компьютеры в качестве
больше не осталось, General Magic тельно повысить производительность, коммуникационных устройств для сво-
пришлось самостоятельно осваивать а экран с подсветкой – сделать чтение их сотрудников, приобретают прежде
производство устройств. информации для пользователя более всего законченный и готовый к исполь-
К тому времени у General Magic комфортным. зованию программно-аппаратный ком-
в разработке была новая версия опе- Третья версия операционной сис- плекс, а не набор устройств и ПО, кото-
рационной системы под номером темы обладала улучшенным масте- рые затем ещё необходимо заставить
3.0, проектировавшаяся в расчете ром соединения с Интернетом, позво- функционировать сообща.

Data Rover 840 Sony PIC-2000

№11, ноябрь 2008 89


ретроспектива
ки. Большая часть руководства ком-
Не свершившееся будущее лектуальной собственности, на которую пании покинула её в поисках более
Magic Cap также положил глаз и Хертцфилд. перспективного места для дальней-
Magic Cap можно назвать ребёнком, ко- Впоследствии один из основателей шей работы.
торому не повезло с родителями. Впро- General Magic продолжал вести переговоры Под руководством нового испол-
чем, осознав свои ошибки, впоследствии с Мирвольдом, дабы вырвать у него права нительного директора Кэтлин Лейтон
они ещё пытались помочь своему чаду, од- на Magic Cap. Однако тот накладывал всё (Kathleen Layton) General Magic в оче-
нако, к сожалению, безрезультатно. больше и больше ограничений на исполь- редной раз решила изменить свою
По словам Стива Шрама, во время бан- зование операционной системы до тех пор, стратегию путём превращения сво-
кротства компании Энди Хертцфилд, ныне пока не стало ясно, что лишь немногие за- их разработок в области голосовых
работающий в компании Google, пытал- интересуются Magic Cap, даже если её ис- коммуникаций в комплексные реше-
ся «освободить» операционную систему ходные коды будут открыты для свободно- ния для корпоративного рынка. Одна-
путём открытия её исходных кодов. Однако го доступа. Поэтому в итоге Энди не оста- ко особым успехом новая инициати-
этому воспрепятствовал Натан Мирвольд лось ничего другого, как сдаться. ва не пользовалась, и компания про-
(Nathan Myrvold), бывший технический ди- С горечью приходится констатировать должала тратить последние сбере-
ректор Microsoft, позже создавший свою факт, что миллионы долларов и усилия де- жения, медленно приближаясь к сво-
компанию Intellectual Ventures. Мирвольд сятков первоклассных инженеров так и ос- ей кончине.
воспользовался процессом банкротства танутся пылиться в каком-нибудь сейфе Случилось это грустное событие
General Magic для покупки всей её интел- за семью замками. 18 сентября 2002 года, когда General
Magic объявила о вынужденном закры-
General Magic же надеялась, что Однако с собственным продуктом тии в связи с отсутствием денежных
сервисы, использующие в своей ос- на её основе в лице Portico General средств, необходимых для обеспече-
нове Data Rover, будут создавать сто- Magic не везло. Нет, инновационный ния дальнейшего существования.
ронние разработчики. Однако желаю- сервис пользовался популярностью, «Комбинация нескольких факторов
щих заняться этим было не так много, однако количество операторов, жела- привела нас к этому решению», – зая-
как того хотела компания. ющих поучаствовать в раздаче досту- вила тогда Лейтон. – Текущее состоя-
Убедившись, что рынок порта- па к нему, было очень небольшим. Не- ние экономики и рынка вместе с про-
тивных компьютеров уже давно стал удивительно, что прибыль от сервиса должающимся замедлением индуст-
для неё тяжёлой ношей, а также же- была соответствующей. рии информационных технологий были
лая сконцентрировать все свои уси- В ноябре 1999 года General Magic главными причинами, не позволивши-
лия на продвижении Portico, General объявила о подписании соглашения ми нам раздобыть необходимые сред-
Magic в конечном итоге приняла ре- с компанией OnStar Corporation, явля- ства. Без возможности немедленного
шение полностью избавить себя от не- ющейся подразделением американ- финансирования извне совет акционе-
обходимости дальнейшего развития ского гиганта автомобилестроения ров решил, что компания более не мо-
Magic Cap. General Motors. жет продолжать функционировать».
В результате в декабре 1998 года Компания предоставляет владель- Итак, спустя 12 лет, первую поло-
была сформирована отдельная ком- цам автомобилей с установленным вину из которых General Magic пыта-
пания под названием DataRover Mobile оборудованием OnStar различные сер- лась изменить мир, а вторую – потрати-
Systems, на плечи которой была взва- висы посредством мобильной связи ла на безуспешные попытки выбрать-
лена судьба операционной системы вроде техслужбы, оповещения о воз- ся из вырытой самой же себе ямы, на-
и единственного оставшегося уст- никшей аварии, нахождения угнанной стал её час расплаты. Как и многие
ройства под её управлением. Управле- машины и т. д. другие компании, General Magic ста-
ние новым предприятием было поруче- Используя облегчённую версию ла очередной сверхновой звёздочкой
но Стиву Шраму (Steve Schramm), быв- Portico, General Magic разработала на небосклоне, чья жизнь была неве-
шему генеральному менеджеру под- для OnStar систему виртуального кон- роятно яркой, однако и столь же быс-
разделения General Magic, занимав- сультанта Virtual Advisor, позволяюще- тротекущей. И теперь всё, что оста-
шегося разработкой Magic Cap. го пользователю посредством голо- лось от неё для будущих поколений, –
В 2000 году компания изменила сового управления работать с элект- лишь память.
своё название на Icras, а вместе с ним ронной почтой, а также получать дос-
переквалифицировалась в постав- туп к различным сетевым источникам 1. http://www.wikipedia.org.
щика решений на основе беспровод- информации: новостям, прогнозу по- 2. http://www.wired.com.
ных технологий передачи информа- годы и т. д. 3. http://www.byte.com.
ции. Главная разработка General Magic, Благодаря сделке с OnStar ком- 4. http://www.mactech.com.
ради которой она появилась на свет, пания получила в своё распоряжение 5. http://joshcarter.com.
окончательно канула в Лету. 20 млн. долларов, которые позволили 6. http://joi.ito.com.
В 1999 году платформа MagicTalk её протянуть ещё несколько лет. Впро- 7. http://www.pencomputing.com.
была лицензирована компанией Excite, чем, особо радостными они не были. 8. http://news.cnet.com.
которая создала на её основе сервис В 2001 году в General Magic про- 9. http://money.cnn.com.
голосовой почты. изошли новые кадровые перестанов- 10. http://www.allbusiness.com.

90
сисадмин тоже человек

Вам спам не приходил? Какой он, Интернет


Задолбали меня юзвери, жалующиеся на спам. Подумала, де- Работал в свое время я в одной районной сети. Периодически
шевле настроить им спам-фильтр – пусть радуются. Сказано – приходилось в проблемных случаях подключать абонентов (когда
сделано, настроила. монтажники не могут решить проблему подключения). Прихожу,
Дело было в пятницу. В понедельник звонят обеспокоенные значит. Встречает женщина бальзаковского возраста. Ну, короче,
юзеры: «А у нас почта работает? А то даже ни одного спама за все все подключил, настроил. Договор подписан. И тут вопрос:
выходные не пришло!» – А где Интернет?
Анастасия Кузнецова Ну, я показываю, открываю «Яндекс», вбиваю в поиске слово,
показываю, что все работает. Ответ:
– И это Интернет??? За что я деньги платила??? Что за фиг-
Пытливый ум ню вы мне показываете???
Работаю я на небольшом предприятии программистом и по сов- Я просто упал... У меня дар речи пропал сразу. Не мог ниче-
местительству админю нашу небольшую сетку (компов на 30). Вот го сказать.
недавно и дома с двумя соседями тоже прокинули мы сеть, сде- Я спрашиваю:
лали общий Интернет (Интернет во всем доме есть пока только – А что вы хотели увидеть?
у меня, ADSL). Поставил я себе на комп Kerio WinRoute Firewall, – Ну не такую фигню.
ну и даю им Интернет на небольшой скорости, за определенную Пришлось провести краткий курс молодого серфера.
плату. И вот один из этих соседей тоже собрался подключить се- Вот такой забавный случай.
бе ADSL. Второй про это узнал и пишет мне в аську: himik_007
– Ты в курсе что ... решил тоже себе Инет подключить?
– Ага, в курсе.
– Я вот тут подумал. Когда он подключит, мне тогда можно бу- О профессии сисадмина
дет по локалке нашей брать Инет и у тебя, и у него одновремен- Сижу, пью кофе, слушаю музыку, читаю в Инете про плюсы и ми-
но, чтоб скорость больше была. нусы работы системным администратором (думаю про себя о спе-
Я ржал минут 5. цифике профессии).
– Ты сам это придумал или кто подсказал? Плюсы профессии:
– А что... создать второе подключение, прописать там его IP... n Востребованность на рынке труда (согласен).
Все, после этих слов я пад стулом... n Достойный уровень заработной платы (не всегда, но обычно
Gorizont устраивает).
n Относительная автономность (у кого как).
n Самостоятельность в принятии решений (ну да).
Полтергейст n Относительно свободный график работы (точно не у меня).
Работаю я на одном предприятии в службе технической поддержки. n Постоянное повышение уровня образования (век живи, век
Рабочий день, значит, подходит к концу, и я уже было засобирал- учись).
ся до дому, но не тут-то было. Прибегает, значит, менеджер смены
и говорит заученную фразу: «Комп не работает». Ну, соответствен- Минусы профессии:
но, после некоторых попыток добиться, что же все-таки не работа- n Не всегда полное взаимопонимание с руководством (бывает).
ет, я терплю фиаско. Включаю свой комп, лезу через Dame Ware n Специалисты этой области вынуждены быть мастерами на все
на ту самую злосчастную рабочую станцию – ага, заблокирован руки, не редки случаи, когда к системному администратору бе-
пользователь. Ну я, соответственно, разблокировал, залез опять гут по мелочам (и достаточно часто).
на тот комп и написал в текстовом файле: «Ребята, все хорошо, n Ненормированный рабочий день.
можно начинать работать». Собираюсь в очередной раз домой. n Случаи внештатных ситуаций.
Опять тот же менеджер с криками: «Не работает комп!» Лезу опять n Общение с большим количеством пользователей, не осведом-
через Dame Ware (при нем), показываю – все работает! ленных о работе компьютера.
– Нет, – говорит, – что ты водишь мне мышкой по своему мо-
нитору? У меня там не работает, а ты мне здесь что-то показыва- Когда я глазами оказываюсь на строчке про «мелочи», захо-
ешь. Иди, подойди да посмотри. дит одна из сотрудниц компании и несчастным голосом начина-
Иду. Картина следующая. Заходим на производство, подхо- ет вещать, что, мол, мужиков у нас на фирме толком нет. Ты один,
дим к тому злосчастному компу, окруженному со всех сторон ку- кто может помочь принести бутыль воды из подвала.
чей доблестных работников. Ну, думаю, может и правда что не ра- Kalengil
ботает. Народ расступается, я молча начинаю проверять работо-
способность ПО. Все работает! Спрашиваю: «А в чем собственно
дело?» Тут высказывание: «Вы знаете, комп сошел с ума, он сам
двигает мышкой, и потом он сам написал: «Ребята, все хорошо,
можно начинать работать».
Александр Улыбин
По материалам сайта «Сисадмин тоже человек» –
http://sysadmin.mail.ru

№11, ноябрь 2008 91


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

Регулярные выражения, 3-е издание


Джеффри Фридл
лению. Книга в первых своих изданиях ности регулярных выражений в Perl.
заслуженно получила статус класси- Из специфики, затрагивающей Java,
ческой – четкость изложения и спектр стоит отметить приведенные отличия
охватываемых нюансов не могли между ее разными версиями (1.4.2 и
остаться не замеченными со стороны 1.5.0, 1.5.0 и 1.6.0). В случае .NET рас-
как не очень опытных пользователей, смотрены «нетривиальные возмож-
так и квалифицированных специалис- ности»: сборка регулярных выраже-
тов. Около половины издания отведе- ний, поиск вложенных конструкций,
но на всеобъемлющую теорию по ре- объект Capture. В PHP интересно на-
гулярным выражением с многочислен- личие информации о недостающих
ными примерами их применения. В ней функциях preg, которые при желании
рассматриваются основы составления можно заимствовать у сторонних раз-
выражений, их возможности и диалек- работчиков, а также несколько «рас-
ты, механизмы обработки. Отдельная ширенных примеров»: разбор данных
глава отведена построению эффектив- в формате CVS, «проверка тегирован-
ных регулярных выражений с примера- ных данных на корректность вложен-
Регулярные выражения давно пере- ми стандартных оптимизаций и быст- ных конструкций».
стали быть уделом UNIX-администра- рых выражений, описаниями методов
торов и Perl-программистов. Сегод- «раскрутки» цикла, исключений слу- n Издательство: «Символ-Плюс»
ня это фактически общепризнанный чайных совпадений. Вторая половина n Год издания: 2008
стандарт для гибкого и мощного раз- книги посвящена практическому ис- n Количество страниц: 608
бора простых строк и сложно структу- пользованию выражений на различ- n ISBN: 978-5-93286-121-9
рированных данных. Это в свою оче- ных языках программирования: Perl, n Цена: ≈ 650 руб.
редь стало поводом к написанию книг Java, C# (.NET), PHP. Особое внима- Книга предоставлена интернет-магазином
по такому, казалось бы, скромному яв- ние уделено проблемам эффектив- Books.Ru.

Блоги и бизнес: путь к успеху


Дл Байрон и Стив Брубек
ное тому доказательство. Ее отличи- нципы, которыми стоит руководство-
тельная особенность – практическая ваться при открытии блога любой ком-
направленность. Авторы позициони- пании – конечно, если создаваемый
руют блог как важную часть современ- блог не просто является «данью мо-
ного бизнеса, способную заметно по- де», а призван стать полезным. Пос-
высить его эффективность. Такое по- ледняя глава книги знакомит читате-
зиционирование они пытаются оправ- лей с перспективами блогинга как яв-
дать с первых страниц, на которых при- ления – это такие развивающиеся се-
водят многочисленные примеры «ис- годня направления, как контент по тре-
торий успеха» и известных брендов, бованию и мультимедийный контент,
активно использующих блоги в сво- мобильный блогинг, микроформаты
ем бизнесе. Уже по одному этому по- (т.е. ориентированные на динамичес-
нятно, что книга скорее ориентирова- кий обмен данными вроде каталога то-
на на маркетологов, а не технических варов и прайс-листов) и мэшапы (объ-
специалистов и в дальнейшем эта те- единение данных с различных серви-
ория лишь подтверждается. Какую по- сов в единое целое).
Уже не первый год, как блоги стали лезную информацию все же можно по-
очень заметной и неотъемлемой час- черпнуть из книги? Авторы помогают
тью Всемирной паутины. Этот тренд ответить на популярные вопросы, воз- n
Издательство: «Символ-Плюс»
за короткое время успел породить це- никающие при создании блогов, вроде n
Год издания: 2008
лую субкультуру, представители ко- «Каким должен быть блог?», «Как пра- n
Количество страниц: 208
торой с энтузиазмом организовыва- вильно вести блог?», «Как привлечь n
ISBN: 978-5-93286-111-0
ют небольшие встречи, проводят кон- пользователей?», «Как следить за бло- n
Цена: ≈ 220 руб.
ференции и, конечно же, пишут книги. госферой и развивать блог?». В об- Книга предоставлена интернет-магазином
Рассматриваемое издание – прекрас- щем в первую очередь это все те при- Books.Ru.

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

JavaScript. Профессиональные
приемы программирования
Джон Рейсиг
ев благодаря тому, что она изначально держкой JavaScript». В ней раскрыва-
ориентирована на веб-разработчиков, ются темы модели DOM, событий, CSS,
которые уже компетентны в базовых HTML-форм, а в завершении приведе-
манипуляциях с JavaScript и настрое- ны примеры галерей изображений: как
ны развиваться дальше. Рассматри- готовых, так и своей. В последней час-
ваются важные характеристики язы- ти книги рассматриваются как основы
ка: ссылки, перегрузка функций, об- AJAX, так и конкретные применения:
ласть видимости переменных, замы- использование JSON, AJAX для бло-
кания, контекст, объекты. Затем автор гов, поиск с автодополнением. Также
знакомит с принципами создания мно- доступны примеры создания JavaScript-
гократно используемого кода за счет реализаций Wiki и блога с помощью
наследования прототипов, использо- AJAX. Завершают книгу три приложе-
вания библиотек Base и Prototype, соз- ния: справочники по DOM и по событи-
дания пакетов. Следующая глава – от- ям, краткая информация о браузерах
Книжек про JavaScript в последнее вре- ладка и тестирование кода с помощью (IE, Mozilla, Safari, Opera).
мя стало очень много, но редко попа- специализированных инструментов
дается что-то по-настоящему толко- (консоль ошибок в браузерах, Firebug, n
Издательство: «Питер»
вое: большинство из них ориентиро- Venkman, JS-библиотеки для тестиро- n
Год издания: 2008
вано на начинающих программистов, вания). Третья часть книги посвящена n
Количество страниц: 352
представленная информация лишь «ненавязчивому коду», под которым n
ISBN: 978-5-91180-904-1
в очередной раз повторяет уже напи- автор понимает «невмешательство ко- n
Цена: ≈ 367 руб.
санное в других изданиях. Эта книга да в работу браузера с отсутствующей К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м
выгодно отличается от своих собрать- или отключенной пользователем под- «Питер».

LINQ: язык интегрированных запросов


в C# 2008 для профессионалов
Джозеф Раттц-мл.
деленно напоминает SQL, встроенный полнительные возможности. В LINQ to
прямо в сам язык программирования DataSet – различные типы операций (об-
и предназначенный для работы с раз- щие, множеств, над полями). Часть кни-
личными типами данных. На этом ав- ги LINQ to SQL, посвященная примене-
тор не останавливается и показывает нию LINQ в связке с Microsoft SQL Server,
еще пару примеров, чтобы окончатель- является самой объемной. В ней вкрат-
но убедить читателя в полезности и мо- це освещаются инструменты SQLMetal
щи LINQ – и вот только тогда начинается и Object Relational Designer, рассматри-
введение. Книга является удачной сме- ваются операции для баз данных, сущ-
сью из учебного пособия и справочни- ностные классы, класс DataContext, кон-
ка, поданной в свободном стиле, скла- фликты параллельного доступа, допол-
дывающемся из пошаговых объяснений, нительные возможности SQL вроде
как и чего можно добиться. Рассмат- представлений и транзакций.
риваются 4 основные привязки LINQ:
Автор книги сразу, без какого-либо тра- к объектам, XML, DataSet и SQL. В LINQ n
Издательство: «Вильямс»
диционного «Введения», выдает пример to Objects рассматриваются отложенные n
Год издания: 2008
кода на C#, предлагая читателю само- и не отложенные операции. В LINQ to n
Количество страниц: 560
стоятельно почувствовать «смещение XML – создание, сохранение и загруз- n
ISBN: 978-5-8459-1427-9
парадигмы». Приведенный пример де- ка XML, работа с такими документами n
Цена: ≈ 900 руб.
монстрирует использование языка ин- и их атрибутами, аннотации и события, К н и г а п р е д о с т а в л е н а и з д ат е л ь с т в о м
тегрированных запросов в C#, который доступные операции, некоторые до- «Вильямс».
многим по праву изначально кажет-
ся «необычным». Более того, он опре- Обзор книжных новинок подготовил Дмитрий Шурупов

№11, ноябрь 2008 93


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

Редакционная подписка
для физических лиц
n Вы можете оформить подписку n Журнал высылается почтой заказ-
только на российский адрес. ной бандеролью только после пос-
n При заполнении квитанции обя‑ тупления денег на расчетный счет
зательно РАЗБОРЧИВО укажи‑ и копии заполненного и оплачен‑
те фамилию, имя, отчество пол‑ ного бланка, отправленной в ре‑
ностью, почтовый индекс и ад‑ дакцию по факсу: (495) 628‑82‑53
рес получателя (область, город, (доб. 120) или на электронный
улица, номер дома, номер квар‑ адрес: subscribe@samag.ru.
тиры), контактный телефон.

ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ

 

ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ ɏ
 

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

Подписные
индексы:
20780 *
+ диск с архивом
статей 2008 года

81655 **
без диска

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

88099 *
+ диск с архивом
статей 2008 года

87836
без диска
**

по каталогу агентства
«Пресса России»
*
Годовой
**
Полугодовой
***
Диск вкладывается
в февральский
номер журнала,
распространяется
только на территории
России

№11, ноябрь 2008 95


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

УЧРЕДИТЕЛИ
Частные лица

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

ИЗДАТЕЛЬ
ООО «С 13»
Отпечатано типографией
ООО «Периодика»
Тираж 17000 экз.

Журнал зарегистрирован в Министерстве РФ


по делам печати, телерадиовещания и средств
массовых коммуникаций (свидетельство ПИ
№ 77-12542 от 24 апреля 2002 г.).

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


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

96

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