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

№1-2(86-87) январь-февраль 2010 Системный администратор

№1-2(86-87) 2010

Управление Linux
Работа с HDD и файловыми системами с помощью LIRC
из консоли
SourceForge – кузница проектов
Репликация Active Directory с открытым кодом

DNSSEC-расширение к DNS
для повышения безопасности

Евгений Касперский:
«Наш бизнес – это пятый
элемент»

Виртуализация: да/нет?

Буревестники кремниевой революции


От редакции

УЧРЕДИТЕЛИ ИЗДАНИЯ
Частные лица
Хорошо, когда плохо
Генеральный директор

Г
Владимир Положевец
лобальный кризис, о котором продолжают спорить, завершил-
Главный редактор
Галина Положевец ся он или нет, принес и хорошие новости. Возможно, впервые
chief@samag.ru мировое бизнес-сообщество осознало, что без развития ин-
Технический директор формационных технологий уже не обойтись. Если хочешь побеждать
Владимир Лукин конкурентов.
Как говорит наш гость номера Евгений Касперский (не путайте
Главный редактор электронного с Крисом Касперским!) руководство компаний, от мала до велика,
приложения «Open Source» начинает понимать, что «сокращая бюджет на ИТ, они либо рушат
Дмитрий Шурупов бизнес, либо делают его неэффективным, либо раздувают общие
osa@samag.ru бюджеты». Значит, есть все основания утверждать, что 2010 год мо-
жет стать временем расцвета ИТ-отрасли. Особенно у нас, в России.
Дизайн-макет Дело в том, с 1 января 2010 года Федеральный за- за
Марина Рязанцева кон «О персональных данных» окончательно и бес- бес
Дмитрий Бессонов поворотно стал обязательным для всех организаций
и компаний, которые являются операторами персо-
персо
Иллюстрации нальных данных. А таких тысячи и тысячи в стра-
стра
Виктор Чумачев не. Легче перечислить исключения из закона,
чем назвать сегодня точную цифру тех, кто
Над номером работали: должен теперь подавать уве-
Алексей Барабанов
домление об обработке пер-
Александр Емельянов
сональных данных в уполно-
Валентин Синицын
моченный орган. Это означает,
Кирилл Сухов
что системный администратор
отныне нужен везде и всегда. Его по-
Реклама и PR-служба
Дарья Зуморина, reklama@samag.ru, зиции заметно укрепляются. Что не может не радовать.
Полина Гвоздь, pr@samag.ru, Кроме того, развитие технологий виртуализации, о которых мы
тел./факс: (495) 628-82-53 (доб.120) пишем в этом номере, тоже льет воду на мельницу ИТ. Кстати, тема
оказалась настолько интересна, обширна и обсуждаема сегодня
Распространение в ИТ-сообществе, что мы решили не ограничиваться короткой дис-
Светлана Зобова куссией в «Системном администраторе», а сделать специальный
(495) 628-82-53 (доб.120) выпуск журнала, посвященный проблемам применения технологий
виртуализации в нашей стране.
Адрес редакции Приглашаем всех желающих поучаствовать в спецвыпуске. Рас-
129626, г. Москва, проспект Мира, скажите, как в вашей компании относятся к виртуализации. Поде-
д. 102, корпус 1. литесь опытом внедрения разных технологий. Что получается – что
тел./факс: (495) 687-93-57 (внут. 357) нет? Как минимизировать издержки перехода? Что предлагают по-
Сайт журнала: www.samag.ru ставщики решений виртуализации? Какие ее направления наиболее
эффективны для российских компаний? Отдается ли предпочтение
Издатель зарубежным решениям или своим, отечественным, разработкам?
ООО «С 13» Специальный выпуск журнала выйдет в конце февраля.

Отпечатано в типографии
ООО «Периодика»
Галина Положевец,
Тираж 17000 экз. главный редактор
Тираж электронной версии 62000 экз.

Все права на материалы принадлежат


журналу «Системный администратор».
Перепечатка материалов и использование
их в любой форме, в том числе и в элект- Где купить «Системный администратор»:
ронных СМИ, запрещена. При использова- > г. Москва, выставочный компьютерный центр «Савеловский»;
нии материалов ссылка на журнал «Систем- > г. Москва, редакция журнала, проспект Мира, д. 102, корпус 1.
ный администратор» обязательна
Подробную информацию о подписке смотрите на стр. 112.

системный администратор январь-февраль 2010 1


В номере

20

14

100

86

05 Информбюро ных проектов. Рисовать ромбики да квадратики Миграция ролей AD, DNS и DHCP с ОС Windows
может любой, но компьютеры пока не понимают Server 2003 занимает мало времени. Попробуйте.
Острый угол таких абстракций. Напишем программу, как это Никита Панов
принято.
06 Технология MEDV. Виртуализа- Алексей Барабанов 44 WDS поможет. Установка
ция в Windows 7. Виртуализация помогает операционных систем. Часть 2.
избавиться от многих проблем с совместимостью. 20 Взгляд на ext4. Не новое, При развертывании операционных систем может
Рассмотрим решения, имеющиеся в WIndows 7. но хорошо доработанное старое. возникнуть необходимость в дополнительных
Андрей Бирюков Ext4 подходит для самых разнообразных рабочих настройках. Рассмотрим, какие средства пред-
нагрузок и способна полностью заменить ext3 лагает WDS.
09 Что лучше: использовать в качестве «файловой системы Linux». Андрей Бирюков
виртуализацию или купить несколь- Андрей Пешеходов
ко серверов? На вопрос «СА» отвечают 48 Проект одного человека. Цен-
ИТ-специалисты. 27 Bugtraq трализованное управление при по-
мощи Cfengine. Трудно управлять большим
10 Один сервер – много задач. Гость номера количеством систем без средств автоматизации.
Оптимальные решения для вирту- Этот проект облегчит задачу и позволит централи-
альных машин. Способны ли технологии 28 Евгений Касперский: «Наш биз- зовано устанавливать параметры.
виртуализации помочь компаниям в достижении нес – это пятый элемент». На вопросы Сергей Яремчук
их бизнес-целей, или это просто модная тема, читателей «Системного администратора» отвеча-
не выходящая за рамки теоретических обсуж- ет генеральный директор компании «Лаборатория 54 Разговор на «ты». Репликация
дений? Касперского» Евгений Касперский. Active Directory. Одна из главных рекоменда-
Александр Светлаков Галина Положевец ций Microsoft касательно ADDS – необходимость
развертывания в производственной среде не ме-
12 Суперкомпьютер без недо- Администрирование нее двух контроллеров домена. Однако их может
статков. Охлаждаем, оптимизируем, быть гораздо больше.
экономим. Традиционная инфраструктурная 34 Что «под капотом»? Работа Илья Рудь
инженерная среда слабо приспособлена для раз- с HDD и файловыми системами Константин Леонтьев
мещения блейд-серверов. Что делать? из консоли. Можно использовать ПО с гра-
Михаил Балкаров фическим интерфейсом, а можно решать задачи 60 ClearOS 5.1: открыт и... ?
более оптимизированно – из командной строки, Что принесло это коммерческому
Кафедра всегда зная, что происходит «под капотом». продукту. Популярный серверный дистрибу-
Игорь Штомпель тив снимает все ограничения некоммерческой
14 Кодирование. Введение в сис- версии. Выиграют ли от нововведения его
темное программирование. Часть 3. 41 Миграция без проблем. пользователи?
Кодирование – это момент истины всех программ- Еще раз о Windows Server 2008 R2. Валентин Синицын

2 январь-февраль 2010 системный администратор


В номере

62 АТС Samsung OfficeServ? При информатизации предприятий обеспече- 92 Bugtraq


Теперь работаем с Installation Tool. ние защиты информационных систем выходит
Единственная в своем роде программа для уп- на первое место. Причины объективны. Веб
равления офисными АТС Samsung – Samsung Валерий Ледовской
OfficeServ Manager больше не разрабатывается. 94 Google Web Toolkit – современ-
Ей на замену пришла Installation Tool. Программирование ное средство создания Rich Internet
Рашид Ачилов Application. Любое интернет-приложение
80 SourceForge. Кузница проектов эпохи WEB2 – это прежде всего «богатый»
68 Ряд волшебных изменений. с открытым кодом. Популярный хостинг и функциональный пользовательский интерфейс,
Что нового появилось в проекте для программного обеспечения с открытым выполненный с использованием технологии Ajax,
Wine? Проект Wine быстро развивается. исходным кодом SourceForge имеет большие а следовательно, JavaScript.
Обрастает все большей функциональностью, возможности для разработки, поддержки и рас- Кирилл Сухов
за которой достаточно сложно уследить. Попро- пространения открытых программ.
буем разобраться, какие изменения претерпел он Семен Есилевский Dolce Vita
в 2009 году.
Игорь Штомпель 86 Расширяем возможности. 100 Три в одном. Управление
PowerShell: другие языки програм- Linux с помощью LIRC. Если хотите
Безопасность мирования. PowerShell – язык командной использовать ваш ПК в качестве медиацентра,
строки, разработанный для определённого круга смотреть фильмы и слушать музыку, не вставая
72 Спасительный протокол. задач. Расширить его можно за счет интегрирова- с дивана, вам нужен LIRC!
DNSSEC-расширение к DNS для по- ния программного кода из VBScript или VB.NET. Олег Воронин
вышения безопасности. Практически Иван Коробко
25 лет DNS-запросы не считались безопасными, Ретроспектива
но после внедрения DNSSEC на корневых серве- 90 Мышеловка для админа. Осто-
рах эта проблема будет решена. рожно: сыр прилагается. Три кита, на ко- 107 История транзисторов. Бу-
Сергей Яремчук торых основано ПО для удаленного управления ревестники кремниевой революции.
компьютерами, безопасность, скорость и удобство Нелепая ошибка привела к открытию, которое
78 Dr.Web ES в полевых условиях. использования. принесло его авторам Нобелевскую премию.
Как защитить бизнес от вирусов? Евгений Лисовский Владимир Гаков

системный администратор январь-февраль 2010 3


Приз! Приз! Приз!
Журнал «Системный Администратор» рад объявить на-
ших новых победителей второго этапа розыгрыша «Ад-
минский приз». От всей души поздравляем!

Счастливыми обладателями наград стали:

Харыбин Евгений Владимирович – выиграл приз


«Интернет-шлюз» от компании Ideco.
Соловьёв Андрей Игорьевич – получает сертификат
на обучение в «Академии Корпоративных Систем».
Мирзагалимов Марат Галимзянович – выиграл приз
«Пакет программного обеспечения» от компании Allsoft.
Дрогаль Сергей Викторович – выиграл приз
«Виртуальный выделенный сервер».
Захваткин Александр Владимирович – выиграл приз
«Виртуальный выделенный сервер».
Крайнов Андрей Евгеньевич – выиграл приз
«Виртуальный выделенный сервер».
Соловьёв Константин Валентинович – выиграл приз
«Виртуальный выделенный сервер».
Бочков Илья Владимирович – выиграл приз
«Почтовый сервер на 50 пользователей».
Информбюро

Майкл Видениус пытается убедить обще- Визитка


ственность в том, что в результате по-
глощения Sun корпорация Oracle может ДМИТРИЙ ШУРУПОВ,
навредить развитию MySQL ведущий рубрики

VMware покупает Zimbra у Yahoo! Foundation была основана американским предпринимате-


Компания VMware, известная своими реше- лем Мэттом Малленвегом (Matt Mullenweg), который явля-
ниями в области виртуализации, объявила ется разработчиком первой версии WordPress. Заявляется,
о достижении договоренности с интернет- что цель новой некоммерческой структуры – продолжение
гигантом Yahoo! по поглощению поставщика миссии, возложенной на сам движок WordPress: демокра-
Open Source-решений для совместной работы Zimbra. тизация публикации программного обеспечения в виде
Zimbra была независимой компанией до сентября Open Source-продуктов. WordPress Foundation станет ответ-
2007 года, когда стало известно о том, что ее поглощает ственной за защиту таких торговых знаков, как WordPress
Yahoo! за 350 миллионов долларов США. Тогда сообща- и WordCamp, а также будет обучать работе с WordPress
лось, что решения Zimbra помогут Yahoo! расширить воз- и другим связанным с этим движком открытым ПО.
можности одной из ее ключевых услуг – электронной почты Официальный анонс публичного запуска WordPress
(Yahoo! Mail). Foundation появился 22 января на сайте организации
Теперь Yahoo! договорилась с VMware о продаже Zimbra wordpressfoundation.org. Уже на следующий день было объ-
последней. Сделка будет завершена в первом квартале это- явлено о том, что организаторы WordCamp NYC, мероприя-
го года, а ее финансовые подробности пока не разглаша- тия для разработчиков и сообщества WordPress, которое
ются. В VMware намерены с приобретением Zimbra и всех прошло в ноябре 2009 года в Нью-Йорке, сделали первое
ее наработок расширить список своих решений, предлагая пожертвование для WordPress Foundation, оно превысило
программное обеспечение для совместной работы в качест- 28 тысяч долларов США. EOF
ве готовых виртуализированных продуктов.
VMware планирует осуществлять поддержку существую- Еврокомиссия одобрила поглощение Sun
щих продуктов и Open Source-инициатив Zimbra, а одновре- корпорацией Oracle
менно с этим заниматься оптимизацией решений для облач- Несмотря на различные инициативы Майкла
ной инфраструктуры на базе vSphere. EOF Видениуса (Michael «Monty» Widenius), авто-
ра СУБД MySQL, который пытался убедить
Тед Тсо поможет Google с переходом Европейскую комиссию в сомнительных перспективах сдел-
на ext4 ки между Oracle и Sun, Совет ЕС одобрил поглощение Sun
Теодор Тсо (Theodore «Ted» Ts'o), который Microsystems корпорацией Oracle.
был техническим директором организации Безусловное одобрение сделки между Oracle и Sun было
Linux Foundation чуть больше года, перешел принято Еврокомиссией 21 января. Несмотря на это решение
в компанию Google для внедрения файловой системы ext4 и предшествовавшее ему одобрение сделки в США, поглоще-
в ИТ-инфраструктуру интернет-гиганта. ние Sun корпорацией Oracle формально еще под вопросом,
Тсо хорошо известен в Linux-сообществе как один поскольку дожидается одобрения в других странах: России
из ключевых авторов файловых систем ext3 и ext4. В сере- и Китае. Тем не менее ни у кого в ИТ-индустрии уже не возни-
дине января стало известно о том, что в Google завершили кает вопросов насчет того, что поглощение произойдет.
тестирование нескольких файловых систем (JFS, XFS, ext4) Майкл Видениус выступал с обращением не только
для того, чтобы перевести на одну из них свою существую- ко всему мировому сообществу, но и конкретно к жителям
щую Linux-инфраструктуру (на базе ext2). Результаты тести- России и Китая. Автор MySQL активно пытается убедить об-
рования оставили Google выбор между ext4 и XFS, но клю- щественность в том, что в результате поглощения Sun (а зна-
чевым аргументом в пользу ext4 стала простота перехода чит, и приобретения прав на MySQL) корпорация Oracle, рас-
на эту файловую систему с используемой до сих пор ext2. полагающая своими интересами на мировом рынке СУБД,
Теперь именно Теодор Тсо поможет Google с переходом может навредить дальнейшему развитию популярнейшей
на современную файловую систему ext4. Кто станет новым системы управления базами данных с открытым кодом.
техническим директором Linux Foundation, пока не сообща- В рамках инициативы Save MySQL from Oracle уже со-
ется: на сайте организации по-прежнему указан Тсо, хотя брано более 35 тысяч подписей на онлайн-петицию со
Джим Землин (Jim Zemlin), исполнительный директор неком- всего мира, из которых около 5800 приходится на Китай
мерческой организации LF, уже официально подтвердил и почти 1500 – на Россию. Впрочем, даже в Open Source-
переход Тсо в Google. EOF сообществе многие скептически относятся к предупрежде-
ниям Видениуса, считая, что СУБД MySQL будет развивать-
У WordPress появилась некоммерческая ся вне зависимости от результатов сделки между Oracle
организация и Sun, поскольку сообщество сможет поддерживать кодо-
У популярного Open Source-движка для соз- вую базу продукта благодаря распространяющимся на нее
дания блогов и сайтов, WordPress, появилась Open Source-лицензиям. Кроме того, представители Oracle
некоммерческая организация – WordPress уже неоднократно заявляли, что «хоронить» MySQL совсем
Foundation. Благотворительная организация WordPress не входит в их интересы. EOF

системный администратор январь-февраль 2010 5


Острый угол

Визитка

АНДРЕЙ БИРЮКОВ, специалист по информационной безопасности. Работает


в крупном системном интеграторе. Занимается внедрением решений
по защите корпоративных ресурсов

Технология MEDV
Виртуализация в Windows 7
Виртуализация помогает избавиться от многих
проблем с совместимостью. Рассмотрим решения,
имеющиеся в WIndows 7

Проблемы совместимости или Windows Vista) в специально раз- достаточно большое количество машин
Во многих организациях используют- рабатываемой редакции Virtual PC. При требует совместимости с Windows XP,
ся приложения, совместимые только этом у пользователя будет отображать- тогда необходим сервер управления
с Windows XP. Но при этом существует ся не рабочий стол виртуальной маши- под Windows 2008. Для развертывания
парк машин, работающих под Windows ны, а только окно приложения, которое сервера управления нам нужно пред-
Vista или Windows 7. Сейчас в основ- установлено в виртуальной ОС, но опу- варительно установить на нем роль IIS,
ном это ноутбуки и брендовые рабочие бликовано в виде «обычного» линка а также Microsoft SQL Server 2008. Дан-
станции с установленной по OEM опе- в меню «Пуск» родительской системы. ные компоненты предназначены для уп-
рационной системой. Конечно, возмож- Таким образом, для пользователя рабо- равления виртуальной средой, развер-
ным решением данной проблемы может та с приложениями, как установленными нутой на рабочих станциях.
стать даунгрейд операционной сис- в родной Windows 7, так и в виртуальной Если у вас небольшая сеть, мень-
темы и установка Windows XP. Но мо- Windows XP, абсолютно прозрачна – он ше пяти машин, то, возможно, сервер
гут возникнуть трудности, к примеру сможет их отличать только по оформ- управления MED-V, об установке ко-
с поиском драйверов под Windows XP лению окон. И никакой путаницы с дес- торого пойдет речь далее, не понадо-
для новых моделей ноутбуков. Стоит ли ктопами, переключениями и подобными бится. Вам достаточно просто вручную
отказываться от новых возможностей, проблемами. Для администраторов – развернуть из Desktop Optimization
имеющихся в Windows 7? Может, лучше никакой мороки с совместимостью при- Pack виртуальную машину с образом
поискать другое решение для пробле- ложений, написанных для Windows XP Windows XP на каждой из клиентских
мы совместимости с Windows XP? при их запуске в Windows 7, поскольку машин и настроить на них публикацию
Еще один вариант – использование они запускаются в родной, пусть и вир- требуемых приложений.
виртуальных машин. Существует мно- туальной, среде XP. При этом в вирту-
жество решений по виртуализации, альной Windows XP поддерживаются Установка и настройка
большинство из них коммерческие USB-устройства, так что вы сможете Теперь поговорим об этой технологии
и требуют дополнительных финансо- работать напрямую с флеш-картами более подробно. Какие именно редак-
вых затрат для внедрения. Можно раз- и другими USB-устройствами. ции Windows 7 поддерживают ее?
вернуть виртуальные машины, на кото- Что касается лицензий, то вам Технология виртуализации не под-
рых будет работать наша операционная не придется доплачивать за использо- держивается редакциями Home/Starter,
система Windows XP, на основе средств, вание дополнительной на Windows XP. но другие редакции ее поддерживают.
используемых в Windows 7. Windows 7 позволяет использовать Однако сейчас технология виртуа-
Windows XP Mode в Windows 7 пред- Windows XP Mode (предоставляемый лизации MEDV не входит в базовый
ставлен технологией, которая носит в виде отдельно скачиваемой утилиты, функционал операционной системы,
название Microsoft Enterprise Desktop подробнее мы рассмотрим ее чуть поз- для установки данный дистрибутив
Virtualization, MEDV. На самом деле же), который создает виртуальную ма- нужно скачивать отдельно. Скачать
Windows XP Mode – это лишь ма- шину с XP под управлением Virtual PC, дистрибутив можно по адресу [1].
лая часть технологии виртуализации клиентской технологии виртуализации Перейдем к рассмотрению прак-
MEDV. Небольшая, но главная часть – в Windows 7. тической части, то есть развертыва-
Windows XP Mode – позволяет запустить Однако некоторые расходы на лицен- нию средств виртуализации Microsoft
процесс виртуальной ОС (Windows XP зии все-таки потребуются. Если у вас Enterprise Desktop Virtualization.

6 январь-февраль 2010 системный администратор


Острый угол

Нам необходимо запустить дис- дан, необходимо открыть его свойства машиной. В общем случае это может
трибутив Desktop Optimization Pack, и выбрать пункт Thumbprint (см. рис. 2). быть группа Everyone.
который, как уже упоминалось ранее, В этом пункте находится искомый Далее нам необходимо выполнить
можно скачать по адресу [1]. В от- хеш сертификата. Скопируем эту стро- еще одно небольшое действие для
крывшемся окне выбираем Microsoft ку в текстовый редактор и удалим про- настройки MED-V. Нужно вернуться
Enterprise Desktop Virtualization 1.0. белы между байтами, чтобы строка в настройки IIS, в свойствах Default
В открывшемся списке необходимо была непрерывной. Вернемся к MED-V Web Site выбрать раздел BITS uploads.
выбрать установку Install the server Server Configuration Manager. Как видно В нем необходимо выбрать опцию
component of Microsoft Enterprise в окне (см. рис. 1) приведен пример ко- Allow clients to upload files. Технология
Desktop Virtualization 1.0. В зависимости манды, которую нужно выполнить для BITS (Background Intelligent Translation
от используемой архитектуры процес- настройки соединения по https. В ко- Service) предназначена для передачи
сора можно выбрать 32- или 64-битную мандной строке введем ее, указав хеш, больших объемов данных без падения
системы. Затем производим стандарт- который мы получили ранее. Например: производительности сети. Она пере-
ную установку сервера (см. рис. 1). netsh http add sslcert ipport= ↵
дает данные маленькими частями, ис-
В меню Start у нас присутствует раз- 0.0.0.0:8443 certhash-07665a5db ↵ пользуя свободные ресурсы, когда они
дел MED-V. Запустим MED-V Server abb6effbed332f0af6db1a8c8a3096c ↵ становятся доступны, и пересобирая
appid-{00000000-0000-0000-0000- ↵
Configuration Manager и произведем 000000000000}
данные в месте назначения. В частнос-
необходимые настройки сервера уп- ти, с помощью этой службы осущест-
равления. В открывшемся окне начнем В случае удачного выполнения дан- вляется передача файла образа вир-
с раздела Connections. Здесь нам пред- ной команды появиться надпись: туальной машины. Теперь наш сервер
лагается выбрать способ соединения SSL certificate successfully added управления MED-V готов к работе.
и указать используемые порты. По умол- Следующим шагом будет установ-
чанию можно использовать нешифро- Затем в окне MED-V Server ка клиента для сервера управления
ванное соединение по протоколу http. Configuration Manager выбираем раз- MED-V. Установку клиента можно про-
Для большей безопасности лучше дел Images, в котором необходимо ука- извести также из Desktop Optimization
воспользоваться шифрованным соеди- зать путь к файлу образа операцион- Pack. Она тривиальна и не требует
нением по https. Обратите внимание, ной системы и соответствующий URL. подробного описания. В процессе ра-
что при использовании https необхо- Наконец последний раздел – боты вам необходимо указать учетные
димо вручную прописать хеш серти- это Reports. Вот здесь нам и потребует- данные сервера MED-V для установки
фиката с помощью командной стро- ся установленный ранее Microsoft SQL соединения с сервером.
ки. Выполним необходимые для этого Server 2008. Выберем Enable Reports При первом запуске клиента будет
действия. Прежде всего откроем кон- и в строке соединения Connection произведена индексация локального
соль управления Administrative Tools → String внесем необходимые изменения. жесткого диска. После загрузки кли-
Internet Information Services. В открыв- В частности, укажем правильный путь ента нам доступны разделы Policy,
шемся окне выберем Server Certificates. к базе данных. По окончании нажмем Images, Reports (см. рис. 3).
Затем Create Domain Certificate. Create Database. Итак, мы разобрались со средст-
Укажем необходимые учетные дан- Затем перейдем к разделу вами управления Microsoft Enterprise
ные для создания сертификата и сер- Permissions. В нем выберем Add и до- Desktop Virtualization. Теперь необхо-
вер центра сертификации Certification бавим группу пользователей, которые димо установить на рабочих станци-
Authority. Когда сертификат будет соз- могут работать с данной виртуальной ях виртуальные машины, развернуть

Рисунок 1. Настройка сервера управления MEDV Рисунок 2. Свойства созданного сертификата

системный администратор январь-февраль 2010 7


Острый угол

на них образы операционных систем, ярлыков на рабочем столе пользовате- особые настройки для сетевого интер-
подключить виртуальные машины ля и соответствующую путаницу. фейса виртуальной машины, если это
к серверу управления и создать по- Теперь настроим политику для пу- необходимо. В разделе Performance
литику, которая будет публиковать не- бликации приложения. Для этого необ- можно выделить оперативную память
обходимые приложения на рабочем ходимо сначала открыть раздел Images под нужды виртуальной машины.
столе основной машины пользователя. в клиенте MED-V Management. Далее По окончании настройки применим
в Local Test Images нужно нажать кноп- созданную политику. Если в политике
Виртуальная среда ку New… Будет добавлен образ вирту- некорректно указан путь к публикуемо-
Начнем с установки виртуальных ма- альной машины (см. рис. 4). му приложению, будет выведено соот-
шин. Как нетрудно догадаться, в качест- Процесс упаковки файла образа ветствующее сообщение об ошибке.
ве средства виртуализации в продуктах займет некоторое время. По оконча- Устанавливаем, что нам требуется,
Microsoft используется виртуальная ма- нии упаковки образ появится в разде- в стартовом меню, в том же разделе
шина Pocket PC. Установить ее можно ле Local Packed Images. Windows Virtual PC появляется раздел
также из Desktop Optimization Pack. Теперь перейдем к непосредствен- Virtual Windows XP Application со ссыл-
Вместе с установкой виртуальной ма- ному созданию политики. Для этого ками на эти виртуальные приложения.
шины вы устанавливаете и образ вир- откроем раздел Policy. Нажмем кнопку
туальной машины WIndows XP. Add… В закладке General необходи- ***
После установки в меню «Старт» мо указать имя политики, а также вы- Итак, мы развернули виртуальную сре-
клиентской машины в «Программах» брать Seamless Integration (публикуе- ду, в которой приложения, работающие
появляется раздел Windows Virtual PC, мое приложение будет отображаться только под Windows XP, запускаются
а в нем – собственно пункт Virtual на рабочем столе клиентской машины и под Windows 7, причем совершенно
Windows XP. При первом старте образ пользователя). При этом можно вы- прозрачно для пользователя. Какие
конфигурируется весьма тривиаль- брать цвет, которым будет окрашено ограничения накладывает Windows XP
ным образом – запрашивается толь- каждое из публикуемых окон. Затем Mode? Это требование аппаратной
ко пароль будущего пользователя. перейдем во вкладку Virtual Machine поддержки виртуализации в процессо-
Все настройки этой виртуальной ОС и из списка Assigned Image выберем рах. Инструкция по конфигурированию
соответствуют типичным настройкам нужный образ. После этого во вкладке аппаратной виртуализации находит-
виртуальных машин Virtual PC, кроме Deployment необходимо указать группу ся на той же странице, что и загрузка
появившегося пункта Auto Publish. Он пользователей, которым будет доступ- самих средств виртуализации. Часто
отвечает за то, как будут публиковаться но данное приложение. Лучше заранее для включения аппаратной виртуали-
приложения из виртуальной Windows XP создать в AD группу и занести в нее зации после установок параметров
в стартовом меню Windows 7. По умол- всех пользователей, которым необхо- BIOS требуется еще физическое вы-
чанию стоит режим автоматической димо публикуемое приложение. В этой ключение питания компьютера. EOF
публикации, а это значит, что все вновь же вкладке нужно разрешить исполь-
установленные приложения в вирту- зовать буфер обмена при работе с пу- 1. Описание Desktop Optimization Pack –
альной машине будут автоматически бликуемым приложением. http://www.microsoft.com/windows/
«всплывать» в меню родительской После этого во вкладке Applications enterprise/products/mdop/default.aspx.
Windows 7. Этому моменту следует уде- необходимо нажать кнопку Add и ука- 2. Видеоматериалы по развертыванию
лить особое внимание, иначе вы ри- зать путь к публикуемому приложению. MEDV – http://technet.microsoft.com/en-
скуете получить несколько одинаковых Во вкладке Network вы можете указать us/virtualization/dd981013.aspx.

Рисунок 3. Клиент MED-V Рисунок 4. Добавление образа виртуальной машины

8 январь-февраль 2010 системный администратор


Острый угол: опрос

Что лучше: использовать виртуализацию


или купить несколько серверов?
На вопрос «СА» отвечают ИТ-специалисты

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

системный администратор январь-февраль 2010 9


Острый угол

Визитка

АЛЕКСАНДР СВЕТЛАКОВ, специалист по продажам программных решений,


отдел серверов стандартной архитектуры компании Хьюлетт-Паккард
в России, сертифицированный инструктор HP и Microsoft

Один сервер – много задач


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

Первым примером использования тех- дач. Центр обработки данных, постро- а резкое снижение стоимости серве-
нологий виртуализации можно считать енный на таких технологиях, получится ров стандартной архитектуры еще бо-
внедрение систем хранения данных действительно динамическим, способ- лее упростило этот процесс. В резуль-
(СХД). До появления таких систем ным гибко подстраиваться под измене- тате большинство серверов работают
в корпоративном пользовании приме- ние требований или характера задач. с загрузкой в 10-15% от располагае-
нялись серверы, которые совмещали Инфраструктура, состоящая из ре- мой мощности.
в себе все функции – хранение, об- сурсов по хранению данных, вычис- Технологии виртуализации эффек-
работку данных, запуск и поддержку лительных ресурсов, оперативной па- тивно решают проблему неполной
приложений. Их обслуживание про- мяти, позволяет запускать различные загрузки серверов и еще много дру-
изводилось большим количеством приложения, обеспечивая при этом гих задач. С аппаратной точки зрения
специалистов, а изменение набора гибкое управление, более дешевое наиболее оптимальным решением для
функций представляло собой крайне обслуживание и сопровождение с при- размещения виртуальных машин пред-
сложную задачу. менением стандартных технологий. ставляются блейд-серверы. Тому есть
Вынесение функции хранения дан- Снижаются требования к обслуживаю- ряд причин.
ных в отдельную СХД стало первым щему персоналу. Во-первых, для виртуализации явля-
шагом на пути виртуализации. Со вре- С другой стороны, за последние ется оптимальной горизонтально мас-
менем большинство корпоративных годы значительно выросла мощность штабируемая платформа, в которую
пользователей вычислительных сис- серверов. Однако разработчики при- по мере роста нагрузки добавляются
тем осознали, что данные – это их ложений не успевают за разработ- физические серверы.
наиболее ценный ресурс. Хранение чиками серверов. Мы предлагаем Во-вторых, для обеспечения отка-
и обработка их на разрозненных многопроцессорные технологии, боль- зоустойчивости и «живого» переме-
и не связанных друг с другом серве- шое количество оперативной памяти, щения виртуальных машин крайне же-
рах – ненадежно и неудобно. Начался а программное обеспечение не раз- лательно, чтобы серверы, на которых
массовый переход на дисковые мас- вивается такими быстрыми темпами. выполняется среда виртуализации,
сивы хранения. Данные «отобрали» Значительная часть существующих были однотипными.
у серверов, поместили на дисковые сегодня приложений требует намного В-третьих, полноценное решение по
массивы, ввели новые технологии их меньше ресурсов, чем предоставляют виртуализации невозможно без внеш-
архивирования, репликации и защиты современные серверы стандартной ней системы хранения данных (СХД),
на качественно ином уровне. архитектуры. а блейд-серверы оптимизированы для
Следующим этапом абстрагирова- Между тем, по соображениям безо- подключения к СХД, как по удобству,
ния функций от непосредственной ап- пасности или важности приложений, так и по затратам. Главный же аргумент
паратной составляющей должно стать различные подразделения компании в пользу блейд-серверов – широкое их
«отделение» от серверов исполняемых стараются под каждый тип нагруз- применение в решениях виртуализации
на них приложений. В такой логике ки выделить «собственный» сервер. у наших заказчиков – Альфа-Банка, На-
развития систем серверы представля- Стандартная практика «один сервер – ционального Банка «ТРАСТ», «БТА Бан-
ют собой просто вычислительные мощ- одна задача» активно применяется ка», МГИМО и многих других.
ности, которые легко можно заменить до сих пор. Для выполнения новой за- Отдельно хочется упомянуть
или добавить для решения разных за- дачи приобретается еще один сервер, Страховой Дом «ВСК», в котором

10 январь-февраль 2010 системный администратор


Острый угол

более 600 виртуальных систем, об- при необходимости сервер может быть оказаться простота их создания. Раз-
служивающих все филиалы компа- «материализован» по шаблону в тече- вертывание виртуальных серверов
нии, выполняются на пяти полках ние считанных минут. занимает считанные минуты. Но вир-
HP BladeSystem c7000 с четырехпро- Системные администраторы мани- туализация, оставленная без надле-
цессорными серверами BL680c, под- пулируют рабочими нагрузками и те- жащего управления, ведет к хаосу.
ключенными к дисковым массивам кущими настройками на логическом Количество виртуальных серверов
HP StorageWorks EVA. уровне посредством программного растет с гораздо большей скоростью,
В 2008 году компания HP представи- инструмента управления с графиче- чем число физических, и через неко-
ла рынку комплексное решение для уп- ским интерфейсом. В комплекс HP торое время ИТ-подразделение может
равления серверной инфраструктурой Insight Dynamics – VSE входит инстру- обнаружить, что ему приходится обслу-
Insight Dynamics – VSE. Решение бази- мент планирования ресурсов в режи- живать десятки и сотни серверов
руется на функциональных возможно- ме реального времени. Основная ре- Виртуализация помогает решить
стях компонентов управления инфра- шаемая при этом задача – устранение множество проблем: уменьшить ко-
структурой HP Systems Insight Manager, «фрагментации» загрузки и снижение личество площадей в ЦОДе, снизить
HP Insight Control, HP Virtual Server энергопотребления серверов за счет количество сетевых устройств, по-
Environment и позволяет проводить мо- выявления и перемещения множества требление электроэнергии, – но она
ниторинг физических и виртуальных мелких, разбросанных задач на более не облегчает управление.
ресурсов. Этот инструмент дает воз- мощное оборудование с отключением Компания HP поставляет аппарат-
можность заказчикам сформировать высвободившихся ресурсов. ные решения на основе блейд-систем.
всегда готовую к изменениям техно- С этой целью осуществляется не- В качестве OEM-партнера основных
логическую среду, которая обладает прерывный мониторинг, сбор и ана- поставщиков VMware, Microsoft и Citrix
гибкостью, необходимой для сквозной литическая обработка тысяч показа- устанавливает средства виртуализа-
виртуализации. телей и технологических параметров. ции от этих компаний на свое обору-
Продукт Insight Dynamics позволил При помощи данного инструмента дование и, кроме того, предоставляет
реализовать в условиях ИТ-инфра- системные администраторы получают мощные собственные средства кон-
структуры предприятия технологию так возможность оперативно и точно рас- солидированного управления вирту-
называемых логических серверов. Бла- пределять вычислительные ресурсы, альной средой. В состав ПО HP Insight
годаря этой технологии физические прогнозировать потребности сервер- Control входит модуль по управле-
платформы HP получают все преиму- ной инфраструктуры и оптимально нию виртуальными машинами Virtual
щества быстрого развертывания и пе- планировать ее развитие. Machine Management, с помощью ко-
ремещения, которые ранее были при- Средства HP Insight Dynamics – VSE торого можно производить основные
сущи только виртуальным системам. также позволяют просчитывать объем действия с виртуальными машинами
Логический сервер – это высоко- потребляемого электричества и могут (старт, стоп, пауза, копирование и пе-
уровневая модель сервера, которая предоставить информацию о том, как ремещение), контролировать разме-
в любой момент может быть активиро- можно те же задачи выполнять с мень- щение виртуальных машин на физи-
вана на виртуальной или физической шим энергопотреблением. ческих серверах (хостах) и проактивно
машине. Абстракция на уровне логи- Существенной «проблемой» вне- реагировать на аппаратные сбои, по-
ческого сервера позволяет отвлечься дрения виртуальных серверов может вышая «живучесть» систем. EOF
от конкретного ресурса и наделить фи-
зический сервер такими свойствами,
HP Insight Dynamics – планирование ресурсов в режиме реального времени
как гибкость, простота развертывания
и перевода в неактивное состояние.
Логическая конфигурация (про-
филь) сервера описывает абстракт-
ный системный образ, включающий
все необходимые службы и ресурсы:
виртуальные, физические, разделяе-
мые или выделенные. Профиль серве-
ра содержит определения ресурсов,
необходимых для работы ОС и при-
ложений (процессоры, оперативная
и дисковая память, потребляемая мощ-
ность, сетевые подключения).
Логический сервер может быть как
физической, так и виртуальной маши-
ной. Мало того, имеется возможность
сохранить в виде шаблона описание
сервера, конфигурация которого наи-
лучшим образом подходит для часто
используемых приложений, причем

системный администратор январь-февраль 2010 11


Острый угол

Визитка

МИХАИЛ БАЛКАРОВ, системный инженер компании APC by Schneider


Electriс

Суперкомпьютер без недостатков


Охлаждаем, оптимизируем, экономим
Традиционная инфраструктурная инженерная среда
слабо приспособлена для размещения блейд-сер-
веров. Что делать?

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

APC Symmetra PX 150kW APC Symmetra PX 160kW

12 январь-февраль 2010 системный администратор


Острый угол

киловатт. Заметим, что для классиче- для этого. Среди них – системы внутри- ответственно, могут менять обороты
ских систем кондиционирования по- рядного охлаждение InRow – размеще- вентиляторов, и, таким образом, опе-
добное поведение нагрузки станет, ние кондиционеров непосредственно ративно подстраиваться под нужды
мягко говоря, «неудобным», и в слу- в рядах стоек. Этот простой, на первый охлаждаемых стоек.
чае применения классических систем взгляд, подход позволяет решить не- Помимо внутрирядного охлаждения
охлаждения мы будем вынуждены зна- сколько проблем. Например, обеспе- наша компания предлагает системы
чительно завысить воздушный поток, чить минимальный путь воздуха, что контейнеризации «горячего» коридора
что вызовет шум и приведет к большо- приведет к уменьшению требуемой и систему контейнеризации на уров-
му расходу электроэнергии на работу мощности вентиляторов и падению не стоек (HACS, Hot Aisle Containment
вентиляторов. расходов электроэнергии на работу System и RACS, Rack Air Containment
Конечно, нельзя сказать, что блейд- вентиляторов, а также повышению эф- System соответственно). Это достаточ-
серверы невозможно внедрить в си- фективности охлаждения посредством но простое решение. К стандартным
стемах, ориентированных на отно- уменьшения перемешивания холодно- стойкам с внутрирядными кондицио-
сительно небольшое и стабильное го и горячего потоков воздуха. Воздух, нерами устанавливаются дополнитель-
тепловыделение на стойку, зато можно выбрасываемый серверами, сразу же ные механические элементы, панели
смело утверждать, что в случае вне- попадает в кондиционер, а затем, уже и двери, позволяющие контейниризи-
дрения блейд-серверов подобные сис- охлажденный, выбрасывается напря- ровать (изолировать) поток горячего
темы получаются крайне неэкономич- мую перед стойками. воздуха, а в случае применения систем
ными. Решение проблемы заключается Кроме того, оборудование ком- контейнеризации на уровне стоек еще
в том, чтобы применить такую инже- пании APC by Schneider Electriс из- и поток холодного воздуха.
нерную инфраструктуру, которая из- начально ориентировано на работу При применении этих систем эффек-
начально ориентирована на высокую с высокой температурой горячего воз- тивность охлаждения кондиционеров
плотность нагрузки в стойках и, соот- духа на входе, поэтому кондиционеры еще более возрастает, так, в случае
ветственно, позволяет адаптировать не боятся подачи воздуха напрямую контейнеризации «горячего» коридора
охлаждение под нужды оборудования, с блейд-серверов. Также в результа- можно «снимать» со стойки до 60 кило-
что, в свою очередь, приведет к эконо- те размещения кондиционеров рядом ватт, а при полной контейнеризации –
мии электроэнергии. с нагрузкой датчики кондиционеров до 70 киловатт, что вполне достаточно
Компания APC by Schneider Electriс получают информацию о текущем для эффективного охлаждения совре-
может предложить целый ряд решений локальном состоянии нагрузки и, со- менного оборудования. EOF

системный администратор январь-февраль 2010 13


Кафедра

Визитка

АЛЕКСЕЙ БАРАБАНОВ, системный администратор, аутсорсер и консультант


по вопросам применения информационных технологий. Хобби –
программирование

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

Краткое введение в тему: в предыдущей части [1] был по- команды без каких-либо значительных изменений могут
строен обобщенный универсальный алгоритм системно- быть положены в основу автоматического скрипта. Пример-
го администрирования. Предполагается, что он пригоден но так и сделано в [2]. Критике подобной практики посвяще-
для создания программ автоматического администрирова- ны многочисленные обсуждения в форумах специалистов,
ния. Вот и воспользуемся этой наработкой, чтобы выяснить, предполагаю, это уже прописано в учебниках, и у многих
какую реальную пользу можно извлечь из подобного алго- сисадминов такие приемы не используются. Или принято
ритма. утверждать, что «не» используются. Положительным свой-
ством такого подхода надо признать простоту и, как след-
Инструментальная платформа ствие, удобство отладки.
Прежде всего договоримся об инструментарии. В качестве Но в инструментальном плане универсальные скрипты,
целевой платформы я выбираю GNU/Linux, и следователь- пригодные для практического запуска на необследован-
но, все написанное далее можно будет с минимальными ных системах (здесь обсуждается администрирование,
коррекциями с успехом применить практически в любой но возможен альтернативный, пользовательский взгляд:
UNIX-системе. Но это не значит, что предложенные методы неизвестные скрипты на «своих» системах), категориче-
нельзя использовать для управления семейством операци- ски нельзя создавать в расчете на выполнение от имени
онных систем MS Windows. Без проблем! Надо только по- суперпользователя, потому что всякая эскалация привиле-
добрать небольшой «напильник», как говорят. Однако про- гий должна быть явной!
приетарные платформы далее не будут рассматриваться
принципиально, потому что разрабатываемый проект дол- Способ 2. Локальная работа с эскалацией привилегий
жен оставаться в первую очередь свободным! с помощью su
И поскольку выбран GNU/Linux, то вполне естествен- Схематично такой подход изображен на рис. 2. Можно так
но, если в качестве инструментария будут использоваться сказать, что это «общерекомендованный ортодоксальный»
консольные утилиты и команды оболочки bash. Оболочка способ. Администратор работает локально от пользова-
bash имеет достаточно мощный встроенный язык, и все это тельской учетной записи, и в случае необходимости выпол-
вместе с юниксовыми утилитами позволяет решить прак- няет привилегированные команды с помощью утилиты su,
тически любую задачу администрирования. И вот пример которая в обязательном порядке требует подтверждения
такого решения [2]. Скрипт достаточно старый. Возможно, полномочий путем введения парольной фразы. Все полит-
автор давно его модернизировал или, напротив, забросил. корректно, но в работу вносится неизбежная интерактив-
Но за неимением иного публичного примера я буду «тер- ность. Ее можно ограничить, объединив все команды в один
зать» труд Геннадия Калашникова, да простит он мне это! скрипт. Например, так можно использовать программу [2],
Итак, начнем подбирать форму построения скрипта для ав- запуская ее изначально от непривилегированного пользо-
томатизации. вателя с помощью команды su. Но тогда будет потеряна из-
бирательность эскалации прав. Резюме: непригодно!
Способ 1. Локальная работа от суперпользователя
Изобразим вариант его работы схематично на рис. 1. Способ 3. Локальная работа с эскалацией привилегий
По вертикали вниз отложено течение времени. По горизон- с помощью sudo
тали вправо – эскалация привилегий. Сисадмин сразу на- Этому варианту отвечает рис. 3. Сейчас такой способ с лег-
чинает работу в режиме суперпользователя на локальной кой руки разработчиков Knoppix-а стал повсеместной прак-
системе. Соответственно в таком варианте все консольные тикой. Утилита sudo позволяет сменить права на суперполь-

14 январь-февраль 2010 системный администратор


Кафедра

Потеря семантики ведет


к тому, что по инструкции
можно написать программу,
а по программе создать ин-
струкцию практически нельзя

зовательские без ввода пароля, только лишь на основании привилегий с помощью sudo. И такая работа требует соот-
ранее выполненной авторизации учетной записи, внесен- ветственной настройки локальной учетной записи систем-
ной в файл настроек sudoers. Это самый правильный под- ного администратора. А что если нужно выполнить команду
ход в создании локальных автоматических установочных на удаленной системе?
скриптов. Предварительное занесение админской учетной
записи в sudoers давно уже для многих системных админи- Способ 4. Удаленная работа с сепаратным
страторов стало нормой. У меня именно так. исполнением команд
Здесь уместно отметить, что корректно написанные руко- Думаю, не ошибусь, если предположу, что подобный способ
водства по установке могут практически без особого труда используют очень и очень многие. Схематично он изобра-
быть переложены в форму консольных команд. Например, жен на рис. 4. Администратор, авторизуясь под локальной
статья [3] написана как раз с таким расчетом. И хотя все учетной записью на собственном компьютере, запускает
исполнение там идет от суперпользователя, команды со- на выполнение отдельные команды вида:
ставлены так, что интерактивность их минимальна. А подси- ssh staff@target sudo cmd1
стема эскалации прав не использована лишь потому, что ее
описание не укладывалось в тему статьи. Забегая вперед, Кто незнаком с такой работой, могут прочитать отлич-
открою секрет – упомянутая работа [3] вообще бэк-порт ную статью на эту тему [4]. Дам лишь некоторые поясне-
из скрипта автоматической установки LDAP. Таким образом, ния. Поскольку необходимо в конце концов написать скрипт
при создании локальных административных скриптов жела- для автоматического выполнения настроек, то потребует-
тельно использовать явную, не интерактивную эскалацию ся обеспечить неинтерактивное выполнение всех команд.

Рисунок 1. Локальная работа от суперпользователя Рисунок 2. Локальная работа с эскалацией привилегий Рисунок 3. Локальная работа с эскалацией привилегий
с помощью su с помощью sudo

системный администратор январь-февраль 2010 15


Кафедра

Для этого на целевой системе (target) должна быть создана следовательности и записываются на удаленной стороне
служебная запись (назовем ее staff), внесенная в sudoers в скрипты через конвейерную передачу, например, так:
как stuff ALL = (root) NOPASSWD: ALL, и соответствующий cat | ssh staff@target "cat >cmd.$$"
ключ ssh должен быть записан в authorized_keys в директо-
рии ~/.ssh этой учетной записи. Вот тогда можно будет вы- и потом запускаются на исполнение
полнять команды на удаленной системе с эффективностью ssh staff@target "bash cmd.$$"
локальных.
Но и тут есть некоторые недостатки: Внутри такого скрипта могут быть сформированы и от-
Такая схема требует наличия бесперебойного уда- дельные команды и управляющие директивы bash. Такой
ленного доступа во время выполнения всей серии способ позволяет значительно уменьшить замедление из-
команд, собранных в единую программу. Это мо- за многочисленных ssh-сессий. Уменьшается вложенность
жет вызвать затруднения в настройке таких подсистем, синтаксических преобразований, что позволяет построить
где в процессе работы приходится менять параметры более надежные алгоритмы защиты служебных символов
сетевых соединений. И это вне зависимости от того, консольных утилит.
что, возможно, в конце выполнения серии команд связь Ну и, наконец, отладка в значительной степени упро-
снова будет восстановлена. щается, так как есть возможность сохранения истории
Вся работа состоит из серии открывающихся и потом запускаемых команд – надо просто дать скрипту cmd.$$
завершающихся сеансов связи с удаленным хостом, сериализуемое название и не удалять его после работы.
что может привести к существенному замедлению в слу- Но проблема с возможным закрытием терминального окна
чае большого набора команд. все равно остается. Предполагаю, что многие, кто занимал-
В процессе отправки команд на удаленную систему ся подобной тематикой, пришли к внедрению этого способа,
через конвейер ssh происходит сложная синтакси- но и он не решает всех проблем.
ческая трансляция. Ситуацию усугубляет возможное
использование таких утилит, как sed и grep, требующих Способ 6. Удаленная работа в автономном
защиты своих служебных символов. Все это приводит терминальном окне
к появлению возможных ошибок в зависимости от пред- Это, безусловно, самый изощренный и универсальный ва-
ставления входных данных. И ошибки эти очень трудно риант удаленного выполнения команд (см. рис. 6). Команды
обнаружить, поскольку строки, передаваемые через ssh не просто группируются во временный скрипт, но и запуск
на «ту» сторону, формируются налету, и даже отладоч- его происходит с помощью консольного оконного менедже-
ное протоколирование в виде echo не дает 100% пра- ра screen, например, так:
вильной картины. ssh staff@target "screen -S scr$$ -dm \"bash cmd.$$\""
Именно такой способ настройки применяется на боль-
шей части моих серверов в течение нескольких лет. И пере- Данным способом обеспечивается асинхронное и со-
численные недостатки заставили «двигаться» в переборе вершенно независимое выполнение последовательностей
способов далее. команд. И сами эти команды могут выполнять все действия,
от изменения настроек сети до управляемой перезагрузки
Способ 5. Удаленная работа с групповым серверов. Работа программы автоматической настройки,
исполнением команд построенная по такому способу, не зависит от возможных
Этот вариант, изображенный на рис. 5, отличается от пре- прерываний связи и может даже обеспечить конкурентное
дыдущего тем, что команды собираются в небольшие по- исполнение потоков заданий. Однако при такой организа-

Рисунок 4. Удаленная работа с сепаратным исполнением команд Рисунок 5. Удаленная работа с групповым исполнением команд

16 январь-февраль 2010 системный администратор


Кафедра

ции теряется возможность получения кода возврата оче- mydestination = $myhostname, localhost.$mydomain, ↵
видным способом, да и не только. Даже протокол работы localhost, $mydomain
mynetworks = 192.168.0.0/24, 127.0.0.0/8
команд, который во всех ранее перечисленных способах relay_domains =
можно было просто наблюдать на экране монитора, теперь home_mailbox = Maildir/
становится недоступен. Значит, потребуется предусмотреть
возможность сохранения кода возврата и, если нужно, про- Выбор именно Postfix как объекта настройки не случаен.
токола работы на удаленной стороне и обеспечить цикл Этот smtp-сервер имеет встроенную утилиту конфигури-
ожидания завершения процесса screen, чтобы в итоге по- рования postconf, что позволит обойтись без привлечения
лучить и то и другое. сложных комбинаций grep/awk/sed и так далее.
Попробуем построить скрипт согласно обобщенному
Выбор модели разработки алгоритму из части 2 [1]. Сначала подготовим все необхо-
Из вышеперечисленных способов следует особо отметить димые элементы. Настройка избранного параметра postfix
способ 3 и способы 5-6. производится следующим образом:
Взаимосвязь способа 3 и обычного текстового описания sudo postconf -e myhostname=mail.example.com
уже была отмечена (см. [3]). И точно так же, как по тексто-
вому пошаговому руководству, можно написать последова- Предварительный опрос установленного ранее значения
тельность консольных команд, так и в обратную сторону – можно сделать как:
ничего не должно мешать написать инструкцию по скрипту postconf myhostname
установки.
Ну а 5-й и 6-й способы фактически производят отправку Хочу обратить внимание: эскалация прав требуется толь-
сформированного по способу 3 скрипта на удаленный хост ко для модификации. Все операции изменяют содержимое
и дальнейшее его выполнение. Иначе говоря, они являются main.cf. Это значит, что данный файл надо будет сохранить
технологической «оберткой» для все того же скрипта, полу- до начала настроек, чтобы в случае возникновения проб-
ченного по текстовому руководству и предназначенного для лем можно было произвести откат. Зависимый процесс –
локального исполнения. Причем здесь число инкапсуляций это сам postfix. Его перезапуск также очевиден:
может быть произвольно увеличено. Например, отсылае- sudo service postfix restart
мый скрипт может быть обработан обфускатором [5] для за-
щиты ноу-хау системного администратора, производящего Элемент проверки начальных зависимостей прежде все-
удаленную настройку и прочее, и прочее. го выражается в анализе установки пакета postfix. Проверя-
Таким образом, чтобы исключить излишнюю детализа- ется она с помощью команды:
цию описания, последовательность разработки построю та- rpm -q postfix
ким образом: инструкция, локальный скрипт по способу 3,
удаленное исполнение по способу 5 или 6. Это не времен- а ставится при необходимости как:
ный учебный план. Создание рабочих скриптов тоже лучше yum install postfix
строить именно по такой схеме, начиная с текстового опи-
сания и продолжая локальным скриптом с явной эскалаци- Но поскольку данную зависимость можно, и нужно,
ей привилегий. Естественно, в конце цепочки разработки устранить в процессе настройки, то процедуру проверки
должна стоять некая продукционная система. Здесь предпо- и установки postfix просто помещаем в самом начале испол-
лагается, что это исполнитель удаленных скриптов по спо- нения. А вот другую зависимость, что требует средой испол-
собу 5 или 6, разработку которого отложим на потом. То есть нения считать CentOS, можно только проверить, и в случае
сейчас обсуждается лишь первый шаг данной цепочки пре-
образований, а именно:
Рисунок 6. Удаленная работа в автономном терминальном окне
От руководства к локальному скрипту
Начнем, как и обещано, с руководства. Например, с инструк-
ции по настройке почтовой системы CentOS [6]. Хотя оно
и так не велико, дополнительно упростим задачу, ограничив-
шись только настройкой Postfix. В тексте [6] за это отвечает
раздел 3.1. Актуальными являются лишь первый абзац этого
раздела и 8 строк настроек в main.cf. Будем воспринимать
данное руководство как техническое задание на разработ-
ку локального скрипта автоматической настройки (причем
в точности с описанными параметрами).
Итак, текст просто указывает на место, где надо произ-
вести настройки – в main.cf, а сами настройки должны быть
следующими:
myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all

системный администратор январь-февраль 2010 17


Кафедра

несоблюдения завершить скрипт с ошибкой. Завершающее # 6- проверка зависимых процессов


действие, которое должно присутствовать в разрабатывае- sudo /sbin/service postfix status | grep pid >$null || {
mv $cnf0 /etc/postfix/main.cf
мом скрипте, – включение postfix в последовательность хо- sudo /sbin/service postfix restart >$null 2>&1
лодного старта. sudo /sbin/service postfix status | grep pid >$null && ↵
Описывать пошаговое создание скрипта не позволит abort установки не верны

объем журнальной публикации, да и не стоит такая при- # 7- система в неопределенном состоянии


митивная задачка детального рассмотрения. Даже если echo срочно вызывайте из отпуска настоящего сисадмина ; ↵
exit -2
кому-то подобное внове, то после перечисленных выше
}
наводящих подсказок с этой задачкой справятся, надеюсь,
все. Потому сразу дам окончательный вариант, который # 8- успешное завершение
rm $cnf0
почти в точности соответствует рекомендациям к построе- echo smtp-сервер postfix настроен ; exit 0
нию таких алгоритмов из части 2 [1], за исключением того,
что введены некоторые служебные макросы и добавлены В терминологии части 2 процедурам соответствуют фраг-
служебные подпрограммы для сокращения текста. Итак, менты со 2-го по 4-й листинга 1, а сам скрипт соответствует
локальная форма настроечного скрипта представлена решению. Конечно, не надо слишком серьезно относится
в листинге 1. к этому чисто учебному примеру, его практическая польза
минимальна. Однако, учитывая что настройка smtp-сервера
Листинг 1. Скрипт автоматический настройки postfix является очень распространенной и весьма типичной зада-
чей и то, что в этом очень маленьком скрипте сведены во-
null=/dev/null
cnf0=/etc/postfix/main.cf.$$ едино все характерные компоненты таких программ, то его
pconf=/usr/sbin/postconf вполне достаточно, чтобы сделать оценку подобного проме-
chkc=/sbin/chkconfig
жуточного результата.
abort() { echo $1 ; exit -1 ; }
abort2() { mv $cnf0 /etc/postfix/main.cf ; abort "$1" ; }
cnt=0 # счетчик срабатываний Противоречия
checkconf() { $pconf $1 | awk 'BEGIN{FS="= "} ↵
{print $2}' | grep "^$2$" >$null ; }
Если сравнить исходный текст [6], абзац и восемь строк
fixconf() { настроек, то очевидно, что программа получилась значи-
local t ; t=$2 ; [ -n "$t" ] || t=" " тельно большей. В нее были добавлены не учтенные в ру-
checkconf $1 $t || {
sudo $pconf -e "$1=$t"
ководстве [6] обстоятельства и данные, потому что даже
checkconf $1 $t || abort2 не могу настроить $1 самое маленькое программное решение должно включать
cnt=$((cnt+1)) все, казалось бы, априорно очевидные элементы, кото-
}
} рые обычно оставляются на усмотрение подготовленных
читателей.
# 1- проверка зависимостей В ходе написания скрипта были сделаны некоторые сти-
grep CentOS /etc/redhat-release >$null 2>&1 || ↵
abort использовать только в CentOS левые преобразования для удобства программирования –
применены служебные макросы, и часть повторяющегося
# 2- проверка пакетов кода вынесена в подпрограммы. На первый взгляд не видно,
rpm -q postfix >$null || {
sudo yum install postfix но такие макросы, как chkc=/sbin/chkconfig, на самом деле
rpm -q postfix || abort не могу поставить postfix устанавливают скрытую зависимость от расположения ути-
cnt=$((cnt+1))
литы chkconfig в системе. Более того, замена тривиальным
}
$(which chkconfig) тоже будет платформеннозависимой. На-
# 3- проверка параметров пример, в openSUSE такое будет работать. Там даже можно
sudo cp /etc/postfix/main.cf $cnf0
fixconf myhostname mail.example.com
положиться на поиск по $PATH и не указывать путь вовсе.
fixconf mydomain example.com А вот в CentOS и RHEL для правильного исполнения надо
fixconf myorigin "\$mydomain" использовать только описанный в скрипте код.
fixconf inet_interfaces all
fixconf mydestination "\$myhostname,localhost.\ ↵
Следующим элементом, зависимым от предпочтений
$mydomain,localhost,\$mydomain" кодировщика, является группирование команд в подпро-
fixconf mynetworks "192.168.0.0/24,127.0.0.0/8" граммы. В тексте на одну страничку не опасно, но в боль-
fixconf relay_domains
fixconf home_mailbox Maildir/ шом проекте это может привести к скрытому увеличению
вложенности кода. В сегменте «3- проверка параметров»
# 4- проверка активности можно увидеть, что передача значения $mydomain потре-
LC_ALL=C $chkc --list postfix | grep $(runlevel | ↵
awk '{print $2}'):on >$null || { бовала размещения защитного слеша перед знаком долла-
sudo $chkc postfix on ра. Но не все подпрограммы делают простую подстановку
LC_ALL=C $chkc --list postfix | grep $(runlevel | ↵ параметров. Возможно, где-то потребуется использовать
awk '{print $2}'):on >$null || \
abort2 не могу активировать postfix конструкцию eval для подстановки значений в вызов awk,
cnt=$((cnt+1)) например (там знак доллара уже зарезервирован). То есть
}
в таком случае надо точно знать глубину вложений и число
# 5- рестарт зависимых процессов разыменований, чтобы использовать нужное число защит-
[ $cnt -gt 0 ] && sudo /sbin/service postfix restart ↵ ных символов. Конечно, можно писать код без подпрограмм,
>$null 2>&1
но тогда даже подобная простейшая задача по трудоемко-
сти ручного кодирования вырастет вдвое! Соответственно

18 январь-февраль 2010 системный администратор


Кафедра

отладка и поиск ошибок точно так же усложнятся как мини- администрирования. Но они не имеют, точнее, не содер-
мум в два раза! жат средств выражения или отражения специфической
Можно поступить просто: в каждой подпрограмме про- семантики предметной области. Спросите, а при чем тут
водить сканирование аргументов и размещение дополни- семантика и зачем она нужна? А вот потеря «этой самой»
тельных защитных слешей, например, так: sed 's/\$/\\\$/'. семантики и ведет к тому, что по инструкции можно напи-
Но это надо будет сделать для всех таких символов, для «$», сать программу, а по программе создать инструкцию прак-
для «'», для «\» и многих других, что отнюдь не упростит код. тически нельзя. И спорить с этим не надо! Иначе каждый
Все вышесказанное приводит к тому, что визуально выде- второй проект с открытыми исходными текстами не стра-
лить в полученном скрипте те самые 8 строк настроек очень дал бы от отсутствия адекватной сопровождающей доку-
трудно. ментации. Чтобы не создавать еще один «проект-сироту»,
Синтаксис программы ничем не напоминает исходное займемся проблемами семантики. Снова посмотрим сек-
руководство [6]. Если допустимо утверждать, что по ру- цию «3- проверка...». Внутри скрипта часть аргументов ко-
ководству можно построить программу, то создать по та- мандных строк содержат лексические повторы. Например,
кой программе руководство уже нельзя! Что это значит? mail.example.ru включает в себя подстроку example.ru, кото-
Как минимум то, что такой скрипт затруднителен в пони- рая также используется в качестве независимого аргумен-
мании, не обладает свойством самодокументированности, та. Очевидно, не просто так, потому что example.ru является
сложен в отладке и, как следствие, тяжелый в сопрово- доменом для mail. Данную семантическую связь можно от-
ждении. разить в макроподстановке:
Давайте зафиксируем парадокс: из ясного и понятного
tld=example.com
руководства был создан малопонятный скрипт, который fixconf myhostname mail.$tld
для своего использования требует наличия руководства fixconf mydomain $tld
уже к скрипту! Хотя изначально программа автоматизиро-
ванного администрирования создавалась как эквивалент Текст стал более читаемым? Отнюдь! Кроме того, прос-
и замена документации. Проблема эта не надуманная. тое перечисление макросов в начале скрипта (как в [7] –
Учтите, типичный цикл разработки новых релизов плат- поверьте на слово) или в ini-файле, как в [2], решает проб-
форм на основе GNU/Linux не превышает года. Значит, лему лишь отчасти, так как в проекте, включающем много
даже если не учитывать возможное портирование на дру- скриптов-решений, такой подход создаст проблему стан-
гие совместимые платформы и выходы новых релизов ис- дартизации точно так же, как ее создает выделение части
пользованного ПО, все равно минимум раз в год придет- кода в общую библиотеку, приводящее к возникновению
ся проводить повторное тестирование и отладку такого стандартов API.
скрипта. А он может иметь нешуточные размеры в сотни Кроме того, example.ru не просто какая-то литеральная
килобайт текста! И это без учета требований из части 2, строка, это строка, написанная в соответствии с форма-
которые превратили 8 строк документации в 50 строк про- том FQDN. Поищите проверку форматов параметров в [2] –
граммы bash. не найдете! Кто успел скопировать [7], чтобы изучить, тоже
Обычно 8 строк в точности соответствуют 8 стро- будут разочарованы. Пути решения всех перечисленных
кам в скрипте, как это сделано в программе [2]. Однако вопросов и проблем начинаются с создания так называе-
скрипт Геннадия Калашникова имеет объем 129 Кбайт! Он мой параметрической модели информационной системы.
до сих пор доступен в Интернете, хотя скорее всего уже Но об этом уже в следующей части! EOF
не актуален для новых версий программного обеспече-
ния. А другие авторы, осознавая тщетность усилий, даже 1. Барабанов А. Вычислительная модель. Введение в системное
не переводят свои разработки в ранг релизов и изымают программирование. //Системный администратор, №12, 2009 г. –
их из обращения, например, как это сделал Вячеслав Ка- С. 18-22.
лошин [7]. Поскольку скрипт изъят автором из публичного 2. Новость со ссылкой на пакет автоматической установки Open-
доступа (в Интернете и рукописи горят!), то я могу лишь Xchange, Samba PDC и проч., разработанный Геннадием Ка-
предложить на веру принять, что в этой программе объе- лашниковым (04.01.2006) – http://www.opennet.ru/openforum/
мом в 26272 байта вопрос настройки postfix решен в точ- vsluhforumID3/13191.html.
ности, как и в работе [2]. 3. Барабанов А. Размещаем пользовательские бюджеты в LDAP.
Таким образом, практика показывает, что требования Часть 1. //Системный администратор, №1, 2007 г. – С. 36-43.
полноты и универсальности в процессе разработки по- Барабанов А. Размещаем пользовательские бюджеты в LDAP.
добных программных проектов вступают в противоречие Часть 2. //Системный администратор, №2, 2007 г. – С. 32-37.
не только с требуемой логикой алгоритмов (см. [1]), но и 4. Erdal Multu. Автоматизация системного администрирования
очень часто приводят к невозможности развития или со- с помощью ssh и scp. LinuxFocus.org (27.01.2003) – http://www.
провождения получаемого программного продукта. Тут уже linuxfocus.org/Russian/January2003/article278.shtml.
можно сознаться, что автоматизация системного админист- 5. Сайт разработчика компилятора скриптов shc – Francisco Javier
рирования таким путем недостижима. Rosales Garcia – http://www.datsi.fi.upm.es/~frosal.
6. Руководство по настройке почтовой системы CentOS. Postfix
*** HOWTO – http://wiki.centos.org/HowTos/postfix.
Скриптовые консольные языки, например bash, обладают 7. Вячеслав Калошин aka multik/kiltum. Презентация «альфа-
необходимой инструментальной и в какой-то степени син- бета-гамма»-версии скрипта настройки виртуального сервера.
таксической мощностью для решения задач системного (29.06.2007) – http://kiltum.livejournal.com/1185215.html.

системный администратор январь-февраль 2010 19


Кафедра

Визитка

АНДРЕЙ ПЕШЕХОДОВ, выпускник Ивановского государственного энергетического


университета, главный инженер ООО «Иваново ТВ-Тренд». Профессиональные
интересы: GNU/Linux, MS Windows, архитектура файловых систем

Взгляд на ext4
Не новое, но хорошо доработанное старое
Ext4 подходит для самых разнообразных рабочих
нагрузок и способна полностью заменить ext3 в ка-
честве «файловой системы Linux»

Ext3 много лет является наиболее популярной файловой системы, как это было сделано при переходе с ext2. Также
системой для Linux. Для соответствия возможностям но- разработчикам не хотелось пренебрегать значительными
вых жестких дисков и требованиям времени на ее основе усилиями, вложенными в надежность и функциональность
была разработана ФС нового поколения – ext4, сочетаю- ext3 и e2fsck, но требовалось сосредоточиться на достаточ-
щая улучшенные масштабируемость и производительность но быстром добавлении новых возможностей.
при поддержке больших файловых систем с сохранением Так была рождена ext4, присутствующая в основной вет-
надежности и стабильности ext3. Мы рассмотрим мотивы ке, начиная с ядра 2.6.19, и помеченная стабильной с 2.6.28
разработки ext4, ее новые возможности, методы миграции (после двух лет разработки).
с ext3 и сравним ее с другими файловыми системами.
Масштабирование
Почему не ext3? 16-терабайтный лимит размера раздела в ext3 обуслов-
Ext3 стала столь популярной благодаря своей надежности, лен 32-битным номером блока. Логичным решением про-
богатому набору возможностей, относительно хорошей блемы является использование большего количества би-
производительности и отличной совместимости с преды- тов под этот параметр по всему коду ФС. В экстент-патче
дущими версиями Extended File System. Консервативный для ext3 вводились 48-битные номера блоков, сохранен-
дизайн ext3 создал ей репутацию высоконадежной, но не- ные и в ext4. Теперь поддерживаются разделы размером
сколько ограниченной в работе с большими хранилищами до 1 эксабайт (Эб) (1024 Тб при 4-килобайтном блоке).
файловой системы. После расширения номера блока до 48 бит потребовалось
Одно из наиболее неприятных ограничений ext3 – макси- внести изменения в метаданные ext4 – суперблок, дескриптор
мальный размер файловой системы в 16 Тб. Многие корпо- группы блоков и журнал. Новые поля были добавлены в ко-
ративные решения уже столкнулись с этим лимитом, более нец суперблока, расширяя s_free_blocks_count (количест-
того, многотерабайтные массивы уже становятся доступны во свободных блоков), s_blocks_count () и s_r_blocks_count
и домашним пользователям. до 64 бит. Аналогичным образом скорректирован и дескрип-
Для снятия этого ограничения в августе 2006 года была тор группы блоков – были расширены указатели на битовую
опубликована серия патчей, дающих ext3 две ключевые карту и таблицу inodes.
возможности: поддержку больших разделов и учет блоков Модуль журналирования блоков, JBD, был переработан
на экстентах (необходимый из-за того, что обработка би- в JBD2 для поддержки новых возможностей ext4. Хотя сей-
товых карт даже на терабайтном разделе довольно сильно час подсистему JBD2 использует только ext4, потенциаль-
нагружает CPU и память). Эти патчи необратимо меняли но она может обеспечить журналирование для любой 32-
дисковый формат и нарушали обратную совместимость. или 64-битной файловой системы.
Из соображений поддержания стабильности кода ext3 раз- 48-битная разрядность номера блоков была выбрана по-
работчики решили создавать на основе этих патчей новую тому, что, во-первых, предела размера ФС в 1 Эб должно
файловую систему, назвав ее ext4. хватить на много лет вперед, и, во-вторых, полная проверка
Основная цель новой файловой системы – решить про- с помощью e2fsck (-pf) экзабайтного раздела займет 119 лет
блемы производительности, надежности и масштабируе- при современных скоростях дисков.
мости, характерные для ext3. На вопрос об использовании Несмотря на расширение номера блока до 48 бит, размер
XFS или разработки новой ФС с нуля есть простой ответ: раздела ext4 все еще ограничен количеством групп блоков
необходимо было обеспечить огромному количеству поль- в файловой системе. В ext3 из соображений безопаснос-
зователей ext3 возможность легко обновить их файловые ти все дескрипторы групп блоков продублированы в первой

20 январь-февраль 2010 системный администратор


Кафедра

Еxt4 сочетает улучшенные мас-


штабируемость и производитель-
ность при поддержке больших
файловых систем с сохранением
надежности и стабильности ext3

из них. Поскольку новый дескриптор группы блоков имеет /* в будущем возможны несколько форматов узлов,
длину 64 байта, ext4 могла бы иметь объем не более 256 Тб. * тогда пригодится этот magic */
__le16 eh_magic;
Решение проблемы – использовать метагруппы блоков /* количество элементов */
(META_BG), существующие в ext3, начиная с ядра 2.6.0. С оп- __le16 eh_entries;
цией META_BG ext4 разбивается на несколько метагрупп, /* максимально элементов */
__le16 eh_max;
каждая из них является кластером такого количества групп /* глубина дерева, начиная с этого уровня */
блоков, дескрипторы которых могут храниться в одном бло- __le16 eh_depth;
/* номер поколения дерева */
ке ФС. В 4-килобайтном блоке помещается 64 дескрипто-
__le32 eh_generation;
ра нового формата, т.е. одна метагруппа может адресовать };
до 8 Гб дискового пространства. Использование метагрупп
/*
позволяет вынести дескрипторы конкретных групп блоков * Структура индекса в дереве экстентов:
из перегруженной первой группы раздела в первые группы */
каждой метагруппы. Резервные копии дескрипторов хранят- struct ext4_extent_idx {
/* индекс покрывает логические блоки,
ся во второй и последней группе блоков каждой метагруп- * начиная с этого */
пы. Все эти меры позволяют адресовать с помощью групп __le32 ei_block;
блоков 1 Эб дискового пространства. /* указатель на блок следующего уровня
* (младшие 32 бита) */
__le32 ei_leaf_lo;
Экстенты /* (старшие 16 бит) */
Файловая система ext3 отслеживает блоки данных файлов __le16 ei_leaf_hi;
__u16 ei_unused;
и каталогов с помощью косвенно-блочной схемы. Этот под- };
ход достаточно эффективен для сильно фрагментирован-
ных или маленьких файлов, но очень накладен для больших, /*
* Экстент ext4
хорошо упакованных файлов, особенно на операциях уда- */
ления/усечения. struct ext4_extent {
/* логическое начало экстента */
Экстентом называется дескриптор, определяющий уча- __le32 ee_block;
сток в нескольких непрерывно расположенных дисковых /* длина экстента в блоках */
блоках. В ext4 экстент может адресовать до 128 Мб дис- __le16 ee_len;
/* физическое начало экстента (старшие 16 бит) */
кового пространства при 4-килобайтном блоке. 4 экстен- __le16 ee_start_hi;
та могут храниться прямо в inode – их вполне достаточно /* (младшие 32 бита) */
для небольших или нефрагментированных файлов. Когда __le32 ee_start_lo;
};
встроенных экстентов не хватает, для адресации блоков
файла используется дерево экстентов постоянной глубины В будущем специально для эффективного хранения
(см. рисунок). Корень его хранится в inode, сами экстен- фрагментированных файлов возможно введение нового
ты – в листьях. Каждый узел дерева начинается с заголовка типа экстентов (с отличным magic-идентификатором), адре-
(fs/ext4/ext4_extents.h): сующих блоки по косвенной схеме.
Также для повышения надежности определения разру-
/*
* Каждый узел (листовой, индексный или корневой) шений не исключено дополнение узлов дерева экстентов,
* начинается с этого заголовка */ помимо заголовка, еще и «хвостом», в котором будут содер-
struct ext4_extent_header {
жаться номер inode, номер поколения и контрольная сумма.

системный администратор январь-февраль 2010 21


Кафедра

Большие файлы да проявляются при усечении или дефрагментации файло-


В файловой системе ext3 размер файла ограничен 32-бит- вой системы, то есть в тех случаях, когда inodes требуется
ным полем i_blocks в inode, которое содержит количество перемещать. Тогда сервисной программе придется вникать
секторов (512 байт), занимаемых файлом. В итоге мак- и вносить изменения в структуру каталогов, что ведет к су-
симальный размер файла в ext3 ограничен величиной щественной потере производительности и увеличивает
232 * 512 = 2 Тб, что для ФС нового поколения недостаточно. риск разрушения ФС в случае сбоя оборудования во время
В ext4 эта проблема решена достаточно прямолиней- работы программы.
но и бесхитростно: разрядность поля i_blocks увеличена Панацеей может стать введение дополнительных карт,
до 48 бит, размер теперь исчисляется в блоках. В результа- отображающих старые координаты inodes на новые,
те размер файла ext4 ограничен только 32-битным номером что трудно назвать хорошей идеей. Решение проблемы
логического блока в текущем формате экстента и состав- поиска динамически выделяемых inodes с помощью ин-
ляет 16 Тб. В будущем планируется снятие этого ограниче- дексирующих их бинарных деревьев (как это сделано
ния и достижение полной 48-битной емкости в несколько в подавляющем большинстве файловых систем) приведет
эксабайт. к полной переделке структуры ФС, утрате аккумулирую-
щей роли групп блоков и фактически выльется в создание
Большие каталоги полностью новой, ни с чем не совместимой ФС, что непри-
Некоторые приложения уже в наше время оперируют мил- емлемо. То же можно сказать и о расширении номера inode
лиардами файлов и даже замахиваются на триллионы. Тео- до 64 бит.
ретически ext4, располагая 32-битным номером inode, мо- Выгоды от динамического выделения и 64-битных номе-
жет оперировать миллиардами файлов, однако на практике ров inodes очевидны, однако объем требуемых изменений
эта величина недостижима из-за архаичного статического дисковой структуры необычайно велик, поэтому сейчас
выделения inodes, пришедшего в Extended Filesystem еще эти вопросы все еще находятся в стадии обсуждения. Со-
из BSD FFS. Количество файлов на разделе жестко зада- ответствующий функционал не вошел в релиз и, видимо,
ется во время создания ФС. Задумавшись о реализации будет осуществлен не скоро (а по мнению автора, не бу-
динамического выделения inodes с увеличенными 64-бит- дет реализован вообще, в свете успехов в разработке btrfs
ными номерами, разработчики остановились на следующих (btrfs.wiki.kernel.org) и все большего внимания к ней не толь-
моментах: ко пользователей, но и многих мэйнтейнеров ядра).
производительность – необходим эффективный способ
отображения номеров inodes в их физическое положе- Масштабируемость каталогов
ние на диске; Объем каталога ext3 ограничен величиной в 32 000 файлов.
устойчивость к сбоям оборудования – e2fsck должна В ext4 этот лимит полностью устранен, то есть количество
иметь возможность быстро отыскивать все inodes после файлов в одном каталоге там не ограничено. Для поддержки
разрушения ФС; больших каталогов в ext4 вместо односвязного списка ис-
совместимость – необходимо решать проблемы обра- пользуется схема индексирования их элементов с помощью
ботки 64-битных номеров inodes на 32-битных машинах. так называемых HTree-структур, своего рода B-деревьев
При динамическом выделении inodes они больше не об- постоянной глубины, индексирующих элементы директории
ладают фиксированным положением на диске. Одним по 32-битному хешу имени. Для каталогов, содержащих бо-
из способов отображения номера inode на номер содер- лее 10 000 файлов, производительность поиска имени воз-
жащего его блока является прямое кодирование координат росла в 50-100 раз относительно ext3.
inode в его номере, как это сделано в XFS. Недостатки мето-
Inodes и расширенные атрибуты
Ext3 поддерживает inodes различного размера, задаваемо-
Дерево экстентов ext4 го во время mke2fs параметром -I [inodes_size]. В ext4 мини-
мальный размер inode увеличен вдвое – до 256 байт. Для со-
хранения совместимости с кодом драйвера ext3 и e2fsck
размеченная часть inode имеет старый формат. В допол-
нительной секции расположены несколько новых полей
(к примеру, наносекундные временные штампы) и динами-
ческая область, используемая под расширенные атрибуты
(extended attributes, EAs).
/* Дисковый inode ext4s */
struct ext4_inode {
/* флаги доступа и типа */
__le16 i_mode;
/* с */
__le16 i_uid;
/* размер в байтах */
__le32 i_size_lo;
/* время доступа */
__le32 i_atime;
/* время модификации inode */
__le32 i_ctime;

22 январь-февраль 2010 системный администратор


Кафедра

/* время модификации данных файла */ s_min_extra_size – гарантированный размер дополни-


__le32 i_mtime; тельной статической области;
/* время удаления */
__le32 i_dtime; s_want_extra_size – желаемый некоей версией, но не га-
/* младшие 16 бит GID владельца */ рантируемый размер экстра-области.
__le16 i_gid; Оставшееся пространство в inode может быть исполь-
/* количество ссылок на inode */
__le16 i_links_count; зовано для хранения встроенных расширенных атрибутов
/* количество блоков (младшие биты) */ прямо в inode, что существенно увеличивает производи-
__le32 i_blocks_lo;
/* флаги */
тельность их обработки. Также по-прежнему доступен до-
__le32 i_flags; полнительный EA-блок, позволяющий хранить еще 4 Кб
union { атрибут-данных для каждого файла. Возможность хранения
struct {
/* младшие 32 бита версии */
большего количества EAs в форме регулярного каталога
__le32 l_i_version; не реализована.
} linux1;
struct { /* не Linux */
__u32 h_i_translator;
Предразмещение (preallocation)
} hurd1; Некоторым приложениям, например базам данных и пото-
struct { /* не Linux */ ковым медиа-серверам, необходимо размещать впрок бло-
__u32 m_i_reserved1;
} masix1; ки для расширения файла, но без записи в них каких-либо
} osd1; данных. Это позволяет выделять блоки более непрерывно
/* указатели на блоки данных файла */ и гарантирует необходимое пространство для записи в пре-
__le32 i_block[EXT4_N_BLOCKS];
/* номер поколения (для NFS) */ делах предразмещенной области. Внутренне файловая сис-
__le32 i_generation; тема рассматривает неинициализированные участки файла
/* указатель на ACL (младшие биты) */
как заполненные нулями, что позволяет избежать несанкци-
__le32 i_file_acl_lo;
__le32 i_size_high; онированного просмотра устаревших данных. Предразме-
/* не используется */ щение должно быть устойчивым к перезагрузке, в отличие
__le32 i_obso_faddr;
union {
от так называемого резервирования блоков в ext3/4.
struct { В ext4 предразмещение реализовано вполне традици-
/* количество блоков (старшие биты) */ онно – неинициализированный экстент имеет специальную
__le16 l_i_blocks_high;
/* указатель на ACL (старшие биты) */
пометку, обнаружив которую при попытке чтения экстента,
__le16 l_i_file_acl_high; файловая система вернет приложению блок нулей. При за-
/* старшие 16 бит UID владельца */ писи в середину такого экстента он разбивается на две час-
__le16 l_i_uid_high;
/* старшие 16 бит GID владельца */ ти – одна дополняется нулями и пишется на диск, другая
__le16 l_i_gid_high; остается виртуальной.
__u32 l_i_reserved2; Сейчас все файловые системы Linux, располагающие
} linux2;
struct { /* не Linux */ соответствующим функционалом, принимают запросы
__le16 h_i_reserved1; на предразмещение через ioctl(). В будущем (посколь-
__u16 h_i_mode_high; ку таких ФС становится все больше) планируется вве-
__u16 h_i_uid_high;
__u16 h_i_gid_high; дение специального системного вызова, реализующего
__u32 h_i_author; posix_fallocate API.
} hurd2;
struct { /* не Linux */
__le16 h_i_reserved1; Отложенное и многоблочное размещение
__le16 m_i_file_acl_high; Аллокатор ext3 может размещать только по одному блоку
__u32 m_i_reserved2[2];
} masix2;
за один раз, что неэффективно при высокой интенсивности
} osd2; ввода-вывода. Запросы на выделение блоков передаются на
__le16 i_extra_isize; уровень VFS по одному за один раз, поэтому аллокатор ext3
__le16 i_pad1;
/* время модификации inode (наносекунды) */
не может предвидеть будущие запросы и кластеризовать их,
__le32 i_ctime_extra; что негативно сказывается на фрагментации нашей ФС.
/* время модификации i-данных файла (наносекунды) */ Отложенное размещение – хорошо известная техни-
__le32 i_mtime_extra;
/* время доступа (наносекунды) */ ка, суть которой в отсрочке выделения блоков до времени
__le32 i_atime_extra; сброса страниц (flush). Это позволяет обеспечить более эф-
/* время создания файла */ фективную с точки зрения фрагментации и нагрузки на CPU
__le32 i_crtime;
/* время создания файла (наносекунды) */ группировку запросов на размещение. Короткоживущие
__le32 i_crtime_extra; временные файлы при этом могут вообще не получить дис-
/* старшие 32 бита версии */ кового воплощения, оставаясь лишь в кэше. Патчи с реа-
__le32 i_version_hi;
}; лизацией отложенного размещения для ext4 уже написаны,
сейчас идет работа по выносу соответствующего функцио-
Размер дополнительной секции может меняться от вер- нала на уровень VFS для его разделения с другими файло-
сии к версии и хранится в поле i_extra_isize, следующем сра- выми системами.
зу за старой 128-битной частью. С появлением отложенного размещения стало возможно
Суперблок содержит два связанных с этим вопросом реализовать многоблочное размещение, при котором дис-
поля: ковое пространство выделяется сразу целыми экстентами,

системный администратор январь-февраль 2010 23


Кафедра

что исключает множество лишних вызовов ext4_get_blocks() Надежность


и ext4_new_blocks() и уменьшает нагрузку на процессор. Надежность хранения данных является одной из самых
Многоблочное размещение в ext4 реализовано через важных характеристик ext3 и, пожалуй, главной причиной
сбор информации о свободных экстентах в каждой группе ее популярности. Стараясь сохранить эту репутацию, раз-
блоков при монтировании ФС и организации ее хеширова- работчики ext4 приложили много усилий для обеспечения
ния в оперативной памяти. надежности файловой системы. Несмотря на использова-
Прирост производительности от отложенного и много- ние журналирования и различных RAID-конфигураций, мно-
блочного размещения оказался существенным: на 30% гие файловые системы подвержены различным разруше-
возросла пропускная способность ФС, нагрузка на CPU ниям дисковой структуры. Поэтому первой линией защиты
снизилась почти на 50%. Цена этого решения – увеличение целостности данных является проактивное обнаружение
времени монтирования ФС. проблем, комбинирующее устойчивый формат хранения,
Кроме прочего, в разработке находятся еще две воз- избыточность на разных уровнях и проверку целостности
можности, надстраиваемые над отложенным многоблочным с помощью контрольных сумм.
размещением, с которыми связывают большие надежды Одна из важнейших характеристик любой файловой
на серьезное уменьшение фрагментации ФС: системы – время восстановления после сбоя. К примеру,
Перспективное предразмещение (in-core на вполне обычном в наше время массиве объемом в 2 Тб
preallocation) – информацию о свободных экстентах ext3 будет восстанавливаться до работоспособного состоя-
можно использовать для построения более мощного ния в среднем от двух до четырех часов, а в худшем слу-
механизма предразмещения и резервирования дисково- чае – до нескольких суток. Использование экстентов очень
го пространства. Каждый inode может иметь несколько хорошо сказалось на масштабировании этого параметра,
заранее зарезервированных сегментов, индексируе- в разработке также находятся еще несколько дополнитель-
мых в логических блоках, что, к примеру, облегчит HPC- ных схем.
приложениям запись в файл с множества узлов по со-
вершенно непредсказуемым смещениям. Подсчет неиспользуемых inodes и ускорение e2fsck
Группы размещения (locality groups) – сейчас решение Безусловно, наиболее трудоемкой операцией в e2fsck яв-
по выделению блоков принимается независимо для каж- ляется проверка inodes на первом проходе. Она требует
дого файла. Однако если аллокатор будет располагать чтения с диска всех таблиц inodes, поиска в них целых, раз-
информацией о логических взаимосвязях объектов ФС, рушенных и неиспользуемых inodes, внесения необходи-
он сможет размещать связанные файлы ближе друг мых исправлений и обновления битовых карт размещения
к другу, что существенно улучшит производительность блоков и inodes. Неиспользуемые группы блоков и табли-
чтения/поиска. Аллокатор может отслеживать некоторое цы inodes теперь имеют особую логическую метку, позво-
количество еще не выделенных блоков (на уровне групп) ляющую пропустить значительную часть первого прохода,
и пытаться зарезервировать для них соответствующее что поможет существенно уменьшить общее время работы
количество дискового пространства. Этот объем бу- e2fsck. Эта возможность может быть задействована во вре-
дет использован позднее, при сбросе страниц на диск, мя mke2fs или позднее с помощью опции -O uninit_groups
для назначения конкретных блоков конкретным файлам. утилиты tune2fs.
Все это, ценой незначительного повышения нагрузки С этой опцией ядро сохраняет количество неисполь-
на CPU, приведет к существенному уменьшению фраг- зуемых inodes в конце inode-таблицы каждой группы бло-
ментации файловой системы и более оптимальному, ков. В результате e2fsck может пропустить как чтение этих
с точки зрения производительности, размещению свя- блоков с диска, так и их сканирование на предмет поиска
занных данных на диске. разрушений. Для подтверждения подлинности информации
Можно с уверенностью сказать, что ext4 располагает до- о неиспользуемых inodes дескриптор группы содержит кон-
статочно мощным механизмом распределения дискового трольную сумму (CRC16).
пространства, соответствующим современным требовани- Типичная ФС типа ext3 использует от 1 до 10% своих
ям к эффективной обработке больших и маленьких диско- inodes, и все они находятся в началах inode-таблиц, поэтому
вых запросов под многопоточными нагрузками. указанное нововведение позволяет избежать чтения и об-
работки существенного количества метаданных на пер-
Фоновая дефрагментация вом проходе e2fsck. Сейчас драйвер ext4 не увеличивает
Хотя функционал, описанный выше, заметно улучша- счетчик неиспользованных inodes при удалении файлов –
ет фрагментационную устойчивость файловой системы, это делает только e2fsck. Поэтому на ФС с большим коли-
со временем на активно используемой ФС фрагментация чеством удаленных файлов fsck будет работать значительно
все же может стать существенной. Для решений этой про- быстрее при втором запуске.
блемы была разработана программа e4defrag, способная
дефрагментировать как отдельные файлы, так и весь том. Контрольные суммы
При работе над отдельным файлом программа создает вре- Введение контроля целостности метаданных с помощью
менный inode и выделяет под все данные файла один (если контрольных сумм позволяет ext4 быстрее и достовернее
возможно) или несколько экстентов, используя многоблоч- отыскивать разрушения и соответственно на них реагиро-
ное размещение. После копирования данных файла блоч- вать, вместо того чтобы слепо верить прочитанным с диска
ные указатели в inodes подменяются на новые, а временный данным, полагаясь только на контроль оборудования. Де-
inode удаляется. скриптор группы блоков в ext4 также защищен контрольной

24 январь-февраль 2010 системный администратор


Кафедра

суммой, в планах на ближайшее время стоит защита жур- сервера, чтобы поддерживать клиентский кэш в актуальном
нала, поскольку плотность хранения важных метаданных состоянии. Для этого в ext4 на каждый inode введен глобаль-
в нем очень высока, что существенно повышает риск разру- ный 64-битный счетчик, инкрементируемый драйвером пос-
шения ФС в результате повреждения журналируемых дан- ле каждого обновления файла. Сравнивая значения счет-
ных из-за аппаратной ошибки. Соответствующий патч почти чика на стороне сервера со своими, клиент NFSv4 может
готов к внесению в код ext4. понять, изменялся ли файл. Этот счетчик обнуляется при
Каждая транзакция имеет блок-заголовок и фиксирую- создании файла, а его переполнение не имеет значения,
щий блок (commit-block). Во время нормальной журнальной т.к. проверяется лишь равенство.
операции фиксирующий блок не сбрасывается на диск,
пока там не окажутся заголовок и все метаданные. Следую- Миграция на ext4
щая транзакция будет вынуждена ждать полной фиксации В свое время разработчики уделили особое внимание со-
предыдущей, прежде чем начинать изменение ФС. Таким хранению обратной совместимости ext3 с ext2, и пользо-
образом, совпадение номера транзакции у заголовка и фик- ватели оценили эту возможность. Однако в случае с ext4
сирующего блока служит сигналом к запуску этой транзак- не удалось избежать ряда несовместимых с ext3 изме-
ции во время восстановления ФС, а если номера различа- нений дискового формата, хотя пользователи могут ис-
ются – чтение журнала прекращается. Однако существуют ключительно просто обновить свою ext3 до новой версии,
несколько сценариев, в которых подобное поведение может так же, как это было при переходе с ext2. Доступны методы
вызвать разрушение метаданных. как для простого ознакомления с возможностями новой ФС,
В защищенном журнале драйвер ext4 вычисляет кон- так и для миграции всей файловой системы без применения
трольную сумму (CRC32) для всех блоков транзакции резервных копий.
(включая заголовок) и записывает ее в фиксирующий Существует очень простой способ обновления ext3
блок. Если при восстановлении из журнала обнаружива- для использования экстентов и других возможностей ext4
ется несоответствие этой контрольной суммы фактиче- без каких-либо изменений на диске. Достаточно просто
ски прочитанным с диска данным, это значит, что один смонтировать существующую ext3 как ext4, и вновь создан-
или несколько блоков метаданных оказались разрушены ные файлы будут размещаться в экстентах, в то время как
или вовсе не были записаны на диск в результате ошибки старые продолжат обрабатываться через модуль косвенной
оборудования. В таком случае транзакция отбрасывается адресации. Особый флаг в inode позволяет драйверу раз-
целиком, а пользователю рекомендуется воспользоваться личать формат inode и поддерживать их сосуществование
e2fsck. в одной файловой системе. Все новые возможности ext4,
Также значительным выигрышем от использования по-
добной защиты журнала является отказ от пошаговой фик-
сации транзакции (запись фиксирующего блока теряет вся-
кий смысл), что может увеличить пропускную способность
журнала более чем на 20%.
В долгосрочной перспективе обсуждается возможность
добавления защиты контрольными суммами для экстентов,
битовых карт, inodes и, возможно, даже каталогов. С по-
явлением контрольных сумм в журнале все выполняется
введением лишь небольшого количества дополнительной
логики – ведь эти структуры при модификации обязательно
проходят через журнал (нельзя не заметить, что от ошибок
диска на местах постоянного пребывания данных такая схе-
ма никоим образом не защищает).

Другие нововведения
Разработчики продолжают постоянно добавлять новые воз-
можности в ext4. Два наиболее ожидаемых – реализация на-
носекундных временных штампов и отслеживание версий
inode (versioning). Эти возможности позволяют достичь аб-
солютной точности при работе с временем доступа к файлу
и отслеживании изменений в нем.
Ext3 располагает тайм-штампами второго порядка, одна-
ко на современных высокопроизводительных процессорах
и системах хранения этого недостаточно. С введением уве-
личенного inode в ext4 появилась возможность записывать
временные штампы с наносекундной точностью, на что до-
статочно 30 бит 32-битного поля штампа. Оставшиеся 2 бита
применяются для расширения эпохи на 272 года.
Клиенты четвертой версии NFS нуждаются в возможнос-
ти обнаруживать изменения в файле, сделанные на стороне

системный администратор январь-февраль 2010 25


Кафедра

основанные на применении экстентов (предразмещение, мендуют сделать резервную копию важных данных с обнов-
многоблочное размещение), будут немедленно доступны ляемого раздела.
для вновь созданных файлов. Поскольку обновленный раздел более не удастся при-
Кроме того, для полной миграции с ext3 на ext4 со вре- монтировать как ext2/3, необходимо убедиться, что вы рас-
менем будет подготовлена специальная утилита, осущест- полагаете необходимым набором ПО для полноценного ис-
вляющая преобразование косвенной структуры адресации пользования новой файловой системы:
в экстентную и увеличивающая размер inode до 256 байт. > e2fsprogs 1.41.6;
В качестве частичной меры переход к экстент-адресации > mount 2.16;
может быть выполнен достаточно просто – с использовани- > ядро Linux от 2.6.28 и выше;
ем процедуры дефрагментации, во время которой файлы > grub 1.96+20090808 (если обновляется загрузочный
не только перемещаются в новые экстенты, но и дефраг- раздел).
ментируются. Эта процедура может работать на смонтиро- Если обновляется раздел ext2, то для начала нужно кон-
ванной ФС. вертировать его в ext3:
Полный переход к ext4 , включая преобразование inodes, sudo tune2fs -j [device]
осуществляется только на отмонтированной ФС, путем ска-
нирования всей файловой системы, переформатирования Перед началом обновления до ext4 рекомендуется сде-
inodes и перехода к экстент-адресации. лать проверку файловой системы на наличие ошибок:
Откат с ext4 обратно к ext3 также возможен, хотя и fsck.ext3 -pfy [device]
не столь очевиден и красив, как обновление ФС. Для этого
необходимо смонтировать раздел с опцией -noextents, ско- Затем включаем все предоставляемые ext4 новые воз-
пировать все файлы во временные, а затем заменить ими можности:
оригинальные. После того как все файлы будут приведе- tune2fs -O extents,uninit_bg,dir_index [device]
ны к косвенной схеме адресации, необходимо с помощью
tune2fs сбросить флаг INCOMPACT_EXTENTS, а затем смон- После чего также рекомендуется пройтись по разделу
тировать ФС как ext3. утилитой fsck:
Для выполнения полной миграции на ext4 с файловых fsck.ext4 -yfpD /dev/sdc1
систем предыдущих поколений (ext2/3) разработчики, не-
смотря на признанную стабильность кода новой ФС, реко- Опция -D заставит fsck заняться оптимизацией ката-
логов – для директорий с поддержкой индексов будет вы-
полнено переиндексирование, для обычных линейных ката-
Сравнительная таблица основных характеристик ФС ext3, ext4 и XFS
логов ext3 – пересортировка и сжатие. Опция -p отвечает
за проверку ошибок, -y заставит утилиту автоматически
ext3 ext4 XFS отвечать согласием на все возникающие в ходе проверки
Предельный 16 Тб 1 Эб 16 Эб вопросы, -f – принудительная проверка даже в случае, когда
размер раздела файловая система выглядит чистой.
Предельный 2 Тб 16 Тб 8 Эб
размер файла Еxt4 на фоне предшественников и конкурентов
Посмотрим на сравнительную таблицу основных характе-
Количество файлов 232 232 264
ристик ext3, ext4 и XFS (как наиболее производительной
Размер inode 128 байт 256 байт переменный
и функциональной, по мнению автора, из современных ФС).
Учет занятых косвенно- экстенты экстенты Как видно, ext4 уступает по многим параметрам даже разра-
блоков блочная схема ботанной более 15 лет назад XFS, не говоря уже о файловых
Учет свободных битовые карты битовые карты B+ деревья системах нового поколения – ZFS и btrfs.
блоков И все же она остается идеальным выходом для систем-
Разрешение секунды наносекунды секунды ных администраторов, годами использующих ext3 как наи-
временных более надежную и хорошо поддерживаемую файловую
штампов систему с богатым набором средств устранения неполадок
Количество 216 не ограничено не ограничено
и восстановления поврежденных данных. Довольно легко
подкаталогов
обновив существующие ext2/3-разделы до новой версии,
пользователи получают для своих хранилищ производи-
Объем под Extended 4 Кб >4 Кб не ограничен
тельную и очень надежную ФС, не имеющую каких-либо
Attributes
явных ограничений типа максимального размера раздела
Дефрагментация отсутствует реализована реализована
или файла. EOF
Индексирование отсутствует реализовано B+ деревья
каталогов 1. Исходные коды ядра Linux версии 2.6.32.
Отложенное отсутствует реализовано реализовано 2. http://ext4.wiki.kernel.org.
размещение 3. Ext4 block and inode allocator improvements – http://ols.
Многоблочное элементарное продвинутое продвинутое fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf.
размещение 4. The new ext4 filesystem: current status and future plans – https://
ols2006.108.redhat.com/2007/Reprints/mathur-Reprint.pdf.

26 январь-февраль 2010 системный администратор


Bugtraq

Уязвимость при расшифровке RC4 и AES Множественные уязвимости в Oracle Database


в Kerberos KDC Программа: Oracle Database 11g версия 11.1.0.7; Oracle
Программа: Kerberos-версии до 1.6.4 и 1.7.1. Database 10g Release 2 версии 10.2.0.3 и 10.2.0.4; Oracle
Опасность: Высокая. Database 10g версия 10.1.0.5; Oracle Database 9i Release
Наличие эксплоита: Нет. 2 версии 9.2.0.8 и 9.2.0.8DV.
Описание: Уязвимость существует из-за ошибки потери Опасность: Высокая.
значимости целочисленных при обработке AES и RC4- Наличие эксплоита: Нет.
шифров, которые короче минимальной ожидаемой дли- Описание: 1. Уязвимость существует из-за ошибки в ком-
ны. Удаленный пользователь может с помощью специ- поненте Listener. Удаленный пользователь может выпол-
ально сформированных данных вызвать переполнение нить произвольный код на целевой системе. Для успеш-
динамической памяти и выполнить произвольный код ной эксплуатации уязвимости приложение должно быть
на целевой системе. установлено на Windows-систему.
URL производителя: web.mit.edu/kerberos/www. 2. Уязвимость существует из-за ошибки в компоненте
Решение: Установите исправление с сайта производи- Oracle OLAP. Удаленный аутентифицированный пользо-
теля. ватель может выполнить произвольный код на целевой
системе.
3. Уязвимость существует из-за ошибки в компоненте
Application Express Application Builder. Удаленный аутен-
Множественные уязвимости в Sun Java System тифицированный пользователь может изменить и про-
Web Server смотреть некоторые данные.
Программа: Sun Java System Web Server 7.0u7, возмож- 4. Уязвимость существует из-за ошибки в компонен-
но, другие версии. те Oracle Data Pump. Удаленный аутентифицированный
Опасность: Высокая. пользователь может изменить и просмотреть данные.
Наличие эксплоита: Нет. 5. Уязвимость существует из-за ошибки в компоненте
Описание: 1. Уязвимость существует из-за ошибки про- Oracle Spatial. Удаленный аутентифицированный пользо-
верки границ данных при обработке OPTIONS-запросов. ватель может изменить и просмотреть некоторые данные.
Удаленный пользователь может с помощью слишком 6. Уязвимость существует из-за ошибки в компоненте
длинного пути в запросе вызвать переполнение сте- Logical Standby. Удаленный аутентифицированный поль-
ка и выполнить произвольный код на целевой системе. зователь может изменить некоторые данные.
Для успешной эксплуатации уязвимости требуется под- 7. Уязвимость существует из-за ошибки в компоненте
держка WebDAV. RDBMS. Удаленный аутентифицированный пользователь
2. Уязвимость существует из-за ошибки при обра- может изменить и просмотреть некоторые данные.
ботке TRACE-запросов. Удаленный пользователь может 8. Уязвимость существует из-за ошибки в компоненте
с помощью специально сформированного запроса вы- Oracle Spatial. Удаленный аутентифицированный пользо-
звать переполнение динамической памяти и получить ватель может изменить и просмотреть некоторые данные.
доступ к потенциально важным данным. 9. Уязвимость существует из-за ошибки в компоненте
3. Уязвимость существует из-за ошибки при обработке Unzip. Удаленный аутентифицированный пользователь
заголовков Authorization в PUT-запросах. Удаленный поль- может изменить и просмотреть некоторые данные.
зователь может с помощью специально сформированно- URL производителя: www.oracle.com.
го запроса вызвать переполнение динамической памяти. Решение: Установите исправление с сайта производи-
URL производителя: www.sun.com. теля.
Решение: В настоящее время с пособов устранения уяз-
вимости не существует.

Повреждение памяти в FASYNC в ядре Linux


Программа: Linux kernel 2.6.28 и более ранние версии.
Множественные уязвимости в Oracle JRockit Опасность: Низкая.
Программа: Oracle JRockit R27.6.5 и более ранние вер- Наличие эксплоита: Да.
сии. Описание: Уязвимость существует из-за ошибки исполь-
Опасность: Высокая. зования после освобождения при обработке дескрипто-
Наличие эксплоита: Нет. ров файлов, с установленным флагом FASYNC. Локаль-
Описание: Обнаруженные уязвимости позволяют уда- ный пользователь может вызвать отказ в обслуживании
ленному пользователю обойти некоторые ограничения или выполнить произвольный код на системе с повышен-
безопасности, вызвать отказ в обслуживании и скомпро- ными привилегиями.
метировать целевую систему. URL производителя: www.kernel.org.
URL производителя: www.oracle.com. Решение: Установите последнюю версию 2.6.31.12
Решение: Установите исправление с сайта производи- или 2.6.32.4 с сайта производителя.
теля.
Составил Александр Антипов

системный администратор январь-февраль 2010 27


Гость номера

Евгений Касперский:
«Наш бизнес – это пятый элемент»
На вопросы читателей «Системного администра-
тора» отвечает генеральный директор компании
«Лаборатория Касперского» Евгений Касперский
Галина Положевец

Евгений Касперский родился в Ново-


российске в 1965 году. Любовь к мате-
матике предопределила его техническое
будущее. Одним из любимых увлечений
Евгения в школьные годы было решение
задачек из математических журналов.
В старших классах посещал факульта-
тивную физико-математическую школу
при МФТИ. Последние два класса учился
в физико-математическом интернате при
МГУ. В 1987 году окончил Институт крип-
тографии, связи и информатики, где по-
мимо математики и криптографии изучал
компьютерные технологии. Специальность –
инженер-математик.

Евгений Касперский после института попал


в многопрофильный НИИ при Министерстве
обороны. Здесь он стал изучать феномен
компьютерных вирусов. Обнаружив на
своем рабочем компьютере вирус Cascade,
Евгений разобрал его и придумал первое
в своей жизни компьютерное противоядие.
Затем стал коллекционировать вредонос-
ные программы, создавая к ним лечащие
модули. В 1991 году перешел на работу
в компанию «КАМИ», где вместе с группой
единомышленников развивал антивирус-
ный проект Antiviral Toolkit Pro – прототип
будущего Антивируса Касперского. 21 июля
1997 года «Лаборатория Касперского» была
зарегистрирована как самостоятельная
компания. Евгений стал ее соучредителем.
В 2007 году назначен на пост генерального
директора «Лаборатории Касперского».

Евгений Касперский – один из ведущих


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

28 январь-февраль 2010 системный администратор


Гость номера

– Нужен ли антивирус в защищен- – Представьте, что наступило свет- назвать оное вирусом, то каково
ной операционной системе, если лое будущее, все операционные ваше мнение об их присутствии
она работает правильно и не содер- системы и сетевые протоколы – в банкоматах? Технически откуда
жит уязвимостей? без ошибок, неуязвимые. И про- они там берутся?
– Во-первых, под понятием «антиви- граммисты не делают ошибок. Ваша – Действительно, в прошлом году было
рус» сейчас подразумевается защита компания останется без работы? зафиксировано несколько атак на бан-
не только от компьютерных вирусов, Если да, то в какой области будете коматы различных банков и систем.
но от всевозможных киберугроз. При- применять свои силы? Атаки были инсайдерские – «закладка»
чем угрозы различаются в зависимости – Представьте мир без футбольных ху- попадала в банкомат во время его из-
от типа электронных устройств. Допу- лиганов. Это возможно только при вы- готовления. Злоумышленники провели
стим, для мобильных телефонов суще- полнении двух условий: либо запретив атаку с помощью типичной троянской
ствует риск не только заражения, но и футбол, либо запретив людей. программы, особенностью которой
потери конфиденциальных данных – Однажды меня спросили, что вы было то, что она «заточена» именно
никому не хочется, чтобы его адресная будете делать, когда не будет виру- под ОС для банкоматов. И люди, ко-
книжка попала в чужие руки. Поэтому сов? Я ответил: «Я буду делать то же, торые писали программу, точно знали
в нашем решении для смартфонов что и метеорологи, когда наступит ис- протокол работ, по которому идет про-
и КПК одна из важнейших составляю- ключительно хорошая погода. Или чем цесс считывания пластиковых карт.
щих – модуль «Антивор». Таким обра-
зом, даже защищенной операционной
системе – например, Symbian 9 – тре-
буется решение по безопасности.
Ответ на вопрос, нужен ли антивирус
И, наконец, проблема с защищен- защищенной операционной системе,
ными операционными системами за-
ключается в том, что они неудобны однозначен: нет, потому что защи-
для разработчиков программного
обеспечения. Именно поэтому для них
щенная ОС мало кому нужна
выпускается в разы меньше новых
приложений и сервисов. Дело в том, займутся пожарники, когда не будет После этого случая руководители
что все приложения должны обладать пожаров? В домино играть». компаний, выпускающих банкоматы,
цифровой подписью издателя, ведь На самом деле я бы в любом случае оказались в тупиковом положении:
пока единственная схема работы без- нашел себе занятие. Меня бы захва- не будет же над каждым программи-
опасной ОС заключается в запуске ис- тила другая идея, и без работы я бы стом стоять человек с ружьем!
ключительно доверенных программ. не остался. Правда, были в России случаи,
Доверенные приложения долж- когда банкоматы взламывали извне.
ны быть прописаны в неком реестре. – Какой антивирус посоветуете, Первый подобный эпизод произошел
Чтобы добавить в него свой продукт, если используется ОС Solaris 10 в Уфе в ноябре 2008-го. Ребята полу-
разработчики софта вынуждены по- c поднятым Trusted Extensions? чили физический доступ к банкомату,
лучать «добро» от производителей – Ребята, не знаю. Я не большой спе- «хакнули» Windows, установили курс
ОС либо в сертификационном центре. циалист в этих вопросах. Заходите доллара на уровне 1500 рублей и об-
В Symbian, например, решения прини- к нам на форум (http://www.kaspersky. меняли по нему 800 долларов, полу-
маются месяцами – виноват длинный ru/support/forums или http://forum. чив таким образом более миллиона
бюрократический процесс. И ничего kasperskyclub.ru), вам обязательно рублей. Однако проделывали они эту
не поделаешь. помогут. Я же на «солярке» никогда аферу под видеокамерой, потому их
Разрабатывать приложения для за- не работал. быстро обнаружили.
щищенной операционной системы
не так удобно, как для свободной не- – Как быть, если я хочу про- – Кто по закону должен нести от-
безопасной ОС. Все, точка. Поэтому верить файл размером более ветственность за несвоевременное
ответ на вопрос, нужен ли антивирус 1 мегабайта на странице http:// удаление троянской программы?
защищенной операционной системе, www.kaspersky.ru/scanforvirus? Эта – Хороший вопрос! Нет такого термина,
однозначен: нет, потому что защищен- услуга похожа на PR-акцию, ведь как «несвоевременное удаление». Од-
ная ОС мало кому нужна. скачиваемые в сети архивы по раз- нако между банком и клиентом обыч-
Однако я верю в победу защищен- меру часто больше мегабайта. но заключается договор об оказании
ных ОС в узких сегментах, допустим, – Здесь нет никакого подвоха. Огра- услуг. И если банк нарушает какой-
для банкоматов. Или, к примеру, в во- ничение по размеру установлено либо из пунктов договора, то на него,
енном секторе – я более чем уверен, для того, чтобы не грузить наш сервис. конечно, можно подать в суд.
что в России при выполнении военных,
космических, ядерных программ ис- – Летом пострадал от того, что поль- – Заключают ли банки с вашей ком-
пользуются собственные разработки, зовалась банкоматом ATM Diebold панией соглашение об антивирус-
а не «массовые» операционные сис- Opteva 720, в котором была заклад- ном обслуживании ATM-машин (бан-
темы. ка, скорее всего программная. Если коматов)?

системный администратор январь-февраль 2010 29


Гость номера

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

30 январь-февраль 2010 системный администратор


Гость номера

сить пользу человечеству, потому что Мы используем гибкий и довольно – Если вам надо безопасно передать
не сможет поднять в воздух ни одного эффективный инструмент для борьбы файл с одного компьютера в Интер-
пассажира. с пиратством – активационные коды, нете на другой, каким способом это
которые слишком «распирачены», по- сделаете, чтобы ни файл не подме-
– Собирается ли «Лаборатория Кас- падают в наш блэк-лист, после чего мы нили, ни вирус не приписали, ни со-
перского» бороться с «социальны- их блокируем. Вследствие чего стано- держимое не просмотрели?
ми вирусами», перегружающими вится невозможным получить апдейты – Отправлю по корпоративной почте –
сайты? антивирусных баз. Тогда как всем по- это гарантия безопасности при усло-
– Социальный вирус – неправильный нятно, что антивирус без обновлений – вии того, что стандартом является ис-
термин, он не технологический. Есть не антивирус. пользование VPN-соединения.
спам, с ним боремся. С компьютерным И, кстати, конфиденциальную ин-
«вирьем» – боремся. Делаем защи- – Вы сами когда-нибудь вирусы пи- формацию я никогда так не пересы-
ту для мобильников от воров. То есть сали? Если да, то какие? лаю. Только по обычной почте или
наша работа – защищать пользовате- – Меня замучили этим вопросом! через службы экспресс-доставки,
лей от компьютерных информацион- Да, я писал их три раза. Первый раз в бумажном виде. С конфиденциаль-
ных угроз. году в 1992-1993-м, когда появился ной информацией торопиться не надо,
Бороться же с различными трол- первый конструктор вирусов. У меня ее подождут. Дорогие вопросы быстро
лями, с «неправильным» контентом тогда была идея написать универсаль- не решаются.
на сайтах все-таки не наше дело. ную «лечилку». Я штук двадцать виру-
Мы не можем заниматься всем. сов сделал и уничтожил. – Хорошей практикой у многих
И не хотим заработать деньги всего Второй случай – объявили кон- антивирусных компаний является
мира, это не является нашей целью. курс на самую маленькую программу, выпуск обрезанной версии антиви-
Кстати, то, что мы не хотим зарабо- которая может делать свои копии. русного продукта для персональ-
тать все деньги мира, нам очень сильно Я ухитрился втиснуться в 13 байт: при ного (домашнего) использования,
помогает. Мы не осуществляем прямых запуске эта вирусоподобная прог- где пользователь получает при-
продаж, работаем только через парт- рамма под MS-DOS создавала свою емлемый функционал и простые
неров – наша сеть объединяет уже бо- копию в файле с именем «5». Если рычаги управления бесплатно или
лее 700 партнеров первого уровня бо- файл переименовать в «5.exe» и сно- за ежедневный просмотр рекламы
лее чем в 100 странах мира. Мы всегда ва запустить, создавалась еще одна более серьезного продукта. Есть ли
делимся, и нас за это очень любят. копия. Естественно, потом я убил эту какие-нибудь задумки у ваших мар-
штуку. Написал на форуме о своих кетологов на этот счет?
– Были ли «Лабораторией Кас- подвигах и очень удивился, когда че- – Мы думали об этом и пришли к мне-
перского» зафиксированы случаи рез год мне прислали точно такую же нию, что технически можно сделать
продажи поддельных антивирусов программу! все что угодно. Но нужно ли это нам?
от «Лабораторией Касперского»? А третий случай произошел, когда Дело в том, что самое важное и доро-
Какие предпринимались действия? журналисты меня уже вконец замучи- гое, что есть в антивирусе, – это сис-
– Да сколько угодно! В Индии и Китае ли! Я подошел к доске и фломастером тема распространения антивирусных
это массовое явление. По экспертным написал bat-вирус, после чего сразу обновлений, и именно за нее платит
оценкам, около 50% «коробочной» стер свои записи. Все! В остальном пользователь. Тогда как бесплатные
продукции в Китае – контрафакт. я чист. антивирусы выпускают всего один ап-

Уникальная экспедиция лыжниц из восьми стран Содружества наций стартовала 19 ноября 2009 года. Команда прошла 900 км от побережья Антарктиды к Южному полюсу. Новый год
на станции «Амундсен-Скотт» лыжницы встречали вместе с Евгением Касперским и журналистами из разных стран мира

системный администратор январь-февраль 2010 31


Гость номера

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

зопасность Главное здесь – найти правильных


людей и четко определить задачи, ко-
торыми они будут заниматься. И пусть
ной воды, один литр в которой дается ляется создание системы по защите они исполняют их любым доступным
в подарок. А я выпил только полови- информации вообще, которая будет способом. Но без «косяков». По край-
ну. Что мне делать? Ничего. Так же и технологически выдающейся по срав- ней мере, со мной два раза подряд
в нашем случае: есть вторая лицензия, нению со своими аналогами. Целью «косячить» нельзя!
которая идет в подарок, не хочешь – также является ее продвижение на все
не используй. мировые рынки и закрепление на ли- – Вы долго подбирали команду?
дирующих позициях. – Всю свою бизнес-жизнь. И продол-
– Когда все новые фишки KIS 2010 И это именно не мечта, а план, ко- жаю подбирать, потому что правиль-
появятся в корпоративной версии? торый совершенно реализуем. Мы уже ных людей не так много. При этом я
– Новая корпоративная версия продук- являемся многолетним лидером стараюсь разделить ответственность
та будет сильно отличаться от суще- на российском рынке, а также в ряде между всеми. Чтобы не просто делали,
ствующей, поскольку сценарии работы стран постсоветского пространства. как начальник сказал, а учились рабо-
в корпоративной сети другие, нежели Если взять консьюмерский сегмент, тать самостоятельно, предлагали свои
у домашних пользователей. Сейчас мы то мы №1 в Германии. Если говорить идеи. Причем самый шик, когда есть
разрабатываем решения, которые вы, о ритейле, то мы занимаем первую по- интересная задачка, и ты ее препод-
надеюсь, очень скоро увидите. Бета- зицию во Франции, Германии, Испании носишь таким образом, что сотрудники
версия появится уже в этом году. и, по моим личным ощущениям (к сожа- сами приходят и говорят: «Женя, а да-
лению, по этой стране пока нет точной вай мы это сделаем!»
– Почему бы в «Антиспаме» не де- статистики), в Китае. В Соединенных
лать анализ заголовков писем, что- Штатах «Лаборатория Касперского» – Вы «играющий тренер»?
бы для подозрительных писем ска- вышла на второе место. По отчетам – Много лет я ежедневно по 12 часов
чивать только заголовки, не тратя IDC, в 2009 году мы стали 4-й компани- «долбал» вирусы и создавал базу
трафик пользователей? ей в мире среди производителей соф- данных. Сегодня же основную часть
– Такой сервис у нас есть. Компонент та в сфере безопасности по объему времени отнимают деловые поездки.
Анти-Спам, который входит в состав выручки. К тому же появилось немало молодых
Kaspersky Internet Security 2010, ис- талантливых ребят, зачем я буду им
пользует технологию эвристического – Есть страны, где вас нет? мешать?
анализа технических заголовков пись- – Нет таких стран. Мы везде, где есть В те годы, когда приходилось раз-
ма. Анализатор распознает ошибки Интернет, и даже там, где нет наших вивать бизнес, создавать междуна-
в технических заголовках, в которых прямых партнеров или офисов. До- родную партнерскую сеть, я работал

32 январь-февраль 2010 системный администратор


Гость номера

и в технической поддержке компании. светло и спать приходится в специаль- Компьютерный андеграунд 2009‑2010:
Я многое начинал сам делать, а с го- ных очках. Фантастическое место! итоги и перспективы
дами передавал свои функции другим. Под таким названием «Лаборатория Кас-
Сейчас я в основном занимаюсь – Вы когда-то назвали лучшим вло- перского» провела недавно большую пресс-
пиаром и разработкой стратегии ком- жением денег издание своей первой конференцию в Москве. Об итогах и перспек-
пании. Я гарант бренда: гарантирую, книги. В последние годы пишете тивах рассказывали – Евгений Касперский,
что мы делаем и что мы не делаем. в основном путевые заметки. Со- руководитель центра глобальных исследова-
бираетесь ли написать что-нибудь, ний и анализа угроз Александр Гостев и ру-
– Путешествия стали частью вашего связанное с работой компании? ководитель лаборатории контентной фильтра-
образа жизни. Если бы не профес- – Да, есть идея написать книгу, причем ции Андрей Никишин.
сия, продолжали бы так же активно в сотрудничестве с ключевыми сотруд- Основные тенденции в сфере угроз – со-
познавать мир? никами компании. Книга будет о нашем кращение темпов роста вредоносных про-
– Мои путешествия – вынужденные, опыте успешной разработки продук- грамм, изменение направления вектора атак,
они связаны с работой, но мне понра- тов. Заодно дадим практические реко- усложнение технологий вирусописателей,
вилось. мендации. повышение уровня глобальных эпидемий,
разнообразие мошеннических схем, рост по-
– Расскажите, пожалуйста, об экспе- – Что вы больше всего цените в жиз- пулярности псевдоантивирусов.
диции в Антарктику, которую спон- ни? На первом месте – китайская киберпре-
сировала Лаборатория Касперского. – Людей, с которыми работаю. ступность, на втором – США, на третьем – Гер-
Ее цель? мания, на четвертом – Голландия, на пятом –
– Группа товарищей, которые случай- – Что нравится в людях, а что не при- Россия.
но оказались женского пола, захотела емлете? По числу потенциальных жертв киберпре-
пробежаться с ветерком в Антаркти- – Люблю открытых людей. Не люблю – ступников по-прежнему лидирует Китай, сле-
ку. Объединяющий лозунг экспедиции глупых и вороватых. дом за ним идут США, Германия, Великобри-
звучал примерно так: за чистоту при- тания и Россия.
роды и против глобального потепле- – Ваш прогноз: как будет развивать- Особо выделялись такие угрозы как
ния. Экспедиция также была призвана ся ИТ-отрасль в нынешнем году? Sinowal (буткит), TDSS и Clampi. Главной эпи-
отметить 60-летие создания Содруже- – Кризис не так сильно затронул ИТ, демией года стал червь Kido.
ства наций – объединения независи- как другие отрасли. Несмотря на то Больше всего уязвимостей было обна-
мых государств, в которое входят Ве- что бюджеты компаний сократились, ружено в решениях Microsoft, Apple, Adobe
ликобритания и почти все ее бывшие я не исключаю, что пойдет обратная и Sun. Самыми распространенными стали
доминионы, колонии и протектораты. волна. Бизнес понял, что деньги надо уязвимости в продукте компании Apple –
По этой причине в экспедиции прини- экономить и подходить к вопросу зат- QuickTime 7.x.
мали участие девушки только из стран, рат более рационально. Когда страны Что касается мобильных ОС, то для iPhone
входящих в состав Содружества. начнут приходить в себя после кризиса, были обнаружены первые вредоносные про-
В общем, у девочек лыжи были, руководство компаний осознает, что, граммы (черви Ike), для Android создана
а «на ветерок» им не хватало. Одна сокращая бюджет на ИТ, они либо ру- первая шпионская программа, для Symbian-
из них, сингапурская китаянка, наш шат бизнес, либо делают его неэффек- смартфонов – зафиксированы первые инци-
клиент, позвонила в локальный офис тивным, либо раздувают общие бюдже- денты с подписанными вредоносными про-
с просьбой о помощи. А разве мож- ты. И тогда пойдет обратный процесс. граммами.
но отказаться от такой грандиозной Кроме того, что такое ИТ в бытовом Еще одно событие 2009 года – первая тро-
затеи? Так мы и стали генеральными смысле? Это коммуникации и развле- янская программа Backdoor.Win32.Skimer.
спонсорами мероприятия. чения. Один из сегментов, от которого В 2010 году станет больше атак через фай-
В результате эту экспедицию даже человек, жаждущий хлеба и зрелищ, лообменные сети.
признали главным антарктическим со- откажется в последнюю очередь. На рынке ботнет-услуг ожидается появле-
бытием сезона. Я называю наш бизнес одним ние серых схем. Основными причинами воз-
из пяти элементов, без которых люди, никновения эпидемий станут обнаруженные
– Что вы пережили сами в этом пу- хоть зарежьте их, не обойдутся никак! уязвимости. Если таковых не будет, 2010 год
тешествии? Вот эти элементы: вода, еда, развлече- может оказаться одним из самых спокойных
– Улетая оттуда, я понял, что Антар- ния, коммуникации, безопасность. Ин- за последние годы.
ктида меня укусила. Я хочу вернуться тернет – это развлечения, коммуника- Может упасть активность поддельных
назад. Там нет запахов и звуков, толь- ции, а мы занимаемся безопасностью. антивирусов. В области веб-сервисов темой
ко три краски – синяя, белая и чер- Поэтому думаю, что развитие ИТ будет года должен стать Google Wave и атаки через
ная. Организм очищается полностью. только набирать обороты. данный сервис.
Нет ощущения расстояния: кажется, Да, продажи компьютеров падают, Для iPhone и Android год ожидается
что до горы рукой подать, а она нахо- но посмотрите, как растут продажи но- достаточно сложным. Растущая популяр-
дится от базы на расстоянии 20 кило- утбуков! Если у человека сломался ав- ность телефонов на базе Android в Китае
метров. томобиль, он пересаживается на трол- и слабая технология контроля публикуемых
День отличается от ночи только тем, лейбус или метро, если же у него сло- приложений приведут к новым вирусным ин-
что ночью тени длиннее. Постоянно мался ноутбук, он покупает новый! EOF цидентам.

системный администратор январь-февраль 2010 33


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

Визитка

ИГОРЬ ШТОМПЕЛЬ, инженер, системный администратор. Сфера


профессиональных интересов – свободное программное обеспечение

Что «под капотом»?


Работа с HDD и файловыми системами из консоли
Можно использовать ПО с графическим интерфей-
сом, а можно решать задачи более оптимизирован-
но – из командной строки, всегда зная, что проис-
ходит «под капотом»

Сегодня нередко можно услышать мнение о том, что лучше того, возможно преобразование из одного способа адре-
и удобнее решать задачи администрирования с использо- сации в другой:
ванием графического интерфейса. Попробуем разобрать- LBA = ((c * H + h) * S) + s — 1
ся, почему это так, на примере работы с жесткими дисками
(в том числе и файловыми системами). Все программное где:
обеспечение, о котором пойдет речь, является свободным c – номер цилиндра,
(ориентировано на операционные системы семейства *nix). H – количество головок,
h – номер выбранной головки,
Устройство жестких дисков и файловые системы S – количество секторов в одном треке,
Предварительно рассмотрим устройство жесткого диска s – номер сектора.
и строение файловых систем. Что касается жесткого диска, Последнее впервые было определено в проекте стандар-
то будем вести речь именно об устройстве или параметрах та ATA-1, представленном еще в 1994 году Американским
внутренней организации. И только в том объеме, который национальным комитетом по стандартизации и аккредита-
необходим для дальнейшего изложения материала. Послед- ции X3 (American National Standard of Accredited Standards
нее справедливо и для строения файловых систем. Committee X3) [1].
Как показано на рис. 1, жесткий диск (или накопитель Секторы образуют дорожку, которая представляет со-
на жестких магнитных дисках Hard Disk Drive) состоит из па- бой кольцевую область. Более крупной единицей геометрии
кета дисков (пластин), которые приводятся в движение жесткого диска является цилиндр. Он состоит из дорожек,
шпиндельным двигателем, а также считывающих головок располагающихся одна под другой. Зная это, легко посчи-
и привода. Пластины являются той составляющей, которая тать объем емкости совокупности дорожек одного цилиндра:
ответственна за хранение информации. Они, как правило, Для получения наглядного представления о геометрии
изготавливаются из алюминия, стекла или керамики. Маг- жесткого диска можно ознакомиться с рис. 2.
нитный слой, покрывающий последние, является ферромаг-
Емкость цилиндра = количество головок * количество секторов
нитным материалом (окиси железа) или более прочным – на дорожке * количество байт в секторе
окиси хрома. Для чтения или записи данных применяются
магнитные головки. Первым физическим сектором на жестком диске явля-
Чтобы получить доступ к пространству пластин, его необ- ется главная загрузочная запись, или Master Boot Record
ходимо каким-либо образом адресовать. Тут мы и подходим (MBR). Она содержит таблицу разделов и исполняемый код,
к такому понятию, как геометрия жесткого диска. Минималь- который позволяет определить активный раздел и загру-
ная единица адресного пространства – сектор (его размер, зить из него загрузочную запись. Сектор, имеющий адрес
как правило, варьируется в зависимости от устройств в та- цилиндр 0, головка 0, номер 1, – это Master Boot Sector (MBS,
ких пределах: 512, 1024 и 2048 байт). Для адресации послед- загрузочный сектор). Его содержимое совпадает с MBR.
них применяются два способа: CHS (cylinder-head-sector, Следующим шагом развития в данном направлении ста-
цилиндр-головка-сектор) и LBA (linear block addressing, ли- ло создание формата GUID Partition Table (GPT) для раз-
нейная адресация блоков). мещения таблицы разделов на жестком диске. Последний
При использовании CHS адресация осуществляет- определен в стандарте Extensible Firmware Interface (EFI,
ся посредством номеров цилиндра, головки и сектора, Расширяемый микропрограммный интерфейс). EFI был
т.е. по физическим признакам, а при использовании LBA – предложен как замена BIOS компанией Intel (разработка на-
числом, которое является абсолютным номером. Кроме чата в 1998 году), а сейчас EFI курируется Unifed EFI Forum

34 январь-февраль 2010 системный администратор


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

Работать из консоли или ис-


пользовать графический интер-
фейс? Вот в чем вопрос

или UEFI (создан в 2005 году) [2]. Спецификации последней Взаимодействие файловых систем в GNU/Linux невоз-
доступны по адресу http://www.uefi.org/specs. можно без общего интерфейса для них. Ядро (далее будет
Итак, GPT – это интерфейс между микропрограммами, употребляться термин Linux, а для обозначения операцион-
оборудованием и операционной системой. При его исполь- ной системы – GNU/Linux) предоставляет последний. По-
зовании, как показано на рис. 3, в начале диска находит- этому нет необходимости использовать низкоуровневый
ся MBR (LBA0). Остался на месте в целях совместимости интерфейс каждой отдельной системы, достаточно вос-
и безопасности – например, чтобы какая-либо утилита, ори- пользоваться системными вызовами (например, такими,
ентированная на работу с MBR, не перезаписала диски как open (), read (), write ()). На практике это может выгля-
с GPT. Следом за ним начинается Оглавление таблицы раз- деть следующим образом: копирование данных с устройст-
делов (Partition Table Header) – это и есть начало GPT (LBA1). ва с файловой системой ext2 на устройство с ext3 или пере-
GPT основан на использовании более современной системы мещение.
адресации LBA, а MBR – CHS (о данных системах адресации В роли данного общего интерфейса выступает VFS (Virtual
мы говорили выше). За оглавлением GPT следует таблица File System, виртуальная файловая система). Это элегант-
разделов. Как в начале, так и в конце диска записываются ное и удобное решение, но в то же время достаточно слож-
оглавление и таблицы разделов, обеспечивая дублирование. ное. Как сказал Роберт Лав, один из разработчиков Linux:
Поскольку мы будем рассматривать в том числе програм- «…сделать так, чтобы общие системные вызовы работали
мное обеспечение для работы с файловыми системами, не- для всех поддерживаемых файловых систем и физических
обходимо рассмотреть принципы их организации (речь идет сред хранения данных, – задача не тривиальная»[3]. Кстати,
о ext2/ext3). получить представление, насколько сложен процесс раз-

Рисунок 1. Устройство жесткого диска Рисунок 2. Геометрия жесткого диска

системный администратор январь-февраль 2010 35


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

работки и поддержки файловой системы на примере ext4, на блоки, размер которых кратен размеру сектора – 1024,
можно из интервью, которое дал Тед Цо (ответственный 2048 или 4096.
за подсистему ext4) [4].
Помимо общего интерфейса для работы с системными Работаем с файловой системой
вызовами, VFS еще и дает общую базу или файловую модель. Начнем, пожалуй, с получения статистической информации
Последняя состоит из набора структур данных (их также на- о файловой системе. Для этого воспользуемся утилитой df,
зывают объектами, а саму VFS объектно-ориентированной, которая входит в пакет GNU Core Utilities (coreutils), вклю-
хотя и реализованной на С.). Можно выделить четыре типа чающий основные утилиты [6]. Итак, командуем:
базовых объектов: суперблок (superblock), файловый ин- df
декс (inode), представление элемента каталога (dentry) и от-
крытый файл, связанный с процессом (file). У меня был отображен вывод, приведенный на рис. 4.
Суперблок содержит информацию с описанием конкрет- У вас вывод может несколько отличаться (например, в зави-
ной файловой системы. Без него не может быть реализова- симости от количества смонтированных файловых систем).
на ни одна файловая система в контексте VFS. Структура Итак, утилита отобразила:
суперблока определена в заголовочном файле linux/fs.h. > файловую систему (например, /dev/sda2);
Файловый индекс хранит информацию из дисковых индек- > количество блоков (26004256 или чуть более 25 Гб
сов (без нее невозможно работать с файлами и каталогами). (26004256/размер блока));
Структура файлового индекса также определена в заголо- > количество используемых блоков (20674212);
вочном файле linux/fs.h. Элемент каталога – это определен- > количество свободных блоков (4009100);
ная часть пути (например, /etc/fstab), в роли которой могут > количество используемых блоков в процентах (84%);
выступать обычные файлы (последовательность байтов). > точку монтирования (/).
Структура файлового индекса также определена в заголо- Чтобы вывод был отображен в так называемом human-
вочном файле linux/dcache.h. Объект file используется для readable формате, надо использовать опцию -h (размер ис-
представления (храниться в оперативной памяти) файлов, пользуемого и доступного пространства будет отображать-
которые открыты процессом. Как и структуры суперблока ся в Мб и Гб, а не блоках):
и файлового индекса, структура file определена в заголо- df -h
вочном файле linux/fs.h.
Если посмотреть на внутренние структуры ext2/ext3 Соответственно, варьируя опции, можно получать раз-
(мы не будем их описывать, так как Владимир Мешков под- личные выводы (-i для отображения информации о фай-
робно описал архитектуру ext2 [5]. Логическая организация ловых индексах (inode), -T добавит в вывод для каждой
ext3 принципиально не отличается от ext2. Основное нов- файловой системы ее тип, -k вместо блоков размер будет
шество ext3 – поддержка журналирования), то можно уви- отображаться в килобайтах).
деть реализацию файловой модели, о которой мы говорили Для получения дополнительной информации можно ис-
выше. Лишь еще раз заострю внимание: при использовании пользовать команду:
ext2 все пространство раздела или жесткого диска делится df -- help

Если необходимо в каком-либо разделе создать фай-


Рисунок 3. GUID Partition Table ловую систему, то для этого надо использовать команду
mkfs (make a filesystem). Mkfs является оберткой (wrapper)
для различных утилит, ориентированных на создание фай-
ловых систем. Чтобы получить полный список данных ути-
лит, необходимо:
> ввести в консоли команду mkfs;
> затем дважды нажать клавишу табуляции.
Полученный вывод представлен на рис 5. Как видно,
в подобных командах через точку указывается тип файло-
вой системы, с которыми они работают.
Для создания в разделе /dev/sda1 файловой системы
ext3 необходимо дать команду:
mkfs -t ext3 /dev/sda1

Если опция -t не используется, то по умолчанию создается


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

36 январь-февраль 2010 системный администратор


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

Если бы мы использовали опцию -V, то получили бы вы- Для создания образов дисков CD и DVD можно исполь-
вод во время создания файловой системы подробной ин- зовать команды: dd и mkisofs. Рассмотрим первую из них.
формации о данном процессе, включая все команды. Предположим, что файловая система диска, с которого не-
Для создания файловых систем ext2/ext3 можно при- обходимо снять образ, смонтирована в каталог /dev/cdrom.
менять команду mke2fs. После того как файловая система Тогда даем команду:
в разделе /dev/sda1 создана, необходимо ее смонтировать. dd if=/dev/cdrom of=/home/user/image.iso
Для этих целей воспользуемся командой mount. В общем
виде синтаксис команды выглядит следующим образом: В данном случае файл с итоговым образом – image.iso бу-
дет создан в каталоге /home/user. Но использование dd име-
mount -t [опции] [-t тип файлововой системы] ↵
[-o опции монтирования] устройство точка_монтирования ет свои недостатки – чтение пустых секторов. А значит, если
создается образ диска CD, условно 650 Мб, на котором объ-
Итак, смонтируем вновь созданную файловую систему: ем информации лишь 100 Мб, то итоговый образ будет иметь
mount -t ext3 /dev/sda1 /mnt/sda1 размер 650 Мб. Поэтому воспользуемся утилитой mkisofs:
Указанные опции означают:
В данном случае раздел /dev/sda1 с файловой системой
mkisofs -R -J -input-charset utf8 ↵
ext3 будет смонтирован в каталог /mnt/sda1 (точка монтиро- -o /home/user/image.iso /dev/cdrom
вания). Кстати, если дать команду mount без параметров,
то она осуществит вывод списка всех смонтированных фай- -R – файловая система RockRidge (для поддержки длин-
ловых систем. ных имен файлов);
Процесс отмонтирования данного раздела будет выгля- -J – файловая система Joilet (для поддержки длинных
деть следующим образом: имен файлов; потребуется, например, если диск будет
umount /dev/sda1 воспроизводиться под MS Windows);
-input-charset – определяет кодировку, на базе которой
Если по какой-либо причине раздел не отмонтировался, файлам давались имена. Как правило, использовать эту
то можно повторить данную команду с опцией -l: опцию не требуется, но иногда необходимо;
umount -l /dev/sda1 -o – указывает файл, в который будет записан образ диска.
Несколько слов о том, как смонтировать получившийся
что позволяет произвести «ленивое» отмонтирование. образ. Чтобы смонтировать получившийся образ (image.iso)
Как сказано в руководствах (для вывода: man umount), в каталог /mnt/cdrom, даем команду:
файловая система будет отключена из иерархии файловых mount -t iso9660 -o loop /home/user/image.iso /mnt/cdrom
систем, а все ссылки на нее будут удаляться в процессе ее
освобождения. Как видно, единственным отличием от указанных выше
Для автоматического монтирования данного раздела способов монтирования файловых систем является исполь-
при каждой загрузке операционной системы надо отредак- зование опции -o loop. Она позволяет использовать файл
тировать конфигурационный файл /etc/fstab, который со- как блочное устройство (псевдоустройство).
держит информацию о файловых системах и устройствах. Дополнительной опцией работы с файловыми система-
Для этого добавим в него следующую строку: ми из консоли является возможность создания RAM-диска.
/dev/sda1 /mnt/sda1 ext3 defaults 1 1 Для этого воспользуемся уже знакомой командой mkfs.
Для начала выведем список зарезервированных уст-
Рассмотрим внесенные изменения подробнее. Вначале ройств RAM (виртуальная файловая система, призванная
мы указали наименование раздела – /dev/sda1, затем точку ускорить работу с временными файлами):
монтирования – /mnt/sda1. Потом файловую систему – ext3, ls -l /dev/ram*
опции монтирования – defaults (для ext3 – это rw (чтение/за-
пись), suid (разрешены операции с битами suid, sgid), dev В моей системе (Trisquel GNU/Linux 3.0) по умолчанию
(распознавать специальные блочные файлы), exec (разре- создано 16 дисков RAM, которые не используются. Отфор-
шено запускать исполняемые файлы), auto (автоматическое матируем один из них. Для этого даем команду:
монтирование при загрузке или по команде mount с опци- mkfs -t ext3 /dev/ram1 65536
ей -a для монтирования всех файловых систем, прописан-
ных в рассматриваемом конфигурационном файле), nouser Будет использоваться виртуальное устройство /dev/ram1.
(только root сможет смонтировать файловую систему), Последняя цифра означает, что выделяется 64 Мб из опера-
async (отсутствуют синхронные операции чтения/записи)). тивной памяти.

Рисунок 4. Вывод команды df Рисунок 5. Вывод списка утилит оболочки mkfs

системный администратор январь-февраль 2010 37


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

После форматирования необходимо подключить данный tune2fs -m 0 /dev/sda1


виртуальный диск. Для этого сначала создадим точку монти-
рования, а затем примонтируем RAM-диск: Добавим файл журнала и тем самым превратим ext2
в ext3:
mkdir -p /mount/ramdisk && mount /dev/ram1 ↵
/mount/ramdisk -o defaults,rw tune2fs -j /dev/sda1

Подробнее о создании RAM-диска можно прочитать в со- Кстати, доступно три режима журналирования для ext3:
ответствующих источниках [7]. Writeback – журнал записывается информация об из-
Для настроек файловых систем семейства ext использу- менении файловой системы (метаданные). Целостность
ется утилита tune2fs. Замечу, что ряд операций с использо- данных не гарантируется.
ванием данной утилиты стоит осуществлять только на от- Оrdered – похож на предыдущий режим, за исключени-
монтированном разделе. ем того, что гарантируется: «запись данных в файл осу-
Программа tune2fs позволяет делать следующее: ществляется до записи информации об его изменении».
> настройка проверки диска после определенного ряда Целостность данных также не гарантируется.
операций монтирования (например, при загрузке); Journal – полное журналирование (метаданные и пользо-
> добавление файла журнала и настройка его парамет- вательские данные). Целостность данных гарантируется
ров (можно использовать для перевода ext2 в ext3); при хранении журнала на отдельном разделе/диске [8].
> изменение зарезервированного за суперпользовате- Задать режим журналирования можно либо командой:
лем дискового пространства;
mount /dev/sda1 /mnt/sda1 -t ext3 -o [data=writeback ↵
> получение информации из суперблока; / data=ordered / journal]
> изменение метки файловой системы.
Приведем примеры использования tune2fs. Например, либо в /ect/fstab.
необходимо получить информацию из суперблока (как по- Дополнительную информацию можно получить в стра-
казано на рис. 6). Для этого командуем: ницах руководств команды mount, в разделе FILESYSTEM
tune2fs -l /dev/sda1 SPECIFIC MOUNT OPTIONS.
Для выявления ошибок и по возможности их исправления
Кстати, для вывода данных о файловой системе из су- применяется команда fsck (размещает все обнаруженные
перблока можно использовать также следующую команду: поврежденные данные в каталог /lost+found). Эта команда
dumpe2fs /dev/sda1 также является своеобразной оболочкой для других утилит.
Если вы проделаете те же операции, что и для команды mkfs
Далее убираем 5-процентное резервирование диско- (при выводе списка утилит – см. выше), заменив mkfs на fsck,
вого пространства для суперпользователя, создающееся то увидите список всех утилит (fsck.ext2, fsck.ext3 и т.д.).
при форматировании в ext3: Приведем несколько примеров использования fsck. Ука-
жем, что при проверке необходимо исправлять ошибки ав-
томатически:
Рисунок 6. Вывод информации, хранящейся в суперблоке
fsck -a /dev/sda1

или запрашивать подтверждение на исправление ошибок:


fsck -r /dev/sda1

Добавив опцию -С, мы получим вывод индикатора с про-


центами выполнения проверки.
Осуществить сканирование всех файловых систем
из /etc/fstab за один раз можно так:
fsck -A

С помощью утилиты debugfs из набора e2fsprogs можно


осуществлять отладку файловой системы (ext2, ext3 и ext4).
Инструмент предоставляет прямой доступ к структурам дан-
ных файловой системы (помните, мы говорили выше о фай-
ловой модели) и «является интерактивным интерфейсом
к библиотеке EXT2fs, то есть транслирует набранные коман-
ды в вызовы функций библиотеки» [9].
Утилиту можно использовать для получения статистиче-
Рисунок 7. debugfs по умолчанию работает в режиме read-only
ской информации, восстановления файловой системы, ра-
боты с внутренней структурой файловой системы. Список
доступных операций можно получить следующим образом:
debugfs /dev/sda1
help

38 январь-февраль 2010 системный администратор


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

Как показано на рис. 7, по умолчанию debugfs взаимо- Работаем с разделами


действует с файловой системой в режиме read-only. Чтобы Рассмотрение работы с жестким диском из консоли начнем
получить доступ и для записи, необходимо запускать про- с создания на нем разделов. Для этого воспользуемся ути-
грамму с опцией -w. литой fdisk. Для запуска программы необходимо указать ей,
В качестве еще одного примера использования debugfs на каком устройстве мы хотим произвести изменения:
получим вывод статистической информации: fdisk /dev/sda
debugfs
stats Будет выведено приглашение для ввода команд fdisk,
а если вы впервые используете эту программу, то обратите
В заключение рассмотрим программу Linux Disk Editor, внимание, что в приглашении предусмотрительно указано:
которая является редактором файловых систем (поддержи- «m для справки». Воспользуемся этой командой – вывод
ваются ext2fs, minix и xiafs, а также имеется минимальная представлен на рис. 10.
поддержка FAT) и позволяет просматривать и редактиро- Отобразить список разделов позволит команда p.
вать блоки диска в шестнадцатеричном или ASCII-режимах. Создадим раздел с использованием fdisk. Для того что-
Программа имеет интерфейс, основанный на ncurses. Пер- бы создать новый раздел, необходимо дать команду n.
воначально редактор был написан для восстановления уда- Программа предложит выбор – создать расширенный раз-
ленных файлов. дел (e extended) или первичный (p primary partition (1-4)).
В моем дистрибутиве он оказался доступен из репозито- Для создания первичного раздела нажимаем клавишу p. За-
риев (размер ~429 Кб). тем программа предложит выбрать номер первичного раз-
Для установки надо скомандовать: дела: Partition number (1-4). Нажав клавишу, мы создадим
apt-get install lde раздел с номер один, и т.д. Далее надо будет ввести первый
цилиндр, с которого начнется раздел: First cylinder (1-6373,
а после установки для запуска: default 1). Значение по умолчанию нас вполне устроит, вы-
lde /dev/sda2 берем его. Программа вывела сообщение: Using default
value 1 (используется значение по умолчанию 1). Далее
LDE сам попытается определить тип файловой системы. необходимо выбрать последний цилиндр раздела или ука-
Далее нажимаем любую клавишу и, как показано на рис. 8, зать его размер в цилиндрах, Кб, Мб или Гб – Last cylinder,
увидим отображение суперблока. Если необходимо ра- or +cylinders or +size{K,M,G} (1-6373, default 6373):. Исполь-
ботать в режиме Inode, то нажимаем клавишу <I>, а если зуем значение по умолчанию. Все, новый раздел создан.
в блочном режиме – клавишу <B>. Теперь о том, как изменить тип файловой системы
Для навигации в данных режимах используются клавиши на вновь созданном разделе. Для этого даем fdisk команду t.
<PgUp> и <PgDn>. Если на жестком диске несколько разделов, то програм-
Для режима Inode – это переход к следующей/предыду- ма предложит выбрать номер раздела, а если один, то он
щей inode, а для блочного режима – к следующему/предыду- будет выбран автоматически. Кроме того, будет выведено
щему экрану. Кроме того, в любом из режимов при нажатии сообщение: Hex code (type L list codes). На этом шаге не-
клавиши <F2> выводится меню (пример вывода меню при- обходимо либо ввести код файловой системы, либо нажать
веден на рис. 9). Оно позволяет переключиться из одного клавишу <L> для просмотра списка кодов. Определитесь
режима в другой. Просмотреть отдельный блок или inode, с кодом и введите его.
на которых находится курсор. Переключиться в режим вос- Процедура удаления того или иного раздела аналогична
становления. процедуре создания, за исключением того, что использует-
На этом завершим рассмотрение работы с файловыми ся команда d и не требуется указывать первый цилиндр, по-
системами ext2/ext3 из консоли. следний цилиндр (достаточно указать номер раздела).

Рисунок 8. LDE отображает суперблок Рисунок 9. LDE в блочном режиме с открытым меню

системный администратор январь-февраль 2010 39


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

Для проверки таблицы разделов используется команда v. du > inf_hd.txt


Для занесения изменений в последнюю надо дать команду
w, которая осуществит выход с записью изменений. Если Команда du обладает опциями, которые могут значитель-
надо выйти из программы без их записи – q. но облегчить жизнь администратора. Для начала осуще-
Бывают ситуации, когда необходимо произвести перена- ствим вывод в формате human-readable:
значение раздела подкачки (например, приобретен новый du -h
жесткий диск, на котором теперь и будет размещен раз-
дел подкачки). Создать swap-раздел можно будет и в fdisk Размер файлов стал отображаться в Кб, Мб и Гб. Далее
(код 82), а вот подключить – нет. Для этого сначала преоб- делаем вывод только размера каталога (напомню, по умол-
разуем требуемый раздел в раздел подкачки: чанию действия совершаются над домашним каталогом):
fsck -r /dev/sda1 du -h -- summarize

Добавление опции -с позволит произвести проверку раз- Теперь используем du для получения информации о про-
дела на наличие поврежденных блоков (бэд-блоков). Кстати, извольном каталоге, например /var:
проверку разделов жесткого диска на наличие бэд-блоков du -h /var
можно осуществлять с использованием утилиты badblocks:
badblocks /dev/sda1 Далее получаем информацию только о его размере:
du -h -- summarize /var
Итак, раздел подкачки создан. Теперь подключим его:
swapon /dev/sda5 Добавив опцию – time в последнюю введенную нами ко-
манду, мы получим вывод с временем последней модифика-
Кроме того, с помощью swapon можно вывести информа- ции. В общем, du предоставляет широкие возможности для
цию обо всех используемых swap-устройствах (кстати, в вы- получения информации об использовании жесткого диска.
вод попадет и устройство подкачки для RAM-диска, который Работать с параметрами жесткого диска (SATA/ATA) удоб-
мы создали ранее – /dev/ramzswap0). но с программой hdparm. Она позволяет:
Если надо, чтобы раздел подкачки использовался при пе- > устанавливать объем резервируемых данных при опе-
резагрузке автоматически, добавьте в файл /etc/fstab (со- рациях чтения записи:
держит описания устройств, которые автоматически монти- hdparm -a 1024 /dev/sda
руются при загрузке) следующее:
/dev/sda5 none swap sw 0 0
> осуществлять вывод геометрии жесткого диска:
hdparm -g /dev/sda
Для отключения раздела подкачки даем команду:
swapoff /dev/sda5
> выводить идентификационные параметры жесткого
диска:
Используя опцию -a, мы отключим все swap-устройства. hdparm -i /dev/sda
Для получения информации об использовании жестко-
го диска применяется команда du. Если скомандовать ее > выводить информацию о температуре жесткого диска:
без параметров, то начнется вывод в «столбик» всех фай- hdparm -H /dev/sda
лов и их размеров из домашнего каталога. Это не очень
удобно, разве что перенаправить вывод в какой-либо > производить тестирование производительности:
файл:
# Тайминги чтения с устройства и кэша устройства
hdparm -Tt /dev/sda

Рисунок 10. Вывод fdisk справки по командам И многое другое. Для вывода всех возможностей дайте
команду hdparm без параметров. EOF

1. http://www.t13.org/Documents/UploadedDocuments/project/
d0791r4c-ATA-1.pdf.
2. http://www.intel.com/technology/efi; http://www.uefi.org/home.
3. Лав Р. Разработка ядра Linux, 2-е издание. М. : ООО «И.Д. Виль-
ямс», 2006. С. 266.
4. Супер-Тед//LinuxFormat, 11, 2009. С. 26-27.
5. Мешков В. Архитектура файловой системы ext2. //Ситемный ад-
министратор, №11, 2003 г. – С. 26-32.
6. http://www.gnu.org/software/coreutils/manual/coreutils.html#Disk-
usage.
7. http://wiki.linuxformat.ru/index.php/LXF98: Спецрепортаж; http://
www.vanemery.com/Linux/Ramdisk/ramdisk.html.
8. http://www.ibm.com/developerworks/linux/library/l-fs8.html.
9. http://lib.ru/LINUXGUIDE/user_guide_lars.txt_Piece40.05.

40 январь-февраль 2010 системный администратор


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

Визитка

НИКИТА ПАНОВ, работает в корпорации Microsoft техническим инженером,


модерирует русскоязычный сектор портала TechNet, является лидером MCP-
клуба в Воронеже. Любит преподавать и взаимодействовать с аудиторией

Миграция без проблем


Еще раз о Windows Server 2008 R2
Миграция ролей AD, DNS и DHCP с ОС Windows
Server 2003 занимает мало времени. Попробуйте

Выход в свет новых серверных ОС всегда привлекает > Упала производительность старого сервера и возник-
внимание системных администраторов, инженеров, ИТ- ла необходимость сохранить текущие, а также удалить
менеджеров и просто профессионалов ИТ-сферы. Возни- устаревшие настройки и параметры конфигурации.
кают вопросы: что нового в этой ОС по сравнению с пред- > Нужно перенести устаревшие производственные сер-
ыдущими версиями, что улучшено и какие ошибки решены, веры в виртуальную среду.
насколько реально перенести нашу текущую инфраструкту- > Необходимость перейти от полного варианта установ-
ру на новый уровень данной ОС без особых затрат? ки к Server Core.
Множество подобных вопросов возникло с выходом > Сократить время простоя в ходе переноса ролей.
Windows Server 2008 R2, и о последней из вышеуказанных
тем я бы и хотел поговорить. Какие роли сервера большин- Nota Bene!
ство системных администраторов назовут основными? Я поч- Процесс подготовки к миграции состоит из ряда важных мо-
ти уверен, что это будут AD, DNS и DHCP – основа инфра- ментов.
структуры сети любого большого предприятия. И раз уж мы Создание резервных копий! Я уверен, что системные
заговорили о Windows Server 2008 R2, то давайте рассмот- администраторы понимают, насколько важен и прин-
рим вариант, когда ваш менеджер принял решение обно- ципиален данный шаг. Microsoft создала все условия
вить текущие серверные ОС на новое решение от Microsoft, для того, чтобы миграция прошла без проблем, но «приз-
а вы решили начать именно с переноса основных ролей. раков в машине» еще никто не отменял.
Нужно позаботиться о клиентах сети. Естественно,
Преимущества миграции цель процесса миграции в том, чтобы конечный сер-
Какие же варианты перехода на новую ОС существуют? вер начал выполнять те же функции, что и исходный;
Это чистая установка, локальное обновление и миграция. при этом клиентские компьютеры в сети не должны стол-
В каких случаях процесс миграции является более предпо- кнуться с нарушением порядка обслуживания. Однако
чтительным выбором? нужно осознавать, что если сервер у вас единственный,
> Различия в оборудовании не позволяют выполнить то сбоев в обслуживании не избежать. Особенно это ка-
обновление. В силу того, что операционная сис- сается миграции роли DHCP. Microsoft в этом случае
тема Windows Server 2008 R2 поддерживает толь- рекомендует создать на период миграции standalone-
ко архитектуру x64, версии Windows Server 2003 сервер, который будет выполнять обслуживание клиен-
и Windows Server 2008 на базе архитектуры x86 не мо- тов. В среде, где для клиентских компьютеров настроен
гут быть обновлены до Windows Server 2008 R2. только один DNS-сервер, также рекомендуется создание
> Microsoft также рекомендует «выполнять миграцию одного или нескольких дополнительных DNS-серверов,
вместо обновления, даже если вы используете обору- чтобы обеспечить возможность разрешения имен клиен-
дование на основе архитектуры x64. Например, в слу- тами во время выполнения миграции основного исходно-
чае разделения ролей сервера, когда исходный сервер го сервера.
имеет несколько ролей и нагрузка на него возрастает, Настоятельно рекомендуется продумать сценарий
может быть принято решение о разделении этих ро- миграции, учитывающий все особые обстоятельства,
лей между несколькими дополнительными серверами конфигурации и топологии, которые могут оказать
на базе архитектуры х64. В этом случае лучшим реше- влияние на процесс миграции. При выполнении ми-
нием будет перенос (а не обновление) отдельных ро- грации DNS-сервера следует определить метод рас-
лей сервера на другие серверы. пределения доменных служб Active Directory в домене.

системный администратор январь-февраль 2010 41


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

Например, будет ли миграция DNS-сервера выполнять- Несмотря на новизну, Windows Server 2008 R2 не так уж
ся с того же компьютера, что и в случае с сервером до- «прожорлива» до ресурсов. Например, требование к сво-
менных служб Active Directory? Миграцию DNS-сервера бодному пространству на жестком диске в основном зави-
можно выполнить отдельно от сервера доменных служб сит от базы AD и в среднем вычисляется по формуле 0,4 Гб
Active Directory, однако в большинстве случаев роли сер- свободного места на каждую тысячу пользователей плюс
вера размещаются на одном и том же компьютере, поэто- 1,5 Гб для журналов AD и папки SYSVOL. Как вы понимаете,
му их миграцию требуется выполнять совместно и одно- дорогие читатели, даже в самом аховом случае 500 Гб будет
временно. Также продумайте исход миграции: останется вполне достаточно. Вряд ли кому-то придет в голову уста-
старый сервер в рабочем состоянии в качестве вспомо- навливать на сервер маленький жесткий диск. Что касается
гательного или будет выведен из эксплуатации – от этого оперативной памяти, то здесь нужно исходить из принципов
тоже зависит сценарий миграции. разумности. При тестировании в нашей виртуальной лабо-
Определитесь со временем, ведь продолжитель- ратории контроллер домена прекрасно работал и с 1 Гб
ность процесса миграции зависит не только от дли- RAM, но у нас не было большой инфраструктуры, поэтому
тельности выполняемых шагов, но и от исходного со- берите, что называется, с запасом. 4 Гб должно хватить
стояния серверов. Устаревший «софт» и оборудование с лихвой, если, конечно, не предполагается использовать
(например, сетевое), «замусоренность» и фрагментация этот сервер с дополнительными ролями, кроме AD и DNS.
жесткого диска, старые и ненужные настройки – все это Сегодня стандартом «де-факто» в скорости переда-
может значительно замедлить процесс. чи данных является, конечно же, 1 Гб/сек. Я понимаю,
Теперь давайте рассмотрим важные моменты миграции что в России масса достаточно древних серверов с медлен-
каждой роли. ными сетевыми адаптерами. Но ведь мы производим мигра-
цию на новое оборудование, верно? Нужно учитывать то,
AD и DNS что нагрузка на этот сервер может со временем возрасти.
Сначала выясним, позволяет ли операционная система ва- Тогда давайте продолжим наш процесс и перейдем к сле-
шего исходного сервера выполнить миграцию. дующему этапу.

Поддерживаемые операционные системы Подготовка к миграции


для проведения миграции > Проверьте наличие всех критических обновлений
Приведу таблицу. Обращаю ваше внимание на необходи- на исходном и конечном сервере, если какие-то
мость наличия пакета обновлений SP2 для Windows Server из них отсутствуют, то крайне рекомендуется их уста-
2003. Были случаи, когда админы жаловались на то, что ми- новить.
грация у них не инициируется. Как оказалось впоследствии, > Установите средства миграции Windows Server на ис-
именно по причине отсутствия пакета SP2. ходном и конечном серверах. Это не очень сложно,
Поскольку итоговый сервер должен стать контроллером но тем не менее ответственно. Для начала необхо-
домена, то давайте убедимся в том, что его аппаратные ре- димо установить на исходный сервер платформу
сурсы позволяют это сделать. .NET Framework 2.0 и Windows PowerShell 1.0 или более
позднюю версию. Оба инструмента вы сможете найти
Аппаратные требования для контроллера домена на странице загрузок Microsoft. Затем на конечном сер-
на базе Windows Server 2008 R2 вере через оснастку Features установите компонент
Уверен, что системные администраторы, которые ежеднев- Windows Server Migration Tools.
но имеют дело с серверными ОС, представляют либо зна- > Создайте папку развертывания на конечном серве-
ют наверняка аппаратные требования для контроллеров ре. Она необходима для переноса инструментария
домена. миграции на исходный сервер. Для этого на конеч-
ном сервере надо выполните команду (для Windows
Server 2003 x64):
Поддерживаемые операционные системы для проведения миграции
SmigDeploy.exe /package /architecture amd64 /os WS03 ↵
/path <deployment_folder_ path>
Процессор Операционная система Операционная Процессор
исходного исходного сервера система целе- целевого
где deployment_folder_ path – путь к папке, в которой
сервера вого сервера сервера
будут находиться инструменты развертывания. Это мо-
Windows Server 2003 с па- жет быть и сетевой путь на исходный сервер. Либо ко-
На базе кетом обновления 2 (SP2) манду:
архитек- Windows Server 2003 R2
Windows Server SmigDeploy.exe /package /architecture X86 /os WS03 ↵
туры x86 Windows Server 2008, пол- /path <deployment_folder_path>
2008 R2, полная На базе
или x64 ная установка и установка
установка архитекту- если исходная ОС Windows Server 2003 x86.
Server Core
и установка ры x64 > Нужно зарегистрировать средства развертывания
Windows Server 2008 R2
На базе Server Core на исходном сервере. Для этого скопируйте создан-
Установка Windows Server
архитекту- ную в предыдущем шаге папку на исходный сервер
2008 R2 в варианте Server
ры x64 либо, если в качестве пути была указана «расшарен-
Core
ная» папка, просто убедитесь в том, что она не пустая

42 январь-февраль 2010 системный администратор


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

и содержит необходимые инструменты. Перейдите или в более удобном варианте веб-каста на портале
к ней и запустите файл smigdeploy.exe с правами ад- TechDays.ru (http://www.techdays.ru/videos/1491.html).
министратора (!!!). Это запустит процесс регистрации
инструментов миграции. Теперь они будут доступны DHCP
на исходном сервере в «Пуск → Выполнить → Ад- Конечно, миграция роли DHCP проще, чем AD и DNS, но так-
министрирование → Средства миграции Windows же требует предварительной подготовки и внимательного
Server». отношения.
> Убедитесь в исправной работе исходного сервера Требования к ОС при миграции DHCP такие же, как и
с ролями AD и DNS. Для этого выполните на нем ко- при миграции ролей активного каталога и DNS. Кстати,
манду: в обоих случаях в качестве исходных или целевых серве-
dcdiag /test:dns /s:<source_server> ров поддерживаются следующие версии Windows Server:
Foundation, Standard, Enterprise и Datacenter.
> Убедитесь в том, что записи Active Directory, необходи- Также похож и процесс подготовки серверов, за исклю-
мые для проведения репликации, зарегистрированы чением специфичных именно для AD- и DNS-пунктов.
корректно. Выполните команду:
dnslint /ad /s <source server IP address> /v Подготовка к миграции
> Установите последние обновления на исходный и ко-
> Если dnslint вернет сообщение о неполадках в конфи- нечный серверы.
гурации DNS, то воспользуйтесь статьей «Устранение > Установите средства миграции Windows Server.
неполадок репликации Active Directory» из базы знаний > Проверьте количество сетевых адаптеров на исходном
TechNet – http://support.microsoft.com/?kbid=824449. и конечном серверах – оно должно быть одинаковым.
> Проверьте, чтобы количество сетевых адаптеров на ис- > Создайте общую папку, доступную обоим серверам,
ходном и конечном серверах было одинаковым. Это для переноса файлов миграции.
необходимо в случае, когда один сервер обслуживает > Добавьте конечный сервер в домен и проверьте, что-
несколько подсетей. бы он мог правильно разрешать имена пользователей
> Заранее определите, каким образом будет заполнять- домена, входящих в локальную группу, во время опе-
ся база данных AD на конечном сервере: путем ре- рации импорта, при этом «если исходный и конечный
пликации содержимого каталога другого контроллера серверы принадлежат разным доменам, то у конечного
домена по сети или с помощью метода установки с но- сервера должна быть возможность связаться с серве-
сителя (IFM), при котором используется копия каталога ром глобального каталога для леса, в котором находят-
на переносном носителе. При копировании больших ся учетные записи пользователей исходного домена».
каталогов метод установки с носителя позволяет зна- > Если после миграции роли DHCP планируется вывод
чительно сэкономить время. сервера из эксплуатации, то IP-адреса исходного и ко-
> Загрузите сценарий проверки схождения, который нечного сервера(ов?) можно сделать одинаковыми,
будет полезен при проведении миграции с целью про- в противном случае на период миграции конечному
верки синхронизации записей DNS – http://go.microsoft. серверу нужно выдать свободный IP-адрес.
com/fwlink/?LinkId=135502. > На исходном сервере необходимо сделать резервное
> Создайте общую папку, где будут храниться файлы, не- копирование DHCP, используя команду netsh:
обходимые для выполнения миграции. Папка должна netsh dhcp server export C:\<имя_файла.txt> all
быть доступна на обоих серверах.
> Создайте резервную копию AD или DNS исходного Теперь вы готовы к проведению миграции. Детальный
сервера. процесс очень подробно описан в «Руководстве по мигра-
> Используйте «лист сбора данных для проведения ми- ции роли DHCP» в базе знаний TechNet (http://go.microsoft.
грации» на исходном сервере для сохранения всей не- com/fwlink/?LinkId=134770), а еще есть полноценный веб-
обходимой информации (http://technet.microsoft.com/ каст, в котором все этапы показаны детально (http://www.
ru-ru/library/dd379556(WS.10).aspx). techdays.ru/videos/1578.html).
> Установите конечному серверу временное имя и IP-ад- Очень часто нас спрашивают: «Сколько времени зани-
рес и проверьте, что данный сервер является членом мает процесс миграции?» Как вы понимаете, это зависит
вашего текущего домена. от множества факторов: уровня сетевого оборудования
> Если вы планируете сохранить исходный сервер в ка- и аппаратных средств сервера, работоспособности исход-
честве дополнительного контроллера домена, то опре- ного сервера, уровней фрагментации жесткого диска, под-
делите, какие роли FSMO будут переданы новому сер- готовки администратора… Но в идеале миграция каждой
веру, а какие останутся на исходном. роли занимает 2-3 часа плюс время, необходимое на тести-
Если все выполнено, то можете смело приступать к ми- рование/подготовку исходного сервера.
грации ролей AD и DNS.
К сожалению, в рамках одной статьи невозможно описать ***
все подробности проведения миграции, поэтому подробно Не нужно бояться проведения подобной миграции. Если вы
изучить все этапы самой миграции вы можете, изучив «Ру- сделали необходимые резервные копии, провели все необ-
ководство по миграции ролей AD и DNS» в библиотеке зна- ходимые тесты и внимательно изучили руководства, то мо-
ний TechNet (http://go.microsoft.com/fwlink/?LinkId=134771) жете быть уверены: у вас все получится. EOF

системный администратор январь-февраль 2010 43


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

Визитка

АНДРЕЙ БИРЮКОВ, специалист по информационной безопасности. Работает


в крупном системном интеграторе. Занимается внедрением решений
по защите корпоративных ресурсов

WDS поможет
Установка операционных систем. Часть 2
При развертывании операционных систем может
возникнуть необходимость в дополнительных на-
стройках. Рассмотрим, какие средства предлага-
ет WDS

В первой части статьи [1] мы подробно обсудили установку Разворачиваем образ


Windows Deployment Service и создание основных видов об- Выполнив предварительные настройки, можем перейти
разов. Можно сказать, что это лишь половина работы, са- к процессу формирования образа. В нашем первом при-
мое интересное нас ждет впереди, ведь нам еще потребует- мере мы будем разворачивать образ с помощью загрузки
ся выполнить массу действий по дополнительной настройке PXE. В качестве образа, который разворачиваем, будет ис-
образов. В частности, мы развернем образ с помощью PXE пользоваться образ, созданный в первой части статьи [1].
и установим необходимую операционную систему. Затем Для развертывания выполним следующие действия.
создадим образ обнаружения и произведем ряд дополни- > В процессе загрузки системы войдите в BIOS. Про-
тельных настроек. верьте, чтобы сетевая загрузка PXE была разрешена
Но прежде чем перейти к дополнительным настройкам, для основного сетевого адаптера и что в списке прио-
необходимо протестировать процесс создания образа. ритета загрузка по сети PXE указана перед системным
Перед началом развертывания первого установочного жестким диском (см. рис. 2).
образа нужно проверить свойства сервера WDS и опции > Сохраните настройки и выйдите из BIOS, чтобы запу-
области действия сервера DHCP. Для этого сделайте сле- стить последовательность загрузки системы.
дующее: > Когда в процессе загрузки вам будет предложено на-
1. С помощью консоли WDS откройте свойства сервера жать клавишу <F12> для загрузки по сети, нажмите ее
WDS и выберите вкладку Advanced, чтобы проверить, отме- для того, чтобы запустить процесс создания образа
чены ли флажки Authorize This Windows Deployment Service WDS.
in DHCP (авторизовать службу WDS в DHCP) и Allow the > Если система может соединиться с сервером WDS пос-
Windows Deployment Services to Dinamically Discover Valid ле вывода подсказки Press F12 for Network Boot и нажа-
Domain Controllers (разрешить службе Windows Deployment тия клавиши <F12>, то загрузочный образ будет загру-
Services динамически обнаруживать действительные кон- жен с сервера WDS с использованием сервера TFTP,
троллеры доменов) (см. рис. 1). встроенного в него, и начнется процесс создания об-
2. Используя консоль WDS, откройте свойства сервера раза.
WDS и выберите вкладку PXE Response Setting (настройка > После того как система завершит загрузку фай-
отклика PXE). лов Windows, начнется выполнение среды Windows
Далее убедитесь, отмечен ли переключатель Respond Preinstallation Environment. Страница должна иметь имя
to All (Known and Unknown) Client Computers (отвечать всем Windows Deployment Services.
(известным и иеизвестным) клиентским компьютерам). > Выберите требуемую конфигурацию языкового региона
При этом не нужно отмечать опции Notify Administrator (уве- и клавиатуры, щелкните на кнопке Next, чтобы продол-
домлять администратора) и Respond After Approval (отвечать жить.
после одобрения). Позднее, при более тонкой настройке, > На экране откроется окно аутентификации. Введите
вы сможете самостоятельно включить данные опции, одна- имя пользователя и домен учетной записи, используе-
ко сейчас их лучше не включать. мой для установки WDS, а также пароль, и щелкните
3. Наконец, третье подготовительное действие. Исполь- кнопку ОК.
зуя консоль DHСP в Windows Server 2008, убедитесь, что до- > На странице установки Install Windows будет перечис-
менное имя DNS и опции DHCP сервера DNS содержат под- лен каждый установочный образ, загруженный на сер-
ходящие значения для среды вашей организации. Проще вер WDS. Выберите необходимую операционную сис-
говоря, нужно убедиться в том, что настроено верно. тему и нажмите Next.

44 январь-февраль 2010 системный администратор


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

> В следующем окне будет показан список доступных > В панели инструментов найдите и щелкните правой
или обнаруженных дисков, которые можно использо- кнопкой мыши на требуемом образе загрузки и вы-
вать для установки образа. Отсутствие в списке дисков берите в контекстном меню пункт Create Discover Boot
говорит о том, что вам необходимо установить драйвер Image (создать загрузочный образ обнаружения).
контроллера диска в специальный загрузочный образ, > На странице Discover Image Metadata введите имя
чтобы создание образа WDS можно было выполнить на и описание нового загрузочного образа обнаружения.
данном оборудовании. Нажмите Next, чтобы создать В разделе Location and File Name перейдите к папке
том и отформатировать его в ходе сборки образа. в локальной системе, в которой можно создать новый
> После выполнения этих действий будет создан и от- загрузочный образ обнаружения, введите имя образа
форматирован том диска, начнется процесс установки обнаружения и щелкните на кнопке Open.
операционной системы посредством развертывания и > Введите полностью определенное доменное имя сер-
копирования необходимых файлов и установки опера- вера WDS, с которым будет соединяться образ обнару-
ционной системы со стандартными настройками. жения после загрузки в среде Windows PE и загрузки
> Далее начнется настройка непосредственно Windows. клиента WDS. Щелкните Next, чтобы создать образ об-
На странице Set Up Windows необходимо будет выпол- наружения.
нить стандартные действия, которые обычно выпол- > Когда образ обнаружения будет создан, щелкните Finish.
няете при установке Windows: указать часовой пояс, Все, образ обнаружения успешно создан. Однако преж-
ввести лицензионный ключ, настроить автоматическую де чем его можно будет использовать для загрузки систе-
активацию. мы и соединения с сервером WDS, необходимо произвести
> Процесс установки завершится автоматическим при- определенные действия. Чтобы создать загружаемый CD-
соединением к домену. или DVD-диск, который будет использовать новый загрузоч-
Итак, мы рассмотрели процесс установки образа WDS ный образ обнаружения, потребуются средства из набора
по умолчанию. Однако настроек по умолчанию, как прави- Windows Automated Installation Kit. Скачать данный набор
ло, недостаточно. можно по адресу [2]. Набор Windows Automated Installation
Kit (WAIK) используется главным образом для того, чтобы по-
Создание образов обнаружения мочь производителям OEM-компьютеров и развертывания
В тех случаях, когда загрузка PXE не поддерживается в сис- операционных систем семейства Windows на новом обору-
теме или в сети, может возникнуть необходимость использо- довании. Он содержит средства развертывания, совмести-
вать загрузочный носитель, для того чтобы начать процесс мые с последней версией Windows.
клонирования образа WDS. Это можно сделать с помощью После установки WAIK необходимо создать загрузочный
образа обнаружения WDS. Данный образ создается из су- файл ISO, который будет устанавливать загрузочный образ
ществующего загрузочного, содержащего Windows PE, обнаружения. Для этого сделайте следующее.
и клиента WDS, который может храниться на переносимом > После того как WAIK будет инсталлирован, скопи-
носителе, облегчая развертывание в старых системах, где руйте созданный ранее образ обнаружения в папку
могут возникнуть проблемы с PXE. Для создания образа об- на локальном диске. Например, e:\DiscoverImages\
наружения выполните следующие действия. Win2008Discover.WIM.
> Откройте консоль WDS. > Далее перейдите в каталог c:\Program Files\Windows
> Укажите локальный сервер и добавьте его в консоль. AIK\Tools\PETools\.
> В панели с древовидным представлением разверните > Затем необходимо сделать копию среды Windows
ветвь WDS и выберите узел Boot Images. Preinstallation Environment с помощью команды:

Рисунок 1. Авторизация сервера WDS в DHCP Рисунок 2. Настройки BIOS

системный администратор январь-февраль 2010 45


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

CopyPe x86 e:\DiscoverImages\Winpe После того как GUID-идентификатор будет получен и за-
фиксирован, можно создать учетную запись компьютера
> Теперь у нас имеются файлы WinPE, необходимые Active Directory. Учетную запись необходимо создать до того,
для загрузки системы. А нам нужно скопировать об- как будет создан образ системы с использованием WDS.
раз обнаружения в требуемую папку. Это можно сде- Чтобы создать учетную запись компьютера Active Directory,
лать с помощью следующей команды, которая копиру- которая будет использоваться для WDS, выполните следую-
ет созданный файл загрузки обнаружения и заменяет щие действия.
файл boot.wim, находящийся в установочной папке > Осуществите вход на сервер WDS под учетной записью
WinPE: администратора.
> Если средства Remote Server Administration для роли
copy /y E:\DiscoverImages\Win2008Discover.WIM ↵
E:\DiscoverImages\WinPE\ISO\Sources\Boot.wim Active Directory Domain Services не были установлены
на сервере WDS, то это необходимо сделать сейчас.
> Итак, у нас готова инсталляция WinPE для создания за- > Затем откройте консоль администрирования Active
грузочного образа ISO, включающего наш специаль- Directory Users And Computers.
ный образ обнаружения. Введем следующую команду: > Разверните домен и выберите контейнер, в который
сервер WDS будет помещать новые учетные записи
oscdimg –n –b E:\DiscoverImages\WinPE\ISO\Boot\ ↵
etfsboot.com E:\DiscoverImages\WinPE\ISO ↵ компьютеров, как это определено на вкладке Directory
E:\DiscoverImages\MyDiscoverImage.ISO Services страницы WDS Properties. По умолчанию
все новые учетные записи помещаются в контейнер
> В результате выполнения предыдущей команды мы по- Computers.
лучаем ISO-образ. Вам достаточно будет просто раз- > Щелкните правой кнопкой мыши на контейнере
вернуть этот образ на компакт диск. Computers и выберите в контекстном меню пункт
WDS также автоматически генерирует имя компьютера, New → Computer.
использует мандаты, определенные во время развертыва- > Когда откроется окно New Object – Computer, введи-
ния образа, для добавления клонированных систем в домен те требуемое имя новой учетной записи компьютера
Active Directory, членом которого является сервер WDS. На- в поле Computer Name и нажмите Next.
стройки из окна WDS Properties используются для автома- > На странице Managed отметьте флажок This Is a
тического именования для компьютеров и для определения Managed Computer (это управляемый компьютер).
домена и контейнера, в котором будут создавать и новые > После того как будет отмечен флажок, введите ранее
учетные записи компьютера. зарегистрированный GUID-идентификатор, связанный
Чтобы предварительно созданные учетные записи с сетевой платой в системе, и щелкните Next. Обратите
компьютеров можно было связать с системами, потре- внимание на то, что в поле GUID-идентификатора вво-
буется уникальный идентификатор (GUID), связанный дить тире не нужно.
с сетевым адаптером системы. В большинстве систем > Следующей является страница Host Server, на кото-
GUID-идентификатор будет отображаться во время после- рой задается определенный сервер WDS, который
довательности загрузки PXE. предоставит образы для этого хоста. Здесь необхо-

Рисунок 3. Мастер создания образа захвата Рисунок 4. Процесс создания образа захвата

46 январь-февраль 2010 системный администратор


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

димо или указать сервер WDS, или оставить вариант > Разверните образ в системе с помощью установочного
по умолчанию, чтобы любой сервер WDS мог предо- и загрузочного образа, используемого по умолчанию,
ставить образ этому клиенту; щелкните на кнопке с сервера WDS.
Next. > Подготовьте развернутую систему к созданию образа,
> Проверьте настройки и нажмите кнопку Finish. установив все необходимые приложения или драйверы
> После того как будет создана учетная запись компью- и настроив систему в соответствии с требованиями ор-
тера, образ системы может быть создан и присоединен ганизации.
к домену с помощью предварительно сконфигуриро- > Запустите утилиту Sysprep.exe из папки c:\windows\
ванной учетной записи компьютера. system32\sysprep. В окне System Preparation Tool выбе-
рите опцию Enter System Out-of-Box Experince (OOBE)
Создаем специальные образы (введите параметры операционной системы) в меню
Если установочные образы по умолчанию, включенные System Cleanup Action (действие по очистке системы).
в Windows Vista и Windows 2008, не удовлетворяют тре- Выберите опцию Shutdown в меню Shutdown Options
бованиям данной организации к развертыванию, можно и щелкните ОК. После этого система будет выключена.
употребить специальные образы посредством создания > На сервере WDS создайте загрузочный образ захвата
загрузочных образов захвата и подготовки системы с ис- и добавьте загрузочный образ в список образов WDS.
пользованием утилиты sysprep.exe. Чтобы создать новый > Загрузите систему, которая была подготовлена
образ захвата, выполните следующие действия. для создания образа, с помощью загрузки PXE. Когда
> Откройте консоль WDS. В панели с древовидным пред- будут представлены доступные образы, выберите ра-
ставлением выберите и разверните сервер WDS. нее созданный образ захвата.
> Выберите узел Boot Images. В панели задач щелкните > Выберите образ захвата, когда диспетчер Windows
правой кнопкой мыши на требуемом загрузочном обра- Boot Manager отобразит список образов.
зе и выберите в контекстном меню пункт Create Capture > Когда будет отображено окно мастера Windows
Boot Image (Создать загрузочный образ захвата). Deployment Image Capture Wizard (мастер захвата об-
> На странице Capture Image Metadata введите имя и опи- раза развертывания Windows), щелкните на кнопке
сание нового загрузочного образа захвата. В разделе Next для продолжения.
Location and File Name перейдите в папку в локальной > В выпадающем меню на странице Image Capture Source
системе, в которой можно создать новый загрузочный выберите том, который будет захвачен, введите имя
образ захвата, и щелкните на кнопке Open, чтобы вер- и описание для нового установочного образа и щел-
нуться на страницу Capture Image Metadata. Щелкните кните Next.
Next для продолжения (см. рис. 3). > Отметьте флажок, чтобы выгрузить образ на сервер,
> Когда загрузочный образ захвата будет создан, щел- после чего это должно произойти. Завершите процесс
кните по кнопке Finish, чтобы закрыть окно и вернуться захвата и выключите систему.
в консоль WDS. > Войдите на сервер WDS, в консоли WDS добавьте стра-
> В панели с древовидным представлением выберите ницу инсталляции, которая была только что создана,
узел Boot Images, щелкните на нем правой кнопкой в качестве нового установочного образа на сервере
мыши и выберите команду Add Boot Image. WDS в соответствующей группе образов.
> На странице Image File щелкните на кнопке Browse, > Загрузите систему с помощью PXE в загрузочный об-
найдите и выделите только что созданный файл загру- раз WDS и выберите новый установочный образ, чтобы
зочного образа захвата и щелкните на кнопке Open. протестировать развертывание данного образа.
Вернитесь на страницу Image File и щелкните на кнопке > При необходимости снова настройте образ и выполни-
Next. те повторный захват.
> На странице Image Metadata измените имя, чтобы оно Также вам может понадобиться дополнительная настрой-
отражало образ захвата, щелкните Next. ка захваченных установочных образов с помощью диспет-
> Просмотрите настройки на странице Summary и щел- чера System Image Manager, который входит в состав набо-
кните на кнопке Next. ра средств Windows Automated Installation Kit.
> По завершении нажмите Finish (см. рис. 4).
Обычно, когда организация принимает решение ис- ***
пользовать продукт для создания образов серверов и или Итак, мы научились разворачивать образы с помощью
настольных компьютеров, основные усилия должны быть Windows Deployment Service. Надеюсь, что с помощью дан-
направлены на упрощение развертывания систем. Если ного средства вы сможете существенно автоматизировать
развертываются только базовые операционные системы и облегчить развертывание операционных систем на рабо-
с помощью WDS, то сэкономленное время будет очень не- чие станции. EOF
значительным, а если этот процесс займет несколько ча-
сов инсталляции программного обеспечения операционной 1. Бирюков А. WDS поможет. Установка операционных систем.
системы и специальных настроек, то создание и развер- Часть 2. //«Системный администратор», №12, 2009 г. – С. 50-55.
тывание специальных образов может быть очень кстати. 2. Дистрибутив Windows Automated Installation Kit для Windows
Чтобы создать образ предварительно сконфигурированной Vista SP1 и Windows Server 2008 – http://www.microsoft.com/
операционной системы Windows 2008 и Windows Vista, по- downloads/en/confirmation.aspx?familyId=94bb6e34-d890-4932-
требуется выполнить следующие действия. 81a5-5b50c657de08&displayLang=en.

системный администратор январь-февраль 2010 47


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

Визитка

СЕРГЕЙ ЯРЕМЧУК, фрилансер. Автор более 800 статей и четырех книг.


С «СА» с первого номера. Интересы: сетевые технологии, защита информации,
свободные ОС

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


Централизованное управление при помощи Cfengine
Трудно управлять большим количеством систем
без средств автоматизации. Этот проект облегчит
задачу и позволит централизовано устанавливать
параметры

Чтобы вручную произвести изменения в нескольких конфи- раз. О низкой популярности косвенно свидетельствуют от-
гурационных файлах на серверах, выполняющих разную носительно небольшое количество публикаций в специали-
роль, придется потратить немало времени. Как минимум зированных журналах и отсутствие сообществ.
потребуется проанализировать имеющиеся установки, вы- Исходный код доступен и распространяется под лицензи-
брать системы, на которых будут производиться перестрой- ей GNU GPL, но все изменения и пожелания весьма жестко
ки, подготовить новые конфигурационные файлы или вы- контролировались Марком Бюргесом. Вероятно поэтому,
брать другие средства для изменения настроек серверов. Cfengine ранее называли проектом одного человека. Се-
И чем больше количество и разнообразнее системы, находя- годня ситуация несколько изменилась, в том числе создана
щиеся в подчинении администратора, тем более значитель- и коммерческая версия продукта. Правила можно предста-
ных усилий потребует перестройка всей сети, тем больше вить как язык программирования очень высокого уровня,
вероятность сделать ошибку. Использование единой точки, на изучение которого в любом случае придется потратить
в которой были бы собраны все настройки, позволило бы некоторое время. Большие возможности сделали систему
сократить время на активацию новых установок и снизило относительно сложной в изучении, язык при этом выглядел
вероятность ошибки. В журнале уже обсуждались возмож- достаточно запутанным. Это главные причины малой попу-
ности системы централизованного управления Puppet [1]. лярности веток 1 и 2.
Это достаточно новый проект, его основные идеи были В апреле 2009 года была представлена 3-я (Сommunity
взяты Cfengine [2], который имеет аналогичное назначение. edition) версия Cfengine, лицензируемая под GPL v3. Беглого
О Cfengine и пойдет речь далее. взгляда на документацию достаточно, чтобы понять, что пе-
ред нами существенно переработанный продукт, который
О Cfengine даже позиционируется несколько по-иному, как фреймворк.
Проект Cfengine анонсирован в 1993 году, его разработкой Здесь уже используется новый язык описания с более чет-
занимается в основном один человек – профессор Норвеж- ким и простым синтаксисом, поддержкой классов и шабло-
ского университета (Осло) Марк Бюргес (Mark Burgess). нов функций. Добавлены новые функции отчетов, поддерж-
В основе построения Cfengine лежит «Теория обязательств» ка управления знаниями и виртуализации, более тесной
(Promise Theory), адаптированная Марком Бюргесом приме- интеграции с другими программными продуктами. Однажды
нительно к области автоматизации и управления. Основная созданная конфигурация легко читаема, и соответственно
идея Promise Theory состоит в добровольном взаимодей- в нее просто внести изменения. Возможно использование
ствии автономных агентов между собой. При этом особое в одной сети систем Cfengine 2 и 3, что упрощает переход
внимание уделяется стабильному состоянию системы, на новую ветку.
а не перестройкам. Система дает обещание, что она пра- Следует отметить наличие многостраничных руководств
вильно настроена и проверяет это состояние. Изменения на английском языке, в которых расписаны многие тонкости
вносятся только в случае, если обещания, то есть указания по работе с Cfengine. Но, как водится, написаны они самими
на перестройку, не выполнены. В итоге при внесении каких- разработчиками, часто «забывающими» указать отдельные
либо изменений вся сеть через некоторое время приходит «мелочи», всплывающие во время настройки, или вовремя
к единому состоянию. не вносящими изменения.
Предоставляя достаточно большие возможности, В дальнейшем речь пойдет именно об Cfengine 3. В се-
Cfengine тем не менее так и не стал популярен среди си- редине 2008 года образована Cfengine AS, которая зани-
стемных администраторов, несмотря на то что за время мается распространением коммерческой версии Cfengine
существования проекта код был загружен более миллиона Nova, построенной на тех же принципах, что и Cfengine 3,

48 январь-февраль 2010 системный администратор


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

но более удобной в развертывании, управлении и генера- После получения политик в конечной точке извлекаются
ции отчетов. и применяются только те настройки, которые имеют отно-
шение к текущему узлу.
Возможности Cfengine
По своему принципу Cfengine относится к декларативным Установка Cfengine 3 в Ubuntu
системам, то есть подчиненные системы получают не ин- В репозитарии текущей LTS-версии Ubuntu 8.04 доступ-
струкции по изменению состояния, а описание желаемого/ на только вторая версия Cfengine. Третья имеется лишь
конечного состояния. Процесс проверки соответствия ци- в Ubuntu 10.4 (Lucid Lynx), который также планируется
кличен и при несанкционированном изменении конфигу- к выпуску с приставкой LTS (Long Term Support). Поэтому
рации управляемой системы, возврат к нужному значению установка последнего релиза возможна лишь из исходных
будет произведен автоматически. текстов. В качестве зависимостей указаны библиотеки
Главные требования к Cfengine – работа в большой сети OpenSSL, libc6, база данных BerkeleyDB, компилятор и опци-
с изменяющейся конфигурацией и высокая безопасность. онально PCRE (Perl Compatible Regular Expression). В боль-
Приложение способно работать практически в любой ге- шинстве случаев все необходимое в системе есть.
терогенной среде, с любым количеством компьютеров,
$ sudo apt-get install libdb4.6 libdb4.6-dev libssl0.9.8 ↵
в том числе при использовании низкоскоростных каналов, libc6 libpcre3 bison flex
и в мобильных агентах, редко подключающихся к сети.
Написан Cfengine на языке С. Поддерживаются Windows При наличии библиотек OpenLDAP, MySQL, PostgreSQL
(cygwin), Linux, Mac OS X, Solaris, AIX, HPUX и прочие UNIX- будут доступны дополнительные возможности, хотя Cfengine
системы. cможет работать и без них.
При помощи Cfengine можно автоматизировать: Скачиваем исходные тексты Cfengine 3:
> создание, изменение и удаление файлов и символиче-
$ wget –с http://www.cfengine.org/tarballs/ ↵
ских ссылок; cfengine-3.0.2.tar.gz
> изменение конфигурационных файлов в соответствии
с правилами; Распаковываем архив и компилируем стандартным обра-
> проверку и настройку сетевых интерфейсов; зом (./configure; make; make install).
> проверку и установку прав доступа к файлам и катало- Обновления выходят приблизительно раз в полгода, ис-
гам; ключение делается только при обнаружении серьезных
> монтирование файловых систем; проблем. Доступна и версия для разработчиков, в которой
> контроль над изменением файлов при помощи MD5- имеются все последние наработки:
суммы;
$ mkdir cfengine
> откат несанкционированных изменений;
$ cd cfengine
> запуск скриптов и команд, контроль над выполнением; $ svn checkout https://svn.iu.hio.no/projects/ ↵
> управление и контроль над работой сервисов (демо- cfengine-3/trunk
нов);
> дублирование системных настроек – при замене сер- После установки в каталоге /usr/local/sbin появится не-
вера нужные настройки будут произведены автомати- сколько исполняемых файлов:
чески; cf-agent – клиентская часть, агент, непосредственно вы-
> изменение реестра Windows и зон Solaris. полняющий конфигурирование системы, именно он осу-
Основная идея Cfengine – создание единого набора ществляет модификацию, перезапуск сервисов, выпол-
конфигурационных файлов, описывающих настройку еди- няет сценарии и прочие настройки;
ной системы или всех узлов в сети. Использована клиент- cf-serverd –серверная часть, коорая обеспечивает аген-
серверная архитектура, реализованная с несколькими ути- там совместное использование любых файлов, в том чис-
литами, выполняющими различные задачи. После установки ле и конфигурационных, и получает запросы на выполне-
Cfengine агент связывается с сервером, где получает све- ние текущей политики;
дения о конфигурации и применяет изменения, если такие cf-execd – планирует выполнение заданий, обеспечива-
будут обнаружены. ет сбор результата и отправку сообщения на системную
Типичная инфраструктура может состоять из трех компо- учетную запись, может служить заменой cron;
нентов: cf-key – создает открытые и частные ключи, используе-
Policy Definition Point – не обязательная, но очень же- мые утилитами cf-agent и cf-serverd для опознавания друг
лательная часть системы, построенная на системе кон- друга;
троля версия вроде CVS, позволяющая отслеживать все cf-know – агент, позволяющий построить карту семанти-
изменения в настройках; ческой сети обмена знаниями по стандарту ISO;
Distribution point – один или несколько серверов, ко- cf-monitord – агент мониторинга, контролирующий теку-
торые распространяют файлы политики, описанные щее состояние системы (процессы, сетевые соединения,
в promises.cf и расположенные в каталоге /var/cfengine/ использование ресурсов и т.д.), также анализирует из-
masterfiles; менения на предмет аномальности;
конечные узлы – на которых применяются политики, cf-promices – проверка набора конфигурации перед
скопированные из Distribution point в каталог /var/cfengine/ ее применением;
inputs. cf-report – создание отчетов в различных форматах;

системный администратор январь-февраль 2010 49


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

cf-runagent – вспомогательная программа, при помощи ных целей. Имена можно задавать произвольно, но обыч-
которой можно потребовать от cf-serverd выполнения cf- но выбирают более описательные: cf-server.cf, cf-execd.cf,
agent с существующей политикой. Может применяться cfbackup.cf и так далее. Но чтобы их задействовать, они
для имитации изменений на клиентских системах и при- должны быть описаны в файле promises.cf в секции inputs
нудительного применения политик. в body common control. Как это сделать, будет показано
В Cfengine 2 названия исполняемых файлов отличались. далее.
Для своей работы различные компоненты Cfengine ис- Заготовки основных файлов уже есть, копируем:
пользуют подкаталоги в /var/cfengine или ~/.cfagent (при за-
$ sudo /usr/local/share/doc/cfengine/inputs/*.cf ↵
пуске под учетной записью, отличной от root). Причем не- /var/cfengine/inputs
которые пути в /var/cfengine жестко вшиты в исходный код.
Это сделано для повышения безопасности, поэтому при по- Теперь, после изменений в файлах политики, можно за-
пытке вынести отдельные файлы или настройки за пределы пускать агента для приведения их в действие.
/var/cfengine утилит из его состава не могут их найти. По умолчанию cf-agent ищет настройки в текущем ка-
Файлы, расположенные в /var/cfengine/masterfiles, со- талоге, inputs и /home/user/.cfagent. Здесь есть несколько
держат политики и используются в Distribution point, в /var/ особенностей. Если для удобства создать символическую
cfengine/inputs на клиентских системах хранятся получен- ссылку в каталог /etc, например /var/cfengine/inputs -> /etc/
ные с Distribution point файлы, которые будут считываться cfengine, то после запуска cf-agent она будет переименова-
при запуске, в /var/cfengine/outputs – отчеты об изменени- на в inputs.cf-moved -> /etc/cfengine, а каталог inputs будет
ях и текущем состоянии. Все каталоги, за исключением создан вновь и, естественно, без конфигурационных фай-
masterfiles, будут созданы автоматически при запуске про- лов внутри.
граммы клиента. Кроме этого, агент требует, чтобы исполняемый файл
После установки шаблоны политик находятся в катало- cf-promises был установлен в домашний каталог /var/
ге /usr/local/share/doc/cfengine. Их можно использовать при cfengine/bin:
ознакомлении с принципами работы. Создаем на Distribution
cf-promises needs to be installed in /var/cfengine/bin
point нужный каталог и копируем в него шаблоны: for pre-validation of full configuration

$ sudo mkdir -p /var/cfengine/masterfiles


$ sudo cp /usr/local/share/doc/cfengine/*.cf ↵ Такое поведение в целях безопасности вшито в код, из-
/var/cfengine/masterfiles менить его можно только путем перекомпиляции, но вряд ли
в этом есть смысл.
Хотя чтобы не быть заваленными сообщениями, лучше Проверяем:
брать шаблоны по одному и смотреть, как они работают.
$ whereis cf-promises
Далее необходимо создать ключи сервера:
$ sudo /usr/local/sbin/cf-key cf-promises: /usr/local/sbin/cf-promises

После запуска утилиты в /var/cfengine будет создано И устраняем:


еще несколько подкаталогов, ключи будут сохранены в /var/ $ sudo cp /usr/local/sbin/cf-promises /var/cfengine/bin
cfengine/ppkeys.
Текущая версия Cfengine 3.0.2 почему-то разрешает ис-
$ sudo ls /var/cfengine/ppkeys/
пользование такой символической ссылки, выходящей
localhost.priv localhost.pub за пределы /var/cfengine:
$ sudo ln -s /usr/local/sbin/cf-promises /var/cfengine/bin
По умолчанию имя начинается с localhost, но, используя
дополнительные параметры (их можно узнать при помощи Но такое поведение несвойственно Cfengine, ранее
-help), можно указать другое название файла и каталог, символическая ссылка не работала, поэтому файл лучше
но это не всегда желательно. Кроме политик, в inputs долж- именно копировать. После первого запуска агента в ката-
ны находиться три обязательных файла: лог /var/cfengine/bin или ~/.cfagent/bin будут скопированы
promises.cf – основной конфигурационный файл, агент и все остальные исполняемые файлы, входящие в комплект
и сервер будут считывать его при запуске; Cfengine. Кроме этого, здесь образуются символические
update.cf – файл, определяющий настройки обновлений, ссылки для запуска named-checkzone и утилит из комплекта
получаемых агентами; dnssec-tools (если такие есть в системе).
failsafe.cf – файл, считываемый сервером и агентом Теперь можно попробовать загрузить (восстановить) кон-
в том случае, когда другие настройки недоступны или не- фигурацию Cfengine из failsafe.cf.
правильны. С его помощью агент может восстановить на-
$ cd /var/cfengine/masterfiles
стройки. $ sudo /usr/local/sbin/cf-agent --bootstrap
Если таких файлов не будет найдено, получим сообще-
ния вроде: Эта команда считает все файлы с расширением .cf в те-
Can't stat file "/var/cfengine/inputs/failsafe.cf" for parsing кущем каталоге и переместит их в inputs. Кроме этого, в /var/
cfengine будут созданы файлы журналов (выполненных опе-
Кроме этого, возможно использование отдельных фай- раций), базы с классами, аудита, системными настройками
лов для настройки каждого компонента или вспомогатель- и т.п.

50 январь-февраль 2010 системный администратор


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

Чтобы продвигаться дальше, необходимо разобраться i686_2_6_24_19_server linux_i686_2_6_24_19_server__1_


с правилами и обязательствами. SMP_Wed_Jun_18_15_18_00_UTC_2008 compiled_on_linux_gnu
virtual net_iface_lo net_iface_eth0 ipv4_192_168_17_156
ipv4_192_168_17 ipv4_192_168 ipv4_192 fe80__20c_29ff_fed7_
Описание политик a8e1 cfengine_3_0_2 cfengine_3_0 cfengine_3 debian
В терминологии Cfengine все указания называются обяза- lsb_compliant ubuntu_hardy ubuntu_8_4 ubuntu_8 common }

тельствами или обещаниями (англ. promises), что полностью Список классов также доступен в файле allclasses.txt,
соответствует используемой теории, но чтобы не путать, расположенном в каталоге /var/cfengine/state. Кроме встро-
я буду использовать более привычные компьютерные – по- енных (hard) классов, различают и пользовательские (soft)
литика и правила, чем они, собственно, и являются. В от- классы. Классы с типом common являются глобальными,
личие от предыдущей версии механизм описания правил любые другие – локальные. При вызове класса можно ис-
переработан. Сейчас политики стали более структуриро- пользовать круглые скобки для группировки и операторы
ванными и могут содержать правило (promises), коллек- сравнения (!, & (или точка «.»), | (или ||)). В итоге достаточно
цию правил (promise bundles), которые также группируют- легко задать практически любое условие выполнения, кото-
ся в большую единицу – promise body. Также присутствуют рое к тому же хорошо читается.
и остальные атрибуты – классы, функции, циклы, массивы, Например:
переменные и данные. Те, кто изучал язык Perl, найдут в го- ubuntu_hardy&Yr2010&(Monday| Friday)&Night&Min05
товых правилах много знакомого.
Собственно, правила в Cfengine могут состоять из четы- Такая запись класса задает условие: Ubuntu 8.04, 2010
рех компонентов – типа, класса, объекта (promiser) и атри- год, ночь в понедельник или пятницу, 5-я минута часа.
бутов: Имя файла можно задать как полностью, включая путь (на-
пример, /etc/passwd), так и использовать регулярное выра-
type:
class:: жение.
"promiser" -> { "promisee1", "promisee2", ... } Для примера возьмем один из файлов шаблона unit_
attribute_1 => value_1,
helloworld.cf, копируем его в inputs.

attribute_2 => value_n.
$ whereis cf-promises

Не все элементы используются в правилах, некоторые cf-promises: /usr/local/sbin/cf-promises


элементы содержат неявные указания, которые могут опу-
скаться. Смотрим, что внутри:
Поле «тип» указывает на вид операции, то есть что необ- $ cat unit_helloworld.cf
ходимо сделать. В зависимости от типа системы может быть
использован один из следующих классов: # Объявляем глобальный набор классов control
body common control
в любом правиле – vars (переменная), classes (класс, по- {
казывающий состояние системы), reports (отчет); bundlesequence => { "hello" }; # Определение класса
только в агентах – commands (выполнение команды), }
databases (настройка базы данных), files (создание и на- # Локальная коллекция hello, ориентированная на агентов
полнение файла, установка атрибутов), interfaces (нас- bundle agent hello
тройка сетевых интерфейсов), packages (установка па- {
reports: # Тип отчеты
кета), storage (проверка подключенного диска), methods
(обработка других правил); linux:: # Класс linux
относятся к остальным компонентам – access (доступ
"Hello world!"; # Выводимые данные
к объектам в cf-serverd), measurements (выбор данных }
для отчета или мониторинга, в Cfengine Nova), roles (раз-
решение активации отдельных классов при удаленном Перед применением необходимо проверить политику
запуске cf-agent через cf-serverd), topics (ассоциация на отсутствие синтаксических ошибок, для этого запускаем
с именем при запуске cf-know) и occurrences (обращение cf-promises. Чтобы получить большую информацию по рабо-
к ресурсу в cf-know). те утилиты, используем дополнительно ключи -r (создание
Поле «класс» описывает группу объектов, к которым от- отчета) и -d (отладочный режим). В обычном режиме они
носятся правила. Во многих встроенных правилах это поле не нужны, здесь лучше использовать ключ -v:
отсутствует, что соответствует значению any, то есть любой.
$ sudo cf-promises –d 3 –r –f /var/cfengines/inputs/ ↵
Здесь могут стоять имя ОС (linux, solaris, ubuntu, debian …), unit_helloworld.cf
имя или IP-адрес узла, название интерфейса, зона Solaris,
учетная запись или группа, время (год, день, час, минута, В выводе будет видно, как анализируются текущие си-
цикл и т.п.). Просмотреть список классов на текущем узле стемные установки, устанавливаются классы и переменные,
можно при помощи команды: которые могут быть с ней сопоставлены.
# cf-promises -v NewClass(ipv4_192)
NewScalar(sys,ipv4[eth0],192.168.17.156)
cf3 -> Defined hard classes = { any verbose_mode Wednesday AddVariableHash(sys.ipv4[eth0]=192.168.17.156 (string)
Hr02 Night Min07 Min05_10 Q1 Hr02_Q1 Day16 December rtype=s)
Yr2009 Lcycle_2 GMT_Hr23 linux ubuntu undefined_domain Searching for scope context sys
32_bit linux_2_6_24_19_server i686 linux_i686 linux_ Added Variable ipv4[eth0] at hash address 1834 in scope sys

системный администратор январь-февраль 2010 51


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

with value (omitted) Разберем некоторые настройки из promises.cf. Вначале


NewScalar(sys,ipv4_3[eth0],192.168.17) настраивается периодичность работы агента:
AddVariableHash(sys.ipv4_3[eth0]=192.168.17 (string)
rtype=s) body agent control
… {
NewClass(lsb_compliant) # Минимальное время (в минутах) перед проверкой,
cf_popen(/usr/bin/lsb_release --id) # наличие новых правил
cf_pclose(pp) ifelapsed => "15";
cf_pwait - Waiting for process 27979 # Expireafter – максимальное время ожидания завершения
NewClass(ubuntu) # перестроек, по умолчанию 120 минут
cf_popen(/usr/bin/lsb_release --codename) }
cf_pclose(pp)
cf_pwait - Waiting for process 27982 В правиле body monitor control настраиваются параметры
NewClass(ubuntu_hardy)
работы системы мониторинга. Чуть ниже, в body executor
Далее идет проверка каталогов, доступа и так далее. control, настраивается запуск агента. Здесь необходимо
Если все правильно, последней строкой будет идти: указать адрес электронной почты, на который будут прихо-
cf3 Inputs are valid дить сообщения, и SMTP-сервер:
mailto => "mail@example.org";
По окончании работы в текущем каталоге появятся два smtpserver => "localhost";
файла (txt и html) с отчетом.
Если ошибок нет, запускаем политику на выполнение. Ре- По умолчанию сервер принимает подключения только
зультат увидим в консоли, кроме этого, будет создан журнал с localhost, чтобы удаленные клиенты могли подключаться,
(в моем случае /var/cfengine/c3.ubuntu.runlog). необходимо отредактировать правило body server control,
Конечно, это самый простой пример, вполне достаточ- указав в Allowconnects и/или Allowallconnects IP-адреса
ный, чтобы понять структуру правил. При наличии большого или доменные имена, соединения с которых будут прини-
количества параметров их объединяют в списки или масси- маться.
вы. Например, список сервисов: Теперь к нему можно об-
body server control
ратиться, указав в правиле $(service). {
Allowconnects => { "127.0.0.1" , "::1", ↵
"service" slist => { "ssh", "apache", "mysql" };
"192.168.17.100" , "192.168.1.0/24" };
Allowallconnects => { "127.0.0.1" , "::1", ↵
Описание рабочих систем может занимать много места "192.168.17.100" , "192.168.1.0/24" };
и содержать не один десяток правил. Часто одни правила # Слушать только на определенном интерфейсе
bindtointerface => "192.168.17.1";
зависят от результата выполнения других, чтобы не воз- Trustkeysfrom => { "127.0.0.1" , "::1" ... };
лагать на администратора задачу по их согласованию, все }
объявления обрабатываются циклически, до их выполнения.
Кроме этого, если Cfengine изменяет файл, он создает его Теперь при запуске сервер будет принимать подключе-
резервную копию с префиксом – cf-before-edit. ния агентов, прослушивая 5308 порт. Проверяем:
Нюансов достаточно много, и, как уже говорилось, в по-
ставке Cfengine имеется несколько десятков готовых ша- $ cf-serverd -v
$ netstat -an | grep 5308
блонов, которые можно использовать при изучении.
tcp6 0 0 :::5308 :::* LISTEN
Настройка сервера
Сервер cf-serverd при запуске по умолчанию считывает Кстати, если отследить процессы, то мы увидим, что за-
файлы site.cf, promises.cf, update.cf, library.cf, шаблоны ко- пуск сервера cf-serverd приведет к автоматическому старту
торых мы скопировали из /usr/local/share/doc/cfengine/inputs. сf-monitor и cf-agent.
Но удаленные клиенты еще не смогут подключаться
к серверу. Для обеспечения безопасности в Cfengine ис-
Подготавливаем систему к сборке пользуется механизм защиты и обмена ключами, подобный
OpenSSH. При этом нет необходимости вручную копиро-
вать открытый ключ на сервер (это делается автоматиче-
ски при первом подключении), такая децентрализованная
структура более устойчива к сбоям всякого рода.
По умолчанию только ключи локальной системы являют-
ся доверенными. Поэтому при попытке удаленного соедине-
ния получим ответ:
Not authorized to trust the server=192.168.17.1's
public key (trustkey=false)

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


IP-адреса удаленных систем в параметре Trustkeysfrom:
Trustkeysfrom => { "127.0.0.1" , "::1", ↵
"192.168.17.100" …. };

52 январь-февраль 2010 системный администратор


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

Дополнительно производится проверка соответствия DNS- случае мы получаем возможность управлять режимом за-
имени IP-адресу. Ее можно отключить, использовав параметр пуска централизованно, при помощи политик, и отправлять
skipverify, что не рекомендуется с точки зрения безопасности, отчеты на электронный адрес.
но для локальных сетей такой проверкой можно пренебречь. Для управления запуском cf-execd создадим файл
skipverify => { "192.168.17.*" }; cf-execd.cf такого содержания:
body executor control {
Теперь первый ключ, отправленный клиентом, автома-
тически принимается, попытка передать следующий ключ # Задержка запуска cf-agent, может потребоваться
# для завершения копирования файлов политик
будет заблокирована. Хотя в целях безопасности, вероят- splaytime => "1";
но, все же лучше копировать открытые ключи вручную. Имя mailto => "mail@example.org";
файла открытого ключа необходимо изменить, чтобы оно smtpserver => "localhost";
mailmaxlines => "100";
указывало на учетную запись и IP-адрес системы, к которой schedule => { "Min00_05" }; # Собственно расписание
она относится. Например, user-192.168.17.200.pub. # Журналирование в syslog
executorfacility => { "LOG_DAEMON" };
После того как подключение к серверу организовано, не-
обходимо разрешить узлам и пользователям доступ к фай- }
лам. Это делается при помощи правила access в файле
# Команда запуска
site.cf. Например, чтобы разрешить пользователю root дос-
туп ко всем файлам сервера со всех адресов, за исключе- bundle agent executor {
нием 192.168.17.200, создаем такое правило: processes:
"cf-execf"
bundle server access_rules() { "cf-execf" restart_class => "start_cfexecd";
access: commands:
"/var/cfengine/masterfiles" start_cfexecd::
deny => { "192.168.17.200" }; "/usr/local/sbin/cf-execd";
admit => { "192.168.17.*" }; }

roles: Теперь, чтобы файл был «виден», объявим его в promices.cf


".*"
authorize => { "root" };
в секции inputs:
} body common control {
inputs => {
"update.cf",
Теперь, используя masterfiles, мы можем автоматически
"site.cf",
распространять на клиентские системы не только политики, "library.cf" ,
но и обновления, и прочие файлы. "cf-execd.cf" # Добавили
};
Следует учитывать, что по умолчанию привязка идет к /var/ }
cfengine и доступ к корню сервера невозможен. То есть ис-
пользовать в предыдущем правиле («/») нельзя. Если же та- Вообще можно вместо создания cf-execd.cf все пара-
кая необходимость все же есть, то следует пропатчить файл метры вписать сразу в promises.cf, но при наличии боль-
server.c, прописав в 1923 линии код, разрешающий доступ шого количества записей читаемость от этого ухудшается.
к корню файловой системы сервера: При запуске cf-agent будет загружен и cf-execd, который пе-
риодически будет выполнять cf-agent.
/* Exact match means single file to admit */

if (strcmp(ap->path,"/") == 0 ) ***
{
Теперь можно полностью контролировать подчиненные сис-
res=true;
} темы, распространяя изменения, устанавливая обновления,
производя мониторинг и получая отчеты.
Следующее правило в promises.cf позволяет указать На первый взгляд Cfengine кажется сложной и запутан-
cf runagent и cf-agent, где ему искать сервер Distribution point: ной системой, но на самом деле это не так. Поэксперимен-
тировав несколько дней, можно разобраться с его особен-
body runagent control
{ ностями и возможностями. EOF
hosts => {
"127.0.0.1", "example.com:5308", …. };
1. Яремчук С. Централизованная настройка UNIX-систем с помо-
} щью Puppet. //Системный администратор, №7, 2007 г. – С. 58-61.
2. Сайт Cfengine и Open Source-сообщества Cfengine – http://www.
Теперь при подключении агента увидим в консоли серве- cfengine.com, http://www.cfengine.org.
ра примерно такую запись: 3. Wiki Cfengine – http://www.cfwiki.org.
4. Cfengine на SourceForge – http://cfengine.sourceforge.net.
cf3 Host localhost/::ffff:127.0.0.1 was found in the list
of hosts to trust 5. Страница Cfengine в проекте GNU – http://www.gnu.org/software/
cfengine.
В том случае если не ответит первый по списку сервер, 6. Архив рассылки сообщений об ошибках – http://www.mail-
агент будет подключаться к следующему и так далее. archive.com/bug-cfengine@cfengine.org/info.html.
Для периодического запуска cf-agent вместо cron пред- 7. Cfengine reference manual – http://www.cfengine.org/manuals/cf3-
лагается использовать специальный демон cf-execd. В этом reference.html.

системный администратор январь-февраль 2010 53


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

Визитка

ИЛЬЯ РУДЬ, сертифицированный тренер Microsoft, специализируется


на технологии Active Directory, один из основателей ресурса itband.ru

КОНСТАНТИН ЛЕОНТЬЕВ, архитектор подразделения консалтинга Microsoft


Services в России, занимается технологиями Core Infrastructure. Обладатель
высшей сертификации Microsoft Certified Architect и Microsoft Certified
Master по специализации Windows Server 2008 Directory

Разговор на «ты»
Репликация Active Directory
Одна из главных рекомендаций Microsoft касательно ADDS – необходимость
развертывания в производственной среде не менее двух контроллеров домена.
Однако их может быть гораздо больше

Когда системный администратор начинает работать в круп- Сайты и Сервисы», вы всегда подключаетесь к конкретному
ной сети на базе Active Directory Domain Services (ADDS), его контроллеру домена. И при желании можете выбрать, с ка-
одной из важнейших забот становится репликация Active ким контроллером работать. Это означает, что вы работаете
Directory. Даже если учесть, что этот механизм полностью с конкретной версией базы данных, которая в настоящий
автоматизирован и при правильной изначальной конфи- момент может отличаться от других копий. Естественно, соз-
гурации редко требует вмешательства, не стоит забывать давая учетную запись либо меняя конфигурацию, изменения
о таких реалиях жизни, как выключения света, медленные вносятся только в один файл NTDS.DIT, который находит-
и нестабильные каналы, ошибки администраторов и просто ся на контроллере, куда подключена оснастка (или любой
внештатная работа службы, вызванная вспышками на Солн- другой инструмент управления). После внесения изменений
це или лунным затмением. Как раз для борьбы с вышепере- критически важно оповестить другие контроллеры о них
численными недугами и необходимо понимание механизмов и новых данных и как можно скорее произвести синхрони-
репликации, а также способов управления ею. зацию. В Active Directory этот процесс синхронизации на-
зывается репликацией, в дальнейшем будет использован
База данных Active Directory именно этот термин. Особенно важно помнить эти факты,
Впервые появившись в Windows Server 2000, технология когда вы занимаетесь решением проблем с репликацией
Active Directory (это прежде всего транзакционная база Active Directory и вносите изменения в контекст конфигура-
данных, содержащая информацию об объектах вашей ции AD. Это происходит тоже на конкретном контроллере
сети, глубоко интегрированная с системой безопасности и с конкретным файлом NTDS.DIT.
Windows) более чем за девять лет претерпела некоторые из- Физически NTDS.DIT – это просто один файл, но логиче-
менения. Но даже в Windows Server 2008 R2 работает на хо- ски он состоит из нескольких разделов (иногда их называ-
рошо зарекомендовавшем себя движке Extensible Storage ют контекстами именования или контекстами репликации),
Engine (ESE). Если верить расчетам масштабируемости, каждый из которых содержит определенную информацию
данного решения должно хватить даже сетям с нескольки- и реплицируется по-своему.
ми миллионами объектов, а вырасти база может до 16 те- Раздел Schema хранит в себе схему Active Directory, ко-
рабайт. Сердцем Active Directory является файл NTDS.DIT, торая описывает, какие объекты могут быть созданы и что
в котором, собственно говоря, вся информация и хранится. они собой будут представлять. Меняется реже всего, как
При добавлении второго и последующих контроллеров до- правило, при переходе контроллеров на новую операци-
мена происходит создание копии данного файла и разме- онную систему либо при установке в организации почто-
щение ее на введенном в строй новом контроллере. Можно вой системы Exchange. Процесс изменения базы данных
сделать четкий вывод: каждый контроллер домена хранит в контексте схемы чаще всего называют расширением
свою версию файла NTDS.DIT. схемы, и это не случайно, т.к. отменить данные изменения
Важно понимать, что при открытии оснастки для работы (например, удалить созданные в этом контексте объекты)
с Active Directory, а это может быть «Active Directory Поль- невозможно. Репликация раздела осуществляется на все
зователи и Компьютеры» или, как вариант, «Active Directory контроллеры домена в лесу Active Directory. Единственный

54 январь-февраль 2010 системный администратор


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

раздел, чья репликация не является мультимастерной. Ре- ForestDNSZones – хранит SRV и CNAME записи для леса
пликация раздела Schema всегда односторонняя и выпол- AD и реплицируется на все контроллеры домена в лесу,
няется от контроллера домена, владеющего ролью FSMO являющиеся DNS-серверами.
«Хозяин Схемы», на все оставшиеся контроллеры домена DomainDNSZones – содержит DNS-записи для зоны до-
(см. рис. 1). (Впоследствии оставшиеся контроллеры до- мена. Реплицируется на все контроллеры домена с уста-
мена реплицируют информацию своим репликационным новленным на них DNS-сервером.
партнерам, но источником этой цепочки репликации всегда Посмотреть на каждый раздел каталога и данные, в нем
будет «Хозяин схемы».) хранящиеся, можно через утилиты ADSI Edit AdExplorer
Раздел Configuration – содержит информацию о конфи- и LDP.exe (см. рис. 2). Утилиту (AdExplorer) можно скачать
гурации Active Directory. Он описывает, какие и сколько с сайта Microsoft, она входит в комплект утилит Sysinternals.
доменов создано, как они между собой связаны, сколько А LDP.exe становится доступна после установки на кон-
существует сайтов, какие сервисы доступны в организации троллер домена Windows Support Tools. Следует отметить,
и просто системные настройки службы каталогов, такие как что данный комплект не потерял своей актуальности и пос-
квоты, политики LDAP-запросов, правила неточного поиска, ле выхода Windows Server 2008.
разрешения имен объектов. Раздел реплицируется между Теперь важно уяснить следующее: когда клиент аутенти-
всеми контроллерами доменов в лесу, может быть изменен фицируется на контроллере домена и применяются группо-
на любом контроллере домена. Изменения данного раз- вые политики, образуется трафик (85 Кб на вход станции
дела связаны с конфигурированием и настройкой самой в домен – с DefaultDomainPolicy и 75 Кб на вход пользова-
ActiveDirectory. теля – тоже с DefaultDomainPolicy). Более того, репликация
Раздел Domain – или доменный. Все учетные записи поль- изменений между контроллерами доменов порождает свой
зователей, группы безопасности, организационные подраз- репликационный трафик. Этим трафиком нужно управлять.
деления, объекты компьютеров и принтеров создаются и хра- Представьте себе, что организация и, естественно, ваш до-
нятся в данном разделе. Реплицируется раздел только между мен Active Directory располагается в двух городах, связан-
контролерами домена в том домене, к которому принадлежит ных WAN-каналом. Однажды все пользователи филиала
контроллер. Получается, что в организациях, имеющих не- в Ростове-на-Дону начнут обращаться к контроллеру, рас-
сколько доменов, в каждом из них будет свой раздел Domain. положенному в центральном московском офисе. А контрол-
Разделы Application – опциональные разделы. Зона ре- леры домена начнут реплицировать информацию в любое
пликации зависит от настройки. Как правило, создается два время и по первому требованию. Минимум с чем вам при-
Application-раздела, это ForestDNSZones и DomainDNSZones. дется столкнуться – это высокая утилизация WAN-канала

Рисунок 1. Разделы базы Active Directory Рисунок 2. Выбор раздела для подключения в утилите LDP.exe

Рисунок 3. Свойства репликационной связи Рисунок 4. Принцип создания связей репликации службой KCC

системный администратор январь-февраль 2010 55


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

и медленный вход пользователей в домен. Поэтому в Active #Вместо server1.itband.ru вы укажете FQDN вашего сервера
Directory введено понятие сайтов. repadmin /kcc server1.itband.ru

Репликация в рамках одного сайта Active Directory Если нужно запустить генерацию связей на всех контрол-
Сайт – это логическое объединение контроллеров домена лерах домена в сайте, то команда Repadmin принимает вид:
и клиентов для управления служебным трафиком службы
#Если имя сайта было изменено, "Default-First-Site-Name"
каталогов. Если ваш Лес Active Directory не распространя- #заменяется реальным именем
ется за пределы одного сегмента локальной сети, следова- repadmin /kccsite: "Default-First-Site-Name"
тельно, вы работаете с односайтовой структурой. Именно
она является дефолтной, именно с нее мы начнем разговор. Можно также запустить процесс генерации тополо-
При создании Active Directory и поднятии (подразуме- гии на всех контроллерах леса командой repadmin /kcc *.
вается процедура dcpromo) первого контроллера домена Большинство опций команды repadmin поддерживают ключ
формируется сайт по умолчанию с именем Default-First-Site- /async, который дает задание контроллеру домена и при этом
Namе. Если не создавать дополнительных сайтов и придер- не ожидает его завершения.
живаться односайтовой структуры, все новые контроллеры Без административного вмешательства служба KCC
будут попадать в данный сайт. После появления второго стартует на каждом контроллере домена раз в 15 минут,
и последующих контроллеров должны образоваться Репли- в случае необходимости добавляет или удаляет лишние
кационные связи (connection objects), указывающие на то, репликационные связи (учтите, что связи, созданные вруч-
какой контроллер и откуда должен реплицировать измене- ную, не управляются KCC). Логика создания связей в рам-
ния. Посмотреть эти связи можно через оснастку «Active ках одного сайта кажется довольно простой. Каждый кон-
Directory Сайты и Службы». троллер не реплицируется с каждым, служба KCC всегда
На рис. 3 открыта оснастка «ActiveDirectoryСайты и Служ- пытается создать кольцо репликации, причем по мере до-
бы». По имеющейся информации можно сказать, что в дан- бавления новых контроллеров кольцо будет расширяться.
ном примере есть единственный сайт по умолчанию, в кото- Расширение не бесконечно, при создании связей существу-
ром находятся два контроллера домена Server1 и Server2. ет «правило трех прыжков». Это значит, что между двумя
А также что Server1 имеет партнера по репликации Server2 контроллерами домена при репликации не может быть боль-
и реплицирует с него изменения. Без наличия данных свя- ше трех посредников.
зей репликации между контроллерами работать не будут. Как только число контроллеров достигнет восьми, прави-
Нередки случаи, когда системные администраторы, уста- ло «трех прыжков» приведет к тому, что служба KCC выпол-
новив новый контроллер домена, не находят у него данных нит «ход конем» и добавит дополнительные прямые связи,
связей и начинают создавать их руками. Это распространен- сокращая расстояние между двумя любыми контроллерами
ная ошибка. За создание связей, базируясь на определен- до допустимого значения «максимум в три прыжка». Данная
ной логике, отвечает служба KCC (Knowledge Consistency ситуация хорошо проиллюстрирована на рис. 4. Создание
Checker). Самостоятельное создание связей чревато воз- связей между контроллерами, расположенными в разных
никновением ошибок и дальнейшей путаницей. Для тех же, сайтах, выполняется с учетом топологии сайтов, сайт-линков
кто не хочет ждать, пока KCC справится с задачей, суще- и мостов между сайт-линками. Подробнее о построении меж-
ствует способ ее поторопить. сайтовой репликации читайте в следующей части статьи.
Для этого необходимо использовать утилиту Repadmin Следует отметить, что кольцо при создании топологии репли-
с ключом kcc. Синтаксис будет выглядеть следующим об- кации строится независимо для каждого контекста реплика-
разом: ции (раздела Active Directory), далее эти кольца накладывают-

Рисунок 5. Расписание репликации Рисунок 6. Просмотр значения highestCommittedUSN на контроллере домена

56 январь-февраль 2010 системный администратор


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

ся друг на друга, и выясняется, где можно вместо нескольких В зависимости от режима работы леса список событий мо-
репликационных связей обойтись одной. жет меняться.
Внутрисайтовая репликация начинается, когда в Active Если внимательно присмотреться к свойствам реплика-
Directory происходит изменение. Это может быть изменение ционной связи, то можно найти расписание репликации,
атрибута или создание учетной записи. Контроллер домена, по умолчанию оно установлено на ежечасный запуск. Воз-
в базе которого произошли перемены, ожидает 15 секунд, никает вопрос: зачем еще одно расписание, если есть сис-
а затем отправляет ближайшему партнеру репликации уве- тема уведомлений?
домление о том, что на нем произошло какое-то обновление. Данное расписание является основным и обязательным
При наличии двух и более партнеров по репликации, последу- способом репликации (см. рис. 5). Несмотря на то что сис-
ющие уведомления отправляются каждому партнеру с трех- тема уведомлений, описанная выше, в большинстве случаев
секундной задержкой (верно для уровня леса Windows 2003 обеспечивает синхронизацию до запуска этого расписания,
и выше, для Windows 2000 первичная задержка составляет она не гарантирует успеха. Возможна ситуация, когда кон-
300 секунд, а последующие – 45 секунд). После получения троллер домена будет занят on-line-дефрагментацией базы,
уведомления об изменении партнер репликации проверяет пересчетом связей службой KCC и просто проигнорирует
возможность репликации и список обновлений и выполняет необходимость обработать пришедшие к нему уведомления
процесс репликации с тем контроллером, который прислал об изменениях на партнерах по репликации. В такой ситуа-
уведомление. Трехсекундная задержка предотвращает чрез- ции изменения будут прореплицированы в течение часа.
мерную загрузку из-за одновременных запросов обновлений При возникновении трудностей с репликацией можно,
от множества партнеров по репликации. Периоды нотифика- используя утилиту replmon, вручную запустить процесс ре-
ций можно настроить командой repadmin /notifyopt. пликации, не дожидаясь расписания:
Следует обратить особое внимание читателей, что про-
repadmin /replicate server2.itband.ru server1. itband.ru ↵
цесс репликации всегда происходит в режиме pull, т.е. «стя- dc=itband,dc=ru
гивания» изменений и новых объектов, но не в режиме push.
Это связано с тем, что только контроллер – хозяин файла С ключем /replicate необходимо задать, куда (server2.
NTDS.DIT – имеет право в нем что-то изменять, он отвечает itband.ru) и с какого контроллера (server1.itband.ru ) долж-
за целостность своей БД. Из этого также следует, что все ны реплицироваться данные, а также какой раздел каталога
линки репликации, которые создаются вручную или служ- нужно реплицировать (dc=itband,dc=ru).
бой KCC, имеют однонаправленную природу, т.е. логически Запустить репликацию всех разделов Active Directory
обозначают входящий поток репликационной информации. в рамках всего леса (в рамках существующей топологии)
Некоторые изменения реплицируются без пятнадцати- довольно легко, для этого следует выполнить:
секундной задержки. Такая репликация называется сроч- Repadmin /syncall /AeS
ной (urgent replication). В события, ее вызывающие, входят
блокировки учетных записей, изменение пароля учетной Учтите, что в крупных сетях такой запуск репликации
записи. В официальных документах присутствует путаница. может вызвать серьезный поток трафика, который пойдет
По сути, это не репликация вовсе, механизм передачи этих не только по скоростным каналам.
изменений в корне отличается от процесса репликации,
хотя в качестве транспорта используется тоже протокол Алгоритм распространения изменений
RPC. Такая репликация выполняется не обычным механиз- Теперь необходимо разобраться, как после получения ре-
мом репликации, а специальными вызовами RPC. По сути, пликационного уведомления от партнера контроллер до-
это запросы, аналогичные изменению объектов через ADSI. мена решит, есть ли изменения, необходимые для реплика-

Рисунок 7. Просмотр вектора обновлений на контроллере DC1 Рисунок 8. Просмотр атрибутов uSNCreated и uSNChanged для учетной записи

системный администратор январь-февраль 2010 57


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

ции? Если есть, то какие объекты или их отдельные атрибуты ных с других контроллеров (см. рис. 7).
должны быть прореплицированы? Алгоритм выглядит сле- Есть одно «но». Сам по себе up-to-date vector отвечает
дующим образом. на вопрос: были ли изменения? Этого недостаточно, необ-
Любой контроллер домена ведет некий счетчик, на- ходимо вычислить, что изменилось. Давайте рассмотрим
зываемый highestCommittedUSN, который увеличивается данный механизм на примере.
на единицу при любом атомарном изменении базы Active В нашей сети находятся два синхронизированных контрол-
Directory. При этом у каждого контроллера домена счет- лера домена (DC1и DC2). До изменений highestCommittedUSN
чик свой и между контроллерами его значения не совпа- у DC1 равен 20902, а у DC2 16940. На контроллере DC1 соз-
дают. Например, в 9 утра значение highestCommittedUSN дается учетная запись пользователя Федя Рашпин. После
у контроллера DC1 было равно 14879, а в 6 вечера 14896. создания учетной записи highestCommittedUSN на DC1 стал
Это значит, что за прошедшее время в базе данного кон- показывать 20909. Это говорит о том, что было произведе-
троллера произошло 17 изменений. Посмотреть значение но семь изменений. Напоминаем, что считаются атомарные
highestCommittedUSN можно с помощью утилиты ldp, просто изменения, т.е. создание учетной записи можно разложить
подключившись к нужному контроллеру домена. При под- на само создание плюс изменение ряда атрибутов, которые
ключении выводится состояние динамического системного выполняет оснастка Active Directory Users and Computers.
объекта RootDSE, среди атрибутов которого как раз и при- Если пользователь подключится через LDP.exe к на-
сутствует highestCommittedUSN (см. рис. 6). шему объекту, то можно увидеть два атрибута uSNCreated
После проведенной репликации каждый контроллер до- и uSNChanged (см. рис. 8).
мена кэширует значения highestCommittedUSN своих репли- uSNCreated будет говорить, какой highestCommittedUSN
кационных партнеров. И когда впоследствии контроллер до- был в момент создания объекта на данном контроллере,
мена DC1 получит уведомление от контроллера DC2, в нем а uSNChanged – в момент последнего изменения. Получа-
будет информация о текущем highestCommittedUSN DC2. ется, что первый показатель (uSNCreated) будет оставать-
Контроллеру DC1 останется только сравнить текущий ся неизменным, а второй, в свою очередь, (uSNChanged)
highestCommittedUSN с тем, который он закэшировал во вре- по мере обновления объекта будет расти. Важно понимать,
мя прошлой репликации. Если он вырос, значит, в базе DC2 что uSNCreated и uSNChanged на каждом контроллере до-
произошли изменения и необходимо произвести реплика- мена у объекта будут свои.
цию. Если остался прежним, то в ней нет необходимости. Посмотрим на пользователя Федя через утилиту
Таблица, в которой хранится информация о highest repadmin. Для получения служебной информации, исполь-
CommittedUSN репликационных партнеров, называется зуемой при репликации, задействуем ключ /showmeta.
вектором обновления, или up-to-date vector. Посмотреть ее
repadmin /showmeta "CN=Федя Рашпин,OU=testou,DC=lab, ↵
можно с помощью утилиты repadmin. DC=itband,DC=ru"

repadmin /showutdvec dc1 dc=lab,dc=itband,dc=ru


При этом нас интересует информация с каждого кон-
Default-First-Site-Name\DC2 @ USN 16667 @ Time 2009-09-21 троллера. Но начнем с DC1.
01:24:15
Default-First-Site-Name\DC1 @ USN 20704 @ Time 2009-09-21
Какую же информацию нам дает repadmin (см. рис. 9)?
01:31:25 Данный список – это объект пользователя, разложенный
по атрибутам.
В данном примере результатом будет вывод значений По каждому атрибуту можно увидеть:
highestCommittedUSN репликационных партнеров DC1 Loc.USN – это highestCommittedUSN контроллера DC1
(а также актуальный USN его самого), это будут значения, в момент внесения последних изменений.
о которых DC1 знает, в действительности они могли вырасти Originating DC – говорит о том, на каком контроллере
по причине внесения изменения в базу на тех контроллерах. были произведены последние действия с этим атрибу-
Следует помнить, что highestCommittedUSN увеличивается том, т.е. откуда пошло распространение.
как после изменений, внесенных в базу непосредственно Org.Usn – это highestCommittedUSN контроллера, автора
на контроллере, так и после изменений, прореплицирован- изменений в момент внесения последних.

Рисунок 9. Вывод метаданных о созданном пользователе на DC1 Рисунок 10. Вывод метаданных о созданном пользователе на DC2

58 январь-февраль 2010 системный администратор


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

Ver – версия атрибута, растет на единицу при каждом номера версии. Атрибут, имеющий более высокий номер
его изменении (локально или в результате репликации). версии, является приоритетным. Именно его значение будет
Attribute – непосредственно название самого атрибута. использоваться.
Взглянув на эту таблицу, можно сделать вывод, Правило второе. Если номер версии совпадает, учиты-
что пользователь «Федя Рашпин» был создан (или из- вается время изменения атрибута. Значение, установлен-
менен) на контроллере домена DC1, при этом увидеть, ное по времени последним, выигрывает. В гипотетической
что highestCommittedUSN DC1 в процессе создания учетной ситуации, когда изменения атрибута на разных контролерах
записи рос от 20904 до 20909 (Org.USN). имеют один номер версии, да и сделаны в одно время, по-
Совпадение колонок Loc.USN и Org.USN говорит о том, бедит тот контроллер, который имеет больший номер GUID.
что запуск repadmin /showmeta произведен на контроллере Возможно несколько любопытных ситуаций. Один адми-
домена, который был автором изменений. Если выполнить нистратор решает удалить пустое организационное подраз-
то же самое на втором контроллере, результат будет не- деление, другой же на соседнем контроллере в это время
сколько другой (см. рис. 10). создает учетную запись. Получается явный конфликт инте-
На DC2 четко просматривается, что автором всех изме- ресов.
нений (кроме одного) были DC1 и его highestCommittedUSN В такой ситуации будет задействован скрытый контейнер
(Org.Usn) в момент изменения каждого атрибута. А также LostAndFound, получить доступ к которому можно, только
highestCommittedUSN в момент внесения обновлений в базу переключив оснастку «Active Directory – пользователи и ком-
контроллера DC2 (Loc.USN). пьютеры» в расширенный режим (см. рис. 11).
А вот теперь пора сделать небольшой вывод. Когда кон- Новый созданный пользователь будет перемещен в дан-
троллер домена рассылает репликационным партнерам уве- ный контейнер, а организационное подразделение удалено.
домления об обновлении базы, он сообщает свой текущий Впоследствии администратор перенесет учетную запись
highestCommittedUSN. Партнер, получивший уведомление, в более подходящее место.
сравнивает этот highestCommittedUSN с тем, что он запом- Другой вид разногласий может возникнуть в случае
нил с прошлой процедуры репликации. Если он вырос, зна- одновременного создания объектов с одинаковыми имена-
чит, необходимо запускать репликацию. Например: DC2 по- ми, это может быть организационное подразделение или
лучил от DC1 уведомление и текущий highestCommittedUSN, учетная запись пользователя. В такой ситуации принцип
равный 20912, он сравнивает с известным ему значением довольно простой: объект, созданный первым, переиме-
20850. Делает вывод о необходимости репликации и за- новывается, точнее, к его имени добавляется objectGUID.
прашивает изменения, произошедшие в период роста Если необходимость в этом объекте впоследствии сохра-
highestCommittedUSN с 20850 до 20912. нится, ничто не мешает администратору дать ему новое имя
DC1 осуществляет выборку из своей базы. Для этого (см. рис. 12).
просматривается Loc.USN, и те атрибуты, которые меня- Большим преимуществом с точки зрения реплика-
лись в заданном диапазоне highestCommittedUSN, реплици- ции является переход на режим работы домена Windows
руются на DC2. Server 2003 и более поздние. В них изменилась процедура
репликации атрибутов типа linked-valued (пример: «Член-
Решение конфликтов ство в группах»). При добавлении разных пользователей
Не исключена ситуация, когда один и тот же атрибут будет на разных контроллерах в одну и туже группу результатом
меняться одновременно на двух и более контроллерах до- будет членство всех добавленных пользователей в составе
мена. Как быть в такой ситуации? Существует строгий меха- этой группы. В случае с Windows 2000 состав группы при та-
низм разрешения конфликтов. ком конфликте определялся бы по ее членству на том кон-
Правило первое. Можно было заметить в метаданных троллере, на котором изменения в группе были бы сделаны
репликации параметр Ver. Как уже было сказано, он увели- позже по времени.
чивается на единицу каждый раз при изменении атрибута. На этом хотелось бы закончить первую часть статьи,
Если сразу на двух контроллерах происходит изменение в следующей части мы поговорим о построении сайтов
атрибута, в первую очередь будет произведено сравнение и особенностях межсайтовой репликации. EOF

Рисунок 11. Контейнер LostAndFound Рисунок 12. Автоматическое разрешение конфликта

системный администратор январь-февраль 2010 59


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

Визитка

ВАЛЕНТИН СИНИЦЫН, кандидат физико-математических наук, доцент


Уральского государственного университета. Читает авторские курсы по Linux.
Главный редактор журнала Linux Format в России

ClearOS 5.1: открыт и... ?


Что принесло это коммерческому продукту
Популярный серверный дистрибутив снимает все
ограничения некоммерческой версии. Выиграют ли
от нововведения его пользователи?

Североамериканскую компанию PointClark Networks едва предложит вам выбрать язык (русский пока поддержива-
ли можно назвать новичком на рынке Linux-решений: ется лишь формально – он влияет на системную локаль,
ClarkConnect, ее шлюз и сервер уровня малых и средних но не веб-интерфейс). А также уточнить сетевые настрой-
предприятий, разрабатывается еще с 2000 года. Поэтому ки (включая имя домена), указать часовой пояс, сведения
анонсированное в середине сентября 2009 года решение об организации и зарегистрировать систему (последнее яв-
превратить ClarkConnect в полностью свободный проект ляется атавизмом коммерческой эпохи и сейчас не функци-
(ранее часть функционала присутствовала только в ком- онирует). Будьте осторожны и не закройте случайно вкладку
мерческой Enterprise-редакции), управляемый фондом Firefox, в которой открыт веб-интерфейс – простого способа
ClearFoundation [1], вызвало в сообществе определенный вернуть ее назад не обнаружилось. Покончив с первичной
резонанс. настройкой, вы сможете войти в систему, как root, с паро-
Изначально ClearOS 5.1 (так, с упором на «чистоту» лем, указанным при установке.
открытых решений, стал называться дистрибутив) предпо-
лагалось выпустить 30 сентября 2009 года, но планы изме- Первый взгляд
нились. На начало декабря была доступна только вторая ClearOS предлагает административный веб-интерфейс (ко-
бета-версия. Разработчики предупреждают, что работа нечно, на базе AJAX): https://адрес-сервера-clearos:81. Раз-
над продуктом еще не завершена. Тем не менее мы сочли работчики признают, что этот вариант не слишком удобен,
возможным установить ClearOS и поглядеть, что же принес- и предлагают поделиться соображениями по усовершен-
ло это «открытие» коммерческому продукту. ствованию, нажав на соответствующую ссылку.
Набор базовых сервисов, предлагаемых ClearOS 5.1, до-
Установка статочно стандартен: межсетевой экран, кэширующий DNS,
ClearOS 5.1 распространяется в виде загрузочного ISO- DHCP, прокси-сервер с возможностью фильтрации контента
образа объемом чуть менее 700 Мб. Текстовый инсталлятор (Squid/DansGuardian), почта (Postfix + Cyrus и веб-интерфейс
предложит выбрать режим работы (самостоятельный сер- от Horde), антивирус (ClamAV), антиспам (SpamAssassin
вер или шлюз – впоследствии настройку можно поменять), и серые списки PostGrey), файл-сервер (Samba), VPN
ввести слово «ClearOS» в знак того, что вы понимаете – (OpenVPN 2.1, PPTP, IPSec), но есть и изюминки.
все данные на локальном жестком диске и подключенных Это, во-первых, поддержка нескольких интернет-
USB-устройствах (!) будут потеряны, разметить жесткий диск соединений (MultiWAN), ранее присутствовавшая только
(можно автоматически) и выбрать модули для установки. По- в Enterprise-редакции. Данная функция позволяет как ба-
следний пункт выгодно отличает ClearOS от аналогичных ре- лансировать нагрузку на несколько равноправных каналов,
шений, где набор встроенного ПО жестко зафиксирован. так и распределять исходящие соединения по провайдерам
В основе системы лежит CentOS, на базе исходных тек- в зависимости от источника и порта получателя. К сожале-
стов Red Hat собираются многие серверные дистрибути- нию набор критериев для выбора исходящего канала доста-
вы, например Endian Firewall [2]. Необычно другое: ClearOS точно прост, что затрудняет создание средствами ClearOS
не отказывается от управления пакетами в традиционной для сложных (пусть и статических) схем маршрутизации.
CentOS форме. Обновление системы (например, с Beta 1 Во-вторых, это так называемые Flexshare – средства
до Beta 2) выполняется командой yum update, для добавле- для обмена файлами в локальной сети. Ничего необычного
ния нового модуля служит yum install, и так далее. в самой идее нет, но доступ к ресурсу Flexshare можно по-
После завершения установки и перезагрузки вы увидите лучить через HTTP/FTP (включая защищенные аналоги), сеть
графическую консоль и мастер первого запуска, который Windows, а выложить файлы – еще и отправкой электрон-

60 январь-февраль 2010 системный администратор


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

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


Для объектов, хранящихся на разделяемом ресурсе, поддер- Попробовать ClearOS можно и без установки: просто зайдите на https://
живаются базовые средства контроля доступа (полноценных demo[12].clearos.com:81, используя реквизиты get/clear. Административ-
ACL, увы, не предусмотрено), но отсутствуют дисковые кво- ный доступ к этим виртуальным системам открыт всем желающим, поэто-
ты. Реализация Flexshare повторяет историю MultiWAN: удоб- му не удивляйтесь, увидев странный набор системных сервисов и бра-
ный инструмент, подходящий в типовых случаях, но недоста- зильский/португальский в качестве языка по умолчанию.
точно гибкий для более сложных сценариев.
Пользователи (наряду с группами) лежат в основе на- ни платформы для сборки дистрибутива, ни даже инструк-
строек ClearOS: для контроля доступа ко всем ресурсам ции, объясняющей, как это делать.
сервера применяется единый LDAP-каталог. При создании Перечисленные трудности преодолимы, но это не тот
учетной записи пользователя можно отметить, с какими ре- путь, по которому должен развиваться свободный про-
сурсам (почта, VPN, WEB и так далее) он будет иметь воз- ект, надеемся, со временем ситуация изменится, хотя
можность взаимодействовать. Список пользователей мож- случившийся в конце декабря выпуск финальной версии
но импортировать в нескольких форматах, включая даже ClearOS 5.1 не принес в этом смысле ничего нового.
OpenDocument Spreadsheet, но, увы, нельзя настроить
ClearOS для работы с внешним LDAP-каталогом: это услож- Подведем итоги
няет его внедрение в существующую инфраструктуру. ClarkConnect – давно сформировавшийся серверный дистри-
бутив, имеющий более ста тысяч инсталляций и чуть меньшее
Ложки дегтя число обзоров в специализированной прессе и на онлайн-
У ClearOS имеются и досадные недостатки: речь идет ресурсах, поэтому мы остановимся не на его возможно-
не об ошибках, которые для бета-версии простительны, стях, а на том, что дало проекту переименование в ClearOS
а об архитектурных недоработках. Начнем с поддержки сети. и, как следствие, переход под крыло ClearFoundation в стату-
ClearOS справляется со статически и динамически настраи- се свободного проекта. К сожалению, пока немногое.
ваемыми Ethernet-интерфейсами, DSL/PPPoE, но не имеет Видны активные попытки создать вокруг ClearOS спло-
понятия о PPTP или L2TP, весьма «уважаемых» отечествен- ченное сообщество (достаточно сказать, что сам сайт
ными интернет-провайдерами, не говоря уже о к 3G- или www.clearfoundation.com во многом является социальной
WiMax-сетях. «Трехногая» схема деления сетей на локаль- сетью), маркетинговая машина работает на полную катуш-
ную, интернет- и демилитаризованную зоны не предусматри- ку, но сроки выхода финальной версии ClearOS 5.1 постоян-
вает специального интерфейса, выделенного для беспро- но сдвигаются. Документация к версии 5.1 также оставляет
водных соединений, которые есть в организациях и должны желать лучшего, если не считать справочник разработчика.
жестко контролироваться по соображениям безопасности. Хочется надеяться, что перечисленные здесь моменты явля-
Неудобно реализована поддержка OpenVPN. Коробоч- ются трудностями переходного периода и будут преодолены
ное решение – это компромисс между гибкостью и просто- к дате выпуска финальной версии. Возможности, открывае-
той настройки, но OpenVPN-модуль не позволяет указать мые для проекта открытой моделью разработки, слишком
ни тип используемого интерфейса (это TUN), ни IP-адреса, заманчивы, чтобы не воспользоваться ими. EOF
назначаемые виртуальному каналу. Если локальный адрес
совпал с подсетью, в которой находится мобильный клиент, 1. ClearFoundation – http://www.clearfoundation.com.
считайте, что вам не повезло. 2. Endian Firewall – http://www.endian.com.
К чему эти нападки? Можно просто взять исходные тек- Синицын В. Endian Firewall 2.2: из Италии с любовью. //Систем-
сты и поправить их! Исходные коды ClearOS пока отсутству- ный администратор, №6, 2008 г. – С. 18-21.
ют: на сайте [3] можно найти полный набор SRPM-пакетов, 3. Исходные тексты ClarkConnect 5.0 – http://download.clarkconnect.
но для ClarkConnect 5.0; по адресу [4] доступны неполные com/community/sources/5.x.
(нет как минимум всех веб-модулей административного ин- 4. Исходные тексты ClearOS 5.1 – http://download.clearfoundation.
терфейса) исходные тексты ClearOS 5.1. Нет также ни SDK, com/clearos/enterprise/sources/5.x.

Рисунок 1. Большинство серверных дистрибутивов желают занять весь жесткий диск, Рисунок 2. Веб-интерфейс позволяет легко настроить систему, но при необходимости
но только ClearOS покушается и на USB-носители можно всегда обратиться к стандартным инструментам по SSH

системный администратор январь-февраль 2010 61


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

Визитка

РАШИД АЧИЛОВ, поклонник FreeBSD с 14-летним опытом использования ее


в совмещенных с Windows сетях и сторонник Open Source. Администратор
сетей и средств защиты крупной торговой сети

АТС Samsung OfficeServ?


Теперь работаем с Installation Tool
Единственная в своем роде программа для уп-
равления офисными АТС Samsung – Samsung
OfficeServ Manager больше не разрабатывается.
Ей на замену пришла Installation Tool

Ты единственная моя Изменился формат базы данных настроек, сохра-


Именно так. В среде людей, обслуживающих АТС Samsung няемых на компьютер, – файл настроек стал меньше,
OfficeServ, до некоторого времени существовала единст- и настройки стали сохраняться и восстанавливаться зна-
венная программа настройки – Samsung OfficeServ Manager чительно быстрее. Даже не то что значительно – по ощу-
(OSM). Что поделать, закрытый протокол, рады были и тому, щениям быстрее раз в пять! Правда, за счет кардиналь-
что есть, потому что альтернативой было только програм- ного пересмотра формата базы и потери совместимости,
мирование с системного телефона. Но все меняется к луч- из-за чего переход, например с версии прошивки 2.69
шему, и Samsung наконец-то выпустила новую программу на 4.30 – достаточно долгий процесс
для управления АТС – Installation Tool (IT), которая в корне Был сделан первый шаг к созданию не просто сред-
отличается от OSM. ства управления АТС, а средства, дружественного
Отказались от идеи панели запуска (launchpad), ис- к пользователю. При проектировании интерфейса
пользуемой в OSM. Идея была хорошая на тот момент – программы отказались от простого перечисления MMC
программы для управления OS12, OS500 и OS7200 могли и сгруппировали их (настройки) по некоторым функцио-
серьезно различаться, но с унификацией в новых сериях нальным признакам. Это значительно повысило удоб-
эти различия стерлись и в IT все управление подключени- ство работы – перед тобой теперь не безликие ряды
ями выполняется непосредственно в самой IT, что значи- цифр, а имеющие осмысленное наименование группы
тельно повышает удобство работы с программой. Кроме настроек.
того, наконец-то в описании АТС можно применять не- У IT наконец-то появился русский интерфейс!
ASCII-символы, то есть вводить описания АТС по-русски. Но не думайте, что там профессиональный – про-

Рисунок 1. Общий вид окна Installation Tool Рисунок 2. Общий вид окна Installation Tool с подключенной АТС

62 январь-февраль 2010 системный администратор


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

сто все английские слова переведены на русский, На заметку


так что вместо quick link вы, разумеется, увидите В прошивках MCP версии 2.69 и ниже возможно использование SIP/
«быстрый подключить». Тем не менее в данной статье H323 без приобретения дополнительных лицензий, в прошивках 4.х,
все пункты меню будут называться по-русски. Кроме которые дают возможность использовать IT, для включения SIP/H323
русского и английского, доступны и другие языки: ко- требуется приобрести отдельные лицензии на каждый порт SIP/H323.
рейский, китайский, немецкий и итальянский. Справ- Стоит одна лицензия недорого – около 70 руб. SPNet же лицензирова-
ки по настройкам АТС как не было, так и нет, вместо ния не требует!
нее по-прежнему придется пользоваться инструкцией
по программированию, а для того, чтобы не запутаться, > Программа не поддерживает и, вероятно, не будет под-
в IT есть быстрый поиск – по меню и по ММС и поиск держивать OS500 и другие АТС, которые выполнялись
этот весьма полезен – многие настройки, ранее сгруп- в корпусе для настенного монтажа – OS100, OS12...
пированные в одном MMC, оказались разнесены в раз- Также программа НЕ поддерживает OS7x с прошивка-
ные группы меню. ми MCP версии меньше 4.x – тем, кто все еще поль-
Наконец-то появилась возможность выделения ячеек зуется бесплатным SIP/H323, придется, как и раньше,
группой и возможность автоматической последова- пользоваться OSM.
тельной нумерации ячеек. Скажете, не очень нужно? Скачивается Installation Tool там же, где и все про-
Ошибаетесь! Когда необходимо изначально перенуме- чее программное обеспечение, прошивки, документация
ровать все порты, например сидеть и вручную вбивать? и прочее. Нет, я не имею в виду сайт Samsung. Компания
А раньше было именно так – для внесения в программу Samsung честно и откровенно предупреждает, что техни-
номеров от 2000 до 2050, например, приходилось сидеть ческая поддержка по данному продукту осуществляется
и забивать вручную 2000, 2001, 2002... поставщиками.
Новый пароль для доступа в программу. Раньше Соответствующий раздел форума ([3]) просто закрыт
для доступа к АТС через OSM использовался пароль для чтения, доступен только зарегистрированным пользова-
программирования уровня технического специалиста телям, да и, судя по количеству сообщений, там искать нече-
по умолчанию 4321. Теперь пароль может быть буквен- го – одни спамеры. И хотя по логике вещей именно там все
ным, и по умолчанию он samsung. это и должно быть сложено, все это сложено вовсе не там,
А теперь отметим... нет, не минусы, конечно, но все же а на форуме «Офисные АТС» [4]. Там есть соответствующие
некоторые особенности программы, которые придется учи- разделы для программного обеспечения, где можно найти
тывать, если ей пользоваться. все необходимое, включая советы настоящих профессио-
> Программа IT работает только с АТС семейства OS7x – налов.
7100, 7200, 7400 и с новыми моделями АТС, недавно А теперь посмотрим на то, как выглядит IT (см. рис. 1).
прибавившимися к семейству – 7070 и 7030, причем После подключения справа загружается древовидная
разные версии программы могут не поддерживать структура, в которой можно выбирать пункты меню, а спра-
те или иные модели АТС и те или иные версии проши- ва – данные, выгружаемые по выбранному пункту меню
вок. В IT есть специальная «Таблица совместимости», из АТС. Вот так выглядит IT, когда подключение к АТС уста-
в которой прописано, какая версия программы поддер- новлено (см. рис. 2).
живает какие АТС и какие прошивки MCP. Беспокоить- Сверху развернута панель поиска (когда используешь
ся не о чем, как правило, только тем, кто своевремен- документацию, в которой все привязано к MMC, а такой мно-
но обновляет прошивки и саму IT, остальным же стоит го, – вещь просто незаменимая), а снизу в строке состояния
прочитать. отображается различная информация:

Рисунок 3. Контроль соединения с АТС Рисунок 4. Установка кода региона

системный администратор январь-февраль 2010 63


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

> состояние подключения («Онлайн»); Время отключения по неактивности устанавлива-


> имя АТС, данное во время настройки подключения ется в меню 5.14.2. Установить надо и KMMC Lock Out
(«Станционная»); Time и Application MMC Lock Time. Максимальное время,
> модель АТС (OS7100); как и раньше, – 60 мин.
> страна («Россия/СНГ»); Дата и время задаются в меню 2.1.3. Кроме того, в этом
> номер версии прошивки (081208-4.30а). меню можно указать дату перехода на летнее/зимнее время
Здесь мы также видим, что обещанная русификация (см. рис. 5). К сожалению, указать адрес внешнего сервера
на самом деле неполная – русифицирован только интер- времени нельзя. А жаль.
фейс IT, а то, что выгружается из АТС, – нерусифицировано Время распознавания сигнала Flash задается в меню
(и вряд ли когда будет). 5.5.0. Номерной план АТС настраивается в меню 2.8.0. Но-
мерной план вещь чрезвычайно важная, поэтому под него
Новое – это хорошо забытое старое выделено отдельное меню (см. рис. 6).
Или, по крайней мере, подзабытое. С момента публика- Включение внутренних линий в группы выполняется
ций [1, 2] прошло два с половиной года, но актуальности в меню 4.1.1, направление вызовов с определенного транка
своей они не потеряли ни капельки. Но чтобы не блуждать на определенную группу – в меню 3.2.1. Я не привожу кар-
каждый раз по поиску MMC в IT, я вкратце перескажу, тинки, аналогичные картинкам в статьях [1, 2], там смотреть
где нужно выполнять настройки, упомянутые в статьях [1, 2] особо не на что, таблица выглядит точно так же.
с использованием IT. Вот в формировании групп доступа произошли некото-
Итак. Настройка связи со станцией выполняется через рые изменения.
меню «Система → Контроль соединения» (см. рис. 3). Во-первых, группировка портов для внутренних линий те-
Все просто – в поле «Имя» пишете имя АТС (можно ис- перь не 001-300, а 001-100, а внешних – начиная со 101. По
пользовать все символы русского алфавита, пробелы и ка- умолчанию все внутренние порты входят в группу 1, а все
вычки), в поле «IP-адрес» – адрес АТС и нажимаете кнопку внешние – в группу 101.
«Обновить». Внимание! В группу 101 входят также порты SPNET.
Для подключения к АТС нажимаете на «стрелку вниз» Рекомендуется перенести их в отдельную группу и управ-
возле самого левого значка на панели инструментов – по- лять доступом отдельно. Настройка групп выполняется
является список АТС, который редактируется в «Контроле в меню 5.1.1.
соединения». Во-вторых, MMC 304, которое отвечало за настройки
Если просто нажать на самый правый значок на панели доступа групп, как бы «развернули по вертикали» и, кро-
инструментов или выбрать «Подключить» в меню «Систе- ме того, разделили на две группы меню. Теперь существует
ма», будет выполнено подключение к той станции, к которой меню 5.1.2, задающее права доступа на исходящий вызов,
подключались в последний раз (если еще не подключались и меню 5.1.3, задающее права доступа на входящий вызов.
никуда – к той, что была создана последней). Напоминаю, По вертикали там перечисляется группа внешних линий,
что пароль по умолчанию – samsung. по горизонтали – группа внутренних линий.
Для установки кода региона используем меню 2.1.0. Щел- Таким образом, для формирования обычных четырех
каем на списке в System Country, справа появляется «стрел- групп, из которых:
ка вниз». Выбираем RUSSIA/CIS (см. рис. 4). > группа 1 может и звонить, и принимать вызовы;
Внимание! Напоминаю, что регион нужно задавать > группа 2 может звонить, но не может принимать вызовы;
в первую очередь, потому что при смене региона сбрасыва- > группа 3 не может звонить, но может принимать вызовы;
ются все настройки! > группа 4 не может ничего.

Рисунок 5. Установка системного времени Рисунок 6. Номерной план в Installation Tool

64 январь-февраль 2010 системный администратор


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

Необходимо в меню 5.1.2 поставить № в столбцах 3 и 4, того, теперь можно задать кодек для связи непосредственно
а в меню 5.1.3 – в столбцах 2 и 4. И, разумеется, не забыть с конкретным узлом (см. рис. 9).
разнести внутренние линии по соответствующим группам Связь между системным идентификатором и блоком
(см. рис. 7). из N-LCR задается в меню 3.3.2. Таблица для задания связей
Ну вот, теперь АТС в режиме «обычной станции» должна ничуть не изменилась.
работать. Как и в прошлый раз, мы не трогаем «планы звон- Ничуть не изменились и блок выбора маршрута, который
ка» – по умолчанию действует Plan 1, что нас вполне устраи- задается в меню 3.1.2, и таблица временных зон, которые
вает. Перепрошивка блоков MGI выполняется, как и рань- задаются в меню 3.1.3.
ше, через Device File Uploader (DFU) или вручную. Вручную, Поскольку мы не пользуемся возможностью направления
надо сказать, я никогда перешивать не пробовал, но на [4] вызовов через различные маршруты в зависимости от вре-
есть ссылки на документацию, описывающую этот процесс. мени суток, мы просто стираем в ней Time B. Таблица мо-
Что же касается DFU, компьютер, на котором будет запу- дификации номеров, которая может понадобиться при на-
щен DFU, должен находиться с АТС в одном локальном сег- правлении вызовов в город через транки другой станции,
менте или, по крайней мере, доступ между ними не должен находится в меню 3.1.5.
запрещаться – иначе ничего не получится, потому что DFU Ну и, наконец, таблица маршрутов находится в меню 3.1.4.
использует собственный TFTP-сервер для загрузки прошив- Формат таблицы был переработан, из-за чего перестал ка-
ки в блок MGI. Впрочем, прошивки MGI выходят весьма ред- заться сверхъестественно громоздким. Теперь это не трех-
ко – с момента выхода статьи [2] было выпущена всего одна мерная таблица с абсциссой, ординатой и аппликатой, а на-
прошивка – 1.14. бор двумерных, в котором конкретная таблица выбирается
В логике перепрошивки MCP не изменилось вообще ни- списком Route в правом углу. По вертикали идут классы,
чего. Прошивка, то есть обновление файлов на карте па- по горизонтали – зоны. Так же, как и раньше, во всем этом
мяти, выполняется практически точно так же, как раньше. нужно только поставить номер группы линий SPNET/город-
Окно «Контроль файла» вызывается или через «Утилиты → ских транков/, еще чего-нибудь в поле Group-зоны 1 клас-
Контроль файла» или через кнопку на панели инструмен- са 1 и, если необходимо, задать номер таблицы модифика-
тов (см. рис. 8). Хорошо заметно, насколько коряво выгля- ции (см. рис. 10).
дит «русский» перевод – он банально не умещается в поле Маршрутизация входящих номеров задается в меню 3.2.3
кнопки. и ничем не отличается от прежнего вида. Все настройки
При перепрошивке блока MCP, когда он находится в ре- LCR, связанные с включением и временными параметрами,
жиме «загрузить установки по умолчанию», невозможно вынесены в меню 3.1.1 – включение LCR и прочее делает-
удалить файл STARTUP.PRE для замены его на более новую ся оттуда. Удаление номера «9» из списка транковых групп
версию – программа постоянно заявляет This is the latest file делается, как и раньше в номерном плане, то есть в 2.8.0,
(это самый последний файл) и файл не удаляется, в нор- отключение непосредственного доступа – в меню 2.5.2.
мально режиме все проходит без ошибок. И немного полезных советов.
Раздел для внесения номеров N-LCR находится там, > Для очистки некоторого блока ячеек теперь наконец-то
где и должен – в номерном плане, меню 2.8.0. Щелкаете можно как в табличных процессорах – выделил блок
на список рядом со словом Cabinet в правом верхнем углу ячеек, нажал <Del> – ячейки очистились. В OSM такого
и выбираете N-LCR. не было.
Системные идентификаторы задаются в меню 3.3.1. На- > Для автозаполнения последовательной группы ячеек
строек стало больше, описание системы теперь можно монотонно возрастающими значениями можно исполь-
вводить на русском языке (не более 16 символов). Кроме зовать режим автозаполнения, которого тоже не было

Рисунок 7. Настройка групп доступа в Installation Tool Рисунок 8. Контроль файла в Installation Tool

системный администратор январь-февраль 2010 65


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

в OSM. Режим автозаполнения включается в панели ин- > Устанавливаем прошивку версии 4.14 (это единст-
струментов конкретного MMC (и, разумеется, может быть венная версия прошивки, которая поддерживается
неактивным) значком «Повторить». Необходимо выделить как OSM, так и IT), с помощью MMC 818 обновляем про-
область для автозаполнения, потом нажать «Повторить» шивку так, чтобы грузилась 4.14.
и ввести начальное значение и через запятую – значение, > Выключаем АТС и переводим джампер на блоке MCP
на которое необходимо увеличивать каждое следующее. в положение «сброс в заводское умолчание»
Если в качестве второго значения указать 0, выбранный > Включаем и загружаем АТС. Если настройки IP сле-
диапазон будет заполнен одинаковыми значениями. тели, выставляем их заново с системного телефона.
Убеждаемся, что загрузилась 4.14.
Обновление прошивки с версии 2.69 > Подключаемся через OSM и загружаем настройки.
Здесь я немного расскажу о порядке обновления прошивки В этот момент произойдет преобразование базы.
MCP OS7200 с версии 2.69, последней версии, в которой > Закрываем OSM и подключаемся через IT. Сохраняем
SIP/Н323 не требует лицензирования (но и не поддерживает базу настроек.
IT), на последнюю на данный момент версию 4.30к. Проце- > Устанавливаем прошивку версии 4.21, обновляем с по-
дура это довольно сложная, требует изрядных временных мощью MMC 818.
затрат и непременного наличия человека с системным теле- > Перезагружаем АТС (если надо, заново настраиваем
фоном возле АТС. Имеется в виду, конечно же, обновление IP MCP), убеждаемся, что загрузилась 4.21.
прошивки таким образом, чтобы сохранить все старые на- > Загружаем настройки. В этот момент произойдет еще
стройки. Если старые настройки не важны – достаточно одно преобразование базы настроек. Сохраняем базу
просто заменить прошивку. настроек.
Итак, проблема состоит главным образом в том, что с мо- > Устанавливаем прошивку версии 4.30, обновляем че-
мента выхода прошивки 2.69 формат базы настроек менял- рез MMC 818.
ся несколько раз – сначала в 4.14, потом в 4.21, потом в 4.30. > Перезагружаем АТС (если надо, заново настраиваем
И для сохранения настроек необходимо будет постепенное IP MCP), убеждаемся, что загрузилась 4.30.
преобразование базы последовательной установкой всех > Загружаем настройки, убеждаемся, что все преобразо-
этих прошивок. При этом АТС должна находиться в режиме валось нормально, если что-то не так – подстраиваем.
«не хранить настройки», в котором каждый раз при загруз- Сохраняем настройки.
ке происходит загрузка настроек по умолчанию – АТС здесь > Выключаем АТС и вот только теперь переводим джам-
выступает этаким конвертором базы настроек и больше ни- пер в положение «хранение настроек».
чего. Мне довелось проводить эту операцию удаленно, ру- > Включаем АТС, настраиваем IP MCP (все будет сбро-
ководя по ICQ и сотовому телефону. шено) и заново загружаем настройки АТС. EOF
Обязательно проверьте наличие системного телефона.
В процессе обновления постоянно придется использовать 1. Ачилов Р. Развертываем корпоративную телефонную сеть
MMC 818, которое недоступно из программ управления. на основе технологии VoIP. Часть 1. //«Системный администра-
Начали. тор», № 6, 2007 г. – С. xx-xx.
> Устанавливаем на тот компьютер, на который будут со- 2. Ачилов Р. Развертываем корпоративную телефонную сеть
храняться данные настройки, OSM версии 4.14, если на основе технологии VoIP. Часть 2. //«Системный администра-
он там еще не стоит (последняя на данный момент вер- тор», № 8, 2007 г. – С. xx-xx.
сия OSM). 3. http://ru.samsung.com/forum.
> Сохраняем настройки АТС. 4. http://forum.officeats.ru.

Рисунок 9. Системные идентификаторы станций Рисунок 10. Таблица маршрутизации в Installation Tool

66 январь-февраль 2010 системный администратор


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

Визитка

ИГОРЬ ШТОМПЕЛЬ, инженер, системный администратор. Сфера


профессиональных интересов – свободное программное обеспечение

Ряд волшебных изменений


Что нового появилось в проекте Wine?
Проект Wine быстро развивается. Обрастает все
большей функциональностью, за которой достаточ-
но сложно уследить. Попробуем разобраться, какие
изменения претерпел он в 2009 году

Была проделана работа по добавлению необходимой


Прошедшее нужно знать не потому, поддержки кросс-компиляции в winegcc (1.1.15), а также
что оно прошло, а потому, что, уходя, по улучшению поддержки кросс-компиляции с использова-
не умело убрать своих последствий нием Mingw. Появилась поддержка сборки PE-приложений
(winegcc), для winedbg добавлены обертки для Read/
В.О. Ключевский WriteProcessMemory с целью исправления ошибок сборки
Mingw (1.1.23).
Появилась поддержка сборки автономных (stand-alone)
Проект Wine был начат Бобом Амштадтом (Bob Amstadt) 16-битных модулей (1.1.16). Впоследствии ряд 16-битных
в 1993 году для запуска приложений Windows 3.1 (16 бит) DLL был разбит на отдельные модули (1.1.31). В процессе
в среде GNU/Linux. Акроним Wine расшифровывается подготовки выпуска версии 1.1.35 работа по отделению
следующим образом: Wine – это не эмулятор (Wine Is Not 16-битных библиотек была продолжена.
an Emulator). Основная цель проекта – свободная реализа- Получила развитие и поддержка MSI. В выпуске 1.1.18
ция Windows API (Application Programming Interface), т.е. до- была улучшена поддержка функции обновления пакетов
бавление определенного «слоя совместимости» между MSI. Затем в выпуске 1.1.35 усовершенствована производи-
программным обеспечением, ориентированным на опера- тельность: клонирование открытого потока вместо открытия
ционную систему MS Windows и GNU/Linux. Поскольку Wine нового; замена хеш-строк таблицы с сортировкой индекса;
не эмулирует аппаратную часть, то скорость работы прило- удалены неиспользуемые поля из строк таблицы, а также
жений, как правило, не замедляется. сделаны другие изменения.
Первый релиз в 2009 году был выпущен 2 января – 1.1.12, Разработчики внесли ряд изменений в поддержку OLE.
последний – 18 декабря – 1.1.35. Всего выпущено 24 рели- Так, были решены проблемы с работой буфера обмена
за, которые включили исправления более полутора тысяч (1.1.19) и усовершенствованы возможности по копиро-
ошибок. ванию/вставке в него OLE-объектов (1.1.20). Затем была
Рассмотрим, как развивался проект в минувшем году. усовершенствована передача объектов OLE через буфер
Для удобства я условно выделил ряд направлений. обмена (1.1.22). Улучшился процесс преобразования (мар-
шалинг) представления в памяти с целью использования
Общесистемные изменения формата данных, который соответствует в конкретных усло-
Разработчики реализовали совместимость с протоколом виях требованиям хранения и передачи для библиотеки OLE
Freedesktop.org, что позволяет отправлять уведомления (1.1.34).
о запуске программ (1.1.13 – здесь и далее номер версии Далее разработчики усовершенствовали поддержку хра-
Wine, кроме того, там, где это возможно, изменения опи- нилища транзакций OLE (OLE transacted storage): ошибка
саны в хронологическом порядке по старшинству версий). доступа к памяти в storage32, использование виртуальных
Со стандартом протокола можно ознакомиться по адре- таблиц (vtable) для чтения/записи из/в потоки, WriteDirEntry
су: http://standards.freedesktop.org/startup-notification-spec/ и ReadDirEntry добавлены в виртуальные таблицы storage,
startup-notification-latest.txt. и другое (1.1.35).
Затем разработчики обеспечили поддержку ассоциа- Большое количество изменений претерпели регрессив-
ции файлов, которую использует сообщество freedesktop ные тесты для Windows (1.1.14, 1.1.16, 1.1.17), в том числе
(для start.exe добавлена возможность запуска файлов были исправлены ошибки, возникающие при регрессивных
MS Windows с ассоциациями freedesktop – 1.1.24). тестах для Win64 и Windows 7 (1.1.29).

68 январь-февраль 2010 системный администратор


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

В 2009 году проект Wine про-


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

Кроме того, появилась начальная поддержка обра- можно использовать инфракрасный порт, т.к. была реали-
ботки исключений для платформы x86_64. Например, зована его поддержка в выпуске 1.1.28.
для ntdll – для стека обработчиков (handlers) (1.1.22). Также Рассмотрим изменения конкретных операционных
продолжала развиваться поддержка выполнения 64-раз- систем. Так, была исключена устаревшая поддержка
рядных программ Windows: добавлена поддержка гене- LinuxThreads (библиотека потоков) (1.1.17). Для платформы
рации 32/64-битного кода для прокси/клиентов/серверов Solaris реализована библиотека iphlpapir (IP Helper) (1.1.17).
(widl); код отладки переработан для поддержки 64-битных Для платформы OpenBSD решены проблемы, возникавшие
платформ (ntdll) (1.1.12); для ntdll – исправление ошибок при сборке (1.1.19). Появилась возможность отладки симво-
в структурах, возвращаемых NtQuerySystemInformation; лов в WineDbg для операционной системы Mac OS X (Debug
для MSHTML – исправление тестов для платформы Win64 symbols in WineDbg on Mac OS X) (1.1.18), а также поддерж-
и многое другое (1.1.13, 1.1.17). Что касается 64-разряд- ка сборки Wine в Mac OS X Snow Leopard (1.1.21).
ных приложений, то появилась обработка исключений для Отметим и ряд более мелких улучшений. Работа прило-
64-разрядных сборок (1.1.24), а в отладчике исправлены жения Richedit была усовершенствована (1.1.13), прило-
ошибки 64-битного режима (1.1.35). жение получило поддержку безоконного режима (1.1.14).
Изменилось и обеспечение поддержки безопаснос- Ряд изменений коснулся DIB (Device-Independent Bitmap).
ти. Здесь необходимо сказать несколько слов о биб- Увеличена производительность (1.1.31, 1.1.32), добавлена
лиотеке crypt32. Разработчики оптимизировали интер- поддержка 16/32-битных секций (1.1.31). Усовершенство-
фейс в менеджере сертификатов. Например, в cryptui ван диалог вывода на печать (1.1.14). Добавлена начальная
добавлены диалог менеджера сертификатов и возмож- реализация поддержки MS Text Framework (1.1.15). Вклю-
ность включения/отключения контроля на основе выбо- чено специальное диалоговое окно, которое выводится
ра в диалоговом окне менеджера сертификатов (1.1.13). при крахе приложения (1.1.20). Расширены возможности
Улучшена ее работа, последняя наделена специальным ин- по просмотру списков, называемых listview: исправлены
струментом для экспорта (заглушки для PFXImportCertStore ошибочные описания функций, добавлены дополнитель-
и PFXExportCertStoreEx-1.1.14). ные тесты для LVS_EX_HEADERDRAGDROP (1.1.20, 1.1.21,
Затем разработчики внесли ряд изменений в реализа- 1.1.24, 1.1.34). Появились поддержка реализации функций
цию библиотеки, в частности, затрагивающих поддержку COM-прокси (COM proxy delegation – 1.1.23) и автоматиче-
64-разрядных платформ (1.1.32). Они усовершенствовали ская очистка меню рабочего стола (1.1.25). Переработа-
поддержку цифровых сертификатов в crypt32: исправлено на поддержка функций управления календарем (comctl32/
расширение AKI, используемое в конце сертификата, и CRL monthcal) (1.1.31). Улучшена работа типовых элементов уп-
для проверки отзыва; появилась возможность чтения дове- равления (1.1.32). Проделана работа по чистке кода от уте-
ренных корневых сертификатов системных брелков опера- чек памяти, найденных при отладке при помощи системы
ционной системы Mac OS X. (1.1.33, 1.1.34). Отдельно отме- Valgrind (1.1.33).
чу улучшение проверки сертификатов для SSL-соединений
(1.1.35). Поддержка мультимедиа-технологий
Кроме того, winemaker получил поддержку файлов про- Рассмотрение изменений в области мультимедиа-
ектов из интегрированной среды разработки MS Visual технологий начнем с поддержки устройств. Так, разработ-
C++ (1.1.19) и 64-разрядного режима (1.1.21). Упростилось чики улучшили работу со сканерами с использованием
управление дисковыми разделами за счет усовершенство- инфраструктуры SANE (например, для приложений опера-
вания поддержки соответствующего API (1.1.27). Стало воз- ционной системы MS Windows – 1.1.16), а также добавили

системный администратор январь-февраль 2010 69


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

возможность воспроизведения дисков аудио-CD (1.1.16). SamplerVariable, а IsValid() реализован для нескольких ин-
Для джойстика добавлена возможность изменения коорди- терфейсов; улучшены ID3D10EffectVariable::GetType(),
нат через edev (1.1.28). Платформа Mac OS X получила под- ID3D10EffectType::GetDesc().
держку джойстика (1.1.17) и доступ к DVD (1.1.32). Была исправлена работа режима FBO (Frame Buffer
Небольшое количество улучшений добавлено в работу Object), который стал после выпуска 1.1.23 установленным
с кодеками. Появилась начальная поддержка dll-библиотек по умолчанию для Direct3D: для wine3d – проверка связей
для кодеков операционной системы MS Windows (1.1.25). с использованием stretch_rect_fbo(); откат к закадровому
В WindowsCodecs включены новые форматы изображений, рендерингу backbuffer, если нет доступа к FBO (1.1.20).
включая JPEG и PNG (1.1.27, 1.1.28). Реализована поддерж- Разработчики начали реализацию четвертой модели
ка кодека GSM 06.10 (1.1.27). шейдеров () из Direct3D 10 (1.1.21), отладили работу с бло-
В области работы с графикой изменения более суще- кировками в коде (1.1.22). Работа по реализации функций
ственны. В библиотеку GDIPlus добавлена поддержка де- и улучшению поддержки Direct3D 10 была продолжена
сяти новых функций (Graphic Device Interface, графический (1.1.30, 1.1.31). В выпуске 1.1.33 разработчики добавили ряд
интерфейс устройств) – предоставление графических объ- новых функций Direct3D 10 (1.1.33).
ектов и передача их на устройства вывода графической ин- Что касается поддержки OpenGL, то в выпуске 1.1.22
формации (1.1.15): была усовершенствована поддержка пиксельного форма-
> GdipIsEqualRegion; та (1.1.22), а в выпуске 1.1.25 – управление памятью.
> GdipTranslateRegion; Также разработчики усовершенствовали реализацию
> GdipTranslateRegionI; ARB-шейдеров (wine3d – добавлена поддержка расширения
> GdipGetRegionBounds/GdipGetRegionBoundsI; ARB_depth_buffer_float, усовершенствование texldd и texldl –
> GdipTranslateClip/GdipTranslateClipI; 1.1.22, 1.1.24).
> GdipCreateBitmapFromHICON (с тестами); Кстати, в версии 1.1.12 была реализована поддерж-
> GdipGetClipBounds/GdipGetClipBoundsI; ка субпиксельного рендеринга шрифтов (subpixel font
> GdipSetClipHrgn; rendering), а в версии 1.1.23 появилась полноценная реа-
> GdipFillRegion; лизация полноэкранного режима виртуального рабочего
> GdipGetLogFontA. стола (1.1.23).
Затем разработчики улучшили код для совмести- Работа над поддержкой звука тоже повлекла ряд важных
мости с данной библиотекой: добавлена заглушка изменений. Так, работа звукового драйвера Esound была
для GdipBitmapSetPixel; появилась возможность проверки улучшена (1.1.19), а библиотека libmpg123 стала исполь-
указателей заголовков в CreateDIBitmap и другое – 1.1.21. зоваться для декодирования mp3 (1.1.29). В выпуске 1.1.30
Кроме того, разработчики ускорили операции растягивания появилась поддержка звукового API – OpenAL (1.1.30).
битовых карт посредством использования XRender (1.1.26). OpenAL (Open Audio Library) является свободной крос-
XRender (X Rendering Extension), или Расширение рендеринга сплатформенной реализацией 3D аудио-API. Поэтому би-
для X, – позволяет реализовать алгоритмы Портера-Даффа блиотека может быть использована как в игровых приложе-
в X-сервере [1]. Они улучшили поддержку XShm-технологии ниях, так и в других, где необходима подобная обработка
(Xlib Shared Memory Extension), позволяющей осуществлять звука. Домашняя страница проекта находится по адресу:
передачу пиксельных карт. Основная цель включения послед- http://connect.creativelabs.com/openal/default.aspx.
ней – увеличить производительность (1.1.27). Релиз 1.1.31 принес исправления в работе ряда звуковых
Значительные изменения претерпела поддержка драйверов, а 1.1.33 – улучшенную поддержку звука в mciwave
Direct3D. Произведена масштабная чистка кода, которая (исправлена ошибка, затрагивающая приостановку/воспро-
затронула три релиза – 1.1.18, 1.1.19 и 1.1.20: добавлены изведение; произведено обновление сообщений и коммен-
интерфейсы ID3D10EffectRasterizerVariable и ID3D10Effect тариев; формат wave по умолчанию – 11025 КГц/8 бит).

Рисунок 1. Отправка сообщений с приложением Рисунок 2. Поддержка Unicode в Notepad

70 январь-февраль 2010 системный администратор


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

Кроме того, добавлена поддержка копирования/вставки Кроме того , как показано на рис. 2, была добавлена под-
изображений посредством буфера обмена из приложений держка Unicode для Notepad (ОС – MS Windows) (1.1.25).
X11 (1.1.21).
Перспективы
Поддержка веб-технологий В Голландии 7-8 ноября 2009 года прошла VII ежегодная
Значительное количество изменений претерпел движок конференция разработчиков Wine – WineConf 2009 [2]. На-
Gecko. Сначала до версии 0.9.0 (1.1.12) и 0.9.1 (1.1.15), за- мероприятии было сказано о том, что настала пора выхода
тем была интегрирована новая версия – 1.1.0 (1.1.27). Далее релиза 1.2, цель которого – обеспечение 64-битной под-
проведено усовершенствование интеграции Gecko в се- держки. Среди других возможностей, которые было бы
тевую подсистему Wine (1.1.29). А с версии 1.1.33 движок неплохо обеспечить в новой ветке, по мнению разработ-
Gecko стал устанавливаться во время создания wineprefix чиков: движок DIB (необходимо исправить – bug #412) [3];
(1.1.33). MacOSX QuartzDriver (графический драйвер для Wine, ко-
Изменилась поддержка JScript. Разработчики добави- торый призван заменить X11drv, для обеспечения лучшей
ли большое количество новых функций для Jscript (Bool_ интеграции Wine в Mac OS X) [4]; поддержка USB (необхо-
valueOf, Date_valueOf, Function_valueOf, String_fontcolor, димо исправить – bug #9649) [5]; Direct3D 10 [6]; мульти-
String_fontsize и другие – 1.1.26), затем реализовали началь- пользовательский Wineserver (необходимо исправить – bug
ную поддержку ActiveX в движке Jscript (1.1.31). #11112) [7]. С обширным списком того, что предполагается
Несколько улучшилась поддержка Internet Explorer. Сна- сделать в будущем, можно ознакомиться по адресу http://
чала стала качественнее обработка графики (1.1.13), затем wiki.winehq.org/TodoList.
было внесено немало изменений в работу Internet Explorer 7 Кроме того, разработчики выделили ряд критериев, соот-
для ее улучшения (1.1.14). ветствие которым позволит осуществить выпуск версии 1.2.
Перемены затронули и MAPI: улучшены поддержки Сегодня они имеют три «номинации» – ошибки, фокус при-
MAPI (исправлена ошибка, приводящая к утечке памяти; ложений, документация и интерфейс пользователя (UI).
усовершенствованы MAPIInitialize, Logon, Logoff, LogonEx, Для первой «номинации» это: отсутствие несовместимости
Uninitialize) (1.1.30); возможность добавления приложений с 1.0.1 и с недавними бета-версиями Wine; небольшие ошиб-
к письму (1.1.31), что показано на рис. 1. ки могут остаться не исправленными. Для второй «номина-
Отметим и ряд других изменений. Так, версия 1.1.16 по- ции»: повторение Platinum Regression Hunt [8]; обеспечение
высила качество управления cookies в Wininet (провер- поддержки всем приложениям, которые поддерживаются
ка cookie-информации на основе cookie-значений, тесты Wine 1.0.1; изучение вопроса о поддержке новых версий
для сложных значений cookies и другое – 1.1.16). Появились данных приложений; обсуждение, каким из «больших при-
поддержки работы RPC поверх протокола HTTP (1.1.18) ложений» необходимо добавить поддержку. Для послед-
и для рабочего стола GNU/Linux, зарегистрированных ти- ней «номинации»: стандартизация методов упаковщиков
пов MIME (1.1.23). WinHTTP получило возможность работы для обеспечения совместимости с различными дистрибути-
с прокси (1.1.26). Внесено большое количество усовершен- вами; необходимость проявления особого внимания к доку-
ствований в код поддержки HTML и JavaScript (1.1.30). ментации пользователя, а также по winelib накануне выхода
Улучшения затронули и рендеринг HTML (1.1.32). Усо- релиза.
вершенствована библиотека MSHTML (использование После стабилизации ветки 1.1.x (или выпуска 1.2) начнет-
глобального значения wine_dbgstr_w, улучшена заглушка ся работа над новой нестабильной ветвью – 1.3.
для IHTMLWindow4, обновлен ряд переводов – 1.1.34). В 2009 году проект Wine прошел большой и плодотвор-
ный путь. Многое сделано для поддержки 64-битного ре-
Локализации жима, работы с объектами OLE, поддержки библиотеки
Локализации Wine активно развивались в 2009 году. На- crypt32 (в том числе цифровых сертификатов), реализации
пример, выпуск 1.1.25 принес множество обновлений пе- Direct3D 10, работы со звуком, интеграции движка Gecko
реводов. Добавились или обновились следующие языки: и поддержки других веб-технологий, локализации. В новой
норвежский, немецкий, японский, литовский, итальянский, ветке – 1.2, разработчики обещают обеспечение 64-битной
французский, испанский, словенский, румынский, фин- поддержки и других функций. Будет интересно узнать, ка-
ский, голландский. Кстати, выпуск 1.1.26 также содержал ким получится первый выпуск 1.2. Тем более что ждать оста-
большое количество изменений в данной области. лось недолго – «несколько следующих месяцев». EOF
Какие изменения произошли в поддержке русского язы-
ка? Так, в версии 1.1.14 были исправлены опечатки. В вер- 1. http://ru.wikipedia.org/wiki/Альфа-композиция.
сии 1.1.23 появился перевод winedbg. Выпуск 1.1.28 при- 2. http://wiki.winehq.org/WineConf2009.
нес обновления переводов winecfg и wininet. А следующий 3. http://wiki.winehq.org/DIBEngine; http://bugs.winehq.org/show_bug.
выпуск – корректировку перевода для библиотеки shdoclc cgi?id=421.
(Microsoft Shell Doc Object and Control Library), которая ис- 4. http://wiki.winehq.org/MacOSX/QuartzDriver.
пользуется для базовых операций с файлами и операций 5. http://wiki.winehq.org/USB; http://bugs.winehq.org/show_bug.
в сети. Выпуск 1.1.30 содержал добавление и обновле- cgi?id=9649.
ние перевода для JScript. Кстати, обновление последнего 6. http://wiki.winehq.org/Direct3D_Debugging.
было осуществлено и в следующей версии. Обновились 7. http://wiki.winehq.org/wineserver; http://bugs.winehq.org/show_
переводы для программ и dll-библиотек (1.1.32) и Setupapi, bug.cgi?id=11112.
JScript (1.1.33), а также MSHTML (1.1.34). 8. http://wiki.winehq.org/PlatinumRegressionHunt.

системный администратор январь-февраль 2010 71


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

Визитка

СЕРГЕЙ ЯРЕМЧУК, фрилансер. Автор более 800 статей и четырех книг.


С «СА» с первого номера. Интересы: сетевые технологии, защита
информации, свободные ОС

Спасительный протокол
DNSSEC-расширение к DNS для повышения безопасности
Практически 25 лет DNS-запросы не считались
безопасными, но после внедрения DNSSEC на кор-
невых серверах эта проблема будет решена

Не секрет, что все современные технологии Интернета DNS Spoofing/DNS cache poisoning – атака, заключаю-
получили свою жизнь еще в 70-80-х годах. В то время раз- щаяся в подмене действительной записи о соответствии
работчиков интересовала сама возможность, и никто осо- имени и IP-адреса в кэше DNS-сервера ложной записью,
бо не рассчитывал на то, что Сеть станет общедоступной в результате пользователь, набравший это имя, направ-
и разрастется до мировых масштабов, а подключаться к Ин- ляется совсем по другому адресу.
тернету можно будет с любой точки планеты. Признаю, что есть и другие атаки на DNS вроде man-in-
В итоге практически во всех протоколах не была пред- the-middle и так далее, перечисление их всех не входит в за-
усмотрена возможность защиты или повышения безопас- дачу статьи. Но в итоге все сценарии сводятся к двум воз-
ности. Результат мы получили в виде спама, атак на ре- можным последствиям – недоступность сервиса или выдача
сурсы Сети путем подделки DNS-адресов и многих других пользователю ложной информации.
проблем. Универсального решения против DDOS-атаки на любой
Сегодня изменить что-то глобально невозможно, слиш- сервис нет, DNS здесь не является исключением. Защита
ком много сил и средств необходимо потратить. Поэтому строится на тех же принципах:
и проблемы пытаются решить при помощи разного рода > повышаем;
надстроек над протоколами, расширений, использующих > увеличиваем;
в качестве защиты стойкую криптографию. Для SMTP таким > фильтруем;
спасательным кругом является DKIM (DomainKeys Identified > блокируем.
Mail) [1], для DNS – протокол DNSSEC. Хотя у DNS есть одно существенное преимущество –
иерархическая структура, при которой информация
Зачем нужен DNSSEC? не хранится в одном месте, а на многочисленных серве-
Служба DNS, сопоставляющая IP-адреса именам доменов, рах и запрашивается по мере необходимости. Обращение
по сути, является фундаментом Интернета. К ее услугам к серверам верхнего уровня происходит только при отсут-
обращаются практически все остальные популярные сер- ствии информации в текущем DNS-сервере. Кэширова-
висы, предназначенные для отправки почты, веб-серфинга, ние DNS-данных приводит к уменьшению числа запросов.
VoIP, ICQ и так далее. Соответственно, если DNS выдает не- В итоге, чтобы DDOS-атака действительно была эффектив-
правильную информацию, это сказывается на работе любо- ной, необходимо, чтобы она затронула максимальное коли-
го сервиса, его запрашивающего. чество серверов, в том числе 13 корневых, и действовала
Хотя многие пользователи и не замечают его присут- в течение продолжительного времени. А это далеко не так
ствия, да и вообще не знают о его существовании и, впол- просто реализовать.
не возможно, не считают его заслуживающим уважения. А вот с выдачей неправильных данных уже не все так
Но именно DNS, как база Интернета, требует защиты более безмятежно. Все реализации атак основываются на том,
чем другие сервисы. что протокол DNS (RFC 1034 и 1035) не предоставляет кли-
Известны две возможные атаки на DNS как на сервис енту никакой возможности проверки подлинности получен-
разрешения имен: ной информации.
DDoS (Denial of Service) – атака на отказ в обслужи- В итоге клиент вынужден «доверять» любому ответу, по-
вании, в результате которой сервер перестает отве- лученному от DNS-сервера. При DNS-запросах обычно ис-
чать на запросы клиентов (это мы видели в октябре пользуется протокол UDP, что упрощает подделку ответа
2002 года, когда перестали отвечать 10 из 13 коренных сервера, так как при этом не устанавливается виртуальный
серверов); канал.

72 январь-февраль 2010 системный администратор


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

DNSSEC дает возможность


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

Кроме этого, злоумышленнику не нужно атаковать все RFC 4034 – Resource Records for the DNS Security
DNS-серверы, достаточно взять на прицел только один. Extensions – описания расширений в ресурсных записях
В итоге пользователь, набравший адрес требуемого ре- DNS;
сурса, попадает на подставной сайт, где он может раскрыть RFC 4035 – Protocol Modifications for the DNS Security
свои пароли или другую информацию. Особо нужно отме- Extensions – изменения в протоколе DNS.
тить, что уязвимым в этом случае является именно протокол, Эти RFC заменили более ранние, в том числе и RFC 2535,
а не программы, его реализующие. Поэтому и проблему которые считаются уже устаревшими. Сами разработчики
можно решить, только изменив подход к получению адреса называют для технологии DNSSEC переломным 2004 год,
клиентом. когда на новые расширения обратили внимание в группе
по IESG (Internet Engineering Steering Group, выработка ин-
Особенности DNSSEC женерного регламента Интернета), которая следит за про-
Расширение к протоколу DNS – DNSSEC (DNS Security цессом стандартизации в Интернете.
Extensions) [2], разработанное одноименной группой, не мо- Основная идея DNSSEC – проверка подлинности полу-
жет защитить от самой атаки, направленной на подмену ченных данных при помощи цифровой подписи, для чего за-
адреса, но дает возможность обнаружить такую попытку действуется механизм шифрования с открытыми ключами.
и отклонить неправильные данные, обезопасив тем самым Для этого администратор доменной зоны подписывает
клиента. информацию о соответствии имен и IP-адресов, исполь-
Самое главное – DNSSEC не является заменой DNS. За- зуя свой закрытый ключ. Клиент (Security-Aware Resolver)
дачей разработчиков было создать такой протокол, внедре- вместе с адресом получает подписанную адресную инфор-
ние которого не требовало бы изменений существующей мацию, которую он может проверить, используя открытый
системы и обеспечивало бы совместимость клиентов, под- ключ администратора. Соответственно, если данные в по-
держивающих и не поддерживающих расширение. Поэтому лученном сообщении не соответствуют подписи, они отбра-
DNSSEC можно разворачивать постепенно, добавляя новые сываются. Механизм подтверждения применяются только
возможности к уже существующей службе DNS. к данным по зоне и при подтверждении отсутствия DNS
Работа по улучшению DNS велась давно, первые упо- записей, но не предназначен для защиты таких операций,
минания об этом датированы еще январем 1997 года как перенос зон и динамические обновления.
в RFC 2065 (через 10 лет после принятия RFC 1034), в ко- В механизме с открытыми ключами есть слабое место –
тором были предложены два дополнительных поля DNS необходимо точно знать, что открытый ключ принадлежит
Security (DNSSEC, так раньше расшифровывалась аб- именно тому субъекту, который нас интересует, в нашем
бревиатура). Затем в последующих RFC [3] эта идея раз- случае клиент, получивший подписанный ответ, должен
вивалась и уточнялась. Эксперименты по развертыванию доверять открытому ключу. И только тогда он может быть
DNSSEC по RFC 2535 показали, что имеется много нюансов, уверен, что полученная DNS-запись принадлежит именно
в основном в процедуре распространения ключевых дан- ответственному серверу.
ных, что в итоге привело к появлению доработок, назван- В DNSSEC эту проблему решают за счет построения
ных – RFC 2535bis или DNSSECbis. цепочек доверия. В этом случае полностью задействуют
Сегодня актуальными/базовыми являются доработки, вы- имеющуюся иерархическую структуру, когда администра-
шедшие в марте 2005 года: тор верхнего уровня выступает гарантом, удостоверяющим
RFC 4033 – DNS Security Introduction and Requirements – подпись доменов, находящихся уровнем ниже. В результате
введение и общие условия; клиент, получающий адрес, последовательно может про-

системный администратор январь-февраль 2010 73


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

следить цепочку доверия к открытому ключу, начиная от са- и позволяют при необходимости задействовать другие алго-
мого верхнего сервера root/TLD к серверу, отвечающему ритмы в отдельных решениях.
за конкретную зону. Кроме этого, в настоящее время действителен
Очевидно, что данный подход требует поддержки DNSSEC RFC 5702, в котором добавлены алгоритмы RSA/SHA-256
в корневых серверах или хотя бы в TLD (top-level domain). и RSA/SHA-512. В результате DNSKEY может выглядеть так
Ведь при использовании DNSSEC в root-серверах клиенту (цифра «5» на третьей позиции – RSA/SHA-1):
потребуется знание единственного ключа для подтвержде- example.com. 7200 IN DNSKEY 256 3 5 (открытый ключ)
ния любых (в идеале) данных. Иначе потребуется импорти-
ровать ключ для каждой зоны или отдельного домена. Запись RRSIG содержит большее количество полей:
В отсутствии поддержки DNSSEC корневой зоны и TLD
host.example.com. 7200 IN RRSIG A 5 3 7200 20091110090150 (
допускается участие в подтверждении ключа третьей сторо- 20091103182315 13173 example.com.
ны (look-aside). Это может быть необходимо при построении raR/8vMh37yX…..6LOsE1TqzqPJ # Сигнатура в Base64)
«островка безопасности» (в RFC – Island of Security), то есть
автономно работающего DNS-сервера, поддерживающего По порядку – владелец, TTL, цифра «5» указывает на ал-
DNSSEC и не завязанного на TLD (в котором не реализован горитм шифрования. Цифра «3» указывает на метку label
DNSSEC) или другие серверы верхнего уровня. Чтобы упро- (количество ресурсных записей, она используется для уточ-
стить процедуру, было принято решение развернуть отдель- нения имени владельца). Например, root имеет label = 0,
ную инфраструктуру, обеспечивающую централизованное домен верхнего уровня – 1 и так далее. Следующее число
хранение публичных ключей зон, и подтверждать любые (7200) описывает Original TTL, который определяет значе-
зоны, не являющиеся дочерними. Такая структура описана ние времени жизни для подписанных ресурсных записей.
в RFC 4431 и 5074, она получила название DLV (DNSSEC За ним две даты – Signature Expiration и Signature Inception
Lookaside Validation). Сейчас централизованная база под- (время истечения и начала действия ключа, то есть период
держивается организацией ISC, хотя DLV может быть раз- действия ключа 20091110090150, 20091103182315 13173).
вернута на любом DNS-сервере. Далее следует тег (определяет хеш DNSKEY), FQDN ре-
Кстати, наличие открытых ключей в DNS-записях позво- сурсной записи DNSKEY, которая должна использоваться
ляет использовать их и для других операций – SSH, элек- для проверки подписи, и собственно сигнатура в Base64-
тронная почта и тому подобное. кодировке.
Особо хочу отметить, что DNSSEC не защищает данные, Имеющиеся утилиты практически полностью автоматизи-
так как в этом нет смысла, они должны быть открыты, но за- руют создание DNSKEY- и RRSIG-записей, поэтому проблем
трудняет их подделку. Также не следует считать эту схему здесь быть не должно.
панацеей, всегда есть вероятность того, что злоумышленни- Протокол DNSSEC потребовал новых полей в заголов-
ку удастся не только подделать адресную информацию, но и ке DNS-сообщения: Checking Disabled (CD) и Authenticated
подменить подписи, выдав свой ключ за ключ администра- Data (AD). Кроме этого, задействуются механизмы расши-
тора зоны. Хотя в случае DNSSEC подменить адрес на по- рений для DNS (EDNS0, RFC 2671), которые позволяют ис-
рядок сложнее. пользовать UDP-пакеты свыше 512 байт, как это изначаль-
DNSSEC предполагает подписывать не каждую отдель- но установлено в RFC 1035. Не следует увлекаться большой
ную запись, а все множество ресурсных записей (RRSet). длиной ключей. Кроме дополнительной нагрузки на сервер,
Его внедрение потребовало внесения некоторых изменений это может привести к увеличению результирующего UDP-
в DNS-протокол, в частности в ресурсные DNS-записи: пакета. Некоторые сетевые устройства могут не пропускать
RRSIG (Resource Record Signature) – цифровая подпись пакеты с длиной больше, чем 512 байт. Учитывая возможные
и связанная с ней информация (интервал времени, ал- потери фрагментов, разработчики не рекомендуют превы-
горитм, тег для определения связанного DNSKEY и т.д.); шать этот «лимит».
DNSKEY (DNS Public Key) – открытый ключ, который ис- Как видно, ключи должны периодически обновляться
пользуется клиентом для проверки подписи; и зоны переподписываться. Чтобы упростить эти операции,
DS (Delegation Signer) – необязательное поле использу- рекомендовано (именно рекомендовано, но не обязательно)
ется в тех случаях, когда необходимо разрешить провер- использовать два ключа – KSK (Key Signing Key) и ZSK (Zone
ку подлинности открытых ключей дочерних зон для орга- Signing Key).
низации цепочки доверия; Ключ KSK используется для подписывания ресурсных за-
DLV – похоже на предыдущий, но разрешает проверку писей зоны (DNSKEY), в родительской зоне (запись DS) при
подлинности для любых зон, в ней описанных; аутентифицированном делегировании открытая часть KSK
NSEC (Next Secure) – перечисление типов ресурсных за- передается клиенту.
писей, существующих в данном домене. Ключ ZSK используется для подписывания всего множе-
Детально они рассмотрены в RFC 4034. Так, поле ства ресурсных записей в зоне и подписывания DS. Такая
DNSKEY содержит кроме самого ключа еще три записи – схема рекомендована с целью ускорения процесса про-
флаг (16 позиций, установленный в «1» 7-й бит означает, верки подписей DNS, так как размер ZSK-ключей выбирают
что запись содержит ключ DNS-зоны), протокол (только зна- меньше, чем KSK.
чение 3) и алгоритм. При создании KSK следует исходить из требований безо-
Список поддерживаемых алгоритмов дан в Appendix A.1 пасности, производительность играет меньшую роль, по-
RFC 4034 – RSA/MD5, Diffie-Hellman, DSA/SHA-1, Elliptic Curve этому здесь рекомендована большая длина ключа. Менять
DSA (ECDSA) и RSA/SHA-1. Два поля помечены как Private KSK следует один раз в год, ZSK чаще, можно ежемесячно.

74 январь-февраль 2010 системный администратор


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

Здесь виден еще один минус DNSSEC – периодически ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64778
ключи меняются, а администраторы подчиненных серверов ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 4,
ADDITIONAL: 4
должны отслеживать их смену, иначе в один прекрасный
день DNS-сервер не сможет разрешать адреса. В зоне RU серверы с поддержкой DNSSEC встречаются
крайне редко.
Что сегодня с DNSSEC? С технической стороны также не все было готово. Ис-
Несмотря на то что спецификации DNSSEC насчитывают пользование DNSSEC требует поддержки нового расшире-
уже десяток лет, реальная работа по переходу начата от- ния с обеих сторон: сервера (Security-Aware Name Server)
носительно недавно. Причины называют разные, как тех- и клиента (Security-Aware Resolver).
нические, так и политические. Некоторые участники побаи- Поддержка DNSSEC в самом популярном DNS-сервере
ваются, что, используя DNSSEC, очень легко «отключить» BIND включена еще в 2004 году в версии 9.3 (напомню,
отдельные домены, группы доменов, а то и весь националь- что BIND доступен как для UNIX, так и для Windows). Но-
ный Интернет, если по каким-либо причинам они станут вую версию BIND 9.7 разработчики называют не иначе как
кому-то неугодны. Вероятно, в будущем, когда технология DNSSEC Usability release.
приживется, такой сценарий исключать полностью нельзя, Тогда же, в 2004 году, появилась эксперименталь-
но на данном этапе это невозможно технически. ная поддержка нового расширения в NSD (Name Server
Очень долго велись споры, кто будет держателем «клю- Daemon) [5] (собирается с --enable-dnssec), заявлена под-
чей к Интернету» – ключей, которые будут использованы держка в PowerDNS, Unbound и в некоторых других DNS-
в корневых серверах. Сами разработчики не очень доверя- серверах [6].
ют ICANN как основному регулировщику Интернета. С клиентским ПО дело обстоит немного хуже. Очевидно,
Действительный переход начат только в 2008 году, ког- отсутствие DNSSEC на DNS-серверах сказалось на том,
да были переведены TLD-домены, обслуживающие зоны что клиентское ПО в этом направлении практически не раз-
ORG и NET. Постепенно к этому списку начали добавляться вивалось.
и другие зоны – SE, PR, BG, CZ и так далее. О начале подго- В ОС от Microsoft данная спецификация уже поддержива-
товки к переходу зоны EDU объявлено в сентябре 2009 года. ется. В Windows Server 2008 (RFC 2535), а в новых – Windows 7
РосНИИРОС заявил, что технически все готово к перево- и Windows Server 2008 R2 (RFC 4033, 4034, 4035) [7]. Более
ду на DNSSEC-зоны RU. По сообщению Internetnews.com, ранние версии Windows Server 2003 и Windows XP имели ба-
к октябрю 2009 года расширение DNSSEC активировано зовую поддержку RFC 2535, которая состояла в том, что они
на 15 TLD. Полная поддержка технологии DNSSEC в корне- принимали подписанный пакет, но больше никаких действий
вой зоне системы DNS будет введена с 1 июля 2010 года с ним не производили. Сервер DNS на Windows Server 2003
(вначале был заявлен другой срок – конец 2008 [4]). Закры- может выступать как secondary DNS, работающий совмест-
тое тестирование началось с 1 декабря 2009 года, а с января но с DNSSEC-совместимым сервером (с оговоркой выше).
2010 года – поэтапный переход к полному использованию. Однозначного утверждения о том, что штатный DNS-
Пока этого нет, необходимо вносить ключи для каждого до- клиент в Linux и других UNIX-системах поддерживает рас-
мена верхнего уровня. По сообщению компании VeriSign, ширение DNSSEC и обрабатывает их, найти не удалось.
к 2011 году все доменные зоны, администрированием ко- Эксперименты с tcpdump показывают, что в некоторых слу-
торых она занимается (cc, tv, com, net), будут переведены чаях отправляются дополнительные DNS-запросы, в дру-
на DNSSEC. Учитывая размеры зоны com, она планируется гих – нет. Поэтому лучшей рекомендацией пока является ак-
к переводу последней. тивация DNSSEC на DNS-сервере организации/провайдера,
Просмотреть наличие соответствующих записей можно а клиенты будут получать с него уже проверенную инфор-
при помощи утилиты dig (или drill из состава ldns). Напри-
мер, запрос к зоне SE сразу выводит наличие соответству-
Ответ сервера поддерживающего DNSSEC
ющих записей (см. рисунок):
$ dig +retry=1 +dnssec +multiline +trace se

Кроме этого, о поддержке технологии говорит и установ-


ленный флаг ad в ответе, полученном при помощи dig. На-
пример, получим ключ одного из серверов:
$ ssh-keygen -r Eagle.roysdon.net ↵
-f /etc/ssh/ssh_host_rsa_key

Eagle.roysdon.net IN SSHFP 1 1
37c2af30b0083602254fb0c5780a0de9e15231bf

Теперь смотрим ответ сервера:


$ dig +adflag SSHFP Eagle.roysdon.net. ↵
@atlt-dnssec-trial.s3woodstock.ga.atlanta.comcast.net.

; <<>> DiG 9.4.2 <<>> +adflag SSHFP Eagle.roysdon.net.


@atlt-dnssec-trial.s3woodstock.ga.atlanta.comcast.net.
;; global options: printcmd
;; Got answer:

системный администратор январь-февраль 2010 75


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

мацию. Провести атаку на подмену IP-адреса в отношении # Далее аналогично добавляются ключи и для других зон,
единичного компьютера достаточно проблематично, здесь # например для 4x4.org
"4x4.org" 256 3 5 "BEAAAAOxYIG/de/sEWGkMlMw/+WZHw72QMNAdC
проще пойти другим путем (подложное письмо, вирус и т.п.). bneozk4BU4OCAbv9krBFnk52CZ67QPEfDMwV0k12Hr6sXkgZgeBpRV";
Соответственно если бизнес завязан на Интернет, то пла- };
нировать перевод своих серверов на DNSSEC или подпись
DNS-данных нужно уже сейчас. Принцип, думаю, понятен. DLV-записи создаются анало-
Здесь хочется отметить проект DNSSEC-Tools [8], кото- гичным образом (в options требуется dnssec-lookaside).
рый предлагает специализированное расширение к веб-
options {
браузеру Firefox, почтовому клиенту Thunderbird, SMTP- dnssec-lookaside . trust-anchor dlv.isc.org.;
серверам Sendmail и Postfix, FTP-серверам proftpd, ncftp, };
Jabber-серверу jabberd, OpenSSH, позволяющее добавить
поддержку DNSSEC в эти приложения, а также ряд вспомо- Для удобства отслеживания запросов можно создать от-
гательных утилит, патч к logwatch, библиотеки libsres и libval. дельный канал для протоколирования запросов DNSSEC:
Правда, готовых сборок, в которых присутствует этот патч,
logging {
не представлено, поэтому тот же Firefox необходимо пере- channel dnssec_log {
компилировать самостоятельно. file "log/dnssec" size 20m;
print-time yes;
Чтобы было немного понятней, что представляет DNSSEC
print-category yes;
на фоне теории, разберем настройку сервера BIND9 в двух print-severity yes;
возможных режимах, поддерживающих это расширение. severity debug 3;
};
category dnssec { dnssec_log; };
Настройка BIND в режиме кэширующего/ }
неавторитативного DNS-сервера
Для начала заставим BIND проверять полученные с опреде- Переконфигурируем BIND:
ленной зоны данные, клиенты, которые будут использовать
$ sudo rndc reconfig
этот DNS-сервер, будут защищены от подмены. Примеры $ sudo rndc flush
покажу на основе Ubuntu. Устанавливаем BIND.
$ sudo apt-get install bind9 И проверяем запрос:
> dig @127.0.0.1 4x4.org +retry=1 +dnssec +multiline
При самостоятельной сборке BIND необходимо активи-
ровать флаг --with-openssl. Флаг ad в полученном ответе должен быть установлен.
После установки в /etc/bind/named.conf (в Ubuntu секция В журнале будет показан полный путь проверки имени,
options вынесена в named.conf.options) добавляем следую- в том числе и проблемы с ключами и тому подобное:
щие параметры:
Nov 5 21:41:35 ubuntu named[32464]: /etc/bind/
options { named.conf:47: trusted key 'ru.' has a weak exponent
dnssec-enable yes; # Активируется поддержка DNSSEC Nov 5 21:43:53 ubuntu named[32464]: not insecure resolving
# Включается только для неавторитативного сервера 'samag.ru/A/IN': 89.253.192.21#53
dnssec-validation yes;
};
И так далее.
Далее необходимо сконфигурировать доверенные якоря
(trust anchor) для тех зон/доменов, которые будут проверять- Настройка BIND в режиме «Мастер сервера»
ся. Узнать нужный публичный ключ можно разными спосо- Чтобы настроить любой DNS сервер в качестве мастер сер-
бами. Самый простой – получить при помощи dig из DNS вера, отвечающего за зону, необходимо пройти несколько
(как это показано выше), но в этом случае нужно четко шагов:
знать, что ключ принадлежит именно тому, кому нужно. Про- > сгенерировать ZSC и KSK;
верить полученный ключ можно, зайдя на один из сайтов > прописать ключи в файл зоны;
зоны. Сегодня также доступны специальные сервисы, в ко- > подписать зону.
торых администраторы размещают trust anchor своих доме- Для создания ключей и подписи зоны используются ути-
нов [9]. литы, входящие в состав BIND, хотя доступны уже решения
Далее заносим анкоры в файл в секцию trusted-keys фай- сторонних разработчиков, но о них в конце статьи. Ключе-
ла named.conf: вая пара генерируется при помощи dnssec-keygen. Общий
формат вызова ее прост:
zone "se." {
type forward; dnssec-keygen –a алгоритм –b длина –n тип имя_домена
forwarders { 212.247.7.228; };
};
Все параметры понятны, за исключением типа ключа.
trusted-keys { Их несколько. В контексте статьи нас интересуют ZONE
# зона se илиHOST, с остальными можно ознакомиться на man-
"se." 257 3 5
4w6RVY0ciZ/a8t1xy5FIxkg2U95ZV5VuLtwmx2rgtAbx
странице.
BACzTKrqYIpJ6LYSmjdQ3or+ZiO2tEMr53EwAjA6GKrf Создаем ZSC:
qQ2S1y7Rblz2kaS6PK2Gh5MOCufhGozUhPQSGFTn/mV8
H9hlQptfcFCpFZrQQDAQqFAyxQginDgrwSripBk= $ dnssec-keygen –a RSASHA1 –b 1024 –n ZONE example.com

76 январь-февраль 2010 системный администратор


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

В некоторых дистрибутивах необходимо задать устрой- Bind DNSSEC:enabled


ство, которое будет участвовать в выработке ключа -r /dev/ Bind DLV:disabled

random. В результате получим два вида файла: Ряд проектов DNSSEC-tools, OpenDNSSEC [10] и Autotrust
Kdomain+<alg>+<fing>.key – открытый ключ; от NLnet Labs [11], DICI Tools от RIPE NCC [12], DNSSEC-
Kdomain +<alg>+<fing>.private – закрытый ключ. monitor [13] предлагают различные инструменты для более
В нашем примере это Kexample.com.+004+10141.key удобного управления зонами, наблюдения за DNSSEC-
и Kexample.com.+004+10141.private. зонами, обновления якорей и так далее. Например, утилита
KSK-ключ создается аналогично: maketestzone, входящая в состав DNSSEC-tools. позволя-
$ dnssec-keygen –r /dev/random -a RSASHA1 –b 1024 -n ZONE ↵
ет одной командой создать весь набор файлов для тесто-
-f KSK example.com вой зоны.
Kexample.com.+004+34980.key $ maketestzone example.com
Kexample.com.+004+34980.private

Формат полученного файла, содержащего публичный ***


ключ, позволяет сразу его импортировать в зонный файл Итак, процесс выхода в массы DNSSEC начался. Как мы ви-
без дополнительных правок. дим, во внедрении DNSSEC не все так однозначно, админи-
страторам как минимум добавится работы, ведь теперь при-
$ cat Kexample.com+004+10141.key
дется заботиться об актуальности ключевой информации.
example.com. IN KEY 256 3 5 bzA2wu … U1asmQg== Это признают и сами разработчики. Надеемся, что к тому
$ cat Kexample.com +*.key >> /etc/bind/zones/db.example.com времени, когда поддержка этой технологии будет внедрена
в корневых серверах и TLD, многие вопросы по управлению
Как вариант ключи можно подключить в файле зоны будут решены. EOF
при помощи параметра $include.
Теперь необходимо подписать зону, добавить RRSIG, 1. Яремчук С. Технология борьбы со спамом DKIM. //Системный
NSEC и другие ассоциированные записи. Для этого вызыва- администратор, №11, 2008 г. – С. 37-41.
ется утилита dnssecsignzone (общий вид): 2. Сайт DNSSEC – http://www.dnssec-deployment.org, российский –
http://www.dnssec.ru.
dnssecsignzone [o zonename] [N INCREMENT] [k KSK.key] ↵
zonefile [ZSK.key] 3. Связанные RFC – http://www.dnssec.net/rfc.
4. Заявление ICANN о переводе корневых серверов на DNSSEC
Пример: – http://www.icann.org/en/announcements/announcement-24jul08-
en.htm.
$ dnssecsignzone o example.com k Kexample.com.+004+34980 ↵
/etc/bind/zones/db.example.com Kexample.com.+004+10141 5. Сайт проекта NSD – http://www.nlnetlabs.nl/projects/nsd.
6. Comparison of DNS server software – http://en.wikipedia.org/wiki/
В результате на выходе получим файл зоны – db.example. Comparison_of_DNS_server_software.
com.signed, в котором ресурсные записи будут рассортиро- 7. DNS Security Extensions (DNSSEC) в Windows 2008 R2
ваны по алфавиту, а записи – содержать необходимые поля и Windows 7 – http://technet.microsoft.com/en-us/library/
RRSIG, NSEC и DNSKEY. ee683904%28WS.10%29.aspx.
Осталось добавить описание новой зоны в named.conf: 8. Сайт проекта DNSSEC-tools – http://www.dnssec-tools.org, http://
zone "example.com" { dnssec-tools.sourceforge.net.
type master; 9. Доверенные анкоры сайтов – https://www.ripe.net/projects/disi/
file "/etc/bind/zones/db.example.com ";
keys, http://secspider.cs.ucla.edu/trust-anchors.conf, https://www.
};
iks-jena.de/leistungen/dnssec.php, https//itar.iana.org/.DNSSEC-
Это все. Не забываем активировать параметр dnssec- tools; на Java – http://www.verisignlabs.com/dnssec-tools.
enable в named.conf. 10. Сайт проекта OpenDNSSEC – http://www.opendnssec.org.
К слову, в RedHat/Fedora доступны утилиты: командная 11. Сайт Autotrust от NLnet Labs – http://www.nlnetlabs.nl/projects/
dnssec-configure и графическая system-config-dnssec, упро- autotrust.
щающие настройку DNSSEC в BIND. Особых чудес, правда, 12. DICI (Deployment of Internet Security Infrastructures) Tools от RIPE
они не делают, просто добавляют нужные строки в секцию NCC – https://www.ripe.net/projects/disi/code.html.
options файла named.conf. 13. Сайт проекта DNSSEC-monitor – http://opensource.iis.se/trac/
Например, проверим статус DNSSEC: dnssec/wiki/DNSSEC-monitor.
14. Сайт проекта java-dnssec-tools – http://www.verisignlabs.com/
# dnssec-configure -s -b dnssec-tools.

системный администратор январь-февраль 2010 77


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

Визитка

ВАЛЕРИЙ ЛЕДОВСКОЙ, аналитик компании «Доктор Веб»

Dr.Web ES в полевых условиях


Как защитить бизнес от вирусов?
При информатизации предприятий обеспечение за-
щиты информационных систем выходит на первое
место. Причины объективны

Это и постоянный поток различных вирусных угроз, способ- пьютеров, и небольшие компании с 50 рабочими станциями
ных заблокировать работу любой компании на несколько и одним сервером.
дней или недель, и необходимость защиты от утечек инфор- Компания «Доктор Веб» начала работать над Dr.Web
мации, нередко вызванных непрофессионализмом или бес- Enterprise Suite еще в 2002 году, когда перед программи-
печностью сотрудников. стами была поставлена задача создать антивирусное ПО,
Антивирусных решений для защиты крупного и средне- способное обеспечить централизованное управление безо-
го бизнеса на российском рынке представлено в избыт- пасностью в государственной автоматизированной системе
ке. Есть известные зарубежные разработки от компаний (ГАС) «Выборы» (Dr.Web специальная версия ES работает
McAfee, Trend Micro, Symantec, есть и решения российских и по сей день). Управление производится в Центральной
разработчиков, ни в чем не уступающие и даже превосхо- избирательной комиссии РФ, а защищаемые станции на-
дящие их. Об одном из таких решений – Dr.Web Enterprise ходятся в региональных офисах ГАС «Выборы», количество
Suite (Dr.Web ES) – мы и расскажем в этой статье. Более которых исчисляется тысячами.
того, постараемся показать, насколько это возможно на бу- Выпуск коммерческого варианта Dr.Web ES состоялся
маге, как этот антивирусный комплекс действует в полевых в середине 2005 года. До начала 2009 года версия реше-
условиях. ния имела номер 4.44. Однако уже в мае «Доктор Веб» вы-
Dr.Web Enterprise Suite – уникальное программное реше- пустила версию 5.0, на основных особенностях которой мы
ние со встроенной системой централизованного управле- остановимся подробнее.
ния антивирусной защитой рабочих станций и файловых Важнейшим преимуществом новой версии Dr.Web ES 5.0
серверов Windows на предприятиях любого масштаба. стало обновленное антивирусное ядро, позволившее зна-
Причем «любого» здесь следует понимать буквально – раз- чительно снизить нагрузку на систему и увеличить быстро-
работку используют и предприятия с десятками тысяч ком- действие антивирусного сканера на 30 %. В обновленном
ядре также реализованы новые технологии борьбы с рут-
китами и возможность работы с еще большим количеством
Административный интерфейс
архивов и упаковщиков, в том числе неизвестных для анти-
вируса сегодня. Пятая версия Dr.Web ES имеет новые моду-
ли – веб-антивирус SpIDer Gate, отвечающий за блокиров-
ку угроз из сети Интернет, компонент самозащиты Dr.Web
SelfPROtect, препятствующий антиантивирусным програм-
мам вывести Dr.Web из строя, и модуль Офисного контро-
ля, который блокирует сотрудникам компаний возможность
посещения нежелательных, с точки зрения администрации,
сайтов. Кроме того, появился веб-интерфейс администрато-
ра, позволяющий сотруднику и с начальной квалификацией
управлять системой, причем даже извне защищаемой сети.
Таким образом, привлекательность для внедрения Dr.Web
ES на предприятиях существенно повысилась.
Один из примеров, который мы рассмотрим в этой ста-
тье, – внедрение и использование Dr.Web ES в компании
«Югавиа». Это одно из крупнейших российских предпри-

78 январь-февраль 2010 системный администратор


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

ятий в сфере организации перевозок, которое работает системы безопасности. Проанализировав ситуацию, руко-
на рынке авиационных услуг более сорока лет. водство предприятия поставило своим ИТ-специалистам
Руководство ИТ-департамента «Югавиа», не раз сталки- задачу внедрить другое решение, отвечающее следующим
ваясь со сбоями в работе сети по причине вирусных атак, критериям:
ясно сознавало острую необходимость в комплексной > защита рабочих станций, работающих под разными ОС;
системе антивирусной защиты рабочих станций. При этом > всесторонний и полный контроль, а также удобное
были выдвинуты следующие требования: способность обе- управление настройками системы безопасности;
зопасить компанию от рисков отказа/простоя в работе обо- > минимальное влияние на производительность;
рудования (в результате вирусных атак); лёгкое управление > оптимальная стоимость.
всеми компонентами антивирусной
защиты из единой консоли; поддерж-
ка широкого спектра операционных Пятая версия Dr.Web ES имеет новые
систем (в том числе ранних версий
ОС Microsoft Windows). модули – веб-антивирус SpIDer Gate
Для решения данных задач был вы-
бран именно Dr.Web Enterprise Suite, и компонент самозащиты Dr.Web
который полностью соответствовал
заявленным требованиям. «Данный
SelfPROtect
продукт легок в установке, настройке
и управлении, при этом он надежен и отвечает всем требо- ИТ-специалисты «БазэлЦемента» тщательно изучили
ваниям клиента, – говорит Максим Пух, менеджер по про- возможности продуктов, представленных на российском
дукции Центра информационной безопасности Softline, ком- рынке, и выбрали комплексное решение Dr.Web Enterprise
пании, которая осуществляла поставку «Югавиа» решения Suite, как наиболее приемлемое по соотношениям цена/воз-
Dr.Web ES. – Проблемы, связанные со скоростью доступа можности и цена/качество.
в Интернет, решаются за счет компрессии, объем сигнатур- По результатам внедрения ИТ-специалисты предприя-
ных баз Dr.Web ES невелик по сравнению с аналогичными тия особенно отмечают удобную, простую в освоении кон-
решениями, это дает экономию на трафике». соль управления, которая включает необходимые средства
В ходе реализации проекта была создана антивирусная офисного контроля и позволяет администратору посылать
сеть почти из 200 компьютеров и одного антивирусного сер- пользователям сообщения. Частые обновления антиви-
вера, обеспечивающего централизованное администриро- русных баз гарантируют постоянную актуальность защиты
вание защиты всех пользователей, обновление вирусных от навейших угроз. За счет варьирования функциональнос-
баз и программных модулей, мониторинг состояния сети ти можно в широких пределах менять скорость работы.
и оповещение о вирусных событиях. Единый центр управ- «Документация Dr.Web ES выполнена на высоком уров-
ления антивирусной защитой позволил существенно сокра- не, поэтому установка и настройка продукта доступны даже
тить время обслуживания ИТ-инфраструктуры и снизить на- не очень продвинутым пользователям», – отмечает началь-
грузку на системных администраторов. ник отдела АСУ «БазэлЦемента» Владимир Смирнов. EOF
Начальник отдела ИТ «Югавиа» Дмитрий Ремезов от-
мечает, что проект был рассчитан на защиту уже суще-
Схема работы DrWeb Enterprise Suite
ствующего оборудования. «Выбранное решение должно
было поддерживать в том числе и системы Windows 95 и 98,
и соответствовать имеющимся мощностям, проще говоря,
не нагружать систему. Нам нужно было решение, простое
в установке и управлении и в то же время надёжное, хорошо
зарекомендовавшее себя. Выбор пал именно на Dr.Web ES,
поскольку функциональность данного продукта нас полно-
стью устраивала. Более того, сотрудники компании уже име-
ли положительный опыт использования данного продукта
для защиты файловых серверов».
Другой пример – внедрение Dr.Web ES компанией
«БазэлЦемент-Пикалево», производителем строитель-
ных материалов высокого качества. Ранее в сети данного
предприятия функционировала система защиты, которая
заметно снижала производительность рабочих станций.
Кроме того, возможности эксплуатации решения на ПК
разных конфигураций и с разными операционными систе-
мами были сильно ограничены. Поскольку корпоративная
сеть предприятия насчитывает более четырёхсот рабочих
станций, порядка 20% из которых работают под управле-
нием Microsoft Windows 95/98/MЕ, этот недостаток оказался
одним из ключевых для принятия решения о перестройке

системный администратор январь-февраль 2010 79


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

Визитка

СЕМЕН ЕСИЛЕВСКИЙ, научный сотрудник, вычислительный программист


и энтузиаст Linux и Open Source. Кандидат физико-математических наук,
работает в области теоретической биофизики и молекулярного моделирования

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

Проекты с открытым кодом рождаются по-разному. Одни Во-первых, надежный и бесплатный хостинг для исхо-
возникают стихийно из доморощенных разработок, призван- дных кодов проекта и его официального сайта.
ных решать конкретную, сугубо прикладную задачу, быстро Во-вторых, впечатляющий набор инструментов для сов-
перерастающих эти узкие рамки. Другие изначально заду- местной разработки, отладки, общения с другими разработ-
мываются и тщательно планируются как открытые, а третьи чиками и пользователями:
переводятся в разряд открытых уже на стадии стабильных Репозитарий исходного кода проекта. Поддерживают-
продуктов. Так или иначе, но перед любым новорожденным ся практически все популярные системы контроля вер-
открытым проектом стоит вопрос хостинга, предоставляю- сий – Subversion, Git, Mercurial, Bazaar и CVS.
щего нужные для его разработки, поддержки и распростра- Система для создания и управления релизами, кото-
нения средства. Эта статья посвящена хостингу SourceForge рые сразу же будут доступны конечным пользовате-
(http://sourceforge.net), который является самой популярной лям для скачивания через разветвленную всемирную
площадкой для разработки открытого программного обес- сеть зеркал. Для создания релизов можно использовать
печения. Я коснусь его наиболее востребованных возмож- веб-интерфейс, scp, rsync и sftp.
ностей и опишу некоторые нетривиальные моменты, кото- Веб-сайт проекта с полной поддержкой PHP, Perl,
рые часто ставят в тупик начинающих пользователей. Python, Tcl, Ruby и MySQL.
Система сбора информации об ошибках (bug tracker)
История и возможности SourceForge на основе Trac (http://trac.edgewall.org) или MantisBT
SourceForge был основан в 1999 году компанией VA (http://www.mantisbt.org).
Software, которая с тех пор успела дважды поменять на- Статистика скачиваний, изменений исходного кода,
звание: сначала на SourceForge в 2004 году, а затем на сообщений об ошибках и т.д. Статистика является от-
Geeknet. Совсем недавно, в 2009 году, Geeknet объединила крытой и доступной для всех, но для администраторов
ресурсы SourceForge, Slashdot, ThinkGeek и freshmeat.net проектов имеются дополнительные возможности.
и, таким образом, сейчас является крупнейшей сетью сай- Модуль веб-аналитики, базирующийся на Piwik (http://
тов, посвященных свободному ПО. Сегодня SourceForge – piwik.org). Позволяет отслеживать число посетителей,
это огромный централизованный репозитарий открытых время их пребывания на сайте проекта, тип браузера, по-
исходных кодов. По данным на февраль 2009 года, на исковые системы, приведшие на сайт, и использованные
SourceForge было зарегистрировано более 230 тысяч про- в них ключевые слова, сайт, откуда «пришли» пользова-
ектов (не все из них, конечно, активны) и более двух мил- тели, изменения посещаемости во времени.
лионов пользователей. Гостевая книга на основе AN Guestbook (http://
Для обычного пользователя SourceForge – это колоссаль- aguestbook.sourceforge.net).
ная структурированная база данных свободного ПО с воз- Просмотр исходного кода проекта через браузер
можностью удобного поиска (см. рис. 1). Любую программу на основе Codestriker (http://codestriker.sourceforge.net)
можно скачать с ближайшего из многих зеркал, разбросан- с интеграцией в системы контроля версий CVS и Subversion.
ных по всему миру. За полюбившуюся программу можно Галерея рисунков (например, для скриншотов).
проголосовать или сделать денежное пожертвование ее ав- Создание блогов разработчиков на основе WordPress
торам. Можно и поучаствовать в ее разработке, отправляя (http://wordpress.org) и микроблогов на основе Laconica
сообщения об ошибках или занимаясь локализацией. (http://laconi.ca).
Что же предлагает SourceForge для разработчиков ПО Вики на основе MediaWiki (http://www.mediawiki.org).
с открытым кодом? Форум на основе phpBB (http://www.phpbb.com).

80 январь-февраль 2010 системный администратор


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

SourceForge является самой


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

Списки рассылки для проекта на основе GNU Описание и категоризация проекта


Mailman 2.1 (http://www.gnu.org/software/mailman) с гибкой Далее нужно заполнить страницу свойств новорожденного
настройкой, фильтрацией, автоматическим созданием проекта (см. рис. 2) важной информацией, которая позво-
архивов, поиском по архиву, спам-фильтром. лит пользователям и потенциальным разработчикам найти
Система публикации новостей проекта с возможно- его среди множества других. Необязательно сразу запол-
стью автоматического создания тем на форуме и под- нять все разделы описания, но чем больше информации,
держкой RSS. тем в конечном счете лучше для проекта. Нужно заметить,
Любая программа, помещенная на SourceForge, долж- что ссылки Edit в каждом разделе на странице описания
на распространяться по свободной лицензии. На выбор не всегда позволяют напрямую редактировать всю инфор-
предлагаются все возможные варианты таких лицензий, мацию из этого раздела. Поля редактирования для описа-
начиная от обычной GPL и заканчивая такой «экзотикой», ния и категоризации проекта разбросаны по нескольким
как Motosoto License или OCLС Research Public License. большим формам, которые только приблизительно соот-
Это ограничение, а также полностью открытые для чтения ветствуют по структуре самой странице описания. Это за-
репозитарии кода сужают число проектов, которые потен- частую сильно сбивает с толку. Описание включает:
циально могут размещаться на SourceForge. Например, этот > эмблему (в виде изображения 48х48), название, краткое
хостинг не подходит для свободно распространяемых про- описание (до 250 слов) и стадию разработки (послед-
грамм с закрытым кодом. няя почему-то редактируется совсем в другом блоке);
> произвольные теги для поиска;
Регистрация и создание проекта > список возможностей программы;
Итак, что же нужно, для того чтобы создать новый проект > область знаний, к которой относится проект, операци-
на SourceForge? В первую очередь зарегистрировать свою онную систему, язык программирования, целевую ауди-
учетную запись. Процедура стандартная, требует наличия торию, тип свободной лицензии, тип пользовательского
e-mail адреса и ничем особенным не выделяется. Если у вас интерфейса, языки, на которые переведен интерфейс.
уже имеется учетная запись Google, Yahoo, LiveJournal, Здесь же редактируется и стадия разработки.
Flickr, Blogger или других сайтов, поддерживающих иденти- Вся дальнейшая работа по управлению проектом проис-
фикацию по OpenID, то можно не регистрироваться, а ис- ходит на странице Develop. Ее выбор открывает несколько
пользовать ваш OpenID. дополнительных пунктов меню, которые почему-то не видны
После входа на сайт мы видим несколько пунктов меню со страницы описания проекта. В дальнейшем предполага-
(в виде «вкладок»), которые позволяют настроить разнооб- ется, что открыта именно эта страница.
разные сервисы SourceForge. Нужно сказать, что в размеще-
нии настроек логика просматривается не всегда, но в случае Добавление участников проекта
с регистрацией все логично. На странице Projects находим SourceForge может быть очень полезен даже для проектов
искомую ссылку Register a new project. Для создания про- с единственным разработчиком, но полностью его возмож-
екта нужно указать его название, уникальное имя (только ности раскрываются в коллективных проектах. На странице
прописные латинские буквы без пробелов), и короткое опи- Project Admin → Membership находится список всех участ-
сание. Как правило, проект становится активным уже через ников проекта. В новом проекте там находится только его
несколько минут после регистрации и появляется в списке на создатель. В проект можно добавить любого зарегистриро-
вкладке Projects. Создатель проекта автоматически становит- ванного на SourceForge пользователя. После добавления
ся его администратором с максимальными правами доступа. для любого участника можно указать права доступа к веб-

системный администратор январь-февраль 2010 81


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

сайту проекта и репозитарию кода, определить его роль This is an interactive shell created for user USER,PROJECT.
в проекте (начиная от администратора и заканчивая ответ- Use the "timeleft" command to see how much time remains
before shutdown.
ственным за локализацию). Use the "shutdown" command to destroy the shell before
SourceForge также позволяет искать разработчиков, по- the time limit.
тенциально заинтересованных в работе над вашим проек- For path information and login help, type "sf-help".

том. На странице Project Admin → Feature Settings имеется Будучи созданной, консоль доступна в течение четы-
сервис Help wanted, позволяющий заполнить специальную рех часов (после чего ее нужно создавать заново). Коман-
заявку на помощь в разработке проекта. В заявке указы- да sf-help вместе с различной информацией выдает прямой
вается, кто именно вам необходим (программист, перевод- адрес и порт для доступа в течение этого времени, например:
чик, тестер), какими навыками и в каком объеме он должен
...
обладать. На такие объявления, как правило, откликаются For direct access to this shell, use shell2.sourceforge.net
школьники и студенты, особенно часто летом, во время ка- on port 22002:
ssh -p 22002 USER@shell2.sourceforge.net
никул. Шансы найти таким способом действительно грамот-
...
ного разработчика невелики.
Если нужно просто загрузить файлы на сервер (на-
Консоль сервера пример, для веб-сайта), то можно и не создавать консоль,
SourceForge предоставляет удаленный доступ к консоли а использовать прямой доступ через USER,PROJECT@web.
своего сервера (shell service). Из консоли можно работать sourceforge.net. Файлы в дереве репозитария кода в этом
с веб-сайтом проекта, загружать файлы для релизов, ад- случае недоступны.
министрировать репозитарии кода и базы данных MySQL.
Доступ к серверной консоли настраивается отдельно для Работа с репозитарием кода
каждого участника проекта на странице Project Admin → Для определенности будем считать, что наш проект ис-
Membership. Чтобы создать новую консоль, для пользовате- пользует систему контроля версий Subversion, хотя можно
ля USER-проекта PROJECT достаточно выполнить следую- использовать и любую другую (Git, CVS, Mercurial). На стра-
щую команду: нице Project Admin → Feature Settings включаем поддержку
ssh -t USER,PROJECT@shell.sourceforge.net create Subversion, создается репозитарий для нашего проекта. Ре-
позитарий открыт для чтения для всех (в том числе и для
Процесс создания консоли занимает, как правило, около анонимного доступа). Закрыть доступ для чтения невозмож-
минуты и сопровождается такими сообщениями: но. Права записи нужно настраивать для каждого участника
USER,PROJECT@shell.sourceforge.net's password:
проекта отдельно на странице Project Admin → Membership.
Более тонкой настройки прав доступа пока не предусмотре-
Requesting a new shell for "USER" and waiting for it но, но проходит голосование пользователей для добавления
to start.
queued... starting...
такой функции. Адрес репозитария для проекта PROJECT –
https://PROJECT.svn.sourceforge.net/svnroot/PROJECT.

Рисунок 1. Основная страница сайта SourceForge Рисунок 2. Страница свойств проекта

82 январь-февраль 2010 системный администратор


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

Подробно останавливаться на деталях работы с Subversion фортно чувствует себя с командами Subversion. Для него
в этой статье не имеет смысла. В Сети есть множество хоро- гораздо удобнее скачать последний стабильный релиз про-
ших учебников по этому вопросу (например, http://svnbook. граммы. Управление релизами в SourceForge происходит
red-bean.com). либо через вполне интуитивный веб-интерфейс (Project
Для тех операций с репозитарием, которые невозмож- Admin → File Manager), либо через scp, sftp или rsync. Каж-
но выполнить удаленно через svn-клиент, предусмотрена дый релиз – это просто отдельная директория. Логическая
команда adminrepo в консоли сервера. Типичный сеанс ра- структура дерева релизов полностью определяется разра-
боты с adminrepo выглядит так. Сначала создается полная ботчиками, а не навязывается хостингом. Глубина дерева,
копия репозитария в директории /svnroot/PROJECT, а доступ как и размер файлов релизов, не ограничивается.
к самому репозитарию полностью блокируется: Нужно иметь в виду, что при доступе по scp или sftp пол-
adminrepo --checkout svn ный путь к корневой директории проекта определяется
по следующей схеме «первая буква названия/две первые
Теперь с копией, находящейся в /svnroot/PROJECT, мож- буквы названия». Например, для проекта myproject и поль-
но производить любые манипуляции. Например, можно пол- зователя user:
ностью очистить репозитарий и создать его с нуля:
scp file.zip user,myproject@frs.sourceforge.net:/home/ ↵
frs/project/m/my/myproject/Rel_1
rm -rf /svnroot/PROJECT/*

svnadmin create /svnroot/PROJECT Аббревиатура FRS означает file release system.


Дерево релизов каждого проекта автоматически син-
После того как все нужные манипуляции выполнены, ста- хронизируется со всеми многочисленными зеркалами
рый блокированный репозитарий заменяется отредактиро- SourceForge, откуда пользователи могут скачать новый ре-
ванной копией: лиз. Никаких дополнительных действий для этого предпри-
adminrepo --save svn нимать не нужно.

Блокировка при этом снимается. Перед тем как присту- Сайт проекта
пать к любым рискованным операциям с репозитарием, сто- SourceForge дает прекрасные возможности для создания
ит создать его резервную копию (консоль сервера для этого веб-сайта проекта (а также для разработки открытых проек-
не нужна): тов, полностью основанных на WEB). Предоставляется стан-
дартный сервер на базе CentOS 5.x Linux и Apache 2.2.x.
rsync -av PROJECT.svn.sourceforge.net::svn/PROJECT/*
Поддерживаются PHP со всеми основными модулями, Perl,
Python, Tcl, Ruby и MySQL 5.x, с централизованно установ-
Создание релизов ленным phpMyAdmin.
Репозитарий кода удобен для каждодневной рутинной раз- Доступ к файлам веб-сайта проекта осуществляется че-
работки, но конечный пользователь далеко не всегда ком- рез сервер web.sourceforge.net. Например:

Рисунок 3. Главная страница сайта проекта по умолчанию Рисунок 4. Страница Project Database (MySQL) Manage

системный администратор январь-февраль 2010 83


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

scp file.html user,myproject@web.sourceforge.net: ный опыт автора говорят о том, что камнем преткновения,
как правило, становятся интерфейс сайта и система по-
При этом файлы физически попадают в директорию мощи. До недавнего времени интерфейс SourceForge был
/home/groups/m/my/myproject/htdocs/. «Внешний» адрес ярким примером сумбурного интернет-портала с непроду-
сайта проекта myproject – http://myproject.sourceforge.net. манной системой навигации. Учитывая, что SourceForge –
По умолчанию главная страница сайта проекта формиру- это одновременно портал и для разработчиков, и для поль-
ется автоматически (см. рис. 3), но ее, естественно, можно зователей, создать практичный и понятный интерфейс
заменить на свою. действительно непросто, а богатство возможностей застав-
Доступ к MySQL, как правило, уже активирован изначаль- ляло мириться с неудобствами. К счастью, совсем недавно
но, но иногда необходимо сделать это вручную. Для этого дизайн сайта кардинально поменялся в лучшую сторону
на странице Project Admin → Feature Settings нужно вклю- (см. рис. 1), хотя его все еще трудно назвать идеальным.
чить опцию Project Database (MySQL). Помощь в SourceForge сосредоточена в wiki-разделе
Работа с MySQL на SourceForge имеет несколько нюан- сайта https://sourceforge.net/apps/trac/sourceforge/wiki. Под-
сов. Имя сервера MySQL для каждого проекта формирует- робная информация есть практически по каждому вопросу,
ся исходя из первой буквы его имени. Например, для про- однако найти ее, мягко говоря, непросто. Централизованно-
екта myproject полное имя сервера mysql-m.sourceforge.net. го индекса wiki-страниц нет (не говоря уже о том, что ему по-
Для доступа «изнутри» (из веб-директории самого проекта) ложено быть структурированным по категориям), а ссылки с
достаточно указывать просто mysql-m. Имена баз данных так- главной страницы далеко не всегда последовательно ведут
же специфичны для каждого проекта, чтобы избежать пута- к нужным разделам. Например, попасть на страницу, посвя-
ницы. Базы данных имеют уникальный суффикс, состоящий щенную администрированию репозитария кода, через сер-
из первой буквы имени проекта и идентификатора GROUP верную консоль (https://sourceforge.net/apps/trac/sourceforge/
ID, которые вместе представляют уникальную комбинацию. wiki/SVN%20adminrepo) с главной страницы wiki нельзя ни-
Узнать GROUP ID для проекта не так просто, как это как. Соответственно невозможно догадаться, что такая до-
должно быть по логике вещей. Для этого нужно зайти кументация вообще существует. Приходится пользовать-
на страницу Summary и щелкнуть на Edit в блоке с названи- ся Google или встроенным поиском. Последний, кстати,
ем проекта. На открывшейся странице переходим по ссыл- по умолчанию ищет не только в wiki, но и в bug-трекере,
ке Registration и наконец видим искомый идентификатор так что первым десятком ссылок оказываются сообщения
среди другой служебной информации (GROUP ID также по- об ошибках (что явно не соответствует ожиданиям пользова-
является как последний параметр в адресной строке брау- теля). Информация в wiki может быть несколько устаревшей,
зера после щелчка на Edit). Предположим, GROUP ID про- но никаких серьезных ошибок я ни разу не заметил.
екта myproject – 123456, тогда все базы данных для этого Нужно также упомянуть, что скорость отклика сайта
проекта будут иметь префикс «m123456 _». SourceForge, как правило, удручающе невелика. Судя по все-
По умолчанию для каждого проекта создаются три поль- му, это связано именно с серверами SourceForge, т.к. практи-
зователя сервера MySQL с разными правами доступа. В на- чески не зависит от провайдера и качества внешнего канала.
шем примере это m123456ro с доступом только для чтения
(разрешены только запросы SELECT), m123456rw с правами Конкуренты
доступа для чтения и записи (разрешены запросы SELECT, SourceForge является далеко не единственным хостингом
INSERT, DELETE, UPDATE) и m123456admin с полными пра- для проектов с открытым кодом. В этой статье невозможно
вами администратора. дать исчерпывающий обзор всех его конкурентов, поэтому я
Альтернативный путь – открыть страницу Project Admin → ограничусь только перечислением самых известных из них:
Feature Settings → Project Database (MySQL) Manage > Bazaar (http://bazaar-vcs.org/en);
(см. рис. 4) где явно отображены имя базы данных и пре- > BerliOS (http://www.berlios.de);
фиксы таблиц. Там же можно задать пароли для пользовате- > Lauchpad (https://launchpad.net);
лей базы данных и найти прямые ссылки на документацию. > GNU savannah (http://savannah.gnu.org).
Для всех задач, связанных с администрированием Подробное сравнение этих и других, менее популярных,
баз данных проекта, можно использовать либо phpMyAdmin хостингов можно найти в Википедии (http://en.wikipedia.org/
(доступен по адресу https://mysql-LETTER.sourceforge.net), wiki/Comparison_of_open_source_software_hosting_facilities).
либо серверную консоль. Например, так можно создать ре-
зервную копию базы данных в серверной консоли: ***
SourceForge по праву считается самым популярным хостин-
mysqldump --host=mysql-{LETTER}.sourceforge.net ↵
гом для открытого ПО. Богатые возможности делают его
--user={LETTER}{GROUP ID}admin -p --opt ↵
{LETTER}{GROUP ID}_{DATABASENAME} | ↵ очень привлекательным как для масштабных проектов, так и
gzip --fast > dumpfile.mysql.gz для совсем небольших домашних разработок. В последнее
время интерфейс SourceForge существенно улучшился,
где LETTER – первая буква имени проекта. есть надежда, что со временем будут устранены и оставши-
еся недостатки. Если свыкнуться с некоторыми особенно-
И на Солнце есть пятна стями интерфейса, искать ответы на возникающие вопросы
Несмотря на огромные возможности, предоставляемые через Googlе, не полагаясь на путанную систему навигации,
SourceForge, эффективно использовать этот хостинг не так то использование SourceForge можно назвать приятным
просто, как хотелось бы. Многочисленные отзывы и лич- и беспроблемным. EOF

84 январь-февраль 2010 системный администратор


Реклама
Программирование

Визитка

ИВАН КОРОБКО, сертифицированный специалист MCP, автор более


50 статей и двух книг. Занимается созданием различных приложений
для Active Directory

Расширяем возможности
PowerShell: другие языки программирования
PowerShell – язык командной строки, разработанный
для определённого круга задач. Расширить его мож-
но за счет других языков программирования, инте-
грировав программный код из VBScript или VB.NET

Каждый язык программирования имеет своё индивидуаль- Именно это свойство используется. Фрагмент программ-
ное назначение. Например, PowerShell создан для решения ного кода, который необходимо исполнить в текстовом виде,
административных задач, совмещая в себе возможности ко- помещается в листинг PowerShell, затем выполняется его
мандной строки; частично VBScript; .NET FrameWork, а зна- компиляция и немедленное исполнение. С практической
чит и VB.NET или C#. Оболочка на базе командной строки, точки зрения это осуществляется в PowerShell вызовом
унаследованная из MS-DOS предназначена для управления COM-объекта ScriptControl с помощью командлета New-
ОС из командной строки. Созданные с использованием их Object. Его экземпляр создается с ключом comObject. Соз-
командные файлы позволяли автоматизировать процессы. данным объектом поддерживается ряд свойств и методов.
С появлением Windows возможности оболочки расшири- Некоторые из них приведены в таблицах 1 и 2.
лись и появился конкурент – VBScript и Jscript. Вместе с WSH По правилам синтаксиса PowerShell вставка многостроч-
сценарии созданные на этих скриптовых языках позволяли ного текста, а именно фрагмент листинга на VBScript/JSсript,
решить множество различных задач. Спустя годы появился помимо обычных кавычек, заключается в символ «@ с обеих
набор библиотек FrameWork, с помощью которых диапазон сторон. В листинге 1 приведен пример отображения тексто-
действий еще больше расширился. Однако администрато- вого сообщения, вызываемого в VBScript-сценарии, храня-
ры не могли использовать преимущества этих библиотек, щемся в переменной $txtCode.
требовались серьезные познания в программировании. Внимание! Во всех примерах текст интегрированного
Шаг на встречу наконец был сделан – это PowerShell совме- в PowerShell сценария выделен красным цветом.
щающий в себе возможности командной строки; поддержи-
вающий COM-объекты (замена VBS+WSH); .NET FrameWork Листинг 1. Выполнение сценария на VBScript из PowerShell
(VB.NET или C#). Все это так, но не смущает ли читателя
$sc = New-Object –comObject ScriptControl
слово «частично»? Попробуйте подключить сетевой диск $sc.Language = 'VBScript'
или сетевой принтер с помощью PowerShell. Не получилось? $txtCode = @"
MsgBox "Тестовое сообщение"
А ведь в VBscript/JScript это можно было сделать одной
"@
строкой. Давайте попытаемся удаленно управлять серве- $sc.AddCode($txtCode)
рами, например, настройками ABE или DFS. Как, PowerShell $sc.CodeObject
основан на .NET, но «не умеет работать» c API-функциями?
Так и хочется сделать вывод – Microsoft опять не доделал Передача параметров из PowerShell в VBScript
свой продукт. Но это только на первый взгляд. Если разо- Для передачи параметров в PowerShell используется один
браться, то можно заимствовать код из VBScript и VB.NET из методов: Eval(), Run(), АddCode(). Первые два метода
в PowerShell, передавать и получать параметры. сходны между собой: оба выполняют код, загруженный ра-
нее в оперативную памятью. Третий метод принципиально
PowerShell и интерпретируемые языки отличается от первых двух тем, что параметры передаются
программирования сценарию, а не функции. Из-за этого с помощью первых
К интерпретируемым языкам программирования относят- двух методов можно получить какой-либо объект обратно
ся такие интегрированные в операционную систему языки в PowerShell, а с помощью третьего – нет.
как VBScript, Jscript. Интерпретируемые языки характеризу- Реализация первых двух методов проста, поэтому описы-
ются, прежде всего, тем, что программный код хранится в тек- вать их подробно нет смысла. Пример использования мето-
стовом виде, а при вызове файла осуществляется компиля- да Eval() приведен в листинге 3 (см. подраздел «Передача
ция программного кода интерпретатором и его исполнение. результатов из VBScript в PowerShell»).

86 январь-февраль 2010 системный администратор


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

Microsoft опять не доделал


свой продукт? Но это только
на первый взгляд. Если разо-
браться, не все так плохо

Рассмотрим подробнее практику использования метода {


AddCode(). В листинге 2 приведен пример, в котором с по- $sc = New-Object -comObject ScriptControl
$sc.Language = 'VBScript'
мощью этого метода передаётся значения параметра. Дан- $ txtCode = @"
ный процесс состоит из двух частей: передачи параметра str1="{0}"
сценарию и чтения переданного значения. Передача значе- MsgBox str1
"@
ния осуществляется с помощью ключа -f, за которым через $sc.AddCode($($code -f $p1))
запятую перечислены передаваемые параметры. В при- $sc.CodeObject
}
мере – это единственный параметр $ps1. В VBScript встав-
call_vbs("Тестовое сообщение")
ке получение значения параметра осуществляется при-
своением произвольной переменной инструкции {Number},
где Number – порядковый номер считываемого параметра. Передача результата из VBScript в PowerShell
Передать параметры из PowerShell в VBScript – это билет
Листинг 2. Пример передачи параметра из PowerShell в VBScript вставку в один конец. Достаточно часто необходимо вернуть получен-
ный результат обратно в PowerShell. Для решения этой зада-
function call_vbs($p1)
чи лучше всего подойдет метод Eval(). Этот метод имеет всего

Таблица 1. Свойства объекта ScriptControl Таблица 2. Свойства объекта ScriptControl

Свойство Тип данных Описание Метод Описание


Language String Задает язык интерпретатора описывае- AddCode(String) Добавляет код, заданный параметром к спис-
мой вставки. По умолчанию доступны ку процедур компонента. В дальнейшем эти
VBScript и JScript. При установке расши- процедуры могут быть вызваны при помощи
рений Windows Host Scripting возможно метода Run() или других процедур скрипта
использование других языков, например, Eval(String) Выполняет код, заданный в параметре, и воз-
Perl или Rexx вращает результат исполнения. Позволяет
Timeout Integer Интервал исполнения скрипта, по ис- выполнить код без добавления его к списку
течении которого генерируется ошибка. процедур компонента (см. листинг *)
Значение «-1» позволяет отключить об- Run(ProcedureName, Arg1, Выполняет указанную процедуру из ранее
работчик ошибок, что позволит скрипту Arg2, …) загруженных с помощью метода AddCode().
исполняться неограниченное время В массиве Parameters могут быть переданы
Error Integer При вызове этого свойства получают код параметры
ошибки и ее описание. Если код ошибки Reset Сбрасывает компонент в начальное состоя-
«0», то сценарий выполнен правильно ние, удаляя все добавленные ранее объекты
UseSafeSubset Boolean При установке этого свойства в TRUE и код
компонент может выполнять ограничен- _Aboutbox Вывод справочной информации о версии
ный набор действий, заданный текущими Script Control (см. рис. 1)
установками безопасности в системе

системный администратор январь-февраль 2010 87


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

один параметр, значение которого – имя функции и ее пара- с любым объектом можно выполнить с помощью с API-
метры. Во фрагменте на VBScript, вставленном в PowerShell, функции, вызываемой на низком уровне. Ярким примером
обязательно должна быть объявлена функция, а не процеду- является служба DFS, программное управление которой
ра. Передача параметра обратно из VBScript обеспечивает- возможно только с помощью API-функций. Чтобы упро-
ся стандартным механизмом: в VBScript необходимо в конце стить изложение материала? отвлечемся от DFS и приведем
функции присвоить одноименной переменной результирую- пример вывода обычного окна сообщения – MessageBox().
щее значение функции. Это значение автоматически будет Реализуем вызов сообщения с помощью вставки листинга
возвращено в метод Eval() (в листинге 2 – переменная result). программного кода, написанного на VB.NET в тело сцена-
В листинге 2 приведен пример вычисления суммы двух чи- рия PowerShell, и с помощью вызова соответствующей API-
сел: из PowerShell передаются в VBScript функцию два чис- функции, описанной в VB.NET.
ла – 2 и 5. Функция вычисляет сумму и возвращает результат
в PowerShell. Полученное значение выводится на экран. Интеграция кода на VB.NET в PowerShell
Интеграция в PowerShell кода компилируемых языков, напри-
Листинг 3. Передача и возвращение параметров между VBScript и PowerShell мер VB.NET или C#, осуществляется несколько иным меха-
низмом. Вставка программного кода также компилируется,
$sc = New-Object -comObject ScriptControl
$sc.Language = 'VBScript' однако вместо файла записывается в оперативную память.
$txtCode = @" Успешная интеграция программного кода на VB.NET
Function test(a,b)
обеспечивается с помощью двух объектов. С помощью
test = a+b
end Function первого – CompilerParameters осуществляется настройка
"@ параметров компиляции указанного кода, а также иденти-
$sc.AddCode($txtCode)
$a=2
фикация языка программирования. Второй объект изме-
$b=5 няется в зависимости от используемого во вставке языка
$result = $sc.Eval("test($a,$b)") программирования. Например, для Visual Basic – Microsoft.
write-host $result
VisualBasic.VBCodeProvider.
Фрагмент исполняемого кода на VB.NET представляет
Выполнение VBS-файла из PowerShell собой описание класса с произвольным именем и минимум
Встречаются случаи, когда необходимо интегрировать одну функцию, имя которой также произвольно. Листинг
не программный код в PowerShell, а вызвать готовый VBS- является значением переменной, заключенного помимо ка-
файл, задав аргументы командной строки. Для реализации вычек в символы «@» (см. листинг 5). При переносе листин-
этого метода используется встроенный в операционную га из Visual Studio в PowerShell необходимо следить за тем,
систему интерпретатор Wscript.exe или Cscript.exe. В листин- чтобы иерархический путь ко всем методам и функциям был
ге 4а) приведен пример вызова файла test.vbs. Текст файла указан целиком, т.к. импорт пространств имен не поддержи-
test.vbs листинге 4б). Результатом выполнения сценариев вается. Таким образом, вывести окно с помощью MsgBox()
является вывод информационного сообщения (см. рис. 2). невозможно, необходимо указать полный путь – Microsoft.
VisualBasic.Interaction.MsgBox().
Листинг 4а. Вызов VBS-файла из PowerShell
Листинг 5. Вызов VB.NET вставки из PowerShell
$txt = "Тестовое сообщение"
cscript.exe test.vbs $txt $provider = New-Object Microsoft.VisualBasic.VBCodeProvider
$params = New-Object ↵
Листинг 4б. Файл test.vbs System.CodeDom.Compiler.CompilerParameters
$params.GenerateInMemory = $True
Set obj = Wscript.Arguments $refs = "System.dll","Microsoft.VisualBasic.dll"
MsgBox obj(0) $params.ReferencedAssemblies.AddRange($refs)

$txtCode = @"
Class mBox
PowerShell и компилируемые языки программирования Sub Main()
Довольно часто возникает потребность использовать встав- Microsoft.VisualBasic.Interaction.MsgBox ↵
("Тестовое сообщение")
ки VB.NET или C# в листинге PowerShell. Это обуславливает- End Sub
ся невозможностью реализовать тот или иной функционал End class
при помощи PowerShell. Как правило, любую манипуляцию "@

Рисунок 1. Справка Script Control Рисунок 2. Информационное сообщение

88 январь-февраль 2010 системный администратор


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

$results = $provider.CompileAssemblyFromSource( ↵ Class Summ


$params, $txtCode) Function Summa (x ,y )
$mAssembly = $results.CompiledAssembly Dim s As integer = x +y
$i = $mAssembly.CreateInstance("mBox") Summa = s
$r = $i.main() End Function
End class
"@
Компиляция вставки на VB.NET осуществляется в опера- $a=2
тивной памяти. За это отвечает свойство GenerateInMemory. $b=5
$results = $provider.CompileAssemblyFromSource( ↵
После завершение компиляции осуществляется выпол-
$params, $txtCode)
нение скомпилированного кода. Для обращения к нужной $mAssembly = $results.CompiledAssembly
функции необходимо указать класс, в котором она находит- $i = $mAssembly.CreateInstance("Summ")
$result = $i.Summa($a,$b)
ся, а затем и саму функцию. Write-Host $result

Передача параметров из PowerShell во вставку VB.NET Обратите внимание, что вопреки правилам синтаксиса
Часто требуется передать параметры из PowerShell в какую- VB.NET, при объявлении функции Summa() в классе Summ,
либо функцию в VB.NET вставки. Для этого необходимо при тип данных переменных не указан. Это сделано специально.
вызове функции указать параметр, а в листинге VB.NET В противном случае сценарий работать не будет.
описать его как параметр функции. Внутри VB.NET вставки
работа с параметром функции ведется в обычном режиме. Вызов API-функций из VB.NET вставки в PowerShell
В листинге 6 приведен пример передачи параметра строки API-функция – это низкоуровневая функция, описанная в на-
«Тестовое сообщение» в функцию showString. Полученное боре динамических библиотек ядра операционной системы
значение выводится на экран с помощью функции MsgBox(). Windows. Использование API значительно расширяет возмож-
ности программиста, позволяя создавать очень сложные при-
Листинг 6. Передача параметров функции из PowerShell в VB.NET вставку ложения. Так, доступ к DFS программным способом осущест-
вляется только с помощью API-функций. Даже .NET здесь
$provider = New-Object Microsoft.VisualBasic.VBCodeProvider
$params = New-Object ↵ бессилен. Приведем пример вызова простейшей API-функции
System.CodeDom.Compiler.CompilerParameters (листинг 8), выводящей окно сообщений – Message Box. Лю-
$params.GenerateInMemory = $True
бая API функция объявляется непосредственно в классе
$refs = "System.dll","Microsoft.VisualBasic.dll"
$params.ReferencedAssemblies.AddRange($refs) VB.NET, как любая другая функция, например, MyMessageBox.
При объявлении функции обязательно указывается библиоте-
$txtCode = @"
Class mBox
ка, в которой она описана и псевдоним (алиас), который на-
Sub showString (str) значается произвольно. После объявления функции, она вы-
Microsoft.VisualBasic.Interaction.MsgBox (str) зывается в одной из функций в VB.NET вставке.
End Sub
End class
"@ Листинг 8. Вызов API-функции из VB.NET вставки в PowerShell
$results = $provider.CompileAssemblyFromSource( ↵
$params, $txtCode) $provider = New-Object Microsoft.VisualBasic.VBCodeProvider
$mAssembly = $results.CompiledAssembly $params = New-Object ↵
$i = $mAssembly.CreateInstance("mBox") System.CodeDom.Compiler.CompilerParameters
$r = $i.showString("Тестовое сообщение") $params.GenerateInMemory = $True
$refs = "System.dll","Microsoft.VisualBasic.dll"
$params.ReferencedAssemblies.AddRange($refs)
Механизм передачи параметра из выполненного VB.NET
$txtCode = @"
сценария обратно в PowerShell выглядит так же, как в ли- Class mBox
стинге 3 (случай VBScript). Для передачи параметра исполь- Declare Auto Function MyMessageBox Lib "user32.dll" ↵
зуется функция. В конце функции переменной, имя которой Alias "MessageBox" _
(ByVal hWnd as Integer, ByVal msg as String, ↵
совпадает с названием функции, присваивается перемен- ByVal Caption as String, ByVal Tpe as Integer) ↵
ная, передаваемая в PowerShell. В качестве переменной As Integer
может выступать любой объект, поддерживаемый VB.NET – Sub Main()
MyMessageBox(0, "Текстовое сообщение", "", 0)
строка, объект, массив и т.д. End Sub
В листинге 7 приведен пример сложения двух чисел. End class
Два исходные числа передаются из PowerShell в VB.NET. "@
$results = $provider.CompileAssemblyFromSource( ↵
В сценарии осуществляется их сложение, затем результат $params, $txtCode)
обратно передается в PowerShell и выводится на экран. $mAssembly = $results.CompiledAssembly
$i = $mAssembly.CreateInstance("mBox")
$r = $i.main()
Листинг 7. Передача и возвращение параметров между VB.NET и PowerShell

$provider = New-Object Microsoft.VisualBasic.VBCodeProvider


$params = New-Object ↵ ***
System.CodeDom.Compiler.CompilerParameters В заключение отмечу, что приведенный материал лишь не-
$params.GenerateInMemory = $True
много раскрывает скрытые возможности языка PowerShell.
$refs = "System.dll","Microsoft.VisualBasic.dll"
$params.ReferencedAssemblies.AddRange($refs) Умелыми руками с его помощью можно создавать очень
сложные программы, которые невозможно будет отличить
$txtCode = @"
по внешнему виду от обычных Windows-приложений. EOF

системный администратор январь-февраль 2010 89


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

Визитка

ЕВГЕНИЙ ЛИСОВСКИЙ, директор по маркетингу ООО «Фаматек Трейд»

Мышеловка для админа


Осторожно: сыр прилагается
Три кита, на которых основано ПО для удаленного
управления компьютерами, безопасность, скорость
и удобство использования

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

90 январь-февраль 2010 системный администратор


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

мало средств, если, к примеру, этот пользователь решает Клиент-серверные в свою очередь делятся на две про-
важные и срочные вопросы, от которых зависит уровень до- стые категории: платные и бесплатные. А вот тут то и пора
хода компании. вспомнить про мышеловку! Возьмем, к примеру, бесплат-
Помимо удаленного администрирования, подобное ПО ное решение UltraVNC и знакомый каждому админу платный
позволяет сотрудникам иметь постоянный доступ к свое- Radmin. Какое решение вы выберете для использования
му рабочему компьютеру, не находясь на рабочем месте, в корпоративной сети? Не спешите с ответом, ведь, как го-
без необходимости копировать важную корпоративную ин- ворится, бесплатный сыр бывает только в мышеловке. Ка-
формацию и носить её с собой на флэшке, что, небезопас- кие достоинства у UltraVNC? Первое, что приходит в голо-
но. Таким образом, корпоративные данные всегда остаются ву, – это бесплатная программа. В остальном выполняемые
внутри компании. Помимо этого, можно организовывать уда- UltraVNC функции схожи с Radmin. В чем же тогда различия
лённый офис, имея системный блок (без монитора, мыши с точки зрения использования в корпоративной сети?
и клавиатуры), подключенный к офисной сети с доступом Во-первых, UltraVNC и прочие подобные бесплатные про-
в Интернет. Таким образом, можно нанимать на работу уда- граммы написаны на основе VNC, их предка с открытым ко-
лённых сотрудников из любой точки мира (если там есть дом, отсюда вытекает возможность изучения кода с целью
доступ в Интернет). Выгода для компании очевидна: затраты поиска уязвимостей. В Интернете можно найти целый ряд
на организацию виртуального рабочего места минимальные. модифицированных клиентов и «эксплоитов» для программ
Наравне с удалённым офисом, можно использовать на базе VNC. Radmin, в отличии от подобных программ,
ту же программу, к примеру, для дистанционного обучения написан, как говорится, с нуля, имеет уникальный код,
новых сотрудников навыкам работы с офисным ПО. Тут вы- и не подвержен «болезням» VNC.
года также очевидна: два человека за одним рабочим сто- Во-вторых, UltraVNC, как и любое другое бесплатное ПО,
лом умещаются с трудом, да и неудобно это как-то. плохо тестируется перед релизом (отчёты о найденных ба-
При наличии же в программе средств голосовой и тексто- гах можно почитать на форуме). Для Radmin такого понятия
вой коммуникации её можно использовать для проведения не существует, поскольку программа тщательно тестирует-
презентаций (многие программы поддерживают подключе- ся перед каждым релизом, ведь уровень ответственности
ние к удалённому компьютеру одновременно нескольких крайне высок (Radmin используется большим количеством
пользователей и наоборот). банков и госструктур различных стран).
Что греха таить, некоторые работодатели также исполь- Как я уже говорил, вопрос безопасности корпоративной
зуют программы удаленного доступа для контроля над дея- информации крайне важен при выборе ПО для удаленно-
тельностью сотрудников, хотя я не сторонник таких методов. го управления. Наравне с безопасностью и стабильностью,
Ещё одна сфера деятельности, где ПО для удаленного скорость работы и удобство использования также важны.
доступа позволяет скрасить жизнь технического специали- Всегда приятно работать с программой с понятным интер-
ста, – это сервис по удалённой поддержке клиентов и ком- фейсом и продуманным набором функционала. Разуме-
пьютеров в распределённых сетях (банкоматы, терминалы). ется, надёжная и качественная программа для удалённого
Итак, программы удалённого доступа в бизнесе крайне управления стоит денег, однако эта цена несравнимо мала
важны, так как позволяют снижать издержки и повышать по сравнению с выгодой от использования в корпоративной
производительность труда. Какую же программу выбрать? сети. Конечно, далеко не каждое бесплатное ПО хуже плат-
Web-based-решения рассматривать не будем, ибо они, ного. Однако, как правило, чем сложнее продукт, тем более
в первую очередь, предназначены для домашнего пользо- низким качеством обладает его бесплатный аналог. Так сто-
вателя. ит ли жертвовать корпоративной безопасностью ради бес-
Бесплатные продукты для некоммерческого использова- платного ПО, не слишком надежного и сомнительного ка-
ния также оставим в стороне. чества? EOF

Регулярные отчёты о «багах» в версиях UltraVNC под грифом «стабильная» Дружелюбный интерфейс (как говорит одна моя знакомая) – это наше всё!

системный администратор январь-февраль 2010 91


Bagtraq

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


в Apache mod_proxy в qla2xxx-драйвере в Red Hat Enterprise Linux
Программа: Apache 1.3.41, возможно, другие версии. Программа: Red Hat Enterprise Linux 5 .
Опасность: Высокая. Опасность: Низкая.
Наличие эксплоита: Нет. Наличие эксплоита: Нет.
Описание: Уязвимость существует из-за ошибки об- Описание: Уязвимость существует из-за того, что
работки целочисленных в функции ap_proxy_send_fb() qla2xxx-драйвер для адаптера QLogic Fibre Channel PCI/
в файле src/modules/proxy/proxy_util.c. Удаленный поль- PCIe устанавливает привилегии на запись всем поль-
зователь может вызвать переполнение динамической па- зователям для файлов /sys/class/scsi_host/[a qla2xxx
мяти и выполнить произвольный код на целевой системе. host]/vport_create и /sys/class/scsi_host/[a qla2xxx host]/
Уязвимость распространяется на системы, где размер vport_delete. Злоумышленник может изменить некото-
типа данных long больше чем размер типа данных int (на- рые атрибуты SCSI. Уязвимость распространяется толь-
пример, на 64-битных системах). ко на системы, использующие qla2xxx-драйвер с NPIV-
URL производителя: www.apache.org. устройствами.
Решение: Установите последнюю версию 1.3.42 с сайта URL производителя: www.redhat.com.
производителя. Решение: Установите исправление с сайта производи-
теля.

Уязвимость при обработке больших пакетов


в Realtek 8169-драйвере в XenServer Множественные уязвимости в phpMyAdmin
Программа: Citrix XenServer 5.0 Update 3 и более ранние Программа: phpMyAdmin версии до 2.11.10.
версии; Citrix XenServer 5.5. Опасность: Низкая .
Опасность: Средняя. Наличие эксплоита: Нет.
Наличие эксплоита: Нет. Описание: 1. Уязвимость существует из-за того, что при-
Описание: Уязвимость существует из-за ошибки ложение создает временную директорию с привилегия-
в RTL8169-драйвере при обработке слишком больших ми на запись для всех пользователей. Злоумышленник
сетевых пакетов. Удаленный пользователь может с помо- может изменить файлы.
щью слишком большого сетевого пакета вызвать панику 2. Уязвимость существует из-за того, что приложение
ядра системы. создает временные файлы с предсказуемым именем.
URL производителя: www.citrix.com. Злоумышленник может с помощью специально сформи-
Решение: Установите исправление с сайта производи- рованной символической ссылки произвести некоторые
теля. действия с повышенными привилегиями.
3. Уязвимость существует из-за того, что некоторые
данные, передаваемые сценарию scripts/setup.php, ис-
пользуются для вызова функции unserialize().
Уязвимость при обработке подключений URL производителя: www.phpmyadmin.net.
к SQL-серверу в HP Web Jetadmin Решение: Установите последнюю версию 2.11.10 с сайта
Программа: HP Web Jetadmin 10.2 и более ранние вер- производителя.
сии.
Опасность: Низкая .
Наличие эксплоита: Нет.
Описание: Уязвимость существует из-за того, что не- Утечка памяти в CRYPTO_free_all_ex_data()
зашифрованные данные передаются к удаленным SQL- в OpenSSL
серверам. Удаленный пользователь может посредством Программа: OpenSSL 0.9.x.
атаки «человек посередине» получить доступ к данным Опасность: Низкая .
и вызвать отказ в обслуживании. Наличие эксплоита: Нет.
URL производителя: h20392.www2.hp.com/portal/ Описание: Уязвимость существует из-за того, что не-
swdepot/displayProductInfo.do?productNumber=J6052AA. которые приложения (например Apache с модулем PHP)
Решение: В настоящее время способов устранения уяз- вызывает преждевременно OpenSSL функцию CRYPTO_
вимости не существует. free_all_ex_data(). В некоторых случаях это может при-
вести к утечке памяти и вызвать отказ в обслуживании
системы.
URL производителя: www.openssl.org.
Решение: Установите исправление из CVS-репозитория
производителя.

Составил Александр Антипов

92 январь-февраль 2010 системный администратор


Веб

Визитка

КИРИЛЛ СУХОВ, веб-программист в дистрибьюторской компании MICS.


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

Google Web Toolkit –


современное средство создания Rich Internet Application
Любое интернет-приложение эпохи WEB2 – это
прежде всего «богатый» и функциональный пользо-
вательский интерфейс, выполненный с использова-
нием технологии Ajax, а следовательно, JavaScript

Его создание – довольно непростая, требующая скрупулез- вопрос. Создавать сложное веб-приложение на строго типи-
ности задача, на решение которой тратишь немало време- зированном ООП-языке, с возможностью нормального про-
ни – на отладку, обеспечение кроссбраузерной совмести- ектирования в любимой IDE, «человеческой» отладкой, Unit
мости, борьбу с капризами JavaScript и прочие вещи, мало тестированием ещё недавно казалось недостижимой мечтой.
имеющие общего с разработкой и проектированием реали- Google Web Toolkit во многом является воплощением этой
зации бизнес-логики. К счастью, уже создано немало инстру- мечты в жизнь. Процесс отладки приложения здесь гораздо
ментов, облегчающих эту задачу. Фрэймворк Google Web более лёгок и эффективен, так как наиболее распростра-
Toolkit пусть и не единственная предназначенная для этого нённые ошибки в JavaScript теперь всплывают во время
среда, но она уже успела себя зарекомендовать полнофунк- компиляции, а не выполнения, а такие ошибки, как несоот-
циональными, работоспособными RIA-приложениями. ветствие типов или отсутствие необходимых методов, выяв-
ляются ещё на стадии написания кода. Подсказки и автодо-
Что это? Зачем? полнение – нормальный функционал IDE, хоть и не жизненно
На первый вопрос ответить легко – это фрэймворк-среда, важный, но довольно существенно повышающий производи-
набор средств и API-интерфейсов для разработки веб-при- тельность, а полноценный рефакторинг (который также те-
ложений. Её отличительная особенность в том, что вся раз- перь доступен) в современных условиях просто необходим.
работка и, что существенно, отладка ведётся на Java с помо- Отдельно следует упомянуть про ООП-разработку. Реа-
щью привычной IDE (сейчас существуют плагины для Eclipce лизация этой концепции в JavaScript вызывает много спра-
и NetBeans) с последующей компиляцией готового приложе- ведливых нареканий и является причиной неоправданной
ния в HTML/JavaScript. Собственно, реальность использова- сложности разработки. В среде GWT вы программируете
ния сред разработки частично является ответом на второй на Java, и никаких проблем такого рода не возникает.

Рисунок 1. GWT работает! Рисунок 2. Скомпилированное GWT-приложение

94 январь-февраль 2010 системный администратор


Веб

Кроме того, при написании веб-приложений теперь можно Библиотеки GWT лицензированы под Apache License 2.0,
использовать такие привычные утилиты, как Jprofiler или Junit. что даёт полную свободу использования среды как в откры-
тых, так и в пропроетарных приложениях.
Как это работает?
Код пишется и отлаживается на Java с использованием ти- Как установить?
пов данных из пакетов java.lang и java.util, а также с новыми На компьютере должна быть установлена Java SDK версии
классами, предоставляемыми GWT. Поддерживаются все 1.5 или выше. Ещё одно требование – наличие Apache Ant,
внутренние типы Java (в том числе и Object). Поддержива- java-утилиты для автоматизации процесса сборки. Если её
ется работа с исключениями, в том числе и определяемыми нет, просто скачайте из сайта проекта (http://ant.apache.org)
пользователем. и распакуйте в любое удобное место, не забыв прописать
После отладки приложения при помощи GWT-компиля- переменную окружения ANT_HOME и путь к Ant/bin в пере-
тора создаётся приложение, использующее традицион- менной PATH. (Впрочем, при использовании Windows можно
ные веб-технологии – HTML/JavaScript/XML/JSON, которое прибегнуть к сценарию установки в составе дистрибутива.)
для GWT-приложения является аналогом бинарного пред- Сначала скачиваем дистрибутив с сайта code.google.com
ставления в Java. Но GWT это не совсем Java! (http://code.google.com/intl/ru/webtoolkit/download.html) и рас-
Прежде всего не поддерживается Reflection и динамиче- паковываем его в выбранную директорию. Собственно,
ская загрузка классов (что естественно, этот механизм про- на этом процесс установки закончен. Осталось только про-
сто невозможно перенести в JavaScript). Не поддерживает- писать путь к этой папке в системной переменной PATH.
ся сериализация. Не поддерживается модификатор Strict Для проверки работоспособности GWK перейдём в папку
Floating Point.(strictfp), предписывающий «строгую» ариф- /samples, расположенную в корневой папке установленно-
метику для чисел с плавающей точкой. Нет финализации го фрэймворка. Это примеры простейших приложений ис-
объекта перед сборкой мусора. пользования среды. Заходим (в консоли) в /samples/Hello
GWT-приложение как любое веб-приложение состоит и выполняем команду:
из клиентской (обрабатываемой в браузере) и серверной ant hosted
частей. Весь код, отвечающий за клиентский функционал,
в процессе компиляции переводится в html/javascript и, сле- Если всё правильно установлено, результат должен быть
довательно, имеет ряд естественных ограничений. похож на рис. 1. Этой командой мы запускаем приложение
Серверная часть приложения может вызываться кли- в так называемом размещённом (hosted) режиме. В нём оно
ентским кодом посредством асинхронных RPC-запросов. выполняется на виртуальной машине Java (JVM). Этот ре-
При этом серверный код выполняется отдельно от клиент- жим предназначен для отладки и разработки.
ского и не имеет каких-либо ограничений, накладываемых Мы видим два окна встроенного браузера, в первом
компиляцией в JavaScript. Более того, нет ограничений в вы- из них запущено само приложение, во втором отображается
боре технологий реализации серверной части программы. отладочная информация, в том числе данные Http-запросов.
Наряду с Java это может быть PHP, Perl, Python и т.д. Теперь откомпилируем наше приложение в HTML/Java
Механизм отложенного связывания (deffered binding), вы- Script. Для этого вызовем команду:
полняемого при генерации JavaScript, обеспечивает решение ant build
проблем с кроссбраузерной совместимостью и локализаци-
ей приложения. GWT компилирует различные версии прило- запускающую GWT-компилятор. Результат его работы мож-
жения под каждый браузер и локализацию. Во время запуска но увидеть в папке samples/Hello/war, раскрыв в браузере
клиентской части такого приложения в браузере определяет- файл MailBoxes.html. Как видим (см. рис. 2), всё прошло
ся нужная версия, она и поставляется пользователю. успешно. Правда, не впечатляет.

Рисунок 3. Почтовый клиент на JavaSxript Рисунок 4. Наше первое GWT-приложение

системный администратор январь-февраль 2010 95


Веб

Чтобы увидеть настоящее GWT-приложение, заглянем пускать. Воспользовавшись вышеописанными командами


в папку samples/Mail, где хранятся демонстрационные при- ant hosted и ant build, мы получим простейшее рабочее AJAX
меры приложений, проведем аналогичные действия. В ре- (а как же!) приложение (см. рис. 4). Как видите, оно состоит
зультате получим уже нечто вполне приемлемое (см. рис. 3). из поля ввода, куда следует поместить имя, и кнопки «От-
править», после нажатия на которую появляется ответ сер-
Первое приложение вера с приветствием, учитывающим ваши данные.
Теперь попробуем создать собственное простенькое GWT- Давайте теперь посмотрим, что у него внутри.
приложение. Для этого воспользуемся утилитой webApp GWT-приложения оформлены в виде модулей, их струк-
Creator, входящей в комплект GWT: тура подчиняется правилам, сходным с организацией па-
C:\www\gwt>webAppCreator -out MailBoxes com.samag.MailBoxes кетов в Java-приложении. Она определяется в xml-файле
(в нашем случае MessageBox.gwt.xml).
MailBoxes – это название нашего приложения (да-да, ин- Как уже говорилось, GWT-приложение состоит из двух
терфейс к почтовому серверу). После выполнения команды основных частей – клиентской и серверной. Клиентский код,
будет создано несколько папок и файлов в папке MailBoxes/, как нетрудно догадаться, содержится в MailBoxes\src\com\
которые составят скелет приложения и обеспечат базовый samag\client\. как и MailBoxes\src\com\samag\server\, он рас-
«Hello GWT» функционал: положен на одном уровне с конфигурационным файлом.
Created directory MailBoxes\src В папке MailBoxes\war\ расположены все веб-ресурсы
Created directory MailBoxes\war приложения – HTML, CSS, JavaScript файлы. Там же рас-
Created directory MailBoxes\war\WEB-INF положена директория WEB-INF, в которой содержатся ме-
Created directory MailBoxes\war\WEB-INF\lib
Created directory MailBoxes\src\com\samag таданные и GWT JavaScript-библиотека среды исполнения
Created directory MailBoxes\src\com\samag\client (GWT run-time JavaScript library).
Created directory MailBoxes\src\com\samag\server Если мы заглянем в исходный код файла MailBoxes\src\
Created file MailBoxes\src\com\samag\MailBoxes.gwt.xml
Created file MailBoxes\war\MailBoxes.html com\samag\client\MailBoxes.java (основного кода нашего при-
Created file MailBoxes\war\MailBoxes.css ложения), то обнаружим обычный Java-код. Вот кнопка Send:
Created file MailBoxes\war\WEB-INF\web.xml
Created file MailBoxes\src\com\samag\client\MailBoxes.java //Создание кнопки
Created file MailBoxes\src\com\samag\client\ final Button sendButton = new Button("Send");
GreetingService.java // Привязка её к таблице стилей
Created file MailBoxes\src\com\samag\client\ sendButton.addStyleName("sendButton");
GreetingServiceAsync.java // Добавление в панель приложения
Created file MailBoxes\src\com\samag\server\ RootPanel.get("sendButtonContainer").add(sendButton);
GreetingServiceImpl.java
Created file MailBoxes\build.xml
Created file MailBoxes\README.txt
Я не собираюсь пересказывать документацию [2], но ба-
Created file MailBoxes\.project зовые понятия изложить придется. Основной класс при-
Created file MailBoxes\.classpath ложения (в нашем случае MailBoxes) реализует интерфейс
Created file MailBoxes\MailBoxes.launch
Created file MailBoxes\war\WEB-INF\lib\gwt-servlet.jar EntryPoint. Его метод onModuleLoad() вызывается в тот мо-
мент, когда веб-страница с встроенным GW- модулем ото-
Скрипт webAppCreator создал несколько файлов в ката- бражается в браузере клиента. Все элементы визуального
логе MyApplication/, в том числе базовую функциональность интерфейса (кнопки, поля ввода, чекбоксы и т.д.) унасле-
«Hello, world» в классе. В корневой папке приложения по- дованы от суперкласса Widget. Все эти виджеты компону-
явился сценарий его сборки, для Ant – build.xml, следова- ются в рамках объекта класса Panel, который, разумеется,
тельно, наше приложение уже можно компилировать и за- сам является виджетом (его аналог в .Swing – Layout).

Рисунок 5. Устанавливаем Google Plugin Рисунок 6. GWT-приложение в IDE Eclipse

96 январь-февраль 2010 системный администратор


Веб

Компоновка в пространстве веб-страницы происходит <td id="resContainer"></td>


в элементы контейнера HTML (в данном случае sendButton </tr>
</table>
Container- это id HTML-элемента <td>), в который будет по-
мещена кнопка. Далее добавляется обработчик: Теперь в MailBoxes\src\com\samag\client\MailBoxes.java
добавляем новый виджет (в терминах данной среды кнопка
class MyHandler implements ClickHandler, KeyUpHandler {
public void onClick(ClickEvent event) { и прочие функциональные элементы графического интер-
sendNameToServer(); фейса – это именно виджеты (widgets). После кода создания
}
кнопки Send добавляем строчку:
...........................................
} final Button sendButton = new Button("Send");
final Button resButton = new Button("Reset");
И связывается с кнопкой:
Добавим этот виджет на главную панель приложения:
MyHandler handler = new MyHandler();
sendButton.addClickHandler(handler); RootPanel.get("sendButtonContainer").add(sendButton);
RootPanel.get("resContainer").add(resButton);
Мне кажется, что всё ясно. Про серверную часть пока
речь не ведём, а что касается компиляции в JavaScript/ Теперь следует связать кнопку с внешним событием
HTML, то сгенерированные JavaScript объекты загружают- (в данном случае с кликом по кнопке). Для этого в GWT су-
ся в контейнеры, обозначенные в шаблоне HTML-страницы ществуют различные интерфейсы.
(MailBoxes\war\MailBoxes.html). Поскольку наше приложение GWT предоставляет несколько интерфейсов Listener
сложностью не отличается, то и шаблон довольно прост: для улавливания событий (щелчков мыши, нажатия клавиа-
туры, изменения содержаний поля ввода и прочие, знако-
<table align="center">
<tr> мые по Javascript). Один из них – ClickHandler – отвечает за
<td colspan="2" style="font-weight:bold;"> ↵ обработку клика мыши. Напишем его реализацию:
Please enter your name:</td>
</tr> resButton.addClickHandler(new ClickHandler() {
<tr> public void onClick(ClickEvent event) {
<td id="nameFieldContainer"></td> nameField.setText("");
<td id="sendButtonContainer"></td> sendButton.setFocus(true);
</tr> }
</table> });

Теперь попробуем ввести какой-нибудь новый функци- Готово. Компилируем приложение и наслаждаемся но-
онал, например, добавим кнопку Reset, очищающую поле вым функционалом.
ввода. Прежде всего чуть преобразуем шаблон, добавив Всё это хорошо, но преимущества нового способа разра-
нужный контейнер: ботки совершенно не очевидны. Не для того мы совершали
столько телодвижений, чтобы учить ещё один диалект Java
<table align="center">
<tr> и отлавливать сообщения об ошибках в консоли. Сделаем
<td colspan="3" style="font-weight:bold;"> ↵ следующий шаг – подключим к разработке современную IDE.
Please enter your name:</td>
</tr>
<tr> Работа в IDE Eclipce
<td id="nameFieldContainer"></td> Сначала скачаваем и установливаем плагин для IDE Eclipse
<td id="sendButtonContainer"></td>
(http://code.google.com/intl/ru/eclipse). К слову сказать, если

Рисунок 7. Выводим список пользователей Рисунок 8. Применяем стили

системный администратор январь-февраль 2010 97


Веб

GWT ещё не установлены, это будет сделано на данном эта- final Grid mailGrid = new Grid(1,5);
пе автоматически (а заодно и SDK App Engine – средство mailGrid.setTitle("mailboxes");

разработки для платформы Google App Engine).


Инсталляция плагина несколько отличается для разных При этом вначале надо импортировать класс из соответ-
версий IDE. Для Eclipse 3.5 эта процедура выглядит следую- ствующего GWT-пакета:
щим образом: import com.google.gwt.user.client.ui.Grid;
Заходим в Help → Install New Software. В появившимся
окне в поле Work with вводим url: http://dl.google.com/eclipse/ В дальнейшем добавления почти любых новых элемен-
plugin/3.5, нажимаем Add. В появившейся форме вводим тов влечет за собой импорт необходимых пакетов, я не буду
название для источника обновлений (например, Google на этом останавливаться, так как их название подскажет
Updute) и после подтверждения выбираем необходимые IDE. Если лёгкий путь не для вас и разработка происходит
компоненты (см. рис. 5). Поскольку GWT SDK мы уже уста- в vi/notepad, можно воспользоваться описанием применяе-
новили, его можно пропустить. Далее остаётся только пару мых нами компонентов в документации.
раз нажать Next и принять лицензионное соглашение. Заполняем первый ряд таблицы (заголовки столбцов):
Теперь импортируем наше приложение в IDE. Для этого mailGrid.setText(0, 0, "ID");
нажимаем File → Import, в появившемся окне мастера вы- mailGrid.setText(0, 1, "Name");
mailGrid.setText(0, 2, "Email");
бираем General → Existsing Project into Workspace. В следую-
mailGrid.setText(0, 3, "Activity");
щем окне в поле Select root directory указываем путь до кор-
ня нашего приложения и жмём Finish. Приложение должно Далее заполним таблицу значениями.
появиться в левом окне Eclipse (см. рис. 6). this.getUsers(mailGrid);
Для включения поддержки GWT щёлкаем на проекте
правой кнопкой мыши. И в контекстном меню выбираем По-настоящему такие сведения должны предоставлять-
Google → Web Toolkit Setting. В появившемся окошке поме- ся по запросу к внешнему источнику (к базе данных или,
чаем чекбокс Use Google Web Toolkit. Если мы ставили GWT например, к LDAP), но мы договорились, что сейчас не об-
SDK не вместе с плагином, то, нажав на ссылку Configure ращаем внимания на серверную часть кода. Поэтому метод
SDK, указываем расположение фрэймворка. getUsers пока будет своеобразной заглушкой, впрочем,
не совсем бестолковой:
Разработка приложения private void getUsers(Grid grid) {
Теперь можно приступить к действительно полезным вещам. int rows;
В рамках поставленной задачи нам нужно вывести список int newRow;
String rid;
почтовых ящиков. С возможностью добавления новых, уда- rows=grid.getRowCount();
ления старых, а также активации/деактивации акаунтов. newRow=grid.insertRow(rows);
Список ящиков – это, очевидно, таблица. Чтобы вы- grid.setText(newRow, 0, "1");
grid.setText(newRow, 1, "Ivfnov");
брать подходящий объект из арсенала GWT, отправля- grid.setText(newRow,2, "ivanov@gwt.ru");
емся в галерею виджетов (http://code.google.com/intl/ru/ grid.setText(newRow, 3, "On");
webtoolkit/doc/1.6/DevGuide.html), представленную в доку-
rows=grid.getRowCount();
ментации фрэймворка, и выбираем наиболее подходящий newRow=grid.insertRow(rows);
объект для нашей задачи. В данном случае это будет Grid- grid.setText(newRow, 0, "2");
реализация абстрактного класса HTMLTable. grid.setText(newRow, 1, "Sidorov");
grid.setText(newRow, 2, "sidorov@gwt.ru");
Включаем его в наше приложение: grid.setText(newRow, 3, "On");

Затем создадим в HTML-шаблоне (MailBox.html) необхо-


Рисунок 9. Приложение готово! димый контейнер:
<div id="mailTable" align="center"></div>

Подключаем нашу таблицу к основной панели приложения:


RootPanel.get("mailTable").add(mailGrid);

После компиляции мы можем видеть ужасно выглядящую


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

mailGrid.setStyleName("emailTables");

98 январь-февраль 2010 системный администратор


Веб

И прописать его с таким названием в таблице стилей вые акаунты. Для этого добавим форму в последнем ряду
(MailBox/war/MailBox.ccs): таблицы. Сначала создадим необходимые виджеты (кото-
emailTables{
рые после компиляции станут полями html-формы):
font-size: 120%; final TextBox Name = new TextBox();
line-height: 1em; final TextBox Email = new TextBox();
background: url(images/hborder.gif) repeat-x; final CheckBox Activity = new CheckBox();
} Activity.setValue(true);

Любуемся результатом (см. рис. 8) и приступаем к соз- Создаём новый ряд таблицы и заполняем его виджетами:
данию функционала. Сначала обеспечим возможность уда-
int rows=mailGrid.getRowCount();
ления записи. Создадим виджет кнопки для удаления как int newRow=mailGrid.insertRow(rows);
самостоятельный класс, производный от класса Button (ко- mailGrid.setWidget(newRow, 1, Name);
торый в свою очередь произведён от Widget): mailGrid.setWidget(newRow, 2, Email);
mailGrid.setWidget(newRow, 3, Activity);
package com.samag.client; mailGrid.setWidget(newRow, 4, new Button("Add", ↵
import com.google.gwt.event.dom.client.ClickEvent; new ClickHandler() {
import com.google.gwt.event.dom.client.ClickHandler; public void onClick(ClickEvent event) {
import com.google.gwt.user.client.Window; this.addRow(mailGrid,Name.getValue(), ↵
import com.google.gwt.user.client.ui.Button; Email.getValue(),Activity.getValue());
import com.google.gwt.user.client.ui.Grid; }
public class delButton extends Button {
public delButton(final Grid grid,final int row) {
super("Delete", new ClickHandler() { В последнею ячейку мы помещаем новую кнопку, на этот
public void onClick(ClickEvent event) { раз не создавая нового класса, а просто привязывавя к объ-
Window.alert("Удаляем ряд"+row);
grid.removeRow(row);
екту класса Button новый хендлер. Метод addRow, конечно,
} нуждается в реализации:
});
} private void addRow(Grid mailGrid,String uName, String ↵
} uEmail, Boolean uActivity) {
if(uName.isEmpty() && uEmail.isEmpty()){
Я думаю, что по аналогии с кнопкой Reset тут всё понят- Window.alert("Не все параметры заполнены!");
return;
но. Новые только обращение к объекту Window, аналогу }
объекта window веб-страницы, и метод removeRow, который int rows=mailGrid.getRowCount();
«подсказал» Eclipse. Для того чтобы вставить эту кнопку String rid=String.valueOf(Integer.parseInt( ↵
mailGrid.getText(rows-2, 0))+1);
в список акаунтов, немного изменяем заполнение таблицы: int newRow=mailGrid.insertRow(rows-1);
mailGrid.setText(newRow, 0, rid);
newRow=grid.insertRow(rows);
mailGrid.setText(newRow, 1, uName);
grid.setText(newRow, 0, "1");
mailGrid.setText(newRow, 2, uEmail);
grid.setText(newRow, 1, "Иванов");
int turn = 0;
grid.setText(newRow,2, "ivanov@gwt.ru");
if(uActivity.booleanValue()){
grid.setText(newRow, 3, "On");
turn = 1;
grid.setWidget(newRow, 4, new delButton(grid,1));
}
ActiveButton uActive = ↵
На следующем этапе сделаем возможным активацию/ new ActiveButton(mailGrid,turn);
блокирование акаунтов. Для этого создадим ещё один вид- mailGrid.setWidget(newRow, 3, uActive);
mailGrid.setWidget(newRow,4, ↵
жет – кнопку-переключатель, найдя предварительно подхо- new delButton(mailGrid,newRow));
дящий класс (ToggleButton) в галерее виджетов: }

package com.samag.client;
import com.google.gwt.user.client.ui.Grid; Компилируем и проверяем результат (см. рис. 9). Обрати-
import com.google.gwt.user.client.ui.ToggleButton; те внимание, как мы совершенно безболезненно перешли
import com.google.gwt.user.client.Window; с Windows/Chrome на Linux/Firefox.
public class ActiveButton extends ToggleButton {
public ActiveButton(final Grid grid, int turn) { Для первого знакомства с технологией GWT пока до-
super("On", "Off"); статочно, но за рамками осталось, как всегда, самое ин-
if(turn!=1){
тересное – взаимодействие с сервером, передача данных,
this.setDown(true);
} удалённый вызов процедур, механизм DWR (Direct Web
public void onClick(ClickEvent event) { Remoting) и многое другое. Эти вопросы мы рассмотрим
Window.alert("Меняем активность");
}
во второй части статьи. EOF
}
1. Домашняя страница проекта – http://code.google.com/intl/ru/
Вносим изменение в заполнение таблицы: webtoolkit.
2. Документация по GWT – http://code.google.com/intl/ru/webtoolkit/
newRow=grid.insertRow(rows);
grid.setText(newRow, 0, "1"); doc/1.6/DevGuide.html; http://code.google.com/intl/ru/webtoolkit/
grid.setText(newRow, 1, "Ivanov"); doc/latest/DevGuide.html.
grid.setText(newRow,2, "ivanov@gwt.ru");
3. Доклад «Архитектура Google Web Toolkit: полезные советы
grid.setWidget(newRow, 3, new ActiveButton(grid,1));
grid.setWidget(newRow, 4, new delButton(grid,1)); по написанию приложений на GWT» на конференции Google
Developer Day 2009, Москва – http://www.youtube.com/watch?v=
Осталось создать возможность заносить в таблицу но- sjyy9WgaObc&feature=channelа.

системный администратор январь-февраль 2010 99


Dolce Vita

Визитка

ОЛЕГ ВОРОНИН, окончил Хмельницкий университет по специальности


инженер-системотехник. Хобби – программирование на всем, на чем можно
программировать

Три в одном
Управление Linux с помощью LIRC
Если хотите использовать ваш ПК в качестве ме-
диацентра, смотреть фильмы и слушать музыку,
не вставая с дивана, вам нужен LIRC!

Что такое LIRC? советский аналог КР142ЕН5 (левый вывод – вход, правый –
LIRC (Linux Infrared Remote Control) – набор драйверов выход, средний – заземляем) (см. рис. 4). Диод D1 подойдет
и программ для ОС Linux, предназначенный для приема сиг- любой.
налов от инфракрасных пультов дистанционного управле- Я собрал свой приемник навесным монтажом в корпусе
ния (ПДУ), передачи таких сигналов, а также для управления старой мыши (см. рис. 5).
другими программами с этих пультов. LIRC поддерживает
большое количество приемников/передатчиков сигнала Установка
и почти любой ПДУ. Для установки LIRC можно использовать два варианта:
Упрощенная схема работы LIRC изображена на рис. 1. сборка из исходных текстов или установка из готовых паке-
Сигналы от ПДУ принимаются приемником и с помощью тов вашего дистрибутива.
модуля ядра отображаются на виртуальное устройство /dev/ Установка из исходных текстов подробно описана в до-
lircX. Первый загруженный драйвер использует устройство кументации на странице http://www.lirc.org/install.html. Я же
/dev/lirc0, следующий – /dev/lirc1 и т.д. Эти сигналы декоди- устанавливал LIRC на свой Ubuntu 9.10 из менеджера паке-
руются демоном lircd, к которому могут подключаться другие тов. Просто установите lirc и lirc-x со всеми зависимостями.
программы через сокет /var/run/lirc/lircd. Программы, входя- Вы обнаружите у себя необходимые утилиты и демоны, а так-
щие в LIRC, такие как irexec, irxevent, а также любые другие, же документацию в каталоге /usr/share/doc/lirc/html. Драйве-
могут читать декодированные сигналы непосредственно ров в этих пакетах нет, они включены в стандартное ядро.
из этого сокета, а также с помощью библиотеки liblircclient.
Настройка LIRC
Простейший приемник Настройка LIRC сводится к ручной правке некоторого коли-
Тот, кто дружит с паяльником, без труда сможет собрать чества конфигурационных файлов.
дешевый приемник ИК-сигналов, подключающийся к по- В первую очередь нужно определиться с модулем ядра
следовательному порту компьютера. Схема его изображена принимающего устройства. В документации приведена та-
на рис. 2. блица поддерживаемого оборудования (/usr/share/doc/lirc/
Сигналы с ПДУ принимаются датчиком IC1 и поступают html/table.html), где можно узнать необходимый вам модуль
на вход DCD последовательного порта. Питание для датчика ядра, драйвер и типы ПДУ, которые данный приемник под-
берется с выхода RTS-порта, но поскольку ему нужно на- держивает. (Следует учесть, что некоторые приемники под-
пряжение +5 В, а на выходах стандартного COM-порта на- держивают любые пульты, а некоторые – только те, которые
пряжение около 10-12 В, то на элементах IC2, R1, D1 и C1 поставляются с ними в комплекте, в таблице они обозна-
собран преобразователь напряжения 12 В – 5 В (для рабо- чаются bundled.) К моему настольному компьютеру я под-
ты IC2 нужно входное напряжение не менее 7 В, поэтому ключал самодельный приемник, а на ноутбуке настраивал
на некоторых ноутбуках, где на выходах последовательно- встроенный инфракрасный порт (IrDA).
го порта меньшее напряжение, схема работать не будет). В первом случае нужно использовать модуль ядра lirc_
На схеме приведена разводка разъема последователь- serial:
ного порта с 9 выводами, если у вас 25-портовый разъем, $ sudo modprobe lirc_serial
то на нем DCD – 8-й вывод, GND – 7-й, а RTS – 4-й.
Датчик IC1 марки TSOP 1738 или аналогичный (пол- По умолчанию используется первый последовательный
ный список можно найти на странице http://www.lirc.org/ порт /dev/ttyS0, но вы можете это изменить, задав явно
receivers.html) (см. рис.3). Вместо 78L05 (IC2) можно взять адрес и прерывание порта:

100 январь-февраль 2010 системный администратор


Dolce Vita

Для установки LIRC есть два ва-


рианта: сборка из исходных тек-
стов или установка из готовых
пакетов вашего дистрибутива

$ sudo modprobe lirc_serial io=0x2f8 irq=3 parm: sense:Override autodetection of IR receiver


circuit (0 = active high, 1 = active low )
(bool)
Все параметры модуля можно посмотреть с помощью ко- parm: txsense:Sense of transmitter circuit
манды modinfo: (0 = active high, 1 = active low ) (bool)
parm: softcarrier:Software carrier (0 = off,
$ modinfo lirc_serial 1 = on) (bool)
parm: debug:Enable debugging messages (bool)
filename: /lib/modules/2.6.31-16-generic/kernel/
ubuntu/lirc/lirc_serial/lirc_serial.ko Здесь есть важный параметр type, который определяет
license: GPL
author: Ralph Metzler, Trent Piepho, Ben Pfaff, тип приемника, подключенного к последовательному порту
Christoph Bartelmus, Andrei Tanas (в нашем случае – 0). Один раз я долго не мог понять, почему
description: Infra-red receiver driver for serial ports. не работает прием, пока явно не задал тип приемника.
srcversion: B438F3E79E374F0A09BD6FC
depends: lirc_dev Иногда модуль не загружается, поскольку последова-
vermagic: 2.6.31-16-generic SMP mod_unload тельный порт уже занят:
modversions 586
parm: type:Hardware type (0 = home-brew, $ sudo modprobe lirc_serial
1 = IRdeo, 2 = IRdeo Remote, 3 = AnimaX,
4 = IgorPlug) (int) FATAL: Error inserting lirc_serial (/lib/modules/
parm: io:I/O address base (0x3f8 or 0x2f8) (int) 2.6.31-16-generic/kernel/ubuntu/lirc/lirc_serial/
parm: irq:Interrupt (4 or 3) (int) lirc_serial.ko): Device or resource busy
parm: share_irq:Share interrupts (0 = off,
1 = on) (bool) Тогда установите пакет setserial и выполните команду:

Рисунок 1. Упрощенная схема работы LIRC Рисунок 2. Схема приемника ИК-сигналов

системный администратор январь-февраль 2010 101


Dolce Vita

$ sudo setserial /dev/ttyS0 uart none Как видите, должен автоматически загрузиться и модуль
lirc_dev.
После этого модуль должен загрузиться. Если вы передаете модулю параметры, то вам нужно сде-
Примечание: если вы используете команду fuser лать так, чтобы они задавались автоматически. Для этого
для того, чтобы определить, какой процесс блокирует по- в каталоге /etc/modprobe.d создайте файл имя_модуля.conf
следовательный порт, у вас ничего не выйдет. Как указано и пропишите в нем необходимые параметры, например /etc/
в документации к LIRC, ядро Linux использует для последо- modprobe.d/lirc_serial.conf:
вательных портов стандартный драйвер в виде модуля или options lirc_serial io=0x2f8 type=0
встроенный в ядро. Этот драйвер «захватывает» все порты,
которые обнаружит, и поэтому драйверы LIRC (модули ядра) После этого ваш модуль будет автоматически загружать-
не могут эти порты использовать. Можно загрузить модуль ся с заданными параметрами.
LIRC раньше модуля ядра для стандартного COM-порта, После того как модули были успешно загружены, можно
но проблема в том, что обычно стандартный драйвер после- проверить работоспособность приемника с помощью про-
довательного порта не компилируется как модуль! Поэтому грамм mode2 или xmode2:
необходимо использовать setserial, который освобождает $ sudo xmode2 -d /dev/lirc0
захваченный порт.
Однако эти изменения сохраняются только до переза- Эти программы читают информацию из устройства, ука-
грузки компьютера, а вам нужно будет обеспечить запуск занного вами, и отображают ее на экране, mode2 – в тек-
setserial при каждой загрузке до запуска LIRC. Обычно стовом, а xmode2 – в графическом виде. У вас должно по-
это настраивается автоматически при установке пакета лучиться примерно как на рис. 6, это значит, что приемник
setserial, в таком случае в файл /var/lib/setserial/autoserial. работает!
conf добавьте строку: Теперь нам нужно настроить демон lircd, который занима-
/dev/ttyS0 uart none ется декодированием сигналов, поступающих с приемника,
в названия нажатых клавиш ПДУ.
Если автоматическая настройка у вас не прошла, по- Для конфигурации lircd используются два файла: /etc/lirc/
пробуйте другой способ, добавив строчку в файл /etc/init.d/ hardware.conf, который отвечает за настройку приемника,
boot.local: и /etc/lirc/lircd.conf, содержащий профили ПДУ, использую-
setserial /dev/ttyS0 uart none щиеся с приемником.
Файл /etc/lirc/hardware.conf простой и достаточно проком-
Для встроенного инфракрасного порта мне пришлось ментированный, поэтому настроить его не составит труда,
зайти в BIOS ноутбука и принудительно задать ему режим у меня вышел такой файл (для IrDA, встроенного в ноутбук):
IrDA и второй последовательный порт (io=0x2f8). После чего
#Пульт, можно вписать любое название
загружаем модуль lirc_sir: REMOTE="panasonic"
#Список автоматически загружаемых модулей
$ sudo modprobe lirc_sir io=0x2f8
REMOTE_MODULES="lirc_sir"
#Драйвер (см.таблицу /usr/share/doc/lirc/html/table.html)
Проверяем, все ли нормально: REMOTE_DRIVER="default"
#Устройство, с которого считывать сигнал
$ lsmod | grep lirc REMOTE_DEVICE="/dev/lirc0"
REMOTE_SOCKET=""
lirc_sir 15268 0 REMOTE_LIRCD_CONF=""
lirc_dev 10804 1 lirc_sir REMOTE_LIRCD_ARGS=""

Рисунок 3. Датчик IC1 марки TSOP 1738 Рисунок 4. Советский аналог КР142ЕН5 Рисунок 5. Приемник навесным монтажом в корпусе
старой мыши

102 январь-февраль 2010 системный администратор


Dolce Vita

#Передатчик Проще всего настроить программы первого типа. Они ис-


TRANSMITTER="None" пользуют библиотеку liblircclient и файл настройки ~/.lircrc.
TRANSMITTER_MODULES=""
TRANSMITTER_DRIVER="" Этот файл состоит из таких секций:
TRANSMITTER_DEVICE="" begin
TRANSMITTER_SOCKET="" prog = ...
TRANSMITTER_LIRCD_CONF="" remote = ...
TRANSMITTER_LIRCD_ARGS="" button = ...
[button = ...]
#Запускать lircd? repeat = ...
START_LIRCD="true" delay = ...
config = ...
#Автоматически загружать модули [config = ...]
LOAD_MODULES="true" mode = ...
flags = ...
Обязательно нужно задать параметры REMOTE_ end
MODULES, REMOTE_DRIVER, REMOTE_DEVICE.
Файл /etc/lirc/lircd.conf должен соответствовать вашему prog – имя программы, которая будет реагировать на дан-
ПДУ. Несколько готовых файлов устанавливаются вместе ную секцию, например mplayer.
с пакетом lirc, также огромная база ПДУ есть на сайте LIRC remote – название ПДУ, которым посылается сигнал.
(http://www.lirc.org/remotes). Возьмите файл с профилем ва- Должно соответствовать названию пульта в файле /etc/
шего пульта и скопируйте его в файл /etc/lirc/lircd.conf. Если lirc/lircd.conf. Можно в качестве имени пульта использо-
же вашего пульта в базе нет, не отчаивайтесь, вы можете вать знак звездочки (*), что будет означать любой ПДУ.
настроить его вручную с помощью команды irrecord: button – название клавиши ПДУ. Должно соответство-
$ sudo irrecord -d /dev/lirc0 lg.conf -n вать названию клавиши пульта в файле /etc/lirc/lircd.conf.
Можно в качестве имени клавиши использовать *, что бу-
Вам будет предложено понажимать все клавиши на ПДУ, дет означать любую клавишу ПДУ. Секций button может
а затем задать название для каждой клавиши. Если что-то быть несколько, что будет соответствовать последова-
пойдет не так, попробуйте ту же команду с дополнительным тельному нажатию нескольких клавиш.
параметром -f, который заставит irrecord не дешифровать repeat – задает поведение программы, если клавиша по-
коды, получаемые с пульта, что может помочь с некоторыми вторяется (длинное нажатие клавиши). При значении 0
ПДУ. На выходе у вас будет файл, имя которого вы задали, повторы клавиши игнорируются. При значении 1 дейст-
вам останется всего лишь скопировать его в файл /etc/lirc/ вие выполняется каждый повтор, при 2 – каждый второй
lircd.conf. Формат этого файла разбирать не будем, скажу повтор и т.д.
лишь, что в нем может находиться описание сразу несколь- delay – пропустить указанное число повторов клавиши,
ких пультов, но у них должны быть разные названия. перед тем как использовать конфигурацию repeat.
Все готово, можно запускать демон lircd: config – строка, которая будет передана программе prog
$ sudo service lirc start
при нажатии соответствующих клавиш. Если задается
несколько строк config, они будут отсылаться программе
* Loading LIRC modules [ OK ] по очереди, то есть при первом нажатии клавиши пере-
* Starting remote control daemon(s) : LIRC [ OK ]
дается первая строка, при втором – вторая, при третьем –
Если что-то пошло не так, еще раз проверьте конфигу- опять первая и т.д. Для каждой программы существуют
рационные файлы /etc/lirc/lircd.conf и /etc/lirc/hardware.conf. свои управляющие строки, которые можно найти в доку-
Если демон запустился, можно проверить его работу про- ментации к этой программе.
граммой irw, которая читает из сокета /var/run/lirc/lircd назва-
ния нажатых клавиш пульта. Просто запустите программу
и попробуйте понажимать клавиши: Рисунок 6. Проверка работоспособности приемника
В выводе программы первая колонка – код клавиши
$ irw

0000bffbf6fffff6 00 stop panas


0000bffbf6ff3f36 00 ff panas
0000bffbf6ff535a 00 down panas
0000bffbf6ff939a 00 vtr/tv panas
0000bffbf6fffff6 00 stop panas
0000bffbf6fffff6 01 stop panas

из файла /etc/lirc/lircd.conf, вторая – количество повторе-


ний нажатия, третья – название клавиши, четвертая – на-
звание ПДУ. Демон lircd настроен.

Использование LIRC
Теперь нам нужно настроить программы, которыми вы бу-
дете оперировать при помощи пульта управления. Есть два
типа таких программ: те, которые поддерживают управле-
ние через lirc, и те, которые о нем ничего не знают.

системный администратор январь-февраль 2010 103


Dolce Vita

mode – переводит программу в заданный режим. Вы мо- repeat = 1


жете группировать секции по режимам, причем эти сек- end
begin
ции будут выполняться только тогда, когда программа на- remote = panas
ходится в соответствующем режиме: prog = mplayer
button = rew
begin mode config = seek -30 0
... repeat = 1
end mode end

flag – флаги. Могут быть такими: Как вы видите, в каждой секции задается пульт стро-
once – секция выполняется один раз при входе в соот- кой remote=panas, программа prog=mplayer, кнопка пуль-
ветствующий режим mode; та button, и действие config, соответствующее указанной
quit – прекращает обработку файла, дальнейшие сек- кнопке. Для повторяющихся кнопок, таких как увеличение
ции рассматриваться не будут; и уменьшение громкости, обязательно задаем repeat=1,
mode – выйти из текущего режима; то есть когда мы держим кнопку нажатой, строка config пе-
startup_mode – запустить программу в режиме mode, редается в программу постоянно.
например: Примечание: если вы хотите облегчить создание фай-
begin ла конфигурации, попробуйте программу mythbuntu-lirc-
flags = startup_mode generator. Она попытается самостоятельно создать кон-
mode = browser
фигурационные файлы для программ mplayer, elisa, mythtv,
end
totem, vlc, xine, xmame и xmess, используя файл конфигура-
Файл .lircrc может получиться достаточно объемным, по- ции вашего ПДУ /etc/lirc/lircd.conf
этому удобно будет разбить его на части и подключать их Все эти секции распознаются уже работающей програм-
при помощи директивы include: мой mplayer, но ее еще нужно запустить. Тут нам на помощь
include ~/.lirc/xawtv придет программа irexec. Она предназначена для запуска
других программ с помощью ПДУ.
Давайте для примера сконфигурируем проигрыватель Задайте в файле ~/.lircrc секцию для irexec:
mplayer. Список команд для него можно получить, набрав:
begin
$ mplayer -input cmdlist remote = panas
button = vtr/tv
prog = irexec
Запишем такой код в файл .lircrc (допустим, у нас есть
config = gmplayer &
пульт с названием panas): end

begin
remote = panas Далее запускаем программу irexec в режиме демона:
prog = mplayer
$ irexec -d
button = operate
config = quit
end Нам нужно сделать, чтобы она запускалась автоматиче-
begin ски при входе в систему, например, выбрав «Система → Па-
remote = panas
prog = mplayer
раметры → Запускаемые приложения» в настройках Gnome
button = reset и добавив в список запускаемых программ irexec -d.
config = vo_fullscreen Теперь при нажатии кнопки vtr/tv пульта panas будет за-
end
begin
пущен gmplayer.
remote = panas Касательно программ, которые не поддерживают LIRC
prog = mplayer напрямую. Если они могут управляться с клавиатуры, то ис-
button = up
config = volume +10 пользуем программу irxevent, если же нет, то в LIRC есть
repeat = 1 эмулятор мыши.
end Программа irxevent позволяет эмулировать нажатие кла-
begin
remote = panas виш клавиатуры или кнопок мыши. Конфигурируется она
prog = mplayer опять же через файл ~/.lircrc таким образом:
button = down
config = volume -10 begin
repeat = 1 remote = panas
end button = display
begin prog = irxevent
remote = panas config = Key F CurrentWindow
prog = mplayer end
button = pause
config = pause
end
В данном случае нажатие клавиши <F> отправляется
в текущее окно.
begin Клавиши можно задавать так:
remote = panas
prog = mplayer [shift-][numlock-][ctrl-][alt-][meta-][mod3-][mod4-] ↵
button = ff [scrlock-]Keyname
config = seek +30 0

104 январь-февраль 2010 системный администратор


Dolce Vita

Например, ctrl-c, SHIFT-KP_Subtract и т.д. Названия кла- Обычно курсор мыши передвигается на один пиксель
виш берутся из файла /usr/include/X11/keysymdef.h. Кроме при каждом нажатии кнопки на пульте, но это очень медлен-
того, можно посылать нажатия не только в текущее окно, но. При использовании данной инструкции, если вы будете
но и в любое другое, поставив вместо CurrentWindow удерживать кнопку управления курсором, скорость переме-
имя окна или его идентификатор. Их можно узнать с помо- щения будет увеличиваться, после того как количество пов-
щью программы xwininfo. торов достигнет значения start, до значения repeat*multiplier,
Нажатия кнопок мыши эмулируются так: но не более max.
config = Button 1 15 95 Mplayer ACTIVATE <remote> <button>

где 1 – номер кнопки мыши, а 15 и 95 – координаты курсора, или


в которых производится нажатие. TOGGLE_ACTIVATE <remote> <button>
Опять же программу irxevent после настройки следует за-
пустить как демон: Задает кнопку пульта, после нажатия которой включа-
$ irxevent -d ется режим эмуляции мыши. При этом курсор проделает
на экране небольшой круг, сигнализируя о включении ре-
Замечу, что irxevent работает не очень надежно, поэтому жима. Если вы используете ACTIVATE, то режим отключа-
иногда лучше использовать xdotool. Она позволяет переда- ется нажатием любой кнопки пульта, которая отсутствует
вать целые строки другим программам, перемещать курсор в конфигурационном файле и не задействуется в эмуля-
мыши и даже переключать рабочие столы. Просто устано- ции. Если же используется TOGGLE_ACTIVATE, то выклю-
вите пакет xdotool и задайте конфигурацию для него через чение режима производится той же кнопкой, что и вклю-
программу irexec: чение.
begin MOVE_[ N [ E | W ] | E | S [ E | W ] | W ] <remote> <button>
remote = panas
button = display Задает кнопку пульта для перемещения курсора мыши
prog = irexec
в указанном направлении:
config = xdotool key ctrl+alt+n
end NW N NE
W X E
Здесь комбинация клавиш посылается в текущее окно. SW S SE
Если вам нужно отправить несколько клавиш в определен- MOVE_[IN|OUT] <remote> <button>
ное окно, можно использовать xdotool в скриптах. Вот при-
мер из документации, который позволяет вставить в адрес- Задает кнопку пульта для вращения колеса мыши вверх
ную строку Firefox содержимое буфера обмена: и вниз соответственно.
#!/bin/sh BUTTONx_CLICK <remote> <button>
# Activate Firefox and paste the clipboard contents
# into the url bar Назначает кнопку пульта для нажатия кнопки мы